カテゴリーアーカイブ PhpStorm

著者:杉浦

【PhpStorm】PHP新規プロジェクトのパッケージ群が豪華

 プロジェクトはフレームワークを選定してインストに従って素地を配置。フレームワークに沿った上で自由にコーディングとするだけでできます。これでも勿論いいのですが、世の中にはフレームワークと個別の成果物の合間にあるようなプロトタイプのパッケージも多くあります。PhPStormは下図の赤丸の様にフレームワークのみならず、そういったプロトタイプもカバーしています。

 何をしているかというとcomposer create-project hoge/fugaで生成されるプロジェクトの一覧を用意し、適宜composer create-projectしています。
 PHPには自らを呼び出すためにHTTPサーバを用意することができます。Laravelをはじめとしていくつかのフレームワークはこの機能をリッチにラッピングしています。
PHP: ビルトインウェブサーバー – Manual
 この組み込みサーバと合わせることで、すぐにそれらしいものを扱えます。Laravelならばenv編集, npm install, artisan migrate, artisan seed, npm run devでフロントエンド、バックエンドが大体完成です。
 このある程度何かが作られたプロジェクトパッケージの中にはDB等のリソースさえ用意すれば、もうそれだけで製作者が望んだ完成品になるようなものもあります。使い方次第でアプリのダウンロードの様にも扱えます。

  • この記事いいね! (1)
著者:杉浦

【PhpStorm】ショートカットキーのリストを表示するショートカットキー

 PhpStormのできることは膨大でそのできることに対応しているショートカットキーの数もまた多いです。その様に多いショートカットキーを覚えられる人は稀でしょう。これの対策なのかいくつかのショートカットキーをグループ化したショートカットキーのリストのポップアップを表示するショートカットキーが用意されています。このリストをクイックリストと言います。
クイック・リスト – 公式ヘルプ | PhpStorm
クイックリストの設定 – 公式ヘルプ | PhpStorm
 私がよく使うのは大体次の三つです。
 Alt+Enterによる今カーソルが当たっているコードを改善する提案の表示。厳密にはクイックリストと違いますが感覚的に似ているので挙げました。

 Ctrl+Shift+Alt+Tによるリファクタリング操作の表示。

 Ctrl+Nによる何かしらの目印の名前検索の表示。これはTabで選択を動かせます。

  • この記事いいね! (0)
著者:杉浦

【PhpStorm】deep-assoc-completionプラグインの妙な機能

 deep-assoc-completionはPHPの配列のキーを探索するプラグインです。これのおかげで連想配列を予測補完でき、配列を扱うのが楽になります。
deep-assoc-completion – Plugins | JetBrains

 あっさりしたいいプラグインなのですが配列に関係なさそうなPhp->JSの翻訳機能がついていました。次の様な翻訳が働きます。

 昔のエキサイト翻訳ばりの怪しさですが、JavaScriptのコードになっています。少なくともクラス、ファイルあたりの各依存関係を解決する必要があり、微妙な手直しも必要なのでフレームワークのコード全体をコピーすることはあまり得でないでしょう。一方でLaravelのhelper関数、バリデーション関数の様な小さな閉じたコード、緯度経度と平面直角座標を変換する長い四則演算のコード、といったものを変換するのには便利です。
 この機能は実験的機能であり実現するにしても随分先の話ですが、JavaScriptへの変換精度を上げる、webpackかnpm runか何かのビルド用スクリプトに組み込む、の二つが出来ればJavaScript、PHPの両方をサポートする一つのプログラムファイルを作るなんてこともできそうです。

 python to javascript transpilerやpython to php transpilerでググるとまあまあ件数が出てきました。pythonを第3言語ないし中間言語として扱えば現時点でもJavaScript、PHPの両方をサポートする一つのプログラムファイルを作ることは現時点でも現実的?

  • この記事いいね! (0)
著者:杉浦

【Laravel】【PhpStorm】Laravelプラグインの参照、移動機能

 Laravelはよく文字列で特定のパスの対象を指定します。それは配列であったり、ファイルであったり、メソッドで合ったり様々です。プラグインはこの指定の入力補完と移動を容易にします。これがあるとどこかしらを見ながら手打ちするといった手間を省けます。
