Slide 1

Slide 1 text

Deployment Previewを用意する 流れで学んだ良い仕事の進め方 id:stefafafan / @stefafafan 2023/06/22 【非公式】PHPカンファレンス福岡全然野菜 1

Slide 2

Slide 2 text

自己紹介 ● すてにゃん (id:stefafafan / @stefafafan) ● 2015- 株式会社はてな ○ Webアプリケーションエンジニア ○ 最近はスクラムマスター、テックリードなど 2

Slide 3

Slide 3 text

自己紹介 ● 2023/5 に福岡に引っ越しました! ○ 福岡に引越した - stefafafan の fa は3つです ○ 福岡のみなさまこれからよろしくお願いします 3

Slide 4

Slide 4 text

4 今日話すこと

Slide 5

Slide 5 text

今日話すこと ● チームに存在していた課題 ● 課題を解消するための手段の選択について ● プロジェクトをどのようにして段階的に進めたか ● プロジェクト終了後、1年弱経った今 5

Slide 6

Slide 6 text

6 チームの課題

Slide 7

Slide 7 text

前提 ● コンテナ化されているWebアプリケーションを運用中 ○ インフラは全体的にAWSで構成されている ● 手元環境を除くとstaging環境、本番環境の2つが存在し ていた ■ mainブランチの内容がstaging環境に自動デプロイされる 7

Slide 8

Slide 8 text

チームの課題 ● 課題: Feature Branch のレビューが大変 ○ デザインレビューができるメンバーが限られている ■ ローカル環境で動かして確認するコストが大きい ● どうにか解消できないか? ○ →Deployment Previewを最終的に作る流れになっ た 8

Slide 9

Slide 9 text

9 課題を解消するための 手段の選択

Slide 10

Slide 10 text

10 そもそも解決したい 課題は何か

Slide 11

Slide 11 text

解決したい課題 ● デザイナーが作ったFeature Branchの内容を簡単にレ ビューできるようにしたい ○ 内容の確認ができれば何でも良い? ■ 思いつく選択肢を色々出してみよう! 11

Slide 12

Slide 12 text

選択肢の案出し ● a. Feature Branch をマージして staging で確認する ● b. 見た目の確認はスクショや動画で済ませる ● c. 手元で動いているものを画面共有でレビュアーにみて もらう ● d. Feature Branchの内容を自動でデプロイする 12

Slide 13

Slide 13 text

要件のすり合わせ ● スクショや動画での確認でも問題ないか? ○ 見た目だけでなく、挙動の確認を行いたいため不足する ● staging での確認で問題ないか? ○ 修正が必要な場合の手戻りが大きいので望ましくない ● 手元環境で動くものを画面共有で確認してもらうのは? ○ 必ずしも同期的にレビューできるとは限らないので望まし くない 13

Slide 14

Slide 14 text

改善案の選択 ● a. Feature Branch をマージして staging で確認する ● b. 見た目の確認はスクショや動画で済ませる ● c. 手元で動いているものを画面共有でレビュアーにみて もらう ● d. Feature Branchの内容を自動でデプロイする 14

Slide 15

Slide 15 text

手段の選択についてわかったこと ● 課題があるから真っ先に解決のための実装に入るのでは なく、先に以下のようなことを整理することが大事 ○ 1. 課題を正しく理解する ○ 2. 要件を整理する ○ 3. 効果やコストを元に手段を選択する 15

Slide 16

Slide 16 text

16 プロジェクトをどのように して段階的に進めたか

Slide 17

Slide 17 text

要件の詳細を詰める ● 新しい環境を用意することは決まったが、詳細が未確定 ○ 結局何を作ればいいんだっけ? ● 環境を必要とするのはエンジニアというよりデザイナー ・企画メンバーがメイン ○ 職種に限定せず、要望をヒアリング 17

Slide 18

Slide 18 text

要件の詳細を詰める ● ヒアリングした結果決定した要件の一例 ○ 開発環境をセットアップしていないメンバーでも確認で きる (企画職など) ○ エンジニアでなくとも簡単にデプロイできる ■ 可能ならP-Rが作られた際に自動的にデプロイ ○ 社内メンバーしかみられないように認証がかかっている 18

Slide 19

Slide 19 text

要件の詳細を詰める ● トレードオフスライダーを設定 ○ 何を重視するのかを決めるという意味 ○ 今回は デリバリーや品質 >> コストやスコープ ■ つまり、スコープを欲張りすぎずに、まずは「決まった期間 の中で用意できるものを作る」ことでチームと合意した 19

Slide 20

Slide 20 text

技術選定 ● 要件にマッチした技術選定をする必要がある ● まずは社内外の事例をひたすらかき集めた 20

Slide 21

Slide 21 text

