PhpStorm 2020.3 の新機能

PhpStorm 2020.3は、PHP 8、PHPStan、Psalm、Tailwind CSS、Xdebug 3、および Code With Me を使用した共同開発のサポートを取り入れたメジャーアップデートです。

PHP 8

PHP 8.0 は、多くの素晴らしい新機能を含む大規模な言語のアップデートです。 PhpStorm は既存コードと PHP 8 の互換性を検証し、コードベースをより速やかに更新し、最新の言語の改善点を活用できるようにします。

言語バージョンの表示

言語バージョンの表示

プロジェクトで使用されている言語のバージョンを常に表示できるようになりました。 また、ステータスバーに対応するインジケーターを配置しました。 composer.json に PHP バージョンの制限が記述されていない場合は、そこから言語のバージョンを変更することもできます。

名前付き引数IDの追加

名前付き引数

PHP 8 の関数とメソッドの引数にパラメーター名を指定して渡すことができます。 これによって省略可能なパラメーターを設定する必要がなくなり、呼び出しが一目で分かりやすくなりました。

PhpStorm は以下を支援します。

  • 引数名の妥当性チェック。
  • Alt+Enter クイックフィックスを使用したパラメーター名の自動追加。
  • 冗長な引数の除去。
簡易初期化プロパティに変換

コンストラクタープロパティの簡易初期化

この機能は、コンストラクター経由で変数を初期化する際に定型コードの量を減らすのに役立ちます。

PhpStorm では、Convert to promoted property(簡易初期化プロパティに変換)Alt+Enter クイックフィックスを使用してコンストラクターが初期化するプロパティを簡易初期化プロパティに変換したり、元に戻したりできます。

nullsafe演算子の使用状況の検証

nullsafe 演算子

null チェックを含む複雑な条件の代わりに新しい ?-> 演算子を使用すると、各要素に対する明示的な null チェックを含む呼び出しチェーンを構築することができます。

PhpStorm は演算子が適切に使用されているかどうかを確認します。

switchステートメントをmatch式に変換

match 式

新しい match 式は switch ステートメントに変わるもので、型安全で簡潔に記述できます。 match 式は値として使用して変数に代入したり、返したりできます。

PhpStorm は switch ブロックを match 式に変換可能かどうかを判断し、Alt+Enter クイックフィックスでそれを自動実行します。

新しい式の場合、誤用を判断するのが困難な場合もあります。 PhpStorm はこのような式をハイライトします。

文字列の新しい関数

文字列用の新しい関数:str_contains()、str_starts_with()、str_ends_with()

PHP 8 では、str_contains() 関数を使用してある文字列が別の文字列の一部であるかどうかを判断できます。 PhpStorm 2020.3 は、str_contains() に置換可能な strpos() の使用箇所に注意を促します。

また、PhpStorm は新しく、より分かりやすい str_starts_with() 関数と str_ends_with() 関数に置換可能な古い substr() の呼び出し箇所をハイライトします。

サポート対象となる PHP 8 のその他の機能

サポート対象となる PHP 8 のその他の機能

  • 関数呼び出し、およびクロージャの use セクションの最終パラメーターの後に続くコンマ。
  • キャプチャを行わない catch は、例外オブジェクトが不要な場合に例外をキャッチするのに便利です。
  • throw を式として使用できるようになりました(アロー関数、合体演算子 ??、三項/エルビス演算子 ?: で使用できます)。
  • オブジェクトからクラスの FQN を取得する際、$object::classget_class($object) の代わりに実行できます。 Alt+Enter クイックフィックスをこの目的で使用できます。

PHP 8 属性

PHPDoc をネイティブな共用体型に変換

PHP 8 では PHPDoc アノテーションを使用する代わりに属性を使用し、メタデータを構造化された方法で指定できます。

PhpStorm は属性に対応したハイライト、コード補完、使用箇所の検索、リファクタリング、および他のコーディング支援機能を提供しています。 また、属性が宣言され、有効に使用されていることを確認するためのインスペクションも搭載しています。

PhpStorm 2020.3 ではいくつかの PHP 8 の属性を IDE 内ですぐに使用できます。 We also provide them in a composer package jetbrains/phpstorm-attributes, so feel free to add it as a dependency in composer.json.

#[Deprecated] 属性

#[Deprecated]

@deprecated PHPDoc タグと同様に、ソフトウェアの将来のバージョンで削除される予定のメソッド、関数、クラス、クラス定数をこのアトリビュートを使用してマークすることができます。

reasonreplacement を指定すると、アップグレードが必要な理由をユーザーが理解し、Alt+Enter クイックフィックスでアップグレードを自動実行できるようになります。

#[ArrayShape] 属性

#[ArrayShape]

このアトリビュートはオブジェクト形式の配列のキーと値を定義するために使用します。 また、PhpStorm のコーディング支援と解析を強化します。

注意:1 行で書いた場合は、PHP 7.4 以前でも機能します。
#[Immutable]

