1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PHPStormでPHP CS Fixerを設定する方法。(WSL2上のファイルにも適用する方法付き)

Last updated at Posted at 2023-02-11

概要

PHPStormを愛用しています。
PHPでの開発を行っていると必ず使うPHP CS Fixerですが、その設定方法をまとめました。
特に、WSL2のUbuntu上に配置されているプロジェクトのファイルに適用する方法がいくら調べても分かりませんでしたが、今回ようやく方法を見つけたので残しておきます。

前提

  • Windowsで開発していること
  • gitbashとubuntuを併用していること

事前設定

PHPのインストールから記載します。PHPStormでの設定方法が知りたいせっかちさんはこちら

PHPのインストール

  1. PHPのWindows用ファイル群ダウンロードページからVS16 x64 Non Thread Safeと書かれたzipファイルをダウンロードします。
    image.png
  2. ダウンロードしたファイルを解凍し、フォルダー名をphpという名前に変更し、Cドライブ直下にコピーします。
  3. php.ini-developmentをコピーしてphp.iniというファイル名に変更します。
    image.png

composerのインストール

  1. composer公式ページのwindows用インストーラーをダウンロードします。
    image.png
  2. ダウンロードしたインストーラーを実行してインストールします。

PHP CS Fixerのインストール

gitbashを起動し、以下のコマンドを実行してPHP CS Fixerをインストールします。

gitbash
composer global require friendsofphp/php-cs-fixer

※公式ではプロジェクトのcomposer.jsonに追加することが推奨されていますが、自分の開発マシンで開発する以上必ず使うのでglobalにインストールしています。

PHP CS Fixerの設定ファイルの作成

  1. .php-cs-fixer.dist.phpという名前で設定ファイルを作ります。中身は自分好みでいいと思います。以下は私が使っている設定です。
    .php-cs-fixer.dist.php
    <?php
    return (new PhpCsFixer\Config())
        ->setRiskyAllowed(true)
        ->setUsingCache(false)
        ->setRules([
            '@PSR12'                      => true,
            'no_unused_imports'           => true,
            'ordered_imports'             => true,
            'single_import_per_statement' => false,
            'binary_operator_spaces'      => [
                'operators' => [
                    '='  => 'align',
                    '=>' => 'align',
                ],
            ],
            'array_syntax'                => ['syntax' => 'short'],
            'blank_line_before_statement' => true,
        ])
        ->setFinder(PhpCsFixer\Finder::create()->exclude('vendor')->in(__DIR__))
        ;
    
  2. 好きな場所に移動します。
    ※以後はドキュメント直下に保存した前提で進めます。

PHPStormに設定

  1. PHPStormの設定ダイアログを表示し、ツール > File Watchersを表示します。
    1.png
  2. +ボタンを押し、テンプレートは<custom>を選択します。
    2.png
  3. 以下の内容で設定します。
    設定項目
    名前 任意の名前
    ファイルタイプ PHP
    スコープ 現在のファイル
    プログラム php-cs-fixerをインストールした場所。
    globalインストールしたので多分ユーザーフォルダー
    例:C:\Users\Paix_\AppData\Roaming\Composer\vendor\bin\php-cs-fixer
    引数 --config="設定ファイルを配置した場所" --verbose fix "\$FilePath\$"

3.png

ここまでがWindows上のファイルにPHP CS Fixerを適用する設定

Windows上のプロジェクトのファイルにPHP CS Fixerを適用する場合はこの設定でいけるのですが、WSL2のUbuntu上のプロジェクトのファイルに対しては、この設定のままでは以下のエラーが出て変更されません。

cmd.exe /D /C call C:\Users\Paix_\AppData\Roaming\Composer\vendor\bin\php-cs-fixer.bat --config=C:\Users\Paix_\.php-cs-fixer.dist.php --verbose fix \\wsl$\Ubuntu\home\ubuntu\work\sample-project\TestFile.php
'\\wsl$\Ubuntu\home\ubuntu\work\sample-project'
��L�̌��݂̃f�B���N�g���� CMD.EXE ���J�n���܂����B
UNC �p�X�̓T�|�[�g����܂���BWindows �f�B���N�g��������Ŏg�p���܂��B
PHP CS Fixer 3.14.4 Oliva by Fabien Potencier and Dariusz Ruminski.
PHP runtime: 8.1.15
Loaded config default from "C:\Users\Paix_\.php-cs-fixer.dist.php".
Paths from configuration file have been overridden by paths provided as command arguments.

In Runner.php line 248:
                                                                                                            
  [Symfony\Component\Filesystem\Exception\IOException]                                                      
  Cannot write to file "\\WSL$\UBUNTU\home\ubuntu\work\sample-project\TestFile.php" as it is not writable.

どうもWindows上でPHP CS Fixerを動かした場合、Ubuntu上のファイルには変更を加えられないようです。バグかな。

Ubuntu上のファイルにもPHP CS Fixerを適用する設定

  1. 設定ファイルをUbuntu上の任意の場所にコピーします。
    image.png
  2. PHPStormの設定ダイアログを表示し、ツール > File Watchersを表示します。
  3. +ボタンを押し、テンプレートは<custom>を選択します。
    4.png
  4. 以下の内容で設定します。
    設定項目
    名前 任意の名前
    ファイルタイプ PHP
    スコープ 現在のファイル
    プログラム wsl
    引数 php-cs-fixer --config="設定ファイルを配置した場所" --verbose fix "\$FileName\$"

5.png

仕組み

PHPStormのFile Watcherはコマンドプロンプトを実行するようなので、wslコマンドを使ってUbuntuのコマンドを実行しています。

ただし・・・

これで確かにUbuntu上のファイルを更新した場合でも対象ファイルにPHP CS Fixerが適用されるのですが、動作がクソ遅いです。
一旦WSLを呼び出してからPHP CS Fixerコマンドを実行するのですから、遅くても当然です。
他にもっといい方法があればぜひ教えてください。

あとがき

php-cs-fixer windows ubuntu 変更されない で検索しても出てこないし、
php-cs-fixer windows ubuntu not working で検索しても出てこないしで絶望でしたが、何とかなりました。遅いけど。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?