Slide 1

Slide 1 text

マイクロサービスのローカル開発環境をTilt を使って2年運用して得た知見 2023.6.28 Back-End Meetup 鈴木善晴

Slide 2

Slide 2 text

本日話すこと ● Tiltベースの弊社の開発体験の紹介 ● Tilt導入の工夫や得られた知見 話さないこと ● Tiltの細かい機能や仕様 「細かいところは要調査だけど、うちでやるならこんな感じかな🤔」 ぐらいのイメージが湧くといいなと思っています!

Slide 3

Slide 3 text

自己紹介 ● 鈴木善晴 ● テックリード兼バックエンドエンジニア ● 人事評価サービスを担当(ブログ)

Slide 4

Slide 4 text

前ふり 開発でこんな状況ありません?🤔 ● 最初は1つのチーム、1つのサービス。 ● サービスが増える、チームも増える、分担も始まる。 ● 歴史的経緯を知らない人もどんどん増える。

Slide 5

Slide 5 text

弊社もそんな状況でした… 今から2年前(2021年6月当時) ● マイクロサービス数: 8 → 29 (現在: 約50) ● エンジニア数: 着実に増加 (現在: 新卒やインターンにも拡大)

Slide 6

Slide 6 text

当時の開発環境(2年前) ● 構成 ○ サービスごとのdocker-compose.yaml ○ それらを束ねる自前スクリプト ● 自前スクリプト(up.sh) ○ 全docker-composeを叩いて起動するのみ ○ 開発で使わないコンテナは各自で落とす root ├── apps │ ├── serviceA │ │ ├── backend │ │ │ ├── Dockerfile │ │ │ └── docker-compose.yaml │ │ └── frontend │ │ ├── Dockerfile │ │ └── docker-compose.yaml │ ├── serviceB │ │ ├── ... │ └── serviceC │ └── ... └── up.sh 「開発に必要なサービスだけ起動する」が辛くなってきた…😢

Slide 7

Slide 7 text

Local vs Remote vs Hybrid 弊社の都合 ● 資産として、ローカルで起動するdocker-composeがある。 ● プロダクト開発の合間で改善していく必要あり。 小さく始められる All Local を選択

Slide 8

Slide 8 text

なぜTilt? ● Q. docker-compose の depends_on を使えばよくな い? ○ A. Yes. 最初はそのアプローチで進めていた ● TiltにはLive Updateという機構がある。 → 別途抱えていた「ホットリロード不安定問題」の解消も 期待して採用。 Tiltとは ● マイクロサービスの開発を支援するソフトウェア ● macOS/Linux/Windowsの3つのプラットフォームに対応 ● Tiltfileの記述言語はStarlark 6分

Slide 9

Slide 9 text

弊社の開発者体験 その1(実装🔄確認) サンプル: https://github.com/tilt-dev/tilt-example-docker-compose

Slide 10

Slide 10 text

弊社の開発者体験 その2(ブランチ切り替え) サンプル: https://github.com/tilt-dev/tilt-example-docker-compose

Slide 11

Slide 11 text

Tilt導入による構成の変化 Before After d dc 自前スクリプト(up.sh) d dc d dc d dc d dc d dc Tilt(Tiltfile) d d d d ホットリロードの仕組みがあったりなかった り、新しかったり古かったり dc: docker-compose.yaml d: Dockerfile ホットリロードの仕組みは Tilt提供のものに統一 レイヤー 上 下

Slide 12

Slide 12 text

導入の工夫(技術面 その1) グルーピングを活用し、領域ごとで構成がバラバラでもコードネームで一発起動。 dog-front dog-api dog-db グループ: dog dog-apidoc cat-api cat-db グループ: cat rabbit-batch1 rabbit-batch2 グループ: rabbit

Slide 13

Slide 13 text

導入の工夫(技術面 その1) グルーピングを活用し、領域ごとで構成がバラバラでもコードネームで一発起動。 dog-front dog-api dog-db グループ: dog dog-apidoc cat-api cat-db グループ: cat rabbit-batch1 rabbit-batch2 グループ: rabbit $ tilt up dog 依存ないもの も起動可

Slide 14

Slide 14 text

導入の工夫(技術面 その1) グルーピングを活用し、領域ごとで構成がバラバラでもコードネームで一発起動。 dog-front dog-api dog-db グループ: dog dog-apidoc cat-api cat-db グループ: cat rabbit-batch1 rabbit-batch2 グループ: rabbit $ tilt up rabbit

Slide 15

Slide 15 text

導入の工夫(技術面 その1) グルーピングを活用し、領域ごとで構成がバラバラでもコードネームで一発起動。 dog-front dog-api dog-db グループ: dog dog-apidoc cat-api cat-db グループ: cat rabbit-batch1 rabbit-batch2 グループ: rabbit $ tilt up cat

Slide 16

Slide 16 text

導入の工夫(技術面 その2) 重い/軽いを切り替えてメモリ消費を抑える dog-front heavy.Dockerfile light.Dockerfile 開発者向けツールセットを 含んだ重いイメージ 例: webpack-dev-server jsを配布するだけの軽いイ メージ 例: nginx (設定で呼び分け )

Slide 17

Slide 17 text

導入の工夫(移行、運用面) 【移行面】 docker-composeから上書きしながら進めることで 従来方式を壊さず開発。 【運用面】 ● 利用ガイドを用意。 ○ Tiltインストール ○ 起動コマンド ○ トラブルシューティングなど ● メンテはみんなでできるように。 ○ Tiltfileとdocker-compose.ymlの責務をコード コメントで書き、記述場所を迷わないように。 ○ 2年間実績(2021年6月〜2023年6月) ■ Tiltfileのメンテナー:29名 ■ PR数:127 ■ リソース数:75 d dc 自前スクリプト d dc d dc dc-tilt.yml Tilt(Tiltfile) (従来方式) (新方式) CMD命令上書き レイヤー 上 下

Slide 18

Slide 18 text

導入後の「うれしさ」「つらさ」 ● うれしさ ○ マイクロサービス構成を気にしない $ tilt up {codename} というコマンド一発の起動体験 ○ ホットリロードを任せられる ● つらさ ○ PCへの負荷が高い。サービスが増え続けて更に顕著に。 ○ Docker Desktop for Macの不安定さ 12分

Slide 19

Slide 19 text

適用組織の向き・不向き 恩恵を受けやすいフェーズ ● アーキテクチャのフェーズ ○ マイクロサービスが5個を超え始めた ● 開発組織のフェーズ ○ 初期メンバー以外のエンジニアも増え始めた ○ 新卒採用をやり始めた

Slide 20

Slide 20 text

弊社の今後 ● マイクロサービスさらなる増加に対する対策が必要 ● 世の中の開発環境事例を収集中 ● GitHub CodespacesやGoogle Cloud Workstationsの可能性 ○ まるっと外に出せないか エディタ Tilt エディタ Cloud Workstations Tilt SSH, HTTPS イメージ

Slide 21

Slide 21 text

まとめ ● Tiltベースに移行した弊社の開発環境や知見を紹介しました。 ● 今では日々の開発のインフラみたいになっています。 ● とはいえ、サービスの更なる拡大に伴い、ローカル開発の辛さも顕著に。 ● 他社事例を参考にしつつ、PC負荷を「減らす」「逃がす」方法を探っています。

Slide 22

Slide 22 text

成長し続ける限り、 開発環境の模索に終わりなし!

Slide 23

Slide 23 text

ご清聴ありがとうございました!