barryvdh/laravel-ide-helper は、PhpStorm などの IDE における補完機能を活用するために欠かせないものになっている。
また、Phan や PHPStan などの静的解析を行う際にスタブとして読み込ませる、という使い方もできる。
ただし、クラスの追加・削除等を行うたびに ide-helper
のコマンドを実行し、差分をコミットするのはやや煩雑であり、チーム開発ではコンフリクトが発生したりもする。
そこで、CI(今回は Bitbucket Pipelines)でコマンド実行 + PR 作成を自動化した。
設定内容
下記設定では master ブランチの変更がトリガーになっているが、custom
に書いて任意のタイミングで実行できるようにしても良い。
bitbucket-pipelines.yml
pipelines:
branchs:
master:
- step:
image: <利用するイメージ名>
caches:
- composer
script:
# `ide-helper-<直前のコミットハッシュ>` という名前でブランチを切る
- BRANCH_NAME=ide-helper-`git rev-parse --short=8 master`; FILE_CHANGED=''
- git config user.name "Laravel IDE Helper"
- git config user.email "test@example.com"
- git checkout -b $BRANCH_NAME
# 事前に .env.pipelines を作っておき、DB 接続情報などを記載しておく
- cp .env.pipelines .env
- composer install -n -o -a
# `ide-helper:generate` を実行し、差分があれば git commit
- php artisan ide-helper:generate
- 'test `git diff --name-only | wc -l` -ne 0 && git commit -am "ide-helper:generate の実行" && FILE_CHANGED=changed || echo no changes'
# `ide-helper:model` を実行し、差分があれば git commit
- php artisan ide-helper:model --write --reset
- 'test `git diff --name-only | wc -l` -ne 0 && git commit -am "ide-helper:model の実行" && FILE_CHANGED=changed || echo no changes'
# どちらか一方でも git commit していれば、git push して PR を作成する
- 'test $FILE_CHANGED && git push origin $BRANCH_NAME && curl -X POST --user $BITBUCKET_USERNAME:$BITBUCKET_PASSWORD -H "Content-Type: application/json" -d "{\"title\": \"<PR タイトル>\", \"source\": {\"branch\": {\"name\": \"$BRANCH_NAME\"}, \"repository\": {\"full_name\": \"<リポジトリ所有者ユーザ名>/<リポジトリ名>\"}}}" https://api.bitbucket.org/2.0/repositories/<リポジトリ所有者ユーザ名>/<リポジトリ名>/pullrequests || echo nothing to push'
注意点
-
git push
を行うため、Bitbucket Pipelines 用の SSH 鍵の設定が必要 - それとは別に、PR 作成の API を叩くために環境変数として Bitbucket の username と password を設定しておく必要がある
-
ide-helper:model
は DB のテーブル定義の情報も参照するため、別途 DB の sevice を定義しておく必要がある