#[Immutable]

初期化したオブジェクトの変更を阻止したい場合、オブジェクトやプロパティを #[Immutable] アトリビュートでマークしてください。

これにより、プログラムの状態がより予測可能になり、デバッグしやすくなります。

CONSTRUCTOR_WRITE_SCOPE / PRIVATE_WRITE_SCOPE / PROTECTED_WRITE_SCOPE のいずれかの定数をアトリビュートコンストラクターに渡すと、プロパティの書き込みスコープ制限を調整できます。

注意:1 行で書いた場合は、PHP 7.4 以前でも機能します。
#[Pure] 属性

#[Pure]

副作用が生じない関数を #[Pure] としてマークすると、PhpStorm でのコードフロー解析を改善できます。 IDE はピュアな関数の冗長な呼び出しをハイライトします。

関数を #[Pure] としてマークしているものの、本文内で外部から変更の試みがある場合、PhpStorm が危険なコードをハイライトします。

array_merge() などのこのような PHP 内部関数はすべて最初から PhpStorm でマークされています。

#[ExpectedValues] 属性

#[ExpectedValues]

このアトリビュートを使用すると、関数がパラメーターとして受け付ける値と返すことのできる値を指定できます。 これはコード補完を強化し、潜在的なバグを検出するのに役立ちます。

#[ExpectedValues].phpstorm.meta.php に含まれる expectedArguments() の上位バージョンです。

#[NoReturn] 属性

#[NoReturn]

スクリプトの実行を中断できる関数を #[NoReturn] アトリビュートでマークすると、フロー解析のコントロール精度が向上します。

PhpStorm はより明確な解析を行えるよう、クイックフィックスを使用してアトリビュートを階層全体に適用することを提案します。

#[Language] 属性

#[Language]

このアトリビュートを正規表現、SQL など、別言語のテキストを含む文字列パラメーターに追加してください。 そうすると、他の PhpStorm の機能を表示することができます。

Psalm および PHPStan のサポート

PhpStorm 2020.3 では、これら両方の静的解析ツールをエディター内で問題箇所をハイライトするための最優先ツールとして使用できます。 これらを composer.json の dev 依存関係として追加し、ツール付近のレンチアイコンをクリックして対応するインスペクションをオンにしてください。

PHPStan と Psalm

また、PhpStorm は @psalm-* タグをコード補完して特別扱いするため、ハイライト、未定義のクラスなどに関して問題が生じることはありません。 多くの場合、タグから @psalm- の接頭辞を削除しても安全になりました。つまり、@psalm-return は単純に @return に、@psalm-param@param にすることができます。

スカラー、数値、定数付きの型など、多くの psalm の型がサポートされています。 その結果、インスペクション、コード生成、補完などの型推論を利用するすべての機能の精度が向上しました。

Xdebug 3

Xdebug 3

Xdebug 3 は PHP デバッガーを新たに改修したものです。 大幅に速度が向上しており、より簡単にセットアップできます。

Xdebug 3 を構成するには、XDEBUG_MODE=debug を指定するだけです。

Xdebug のデフォルトのデバッグポートが 9000 から 9003 に変更されました。 移行を容易にするため、PhpStorm は両方のポートをデフォルトでリッスンしています。 Xdebug のポートや他の設定は、Preferences/Settings | Languages & Frameworks | PHP | Debug で調整できます。

Learn more about Xdebug 3 in the Upgrade Guide.

Code With Me

Code With Meによる共同開発

PhpStorm 2020.3 は JetBrains の共同開発およびペアプログラミング用の新しいサービスである Code With Me をサポートしています。 Code With Me を使用すると IDE で現在開いているプロジェクトを他のユーザーと共有し、リアルタイムで共同作業を行うことができます。

Code With Me の詳細については、これらの記事を参照してください。

Tailwind CSS

依存関係として追加されたツールの設定にすばやくアクセス

PhpStorm は Tailwind CSS を使用した作業の生産性を向上させます。

IDE が Tailwind のクラスを自動補完し、マウスオーバーで最終的な CSS のプレビューを表示し、tailwind.config.js ファイルを使用したカスタマイズを支援します。

HTTPクライアント

Guzzle のリクエストを HTTP クライアントで実行

Guzzle のリクエストを HTTP クライアントで実行

Guzzle is one of the most popular HTTP clients for PHP. PhpStorm 2020.3 では、実際のコードを実行することなく Guzzle のリクエストをテストできます。

リクエストがサポートされている場合は、その横にガターアイコンが表示されます。 それをクリックすると、パラメーターが事前入力された新しい HTTP スクラッチファイルが作成されます。

リクエストを調整し、それを .http ファイルとしてプロジェクト内に保存できます。

HTTP リクエストを cURL にエクスポート

HTTP リクエストを cURL にエクスポート

