カテゴリーアーカイブ PhpStorm

著者:杉浦

【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)
著者:杉浦

【PhpStorm】PhpStorm上でコードの一部分のみGitを辿る

 PhpStormはGitを上手く扱えるIDEです。単にGitの操作と木を見るのみでなく、フックやテンプレートも用意しています。


【PhpStorm】PhpStormでpre-commitのGitフック
 PhpStormはGitを読みやすくする機能も備えています。その一つがコードの一部分のみのGit Historyの表示です。操作はコードを選択して右クリック、Git→選択のヒストリーを表示、とするだけです。

 すると次の様に選択部の変更のみのGit Historyが見えます。

 この機能を使うとGitの中をひーこら検索する必要がずいぶん減ります。特に歴史あるリポジトリの一部分を追う時、過去の変更に差し戻す時に活躍します。

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

【PhpStorm】PhpStormで重複コードを抽出する

 とりあえずざっと書いて後からリファクタするというコーディング方法があります。このコーディング方法においてリファクタの際には見通しをよくするほか、コピペした部分などの重複したコードをまとめる作業もよくやります。PhpStormにはこの重複コードをまとめる作業の精度を上げる機能があります。
 次の画像にある重複の分析を選ぶとPhpStormはコードを解析しコードの重複を見つけ出します。

 見つけられた重複は次の様にコードが表示されます。この画面から直すべき重複が分かります。コストは複雑さと量によって計算されています。余り軽いとまとめる程でもないことがしばしば現れます。閾値は個々の調整に依りそうです。
重複の分析 – 公式ヘルプ | PhpStorm

 対象の重複範囲を選択し図の様にリファクタリング→メソッドの抽出を選びます。すると関数のオプションを決める画面が現れます。
メソッドの抽出 – 公式ヘルプ | PhpStorm


 この関数オプションを決定した後にリファクタリングを実行すると、次の画像らの様に関数にまとめられます。


 このまとめられた関数の配置をそのままなり、traitなり、他クラスなり、親クラスにして他の重複部分から呼び出すことによって重複コードのリファクタリングが成ります。重複が同ファイル内にあるならばPhpStormがよしなにまとめてくれます。

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

【PhpStorm】PhpStormでpre-commitのGitフック

 Gitには元よりGitのある動作をした時に自動で動作するスクリプトを埋め込むことができます。このスクリプト機能をGitフックと呼びます。
Git – Git フック
 これだけでも便利なのですが権限であったり、環境変数がまっさらな状態で呼び出されたり、スクリプトをGitに含められなかったり、スクリプトを書く時にプロジェクトにしていたソースコードのルートとGitのルートが違っていたりで少々面倒が起きたりします。PhpStormにはコミット前Gitフックの機能が入っています。これを使うとプロジェクトに属したGitフックを作ることが出来ます。
 ここからGitフックの入れ方、使い方の説明です。
 まず次の画像の様に設定->プラグインからPre Commit Hook Pluginをインストールします。これはPhpStormを作っている会社であるJetBrains製で気が付いたら既に入っているタイプのプラグインです。

Pre Commit Hook Plugin – Plugins | JetBrains
 インストールが完了したら再び設定からツール->Pre Commit Hookを選び、対象のスクリプトパスを設定します。Gitフックと違ってパスも環境変数も自由です。もちろんスクリプトがエラーを吐けばコミットに待ったをかけてくれます。

 せっかくプロジェクトに含められるのですからスクリプトもなるべく楽をしようと思います。自分が使っているスクリプトが次です。

npm run pre-commit

 npmに全任せです。package.jsonには次の4行が含まれており、php-cs-fixerによるPHPの自動修正、ESLintのfixオプションによるJavaScriptの自動修正、duskによる自動ブラウザテストが走る様になっています。

    "php-cs-fix": "vendor\\bin\\php-cs-fixer fix -v",
    "eslint": "./node_modules/.bin/eslint resources/**/*.{js,vue} --fix",
    "browser-test": "php artisan dusk",
    "pre-commit": "npm-run-all eslint php-cs-fix browser-test"

 思いつきですがGitフックもスクリプトからpythonとかのインタプリタ言語を動かせば結構自由そうです。ググればありそう。

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

PhpStormで提案された検査の修正をまとめて適用する

 PhpStormにはファイルの中を検査して動作しないと思われる記述や非推奨の記述をエラーや警告といった形で伝えてくれる機能があります。この機能は便利な拡張も出回っています。
Php Inspections (EA Extended) – Plugins | JetBrains
 この検査結果は新たなルールを導入すると大量に現れがちです。しかも直し方が画一的なものも多く、まともにこつこつ一つずつ直していくととても面倒です。次図は全く警告のなかったコードに上の拡張を入れた直後のものです。

 この画像の中で特に面倒なのはメソッド名についている波線の警告の”返り値の型を宣言するべき”です。今までPHPDocに書いてあれば十分としてなっていましたが、上の拡張ではより安全にできるのにしていないのは十分警告の対象とのことです。各メソッドにつきいちいち記述していく手間はかけられません。PhpStormの機能でまとめて修正します。
 まずコード→コードのインスペクションないしAlt+Shift+Iでインスペクションをまとめて下のボックスに表示させます。

 次いで一種類のインスペクション内容になるまで展開して、赤丸の電球ボタンを押すだけで自動で修正がかかります。

 あっという間によりきれいで安全なコードになりました。あとはテストにかけて問題が出ていないことを確認か問題の修正をすればきれいで安全で十分な機能を持ったコードになります。

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