広告

【Laravel】エイリアスをVS Codeでエラー解消・ジャンプ・補完

Laravel

当サイトではアフィリエイト広告を利用しています。

広告

はじめに

Laravelではエイリアスという便利な機能があります。
不要な記述を避けることができますが、実行には問題なくても、開発時にVS CodeなどのIDEで使う場合には問題があります。

今回はその問題を解決するための手順をまとめました。

Laravel Sailでの開発環境の構築方法は以下をご覧ください。

Windows
Laravel Sailで開発環境構築【Vite対応】
今回は、Laravel Sailを使って環境の構築を行いました。 SailはDockerですので、開発環境を簡単に用意することもできますし、カスタマイズすることも楽です。
Mac
【M1 Mac】Laravel Sailで開発環境構築【Vite対応】
Laravel Sailを使って環境の構築を行いました。 SailはDockerですので、開発環境を簡単に用意することもできますし、カスタマイズすることも楽です。
使用するバージョン
  • Windows 11 or macOS Monterey (M1)
  • Laravel Framework 8 or 9 or 10

2022/10/02 WindowsとMacを使い、最新バージョンで確認しました。
2023/03/11 Laravel10で確認しました。

他にも私のブログで、Laravelについて解説している記事がありますのでご覧ください。

広告

【紹介】個人開発

私の個人開発ですがQuiphaというサービスを開発しました。(Laravel, Vue3など)
良かったら、会員登録して動作を試してみて下さい。

また、Laravel 9 実践入門という書籍を出版しました。
Kindle Unlimitedを契約している方であれば、読み放題で無料でご覧いただくことができます

是非多くの方に読んでいただき、Laravelの開発に少しでもお役に立てたら幸いです。

Laravelのエイリアスとは

エイリアスの概要

Laravelプロジェクトの、以下のファイルを確認してみましょう。

config\app.php

エイリアスの定義を確認します。
ファサードクラス等が定義してあります。

    'aliases' => [

        'App' => Illuminate\Support\Facades\App::class,
        'Arr' => Illuminate\Support\Arr::class,
        'Artisan' => Illuminate\Support\Facades\Artisan::class,
        'Auth' => Illuminate\Support\Facades\Auth::class,
        'Blade' => Illuminate\Support\Facades\Blade::class,
        'Broadcast' => Illuminate\Support\Facades\Broadcast::class,
        'Bus' => Illuminate\Support\Facades\Bus::class,
        'Cache' => Illuminate\Support\Facades\Cache::class,
        'Config' => Illuminate\Support\Facades\Config::class,
        'Cookie' => Illuminate\Support\Facades\Cookie::class,
        'Crypt' => Illuminate\Support\Facades\Crypt::class,
        'Date' => Illuminate\Support\Facades\Date::class,
        'DB' => Illuminate\Support\Facades\DB::class,
        'Eloquent' => Illuminate\Database\Eloquent\Model::class,
        'Event' => Illuminate\Support\Facades\Event::class,
        'File' => Illuminate\Support\Facades\File::class,
        'Gate' => Illuminate\Support\Facades\Gate::class,
        'Hash' => Illuminate\Support\Facades\Hash::class,
        'Http' => Illuminate\Support\Facades\Http::class,
        'Js' => Illuminate\Support\Js::class,
        'Lang' => Illuminate\Support\Facades\Lang::class,
        'Log' => Illuminate\Support\Facades\Log::class,
        'Mail' => Illuminate\Support\Facades\Mail::class,
        'Notification' => Illuminate\Support\Facades\Notification::class,
        'Password' => Illuminate\Support\Facades\Password::class,
        'Queue' => Illuminate\Support\Facades\Queue::class,
        'RateLimiter' => Illuminate\Support\Facades\RateLimiter::class,
        'Redirect' => Illuminate\Support\Facades\Redirect::class,
        // 'Redis' => Illuminate\Support\Facades\Redis::class,
        'Request' => Illuminate\Support\Facades\Request::class,
        'Response' => Illuminate\Support\Facades\Response::class,
        'Route' => Illuminate\Support\Facades\Route::class,
        'Schema' => Illuminate\Support\Facades\Schema::class,
        'Session' => Illuminate\Support\Facades\Session::class,
        'Storage' => Illuminate\Support\Facades\Storage::class,
        'Str' => Illuminate\Support\Str::class,
        'URL' => Illuminate\Support\Facades\URL::class,
        'Validator' => Illuminate\Support\Facades\Validator::class,
        'View' => Illuminate\Support\Facades\View::class,

    ],

エイリアスに登録しないと、useにクラスのパスを宣言する必要があります。
コントローラ内で、デバッグログを出力する処理を記述してみましょう。

<?php

namespace App\Http\Controllers;

// 使用するクラスを宣言
use Illuminate\Support\Facades\Log;

class HomeController extends Controller
{
    /**
     * index
     *
     * @return \Illuminate\View\View
     */
    public function index()
    {
        Log::debug('ログを出力!');

        return view('home');
    }
}

このように、Laravelが用意しているファサードや、よく使うクラスのパスを毎回宣言するのは面倒ですよね。

use Illuminate\Support\Facades\Log;

Laravelではデフォルトでエイリアスに登録されているため、以下の宣言でも大丈夫です。

use Log;

もっと言えば、useの宣言は不要で、クラス名の前にバックスラッシュを記述するだけで使用することができます。

\Log::debug('ログを出力!');

