PhpStorm 2019.3 リリース: PHP 7.4への完全対応、PSR-12、WSL、MongoDBなど

1PhpStorm 2019.3がリリースされました

このメジャーリリースはパフォーマンスと品質に注力しており、IDEのさらなる安定化と高速化が期待できます。 また、PHP 7.4への完全対応、PSR-12のコードスタイル、WSLにおけるリモートインタープリタ対応、MongoDBへの対応、HTTPクライアントの更新、その他多数のユーザビリティ改善が実装されています。


PhpStorm 2019.3をダウンロード

このブログ投稿では、すべての変更点に関する詳細な概要と新バージョンに関して理解しておくべきことをお伝えします。 これは、過去数か月にわたって公開してきたEAP関連のすべての投稿と、まだご紹介していなかったその他多数の便利な追加機能に関する情報をまとめたものです。 大量のGIF画像を使っていますので、気を引き締めてお読みください!

 

パフォーマンスと品質

弊社はリリースのたびにかなりの時間をパフォーマンスと品質の改善に費やしています。 しかし、このリリースに関してはその取り組みをさらに一歩進め、長期間にわたって全面的な品質改善を行いました。 今回はIntelliJプラットフォームチーム全員が一丸となり、IDEのさらなるパフォーマンスを向上に専念しました。 その結果、以下を達成することができました。

  • IDEの起動高速化
  • UIの応答性向上
  • メモリ消費量の削減

ご利用のプラットフォームによっては、IDEの読み込み時間が大幅に高速化されていることが体感できるはずです。 なぜなら、逐次実行していた一部のプロセスを並列化したり、最初のクラスが高速に読み込まれるようにクラスを整理したりしたからです。

また、UIのフリーズに関する1600件以上の報告の原因となっていた多数の問題を解決できました。

バージョン管理サブシステムのパフォーマンス最適化も行われています。 イベントの処理や無視ファイルの操作を改修しました。 大規模プロジェクトでのフリーズが削減され、ステータスが高速に更新されるようになりました。

今後もこの取り組みを続ける予定ですので、今後数回のリリースでは起動時間のさらなる高速化とさらなる最適化を期待できます。

PHP 7.4

PHP 7.4がリリースされました! 多数の素晴らしい新機能が実装されています。 新機能をご確認ください。 PhpStorm 2019.3はこれらすべての新機能に対応しています。

型付きプロパティ

これはおそらく、最も期待されているPHP 7.4の機能でしょう。PhpStormは2019.2以降で同機能に対応しています。このリリースでは、同機能に関するいくつかの問題を修正し、特殊な状況で発生する複数の事例に対応しています。
当然ではありますが、まず第一にPhpStormは型の違反を以下のようにハイライト表示します。

PHP74_typed_properties_inspection

皆さんは、プロパティの型宣言を素早く追加したいと思っているはずです。 この操作は素早く行えます。PhpStormはPHPDocやデフォルト値に基づいて、あるいはコンストラクタに値を注入したときに定義済みの型がある場合に既存プロパティの型を検出できるからです。
ともあれ、型のないプロパティでalt-enter Alt+Enterを押し、Add declared type for the fieldを選択すれば目的を達成できます。

php74_typed_properties_quickfix

アロー関数

PHP 7.4では本文内に単一のステートメントを持つ無名関数がある場合、それを fn(parameter_list) => expr のような短いアロー関数に変換できるようになりました。

arrow-functions

また、外部スコープの変数の値が自動的にバインドされるため、useセクションを書く必要はありません。

arrow-functions-scope

無名関数の上でalt-enter Alt+Enterを押し、Convert closure to arrow function オプションを使用してください。

arrow_functions_quick-fix

数値リテラルの区切り記号

数字内の任意の場所にアンダースコア記号を追加し、数字を視覚的に整形できるようになりました。 任意の数字上でalt-enter Alt+Enterを押し、Add number separatorsを適用してください。 これにより、10進数の場合は3桁ごとに、16進数・2進数・8進数の場合は4桁ごとにアンダースコア ‘_‘ が追加されます。

php74_numeric_literals_quickfix_blog

ネストした三項演算子

ほぼすべてのプログラミング言語は三項演算子を右から左に計算します。 PHPの場合はこの動作が逆であり、直観に反しているためにミスを招いていました。 PHP 7.4では、この左結合性が廃止されています。 つまり、ネストした三項演算子の使用を完全に廃止するか、必要に応じて丸括弧を使用して計算順序を明確に宣言する必要があります。

PhpStorm 2019.3は非推奨の式をハイライト表示し、その動作を明確化するためのクイックフィックス(Alter+Enter)を提供します。

php74_nested ternaries

新しいシリアル化の仕組み