Laravel – 公式ヘルプ | PhpStorm
Laravel – Plugins | JetBrains
Haehnchen/idea-php-laravel-plugin: Laravel Framework Plugin for PhpStorm / IntelliJ IDEA
 下画像のcompletion, gotoが予測と参照先への移動のついた機能です。

 コード補完は次の様に説明されています。

 静的解析の時点でコード補完が出来るぐらいに宣言を把握できる、ということは宣言の場所に移動することもまた可能です。Ctrl+Bはここでも便利です。

  • この記事いいね! (1)
著者:杉浦

【PhpStorm】PhpStormのショートカットキーを覚えるためのプラグインKey Promoter X

Key Promoter X – Plugins | JetBrains
 Key Promoter Xは何らかの操作を行った際、その操作に対応するショートカットキーがあるならば、そのショートカットキーを通知するプラグインです。これを用いることでPhpStormをより効率的に使えるようになります。
 具体的に何をするかというと次のgifです。

引用元:Key Promoter X – Plugins | JetBrains
 コマンドを打ち込むとやかましいくらい通知が出ます。ショートカットキーによる操作を心がけることで、このうっとおしい通知を減らします。この心がけが長く続くと、知っている操作をほとんどショートカットキーで行う様になります。
 このプラグインは知っている操作をよりうまく行うための矯正具です。真により上手くPhpStormを使えるようになるためには、このプラグイン以外に頼るのみでなく、知らない操作を吸収していくことが更に必要になります。

  • この記事いいね! (2)
著者:杉浦

【PhpStorm】Gitの範囲差分操作

 PhpStormはコーディング画面のままGitに関連した便利な操作ができます。画像の様な差分を表す部分をクリックすると変更前のコードが現れます。ここからショートカットで色々できます。

 よく使うのが差し戻しとコピーです。差し戻しは次のgifの様に戻るアイコンをクリック。この部分だけgitのhead部分のコードに戻せます。

 コピーはgifのようにメモアイコンをクリック。変更前後の動作の比較などに便利です。

 他にも差分へ移動、詳しい変更点の強調など細やかな操作が可能です。

  • この記事いいね! (0)
著者:杉浦

【PhpStorm】PhpStorm、PyCharm等JetBrains製IDEの公式マニュアル

JetBrains公式マニュアル日本語版 – 使い方から高等テクニックまで
 上記リンクはリンク名の通りJetBrains製IDEの公式マニュアルサイトです。このサイトなかなかくせものでGoogle検索の優先順位が内部ページのほとんど(少なくとも知る限り全部)より低く見つけにくいです。
 内部ページの多くは個々のIDEのヘルプです。例えば、次の画像の様にIDE名でググるとそのIDEについてのヘルプページが現れます。大体これです。


 優先されない本体側に何があるかというと、ショートカットキー一覧のPDFと

PhpStormのショートカットキー一覧
 新機能の紹介です。
 PhpStorm の新機能 – 究極の進化を遂げた最強の PHP 開発環境

 何かしらIDEの中身が新しくなるたび、このページにデモ付きで機能紹介がされます。過去の機能に関しては今までのユーザが重要なモノを抽出して紹介していることがほとんどですが、最新の機能となるとなかなかありません。
 最新版で明示的に特に役に立っている機能はgifにある”最近使用したロケーション・ポップアップ”です。この機能の特徴的な点はロケーションがファイル単位でなく数行単位で定まっている点です。この機能を使うと一ファイル中をあちこちに飛び回っても移動が苦になりにくいです。具体的には$this->やthis.の連なりや、万能ツールと化したファイルを読む時、特に役に立ちます。

  • この記事いいね! (1)
著者:杉浦

【PhpStorm】よりGitを意識するようになるプラグインGitToolBox

GitToolBox – Plugins | JetBrains
 GitToolBoxはPhpStormのプラグインのひとつです。プラグイン自身の説明にはこうあります。

