Upgrade to Pro — share decks privately, control downloads, hide ads and more …

talentio をなんとかしようと頑張ってきた18ヶ月の旅路

talentio をなんとかしようと頑張ってきた18ヶ月の旅路

Shinichiro OGAWA

March 22, 2019
Tweet

More Decks by Shinichiro OGAWA

Other Decks in Technology

Transcript

  1. talentio をなんとかしようと頑張ってきた
    18ヶ月の旅路
    Rails Developer Meetup 2019
    2019/03/22

    View Slide

  2. Agenda
    Copyright © Talentio 2
    ● 自己紹介
    ● talentio とは
    ● 旅路
    ● 学びとまとめ

    View Slide

  3. Copyright © Talentio 3
    自己紹介
    株式会社タレンティオ
    取締役 CTO 小川 伸一郎
    • 理学(博士)
    • 理論物理専攻(超低温物理)
    • 2003年 Web制作会社
    • 2008年 株式会社イオレ
    • 2013年 クックパッド株式会社
    • 2016年 レジャリーワークス合同会社 起業
    • 2017年 株式会社タレンティオ CTO
    GitHub: rust
    Twitter: conceal_rs

    View Slide

  4. 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

    View Slide

  5. 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)

    View Slide

  6. Copyright © Talentio 6
    talentioとは
    これまでの
    人事の文化・慣習を変える
    圧倒的なサービスを
    テクノロジーを駆使してつくりたい!

    View Slide

  7. talentio.comのこれまでとこれから
    https://bit.ly/2CmOpFi

    View Slide

  8. この話がためになる人たち
    Copyright © Talentio 8
    ● 途中参加のCTOになる予定の方
    ○ またはなりたい方
    ● 既存システムをなんとかしないといけない方
    ○ またはそうなる気がする人

    View Slide

  9. 旅路
    Copyright © Talentio 9
    入社前
    2017/10 2018/01 2018/04 2018/07 2018/10 2019/01
    入社直後
    決めたこと
    まずはやり始める
    ちょっとずつ進める
    一歩踏み込む準備
    踏み込み開始
    踏み込み中

    View Slide

  10. 入社前 2017/09
    Copyright © Talentio 10
    βテストが終わったぐらい

    View Slide

  11. 入社前 2017/09
    Copyright © Talentio 11
    ● 2017/09に入社が決まる
    ● 知っていたこと
    ○ 過去の経緯を知っている人がいない
    ■ よくある話なのであまり気にしてなかった
    ○ PHP(Laravel)+ReactのSPA
    ■ 最近のPHPを学び直した
    ● Laravelは自由度が高いことを知る
    ● PHPはそこまで変わってなかった

    View Slide

  12. 入社前 2017/09
    Copyright © Talentio 12
    ● リポジトリにアクセスできるようになる
    ○ アプリのリポジトリを見る
    ■ DDDぽい?
    ● DDD感はあるが...
    ○ インフラリポジトリを見つける
    ■ Ansibleだった
    ● YAMLか...
    ● 若干、不安な気持ちを抱えつつ入社を迎える

    View Slide

  13. 入社直後 2017/10
    Copyright © Talentio 13
    1.0をやった時の気持ち

    View Slide

  14. 入社直後 2017/10
    Copyright © Talentio 14
    ● とりあえず環境構築しようとする
    ○ ドキュメントはJIRA+Confluence+Trello
    ● VirtualBoxで構築開始
    ○ Apache + mod_php だったので
    ○ そして頓挫
    ○ Ansibleタスクが動かない
    ■ どうもパッケージが見つからない?
    ● 社内で相談すると vbox ファイルが共有される
    ○ 「これで作ってと言われたんです」と言われる

    View Slide

  15. 入社直後 2017/10
    Copyright © Talentio 15
    ● 不安に思ってインフラリポジトリを確認する
    ○ どうも現サーバと同じものが作れそうにない
    ● アプリの仕様を聞く
    ○ 「たぶんこうです」みたいなこと言われる
    ○ コードを読むが読みにくい
    ■ DDDぽさはぽさだけだった(完)
    ● 機能が既存コードのコピペで追加されている形跡を
    見つける
    ○ さらに似たような関数に大きな差分がある

    View Slide

  16. 入社直後 2017/10
    Copyright © Talentio 16
    ● いろいろ考えて全部やり直すことを決意
    ○ 「なぜこう書いたのか」を説明する人がいない
    ■ 謎のコピペが生まれる原因になる
    ○ 設計思想がない
    ■ DDDぽいだけだった...
    ○ インフラが古い
    ■ 古かった...
    ● そして更新できそうになかった...

    View Slide

  17. 決めたこと 2017/10-2017/11
    Copyright © Talentio 17
    吉Pの気持ちがわかるターン

    View Slide

  18. 決めたこと 2017/10-2017/11
    Copyright © Talentio 18
    ● Railsで作り直す
    ○ Laravelは悪くはない
    ■ 初期設計が異常なほど重要(だと感じた
    ○ 複数人で開発するには指針が必要
    ○ なぜRailsか
    ■ Railsの思想とエコシステム
    ● MVC / CoC / DRY / RubyGems / etc...
    ■ Rubyのコード品質に対する熱意
    ● みんな大好き Rubocop
    ■ 単純にCTOの生産性が一番高い
    ● 気合で乗り切れそう

    View Slide

  19. 決めたこと 2017/10-2017/11
    Copyright © Talentio 19
    ● 作り直し方
    ○ 一気に進めない
    ■ ビジネスを止めることになるのはNG
    ● 本末転倒
    ■ そもそも人がいない
    ● 一気に進められない
    ■ 「ついでにリニューアル」とか言われる可能性
    ● だいたい失敗する
    ○ 段階的に移行する
    ■ 特定のAPIとか特定の画面とかだけ移行

    View Slide

  20. 決めたこと 2017/10-2017/11
    Copyright © Talentio 20
    ● サービスをフルコンテナ化する
    ○ いまどきOSのインストールとか設定とか...
    ○ ECSなどの環境が整いつつある
    ○ 開発マシンの依存をなくしたい

    View Slide

  21. 決めたこと 2017/10-2017/11
    Copyright © Talentio 21
    ● Terraform + itamae にする
    ○ インフラの構成管理をちゃんとしたい
    ■ 使ってない subnet とかある
    ■ role は荒れ放題
    ○ コード化するしかない
    ■ Terraform
    ○ YAML で構成とか書きたくない
    ■ やっぱ Ruby でしょう
    ● itamae

    View Slide

  22. 決めたこと 2017/10-2017/11
    Copyright © Talentio 22
    ● Kibelaを導入して情報共有方法を変更
    ○ Confluenceはとにかく重い
    ○ Wikiだけじゃない何かが欲しかった
    ● GitHub issues / Projects を積極的に使うようにする
    ○ 結局 Pull Request と連動するので一元化するこ
    とに

    View Slide

  23. 決めたこと 2017/10-2017/11
    Copyright © Talentio 23
    ● 意識したのはあたりまえということ
    ○ 「〜するのはあたりまえだよね」と言うことはやる
    ■ 世の中の流れに乗る
    ● 無理はしないことも重視した
    ○ 無理してもいいことはない
    ■ 経験則と周りの話から

    View Slide

  24. まずはやり始める 2017/10-2017/11
    Copyright © Talentio 24
    1.1xとかの時代

    View Slide

  25. まずはやり始める 2017/10-2017/11
    Copyright © Talentio 25
    ● Rails 化
    ○ まずは rails new
    ○ 若干貧弱だった社内向け管理画面を黙々と作る
    ことに
    ■ 利点
    ● 表示するだけだがモデルを移植していける
    ● 書き込みさえしなければ多少のバグは許さ
    れる
    ○ 社内向けなので

    View Slide

  26. まずはやり始める 2017/10-2017/11
    Copyright © Talentio 26
    ● Docker 化
    ○ ひとまず手元の開発環境から Docker 化すること
    にした
    ■ むしろやらないと開発しにくい...
    ○ docker-compose でミドルウェアも起動するよう
    にした
    ■ いちいち MySQL とか起動するの面倒だし
    ○ ハマりどころはいろいろあった
    ■ が、先人の知恵を拝借してなんとかできた

    View Slide

  27. まずはやり始める 2017/10-2017/11
    Copyright © Talentio 27
    ● Terraform & itamae 導入
    ○ やるしかないのでがんばった...
    ■ YAMLの解きほぐし
    ■ Terraforming も一部利用
    ● kuroko2 の導入
    ○ crontab 使ってたのでなんとかしたかった
    ■ いろいろ迷ったが Rails 製なので採用
    ■ 困ったときにいろいろ聞きやすかった
    ● 前職のおかげ

    View Slide

  28. ちょっとずつ進める 2017/12-2018/03
    Copyright © Talentio 28
    新生を作り始める

    View Slide

  29. ちょっとずつ進める 2017/12-2018/03
    Copyright © Talentio 29
    ● 本番サービスの一部 Docker 化 (ECS(EC2))
    ○ デプロイには hako を利用
    ■ ruboty で Slack からデプロイできるようにして
    いる
    ● 開発中の確認環境も ECS 化
    ○ Terraform / hako YAML(Jsonnet)のコピペで量
    産可能になった

    View Slide

  30. ちょっとずつ進める 2017/12-2018/03
    Copyright © Talentio 30
    ● 監視に Prometheus / Grafana を使う
    ○ 自前で何とかする場合はこれかなという気持ちで
    導入(費用感も考慮して
    ■ node-exporter を動かすようにしておく
    ■ あとは CloudWatch からで
    ● これでだいたいなんとかなる
    ● このあたりでエンジニア2名入社
    ○ Docker化しておいたのが功を奏して、初期のとき
    ほど大変な状態ではなくなる
    ○ 「昔は vbox ファイルというのがあってだな...」み
    たいな老害トークできるほどには簡単になる

    View Slide

  31. 一歩踏み込む準備 2018/03-2018/09
    Copyright © Talentio 31
    1.xx終盤

    View Slide

  32. 一歩踏み込む準備 2018/03-2018/09
    Copyright © Talentio 32
    ● このあたりでエンジニア1名入社
    ● バックエンドの一部をRailsで動かす試み
    ○ LaravelのセッションをRailsで読めるようにする
    ■ Cookie あれこれは jpmobile で経験済み
    ■ セッションデータベースをなんとかする
    ● 中身は PHP オブジェクト
    ○ どうするか

    View Slide

  33. 一歩踏み込む準備 2018/03-2018/09
    Copyright © Talentio 33
    ● バックエンドの一部をRailsで動かす試み
    ○ LaravelのセッションをRailsで読めるようにする
    ■ 調べると php-serialize というのがあった
    ● 便利な世の中...
    ○ いろいろわかったので勢いで実装
    ■ ある程度は普通に動いた
    ● が、問題はあった

    View Slide

  34. 一歩踏み込む準備 2018/03-2018/09
    Copyright © Talentio 34
    ● バックエンドの一部をRailsで動かす試み
    ○ JSONが入っている text カラム
    ■ よくあるやつがつらいやつ
    ● 特に PHP だと空の連想配列が [] になる
    ○ Rails ではHashにならない...
    ■ いろいろやってくれるモジュールを頑張って作る
    ● 微妙に異なるモジュールができあがる
    ○ なんとか負債
    ○ まあ、そんなこんなで下準備はできた

    View Slide

  35. 一歩踏み込む準備 2018/03-2018/09
    Copyright © Talentio 35
    ● メール配信にSaaS(SendGrid)を使うことにした
    ○ メールサーバの管理(特に受信)は非常に面倒
    ■ 前々職でいろいろ経験したので、やらないほう
    がいいことはわかっていた
    ● メールサーバを管理したい人はいないは
    ず...

    View Slide

  36. 一歩踏み込む準備 2018/03-2018/09
    Copyright © Talentio 36
    ● Fargate 活用
    ○ そうこうしている間に Fargate が日本リージョンに
    やってきた
    ■ hako も対応していたので部分的に Fargate
    化を進める
    ● 思った以上に簡単に終わる
    ○ メンテナンスしなくてもいいのが便利
    ■ 少人数チームだと運用コストが馬鹿にならな
    いので
    ○ 流れに乗らなきゃ...!!

    View Slide

  37. 踏み込み開始 2018/10-2019/01
    Copyright © Talentio 37
    1.xx終盤

    View Slide

  38. 踏み込み開始 2018/10-2019/01
    Copyright © Talentio 38
    ● このあたりでエンジニア2名入社
    ○ インフラ担当する人が入ったので色々捗り始める
    ● 完全 Fargate 化
    ○ サービスで使っているのは全て Fargate になっ

    ■ サーバの面倒見なくていいので運用が楽
    ● ecs-agent の update とか

    View Slide

  39. 踏み込み開始 2018/10-2019/01
    Copyright © Talentio 39
    ● バックエンドに Rails を使い始める
    ○ 下準備が功を奏して思ったよりはサッと動いた
    ■ 徐々に移行を進める
    ● 新しい機能のAPIは基本的に Rails で
    ● 既存のAPIの改修は既存のままで
    ■ 無理しないスタイル
    ● 無理するといろいろほころびが生まれる
    ○ 身体的 / 精神的 / etc…
    ● 一部画面を Rails 化
    ○ β版のような感じで進めているところ

    View Slide

  40. 踏み込み中 2019/02-
    Copyright © Talentio 40
    2.0に向けて

    View Slide

  41. 踏み込み中 2019/02-現在
    Copyright © Talentio 41
    ● このあたりでエンジニア1名入社
    ● 監視に DataDog を入れようとする
    ○ Prometheus に限界を感じる
    ■ exporter 用意するのがまあまあ大変
    ■ Prometheus / Grafana の管理運用もわりと
    面倒
    ● Pull 型だから、そこそこリソースが必要
    ○ そのあたりをうまくやってくれる SaaS として
    DataDog

    View Slide

  42. 踏み込み中 2019/02-
    Copyright © Talentio 42
    ● Kubernates に移行を開始する
    ○ エコシステムの成長が速く継続性もあるものを使
    うのがいいと思う
    ■ 世の流れに乗ると言うのもある
    ○ とは言えすぐにはしない
    ■ 社内でノウハウが溜まったら

    View Slide

  43. 学びとまとめ
    Copyright © Talentio 43

    View Slide

  44. 学びとまとめ
    Copyright © Talentio 44
    ● よくあることは、ほんとうによくある
    ○ そういう心構えが重要
    ● ダメだと思ったら素早い意思決定が重要
    ○ 迷う時間の無駄
    ● 小さく始められるところから徐々にやっていく
    ○ 一気にやろうとするとつらみが溢れる
    ● 主導者の好みを重視する
    ○ モチベーション重要
    ● 世の中の流れに乗る
    ○ ちゃんと追従することにも意義がある

    View Slide