ゆずめも

メモ的なブログです。主に勉強した事について書いてます。

コミットされるlaravelのコードだけをフォーマットする

以前の記事でPHPをフォーマットができるようになった。

yuzu441.hateblo.jp

ただこれを実行すると既存のコードをすべて書き換えてしまうので、チームの合意が得づらい。 なのでコミットされるファイルだけをフォーマットしていき、徐々にフォーマットされている世界を目指す事にした。

設定サンプルリポジトリ

この記事の設定を適用したサンプル

github.com

使用技術

phpでどうやるのかがわからないが、laravelにはpackage.jsonつまりはNode.jsの技術が入っています。なので基本的にはNode.jsの技術に全部頼ることにする。

というわけでhuskyとlint-sagedを使う。

github.com

github.com

導入

インストールや初期設定。 基本的には設定者以外の人はgit cloneしてきて、composer install, npm installすれば勝手に動く状態を目指す。

phpのフォーマットは以前の記事でも使用したphp-cs-fixerを使用します。ルール設定等も以前の記事を参考にしてください。

また設定にはnpmを使用するという前提で書きます。もしyarnなどを使ってる場合は適宜置き換えてください。

npm i -D husky lint-staged

# huskyの初期準備
npm set-script prepare "husky install"
npm run prepare

# commit hookの設定
npx husky add .husky/pre-commit "npx lint-staged"

# lint-stagedの設定ファイルを作る
touch .lintstagedrc.json

# package.jsonにフォーマット用の設定を作成
# php-cs-fixerのコンフィグファイルを指定する
npm set-script format './vendor/bin/php-cs-fixer fix --config .php-cs-fixer.dist.php'

lint-stagedの設定

先程作成した.lintstagedrc.jsonに設定を記述していきます。
設定自体はphp-cs-fixerの以前の記事*1を参考に記述します

{
  "./app/**/*.php": [
    "npm run format"
  ],
  "./config/**/*.php": [
    "npm run format"
  ],
  "./database/factories/**/*.php": [
    "npm run format"
  ],
  "./database/seeders/**/*.php": [
    "npm run format"
  ],
  "./routes/**/*.php": [
    "npm run format"
  ],
  "./tests/**/*.php": [
    "npm run format"
  ],
  "./.php-cs-fixer.dist.php": [
    "npm run format"
  ]
}

これでlint-stagedの設定で指定したファイルが変更された時に自動的にphp-cs-fixerが実行されるようになる。

ちなみに

bladeのフォーマットにはblade-formatterというのがあるらしいのでそれを設定してやれば動くはず。

www.npmjs.com

インストールして雑にpackage.jsonのscriptsに登録する。

npm i -D blade-formatter
npm set-script format:blade 'blade-formatter -w'

あとは.lintstagedrc.jsonにblade用の設定を追加

{
"./resources/**/*.blade.php": ["npm run format:blade"]
}