Slide 1

Slide 1 text

©tete marche CO., LTD. GitHub Actionsで泣かないために やっておきたい設定 PHPカンファレンス小田原2024 テテマーチ株式会社 篠田 ( @pinkumohikan )

Slide 2

Slide 2 text

©tete marche CO., LTD. 2 ✔ テテマーチ株式会社 SINIS for X テックリード 篠田 北斗 ( @pinkumohikan ) ✔ 社内ブランディング 「定期的に髪色が変わるやべーやつ」 ✔ バックエンド寄りの技術が好き ISUCON毎年参戦中🔥 (去年の戦績の話はNG) 自己紹介

Slide 3

Slide 3 text

©tete marche CO., LTD. 3 このトークでお話すること GitHubが提供するCI/CDサービス 「GitHub Actions」で 痛い目に合わないために、気をつけるべきこと・やっておきたい設定

Slide 4

Slide 4 text

©tete marche CO., LTD. Index 目次 4 1. GitHub Actionsのおさらい 2. タイムアウトは必ず設定しよう 3. バージョンは明確に指定しよう 4. VariablesとSecretsを正しく使い分けよう 5. Actionは定期的にバージョンアップしよう 6. CI死んでて仕事出来ません...を無くそう

Slide 5

Slide 5 text

©tete marche CO., LTD. GitHub Actionsのおさらい 1. 5

Slide 6

Slide 6 text

©tete marche CO., LTD. 6 ● GitHub社が提供するCI/CDサービス ○ CI/CD = システムを高速に開発するためのプラクティス ■ CI: PullRequestとして最低限の要件を満たしているか自動検査 ■ CD: デプロイの仕組み化 ○ 平たく言うと、gitリポジトリへのpushをトリガーに任意のコマンドを実行できる仕組み ○ 料金モデル: コンピューティング時間に対する従量課金 (無料枠あり) GitHub Actionsとは 👈 PRの下のほうにあるコレ

Slide 7

Slide 7 text

©tete marche CO., LTD. 7 GitHub Actionsの仕組み 出典: GitHub Actions Deep Dive using PHP / PHPerKaigi 2022 https://speakerdeck.com/k1low/phperkaigi-2022?slide=15

Slide 8

Slide 8 text

©tete marche CO., LTD. 8 GitHub Actionsの設定ファイル (Workflowファイル) name: CI on: [push] jobs: test: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - uses: shivammathur/setup-php@v2 with: php-version: '8.3' - run: composer install - run: ./vendor/bin/phpunit workflow

Slide 9

Slide 9 text

©tete marche CO., LTD. 9 GitHub Actionsの設定ファイル (Workflowファイル) name: CI on: [push] jobs: test: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - uses: shivammathur/setup-php@v2 with: php-version: '8.3' - run: composer install - run: ./vendor/bin/phpunit event

Slide 10

Slide 10 text

©tete marche CO., LTD. 10 GitHub Actionsの設定ファイル (Workflowファイル) name: CI on: [push] jobs: test: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - uses: shivammathur/setup-php@v2 with: php-version: '8.3' - run: composer install - run: ./vendor/bin/phpunit job

Slide 11

Slide 11 text

©tete marche CO., LTD. 11 GitHub Actionsの設定ファイル (Workflowファイル) name: CI on: [push] jobs: test: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - uses: shivammathur/setup-php@v2 with: php-version: '8.3' - run: composer install - run: ./vendor/bin/phpunit runner

Slide 12

Slide 12 text

©tete marche CO., LTD. 12 GitHub Actionsの設定ファイル (Workflowファイル) name: CI on: [push] jobs: test: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - uses: shivammathur/setup-php@v2 with: php-version: '8.3' - run: composer install - run: ./vendor/bin/phpunit step

Slide 13

Slide 13 text

©tete marche CO., LTD. 13 GitHub Actionsの設定ファイル (Workflowファイル) name: CI on: [push] jobs: test: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - uses: shivammathur/setup-php@v2 with: php-version: '8.3' - run: composer install - run: ./vendor/bin/phpunit Action

