M1 Macでコミットしようとしたらhusky > pre-commit (node v12.17.0)と怒られた話

2023/11/24に公開

簡潔にいうと

  • huskeyで怒られたら package.json で何しようとしてるか見ようね
  • (今回においては)PHP入れようね

環境

  • Vue + Laravelで構成されたWebサイト開発
  • Node.js v12.17.0 使用
  • コミットするときに一緒にlint系も動くようになっている

起こったこと

上記既存プロジェクトに新規でジョインして git commit しようとしたら

husky > pre-commit (node v12.17.0)

とエラーになりできなかった。

原因

この世にはhusky(参考)というGitフックツールがある。
Gitのコマンド時に一緒にやってほしいもの(フォーマットとかテストとか)を設定できる子らしい。

nodeを使用しているのでhuskyの設定は package.json で行っているっぽく、そこを確認してみる。

"husky": {
    "hooks": {
        "commit-msg": "commitlint -E HUSKY_GIT_PARAMS",
        "pre-commit": "yarn exec lint-staged",
        "pre-push": "branchlint"
    }
},

husky > pre-commit の記載の通り、今回はpre-commitのタイミングでやっている lint-staged が原因っぽい。

これはプロジェクトで設定しているものっぽく、同じく package.json に記載があった。

"lint-staged": {
    "resources/**/*.{js,jsx,vue}": [
        "eslint --fix",
        "git add"
    ],
    "resources/**/*.{css,scss}": [
        "stylelint --fix",
        "git add"
    ],
    "resources/**/*.blade.php": [
        "blade-formatter -c",
        "git add"
    ],
    "**/*.php": [
        "./vendor/bin/php-cs-fixer fix --config=.php_cs.dist --dry-run -v --stop-on-violation --using-cache=no",
        "git add"
    ],
    "*.{png,jpeg,jpg,gif,svg}": [
        "imagemin-lint-staged",
        "git add"
    ]
},

こんな感じでプロジェクトで使っている各ファイルのlintやformatをしているのだが、
改めてエラーを見てみると

✖ ./vendor/bin/php-cs-fixer fix --config=.php_cs.dist --dry-run -v --stop-on-violation --using-cache=no:
env: php: No such file or directory

と言われていた。
どうやら "./vendor/bin/php-cs-fixer fix --config=.php_cs.dist --dry-run -v --stop-on-violation --using-cache=no", PHPを使用するらしく
M1 MacにはデフォルトでPHPが入っていないのでエラーだったよう。
Homebrewを経由してPHPを入れて完了。
※ 参考(PHPのドキュメント): https://www.php.net/manual/ja/install.macosx.packages.php

Discussion