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

継続的デリバリーを実現するためのデプロイフローを考える / tambourine Herokuflow example

68663b313774993493e7bae8cf26353e?s=47 Yusuke Kano
November 18, 2019

継続的デリバリーを実現するためのデプロイフローを考える / tambourine Herokuflow example

2019/11/18のDevLOVE関西で話した時の資料です
https://devlove-kansai.doorkeeper.jp/events/99164

68663b313774993493e7bae8cf26353e?s=128

Yusuke Kano

November 18, 2019
Tweet

Transcript

  1. 継続的デリバリーを実現するための デプロイフローを考える . . DevLOVE関⻄ 受託開発の現場でのアジャイルへの取り組み

  2. アジェンダ • ⾃⼰紹介 • 会社紹介 • 必要なこと • Herokuとは? •

    タンバリンでの運⽤ • まとめ
  3. ⾃⼰紹介 • 狩野 裕介 / Kano Yusuke • @usk •

    株式会社タンバリン • CTO New! • クラウドインテグレーション部
 ⼤阪開発チーム マネージャー • 経歴 • Flasher • バックエンドエンジニア
  4. IUUQTOPUFNVOOBBBE

  5. マネージャーとして • on (隔週30分〜1時間) • V MOM(Salesforceのフレームワーク) • チームもやもやボード •

    チームのふりかえり • チームみんなで採⽤プロセスにコミット • 社内ポッドキャスト
  6. 会社紹介

  7. タンバリン(tambourine.inc)は、パートナー型デジタルプロダクション株式会社TAM の⼦会社として2015 年9⽉設⽴。SalesforceやHeroku等のクラウドサービスを活⽤し たモバイルアプリ‧Eコマース‧ウェブサー ビスの開発を中⼼におこなっています。 ΫϥΠΞϯτͷʮσδλϧγϑτʯΛαϙʔτɻ ࢲͨͪ͸޷ح৺Λ෢ثʹɺ͋ͨΒ͍͜͠ͱ͕େ޷͖ͳ஥ؒͨͪͱ ʮੈքΛม͑ΔΞΠσΞʯΛΧλνʹ͢ΔςΫϊϩδετूஂͰ͢ɻ

  8. エンジニア絶賛募集中です!! IUUQTXXXXBOUFEMZDPNDPNQBOJFTUBNCPVSJOFJOD

  9. 本題

  10. 必要なこと

  11. アジャイルのフロー ཁ݅ఆٛʙઃܭʙ ։ൃʙςετ ˠϦϦʔε ཁ݅ఆٛʙઃܭʙ ։ൃʙςετ ˠϦϦʔε ཁ݅ఆٛʙઃܭʙ ։ൃʙςετ ˠϦϦʔε

    ཁ݅ఆٛʙઃܭʙ ։ൃʙςετ ˠϦϦʔε
  12. スクラムのスプリント

  13. インクリメント • 完成した、動くもの • スプリント終了時の成果 • リリースできる状態になっている

  14. IUUQTTQFBLFSEFDLDPNUXBEBRVBMJUZBOETQFFE

  15. IUUQTTQFBLFSEFDLDPNUXBEBRVBMJUZBOETQFFE TMJEF

  16. 必要なこと • アジャイルでは確認できるものを素早く提供する必要がある • 質を上げ、スピードを上げる仕組みを作る必要がある λϯόϦϯͰ͸)FSPLVͰ࣮ݱ

  17. None
  18. Herokuとは? • アプリの構築、提供、監視、スケールに役⽴つ
 クラウドプラットフォーム • 安全性とスケーラビリティに優れた DaaS (サービスとしてのデータ ベース) •

    The Twelve-Factor Appを提唱し、それに考慮して作られている IUUQTKQIFSPLVDPNXIBU
  19. 5XFMWF'BDUPS"QQ͸ɺ࣍ͷΑ͏ͳ4PGUXBSFBTB4FSWJDFΛ࡞Γ্͛ΔͨΊͷํ๏࿦Ͱ͋Δɻ • セットアップ⾃動化のために 宣⾔的な フォーマットを使い、プロジェクトに新しく加わった開発者が要する時間とコスト を最⼩化する。 • 下層のOSへの 依存関係を明確化 し、実⾏環境間での

    移植性を最⼤化 する。 • モダンな クラウドプラットフォーム 上への デプロイ に適しており、サーバー管理やシステム管理を不要なものにする。 • 開発環境と本番環境の 差異を最⼩限 にし、アジリティを最⼤化する 継続的デプロイ を可能にする。 • ツール、アーキテクチャ、開発プラクティスを⼤幅に変更することなく スケールアップ できる。 IUUQTGBDUPSOFUKB
  20. The Twelve-Factor App 1.コードベース (Codebase) 2.依存関係 (Dependencies) 3.設定 (Config) 4.バックエンドサービス

    (Backing Services) 5.ビルド、リリース、ラン(Build, release, run) 6.プロセス (Processes) 7.ポートバインディング (Port binding) 8.並⾏性 (Concurrency) 9.廃棄容易性 (Disposability) 10.開発/本番⼀致 (Dev/prod parity) 11.ログ (Logs) 12.管理プロセス (Admin processes)
  21. The Twelve-Factor App 1.コードベース (Codebase) 2.依存関係 (Dependencies) 3.設定 (Config) 4.バックエンドサービス

    (Backing Services) 5.ビルド、リリース、ラン(Build, release, run) 6.プロセス (Processes) 7.ポートバインディング (Port binding) 8.並⾏性 (Concurrency) 9.廃棄容易性 (Disposability) 10.開発/本番⼀致 (Dev/prod parity) 11.ログ (Logs) 12.管理プロセス (Admin processes)
  22. Heroku Flow

  23. Heroku Flow • Heroku Pipeline • GitHub Integration • Heroku

    CI • Review Apps • Heroku ChatOps IUUQTKQIFSPLVDPNDPOUJOVPVTEFMJWFSZ
  24. Heroku Pipeline 同じコードベースを共有する Heroku アプリケーションを 1 つにまとめたデプロイパイプライン IUUQTEFWDFOUFSIFSPLVDPNBSUJDMFTQJQFMJOFT

  25. GitHub Integration • リポジトリと連携させ、ブランチ単位でデプロイが可能
 (⾃動‧⼿動) • GitHubからHerokuアプリを直接開いたり IUUQTEFWDFOUFSIFSPLVDPNBSUJDMFTHJUIVCJOUFHSBUJPO

  26. Continuous Integration (CI) • GitHubとの連携があるため、GitHub側のCIが利⽤可能 • GitHub Actions、Circle CI、Travis CI

    • Heroku CI • 料⾦体系が複雑で試⾏錯誤中 IUUQTKQIFSPLVDPNDPOUJOVPVTJOUFHSBUJPO
  27. Review Apps • ⼀時的に確認⽤として⽴ち上げておけるアプリ • (基本的に)GitHubのプルリクエストごとに作成する • 最近新しくなり、プルリクなしで作成できるようになった IUUQTEFWDFOUFSIFSPLVDPNBSUJDMFTSFWJFXBQQTOFX

  28. タンバリンでの運⽤例

  29. λϯόϦϯͰͷӡ༻ྫ )FSPLV1JQFMJOF

  30. λϯόϦϯͰͷӡ༻ྫ ΞϓϦͷ༻్

  31. λϯόϦϯͰͷӡ༻ྫ ΞϓϦͷ༻్

  32. λϯόϦϯͰͷӡ༻ྫ ΞϓϦͷ༻్

  33. λϯόϦϯͰͷӡ༻ྫ (JU)VC࿈ܞ

  34. λϯόϦϯͰͷӡ༻ྫ ։ൃͷྲྀΕ ։ൃ ʢྫɿGFBUVSFBEE@CVUUPOʣ QVTI OFYUSFMFBTFϒϥϯνʹ ϓϧϦΫΤετΛग़͢ )FSPLVͷϨϏϡʔΞϓϦ͕ ࡞ΒΕΔ ࣗಈςετ

    ʢ6OJUςετʣ
  35. λϯόϦϯͰͷӡ༻ྫ ։ൃͷྲྀΕɿϨϏϡʔΞϓϦ

  36. λϯόϦϯͰͷӡ༻ྫ ։ൃͷྲྀΕɿϨϏϡʔΞϓϦ

  37. λϯόϦϯͰͷӡ༻ྫ ։ൃͷྲྀΕɿ֬ೝɾςετ 確認‧テスト • ⾃動テスト • コードレビュー • 動作確認

  38. λϯόϦϯͰͷӡ༻ྫ ։ൃͷྲྀΕɿ֬ೝɾςετ

  39. λϯόϦϯͰͷӡ༻ྫ ։ൃͷྲྀΕɿϚʔδ ֬ೝޙɺϚʔδ͢Δ

  40. λϯόϦϯͰͷӡ༻ྫ ։ൃͷྲྀΕɿϚʔδ w Ϛʔδ͞ΕΔͱOFYUSFMFBTF͕
 ࣗಈ%FQMPZ͞ΕΔ w ϨϏϡʔΞϓϦ͸ࣗಈͰ࡟আ͞ΕΔ

  41. λϯόϦϯͰͷӡ༻ྫ ։ൃͷྲྀΕɿ֬ೝ リリース準備 • 開発が完了したものは next-release に • 動作確認 •

    OKなら本番にリリース • Heroku上でロールバックも可能 • next-releaseは基本常にリリース可能な状態にしておく
 → インクリメント
  42. λϯόϦϯͰͷӡ༻ྫ ։ൃͷྲྀΕɿϦϦʔε 1SPNPUFϘλϯΛԡ͚ͩ͢ 本番リリース

  43. λϯόϦϯͰͷӡ༻ྫ ։ൃͷྲྀΕɿϦϦʔε

  44. λϯόϦϯͰͷӡ༻ྫ ։ൃͷྲྀΕɿϦϦʔεޙ NBTUFSϒϥϯν΁औΓࠐΈ όάमਖ਼ͳͲͷϦϦʔεʹඋ͑Δ

  45. タンバリンでの運⽤例 . チケット⽤のブランチを作り、GitHubにpush • next-release にプルリクを出す . 確認 • GitHubでCI‧コードレビュー

    • Herokuのレビューアプリで動作確認 . next-release にマージ . 全ての対応が完了後、動作確認 . リリース • hotfix⽤にmasterブランチに取り込み
  46. まとめ

  47. まとめ • スプリントの最後にはリリース可能な状態にする • → パイプラインを使ってのフロー管理 • 質とスピードをあげる • →

    CIの導⼊で質の確保 • → デプロイなどの環境周りを⾃動化
  48. IUUQTKQIFSPLVDPNQPEDBTUTDPEFJTIKQ