先程のコードは以下のようになります。スッキリしました。

<?php

namespace App\Http\Controllers;

class HomeController extends Controller
{
    /**
     * index
     *
     * @return \Illuminate\View\View
     */
    public function index()
    {
        \Log::debug('ログを出力!');

        return view('home');
    }
}

エイリアスに登録されているクラスはこのように扱うことができます。

問題1

実行は問題なくできますが、VS Code上のコードがエラーになってしまします。

これは指定されているクラスを、IDEが捕捉できていないためです。

本当にコーディングミスをしているエラーと、区別がつかなくなります。

問題2

問題1と絡みますが、そのクラスのメソッドやプロパティを、コード補完できないことです。
また、PHPDocが確認できないため、引数や戻り値などをすぐに確認できません。
コーディングしている際に、正確に打ち込まないといけないし、別途、関数の仕様を調べないといけないのは非常に効率が悪いです。

問題3

実装に直接ジャンプできないことです。
例えば自分で作成したファサードクラスがあり、関数の実装へジャンプしたいケースがありますが、わざわざGrep検索などで探すしかありません。

折角エイリアスに登録したのに、IDE上で問題があるので結局useに定義・・、それだと意味がありませんよね。

広告

laravel-ide-helperの導入

これらの問題を解決するためには、laravel-ide-helperを導入しましょう。

GitHub – barryvdh/laravel-ide-helper: IDE Helper for Laravel
IDE Helper for Laravel. Contribute to barryvdh/laravel-ide-helper development by creating an account on GitHub.

以下のコマンドで、Composerでインストールします。

$ sail composer require --dev barryvdh/laravel-ide-helper

composer.jsonに以下が追加されました。

    "require-dev": {
        "barryvdh/laravel-ide-helper": "^2.13",
...
    },

以下のコマンドを実行して、ファサードの情報を自動生成しましょう。

$ sail php artisan ide-helper:generate

プロジェクト直下に以下のファイルが作成されました。作業はこれだけです。

_ide_helper.php

先程のコードを見てみましょう。クラス名にバックスラッシュを追加したコードがエラーになっていません。(useの宣言はしていない)

きちんとファサードクラスの関数のPHPDocが表示されました。

コード補完もバッチリ動作しています。

Ctrlキーを押しながら、クリックすることでジャンプもできました。
一度、_ide_helper.phpの方へジャンプします。

自動生成されたファイルですので、更に、該当の関数をCtrlキーを押しながらクリックすることで、実際の実装へジャンプすることができました。

自分でファサードクラスを実装した場合でも、ide-helper:generateを実行すれば、同じように動作します。

その他

初学者へ

Laravelを初めて触る方へ向け、手順やアドバイスをまとめました。

外部サーバーへ公開

作成したアプリは公開して使ってもらいましょう!
Laravelアプリケーションを外部公開する方法をまとめました。

脆弱性対策

脆弱性を抱えたアプリケーションの場合、攻撃を受ける可能性があり大変危険です。
作成したアプリケーションは、脆弱性対策も意識しましょう。

GitHubと連携

GitHubと連携する方法を解説しました。
プロジェクトの管理はGitHubを活用しましょう。

GitHub Copilot

GitHub Copilotを導入し、AIにコーディングをサポートしてもらうこともできます。

さいごに

エイリアスを活用しなるべく不要な記述をせず、開発効率が上がると思いますので、是非活用してみてください。

他にも私のブログで、Laravelについて解説している記事がありますのでご覧ください。

LaravelMacOSPHPVS CodeWindowsツールプログラミング
広告

個人開発

千草 @chigusaweb

現役のITエンジニア。 気ままにコードを書いたり技術情報を発信しています。 Webアプリ/Windows・Macアプリ/モバイルアプリなど。 (Java, PHP, Javascript, Swift, Python, C#, 他) 個人開発:Clibor, Quipha, TXT-Crypter, 符計算特訓, チグサツール Kindle本: Laravel9 実践入門, 他

クリップボード履歴

Clibor

Windows

Cliborはシンプルで高機能なクリップボード履歴ソフトです。
また普段よく使うワードを定型文として登録し、いつでもクリップボードに保存することができます。高度なテキスト整形・FIFOモード・ホットキーに対応。

クリップボード履歴

Windows版Cliborの利便性を、そのままMacでも。
定型文登録、高度なテキスト整形、FIFOモードなど、便利なクリップボード履歴機能を利用できます。macOS最新のTahoeにも対応。

テキスト暗号化

テキストを暗号化してURLで共有・保存できる無料サービスです。
パスフレーズを知る人だけが復号できます。登録不要、データはサーバーに保存されません。
Notionでも利用できます。

学習

Quipha

Web / iOS

自分だけの問題集や問題を作成し、クイズを行い、学習に活用することができるアプリです。
例えば、学校の授業、語学学習、IT資格やその他の資格など多彩な分野での学習を支援します。
いつでも、どこでも、あなたの学習をサポート。

ツール

日常の「ちょっとした効率化」をサポートするWeb便利ツール集。
テキスト・データ処理から最新のAI連携まで、日々のちょっとした手間でググりがちなユーティリティを1つの場所に集約。

麻雀

麻雀の符計算をひたすら特訓しマスターしましょう。
初心者の方はもちろん、もっと速く計算したい方にも役立ちます。
5万対局以上の実践から問題を収録。

コメント

タイトルとURLをコピーしました