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

マイクロサービスのローカル開発環境をTiltを使って2年運用して得た知見

 マイクロサービスのローカル開発環境をTiltを使って2年運用して得た知見

本スライドは次のイベントの発表資料です。
https://anotherworks.connpass.com/event/285380/

■概要
マイクロサービスのローカル開発をサポートするTiltというツールがあります。
弊社エンジニア全員が日々使うローカル開発環境をこのTiltベースに移行し、約2年運用してきてどうだったのか、工夫した点や辛みも交えながらお話します。
秘伝のstart.shを駆使してローカル環境を立ち上げているが、サービスの成長とともにそろそろメンテが辛くなってきたという方のヒントになれば幸いです。

SUZUKI Yoshiharu

July 08, 2023
Tweet

Other Decks in Programming

Transcript

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  6. 当時の開発環境(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
    「開発に必要なサービスだけ起動する」が辛くなってきた…😢

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  11. 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提供のものに統一
    レイヤー


    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  17. 導入の工夫(移行、運用面)
    【移行面】
    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命令上書き
    レイヤー


    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide