Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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)

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

学びとまとめ Copyright © Talentio 43

Slide 44

Slide 44 text

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