Laravel

【Laravel】PHP-CS-Fixer導入する方法!

こんにちは、あきぞらです。

今日は、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のような大規模フレームワークを使う本格的な開発では、話が変わってきます。

  1. 時間の節約: 手動で整形してたら、いつコーディングするんですか?
  2. 一貫性の維持: チームの全員が同じスタイルで書けるって、素敵じゃないですか?
  3. 可読性の向上: きれいなコードは、読みやすいコード。バグの早期発見にもつながります。

つまり、PHP-CS-Fixerは、あなたのLaravel開発をより効率的にしてくれるんです。

実際に導入してみましょう。

環境

今回は、以下の条件でインストールしてみます。

  1. PHP 7.4以上
  2. Composer
  3. Laravelプロジェクト

PHP-CS-Fixerをインストールします。

composer require --dev friendsofphp/php-cs-fixer

これで、PHP-CS-Fixerがあなたのプロジェクトにインストールされます。

グローバルインストールとプロジェクト固有のインストールの違い

「ちょっと待って!グローバルにインストールしたほうがいいんじゃない?」

鋭い質問ですね!確かに、PHP-CS-Fixerはグローバルにインストールすることもできます。

でも、プロジェクト固有にインストールするメリットもあるんです。

  1. バージョン管理: プロジェクトごとに異なるバージョンを使える
  2. 環境の一貫性: チームメンバー全員が同じバージョンを使える
  3. 依存関係の明確化: プロジェクトの依存関係が明確になる

とはいえ、個人的な小規模プロジェクトならグローバルインストールでも全然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が正しくインストールされていない、またはパスが通っていない場合に発生します。

解決方法

  1. Composerでグローバルにインストールし直す
   composer global require friendsofphp/php-cs-fixer
  1. パスが通っているか確認する
   echo $PATH

Composerのbinディレクトリがパスに含まれていることを確認してください。

特定のファイルが無視される

設定ファイルの問題かもしれません。

解決方法:

  1. .php-cs-fixer.php$finder設定を確認する
  2. 無視されているファイルが.gitignoreに含まれていないか確認する

メモリ不足エラーが発生する

大規模なプロジェクトでメモリ不足エラーが出ることがあります。

PHPのメモリ制限を増やしてみる

php -d memory_limit=-1 vendor/bin/php-cs-fixer fix

これらの対処法で解決しない場合は、PHP-CS-Fixerの公式GitHubリポジトリのIssuesを確認してみてください。

PHP-CS-Fixer導入のメリット

  1. コードの一貫性が保たれる
  2. チーム開発がスムーズになる
  3. コードレビューの効率が上がる
  4. バグの早期発見につながる
  5. コーディングに集中できる(フォーマットを気にしなくてよい)

PHP-CS-Fixerは、使えば使うほどその威力を実感できるツールですね!

-Laravel

Copyright© あきぞらてっく , 2024 All Rights Reserved Powered by AFFINGER5.