技術選定 ● 社内外の事例の一部 ○ Vercel, Heroku, Netlify, Cloudflare Pages, … ○ Amazon ECS をつかって自作 ○ Google Cloud Run をつかって自作 21

Slide 22

Slide 22 text

技術選定 ● Vercel等のサービスが一見魅力的だった ○ Deployment Previewに必要な諸々が作り込まれている ● ただし、いくつかの要件についての実現可能性が不明だった ○ 環境にユーザ認証をかけたい ○ Deployment Previewも自前のDBに接続させたい、DBは 全公開させたくない ○ カスタマイズしたい箇所がいくつかある 22

Slide 23

Slide 23 text

技術選定 ● 特定のサービスに依存させたくない、自作するか ○ 社内ではAWSとGoogle Cloudは利用実績がある ■ チームとしてはここまでAWSを主に使っていた ○ Google Cloudに便利そうなグッズが揃っているし、 個人的にもこの機会に触っていきたい ■ → Google Cloud でやってみよう! 23

Slide 24

Slide 24 text

技術選定 ● Google Cloudで突然0から用意するには知識が足りない ● 作り始めた後に無理だとわかったら時間が勿体無い ● Proof of Concept (PoC) の作成から始めよう ○ 実際に環境を用意する前段階の検証のこと 24

Slide 25

Slide 25 text

PoCの作成 ● PoCを作る流れの一貫として、公式チュートリアルをい くつか試しつつ進めた ○ クイックスタート: Cloud Run にデプロイする ○ クイックスタート: Cloud Run から Cloud SQL for MySQL に接続する 25

Slide 26

Slide 26 text

PoCの作成 ● やっているうちになんとなく動くようになった ○ 細かいところは壊れているがとりあえずそれっぽい ページが動きましたというのをチームに共有して進め た 26

Slide 27

Slide 27 text

PoCの作成 ● PoCを作ることで以下のメリットがあった ○ Google Cloudの土地勘を獲得 ○ Deployment Previewを実現できるという自信を得た ● 細かいところ含め改めてどう用意するかのイメージがつ いた上で本実装に入れるようになった ○ →このまま進めた結果無事環境が用意できた 27

Slide 28

Slide 28 text

28 詳しい実装についてはブログを参照ください Cloud RunとIdentity-Aware ProxyとGitHub ActionsでPull Request ごとのDeployment Previewを実現する - Hatena Developer Blog

Slide 29

Slide 29 text

ここまでわかったこと ● プロジェクトを進めるにあたって、以下のような段階を 踏むと良いことがわかった ○ 1. 要件を詰めて曖昧なところを擦り合わせる ○ 2. 技術選定の際は社内外の情報を広く集めた上で絞り 込むと良い ○ 3. PoCを作ることによって不確実性が下げられる 29

Slide 30

Slide 30 text

30 プロジェクト終了後、 1年弱経った今

Slide 31

Slide 31 text

環境を用意した1年後の今 ● Deployment Previewを用意したのは2022年の夏頃 ○ もちろん用意した直後は成果物に満足している ○ そのあとの運用についてはどうなのか? 31

Slide 32

Slide 32 text

環境を用意した1年後の今 ● Deployment Previewは当たり前の存在として生活して いる ○ 当初の狙いではなかったが、Dependabotの出したブ ランチも物によってはDeployment Previewでも眺め てみて良さそうならマージしている 32

Slide 33

Slide 33 text

環境を用意した1年後の今 ● そんなに運用に苦労はしていない ○ 最初のうちは細かい設定がおかしくてCIが落ちたりし ていたがいまは比較的安定している 33

Slide 34

Slide 34 text

環境を用意した1年後の今 ● 新たな課題 ○ 当初デリバリー優先で用意しなかった部分が足りてい なくて少し不便 ■ サービスの管理画面を作るもののスコープから外していたけ ど、いまは確認したくなっている ■ 本番では動いているAWS LambdaなどがGoogle Cloud製の 環境で動かず、確認ができない 34

Slide 35

Slide 35 text

1年運用してわかったこと ● 当初選んだ選択肢が運用していく中で影響してくる ○ 1. 開発当初スコープから外したものは運用していく中 でほしくなることはある ○ 2. 技術選定の結果も後に影響が出ることがある ○ 3. 長く運用する場合「運用コスト」も設計において大 事な検討ポイントとなる 35

Slide 36

Slide 36 text

36 まとめ

Slide 37

Slide 37 text

まとめ ● プロジェクト開発において以下のポイントが重要 ○ 課題や要件を正しく理解しよう ○ 選択肢は出せるだけ出してから絞り込むと良い ○ 時にはPoCなどを活用して不確実性を下げよう ○ 長く運用する場合はN年後の状態をイメージして要件 を検討しよう 37