PhpStorm 2021.3 は、最近リリースされた PHP 8.1 のサポート、PHP でのジェネリクスの処理の改善、デプロイ、HTTP クライアント、および VCS 統合の強化など、多数の機能強化を IDE に導入するメジャーアップデートです。
新しいバージョンのインタープリターがリリースされました! すべての新しい言語機能の概要については、Brent Roose やコミュニティーメンバーの動画をご覧ください。
PHP 8.1 の新機能の中でも、列挙型は最も期待度の高いものの一つです。
列挙型は PhpStorm 2021.2 からサポートされており、対応するコード補完と不正使用を防止する検証機能が提供されています。
PHP の 列挙型は case 一式を含み、メソッドを記述可能で、型ヒントとして使用可能です。 PhpStorm はこれらすべての case でエラーをハイライトし、適切な候補を提供して時間を節約します。
Readonly properties are the properties that cannot be changed after initialization, that is, after a value is assigned to them.
PhpStorm 2021.3 はコード内の読み取り専用プロパティを利用して、それらを正しく使用していることを確認できるようにします。
専用のインスペクションによって、読み取り専用プロパティの宣言自体またはクラスメソッド内で、そのプロパティが宣言された範囲と同じ範囲のみで初期化されていることがチェックされます。
読み取り専用プロパティは必ず型付けされている必要があるため、PhpStorm は型宣言が指定されているかどうかをチェックします。
読み取り専用プロパティにはデフォルト値を設定できませんが、コンストラクター内で昇格されたプロパティとして初期化できるため、PhpStorm は対応するクイックフィックスを提供しています。
PHP 8.1 では、デフォルトパラメーターの値、static 変数、グローバル定数、およびアトリビュート引数を初期化する際に new 式を使用できます。
PhpStorm はその使用箇所を検証し、新しいオブジェクトをクラスの定数またはプロパティとして提供しているなどの無効なケースをハイライトします。
PHP 8.1 では、第一級 Callable 構文を使用してあらゆる関数への参照を取得できます。 そのため、$fn = Closure::fromCallable('strlen');
と記述する代わりにより短い $fn = strlen(...);
形式を使用すると、PhpStorm がコードを新しい構文に変換するための Alt+Enter クイックフィックスを提供します。
PHP 8.1 では、1 つではなく複数の型制約を満たす必要のある値を持つ交差型が導入されています。
PhpStorm は、これらのコンストラクトに対応したコード補完を提供し、交差型が共用体型と組み合わさっていないことをチェックします。 また、交差型が PHPDoc アノテーションとして指定されている場合も正しく解釈します。
PHP 8.1 では、戻り値に never
型が導入されています。 関数が never
型で宣言されている場合、その関数は値を返さず、例外をスローするかスクリプトの実行を終了します(die()
、exit()
、または trigger_error()
関数と同じ動作です)。
PHP 8.1 では、final
クラス定数を宣言して子クラスでのオーバーライドを阻止することができます。PhpStorm はそのようなケースを検証します。
PHP 8.1 では新機能が導入されているほか、言語の一貫性と使いやすさを向上させるために複数の機能が非推奨に指定されています。 PhpStorm はこのような非推奨コードの特定を支援します。 以下にいくつか例を挙げます。
Serializable
インターフェースの代わりに、__serialize()
と __unserialize()
マジックメソッドを使用することが推奨されます。 PHP 8.1 では引き続き Serializable
を使用することはできますが、実装するクラスが __serialize()
と __unserialize()
を使用する場合に限られます。 PhpStorm 2021.3 は誤ったコードをハイライトし、マジックメソッドを追加する Alt+Enter クイックフィックスを提供します。
PHP 8.1 での $GLOBALS
スーパーグローバル変数の使用に制限が設けられました。$GLOBALS
全体に書き込みまたは読み書き操作を実行できなくなっています。 PhpStorm は、そのような問題となる使用箇所をハイライトします。
PHP ではまだ言語レベルのジェネリクス対応は行われていませんが、アノテーションを介したジェネリクスの使用はすでに人気になっています。 これは、コレクション、コンテナー、ファクトリ、および他のアプリケーションを処理する際にコードの安全性と予測可能性を高めるのに役立っています。 PhpStorm 2021.3 では、@template
アノテーションを使用してジェネリクスに対応できるようにしました。
PhpStorm が新たに IteratorAggregate
インターフェースをサポートし、Doctrine Collections の反復処理を初期状態で使用できるようになりました。
In the upcoming Laravel release, the illuminate/collections package will support generics annotations. PhpStorm 2021.3 では、このコレクションに対応した適切なコード補完を提供します。
コンストラクターにジェネリクス型の @template
パラメーターがあり、オブジェクトを引数として渡して型を指定する場合、PhPStorm が正しい型を推論してコード補完を提供するようになりました。
従来はクラスを移動してその名前空間を更新する際、コードエディター内で移動リファクタリング(F6)を使用するしか選択肢がありませんでした。 PhpStorm 2021.3 では、代わりに Project(プロジェクト)ビューでドラッグアンドドロップしてこの操作を行うことができます。 この方法では、操作中にプロジェクト構造を確認することができます。 また、この方法では複数のクラスまたはフォルダー全体を移動できるため、PhpStorm のすべての参照を正しく更新することができます。
Inline method(メソッドのインライン化)リファクタリングを使用すると、メソッドの呼び出しをメソッドの内容に置換してからメソッド自体を削除できます。 PhpStorm 2021.3 では、このリファクタリングが改善され、より多くのケースに対応できるようになりました。 たとえば、非 static メソッド、メソッドチェーン、およびアロー/匿名関数をパラメーターとして渡せるようになりました。
このリファクタリングを使用するには、メソッドにキャレットを置いて、Ctrl+Alt+N を押します。 コード内で一度しか使用されていない private メソッドが存在する場合は、Alt+Enter を押して新しい Inline Method(メソッドのインライン化)クイックフィックスを使用します。
Inline variable(変数のインライン化)リファクタリングでは、変数の参照を実際の変数の値に置換できます。 PhpStorm 2021.3 では、このリファクタリングが NOWDOC/HEREDOC
変数のインライン化をサポートするようになり、複数のユーザビリティ強化が行われています。
さらに、PhpStorm は一度しか使用されていない変数を検出し、Alt+Enter で適用できる Inline Variable(変数のインライン化)クイックフィックスを提供します。
デプロイ用に SFTP サーバーを使用する場合、rsync を有効にしてファイルとフォルダーのアップロードと更新を行なうことができます。これにより、転送速度が大幅に向上します。 対応する Use rsync for download/upload(アップロード/ダウンロードに rsync を使用)オプションは、デプロイサーバー構成の Advanced(高度な設定)セクションにあります。
rsync
実行可能ファイルのパスは、Settings(設定)/Preferences(環境設定)| Tools(ツール)| Rsync で構成可能です。 macOS と Linux では、すぐに使用可能です。 For Windows, it is recommended to use Cygwin and OpenSSH.
PhpStorm 2021.3 では、アップロードに失敗したファイルを再送できます。 これを行うには、File Transfer(ファイル転送)ツールウィンドウの Retry(再試行)リンクをクリックしてください。
Settings(設定)/Preferences(環境設定)| Tools(ツール)| SSH Configurations(SSH 構成)で、SSH 構成に使用する HTTP または SOCKS プロキシサーバーを指定できるようになりました。
IDE 全体のグローバルプロキシを使用することも可能です。 これを行うには、Settings(設定)/Preferences(環境設定)| Appearance & Behavior(外観と動作)| System Settings(システム設定)| HTTP Proxy(HTTP プロキシ)で、Use global IDE proxy settings(グローバル IDE プロキシ設定の使用)チェックボックスをオンにして、プロキシの詳細を入力してください。
PhpStorm 2021.3 には、現在のデフォルトサーバーを表示する新しいステータスバーウィジェットが備わっています。 複数の環境を操作する必要がある場合、そのウィジェットから直接サーバーの切り替えを行えるため、設定に移動する必要がありません。
HTTP クライアントがバイナリレスポンスをサポートするようになりました。 受信したレスポンスが画像である場合、レスポンスコンソール内にそのプレビューが表示されます。
HTTP クライアントで、出力をカスタムファイルまたはディレクトリにリダイレクトできるようになりました。 強制リダイレクトとソフトリダイレクトの 2 つの演算子がサポートされています。
>>
演算子は必ず新しいファイルを作成します。ファイルがすでに存在する場合は、ファイル名に -n
の接尾辞を追加します。 >>!
演算子は、ファイルがすでに存在する場合にそのファイルを書き換えます。 明示的なファイルパスを指定するほかに、新しい定義済みの変数を使用できるようになりました。{{$projectRoot}}
はプロジェクトのルートフォルダーを、{{$historyFolder}}
はリクエスト履歴フォルダーを指しています。
PhpStorm 2021.3 では、HTTP リクエストに名前を付けられるようになりました! 識別子は @name
を使用するコメントか、リクエスト区切り文字(###)のテキストとして指定できます。
すると、Services(サービス)ツールウィンドウ、Run Configuration(実行構成)、Run Anything(何でも実行)、または Search Everywhere(どこでも検索)ダイアログから、その名前でリクエストを呼び出せるようになります。
PhpStorm 2021.3 では、Favorites(お気に入り)とBookmarks(ブックマーク)の機能が Bookmarks(ブックマーク)に統合されました。 特定の行、ファイル、またはフォルダーで F11 を押すと、ブックマークを追加できます。 追加されるすべてのブックマークは、統合された Bookmarks(ブックマーク)ツールウィンドウに表示されます。
Show Usages(使用箇所の表示)ダイアログでは、シンボルを Ctrl + クリックして呼び出すことができますが、今後は見つかった使用箇所ごとにソースコードのプレビューを表示できます。 プレビューを有効にするには、 ツールバーボタンをクリックしてください。
Diff(差分)画面の設定に新しい Align Changes Highlighting(変更のハイライト表示を整列)オプションを追加しました。歯車アイコンから使用できます。 これは Diff を読みやすくする機能です。変更のない行を整列して横並びに表示するため、特に複雑な変更がある場合に役立ちます。 追加または除外されたコードをより明確に確認できるようになります。
Checkout and Rebase onto Current(チェックアウトして現在のブランチでリベース)アクションを使うと、選択したブランチをチェックアウトし、現在チェックアウトされているブランチでリベースすることができます。 以前はローカルブランチでのみ実行できるアクションでしたが、PhpStorm 2021.3 では、リモートブランチにも適用できるようになりました。
送信可能な複数のコミットと作業中の他のコミットが混在しており、確信のあるコミットのみをプッシュしたい場合があります。 PhpStorm 2021.3では、Git ツールウィンドウの Log(ログ)タブで選択したコミットまでコミットをプッシュすることができます。 必要なコミットを選択し、右クリックして Push All up to Here(ここまでのすべてをプッシュ)アクションを使用してください。
Settings(設定)/Preferences(環境設定)のVersion Control(バージョン管理)ページは合理化されてユーザビリティが向上し、すべての使用可能な設定をリスト表示するようになりました。 Git ノードは、最も重要なプロセスである Commit(コミット)、Push(プッシュ)、および Update(更新)のセクションに分割されています。 また、Directory mappings(ディレクトリマッピング)用のノードが追加されています。 バックグラウンド操作はデフォルトでオンになっているため、Background(バックグラウンド)ノードは削除されています。