Slide 14

Slide 14 text

©tete marche CO., LTD. 14 GitHub Actionsの設定ファイル (Workflowファイル) name: CI on: [push] jobs: test: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - uses: shivammathur/setup-php@v2 with: php-version: '8.3' - run: composer install - run: ./vendor/bin/phpunit Step

Slide 15

Slide 15 text

©tete marche CO., LTD. 15 ● 開発プロセス中に必ずやりたい作業があるとき ○ コードのフォーマットチェック、テスト、静的解析、コンパイルが通ることの確認など ○ 「忘れずにやっといてね」は絶対に漏れる → トラブルを仕組みで防ぐのが大事 ● 個人マシンでやりたくないことをやるとき ○ コンピューティングリソースをめちゃめちゃ食う処理 ○ デプロイ (機微情報の取り扱い、本番環境への接続) どういうときに便利なのか

Slide 16

Slide 16 text

©tete marche CO., LTD. 16 出典: ポプテピピック - 大川ぶくぶ

Slide 17

Slide 17 text

©tete marche CO., LTD. タイムアウト設定は忘れずに 2. 17

Slide 18

Slide 18 text

©tete marche CO., LTD. 18 ● タイムアウト = 実行時間の上限 ○ configで言う timeout-minutes (これを超えると強制終了) ○ デフォルト: 360分 タイムアウト設定

Slide 19

Slide 19 text

©tete marche CO., LTD. 19 ● タイムアウト = 実行時間の上限 ○ configで言う timeout-minutes (これを超えると強制終了) ○ デフォルト: 360分 ● 設定しておきたい理由: コマンドは稀に “刺さる” ○ パッケージのインストール、外部API呼び出し、CPU・メモリを食う処理、etc… ○ GHAは実行時間に対する従量課金なので、刺さったときのダメージを小さくしたい タイムアウト設定

Slide 20

Slide 20 text

©tete marche CO., LTD. 20 ● タイムアウト = 実行時間の上限 ○ configで言う timeout-minutes (これを超えると強制終了) ○ デフォルト: 360分 ● 設定しておきたい理由: コマンドは稀に “刺さる” ○ パッケージのインストール、外部API呼び出し、CPU・メモリを食う処理、etc… ○ GHAは実行時間に対する従量課金なので、刺さったときのダメージを小さくしたい タイムアウト設定 デフォルト設定でタイムアウトまで動くと 一撃で無料枠18%消費することになって泣く 😭

Slide 21

Slide 21 text

©tete marche CO., LTD. バージョンは明確に指定する 3. 21

Slide 22

Slide 22 text

©tete marche CO., LTD. 22 ● Runnerや、Actionなど バージョンを指定出来るところがある ○ commit hash → uses: actions/checkout@b4ffde6 ○ version tag → uses: actions/[email protected] ○ branch name → uses: actions/checkout@main ○ latest → uses: actions/checkout@latest バージョンは明確に指定する

Slide 23

Slide 23 text

©tete marche CO., LTD. 23 ● Runnerや、Actionなど バージョンを指定出来るところがある ○ commit hash → uses: actions/checkout@b4ffde6 ○ version tag → uses: actions/[email protected] ○ branch name → uses: actions/checkout@main ○ latest → uses: actions/checkout@latest バージョンは明確に指定する 👍 👍 😥 😥

Slide 24

Slide 24 text

©tete marche CO., LTD. 24 ● Runnerや、Actionなど バージョンを指定出来るところがある ○ commit hash → uses: actions/checkout@b4ffde6 ○ version tag → uses: actions/[email protected] ○ branch name → uses: actions/checkout@main ○ latest → uses: actions/checkout@latest ● 明確に設定したい理由: CIは安定していることが超重要 ○ 「知らないうちにCIが動かなくなっていた...」では困る ○ 自分の知らないコードが動きうる状況はセキュリティリスク ■ セキュリティポリシーが厳しいところではcommit hash指定 & リスクアセスメント必須 バージョンは明確に指定する 👍 👍 😥 😥

