Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

アジェンダ • ⾃⼰紹介 • 会社紹介 • 必要なこと • Herokuとは? • タンバリンでの運⽤ • まとめ

Slide 3

Slide 3 text

⾃⼰紹介 • 狩野 裕介 / Kano Yusuke • @usk • 株式会社タンバリン • CTO New! • クラウドインテグレーション部
 ⼤阪開発チーム マネージャー • 経歴 • Flasher • バックエンドエンジニア

Slide 4

Slide 4 text

IUUQTOPUFNVOOBBBE

Slide 5

Slide 5 text

マネージャーとして • on (隔週30分〜1時間) • V MOM(Salesforceのフレームワーク) • チームもやもやボード • チームのふりかえり • チームみんなで採⽤プロセスにコミット • 社内ポッドキャスト

Slide 6

Slide 6 text

会社紹介

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

本題

Slide 10

Slide 10 text

必要なこと

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

スクラムのスプリント

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

IUUQTTQFBLFSEFDLDPNUXBEBRVBMJUZBOETQFFE

Slide 15

Slide 15 text

IUUQTTQFBLFSEFDLDPNUXBEBRVBMJUZBOETQFFE TMJEF

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

Herokuとは? • アプリの構築、提供、監視、スケールに役⽴つ
 クラウドプラットフォーム • 安全性とスケーラビリティに優れた DaaS (サービスとしてのデータ ベース) • The Twelve-Factor Appを提唱し、それに考慮して作られている IUUQTKQIFSPLVDPNXIBU

Slide 19

Slide 19 text

5XFMWF'BDUPS"QQ͸ɺ࣍ͷΑ͏ͳ4PGUXBSFBTB4FSWJDFΛ࡞Γ্͛ΔͨΊͷํ๏࿦Ͱ͋Δɻ • セットアップ⾃動化のために 宣⾔的な フォーマットを使い、プロジェクトに新しく加わった開発者が要する時間とコスト を最⼩化する。 • 下層のOSへの 依存関係を明確化 し、実⾏環境間での 移植性を最⼤化 する。 • モダンな クラウドプラットフォーム 上への デプロイ に適しており、サーバー管理やシステム管理を不要なものにする。 • 開発環境と本番環境の 差異を最⼩限 にし、アジリティを最⼤化する 継続的デプロイ を可能にする。 • ツール、アーキテクチャ、開発プラクティスを⼤幅に変更することなく スケールアップ できる。 IUUQTGBDUPSOFUKB

Slide 20

Slide 20 text

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)

Slide 21

Slide 21 text

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)

Slide 22

Slide 22 text

Heroku Flow

Slide 23

Slide 23 text

Heroku Flow • Heroku Pipeline • GitHub Integration • Heroku CI • Review Apps • Heroku ChatOps IUUQTKQIFSPLVDPNDPOUJOVPVTEFMJWFSZ

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

Continuous Integration (CI) • GitHubとの連携があるため、GitHub側のCIが利⽤可能 • GitHub Actions、Circle CI、Travis CI • Heroku CI • 料⾦体系が複雑で試⾏錯誤中 IUUQTKQIFSPLVDPNDPOUJOVPVTJOUFHSBUJPO

Slide 27

Slide 27 text

Review Apps • ⼀時的に確認⽤として⽴ち上げておけるアプリ • (基本的に)GitHubのプルリクエストごとに作成する • 最近新しくなり、プルリクなしで作成できるようになった IUUQTEFWDFOUFSIFSPLVDPNBSUJDMFTSFWJFXBQQTOFX

Slide 28

Slide 28 text

タンバリンでの運⽤例

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

λϯόϦϯͰͷӡ༻ྫ ։ൃͷྲྀΕɿ֬ೝ リリース準備 • 開発が完了したものは next-release に • 動作確認 • OKなら本番にリリース • Heroku上でロールバックも可能 • next-releaseは基本常にリリース可能な状態にしておく
 → インクリメント

Slide 42

Slide 42 text

λϯόϦϯͰͷӡ༻ྫ ։ൃͷྲྀΕɿϦϦʔε 1SPNPUFϘλϯΛԡ͚ͩ͢ 本番リリース

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

タンバリンでの運⽤例 . チケット⽤のブランチを作り、GitHubにpush • next-release にプルリクを出す . 確認 • GitHubでCI‧コードレビュー • Herokuのレビューアプリで動作確認 . next-release にマージ . 全ての対応が完了後、動作確認 . リリース • hotfix⽤にmasterブランチに取り込み

Slide 46

Slide 46 text

まとめ

Slide 47

Slide 47 text

まとめ • スプリントの最後にはリリース可能な状態にする • → パイプラインを使ってのフロー管理 • 質とスピードをあげる • → CIの導⼊で質の確保 • → デプロイなどの環境周りを⾃動化

Slide 48

Slide 48 text

IUUQTKQIFSPLVDPNQPEDBTUTDPEFJTIKQ