RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

PHPerのための「PhpStorm」を語る【PHP TechCafe イベントレポート】

弊社で毎月開催し、PHPエンジニアの間で好評いただいているPHP TechCafe。
2023年4月のイベントでは「PhpStorm」について語り合いました。
弊社のメンバーが事前にまとめてきた情報にしたがって、他の参加者に意見を頂いて語り合いながら学びました。
今回はその内容についてレポートします。

「PhpStorm」を語る

RAKUS Developers Blogには他にもPhpStormに関する記事がありますので、あわせてご覧ください。

PhpStormとは

PhpStormはJetBrains社製のPHP開発者に向けて設計された開発に便利な様々なツールが統合された環境、IDEです。
公式HPにも以下のような記載があり、PHP開発者における大きな選択肢の一つとなっています。

PHP 開発者向けに設計された高速でスマートな IDE

以下に機能例を挙げます。

  • 強力なコード補完/静的解析つきのエディタ
  • 様々なリファクタリング機能
  • DBクライアントサポート
  • Gitクライアントサポート
  • デバッガとの連携機能

JetBrains社とは

JetBrainsプラハに本社を置くソフトウェア開発企業です。
IntelliJ IDEA を筆頭に様々な言語のIDE・ソフトウェア開発ツールの開発、販売を行っています。
PHPに注目して見るとIDEの開発だけでなく、PHP言語自体の開発にも貢献しており、Nikita Popov 氏を数年雇用しPHPの開発を進めるなどPHPコミュニティへの貢献も大きいです。
PhpStormチーム

静的解析ツールとしての一面

PhpStormには強力な静的解析機能が存在します。

  • エディターで開かれたファイル内のコードを分析し、入力時に問題のあるコードをハイライト
  • PHPDocを解析し引数や戻り値の型をチェック
  • Gitコミット実行後にチェック(以前はコミット前)
  • どの規約をチェックするのかなどを細かく設定可能

コミット時のチェックタイミングが前から後に変更されたことについては、
「コミット後だと実質プッシュ前チェック?」
「コミット前の方が個人的には良かったが、コミット内容によっては後チェックの方が良いもある」
「両タイミングでできればなお良かった」
などの意見がありました。

最新機能

※ここで扱う最新機能はPHP TechCafe開催当時2023年4月のものとなりますのでご了承ください。

気になる最新機能をピックアップしていきます。

2022.3

https://www.jetbrains.com/ja-jp/phpstorm/whatsnew/2022-3/

非推奨の動的プロパティ

  • PHP8.2から非推奨警告が出るようになったことへの対応。
  • 将来的には禁止される可能性が高いので対応していきたいです。
  • プロパティを追加するか#[AllowDynamicProperties]を追加するか選択できます。
<?php

class EmptyClass{}

$class = new EmptyClass();
$class->dynamicProperty = 'dynamicProperty'; // ここで警告が出る

日時形式のプレビュー

  • date()等でH``Yなどの日時形式文字列を使用する時に自動補完してくれます。
  • 言語や関数によっても形式が異なるのでマニュアルを確認しに行くことが多かったと思います。

リストでの array shape の繰り返しをサポート

  • PHPDocのアノテーションでarray shapeを使用するとループ内で自動補完してくれます。
  • 以前まではプラグインを入れる必要がありました。
  • array shapeを書くことが明確なメリットになります。
<?php

/**
 * @return array<string, array{post: Post}>
 */
function getData(): array {...}

foreach (getData() as $i -> $data) {
    $data['post']->title; // ここで$dataがpostというkeyがあると補完、そのvalueがPostクラスであると判断しメソッドやプロパティの補完をしてくれる
}

2023.1

https://www.jetbrains.com/ja-jp/phpstorm/whatsnew/

3v4l.org での PHP スクラッチファイルの実行

  • 好きなPHPバージョンでスクラッチファイルの実行が可能になりました。
  • ここでは3v4l.orgについて、
    「完全に個人が運用しているサイトが連携されるのはすごい」
    「アクセスが増えてインフラ費用がかさみそう」
    「Jetbrainsはどのくらい資金提供しているのだろう」
    などの話題が出ました。

インデックス作成中でも使用できるようになった Go to Class(クラスに移動)アクション

  • ちょっとした待ち時間が減るので嬉しいです。
  • 今後もインデックス作成中にできるアクションを増やしていく予定みたいです。

データフロー解析に対応したデバッガー

  • xdebugユーザはDFAデバッガ―を使用できるようになりました。
  • 各分岐をステップ実行しなくても、実行されないコード分岐を事前に確認できます。

var_dump() / dd() のターミナル出力にクリック可能なパスとクラス参照を追加

  • var_dumpの出力結果から直接クラスやパス参照を出来るようになりました。

新しいインスペクション

  • 互換性の無い戻り値の型変更
<?php

class C {
  public function f(): int {
      return 1;
  }
}

class C0 {
  public function f() { // ここで警告が出て戻り値の型intを1クリックで追加出来る
  }
}

class C1 {
  public function f(): void { // ここで警告が出て戻り値の型を1クリックでintに変更出来る
  }
}
<?php

$this->assertEquals(true, $test); // 1クリックでassertTrueに変更出来る
$this->assertEquals(false, $test); // 1クリックでassertFalseに変更出来る

ショートカット

Windows/Linuxhttps://pleiades.io/sites/willbrains.jp/keymap/pdf/shortcut_phpstorm_windows.pdf
Machttps://pleiades.io/sites/willbrains.jp/keymap/pdf/shortcut_phpstorm_mac.pdf