PHPコアチームは、既存のシリアル化処理に関する問題が修正困難であると判断したため、__serialize() および __unserialize() という2つの新しいマジックメソッドを導入することにしました。PhpStormは、コード内でこれらのメソッドの使用箇所を検出するのを支援します。

php74_serialization

共変戻り値と反変パラメータ

PHP 7.4では複数の矛盾が解消されており、そのうちの1つは型システムに関するものでした。 親クラスを継承するメソッドを使用する際、戻り値の型については狭義なものが指定可能になりました。一方、パラメータの型は広義なものが指定可能になりました。php74_covariant_contrvariant

非推奨機能

PHPリリースの良いところは、新機能が追加されるだけではなく、古い機能が非推奨になるということです。それによって、言語がよりクリーンになり、より快適に扱えるようになります。 PHP 7.4のリリースでは、多数の機能が非推奨になりました。

PhpStorm 2019.3は、注意を要するコードブロックをハイライト表示します。 可能な場合は、非推奨の動作に対して自動的にクイックフィックスを適用することもできます。

php74_deprecations
curly_brackets

⚠️ PHP 7.4リリースでは、旧バージョンのPHPのサポートが廃止されます。 PHP 7.2にはもう1年間、セキュリティ修正のみが提供されます。 PHP 7.1は正式にサポート対象外となりました。 つまり、同バージョンで脆弱性が見つかったとしても修正されることはなく、ハッキングされるのは時間の問題だということになります。 アップグレードの準備をしてください。

PSR-12

この新しいPSR-12標準は旧来のPSR-2に取って代わり、当社が過去数年間に提供してきた新しいすべての言語機能に適合し、いくつかの矛盾を解消します。 この素晴らしいアップデートを実現したPHP-FIGを賞賛します! 現在PSR-2をご利用中の方は、PSR-12の変更点をご確認ください。

PhpStorm 2019.3にはPSR-12のコードスタイルがあらかじめ定義されており、同スタイルへの切り替えを促します。 また、Preferences | Editor | Code Style | PHPSet from…アクションを使っていつでも手動で切り替えることができます。

psr-12-set-from

PSR-12のルールの一部はインスペクションとして追加されていますが、デフォルトはオフの状態です。PhpStormでPSR-12のコードスタイルをお選びの際は、当該インスペクションをオンにすることをお勧めします。 このインスペクションは以下のように、PHP | Code Style | PSR-12Preferences | Editor | Inspections 配下でお好みに応じて調整できます。

psr-12-inspections

その後、Cmd/Ctrl+Alt+Lを押すことでエディタ内のコードを再フォーマットできます。

PSR-12_reformat

または、コミット前のクリーンアップ段階でPhpStormに処理を自動的に実行させることもできます。

psr-12-before-commit

WSL

PhpStormがWSL(Windows Subsystem for Linux)環境での開発に対応しました。これにより、Windowsマシン上でIDEを起動しながらもWSL/Linuxを開発のターゲットにすることができます。 WSLでリモートPHPインタプリタを指定し、それをスクリプトやテスト、Composerコマンドの実行やデバッグに利用できるようになります。

  • 開始する前に、お使いのWindows 10マシンにWSLとお好みのLinuxディストリビューションがインストールされていることを確認してください。 インストール手順をご覧ください。
  • ディストリビューションによっては、PHPがプリインストールされている場合があります。 インストールされていない場合は、コマンドラインから手動でインストールする必要があります。 例えば、Ubuntuの場合は以下のようなコマンドを実行できます:
    sudo apt update
    sudo apt install php php-mbstring php-dom php-xml php-zip php-curl php-xdebug
  • WSL環境にPHPをインストールしたら、PhpStormを設定できるようになります。
  • File | Settings | Languages & Frameworks | PHP配下でCLIインタプリタを追加してください。

wsl_add_interpreter

それだけです! これで、テストの実行、Composer、または現在保存しているその他の実行構成にこのインタプリタを指定できるようになります。

PHPDocの改善

PhpStormでは従来、PHPDoc内の完全修飾名やリンクは解決されていましたが、ブロック全体は単色で表示され、通常のコメントと同じスタイルが適用されていました。
PhpStorm 2019.3では、Docブロック内のすべての型、変数、パラメータ、メソッド、プロパティがハイライトされるようになりました。 コメント内にHTMLコードがある場合も、同様にハイライトされます。

phpdoc-improvements

Markdownおよび文字列内のPHPハイライト

時には文字列リテラル内でPHPを使用する必要があるかと思います。 eval()の中で文字列リテラルを使用するのは望ましくありませんが、そのような文字列があった場合はハイライト表示されます。 あるいは、Markdownファイル内のコードブロックでPHPをハイライト表示したい場合があるかもしれません。

PhpStorm 2019.3ではInjectablePHPという特別なPHPのダイアレクトにより、これらすべてを実現することができます。 このダイアレクトはPHPと同様の動作をしますが、開始タグを省略できます。
これは、phpに等しい情報文字列と共にMarkdownのフェンスに自動挿入されます。

