GitHub Actionsで始めるPHPアプリケーションのCI実践入門 / ga-phperkaigi2020

F4d37a67ce86b2f962c79d73a9127d3c?s=47 fortkle
February 11, 2020

GitHub Actionsで始めるPHPアプリケーションのCI実践入門 / ga-phperkaigi2020

PHPerKaigi 2020の登壇資料です。
サンプルアプリはこちら https://github.com/fortkle/ga-phperkaigi-todo-api

F4d37a67ce86b2f962c79d73a9127d3c?s=128

fortkle

February 11, 2020
Tweet

Transcript

  1. 2.

    ⾃⼰紹介 • ⾼野 福晃 @fortkle • コネヒト株式会社 / Backend Engineer

    • 本を共著で書きました! • 『TECHNICAL MASTER はじめての
  PHPプロフェッショナル開発』 • 好きなPHPはPHP7.4
  2. 3.

    ⾃⼰紹介 • ⾼野 福晃 @fortkle • コネヒト株式会社 / Backend Engineer

    • 本を共著で書きました! • 『TECHNICAL MASTER はじめての
  PHPプロフェッショナル開発』 • 好きなPHPはPHP7.4 苦⼿なPHPは5.3.3
  3. 4.

    コネヒトについて • ママ向けNo.1(※) アプリ「ママリ」 • toC向けのコミュニティサービス • ママの3⼈に1⼈(※) が利⽤中 ˞೛৷தʙࡀϲ݄ͷࢠڙΛ࣋ͭঁੑ

    ਓΛର৅ͱͨ͠ௐࠪΑΓ ʮݱࡏ࢖͍ͬͯΔΞϓϦ ೛৷ɾࢠҭͯܥ Λ͢΂ͯڭ͍͑ͯͩ͘͞ʯͰୈҐʢ೥݄࣮ࢪɺௐࠪڠྗɿΠϯςʔδʣɻ
  4. 7.

    GitHub Actionsとは - 1 • GitHubと完全に連携したCI/CD機能 • 様々なワークフローを簡単に⾃動化 • ビルド、テスト、デプロイ…etc

    • GitHub上のあらゆるイベントをフックにできる • commitやpush • issue作成やコメント追加など
  5. 8.

    GitHub Actionsとは - 2 • 設定ファイル • yamlで記述 • 設定ファイル内の処理をコード化し、共有できる

    • 処理のかたまり = 「アクション」 • 「GitHub Marketplace」と呼ばれる場所があり、世界 中の⼈々で共有しブラッシュアップしていける
  6. 9.

    GitHub Actionsとは - 3 • 料⾦体系 • public リポジトリは無料! •

    private リポジトリは従量制 • ⼀定の無料枠あり(2000分〜/⽉)
  7. 11.

    今回使う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を削除
  8. 12.

    今回使うPHPアプリケーション - 2 • CakePHP4, MySQL5.7 で作成 • Docker Composeで構築

    • phpサービス • DBサービス • ルートから1段下げて
 ./app 内にCakePHPのアプリを配置
  9. 34.

    1. のまとめ • workflow/jobs/stepsは以下のように理解する • workflow:「いつ起動するか」 • jobs:「どの環境で動かすか」 • steps:「何をするか」

    • 既存のCIと違って最初が「空っぽ」なのは汎⽤的なワークフローを
 ⾒据えているため(あくまで推測) • ex. 半年放置されたissueをcloseするワークフローに
   ソースコードは不要
  10. 39.

    2. 各種ツールを使う環境を作る • ソースコードのチェックアウト • actions/checkout • PHPの環境構築 • shivammathur/setup-php

    • MySQLの環境構築 • 仮想環境にもとから⼊っているMySQLを使う GitHub公式のアクションは actions/◯◯で公開されている
  11. 40.

    2. 各種ツールを使う環境を作る • ソースコードのチェックアウト • actions/checkout • PHPの環境構築 • shivammathur/setup-php

    • MySQLの環境構築 • 仮想環境にもとから⼊っているMySQLを使う ⾔語別に setup-◯◯ というアクションがあり、 バージョンの切り替えはこれを使うのが⼀般的
  12. 41.

    2. 各種ツールを使う環境を作る • ソースコードのチェックアウト • actions/checkout • PHPの環境構築 • shivammathur/setup-php

    • MySQLの環境構築 • 仮想環境にもとから⼊っているMySQLを使う MySQL以外にも様々なソフトウェアが
 最初からインストールされている。 docker-compose, heroku, aws-cli etc
  13. 42.

    2. 各種ツールを使う環境を作る • ソースコードのチェックアウト • actions/checkout • PHPの環境構築 • shivammathur/setup-php

    • MySQLの環境構築 • 仮想環境にもとから⼊っているMySQLを使う もとから⼊ってなかったり、バージョンが違う場合は 「サービスコンテナ」という仕組みが使える
  14. 63.
  15. 66.
  16. 69.

    (補⾜) reviewdog • reviewdogというコードレビューツール • PRのdiffの部分だけにlinterの警告が出るようにフィルター • 更にインラインでPRにアノテーションがつく • 2/11現在、サブディレクトリで実⾏するときにうまく動かない

    不具合あり (ルートで実⾏すれば問題ない) • 修正PRが作られたので近いうちに解決しそう • 次スライドの処理はアクションに切り出してもよいかも
  17. 71.

    (補⾜) docker-composeでテスト • やろうと思えばできる(実際できた) • が、以下の理由から個⼈的にはまだ使っていない • 挙動がやや不安定(マウント, 権限等の関係?) •

    随所でsleepする処理が必要(waitすることもできるけど…) • 遅い • 単純にビルド時間が+α • Docker Layer Cacheが困難
  18. 73.

    (余談) コネヒトの場合 • 業務では現在TravisCIをメインで使⽤ • DockerフレンドリーなCircleCIも⼀部使⽤ • GitHub Actionsは以下の箇所での導⼊実績のみ •

    ネイティブアプリのリリース関連作業(※) • ライブラリの定期アップデート • PHPアプリケーションへのCI適⽤はない • 発表者の個⼈開発のみ ˞(JUIVC"DUJPOTΛ࢖ͬͯϦϦʔε࡞ۀΛͪΐͬͱָʹͨ͠࿩ ɹIUUQTUFDIDPOOFIJUPDPNFOUSZSFMFBTFGMPXBVUPNBUJPOCZHJUIVCBDUJPOT