Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
GitHub Actionsで始めるPHPアプリケーションのCI実践入門 / ga-phper...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
fortkle
February 11, 2020
Technology
5.5k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
GitHub Actionsで始めるPHPアプリケーションのCI実践入門 / ga-phperkaigi2020
PHPerKaigi 2020の登壇資料です。
サンプルアプリはこちら
https://github.com/fortkle/ga-phperkaigi-todo-api
fortkle
February 11, 2020
More Decks by fortkle
See All by fortkle
無駄な物をなるべく作らないリプレイス戦略 / replace-strategy-phperkaigi2021
fortkle
1
2.7k
フルリモート時代のカンバン運用 / kanban-operation-in-remote
fortkle
0
780
余裕を生み出すコードレビュー 〜レビュイー編〜 / code-review-phpcon-2019
fortkle
8
7.6k
「設計振り返り」を始めてみようと思っている話 / architecture reflection
fortkle
3
630
「ママ向けNo.1アプリ」の 更なる成長を支える仕組み / startup-engineer-night-connehito
fortkle
2
360
良いテストデータ、悪いテストデータ / testdata-antipattern
fortkle
4
7k
BackstopJSで始める CSSリグレッションテスト / backstopjs-css-test
fortkle
0
1.6k
PhpStorm導入アンチパターン / phpstorm-anti-pattern
fortkle
0
2.2k
やさしいコーディング規約の導入〜その後〜 / yasashii-sonogo
fortkle
7
3.7k
Other Decks in Technology
See All in Technology
[ChatGPT Work LT]事務作業が苦手な人のための バックオフィスの「半」自動化
chimaki_iot
0
250
侵入は突然に 〜 IoTマルウェアと悪用される家庭の機器 ~ / When Intrusion Strikes: IoT Malware and the Abuse of Home Devices
nttcom
0
1.5k
Data Hubグループ 紹介資料
sansan33
PRO
0
3.1k
取引先から届く 「セキュリティチェックシート」の読み解き方
kamadamakoto
0
130
FORENSIA: ローカルLLMフォレンジックハーネス
sumeshi
2
280
Webアクセシビリティ入門 2026
recruitengineers
PRO
2
450
Master Dataグループ紹介資料
sansan33
PRO
1
4.8k
Agent 時代の Kaggle 展望 / kaggle-in-the-agentic-era
upura
1
660
【CEDEC2026】『GRANBLUE FANTASY: Relink - Endless Ragnarok』のバトル制作事例 ~最高のキャラゲーを目指して~
cygames
PRO
0
230
Cursor Meetup Sapporo - Cursor物語 続編
cocacola917
0
140
Eight Engineering Unit 紹介資料
sansan33
PRO
3
8.1k
第3回しろおびセキュリティスポンサーセッション
log0417
0
160
Featured
See All Featured
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
460
Color Theory Basics | Prateek | Gurzu
gurzu
0
410
The Mindset for Success: Future Career Progression
greggifford
PRO
0
440
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
400
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
210
First, design no harm
axbom
PRO
2
1.2k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
240
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.2k
Being A Developer After 40
akosma
91
590k
Transcript
GitHub Actionsで始める PHPアプリケーションのCI実践⼊⾨ 2020.02.11 PHPerKaigi 2020 コネヒト株式会社 @fortkle
⾃⼰紹介 • ⾼野 福晃 @fortkle • コネヒト株式会社 / Backend Engineer
• 本を共著で書きました! • 『TECHNICAL MASTER はじめての PHPプロフェッショナル開発』 • 好きなPHPはPHP7.4
⾃⼰紹介 • ⾼野 福晃 @fortkle • コネヒト株式会社 / Backend Engineer
• 本を共著で書きました! • 『TECHNICAL MASTER はじめての PHPプロフェッショナル開発』 • 好きなPHPはPHP7.4 苦⼿なPHPは5.3.3
コネヒトについて • ママ向けNo.1(※) アプリ「ママリ」 • toC向けのコミュニティサービス • ママの3⼈に1⼈(※) が利⽤中 ˞৷தʙࡀϲ݄ͷࢠڙΛ࣋ͭঁੑ
ਓΛରͱͨ͠ௐࠪΑΓ ʮݱࡏ͍ͬͯΔΞϓϦ ৷ɾࢠҭͯܥ Λͯ͢ڭ͍͑ͯͩ͘͞ʯͰୈҐʢ݄࣮ࢪɺௐࠪڠྗɿΠϯςʔδʣɻ
本⽇のゴール 1. GitHub Actionsの仕組みをざっくり理解する 2. PHPアプリケーションのCIでよく⾏う処理をGitHub Actionsで実⾏する⽅法を知る • テスト、静的解析、コーディングスタイルの検査
GitHub Actionsについて
GitHub Actionsとは - 1 • GitHubと完全に連携したCI/CD機能 • 様々なワークフローを簡単に⾃動化 • ビルド、テスト、デプロイ…etc
• GitHub上のあらゆるイベントをフックにできる • commitやpush • issue作成やコメント追加など
GitHub Actionsとは - 2 • 設定ファイル • yamlで記述 • 設定ファイル内の処理をコード化し、共有できる
• 処理のかたまり = 「アクション」 • 「GitHub Marketplace」と呼ばれる場所があり、世界 中の⼈々で共有しブラッシュアップしていける
GitHub Actionsとは - 3 • 料⾦体系 • public リポジトリは無料! •
private リポジトリは従量制 • ⼀定の無料枠あり(2000分〜/⽉)
GitHub Actionsを 使ってみよう
今回使うPHPアプリケーション - 1 • Todo アプリのAPI(fortkle/ga-phperkaigi-todo-api で公開中) • 5つのendpoint •
GET: /todos ... 全てのToDoを返す • POST: /todos ... 新規のToDoを作る • GET: /todos/{id} ... id番のToDoを返す • PUT: /todos/{id} ... id番のToDoを更新 • DELETE: /todos/{id} ... id番のToDoを削除
今回使うPHPアプリケーション - 2 • CakePHP4, MySQL5.7 で作成 • Docker Composeで構築
• phpサービス • DBサービス • ルートから1段下げて ./app 内にCakePHPのアプリを配置
どうやって使っていくか • GitHub Actionsは素晴らしく多機能 • (とても15分では話しきれない!) • 今⽇のゴールである 「PHPアプリケーションのCIでよく⾏う処理をGitHub Actionsで実⾏する⽅法を知る」
を⽬的に、Step By Stepで必要なところだけ使っていく
どうやって使っていくか 1. ワークフローを起動させる 2. 各種ツール(ex. phpunit)を使う環境を作る 3. 各種ツールを使っていく
どうやって使っていくか 1. ワークフローを起動させる 2. 各種ツール(ex. phpunit)を使う環境を作る 3. 各種ツールを使っていく
1. ワークフローを起動させる • とりあえず簡単なコマンドを実⾏したい • .github/workflows/ に設定ファイルを置くだけ • ファイル名は⾃由
1. ワークフローを起動させる • .github/workflows/ci.yml
1. ワークフローを起動させる • .github/workflows/ci.yml name: ワークフローの名前(⾃由)
1. ワークフローを起動させる • .github/workflows/ci.yml on: どのイベントをトリガーに起動するか。 今回は「pull_request」と指定することで PRのopen, reopen, synchronizeに反応。
1. ワークフローを起動させる • .github/workflows/ci.yml jobs: 実⾏する1つ以上のジョブを定義。
1. ワークフローを起動させる • .github/workflows/ci.yml 「job_1」という名前のジョブを定義
1. ワークフローを起動させる • .github/workflows/ci.yml runs-on: Ubuntuの最新版環境の使⽤を指定。
1. ワークフローを起動させる • .github/workflows/ci.yml
1. ワークフローを起動させる • .github/workflows/ci.yml steps: 「何をやるか」を指定
1. ワークフローを起動させる • .github/workflows/ci.yml run: 任意のコマンドを実⾏させる。 ここではファイル⼀覧の出⼒と 現在の作業ディレクトリを表⽰。
1. ワークフローを起動させる • .github/workflows/ci.yml
1. ワークフローを起動させる • ymlファイルをpushしてPRを作成するとワークフローが 起動する
1. ワークフローを起動させる
1. ワークフローを起動させる workflow steps jobs
1. ワークフローを起動させる
1. ワークフローを起動させる ls -la の実⾏結果。 空っぽ = アプリケーションの ソースコードがまだないことが分かる。
1. ワークフローを起動させる pwd の実⾏結果。 ここが作業ディレクトリとなる。 `echo $GITHUB_WORKSPACE`でも取れる。
1. ワークフローを起動させる ˞IUUQTIFMQHJUIVCDPNKBBDUJPOTBVUPNBUJOHZPVSXPSLGMPXXJUIHJUIVCBDUJPOTBCPVUHJUIVCBDUJPOT
1. のまとめ • workflow/jobs/stepsは以下のように理解する • workflow:「いつ起動するか」 • jobs:「どの環境で動かすか」 • steps:「何をするか」
• 既存のCIと違って最初が「空っぽ」なのは汎⽤的なワークフローを ⾒据えているため(あくまで推測) • ex. 半年放置されたissueをcloseするワークフローに ソースコードは不要
どうやって使っていくか 1. ワークフローを起動させる 2. 各種ツール(ex. phpunit)を使う環境を作る 3. 各種ツールを使っていく
2. 各種ツールを使う環境を作る • 実際に動くアプリケーションを⽤意し、テストを実⾏で きる状態にする必要がある • そのために必要なもの • ソースコード •
PHP ( + Cakeを使うので ext-intl ) • MySQL
2. 各種ツールを使う環境を作る • GitHub Actionsで何かしたくなったらまずは共有されてい る「アクション」を探すと良い • 「アクション」とはstepsで指定できる処理のかたまり • GitHub
Marketplaceで共有されている
2. 各種ツールを使う環境を作る • ソースコードのチェックアウト • actions/checkout • PHPの環境構築 • shivammathur/setup-php
• MySQLの環境構築 • 仮想環境にもとから⼊っているMySQLを使う
2. 各種ツールを使う環境を作る • ソースコードのチェックアウト • actions/checkout • PHPの環境構築 • shivammathur/setup-php
• MySQLの環境構築 • 仮想環境にもとから⼊っているMySQLを使う GitHub公式のアクションは actions/◯◯で公開されている
2. 各種ツールを使う環境を作る • ソースコードのチェックアウト • actions/checkout • PHPの環境構築 • shivammathur/setup-php
• MySQLの環境構築 • 仮想環境にもとから⼊っているMySQLを使う ⾔語別に setup-◯◯ というアクションがあり、 バージョンの切り替えはこれを使うのが⼀般的
2. 各種ツールを使う環境を作る • ソースコードのチェックアウト • actions/checkout • PHPの環境構築 • shivammathur/setup-php
• MySQLの環境構築 • 仮想環境にもとから⼊っているMySQLを使う MySQL以外にも様々なソフトウェアが 最初からインストールされている。 docker-compose, heroku, aws-cli etc
2. 各種ツールを使う環境を作る • ソースコードのチェックアウト • actions/checkout • PHPの環境構築 • shivammathur/setup-php
• MySQLの環境構築 • 仮想環境にもとから⼊っているMySQLを使う もとから⼊ってなかったり、バージョンが違う場合は 「サービスコンテナ」という仕組みが使える
2. 各種ツールを使う環境を作る
2. 各種ツールを使う環境を作る uses: で使いたいアクションを指定。
2. 各種ツールを使う環境を作る with: でアクションの設定を指定。 ここでは、バージョンは7.4、拡張にext-intl、 ⾼速化のためcoverage: noneでxdebugなどの無効化を指定
2. 各種ツールを使う環境を作る テスト実⾏のためにtestという名の データベースが必要なので作成
2. 各種ツールを使う環境を作る ソースコードがチェックアウトされているか 確認のls -la。これでpushすると…
2. 各種ツールを使う環境を作る
2. 各種ツールを使う環境を作る ls -la の実⾏結果。 ソースコードがチェックアウト されていることがわかる。
2. 各種ツールを使う環境を作る ちなみに、name: を指定した場合 ここに表⽰される。無指定の場合は コマンドがそのまま使われる。
2. のまとめ • GitHub Actionsの本質は「アクション」を軸にした ワークフロー処理の共有&ブラッシュアップ • 何かやりたいことがあったらまずはGitHub Marketplace で探す
• なければ⾃作する(DockerかTypeScriptで作成可)
どうやって使っていくか 1. ワークフローを起動させる 2. 各種ツール(ex. phpunit)を使う環境を作る 3. 各種ツールを使っていく
3. 各種ツールを使っていく • 今回使うツールはphpunit, phpstan, phpcs • やること • composer
install • `vendor/bin/{hoge}` の実⾏ • 簡単!
3. 各種ツールを使っていく
3. 各種ツールを使っていく composerのインストールをして
3. 各種ツールを使っていく ツールを実⾏!
3. 各種ツールを使っていく ちなみに今回のアプリケーションは 環境変数でDBの接続情報を受け取る
3. 各種ツールを使っていく
3. 各種ツールを使っていく それぞれエラーなく実⾏されている
3. 各種ツールを使っていく それぞれエラーなく実⾏されている
3. 各種ツールを使っていく それぞれエラーなく実⾏されている
やりたかったことができた
まとめ
まとめ • GitHub ActionsでPHPアプリケーションをCIするのは ⼗分現実的な選択肢の1つになっている • GitHub Actionsを使うなら、積極的にアクションを活⽤& 共有していきましょう!
end! ”Twemoji" by Twitter, Inc and other contributors is licensed
under CC-BY 4.0
appendix
(補⾜) ビルドキャッシュ • actions/cache を使えば簡単に使える • デメリットは記述が⻑くなること • 特にjobを分けたときに同じ事を何度も書かないといけ ない
• Github Actionsのymlはアンカー/マージ⾮対応
(補⾜) ビルドキャッシュ
(補⾜) reviewdog • reviewdogというコードレビューツール • PRのdiffの部分だけにlinterの警告が出るようにフィルター • 更にインラインでPRにアノテーションがつく • 2/11現在、サブディレクトリで実⾏するときにうまく動かない
不具合あり (ルートで実⾏すれば問題ない) • 修正PRが作られたので近いうちに解決しそう • 次スライドの処理はアクションに切り出してもよいかも
(補⾜) reviewdog
(補⾜) docker-composeでテスト • やろうと思えばできる(実際できた) • が、以下の理由から個⼈的にはまだ使っていない • 挙動がやや不安定(マウント, 権限等の関係?) •
随所でsleepする処理が必要(waitすることもできるけど…) • 遅い • 単純にビルド時間が+α • Docker Layer Cacheが困難
(補⾜) docker-composeでテスト
(余談) コネヒトの場合 • 業務では現在TravisCIをメインで使⽤ • DockerフレンドリーなCircleCIも⼀部使⽤ • GitHub Actionsは以下の箇所での導⼊実績のみ •
ネイティブアプリのリリース関連作業(※) • ライブラリの定期アップデート • PHPアプリケーションへのCI適⽤はない • 発表者の個⼈開発のみ ˞(JUIVC"DUJPOTΛͬͯϦϦʔε࡞ۀΛͪΐͬͱָʹͨ͠ ɹIUUQTUFDIDPOOFIJUPDPNFOUSZSFMFBTFGMPXBVUPNBUJPOCZHJUIVCBDUJPOT