コミットされるlaravelのコードだけをフォーマットする
以前の記事でPHPをフォーマットができるようになった。
ただこれを実行すると既存のコードをすべて書き換えてしまうので、チームの合意が得づらい。 なのでコミットされるファイルだけをフォーマットしていき、徐々にフォーマットされている世界を目指す事にした。
設定サンプルリポジトリ
この記事の設定を適用したサンプル
使用技術
phpでどうやるのかがわからないが、laravelにはpackage.json
つまりはNode.jsの技術が入っています。なので基本的にはNode.jsの技術に全部頼ることにする。
というわけでhuskyとlint-sagedを使う。
導入
インストールや初期設定。
基本的には設定者以外の人は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というのがあるらしいのでそれを設定してやれば動くはず。
インストールして雑に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"] }