0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CakePHP5 アプリに GitHub Actions を導入して CI 環境を構築する

0
Last updated at Posted at 2026-01-18

前回の記事では、CakePHP5 のスケルトン作成と Docker での開発環境構築を行いました。
今回は、GitHub にコードを Push した際に、静的解析やチェックを自動で実行する CI(継続的インテグレーション)環境を構築します。

単に動かすだけでなく、「GitHub Secrets によるセキュリティ対策」と「キャッシュによる高速化」も試しています。

この記事でわかること

  • GitHub Actions で Docker を使った CI を動かす方法
  • docker/build-push-action によるビルドの高速化
  • actions/cache を使った Composer 依存関係のキャッシュ
  • GitHub Secrets を使った機密情報(SECURITY_SALT等)の安全な管理

この記事内のソースコードは以下で公開しています。

SECURITY_SALT の生成と設定

CI 環境で CakePHP を動作させるには、暗号化に使う SECURITY_SALT が必要です。

ソルト値の生成

ターミナルで以下のワンラインを実行して、64文字のランダムな文字列を生成します。

openssl rand -hex 32

GitHub Secrets への登録

生成した値を GitHub に登録します。これにより、YAMLファイルに直接ソルト値を書かずに済みます。

  1. リポジトリの Settings > Secrets and variables > Actions を開く
  2. New repository secret をクリック
  3. 名前を SECURITY_SALT とし、生成した値を貼り付けて保存

CI 設定ファイルの作成

cms-ci.yml を作成します。
cms ディレクトリ配下に変更があった場合のみ動作するように設定しています。

cms/.github/workflows/cms-ci.yml
name: CMS CI

on:
  pull_request:
    paths:
      - 'cms/**'

permissions:
  contents: read

jobs:
  check:
    runs-on: ubuntu-24.04

    steps:
    - uses: actions/checkout@v6

    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v3

    # 1. Dockerイメージのビルド(レイヤーキャッシュ活用)
    - name: Build Docker image
      uses: docker/build-push-action@v6
      with:
        context: .
        tags: cli:latest
        load: true
        cache-from: type=gha
        cache-to: type=gha,mode=max

    # 2. Composer依存関係(vendor)のキャッシュ
    - name: Cache Composer dependencies
      uses: actions/cache@v4
      with:
        path: cms/vendor
        key: ${{ runner.os }}-composer-${{ hashFiles('cms/composer.lock') }}
        restore-keys: |
          ${{ runner.os }}-composer-

    # 3. 依存関係のインストール
    - name: Composer install
      run: |
        docker run --rm -v ${{ github.workspace }}:/app -w /app/cms cli:latest php ../composer.phar install --no-interaction --prefer-dist

    # 4. 静的解析・チェックの実行
    - name: Run composer check
      run: |
        docker run --rm \
          -v ${{ github.workspace }}:/app \
          -w /app/cms \
          -e SECURITY_SALT \
          -e DATABASE_TEST_URL \
          cli:latest php ../composer.phar check
      env:
        SECURITY_SALT: ${{ secrets.SECURITY_SALT }}
        DATABASE_TEST_URL: sqlite://127.0.0.1/tmp/tests.sqlite

キャッシュ

CI の実行時間を短縮するために、2種類のキャッシュを組み合わせています。

  1. Docker レイヤーキャッシュ: Dockerfile の各命令をキャッシュします。イメージのビルド時間を短縮します。
  2. Composer 依存キャッシュ: vendor ディレクトリそのものをキャッシュします。composer.lock に変更がない限り、重いライブラリのダウンロードをスキップします。

環境差異の排除

ホスト側のディレクトリをコンテナの /app にマウントし、ローカル開発環境と同じ Docker イメージ(cli:latest)で composer check を実行しています。これにより、「手元の PC では動くが CI だと落ちる」という環境依存の問題を完全に防げます。

GitHub Secrets による秘匿

SECURITY_SALT を GitHub の環境変数から注入することで、ログに生のソルト値が表示されるのを防ぎつつ、セキュアにテストを実行できます。
今回はテストのみでの利用なので、秘匿すべき情報ではないかもですが、勉強のために利用することとしました。

composer.json でのコマンド定義

GitHub Actions から呼び出している check コマンドは、composer.json の scripts セクションで定義しています。
定義することで、ユニットテスト(PHPUnit)、静的解析(PHPStan)、コード規約チェック(phpcs)をまとめて実行できます。

composer.json
    "scripts": {
        "check": [
            "@stan",
            "@cs-check",
            "@test"
        ],
        "cs-check": "phpcs --colors -p",
        "cs-fix": "phpcbf --colors -p",
        "test": "phpunit --colors=always",
        "stan": "phpstan analyse --memory-limit=1G"
    }

動作確認

PR を作成すると、GitHub Actions が自動的に起動します。
初回はビルドに時間がかかりますが、2回目以降はキャッシュが効いて速く終了します。
小さなアプリケーションですが、キャッシュが効いてないときは1分40秒ぐらい、キャッシュが効いているときは50秒ぐらいでした。

さいごに

これで、コードの品質を自動で担保する基盤が整いました。
CakePHP の CMSチュートリアルを進めていこうと思います!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?