開発ブログ

株式会社Nextatのスタッフがお送りする技術コラムメインのブログ。

電話でのお問合わせ 075-744-6842 ([月]-[金] 10:00〜17:00)

  1. top >
  2. 開発ブログ >
  3. PHP >
  4. Laravel >
  5. [Laravel5]PHPDocを書いてLaravelとIDEをもっと便利に使う
no-image

[Laravel5]PHPDocを書いてLaravelとIDEをもっと便利に使う

こんにちは、中榮です。

もうIDEの補完がないと生きていけない体になって久しいです。

マジックメソッドや返り値がmixedなメソッドを多用するフレームワーク、ライブラリを利用してコードを書いているとIDEの補完が効きにくいことがよくあります。

PHPDocを書くことである程度この辛さを軽減することができます。

この記事では、マジックメソッドが比較的多く登場するLaravelを例に2つのおすすめを挙げます。

※利用しているIDEはPHPStormです。

ローカル変数に@varでmixed対策

クラスに存在するプロパティの他に、ローカル変数もDocコメントで補完できます。 変数に代入するメソッドや関数の返り値がmixedもしくはPHPDocがない場合に有効です。

例えば、LaravelのIoCコンテナをサービスロケーターとして利用する場合に呼び出したオブジェクトを補完できます。
(コンストラクタやセッタで依存注入した方が素直だと思いますが)

            /**
             * @var \Illuminate\Contracts\Guard $auth
             */
            $auth = \App::make('auth');
            $user = $auth->user();

個人的にはEloquentのBuilderクラスの補完によく使います。

マジックプロパティに@property

クラスに実在せずマジックメソッドの__get()で実装されているプロパティを補完できます。

Laravelの場合はModelクラスに一通り書いておくとリレーションやプロパティ、アクセサを補完できるので便利です。

<?php namespace App\Models;

use App\Models\User;
use App\Models\Comment;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Collection;

/**
 * Class Article
 * @property int $id ID
 * @property int $user_id ユーザーID
 * @property string $title タイトル
 * @property string $body 本文
 * @property array $content 物件
 * @property User $user ユーザー
 * @property Collection|Comment[] $comments コメント
 */
class Article extends Model {

※PHPには今の所ジェネリクスがないため、Colectionの代わりにCollection|Comment[]の形で書いておくと、foreachの中で補完が効くという小技があります。Laravelのソースコードで見かけたので真似ています。

他に@methodもマジックメソッドの対抗策として役に立ちます。

最後に

元のフレームワークやライブラリが補完されにくい場合でも、PHPDocを書くことである程度まで補完することができます。もちろん、元のソースにPHPDocが書かれていないのでなんともならない、というケースもありますが。

フレームワークやライブラリを選ぶ際には、素直でPHPらしい補完の効きやすいコードで実装されているかどうか、というのも1つの良い目安だと思います。

 

自分で実装するコードにはPHPDocをしっかり書き、また、戻り値がmixedになるようなメソッド・関数を生み出さないことでIDEの恩恵を受けやすくなります。

ただし、PHPDocだけでは型の保証までは行えません。PHPDocを間違うと間違った補完が行われうるので注意が必要です。PHPDocの前にタイプヒントを書くのが良い習慣でしょう。

  • posted by もりちゃん
  • Laravel
TOPに戻る