Slide 25

Slide 25 text

©tete marche CO., LTD. 25 ● Runnerや、Actionなど バージョンを指定出来るところがある ○ commit hash → uses: actions/checkout@b4ffde6 ○ version tag → uses: actions/[email protected] ○ branch name → uses: actions/checkout@main ○ latest → uses: actions/checkout@latest ● 明確に設定したい理由: CIは安定していることが超重要 ○ 「知らないうちにCIが動かなくなっていた...」では困る ○ 自分の知らないコードが動きうる状況はセキュリティリスク ■ セキュリティポリシーが厳しいところではcommit hash指定 & リスクアセスメント必須 バージョンは明確に指定する 👍 👍 😥 😥 バージョン指定 latest だと 「何もしてないのに壊れました」で泣く 😭

Slide 26

Slide 26 text

©tete marche CO., LTD. VariablesとSecretsを正しく使い分ける 4. 26

Slide 27

Slide 27 text

©tete marche CO., LTD. 27 ● GHAに値を登録してjob中で使うところは似ているが、これらは別物 ○ Variables = いわゆる環境変数。環境ごとに変わる値。平文で保存される。 ○ Secrets = いわゆる機微情報。ID/Pass、アクセストークンなど。暗号化して保存される。 VariablesとSecretsを正しく使い分ける

Slide 28

Slide 28 text

©tete marche CO., LTD. 28 ● GHAに値を登録してjob中で使うところは似ているが、これらは別物 ○ Variables = いわゆる環境変数。環境ごとに変わる値。平文で保存される。 ○ Secrets = いわゆる機微情報。ID/Pass、アクセストークンなど。暗号化して保存される。 ● 使い分けたい理由: セキュリティと設定を確認しやすくするため ○ 外部APIのアクセストークンなど、他の開発者にも見られたくない情報がある ○ 手元などで上手く動かないときなど、CI設定を参考にしたいことがある VariablesとSecretsを正しく使い分ける

Slide 29

Slide 29 text

©tete marche CO., LTD. 29 ● GHAに値を登録してjob中で使うところは似ているが、これらは別物 ○ Variables = いわゆる環境変数。環境ごとに変わる値。平文で保存される。 ○ Secrets = いわゆる機微情報。ID/Pass、アクセストークンなど。暗号化して保存される。 ● 使い分けたい理由: セキュリティと設定を確認しやすくするため ○ 外部APIのアクセストークンなど、他の開発者にも見られたくない情報がある ○ 手元などで上手く動かないときなど、CI設定を参考にしたいことがある VariablesとSecretsを正しく使い分ける 機微情報が他開発者に見えちゃうのは問題 見えて良い情報がマスクされてて見えないのも不便 😭

Slide 30

Slide 30 text

©tete marche CO., LTD. Actionは定期的にバージョンアップしよう 6. 30

Slide 31

Slide 31 text

©tete marche CO., LTD. 31 ● Action = 良くやるコマンドをまとめたもの (アプリで言うライブラリ) ○ actions/checkout actions/cache shivammathur/setup-php とか ○ GitHubも公開しているし、有志によるOSSもあるし、自分専用も作れる ○ ActionのバージョンアップはDependabotを使って半自動化可能 Actionは定期的にバージョンアップしよう

Slide 32

Slide 32 text

©tete marche CO., LTD. 32 ● Action = 良くやるコマンドをまとめたもの (アプリで言うライブラリ) ○ actions/checkout actions/cache shivammathur/setup-php とか ○ GitHubも公開しているし、有志によるOSSもあるし、自分専用も作れる ○ ActionのバージョンアップはDependabotを使って半自動化可能 ● バージョンアップするべき理由: 基本的に最新verしか保守されない ● 考え方はライブラリのバージョンアップと同じ ○ 新しければ高機能、高性能。旧バージョンを使うことは逆で、セキュリティリスクでもある。 ○ やらずに貯めるとビッグバンバージョンアップで全然動かなくて血を吐く Actionは定期的にバージョンアップしよう

