Deployment Previewを用意する流れで学んだ良い仕事の進め方
by
すてにゃん
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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