PhpStorm 2021.2 の新機能

PhpStorm 2021.2 は暫定的な PHP のジェネリクス対応のほか、PHP 8.1 の列挙型と単一行 array shape のアノテーションの追加、PHP コードの自動整形の改善、新しいインスペクションとリファクタリングの導入が行われたメジャーアップデートです。

PHP のジェネリクス

現時点の PHP では言語レベルのジェネリクス対応は行われていませんが、アノテーションを介したジェネリクスの使用はすでに人気になっています。 これは、コレクション、コンテナー、ファクトリ、および他のアプリケーションを処理する際にコードの安全性と予測可能性を高めるのに役立っています。

PHP のジェネリクス

@template アノテーションを介してジェネリクスに対応できるようにしました。 これによって補完候補に必要な型の要素が含まれるようになるため、多くの場合にコレクションの処理がより明確になります。

ファクトリパターンについては、class-string<T> アノテーションを使用できるようになり、より適切なコード補完が行われるようになりました。

このジェネリクスへの暫定対応は不完全なものであり、既知の制限事項があります。 詳細については、このブログ記事を参照してください。

PHP 8.1 の列挙型

PHP インタープリターの新バージョンである 8.1 は、2021 年末にリリースされる見込みです。 ただし、JetBrains はこれまでと同様にこのバージョンへの先行対応を進めています。

PHP 8.1 でリリースされる新機能の中でも、列挙型は最も期待度の高いものの一つです。

PhpStorm 2021.2 では、すぐに列挙型を使い始めることができます。 この IDE はコード補完機能と、列挙型の不正な使用を防止する検証機能を提供します。

PHP の列挙型は case 一式を含み、メソッドを記述可能で、型ヒントとして使用可能です。PhpStorm はこれらすべてのケースでエラーをハイライトし、適切な候補を提供して時間を節約します。

Backed Enum

列挙型の case にはスカラー値に相当するものを記述できます。 これは、列挙型をデータストアに保存する場合に便利です。 このような列挙型は Backed Enum と呼ばれます。

クイックフィックスを使用すると、スカラー型宣言を Backed Enum に追加できます。

列挙型は、条件や match 式のような他の機能とも相性が良いです。

詳細情報

array shape

array shape

コード内にオブジェクト状の配列がある場合、その構造を所定の PHPDoc アノテーション(array{key: type, key: type, ...})を使用して定義できるようになりました。

PhpStorm はこのようなアノテーション付き配列に対応したコード補完機能を提供し、定型的な入力に要する時間を削減し、ミスの発生を防ぎます。

サポート対象は、単一行 array shape の定義のみに限定されています。 より大きな構造に関しては、多くの場合は実際のオブジェクトとクラスを使用するほうが適切です。

Extract Method リファクタリングの改善

最も使用頻度の高い PhpStorm のリファクタリングの一つ、Extract Method が改善されました。

大きなメソッドをより小さな単位に分割できるほか、重複コードの削減にも対応しています。

このリファクタリングを使用するには、任意のコードを選択してから ⌘⌥MCmd+Alt+M / Ctrl+Alt+M)を押してください。

重複コードのリファクタリング

PhpStorm には Duplicated code fragment インスペクションが用意されています。 このインスペクションは非常に似通ったコードチャンクをハイライトします。最終結果が同じである限り、書式、変数名、ステートメントの順序は異なる可能性があります。

このインスペクションは重複するコードフラグメントの先頭行をハイライトします。 ハイライトされている行で Alt+Enter を押して、重複コードのクイックフィックスから Extract Method リファクタリングを呼び出すだけで、このようなコードをすばやくリファクタリングできるようになりました。

PhpStorm はリファクタリング中に現在のスコープ(メソッド、クラス、ファイル)からより小規模な重複コードフラグメントを検出することもできます。 コードフラグメントを選択してから ⌘⌥MCmd+Alt+M / Ctrl+Alt+M)でリファクタリングを呼び出してください。 ダイアログの下に Review and replace duplicates チェックボックスが表示されます。

新しいスマートなコードフラグメントセレクター

新しいスマートなコードフラグメントセレクター

コードを一切選択することなく Extract Method リファクタリングを呼び出すこともできます。 この場合、PhpStorm は可能なコードの候補を提案します。 候補は絞り込まれており、リファクタリングする意味のある部分のみが表示されます。

選択範囲の拡張を改善

Expand / Shrink selection アクション ⌥+Up / ⌥+DownCtrl+W / Ctrl+Shift+W)でコードを選択できることはご存じかと思います。 これは、リファクタリング対象コードを最もすばやく選択する方法の一つです。

このリリースでは、小さいながらも有益な改修を行い、波括弧を含まないブロックを選択できるようにしています。

Extract Method リファクタリングにはその他の改善も行われています。 詳細は、こちらのブログ記事をご覧ください。

インスペクションとクイックフィックス

各リリースでは、バグの発見と修正にかかる時間を削減するためのインスペクションが多数提供しています。 PhpStorm でハイライトされているコードに対して Alt+Enter を押すと、修正が適用されます。

`?->` に置換可能な条件

`?->` に置換可能な条件

不要な null チェックを PHP 8 の新しく安全な演算子に置換できます。 変換を行うには、Alt+Enter を押してください。

定数の定義があるクラスの定数を使用

定数の定義があるクラスの定数を使用

PhpStorm は定数の定義があるエンティティではなく、サブクラスまたはサブインターフェースを介してアクセスされている定数をハイライトします。 エンティティの名前を Alt+Enterクイックフィックスを使用して定数の定義があるエンティティに置換できます。

論理式内の冗長な条件

論理式内の冗長な条件