Ctrl+Eでの最近使用したファイル表示をよく使う」
Shift+F6でのプロパティリネームをよく使う」
など参加者の皆さんの良く使うショートカットの話題で盛り上がりました。
プロジェクトの規模や特性、はたまた個人の感性などで特別利用頻度の多いショートカットがあったりして面白いです。
個人的には汎用的なショートカットは全IDEで統一してくれないかなと思ったりします。

主なコマンド

以下Windowsでのコマンドになっています。

編集系

説明 ショートカット
コードの生成(Getter, Setter,コンストラクターなど) Alt + Insert
コメント化/コメント解除 Ctrl + /
自動インデント Ctrl + Alt + L
選択範囲のコードをフォーマット Ctrl + Alt + L
ファイル全体をフォーマット Ctrl + Alt + Shift + L

検索系

説明 ショートカット
どこでも検索 Shift2回
ファイル名で検索 Ctrl + Shift + N
クラス名で検索 Ctrl + N
ファイル内検索・置換 Ctrl + F / Ctrl + R
プロジェクト内検索・置換 Ctrl + Shift + F / Ctrl + Shift + R
使用箇所を検索 Alt + F7 / Ctrl + F7

ナビゲーション

説明 ショートカット
クラス、変数、メソッドの定義元にジャンプ Ctrl + B / Ctrl + Click
前のカーソル位置に移動 Ctrl + Alt + ⇐
次のカーソル位置に移動 Ctrl + Alt + ⇒
行番号を指定して移動 Ctrl + G
コードブロックの最初・最後に移動 Ctrl + ] / Ctrl + [
最近使用したファイルに切替 Ctrl + Tab
最近使用したファイルを表示 Ctrl + E

参考資料

プラグイン

PhpStormにはプラグインが多くあり、公式や有志の作ったものをダウンロードすることでよりPhpStormを自分好みにより使いやすくカスタマイズできます。

Marketplace

プラグインを探してインストールすることができます。
JetBrainsスタッフのオススメPhpSrotmプラグインやインストール数ランキングが表示されているので、人気のプラグインが分かります。
まずWebの方でお目当ての機能を探してみてから、見つかったプラグインをPhpStormでインストールするのがわかりやすいかもしれません。
https://plugins.jetbrains.com/phpstorm

Top PhpStorm Downloads

https://plugins.jetbrains.com/search?orderBy=downloads&products=phpstorm
.ignore(様々な○○ignoreを管理する)やBashSupportが人気です。
他にもIdeaVimやemacsIdeasなど別エディタの操作感を再現するようなプラグインも存在します。
Markdownのように昔はプラグインを入れて補完していたけれど現在はPhpStorm標準機能としてサポートしているというようなものも存在します。

Pickup

静的解析機能

下記では一例を挙げます。

  • コードインスペクション

    • コードの作成中に解析を行い、危険な箇所に対して下線で示すか、ハイライトしてくれます。解析方法はPHPファイルをPhpStormで開くだけです。
    • 文法の誤りをハイライトし、重要度によってハイライト部分の色が変更されるため見やすいです。重要度は個別に設定できます。
    • 他の解析ツールを追加でインストールして使用することも可能です。
  • コールバックの参照

  • 名前空間

    • Auto-Import(自動インポート)
    • Optimize Imports(import文の最適化)
    • folding for imports(import文の折りたたみ) など
  • 静的解析ツールの導入が簡単

他のエディタと比べて

  • PHPの開発体験を高めるための機能が最初から備わっています
    • コード補完
    • コード整形
    • コードインスペクション
    • コードジャンプ
    • 強力な検索機能
    • デバック
    • Git操作
    • 静的解析
    • テスト実行
    • DB操作
  • その他のエディタやIDEでも同等のことは可能ですが...
    • 当然PHP専用のものではないためプラグインを追加する必要があります
    • 「このプラグインおすすめだよ」であったり「これ入れるべきだよ」という意見を聞かないと勝手に気づくことができないような便利機能も数多くあります
  • PhpStormはPHPの開発初心者でも開発体験を高めるための機能があらかじめ利用可能な状態になっています
    • 開発しているうちに自然と便利な機能に触れることができます
  • 初心者ほどPhpStormを使うことで開発スキルを高められる可能性があります
    • 初心者ほど開発に必要な機能の切り分けができないのでおすすめ
    • いきなり「有料ツールを使うのはちょっと...」と思っている方もフリートライアルがありますので是非試してみてください!
  • 設定の共有を行えます
    • プロジェクトごとの設定共有はGitを通じて可能
    • 設定を共有することについては、
      「設定ファイル(.idea)を整理して管理するのが厳しすぎる」
      「共有したい設定と個人の設定が分離され切っていない」
      「中にはDBの接続情報が入っていたりもする」
      「検査例外・非検査例外の共有は便利」
      など皆さん設定共有は試しているものの現状では中々やりきるのが厳しそうな印象でした。

まとめ

PHPer御用達IDEであるPhpStormについて、イベント参加者の生の声を交えてまとめていきました。
毎日使うツールということもありたくさんの意見・コメントが出て盛り上がりました。
こんな設定があったのかこんな機能があったのかと知れるきっかけとなれば幸いです。
次はPhpStorm以外のIDEやエディタを使ってPHPを開発している方の意見ももっと聞いてみたいですね。
PhpStorm使ったことない方は是非一度触ってみてください!

PHP TechCafe」では今後もPHPに関する様々なテーマのイベントを企画していきます。 皆さまのご参加をお待ちしております。

Copyright © RAKUS Co., Ltd. All rights reserved.