Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
talentio をなんとかしようと頑張ってきた18ヶ月の旅路
Search
Shinichiro OGAWA
March 22, 2019
Technology
6
5.1k
talentio をなんとかしようと頑張ってきた18ヶ月の旅路
Shinichiro OGAWA
March 22, 2019
Tweet
Share
More Decks by Shinichiro OGAWA
See All by Shinichiro OGAWA
どう生きてきたか、どう生きるのか~シニアエンジニアの人生~
ogawa
0
11
talentio.comの裏側の改善と今後の展望〜エンジニアリングとプロダクトと〜
ogawa
0
1.4k
RubyとRailsの勉強のしかたとコミュニティの参加のしかた
ogawa
0
710
everyleaf.rb LT
ogawa
3
400
Git道場 技 本日の課題、 テクニックの解説
ogawa
7
7.3k
jpmobile futures
ogawa
2
230
SubversionからGitへ移行するときの問題について簡単に語る
ogawa
3
4.4k
Other Decks in Technology
See All in Technology
The Role of Developer Relations in AI Product Success.
giftojabu1
0
120
SREによる隣接領域への越境とその先の信頼性
shonansurvivors
2
510
ISUCONに強くなるかもしれない日々の過ごしかた/Findy ISUCON 2024-11-14
fujiwara3
8
860
DMARC 対応の話 - MIXI CTO オフィスアワー #04
bbqallstars
1
160
B2B SaaS × AI機能開発 〜テナント分離のパターン解説〜 / B2B SaaS x AI function development - Explanation of tenant separation pattern
oztick139
2
220
[CV勉強会@関東 ECCV2024 読み会] オンラインマッピング x トラッキング MapTracker: Tracking with Strided Memory Fusion for Consistent Vector HD Mapping (Chen+, ECCV24)
abemii
0
220
Terraform未経験の御様に対してどの ように導⼊を進めていったか
tkikuchi
2
430
TanStack Routerに移行するのかい しないのかい、どっちなんだい! / Are you going to migrate to TanStack Router or not? Which one is it?
kaminashi
0
580
リンクアンドモチベーション ソフトウェアエンジニア向け紹介資料 / Introduction to Link and Motivation for Software Engineers
lmi
4
300k
The Rise of LLMOps
asei
5
1.2k
20241120_JAWS_東京_ランチタイムLT#17_AWS認定全冠の先へ
tsumita
2
230
データプロダクトの定義からはじめる、データコントラクト駆動なデータ基盤
chanyou0311
2
280
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
269
27k
Done Done
chrislema
181
16k
Code Reviewing Like a Champion
maltzj
520
39k
What's in a price? How to price your products and services
michaelherold
243
12k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
42
9.2k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
The Cult of Friendly URLs
andyhume
78
6k
Become a Pro
speakerdeck
PRO
25
5k
Designing on Purpose - Digital PM Summit 2013
jponch
115
7k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Transcript
talentio をなんとかしようと頑張ってきた 18ヶ月の旅路 Rails Developer Meetup 2019 2019/03/22
Agenda Copyright © Talentio 2 • 自己紹介 • talentio とは
• 旅路 • 学びとまとめ
Copyright © Talentio 3 自己紹介 株式会社タレンティオ 取締役 CTO 小川 伸一郎
• 理学(博士) • 理論物理専攻(超低温物理) • 2003年 Web制作会社 • 2008年 株式会社イオレ • 2013年 クックパッド株式会社 • 2016年 レジャリーワークス合同会社 起業 • 2017年 株式会社タレンティオ CTO GitHub: rust Twitter: conceal_rs
Copyright © Talentio 4 自己紹介 • jpmobile developer • Rails
2.3.x 対応から開発を担当 • Tokyu.rb Co-Founder • 東急沿線(乗入含)に住まう Rubyist のためのコミュニティ • 日本全域をほぼ制覇 • 概要:懇親会しかしない勉強会(?) • TokyuRuby会議スタッフ(主に司会) • 飲み会+LT大会 • 次回 2019/06/29 に開催予定 • https://github.com/ruby-no-kai/official/issues/335
Copyright © Talentio 5 自己紹介 • Perl/PHP歴8年ぐらい • jcode.plとかの時代 •
PHP 3.x とかの時代から2007年ぐらいまで • Flash歴5年くらい • Macromediaの時代 • Ruby歴12年ぐらい • Ruby on Rails 1.2.3からの世代 • Emacs歴28年ぐらい • μEmacs(x68k)→xyzzy(Win)→Emacs(Linux/macOS)
Copyright © Talentio 6 talentioとは これまでの 人事の文化・慣習を変える 圧倒的なサービスを テクノロジーを駆使してつくりたい!
talentio.comのこれまでとこれから https://bit.ly/2CmOpFi
この話がためになる人たち Copyright © Talentio 8 • 途中参加のCTOになる予定の方 ◦ またはなりたい方 •
既存システムをなんとかしないといけない方 ◦ またはそうなる気がする人
旅路 Copyright © Talentio 9 入社前 2017/10 2018/01 2018/04 2018/07
2018/10 2019/01 入社直後 決めたこと まずはやり始める ちょっとずつ進める 一歩踏み込む準備 踏み込み開始 踏み込み中
入社前 2017/09 Copyright © Talentio 10 βテストが終わったぐらい
入社前 2017/09 Copyright © Talentio 11 • 2017/09に入社が決まる • 知っていたこと
◦ 過去の経緯を知っている人がいない ▪ よくある話なのであまり気にしてなかった ◦ PHP(Laravel)+ReactのSPA ▪ 最近のPHPを学び直した • Laravelは自由度が高いことを知る • PHPはそこまで変わってなかった
入社前 2017/09 Copyright © Talentio 12 • リポジトリにアクセスできるようになる ◦ アプリのリポジトリを見る
▪ DDDぽい? • DDD感はあるが... ◦ インフラリポジトリを見つける ▪ Ansibleだった • YAMLか... • 若干、不安な気持ちを抱えつつ入社を迎える
入社直後 2017/10 Copyright © Talentio 13 1.0をやった時の気持ち
入社直後 2017/10 Copyright © Talentio 14 • とりあえず環境構築しようとする ◦ ドキュメントはJIRA+Confluence+Trello
• VirtualBoxで構築開始 ◦ Apache + mod_php だったので ◦ そして頓挫 ◦ Ansibleタスクが動かない ▪ どうもパッケージが見つからない? • 社内で相談すると vbox ファイルが共有される ◦ 「これで作ってと言われたんです」と言われる
入社直後 2017/10 Copyright © Talentio 15 • 不安に思ってインフラリポジトリを確認する ◦ どうも現サーバと同じものが作れそうにない
• アプリの仕様を聞く ◦ 「たぶんこうです」みたいなこと言われる ◦ コードを読むが読みにくい ▪ DDDぽさはぽさだけだった(完) • 機能が既存コードのコピペで追加されている形跡を 見つける ◦ さらに似たような関数に大きな差分がある
入社直後 2017/10 Copyright © Talentio 16 • いろいろ考えて全部やり直すことを決意 ◦ 「なぜこう書いたのか」を説明する人がいない
▪ 謎のコピペが生まれる原因になる ◦ 設計思想がない ▪ DDDぽいだけだった... ◦ インフラが古い ▪ 古かった... • そして更新できそうになかった...
決めたこと 2017/10-2017/11 Copyright © Talentio 17 吉Pの気持ちがわかるターン
決めたこと 2017/10-2017/11 Copyright © Talentio 18 • Railsで作り直す ◦ Laravelは悪くはない
▪ 初期設計が異常なほど重要(だと感じた ◦ 複数人で開発するには指針が必要 ◦ なぜRailsか ▪ Railsの思想とエコシステム • MVC / CoC / DRY / RubyGems / etc... ▪ Rubyのコード品質に対する熱意 • みんな大好き Rubocop ▪ 単純にCTOの生産性が一番高い • 気合で乗り切れそう
決めたこと 2017/10-2017/11 Copyright © Talentio 19 • 作り直し方 ◦ 一気に進めない
▪ ビジネスを止めることになるのはNG • 本末転倒 ▪ そもそも人がいない • 一気に進められない ▪ 「ついでにリニューアル」とか言われる可能性 • だいたい失敗する ◦ 段階的に移行する ▪ 特定のAPIとか特定の画面とかだけ移行
決めたこと 2017/10-2017/11 Copyright © Talentio 20 • サービスをフルコンテナ化する ◦ いまどきOSのインストールとか設定とか...
◦ ECSなどの環境が整いつつある ◦ 開発マシンの依存をなくしたい
決めたこと 2017/10-2017/11 Copyright © Talentio 21 • Terraform + itamae
にする ◦ インフラの構成管理をちゃんとしたい ▪ 使ってない subnet とかある ▪ role は荒れ放題 ◦ コード化するしかない ▪ Terraform ◦ YAML で構成とか書きたくない ▪ やっぱ Ruby でしょう • itamae
決めたこと 2017/10-2017/11 Copyright © Talentio 22 • Kibelaを導入して情報共有方法を変更 ◦ Confluenceはとにかく重い
◦ Wikiだけじゃない何かが欲しかった • GitHub issues / Projects を積極的に使うようにする ◦ 結局 Pull Request と連動するので一元化するこ とに
決めたこと 2017/10-2017/11 Copyright © Talentio 23 • 意識したのはあたりまえということ ◦ 「〜するのはあたりまえだよね」と言うことはやる
▪ 世の中の流れに乗る • 無理はしないことも重視した ◦ 無理してもいいことはない ▪ 経験則と周りの話から
まずはやり始める 2017/10-2017/11 Copyright © Talentio 24 1.1xとかの時代
まずはやり始める 2017/10-2017/11 Copyright © Talentio 25 • Rails 化 ◦
まずは rails new ◦ 若干貧弱だった社内向け管理画面を黙々と作る ことに ▪ 利点 • 表示するだけだがモデルを移植していける • 書き込みさえしなければ多少のバグは許さ れる ◦ 社内向けなので
まずはやり始める 2017/10-2017/11 Copyright © Talentio 26 • Docker 化 ◦
ひとまず手元の開発環境から Docker 化すること にした ▪ むしろやらないと開発しにくい... ◦ docker-compose でミドルウェアも起動するよう にした ▪ いちいち MySQL とか起動するの面倒だし ◦ ハマりどころはいろいろあった ▪ が、先人の知恵を拝借してなんとかできた
まずはやり始める 2017/10-2017/11 Copyright © Talentio 27 • Terraform & itamae
導入 ◦ やるしかないのでがんばった... ▪ YAMLの解きほぐし ▪ Terraforming も一部利用 • kuroko2 の導入 ◦ crontab 使ってたのでなんとかしたかった ▪ いろいろ迷ったが Rails 製なので採用 ▪ 困ったときにいろいろ聞きやすかった • 前職のおかげ
ちょっとずつ進める 2017/12-2018/03 Copyright © Talentio 28 新生を作り始める
ちょっとずつ進める 2017/12-2018/03 Copyright © Talentio 29 • 本番サービスの一部 Docker 化
(ECS(EC2)) ◦ デプロイには hako を利用 ▪ ruboty で Slack からデプロイできるようにして いる • 開発中の確認環境も ECS 化 ◦ Terraform / hako YAML(Jsonnet)のコピペで量 産可能になった
ちょっとずつ進める 2017/12-2018/03 Copyright © Talentio 30 • 監視に Prometheus /
Grafana を使う ◦ 自前で何とかする場合はこれかなという気持ちで 導入(費用感も考慮して ▪ node-exporter を動かすようにしておく ▪ あとは CloudWatch からで • これでだいたいなんとかなる • このあたりでエンジニア2名入社 ◦ Docker化しておいたのが功を奏して、初期のとき ほど大変な状態ではなくなる ◦ 「昔は vbox ファイルというのがあってだな...」み たいな老害トークできるほどには簡単になる
一歩踏み込む準備 2018/03-2018/09 Copyright © Talentio 31 1.xx終盤
一歩踏み込む準備 2018/03-2018/09 Copyright © Talentio 32 • このあたりでエンジニア1名入社 • バックエンドの一部をRailsで動かす試み
◦ LaravelのセッションをRailsで読めるようにする ▪ Cookie あれこれは jpmobile で経験済み ▪ セッションデータベースをなんとかする • 中身は PHP オブジェクト ◦ どうするか
一歩踏み込む準備 2018/03-2018/09 Copyright © Talentio 33 • バックエンドの一部をRailsで動かす試み ◦ LaravelのセッションをRailsで読めるようにする
▪ 調べると php-serialize というのがあった • 便利な世の中... ◦ いろいろわかったので勢いで実装 ▪ ある程度は普通に動いた • が、問題はあった
一歩踏み込む準備 2018/03-2018/09 Copyright © Talentio 34 • バックエンドの一部をRailsで動かす試み ◦ JSONが入っている
text カラム ▪ よくあるやつがつらいやつ • 特に PHP だと空の連想配列が [] になる ◦ Rails ではHashにならない... ▪ いろいろやってくれるモジュールを頑張って作る • 微妙に異なるモジュールができあがる ◦ なんとか負債 ◦ まあ、そんなこんなで下準備はできた
一歩踏み込む準備 2018/03-2018/09 Copyright © Talentio 35 • メール配信にSaaS(SendGrid)を使うことにした ◦ メールサーバの管理(特に受信)は非常に面倒
▪ 前々職でいろいろ経験したので、やらないほう がいいことはわかっていた • メールサーバを管理したい人はいないは ず...
一歩踏み込む準備 2018/03-2018/09 Copyright © Talentio 36 • Fargate 活用 ◦
そうこうしている間に Fargate が日本リージョンに やってきた ▪ hako も対応していたので部分的に Fargate 化を進める • 思った以上に簡単に終わる ◦ メンテナンスしなくてもいいのが便利 ▪ 少人数チームだと運用コストが馬鹿にならな いので ◦ 流れに乗らなきゃ...!!
踏み込み開始 2018/10-2019/01 Copyright © Talentio 37 1.xx終盤
踏み込み開始 2018/10-2019/01 Copyright © Talentio 38 • このあたりでエンジニア2名入社 ◦ インフラ担当する人が入ったので色々捗り始める
• 完全 Fargate 化 ◦ サービスで使っているのは全て Fargate になっ た ▪ サーバの面倒見なくていいので運用が楽 • ecs-agent の update とか
踏み込み開始 2018/10-2019/01 Copyright © Talentio 39 • バックエンドに Rails を使い始める
◦ 下準備が功を奏して思ったよりはサッと動いた ▪ 徐々に移行を進める • 新しい機能のAPIは基本的に Rails で • 既存のAPIの改修は既存のままで ▪ 無理しないスタイル • 無理するといろいろほころびが生まれる ◦ 身体的 / 精神的 / etc… • 一部画面を Rails 化 ◦ β版のような感じで進めているところ
踏み込み中 2019/02- Copyright © Talentio 40 2.0に向けて
踏み込み中 2019/02-現在 Copyright © Talentio 41 • このあたりでエンジニア1名入社 • 監視に
DataDog を入れようとする ◦ Prometheus に限界を感じる ▪ exporter 用意するのがまあまあ大変 ▪ Prometheus / Grafana の管理運用もわりと 面倒 • Pull 型だから、そこそこリソースが必要 ◦ そのあたりをうまくやってくれる SaaS として DataDog
踏み込み中 2019/02- Copyright © Talentio 42 • Kubernates に移行を開始する ◦
エコシステムの成長が速く継続性もあるものを使 うのがいいと思う ▪ 世の流れに乗ると言うのもある ◦ とは言えすぐにはしない ▪ 社内でノウハウが溜まったら
学びとまとめ Copyright © Talentio 43
学びとまとめ Copyright © Talentio 44 • よくあることは、ほんとうによくある ◦ そういう心構えが重要 •
ダメだと思ったら素早い意思決定が重要 ◦ 迷う時間の無駄 • 小さく始められるところから徐々にやっていく ◦ 一気にやろうとするとつらみが溢れる • 主導者の好みを重視する ◦ モチベーション重要 • 世の中の流れに乗る ◦ ちゃんと追従することにも意義がある