PhpStorm は複数の条件部を評価し、冗長であるかどうかを判断します。 これは、チェックが不明確で、見ただけではどのチェックが冗長なのかを判断できない場合に役に立ちます。

Refactoring Opportunities インスペクション

Settings / Preferences | Editor | Inspections の PHP セクションに新しいインスペクションのグループを追加しました。

このグループには、適切なリファクタリング候補を判断するのに役立つインスペクションも含まれています。 これらのインスペクションはデフォルトでは無効になっていますが、無効になっている場合であってもインスペクションが検出したコードの近くには追加のガターアイコン が表示されます。

ガターアイコンをクリックすると、提案されたリファクタリングが適用されます。

これらのインスペクションは、サイクロマティック複雑度、ネストの深さ、使用されている変数の数、合計行数など、数多くのコード品質メトリクスを組み合わせたものです。

使用されているメトリクスの一覧は、各インスペクションの説明を参照してください。

詳細

IDE

コミット前のテスト実行

コミット前のテスト実行

使用可能なコミット前アクションを拡充し、テストを実行できるようにしました。 Run Tests チェックボックスをオンにして、実行する構成を選択してください。 このアクションは、コードを VCS に格納する前に検証するのに便利です。

また、これらのアクションの横にある Choose profile をクリックして、Analyze code および Cleanup オプションをカスタマイズできるようになりました。

保存時のアクション実行

保存時のアクション実行

Preferences / Settings | Tools | Actions on Save に新しい構成ページを追加しました。

Ctrl+S または暗黙の自動保存でトリガーできるアクションの一覧が表示されます。 これらのアクションには、コードのチェック、整形、コードのクリーンアップ、デプロイその他があります。

Show Diff の統一化

Show Diff の統一化

PhpStorm は Show Diff アクションを呼び出した場所に関係なく、初期状態のファイルと変更後のファイルを比較した差分をデフォルトでエディター内で開きます。 別のウィンドウで変更内容を追跡するほうが都合が良い場合は、単に目的のファイルをエディターからドラッグアンドドロップしてください。

Local History リビジョンのテキスト検索

Local History リビジョンのテキスト検索

Local History は多くの開発者にとって縁の下の力持ちのような存在です。今回のリリースでこの機能が改善され、Local History ダイアログの検索フィールドを使用してローカルリビジョンから必要なテキストをすばやく検索できるようになりました。

Local History リビジョンのテキスト検索

GPG 署名

PhpStorm 2021.2 では、新しい方法でコミットを保護できます。 このリリースでは、GPG による Git コミットの署名を有効にできるようになりました。 そのためには Settings | Version Control | Git を開き、Configure GPG Key ボタンを押すだけです。

ローカライズされた UI

UI を日本語、中国語、韓国語にローカライズ

本バージョンより、PhpStorm の UI が日本語韓国語、および中国語に完全にローカライズされています。 ローカライゼーションはバンドル対象外の言語パックプラグインとして提供されており、IDE へ簡単にインストールできます*。 すでに 150 万人以上のユーザーが言語パックの一部ローカライズされた EAP バージョンを使用しています。 今回のリリースからは完全なローカライズ環境をご利用いただけます!

ウェブテクノロジー

WebStorm 2021.2すべての新機能と改善点は、PhpStorm 2021.2 でも初期状態で、またはプラグイン Marketplace から無料のプラグインをインストールして利用できます。

React の useState フック向け Rename リファクタリング

React の useState フックに対応した Rename リファクタリング

PhpStorm が useState の値と関数の両方について名前を変更できるようになりました。 キャレットを状態値に置き、⇧F6/Shift+F6 を押すか、右クリックしてコンテキストメニューから Refactor | Rename を開いてください。

require() の自動インポート

require() の自動インポート

PhpStorm で CommonJS モジュールを扱う際にコード補完候補を使用し、欠落している重要なインポートステートメントを追加できるようになりました。

データベースツール

DataGrip 2021.2 の新機能をご覧ください。掲載されているすべての機能は PhpStorm でも使用できます。 以下に掲載しているものは、そのうちのごく一部になります。

DDL データソース

DDL データソース

DDL データソースを実際のデータソースに基づいて生成できるようになりました。 DDL ファイルがディスク上に作成され、新しいデータソースがそれに基づいて生成されます。 これにより、常にこれらのファイルを再生成し、DDL データソースをリフレッシュできるようになります。

MongoDB のフィールドと演算子の補完

MongoDB のフィールドと演算子の補完

MongoDB コンソールにコード補完が実装されました。

その他の機能強化

PhpStorm 2021.2 で追加された多数の機能改善と強化のごく一部を以下に掲載しています。

  • PhpStorm 組み込みの Web サーバーを使用して HTML / PHP ファイルをブラウザー内でプレビューできます。 PhpStorm が自動的に保存時に開いているファイルをリロードできるようになりました。
  • 簡単にツールウィンドウを整理できるようになりました。 移動したいツールウィンドウの上部にカーソルを合わせて、必要な場所にドラッグアンドドロップしてください。
  • PhpStorm は、最後の更新から 180 日超が経過したキャッシュおよびログのディレクトリを自動的にクリーンアップします。 Help | Delete Leftover IDE Directories から手動でクリーンアップを実行することもできます。
  • カーソル形状を設定し、Option をメタキーとして使用するための新しいターミナルオプションが追加されました。
  • PhpStorm を微調整するためのオプションを含む新しい Advanced settings ページが Preferences に追加されています。
  • 大量のファイルを FTP でアップロードする際の速度が大幅に向上しました。
  • dirname() の階層パラメーターを新たにサポートしています。
  • PHP コードの整形に関する主な問題をすべて解消しました。