php_injectable

PHPマーカーのあるHeredoc/Nowdoc文字列の場合はこのようになります。

injectable_php_nowdoc

eval()の呼び出しでも同様です。

Injectable_php-eval

便利な小さな改善

条件文のクイックフィックス

if-else 条件文は、言語で最も使用される構文だと思われます。 そのため、PhpStorm 2019.3では条件文を操作するための便利ですぐに利用できるアクションをいくつか追加しています。

ifステートメント内に代入がある場合にalt-enter Alt+Enterを押すと、PhpStormはそれを変数に展開することを提案します。

if-assignment-extract

複数のネストしたif条件がある場合にalt-enter Alt+Enterを押すと、それらを素早く一つにマージできるようになりました。

if-merge-conditions

ifが続くelseを単一のelseifにマージできます。

else-if-merge

あるいは、逆にelseifelseifに分割することもできます。

elseif-split

Inline constant refactoring(定数のインライン化リファクタリング)

このリファクタリングはExtract constantと逆の動作を行い、定数の出現箇所を値で置き換えます。 定数の上でCmd/Ctrl+Alt+Nを押してください。

inline_const_refactoring

Cmd/Ctrl+Tを押すと、さらに多くのリファクタリングが表示されます。

関数の引数の折り返しを解除(関数呼び出しを削除)

冗長な関数呼び出しを削除するには、Shift+Cmd/Ctrl+Deleteを押します。

unwrap_function

<?を入力した際に <?php を 自動挿入

最後のRFC投票を通過しなかったため、少なくともあと数年はPHPの省略タグは使用できるものと思われます。しかし、PhpStormは<?が入力されたことを検知次第すぐに<?phpを自動的に挿入し、省略タグの廃止を支援します。

php-no-short-tag

配列のキーの後で ‘=’ を ‘=>’ に自動補完

2019.3には、時間短縮に役立つ別の小機能も実装されています。配列に項目を追加する際に => を入力して値を指定したい場合、= を押せばPhpStormが自動的に => を挿入します。

array-quick-typing

PHPのテスト実行構成でインタプリタを指定可能

従来、PhpStormでリモートPHPインタプリタを使用してテストを実行したい場合には個別にRun configuration(実行構成)を作成しなければなりませんでした。 PhpStorm 2019.3ではTest Runnerの設定において、構成済みのPHPのRun condfigurationを指定可能できるInterpreterオプションが追加されているため、テストの実行に必要なインタプリタを既存のRun configurationから選択できるようになりました。 Docker、Vagrant、その他任意のリモートインタプリタも自由に選択できます。

run-config_specify_interpreter

$this変数のフォントと色が指定可能に

this-color-and-fonts

HTTPクライアント

Editorツールバー

.httpファイルや.restファイルを開いたときに、一般操作すべてに素早くアクセスできるツールバーが表示されるようになりました。

http-client_toolbar

ファイル内の全リクエストを実行

PhpStormのエディタベースのHTTPクライアントを使用すると、一つの.httpファイルに複数のリクエストを###で区切って書くことができます。 これは、先行するリクエストの結果に応じて後続のリクエストが決まるような連続リクエストを発行する必要がある場合に非常に便利です。

これまではそれぞれのリクエストを個別に実行する必要がありましたが、PhpStorm 2019.3ではすべてのリクエストを同時に実行できるようになりました。

http-client_run_all

リクエストの折りたたみ

ボディ部の大きなリクエストを送信する際、マルチパートフォームデータや多数のヘッダーなどを折りたたみ、エディタの表示をすっきりさせることができます。
先頭行やボディ部のみを残してリクエスト全体を折りたたむことができます。

http-client_folding_requests

ホストの補完

新しいリクエストを作成する際、以前に使用したホスト名を入力する必要はなくなりました。 PhpStormは候補リストにホスト名の一覧を表示します。

http-client-host-completion

動的変数

リクエスト内の任意の場所で使用できる動的変数を3つ追加しました。

  • $uuid – 新しいUUID-v4(e9e87c05-82eb-4522-bc47-f0fcfdde4cab)を生成します
  • $timestamp – 現在のUNIXタイムスタンプ(1563362218)
  • $randomInt – 0~1000のランダムな数字

これらの変数を必要箇所に挿入する際は、次のように波括弧を2つ使用してください。
GET http://httpbin.org/anything?id={{$uuid}}&ts={{$timestamp}}

http-client-dynamic-variables

video PhpStormのHTTPクライアントに関する
概要動画を確認し、必要な情報をすべて確認してください。

バージョン管理

プロジェクト複製UIの改良

このダイアログからGitHubにログインするか、ログイン済みの場合には、アカウントや組織別にグループ化されたすべてのリポジトリのリストをすぐにプレビューできます。