HTTP リクエストから cURL 文字列を取得するには、HTTP リクエストエディターで Alt+Enter を押し、Convert to cURL and copy to clipboard(cURL に変換し、クリップボードにコピー)オプションを選択します。

cURL 文字列はターミナルやお好みの HTTP クライアントで使用できます。

エディタ

Markdown の編集とプレビューの機能強化

Markdown の編集とプレビューの機能強化

Mermaid.js の図形とグラフを IDE 内部に表示できるようになりました。 そのためには、Preferences/Settings | Languages & Frameworks | Markdown でサポートを有効にしてください。

プレビューペインの右上には、エディターとのスクロール同期をオンオフする Auto-Scroll Preview(プレビューを自動スクロールする)ボタンがあります。

Ctrl+Alt+L でコードを再フォーマットする際に機能する、人気の Markdown コードスタイルのプリセットを多数追加しました。 設定は Preferences/Settings | Editor | Code Style | Markdown にあります。

スペルおよび文法チェックの改善

スペルおよび文法チェックの改善

文法チェックエンジンがより多くの言語をサポートするようになり、文法チェックの品質が向上しました。

ミスがハイライトされる際には、説明と修正候補を含むポップアップが表示されます。

ハイライトされたテキストにキャレットを移動させて Alt+Enter を押すと、以前のようなネストしたリストではなく、すべての置換候補が最上位に表示されます。

ドラッグアンドドロップによるエディターの分割

ドラッグアンドドロップによるエディターの分割

タブを画面の上下左右にドラッグし、複数のタブを並べて開くことができます。

Project ビューや検索ウィンドウでファイルを選択して Shift+Enter を押し、タブを分割モードで開くこともできます。

プレビュータブ

プレビュータブ

ファイルを実際に開かず、専用のタブでプレビューできます。 この機能を有効にするには、Project ビューの歯車アイコンをクリックして Enable Preview Tab (プレビュータブの有効化)と Open Files with Single Click(シングルクリックでファイルを開く)の両方を選択します。 プレビュー中のファイルの編集を開始すると、通常のファイル編集画面に移行します。

IDE

どこでも検索の改善

どこでも検索の改善

Search Everywhere(どこでも検索)ポップアップ(Shift+Shift)の結果表示が若干変更されました。 検索結果が種類ではなく、検索クエリとの関連性に基づいてグループ化されるようになりました。

また、Search Everywhere単純な数値計算を実行することもできます。 数値や数値演算子を入力すると、計算結果がすぐに表示されます。 このため、計算機アプリに切り替える必要がなくなり、作業の流れが妨げられることはなくなります。

また、Search Everywhere はブランチとコミットに関する情報を含む Git の履歴を検索できます。

ウェブテクノロジー

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

Problems ツールウィンドウの TypeScript

Problems ツールウィンドウの TypeScript

TypeScript 言語サービスを Problems ツールウィンドウに統合し、TypeScript ツールウィンドウを廃止しました。これにより、コード内の問題箇所を一箇所でレビューしやすくなりました。 また、これまで TypeScript ツールウィンドウにあったアクションをステータスバーの専用ウィジェットに移動しました。

使用箇所から React コンポーネントを作成

使用箇所から React コンポーネントを作成

コード内に未解決の React コンポーネントがある場合、そのコンポーネントの位置にキャレットを置き、Alt+Enter を押してから Create class/function component(クラス/関数コンポーネントの作成)をリストから選択すると、IDE が適切なコード構成を作成します。

バージョン管理

Git ステージのサポート

Git ステージのサポート

PhpStorm 2020.3 は Git ステージングエリアのサポート機能を搭載しています。 サポートを有効にするには、Preferences/Settings | Version Control | GitEnable staging area(ステージングエリアを有効化)チェックボックスにチェックを入れてください。

ステージしたファイルとアンステージしたファイルを表示するには、Alt+0 を使用して Commit ツールウィンドウに戻ってください。

ファイルの近くにある + アイコンをクリックすると、ファイルをステージできます。

エディターで変更箇所付近のガターアイコンを使用し、特定の行をステージできます。

データベースツール

DataGrip 2020.3 の新機能をご覧ください。掲載されているすべての記事は PhpStorm でも使用できます。

MongoDB での SQL 対応

MongoDB での SQL 対応

MongoDB データベースに対して SQL でクエリを実行できるようになりました。 PhpStorm 2020.3 supports SELECT queries with clauses such as JOIN, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT, OFFSET, and all available MongoDB functions except map, reduce, filter, and let. MongoDB での SQL 対応に関する詳細は、こちらのブログ記事を参照してください。

Couchbase のサポートと新しいデータエクストラクター

Couchbase のサポートと新しいデータエクストラクター

PhpStorm が Couchbase Query サービスをサポートするようになりました。 また、新たに 2 つのエクストラクターを導入しました。1 つのカラムをコンマ区切りの文字列にコピーできるようにする One-Row と、複数の新しい行を挿入する単一の INSERT ステートメントを生成する SQL-Insert-Multirow です。