Slide 33

Slide 33 text

©tete marche CO., LTD. 33 ● Action = 良くやるコマンドをまとめたもの (アプリで言うライブラリ) ○ actions/checkout actions/cache shivammathur/setup-php とか ○ GitHubも公開しているし、有志によるOSSもあるし、自分専用も作れる ○ ActionのバージョンアップはDependabotを使って半自動化可能 ● バージョンアップするべき理由: 基本的に最新verしか保守されない ● 考え方はライブラリのバージョンアップと同じ ○ 新しければ高機能、高性能。旧バージョンを使うことはセキュリティリスク。 ○ やらずに貯めるとビッグバンバージョンアップで全然動かなくて痛い目を見る ○ バージョンアップはDependabot等を使って省力化可能 Actionは定期的にバージョンアップしよう 必要に迫られてからのビッグバン対応は 期日と障害リスクの板挟みで泣く 😭

Slide 34

Slide 34 text

©tete marche CO., LTD. CI死んでて仕事出来ません...を無くそう 6. 34

Slide 35

Slide 35 text

©tete marche CO., LTD. 35 ● GHAを含むXaaSは稀に良く落ちる ○ それだけに頼っていると「いざ」というときに貰い死にする ○ 「CIが調子悪いので今は開発できません」を何度も言っていると信頼を失う CI死んでて仕事出来ません...を無くそう

Slide 36

Slide 36 text

©tete marche CO., LTD. 36 ● GHAを含むXaaSは稀に良く落ちる ○ それだけに頼っていると「いざ」というときに貰い死にする ○ 「CIが調子悪いので今は開発できません」を何度も言っていると信頼を失う ● じゃあどうすりゃええねん → ローカルでも動かせる状態にする ○ 例えば... ■ 環境構築やテストコマンドをshell scriptやMakefileにまとめ、それを呼び出す形にする ■ GHA Workflowを手元で動かす仕組み (actなど) を整えておく ○ ローカルで動かせるとCI/CD設定変更のデバッグもやりやすい ○ ポータブルな状態を保てていれば、他のCI/CDサービスへの移行もしやすい CI死んでて仕事出来ません...を無くそう

Slide 37

Slide 37 text

©tete marche CO., LTD. 37 ● GHAを含むXaaSは稀に良く落ちる ○ それだけに頼っていると「いざ」というときに貰い死にする ○ 「CIが調子悪いので今は開発できません」を何度も言っていると信頼を失う ● じゃあどうすりゃええねん → ローカルでも動かせる状態を目指す ○ 例えば... ■ 環境構築やテストコマンドをshell scriptやMakefileにまとめ、それを呼び出す形にする ■ actなど、GHA workflowを手元で動かす仕組みを整えておく ○ ローカルで動かせるとCI/CD設定変更のデバッグもやりやすい ○ ポータブルな状態を保てていれば、他のCI/CDサービスへの移行もしやすい CI死んでて仕事出来ません...を無くそう 何もやってないと「落ちることは分かっているのに 何で対策してないんですか?」って詰められて泣く 😭

Slide 38

Slide 38 text

©tete marche CO., LTD. まとめ 38

Slide 39

Slide 39 text

©tete marche CO., LTD. 39 ● タイムアウトは必ず設定しておく ● バージョンは明確に指定する ● VariablesとSecretsを正しく使い分ける ● Actionを定期的にバージョンアップする ● CI死んでて仕事出来ません...を無くす まとめ

Slide 40

Slide 40 text

©tete marche CO., LTD. 40 ● GitHub Actions documentation (GitHub) ● GitHub Actions Workflow チェックリスト (CyberAgent Developers Blog) ● CI/CD とは -継続的インテグレーション/継続的デリバリー (Red Hat) ● GitHub Actions Deep Dive using PHP / PHPerKaigi 2022 (k1LoW) 参考文献

Slide 41

Slide 41 text

We are hiring!

Slide 42

Slide 42 text

©tete marche CO., LTD. Q&A 42