🛫

Vscode Intelephense で名前空間を自動インポート (Laravel)

2021/07/06に公開

本題

仕事柄、動画サイトなどで日本語の Laravel チュートリアルなどを見たりするのですが、
意外と多くの方は、名前空間を手書きするか、又は(ドキュメントサイトなどから)コピペしたりするのですが、ちょっと違和感を感じたりします。

多くの方は、vscode を使っている訳ですが、今の時代、手書きしなくても、エディタ(エクステンション)でできますよね。

vscode であれば、Namespace Resolver というそれ専用のエクステンションもありますが、有名な Intelephense でも問題無くできます。

Intelephense でのやり方、、、というか、クラス名を書いている最中に、下に候補出てきますよね。それを選択(Tab や Enter で確定)すれば、自動で追加されます。

web.php の場合

use App\Http\Controllers\HomeController;  // ← これです

Route::get('', [HomeController::class, 'index']);

もしクラスファイルを作り立てで、まだ認識されない場合は、一度そのファイルを開いてやれば大丈夫です。また、もし既に書いてあるクラス名の名前空間をインポートしたい場合は、上記で言えば、HomeController の文字を選択するか、又は、最後の r の後ろにカーソルを置き、Ctrl + スペース(Macの場合、Command + スペース)を押せば、再度候補が表示されます。

ちなみに、Intelephense を入れると、パンくずが細部(メソッド名やら HTML の構造やら)まで表示されるようになったりしますが、これは、"breadcrumbs.symbolPath": "off", で回避出来ます。

余談ですが

Laravel8から、ルーティングの書き方が突然変わって、「うゎ、面倒!」、と思った方も多いと思いますが、上記知っていると、特に問題はありませんね。

この新しい書き方は、エディタがクラス名を認識し易くなる(そのクラスファイルに簡単に移動できたり、クラス名を変えると参照している箇所も自動で変わったり)するのが利点ですね。

実は Laravel8 で変更が行われる前から、Laravel 界隈では有名な Freek さんが、この方法を勧めていたので、Laravel8で、この方法がデフォルトになったという感じですね。

参考:https://freek.dev/1210-a-better-way-to-register-routes-in-laravel

おかしな箇所等ありましたら、コメント下さい。

Discussion