Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
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
6.9k
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
800
余裕を生み出すコードレビュー 〜レビュイー編〜 / code-review-phpcon-2019
fortkle
8
7.6k
「設計振り返り」を始めてみようと思っている話 / architecture reflection
fortkle
3
640
「ママ向けNo.1アプリ」の 更なる成長を支える仕組み / startup-engineer-night-connehito
fortkle
2
370
良いテストデータ、悪いテストデータ / 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
あるけみー式LTスライド作成術
alchemy1115
2
220
俺の仕事は AIに奪われないし、たぶんその BIも要らない
hikaruri
0
510
ソフトウェアDNAとクラウドエージェントのススメ
cloudace
0
110
Claude in Chrome 入門 / Introduction to Claude in Chrome
cielo1985
0
850
人間はどの意思決定を手放せるのか
kawasima
15
7.2k
アプリをもっと"iOSアプリっぽく"する小さな工夫 / Small Touches That Make Your App Feel More Like an iOS App
matsuji
2
940
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
3
510
アクセスキーこわい やめかたと漏らさない工夫
sassssan68
1
370
積み重なった技術負債への挑戦 〜初手としての全社ゴト化〜
techtekt
PRO
0
1.3k
Minecraft JavaのMODをSwiftで作る
1mash0
0
180
株式会社シーエーシー エンジニア向け会社紹介資料
cac
0
57k
「守り」で活用するオンデバイスLLM 〜写ってはいけないを総力戦で防ぐ〜 / iOSDC Japan 2026
nakamuuu
0
170
Featured
See All Featured
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
320
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
540
So, you think you're a good person
axbom
PRO
2
2.2k
How to train your dragon (web standard)
notwaldorf
97
6.8k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
730
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
We Are The Robots
honzajavorek
0
380
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.8k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
520
Design in an AI World
tapps
1
320
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