PhpStorm 2023.1 の新機能

PhpStorm 2023.1 は、3v4l.org との統合、パフォーマンスの改善、新しい UI の強化、PHP 用の DFA デバッガー、複数の composer.json が含まれるプロジェクトのサポートなどを含むメジャーアップデートとなっています。

新しい UI Beta

新しい UI は前回のリリースで導入されましたが、デフォルトでは無効になっていました。 このリリースでは、皆さんからのフィードバックと弊社での調査に基づいて新しい UI の改良を続けています。 以下では、いくつかの強化点について説明しています。

新しい UI を有効にするには、Preferences / Settings(環境設定/設定)| Appearance & Behavior(外観 & 挙動)| New UI(新しい UI)に移動してください。

コンパクトモード

Compact Mode(コンパクトモード)は、小さな画面での新しい UI のユーザーエクスペリエンスを強化するモードです。 ツールバーとツールウィンドウのヘッダーの幅を細め、間隔とパディングを縮小し、アイコンとボタンのサイズを小さくすることで、コントロールではなくコードに専念しやすくなっています。

Compact Mode(コンパクトモード)をオンにするには、View(表示)メニューに移動し、Appearance(外観)| Compact Mode(コンパクトモード)を選択してください。

新しい UI でタブが非表示の場合に表示されるファイル名ペイン

エディターのタブが非表示の場合、現在開いているファイルの名前がペインに表示されるようになりました。

ツールウィンドウの左右分割

新しい UI のこの設定では、ツールウィンドウの領域を 2 つのウィンドウに分割し、両方のツールウィンドウを同時に表示できるように配置を調整することができます。 これは以前の UI でも可能でしたが、新しい UI には実装されていませんでした。

このエリアにツールウィンドウを追加して下の方に配置するには、サイドバーに沿ってアイコンをドラッグし、セパレーターの下にドロップします。 または、アイコンを右クリックして、Move to(移動)アクションを使ってツールウィンドウの新しい配置場所を割り当てます。

macOS の新しい UI のプロジェクトタブ

macOS ユーザーは複数のプロジェクトを同じウィンドウで開いている場合、メインツールバーの下に表示されるプロジェクトタブを使ってプロジェクトを簡単に切り替えられるようになりました。

macOS では、ウィンドウタブはデフォルトで全画面表示モードの場合にのみ有効です。 常に有効な状態を維持する場合は、次のようにシステムの環境設定を調整してください。

新しい UI の Run(実行)ウィジェットの再設計

IDE の新しい UI に関するフィードバックに対応するため、メインウィンドウのヘッダーにある Run(実行)ウィジェットの外観があまり邪魔にならず、目に優しくなるように再設計しました。

PHP

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

PhpStorm 2023.1 は 3v4l.org とネイティブに統合しているため、ローカルマシンに何もインストールせずに希望の PHP バージョンで PHP スクラッチファイルを実行することができます。

Ctrl+Alt+Shift+Insertを押して、新しい PHP スクラッチファイルを作成します。

ドロップダウンから希望する PHP バージョンを選択して、Run(実行)ボタンを押します。 すると、エディターの横にスクリプトの出力が表示されます。

3v4l.org を便利だと思ったら、こちらで著者を寄付で支援することを検討してください:github.com/sponsors/SjonHortensius

パフォーマンスの改善

このリリースでは、複数のパフォーマンスに関する大幅な改善を実施しました。 この取り組みは、今後のアップデートでも継続する予定です。 このリリースでは、以下の内容を期待できます。

一般的な PHP パッケージの共有インデックス

