【Laravel】tinkerで名前空間をタイプするのってめんどくさい→解決しました

こんにちは。tinkerを使用していて今まで気が付かなかったのですが、タイプ負荷を軽減するためにtinkerがクラスのエイリアスを自動で作成してくれるみたいです。私みたいに気づいていない方がいると損なので、発信してみようと思います。

エイリアスとは

エイリアスとは「別名」のことです。tinkerはクラスを呼び出す際に、長い名前空間の入力を短縮できるように自動的にエイリアスをつけてくれます。例えばApp\Models\Userを使いたい場合はUserだけで呼び出すことができます。

>>> User::find(1);
[!] Aliasing 'User' to 'App\Models\User' for this Tinker session.
=> App\Models\User {#4356
     id: "1",
     name: "joe",
     email: "joe@xxx.xxx",
     email_verified_at: null,
     password: "",
     remember_token: null,
     created_at: null,
     updated_at: "2021-07-31 05:18:34",
     deleted_at: null,
   }

上記は通常であれば、名前空間も指定する必要があります。しかし結果の欄にAliasing 'User’ to 'App\Models\User’ for this Tinker session.とあり、このtinkerセッション中はApp\Models\UserクラスをUserとして呼び出せるように自動に設定してくれます。これで長ったらしい名前空間を入力することなくクラスを使えるので非常に便利です。

自動でエイリアスしてくれないクラス

しばらく使っていて、自動でエイリアスしてくれないクラスがあることに気が付きました。例えば日付処理でおなじみのCarbonクラスです。名前空間の指定なしで呼び出すと以下のようにエラーとなります。

>>> Carbon::now();
PHP Error:  Class 'Carbon' not found in /home/e-seventheval()'d code on line 1

Laravelのドキュメントを調べたところ、vendorフォルダ配下のクラスは自動でエイリアスしてくれないことがわかりました。しかしマニュアルで設定すればエイリアスは設定出来ることがわかりましたので、次の章で紹介いたします。

vendorフォルダ配下のクラスにエイリアスをつける

まずはartisanコマンドでtinkerの設定ファイルを作成します。完了するとconfig/tinker.phpが作成されます。

$ php artisan vendor:publish --provider="Laravel\Tinker\TinkerServiceProvider"

# 成功時のメッセージ
Copied File [/vendor/laravel/tinker/config/tinker.php] To [/config/tinker.php]
Publishing complete.

config/tinker.phpのaliasの中に、エイリアスを作成したいクラスを列挙します。試しにCarbon\Carbonを登録してみます。

    'alias' => [
		    Carbon\Carbon::class
    ],

tinkerでエイリアスが作成されるか確認してみましょう。

>>> Carbon::now();
[!] Aliasing 'Carbon' to 'Carbon\Carbon' for this Tinker session.
=> Carbon\Carbon @1628314469 {#3413
     date: 2021-08-07 05:34:29.275771 UTC (+00:00),
   }

今度はCarbonのエイリアスが自動で作成されました。これでまた呼び出しが楽になりますね。

まとめ

tinkerでは通常自動でクラスのエイリアスが作成されますが、vendorフォルダ配下のクラスは作成されないことがわかりました。vendorフォルダ配下のクラスにエイリアスを設定するにはconfig/tinker.phpのaliasにクラスを登録する必要があります。

サードパーティ製のライブラリなどはvendorフォルダ配下に入るので、ちょっと試したいときにエイリアス登録しておくと捗ると思います。私もこれからはこの設定を積極的に試していこうと思いました。

それでは、良きtinkerライフを!

Laravel

Posted by kobainmac