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

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

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

Bdc7289e63942cab976555025ce9fb3b?s=128

Shinichiro OGAWA

March 22, 2019
Tweet

Transcript

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

  2. Agenda Copyright © Talentio 2 • 自己紹介 • talentio とは

    • 旅路 • 学びとまとめ
  3. Copyright © Talentio 3 自己紹介 株式会社タレンティオ 取締役 CTO 小川 伸一郎

    • 理学(博士) • 理論物理専攻(超低温物理) • 2003年 Web制作会社 • 2008年 株式会社イオレ • 2013年 クックパッド株式会社 • 2016年 レジャリーワークス合同会社 起業 • 2017年 株式会社タレンティオ CTO GitHub: rust Twitter: conceal_rs
  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
  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)
  6. Copyright © Talentio 6 talentioとは これまでの 人事の文化・慣習を変える 圧倒的なサービスを テクノロジーを駆使してつくりたい!

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

  8. この話がためになる人たち Copyright © Talentio 8 • 途中参加のCTOになる予定の方 ◦ またはなりたい方 •

    既存システムをなんとかしないといけない方 ◦ またはそうなる気がする人
  9. 旅路 Copyright © Talentio 9 入社前 2017/10 2018/01 2018/04 2018/07

    2018/10 2019/01 入社直後 決めたこと まずはやり始める ちょっとずつ進める 一歩踏み込む準備 踏み込み開始 踏み込み中
  10. 入社前 2017/09 Copyright © Talentio 10 βテストが終わったぐらい

  11. 入社前 2017/09 Copyright © Talentio 11 • 2017/09に入社が決まる • 知っていたこと

    ◦ 過去の経緯を知っている人がいない ▪ よくある話なのであまり気にしてなかった ◦ PHP(Laravel)+ReactのSPA ▪ 最近のPHPを学び直した • Laravelは自由度が高いことを知る • PHPはそこまで変わってなかった
  12. 入社前 2017/09 Copyright © Talentio 12 • リポジトリにアクセスできるようになる ◦ アプリのリポジトリを見る

    ▪ DDDぽい? • DDD感はあるが... ◦ インフラリポジトリを見つける ▪ Ansibleだった • YAMLか... • 若干、不安な気持ちを抱えつつ入社を迎える
  13. 入社直後 2017/10 Copyright © Talentio 13 1.0をやった時の気持ち

  14. 入社直後 2017/10 Copyright © Talentio 14 • とりあえず環境構築しようとする ◦ ドキュメントはJIRA+Confluence+Trello

    • VirtualBoxで構築開始 ◦ Apache + mod_php だったので ◦ そして頓挫 ◦ Ansibleタスクが動かない ▪ どうもパッケージが見つからない? • 社内で相談すると vbox ファイルが共有される ◦ 「これで作ってと言われたんです」と言われる
  15. 入社直後 2017/10 Copyright © Talentio 15 • 不安に思ってインフラリポジトリを確認する ◦ どうも現サーバと同じものが作れそうにない

    • アプリの仕様を聞く ◦ 「たぶんこうです」みたいなこと言われる ◦ コードを読むが読みにくい ▪ DDDぽさはぽさだけだった(完) • 機能が既存コードのコピペで追加されている形跡を 見つける ◦ さらに似たような関数に大きな差分がある
  16. 入社直後 2017/10 Copyright © Talentio 16 • いろいろ考えて全部やり直すことを決意 ◦ 「なぜこう書いたのか」を説明する人がいない

    ▪ 謎のコピペが生まれる原因になる ◦ 設計思想がない ▪ DDDぽいだけだった... ◦ インフラが古い ▪ 古かった... • そして更新できそうになかった...
  17. 決めたこと 2017/10-2017/11 Copyright © Talentio 17 吉Pの気持ちがわかるターン

  18. 決めたこと 2017/10-2017/11 Copyright © Talentio 18 • Railsで作り直す ◦ Laravelは悪くはない

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

    ▪ ビジネスを止めることになるのはNG • 本末転倒 ▪ そもそも人がいない • 一気に進められない ▪ 「ついでにリニューアル」とか言われる可能性 • だいたい失敗する ◦ 段階的に移行する ▪ 特定のAPIとか特定の画面とかだけ移行
  20. 決めたこと 2017/10-2017/11 Copyright © Talentio 20 • サービスをフルコンテナ化する ◦ いまどきOSのインストールとか設定とか...

    ◦ ECSなどの環境が整いつつある ◦ 開発マシンの依存をなくしたい
  21. 決めたこと 2017/10-2017/11 Copyright © Talentio 21 • Terraform + itamae

    にする ◦ インフラの構成管理をちゃんとしたい ▪ 使ってない subnet とかある ▪ role は荒れ放題 ◦ コード化するしかない ▪ Terraform ◦ YAML で構成とか書きたくない ▪ やっぱ Ruby でしょう • itamae
  22. 決めたこと 2017/10-2017/11 Copyright © Talentio 22 • Kibelaを導入して情報共有方法を変更 ◦ Confluenceはとにかく重い

    ◦ Wikiだけじゃない何かが欲しかった • GitHub issues / Projects を積極的に使うようにする ◦ 結局 Pull Request と連動するので一元化するこ とに
  23. 決めたこと 2017/10-2017/11 Copyright © Talentio 23 • 意識したのはあたりまえということ ◦ 「〜するのはあたりまえだよね」と言うことはやる

    ▪ 世の中の流れに乗る • 無理はしないことも重視した ◦ 無理してもいいことはない ▪ 経験則と周りの話から
  24. まずはやり始める 2017/10-2017/11 Copyright © Talentio 24 1.1xとかの時代

  25. まずはやり始める 2017/10-2017/11 Copyright © Talentio 25 • Rails 化 ◦

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

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

    導入 ◦ やるしかないのでがんばった... ▪ YAMLの解きほぐし ▪ Terraforming も一部利用 • kuroko2 の導入 ◦ crontab 使ってたのでなんとかしたかった ▪ いろいろ迷ったが Rails 製なので採用 ▪ 困ったときにいろいろ聞きやすかった • 前職のおかげ
  28. ちょっとずつ進める 2017/12-2018/03 Copyright © Talentio 28 新生を作り始める

  29. ちょっとずつ進める 2017/12-2018/03 Copyright © Talentio 29 • 本番サービスの一部 Docker 化

    (ECS(EC2)) ◦ デプロイには hako を利用 ▪ ruboty で Slack からデプロイできるようにして いる • 開発中の確認環境も ECS 化 ◦ Terraform / hako YAML(Jsonnet)のコピペで量 産可能になった
  30. ちょっとずつ進める 2017/12-2018/03 Copyright © Talentio 30 • 監視に Prometheus /

    Grafana を使う ◦ 自前で何とかする場合はこれかなという気持ちで 導入(費用感も考慮して ▪ node-exporter を動かすようにしておく ▪ あとは CloudWatch からで • これでだいたいなんとかなる • このあたりでエンジニア2名入社 ◦ Docker化しておいたのが功を奏して、初期のとき ほど大変な状態ではなくなる ◦ 「昔は vbox ファイルというのがあってだな...」み たいな老害トークできるほどには簡単になる
  31. 一歩踏み込む準備 2018/03-2018/09 Copyright © Talentio 31 1.xx終盤

  32. 一歩踏み込む準備 2018/03-2018/09 Copyright © Talentio 32 • このあたりでエンジニア1名入社 • バックエンドの一部をRailsで動かす試み

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

    ▪ 調べると php-serialize というのがあった • 便利な世の中... ◦ いろいろわかったので勢いで実装 ▪ ある程度は普通に動いた • が、問題はあった
  34. 一歩踏み込む準備 2018/03-2018/09 Copyright © Talentio 34 • バックエンドの一部をRailsで動かす試み ◦ JSONが入っている

    text カラム ▪ よくあるやつがつらいやつ • 特に PHP だと空の連想配列が [] になる ◦ Rails ではHashにならない... ▪ いろいろやってくれるモジュールを頑張って作る • 微妙に異なるモジュールができあがる ◦ なんとか負債 ◦ まあ、そんなこんなで下準備はできた
  35. 一歩踏み込む準備 2018/03-2018/09 Copyright © Talentio 35 • メール配信にSaaS(SendGrid)を使うことにした ◦ メールサーバの管理(特に受信)は非常に面倒

    ▪ 前々職でいろいろ経験したので、やらないほう がいいことはわかっていた • メールサーバを管理したい人はいないは ず...
  36. 一歩踏み込む準備 2018/03-2018/09 Copyright © Talentio 36 • Fargate 活用 ◦

    そうこうしている間に Fargate が日本リージョンに やってきた ▪ hako も対応していたので部分的に Fargate 化を進める • 思った以上に簡単に終わる ◦ メンテナンスしなくてもいいのが便利 ▪ 少人数チームだと運用コストが馬鹿にならな いので ◦ 流れに乗らなきゃ...!!
  37. 踏み込み開始 2018/10-2019/01 Copyright © Talentio 37 1.xx終盤

  38. 踏み込み開始 2018/10-2019/01 Copyright © Talentio 38 • このあたりでエンジニア2名入社 ◦ インフラ担当する人が入ったので色々捗り始める

    • 完全 Fargate 化 ◦ サービスで使っているのは全て Fargate になっ た ▪ サーバの面倒見なくていいので運用が楽 • ecs-agent の update とか
  39. 踏み込み開始 2018/10-2019/01 Copyright © Talentio 39 • バックエンドに Rails を使い始める

    ◦ 下準備が功を奏して思ったよりはサッと動いた ▪ 徐々に移行を進める • 新しい機能のAPIは基本的に Rails で • 既存のAPIの改修は既存のままで ▪ 無理しないスタイル • 無理するといろいろほころびが生まれる ◦ 身体的 / 精神的 / etc… • 一部画面を Rails 化 ◦ β版のような感じで進めているところ
  40. 踏み込み中 2019/02- Copyright © Talentio 40 2.0に向けて

  41. 踏み込み中 2019/02-現在 Copyright © Talentio 41 • このあたりでエンジニア1名入社 • 監視に

    DataDog を入れようとする ◦ Prometheus に限界を感じる ▪ exporter 用意するのがまあまあ大変 ▪ Prometheus / Grafana の管理運用もわりと 面倒 • Pull 型だから、そこそこリソースが必要 ◦ そのあたりをうまくやってくれる SaaS として DataDog
  42. 踏み込み中 2019/02- Copyright © Talentio 42 • Kubernates に移行を開始する ◦

    エコシステムの成長が速く継続性もあるものを使 うのがいいと思う ▪ 世の流れに乗ると言うのもある ◦ とは言えすぐにはしない ▪ 社内でノウハウが溜まったら
  43. 学びとまとめ Copyright © Talentio 43

  44. 学びとまとめ Copyright © Talentio 44 • よくあることは、ほんとうによくある ◦ そういう心構えが重要 •

    ダメだと思ったら素早い意思決定が重要 ◦ 迷う時間の無駄 • 小さく始められるところから徐々にやっていく ◦ 一気にやろうとするとつらみが溢れる • 主導者の好みを重視する ◦ モチベーション重要 • 世の中の流れに乗る ◦ ちゃんと追従することにも意義がある