一般的によく使用される PHP パッケージについては、PhpStorm インスタンス単位で対応するインデックスを再作成するのは合理的とは言えません。 そこで、PHPUnitaws/aws-sdk-phpdoctrine/ormlaravel/frameworksymfony/* などの多くの一般的な PHP パッケージについては、インデックスをあらかじめ処理しています。

インデックス作成済みの PHP プロジェクトを開くと、PhpStorm が composer.json をチェックし、指定されたどの依存関係に事前作成済みの共有インデックスがあるかを確認するようになりました。

PhpStorm はインターネット接続に対する CPU と RAM の速度に応じて、インデックスをダウンロードするか、ローカルで再作成します。

また、プライベートプロジェクト用に独自の共有インデックスを生成することも可能です。 それを行う方法については、こちらで詳しく学んでください。

前:

後:

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

パフォーマンス改善の取り組みの一環として、弊社ではインデックス作成中にできる限り多くのアクションを使用できるように作業を続けています。

Go to Class(クラスに移動)(Ctrl+O または Navigate(移動)| Class...(クラス))は、コード内を移動するのによく使用されるアクションの中でも代表的なものです。 このリリースでは、インデックスが再作成中でもこのアクションを使用できるようになりました。 従来はインデックス作成が完了するまで空のリストが表示されていました。

インデックス作成中に動作するアノテーションツール

インデックス作成が進行中でも使用できるようになったもう 1 つのアクションは、コードへのアノテーション追加です。

これにより、PhpStorm によって多くのエラーとソフトキーワードがあらかじめハイライトされるようになります。その結果、ワークフローがより円滑になり、作業時間が短縮されます。

Scanning files to index(インデックス作成対象のファイルをスキャン中)プロセスのスマート化

PhpStorm がプロジェクトの前のセッションのキャッシュを使用してインデックス作成対象の新しいファイルの有無を確認するようになったため、IDE がはるかに高速に開くようになりました。 スキャン後に変更が見つからなかった場合、IDE ですぐに作業を開始できます。

インスペクションの高速化

負荷の最も高かったインスペクションを中心にすべてのインスペクションのパフォーマンス改善に取り組みました。 一部のインスペクションは 30~40% 高速化されていますが、それ以外のインスペクションはそれほど劇的な向上は見られません。ただし、全体的な効果は見られます。 以下の動画で前のバージョンの比較をご覧ください。

Blade テンプレート

@php...@endphp タグ内のハイライトのパフォーマンスを大幅に改善しました。 コードの複雑さに関係なく、すべてのキーワードとコンストラクトのハイライトが大幅に高速化されています。

パフォーマンス改善のために Windows Defender の設定を再構成するよう促す新しい IDE の提案

Windows Defender のリアルタイム保護チェックは IDE の速度を大幅に低下させる場合があります。 この問題を回避するため、PhpStorm が特定のフォルダーを Defender の除外リストに追加することを提案するようになりました。

この通知では、これらの設定を自動的に再構成するか、Defender の構成手順を確認してから手動で再構成するかのオプションが提供されます。

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

PHP アプリケーションのデバッグに Xdebug を使用したいユーザーは、データフロー解析(DFA)デバッガーというもう 1 つの高度な機能を使用できるようになりました。 この機能を使用すると、デバッガーでコードをステップ実行しなくても、実行されることのないコード分岐を事前に確認できます。

PhpStorm では、コードが実行される前に右側のインレイにあらかじめ計算した条件の結果が表示されます。 このため、コードを深く掘り下げなくても状況を把握することができます。 デバッグセッションで実行されない分岐はグレーアウト表示されます。

デバッグ中に DFA をオフにする

デバッグ中に追加情報を取得する必要がない場合は、あらかじめ計算された値のインレイを右クリックし、現在のデバッグセッションで DFA 機能をオフにすることができます。

この機能を常にオフにする場合は、Preferences/Settings(環境設定/設定)| PHP | Debug(デバッグ)| Xdebug で無効にできます。

制限

現時点の PhpStorm は技術的な制限により、プロパティ値を事前計算しません。 これは、今後の開発で対応する予定です。

すべての PHPStan および Psalm タグのサポート

既存のすべての PHPStan および Psalm タグが PhpStorm で正しく解析されるようになりました。 これにより、アノテーションの多いコードの可読性が向上します。

複数の composer と vendor を使用するプロジェクトのサポート

従来の PhpStorm は開いているすべてのプロジェクトを単一のスペースとして処理してきましたが、 同じプロジェクトに複数のアプリケーションがあり、それぞれに独自の composer.json 依存関係が存在するケースが増えてきています。

このような複数の composer.json ファイルとベンダーディレクトリが存在するプロジェクトをサポートする基盤を実装しました。 これにより、以下のように機能が強化されています。

  • 除外対象のディレクトリが正しく設定されます。解析とインスペクションの実行数が減るため、全体的なパフォーマンスが改善されます。 また、シンボルの解決候補が複数存在する場合の安定性も高まります。
  • PSR ルートが正しく検出されます。プロジェクト内のアプリケーション間でクラスをドラッグアンドドロップする際に、Move Class(クラスの移動)などのリファクタリングが期待どおりに機能します。
  • composer.json に欠落している拡張機能がアプリケーションごとに正しく報告されます。

新しいインスペクション

カスタム正規表現ベースの検索置換インスペクション

正規表現を使用して独自の検索置換インスペクションを作成できるようになりました。 このようなインスペクションは、スタイルと書式の問題または単純なコード関連の課題をハイライトする場合に特に有用です。

Settings/Preferences(設定/環境設定)| Editor(エディター)| Inspections(インスペクション)に移動し、+ アイコンを押します。 リストから Add RegExp Search Inspection(正規表現の検索インスペクションを追加)または Replace(置換)を選択すると、新しいインスペクションをセットアップできるダイアログに移動します。

型階層チェックに関わるより高度なインスペクションについては、Structural Search and Replace (SSR)(構造的検索と置換(SSR))インスペクションを使用できます。 詳しくは、ドキュメントを確認するか、動画の例をご覧ください。

組み込みの PHP インスペクション

PhpStorm はすぐに使用できる新しいインスペクションをリリースのたびに多数導入しています。 PhpStorm 2023.1 もこの例外ではありません。以下に代表的なものを紹介します。

メソッドのオーバーライド/@final としてマークされたクラスの拡張

クラスにキーワード final を指定すると、違反が発生した際に重大なエラーを発生させることができます。 もう少し控えめな方法として、PHPDoc タグの @final を追加することもできます。

この場合、PhpStorm はコード内の不正な継承をハイライトしますが、実行時にエラーは発生しません。

互換性のない戻り値の型

PhpStorm 2023.1 の新しいクイックフィックスを使用すると、互換性のある戻り値の型を子クラスのメソッドに追加したり、互換性がない場合に変更したりできるようになりました。

アサーションを assertTrue/assertFalse に置換できます。

ネストされた配列アクセスまたはオブジェクトの isset() の複数のインスタンスを 1 つのインスタンスに置換できます。

他のファイルからアクセスされる変数に global を追加します。

作業が楽になる PHP の改善

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

「dump and die」手法を使用するユーザーのためにデバッグエクスペリエンスの改善に取り組んでいます。 その最初のステップとして、ファイルパスとクラス参照を有効にしました。 これらをクリックすると、対応するファイルがエディターで開きます。

補完ポップアップにどのモードでファイルを開いているかを表示

以前の PhpStorm リリースでは、さまざまな日付と時刻関数の書式に説明を追加しました。

ファイルモードを受け入れるすべての関数について、補完ドロップダウンに詳細な説明が表示されるようになりました。 r+aw の意味を覚えておく必要がなくなりました。

ライブテンプレートの追加

ライブテンプレートを増やしました。関数テンプレートの fun やインデックス作成済みループの fori などがあります。

ユーザーエクスペリエンス

IDE 全体の拡大・縮小

PhpStorm 全体を拡大・縮小し、UI 要素のサイズを同時に変更できるようになりました。 メインメニューから View(表示)| Appearance(外観)を選択し、IDE の表示倍率を調整します。

これは、デモ、ライブストリーム、オンライン会議、プレゼンテーションなどで役に立ちます。

これらのアクションに一意のショートカットを割り当てると、アクションの呼び出しが楽になります。 Search Actions(検索アクション)(Ctrl+Shift+A)ウィンドウに移動して「zoom ide」と入力し、Alt+Enter を押してからショートカットを割り当てます。

複数のツールウィンドウレイアウトを保存するオプション

複数のツールウィンドウレイアウトを保存して管理し、必要に応じてレイアウトを切り替えられるようになりました。 Window(ウィンドウ)| Layouts(レイアウト) には、新しいレイアウトの保存、更新、および有効化アクションがあります。

新しい Remember size for each tool window(各ツールウィンドウのサイズを記憶する)設定

新しい Remember size for each tool window(各ツールウィンドウのサイズを記憶する)チェックボックスは、Settings(設定)/ Preferences(環境設定)| Appearance & Behavior(外観 & 振る舞い)| Tool Windows(ツールウィンドウ)にあります。 サイドツールウィンドウの幅を統一するか、レイアウトをカスタマイズする際にサイズを自由に調整する機能を保持することが可能です。

エディター

Markdown ファイルの Fill Paragraph(段落の整形)

Markdown ファイルで長いテキストを同じ長さの行に分けられる Fill Paragraph(段落の整形)エディターアクションを使用できるようになりました。

これを行うには、変更する段落内にキャレットを置き、Edit(編集)メニューからアクションを選択します。 Find Action(アクションの検索)(Ctrl+Shift+A)で Fill Paragraph(段落の整形)コマンドを探して実行することも可能です。

Markdown 用の新しい Smart Keys(スマートキー)設定ページ

Settings/Preferences(設定/環境設定)| Editor(エディター)| General(一般)| Smart Keys(スマートキー)に、Markdown の環境設定をセットアップして変更できるページを追加しました。

このページにはエディターの各種機能に個別のチェックボックスが用意されているため、環境設定の管理が楽になります。 従来の Settings/Preferences(設定/環境設定)| Languages & Frameworks(言語とフレームワーク)には 1 つしかチェックボックスがありませんでした。

選択されたコードでのみ空白を表示するオプション

Settings/Preferences(設定/環境設定)| Editor(エディター)| General(一般)| Appearance(外観)| Show Whitespaces(空白の表示) に、コードを選択した場合に IDE が小さなドットで空白を表示する設定を構成できる新しい Selection(選択)チェックボックスが追加されました。

VCS / Git / GitHub

Structure(構造)ツールウィンドウにおける VCS ステータスの色ヒント

Structure(構造)ツールウィンドウに変更を示す色ヒントが追加されました。

そのため、変更または追加されたプロパティ、メソッド、および関数を確認できるようになっています。

Branches(ブランチ)ポップアップの改善

ブランチが展開可能なリストに保存されるようになったため、ブランチ間を楽に移動できるようになりました。

Create New Branch(新規ブランチの作成)ポップアップの自動補完

PhpStorm 2023.1 EAP #1 では、Create New Branch(新規ブランチの作成)ポップアップに自動補完が実装されました。 新しいブランチの名前を入力し始めると、IDE が既存のローカルブランチの名前を基に関連性のある接頭辞を提案します。

コミットのバックグラウンドチェック

Git と Mercurial のコミットチェックがコミット後のプッシュ前にバックグラウンドで実行されるようになりました。 これにより、全体的なコミットプロセスが高速化されています。

GitHub のコードレビューワークフローの改善

当社が調査した結果、ユーザーがプルリクエストを使用する際には最初に GitHub を開き、コード全体を確認する必要がある場合はその後に IDE を参照するのがごく一般的だということが分かりました。

このワークフローを簡単に行えるように、Pull Request(プルリクエスト)ツールウィンドウの改良に取り組みました。 プルリクエストを開くたびに専用のタブが表示されるようになっています。 このタブには変更されたファイルのリストが瞬時に表示されますが、以前よりも集中の妨げになりにくくなっています。 このため、現在のタスクにより専念しやすくなっています。

プルリクエストの現在の状態に応じて最も重要と考えられるアクションを簡単に実行できる専用のボタンも追加されました。

Docker の改善点

すべての Docker Compose コンテナーログを集約

Docker Compose ノードの Dashboard(ダッシュボード)タブにすべての Docker Compose コンテナーのログを集め、すべてをまとめて表示できるようになりました。 リアルタイムで更新されます。

Azure Container Registry のサポート

Azure Container Registry に簡単に接続できるようになりました。 Preferences / Settings(環境設定 / 設定)| Build, Execution, Deployment(ビルド、実行、デプロイ)| Docker | Docker Registry に移動し、Registry(レジストリ)入力フィールドで Docker V2 オプションを選択してセットアップします。

:z マウントオプションを適用して SELinux にボリュームをバインドする新しい設定

Docker バインドマウントに :z 構成フラグを追加して、ボリュームを SELinux ワークステーションの Docker コンテナーに接続する機能が導入されました。

この機能を有効にするには、Preferences / Settings(環境設定 / 設定)| Advanced Settings(高度な設定)| Docker に移動します。

ウェブ

Astro のサポート

待望の Astro サポートが PhpStorm に導入されました! Preferences / Settings(環境設定 / 設定)| Plugins(プラグイン)からインストールできる新しい Astro プラグインを通して利用できます。 このプラグインには、構文ハイライト、自動インポートのコード補完、リファクタリング、ナビゲーション、適切な書式設定などの基本機能が備わっています。

Vue テンプレートでの TypeScript のサポート

Vue テンプレートに TypeScript のサポートを追加しました。 このサポートは、script タグの lang 属性を ts に設定すると有効になります。 従来は script タグの lang 属性の設定に関係なく JavaScript が使用されていました。 PhpStorm が Vue 単一ファイルコンポーネントのテンプレートのクイックドキュメントにインラインキャストのサポート、改善された型の絞り込み、推論された型に関する正しい情報を提供するようになります。

Tailwind CSS の構成

このリリースでは、classAttributes オプションでのカスタムクラス名の補完や tailwindCSS.experimental.configFile などの実験的なオプションなどの構成オプションのサポートを追加しました。

これらの構成オプションは、Preferences / Settings(環境設定 / 設定)| Languages Frameworks(言語とフレームワーク)| Style Sheets(スタイルシート)| Tailwind CSS でセットアップできます。


上記はこのリリースで最も重要な変更ですが、もちろんこれだけではありません。 このリリースに含まれるすべての機能強化の全リストは、PhpStorm ブログのお知らせをご覧ください。