vcs_new_get_from_ui

チェックアウト

Checkout asアクションを削除し、New Branch from SelectedおよびCheckoutの2つの新しい別々のアクションを導入しました。 新しいNew Branch from Selectedアクションは新しいブランチを作成しますが、追跡する設定は行いません。 Checkoutアクションは通知なしで新しいローカルブランチを作成してそれをチェックアウトし、同名のローカルブランチが存在しない場合に選択したリモートブランチを追跡する設定を行います。

任意のブランチをプッシュ

任意のブランチの変更をプッシュする際、そのブランチに切り替える必要はなくなりました。 VCS | Branchesポップアップで目的のブランチを選択し、メニューからPushアクションを使用するだけでプッシュできます。

vcs_push_to_any_branch

日付形式のカスタマイズ

VCS AnnotateアクションやVCS Logアクションの日付形式を設定することができます。 例えば、米国の書式を使用したい場合は「mm/dd/yyyy」に設定できます。

vcs-date-formats

IDE

プラグイン管理の改善

PhpStormには、インストールして機能を拡張したり、外観をカスタマイズできる多数の素晴らしいプラグインが用意されています。 従来、プラグインの管理は若干面倒でした。毎回、IDEを再起動する必要があったからです。 PhpStorm 2019.3では土台となるコアインフラストラクチャを実装し、動的なプラグインのインストールに対応することで、この問題を解決しました。 つまり、基本的にIDEを再起動することなくプラグインを読み込んだり、削除したりできるようになりました。 現在、この機能はテーマやキーマッププラグインで有効化されています。 今後のリリースではほとんどのプラグインにこの機能を拡張する予定です。

スクロールバーのコントラスト

Preferences/Settings | Appearance & Behavior | Appearanceで「Use contrast scrollbars」チェックボックスにより、スクロールバーの視認性を向上できるようになりました。

スムーズなマウススクロール

Preferences | Appearance & Behavior | Appearance配下でSmooth scrollingオプションを有効化すると、マウスホイールやタッチパッドを使用する際に1行ずつスクロールするのではなく、インターフェース全体がスムーズにスクロールするようになります。

選択したテキスト内を検索

エディタ内で必要なコード片を選択し、Cmd/Ctrl+Fを押してFindアクションを呼び出すと、IDEが選択範囲内のみを検索します。 検索範囲を広げてファイル全体を検索対象にしたい場合は、Cmd/Ctrl+Fをもう一度押すか、ツールバーのIn Selectionオプションを切り替えてください。

find-in-selection

行をアルファベット順に並べ替える新しいエディタのコマンド

エディタで複数行を選択してメインメニューからEdit | Sort Linesを選択するか、Cmd/Ctrl+Shift+Aを押してFind Actionsから対応するアクションを実行することで、行を簡単にアルファベット順に並べ替えられるようになりました。

sort-lines

ウェブテクノロジー

弊社WebStormチームによるすべての変更を確認するには、WebStorm 2019.3の新機能ページをご覧ください。 当該ページの記載事項はすべて、PhpStorm 2019.3にも取り込まれています。

データベースツール

MongoDBのサポート

ついに、MongoDB対応に着手できる日がやってきました。
このバージョンで実装された実際の機能をご紹介します。

イントロスペクション
データベースエクスプローラー内でコレクションやフィールドを表示できます。 また、フィールド情報を取得するため、各コレクションから最初のドキュメント10件を取得します。 この動作はデータソースのプロパティダイアログのAdvancedタブでJDBCのパラメータ「fetch_documents_for_metainfo」でカスタマイズできます。

mongodb_observer

データビューア
任意のコレクションを開いたり、クエリの結果を確認したりできます。また、カラムで並べ替えたり、値を絞り込んだりすることもできます。ページングも機能します。
また、データをツリー形式で調査することもできます。 この機能を有効化するには、Gear icon | View as… | Treeをクリックしてください。

mongodb_tree_view

クエリコンソール
現時点ではコーディング支援は実装されていませんが、その事によってクエリの実行や結果の取得が妨げられることはありません。 ステートメントを実行するには、その上にキャレットを置いてCmd/Ctrl+Enterを押すか、ツールバーのPlayボタンを使用してください。

mongodb-run-query

PhpStormには初期状態でDataGripの全機能が含まれているため、DBツールでは他にも多数の新機能を発見することができます。 DataGrip 2019.3リリースの詳細な概要をお待ちください。


このリリースでのすべての変更点の完全なリストは、非常に長いリリースノートで確認できます。

機能紹介は以上となります。 最後までお読みいただき、ありがとうございました。 ご質問やご提案、バグレポートやご意見がございましたら、コメント欄にご記入ください。

JetBrains PhpStormチーム一同より
The Drive to Develop

image description