Status display, auto fetch, inline blame annotation, commit dialog completion, behind notifications and more…

 要はGit周りの色々な機能を追加する、というものです。これを入れると今どのブランチにいるのかわかりやすくなったり、定期的なフェッチにより不意の衝突を軽減できたりします。特に変化が起きるのが次の図の赤丸部分です。


 Gitのコミットメッセージがインラインコメントとして表示されます。これによって、あるコードが現在の形になっている理由を端的に知れます。詳しく知るにはファイル単位の履歴なり、全体の履歴なりを追うべきですがコミットメッセージが適切ならばこれでわかります。
 わざわざ見に行かなければわからなかったコミットメッセージがこうもコードの間近で頻繁に見るようになると雑なコミットはもう出せません。推敲に身が入ります。

  • この記事いいね! (1)
著者:杉浦

【PhpStorm】PhpStormの提案するコードの簡略化

 PhpStormはAlt+EnterでPhpStormからコードをよりよくするための提案をしてくれます。例えば次です。

 厳密な比較を行うための第3引数を提案してくれました。この機能は様々な場所で働きます。例えばテストのAssertならば次の様に最もふさわしいAssert関数を提案してくれます。

 この提案機能はプラグインでも実装されており、次の二つが多くの人にダウンロードされ評価も高かったです。
kalessil/phpinspectionsea: A Static Code Analyzer for PHP (a PhpStorm/Idea Plugin)
SonarLint – Plugins | JetBrains
 phpinspectionseaはPhp Inspections(EA Extended)という名前でマーケットに並んでいます。EAは適度に警告、提案をしてくれます。EAはとりあえず入れるのにおすすめです。SonarLintは厳密ですが、誤報率も高いです。SonarLintがちがちに書くなりルールを無効化するなりしながら記述することになりますが慣れてくると便利です。

  • この記事いいね! (1)
著者:杉浦

【PhpStorm】インターフェイスとPhpStormで一貫性のあるコードを量産する

 インターフェイスはあるクラスが実装するべきメソッドを定義する仕組みです。あるクラスにおいてインターフェイスを用いると宣言したにも関わらず、インターフェイス内で定義したメソッドが足りないならばエラーになります。
PHP: オブジェクト インターフェイス – Manual
 例えば次のインターフェイスならば

use Illuminate\Database\Eloquent\Builder;

interface Searchable
{
    public function scopeSelectForSearch(Builder $query): Builder;
    public function scopeWhereForSearch(Builder $query, array $search_criteria): Builder;
    public function scopeSortForSearch(Builder $query, array $sort_option): Builder;
}

 次の様に実装を強要できます。

use Illuminate\Database\Eloquent\Builder;

class Hoge implements Searchable
{
    public function scopeSelectForSearch(Builder $query): Builder
    {
        // 検索用select文クエリ構築
        return $query;
    }

    public function scopeWhereForSearch(Builder $query, array $search_criteria): Builder
    {
        // 検索用where文クエリ構築
        return $query;
    }

    public function scopeSortForSearch(Builder $query, array $sort_option): Builder
    {
        // 検索用order byt文クエリ構築
        return $query;
    }
}

 インターフェイスはコーディングの自由度を下げる仕組みです。一定の制約を設けることによって一貫性を持ったコーディングを実現します。例のSearchableインターフェイスを実装したクラスならば、必ずBuilderクラスないしBuilderクラスを継承したクラスのインスタンスを引数にするscopeSelectForSearchメソッドが存在し、そのscopeSelectForSearchメソッドからはBuilderクラスないしBuilderクラスを継承したクラスのインスタンスが返ってくる、と保障されます。一人で小さいプログラムを組んでいるときには開発速度の障害であり無縁な方が良い位の仕組みですが、相手の頭の中を簡単に知れない多人数開発であったり記憶が飛ぶ様な大規模開発では、インターフェイスによるクラス設計がソースコードの破綻を防ぎます。

 インターフェイスは便利な仕組みですが、インターフェイスで定義された決まりきった構文をいちいち書いたりコピペして直したりするのは面倒です。PhpStormにはこれを自動で記述する仕組みが備わっています。
 
 Alt+Insert→メソッドの実装→実装するメソッドを選択→OK、で宣言がずらっと並びます。便利です。PhpStormのAlt+Insertからは他にも決まりきった文字列を色々出力できます。例はPHPですがJavaScriptにも対応しています。

  • この記事いいね! (0)