UX / UI のデザインに強いWebシステムの開発と、BtoB Webマーケを支援するWeb制作を提供するN’s Creates (エヌズクリエイツ) 株式会社の西山です。
Laravel Pintは、PHPのコードスタイルを自動で修正してくれる、Laravel公式のコマンドラインツールです。「設定不要(zero-configuration)」をコンセプトにしており、導入すればすぐにチーム全体のコードを美しく、一貫性のあるスタイルに統一できます。
これにより、コードレビューで「ここのインデントが…」「ここのスペースは…」といった、本質的でないスタイルに関する指摘に時間を費やすことがなくなります。
デフォルトでのインストール
Laravel Pintは、Laravel 9.x以降の新規プロジェクトにはデフォルトでインストールされています。composer.jsonファイルのrequire-devセクションに"laravel/pint": "^1.0"といった記述があれば、すでにご利用の環境に導入済みです。
手動でのインストールと実行コマンド
古いバージョンのLaravelや、Pintが含まれていないプロジェクトで利用したい場合は、以下のComposerコマンドで簡単にインストールできます。
インストールコマンド
composer require laravel/pint --dev
実行コマンド
プロジェクトのルートで以下のコマンドを実行すると、appディレクトリ内のPHPファイルが自動でフォーマットされます。
./vendor/bin/pint
修正はせず、どこに問題があるかだけを確認したい場合は--testオプションを付けます。
./vendor/bin/pint --test
Docker環境での実行例
Dockerを使っている場合、毎回コンテナに入るのは手間です。package.jsonにスクリプトを定義しておくと、ホストOSから簡単に実行できて便利です。
1. package.jsonにスクリプトを追記
{
"private": true,
"scripts": {
"pint": "docker-compose exec -T app ./vendor/bin/pint",
"pint:test": "docker-compose exec -T app ./vendor/bin/pint --test"
}
}
※appの部分は、ご自身のDocker環境のPHPが動作しているコンテナ名に置き換えてください。
2. ホストOSから実行
この設定により、ホストOSのターミナルから以下のコマンドでPintを実行できるようになります。
# 自動修正を実行
npm run pint
# 修正箇所のチェックのみ実行
npm run pint:test
Pintの概念とPHP-CS-Fixerとの関係
Pintを理解するには、その土台となっているPHP-CS-Fixerというツールの存在が重要です。
- PHP-CS-Fixer: PHPのコーディング規約を自動で修正するための非常に強力で有名なツール。ただし、利用するには多くのルールを自分で調べて設定ファイル(
.php-cs-fixer.dist.php)を作成する必要があり、導入には少し手間がかかります。 - Laravel Pint: このPHP-CS-Fixerを内部的に利用し、Laravel開発者向けに最適な設定をプリセットとして提供してくれるツールです。Pintは、PHP-CS-Fixerの複雑な設定をラップし、「設定不要」で使えるようにしてくれている、いわば「親切なラッパー」なのです。
Presetの種類と説明
Pintには、コーディング規約のルールをまとめた「Preset(プリセット)」が用意されています。プロジェクトのルートにpint.jsonという設定ファイルを作成することで、使用するプリセットを指定できます。
{
"preset": "laravel"
}
laravel(デフォルト): Laravel独自の規約に沿ったコーディングスタイル。インデントや配列の書き方など、Laravelフレームワークのソースコードと同じスタイルを適用します。特別な理由がなければ、これを選んでおけば間違いありません。psr12: PHPの標準的なコーディング規約であるPSR-12に準拠したスタイル。Laravel以外のPHPプロジェクトでも一般的に使われます。symfony: Symfonyフレームワークで採用されている規約に沿ったスタイルです。
ルールのカスタマイズ
Pintはデフォルトでも十分強力ですが、pint.jsonでルールを細かくカスタマイズすることも可能です。これにより、プロジェクト固有のルールを適用できます。
以下はカスタマイズ設定の例です。
カスタマイズ例の詳細
{
"preset": "laravel",
"rules": {
"yoda_style": false,
"strict_comparison": true,
"final_class": true,
"ordered_class_elements": {
"order": [
"use_trait",
"case",
"constant_public",
"constant_protected",
"constant_private",
"property_public",
"property_protected",
"property_private",
"construct",
"destruct",
"magic",
"phpunit",
"method_public",
"method_protected",
"method_private"
]
}
}
}
- 比較を自動で厳密にする (
strict_comparison):==のような緩やかな比較を、===のような厳密な比較に自動で修正します。バグの温床になりやすい緩やかな比較を撲滅できます。 - クラス内の順序を指定する (
ordered_class_elements): クラス内のプロパティやメソッドの順番をルール化します。上記の例では、public→protected→privateの順に並ぶように設定しています。これにより、誰が書いてもクラスの構造が同じになり、可読性が向上します。 - 継承されないクラスをfinalにする (
final_class): 他のクラスから継承されていないクラスに、自動でfinalキーワードを付与します。これにより、意図しない継承を防ぎ、コードの堅牢性を高めます。
まとめ
Laravel Pintは、単なるコードフォーマッターではありません。チーム開発の効率を上げ、コードの品質を維持し、開発者がより本質的な課題に集中するための強力なサポーターです。
- Laravel 9以降はデフォルトで導入済み
- 設定不要ですぐに使える手軽さ
- Docker環境でも簡単に実行できる
pint.jsonでプロジェクト固有のルールも設定可能
まだ導入していないプロジェクトがあれば、ぜひこの機会に試してみてはいかがでしょうか。もうコードスタイルで悩む必要はなくなります。
UX / UI のデザインに強いWebシステムの開発と、BtoB Webマーケを支援するWeb制作を提供する
N's Creates 株式会社は、神戸三宮オフィスまで週1出社(それ以外はリモートワーク)できる「デザイナー」「エンジニア」を募集しています。
興味のある方は、カジュアル面談しますので気軽にお問い合わせください!









