こんにちは、あきぞらです。
今日は、Laravelプロジェクトの品質を爆上げするツール、PHP-CS-Fixerについてお話しします。
コードの一貫性や可読性に悩んでいる方、チーム開発でコーディングスタイルの統一に頭を抱えている方に見て欲しいです。
PHP-CS-Fixerとは
まずは基本中の基本、PHP-CS-Fixerについて軽く触れておきましょう。
PHP-CS-Fixerの基本
PHP-CS-Fixerって、なんだか難しそうな名前ですよね。
でも、実はとってもシンプルなツールなんです。
簡単に言えば、あなたのPHPコードを「きれいに整形してくれる」優秀な助手さんみたいなものです。
例えば、こんな感じ。
function hello($name){ return "Hello, ".$name."!"; }
これが、PHP-CS-Fixerを使うと...
function hello($name) { return "Hello, " . $name . "!"; }
きれいになりましたね。
なぜLaravel環境で重要か
「でも、そんなの手動でやればいいじゃん」って思った人もいるかもしれません。
そうなんです、小規模なプロジェクトならそれでもOK。
でも、Laravelのような大規模フレームワークを使う本格的な開発では、話が変わってきます。
- 時間の節約: 手動で整形してたら、いつコーディングするんですか?
- 一貫性の維持: チームの全員が同じスタイルで書けるって、素敵じゃないですか?
- 可読性の向上: きれいなコードは、読みやすいコード。バグの早期発見にもつながります。
つまり、PHP-CS-Fixerは、あなたのLaravel開発をより効率的にしてくれるんです。
実際に導入してみましょう。
環境
今回は、以下の条件でインストールしてみます。
- PHP 7.4以上
- Composer
- Laravelプロジェクト
PHP-CS-Fixerをインストールします。
composer require --dev friendsofphp/php-cs-fixer
これで、PHP-CS-Fixerがあなたのプロジェクトにインストールされます。
グローバルインストールとプロジェクト固有のインストールの違い
「ちょっと待って!グローバルにインストールしたほうがいいんじゃない?」
鋭い質問ですね!確かに、PHP-CS-Fixerはグローバルにインストールすることもできます。
でも、プロジェクト固有にインストールするメリットもあるんです。
- バージョン管理: プロジェクトごとに異なるバージョンを使える
- 環境の一貫性: チームメンバー全員が同じバージョンを使える
- 依存関係の明確化: プロジェクトの依存関係が明確になる
とはいえ、個人的な小規模プロジェクトならグローバルインストールでも全然OKです。
PHP-CS-Fixerの設定
さて、PHP-CS-Fixerをインストールしました。
次は、設定ファイルを調整してみます。
設定ファイル(.php-cs-fixer.php)の作成
PHP-CS-Fixerは、.php-cs-fixer.php
という設定ファイルを使って動作をカスタマイズします。プロジェクトのルートディレクトリに、このファイルを作成しましょう。
$finder = PhpCsFixer\Finder::create() ->in([ __DIR__ . '/app', __DIR__ . '/config', __DIR__ . '/database', __DIR__ . '/resources', __DIR__ . '/routes', __DIR__ . '/tests', ]); $config = new PhpCsFixer\Config(); return $config->setRules([ '@PSR12' => true, 'array_syntax' => ['syntax' => 'short'], 'ordered_imports' => ['sort_algorithm' => 'alpha'], 'no_unused_imports' => true, ]) ->setFinder($finder);
この設定ファイルは、PHP-CS-Fixerに「どのファイルを対象に」「どんなルールを適用するか」を教えています。
基本的なルールセットの設定
上記の設定ファイルで使用しているルールを簡単に説明しましょう:
@PSR12
: PSR-12コーディング規約に準拠します。array_syntax
: 短い配列構文を使用します。ordered_imports
: useステートメントをアルファベット順に並べ替えます。no_unused_imports
: 使用していないuseステートメントを削除します。
これらは基本的なルールセットですが、プロジェクトの要件に応じてカスタマイズできます。
PHP-CS-Fixerには100以上のルールがあるので、公式ドキュメントを参照して、自分好みの設定を見つけてください。
Laravelプロジェクトでの実運用
さあ、いよいよPHP-CS-Fixerを実際に使ってみましょう。
コードが自動的にきれいになっていく様子を見るのは結構楽しいです。
コマンドラインからの実行方法
PHP-CS-Fixerを実行するには、以下のコマンドを使用します:
./vendor/bin/php-cs-fixer fix
このコマンドを実行すると、PHP-CS-Fixerが設定ファイルに基づいてコードを自動的に修正します。
自動修正の実行
「でも、いちいちコマンドを実行するのは面倒くさいな...」
そう思った人、正しいです。エンジニアは怠惰であるべきです。
そこで、自動修正の設定をしてみましょう。
Laravelプロジェクトのcomposer.json
ファイルに以下のスクリプトを追加します:
"scripts": { "cs-fix": "php-cs-fixer fix" }
これで、以下のコマンドでPHP-CS-Fixerを実行できるようになります:
composer cs-fix
便利でしょ?これで、コードを書いた後に簡単にフォーマットできます。
CI/CDへの組み込み
さらに、CI/CDで自動化してしまおうと思います。
GitHubアクションでの自動チェック設定
GitHubを使っている方なら、GitHubアクションを使ってPHP-CS-Fixerを自動実行できます。
プロジェクトの.github/workflows
ディレクトリにphp-cs-fixer.yml
ファイルを作成し、以下の内容を記述します。
name: PHP-CS-Fixer on: push: branches: [ main ] pull_request: branches: [ main ] jobs: php-cs-fixer: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install Dependencies run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist - name: Run PHP-CS-Fixer run: vendor/bin/php-cs-fixer fix --dry-run --diff
これで、mainブランチへのプッシュやプルリクエスト時に、自動的にコードスタイルがチェックされます。
トラブルシューティング
PHP-CS-Fixerを設定している時によくあるエラーとその解決方法について。
「command not found」エラーが出る場合
このエラーは、PHP-CS-Fixerが正しくインストールされていない、またはパスが通っていない場合に発生します。
解決方法
- Composerでグローバルにインストールし直す
composer global require friendsofphp/php-cs-fixer
- パスが通っているか確認する
echo $PATH
Composerのbinディレクトリがパスに含まれていることを確認してください。
特定のファイルが無視される
設定ファイルの問題かもしれません。
解決方法:
.php-cs-fixer.php
の$finder
設定を確認する- 無視されているファイルが
.gitignore
に含まれていないか確認する
メモリ不足エラーが発生する
大規模なプロジェクトでメモリ不足エラーが出ることがあります。
PHPのメモリ制限を増やしてみる
php -d memory_limit=-1 vendor/bin/php-cs-fixer fix
これらの対処法で解決しない場合は、PHP-CS-Fixerの公式GitHubリポジトリのIssuesを確認してみてください。
PHP-CS-Fixer導入のメリット
- コードの一貫性が保たれる
- チーム開発がスムーズになる
- コードレビューの効率が上がる
- バグの早期発見につながる
- コーディングに集中できる(フォーマットを気にしなくてよい)
PHP-CS-Fixerは、使えば使うほどその威力を実感できるツールですね!