「IntelliJ IDEA ハンズオン」、献本いただきました。著者であり、JetBrains 代理店サムライズムの代表でもある山本祐介さん、ありがとうございます。
http://amzn.asia/0ELFU8Qamzn.asia
JetBrains の IDE 製品は大好物で、普段からとてもお世話になっています。ということで、さっそく読ませてもらいました。
読み始めて真っ先に思ったのは、これ PHPer でも買って全然損ないな、です。
現在の PHP は、文法的にも、技術文化的にも、非常に Java に似た言語となりました。なので、Java を中心に解説されている本だとはいえ、その解説の半分以上は PHP と PhpStorm でも活かせる内容だと感じました。
本書は二部構成になっていて、第一部はこんな感じ...
- HTMLとCSSとJavaScriptの記述を通じて操作感を練習
- 思いつくかぎり最短のキーストロークでエディタ操作、クラス実装
- xUnit系単体テストとその実行 + デバッガの操作
- Gitをベースにバージョン管理機能の説明
- DBのGUIフロントエンドの説明
どうですかこの Java 感のなさ。どの言語ででも応用できますよね。とくに PHP は、Java に似ているおかげですごく無駄がない感じ。
で、この調子で書かれた第一部が、全ページ構成のだいたい 65% を食っています。残りの 35% が第二部、そっちはわりと IntelliJ と Java に固有な内容になっていきます。
とはいっても、あえて IntelliJ に他の言語のプラグインを入れて使っている人なら、プロジェクトとモジュールの概念や、各言語専用 IDE の機能と Ultimate 用プラグインの関係を把握しないとなので、本当に全編 Java 固有 (というか Java EE) な章は全 10 章中の 1 章だけでした。
これでこの値段なら、ということで買って損はない一冊ですどうぞ。
PhpStormでやるならこう
ってまあ、こんだけ勧めていざ PHP だと話違うやんって苦情出るといけないので、買った人のために、PHP での差分を補足しますね。まだ読んでない人には意味わからんかもですが、買ってからまた来てください。
この本の内容、 PhpStorm でもっともギャップが大きいのは、「MavenやGradle」と書かれたところが「Composer」に置き換わることと、「JUnit」が「PHPUnit」になる部分、そう、基本的なプロジェクト構成です。
前準備
WordPress 等の Composer を使わない文化でないかぎり、まず PHP composer.json support プラグインをインストールしておきましょう。Plugins
Browse repositories...
から composer
で検索します。
プロジェクト作成
新規プロジェクト作成では、CLI Interpreter を指定します。初めてPhpStormを起動したときは、ここに選択するものがないと思います。となりの ...
ボタンから、自分の PHP のインストールパスを定義するウィンドウで少なくともひとつのインストール先を指定してください。
空のプロジェクトができたら Terminal を Option + F12 で開きます。ここは、OS標準のコマンドラインシェルと同じです。PHP は Java よりも CLI に触れる機会が多いので、ぜひ活用してください。
Composer を使って PHPUnit を使えるようにします。こうすると、もっともお手軽に
composer.json
ファイルと PHPUnit が準備できます。
出来上がった composer.json
を開いて、autoload
を追加します。先にインストールしたプラグインのおかげで、Composer のキーワードが補完できるようになっています。
"autoload": { "psr-4": { "Acme\\FizzBuzz\\": "src" } }, "autoload-dev": { "psr-4": { "Acme\\FizzBuzz\\": "tests" } },
うまく動いてくれれば、インテンションアクション (豆電球 / Option + ENTER) から、src
と tests
のフォルダを作成することができます。
ここでいったんプロジェクトを閉じて、再度開きます。
プロジェクト設定
本当は、再起動せずにプロジェクト設定を続けることはできるのですが、あえて、PhpStormの「それなりのcomposer.json があるプロジェクトなら、開いたらすぐに自動設定してくれる」機能を発動させてみます。
開くとこんなメッセージが表示されるので、すかさず Initialize をクリックします。
Synchronize IDE Settings with composer.json にチェック、OKします。すると...
また何か勝手に動作したようなメッセージが。これは、composer.json の autoload
の名前空間とディレクトリを対応付けし、PHPUnitの設定も済ませた、という意味です。
ポップアップで操作した Composer の設定はここにあります。
ディレクトリ設定はここです。ソースとテストに自動で十分な設定が行われています。
PHPUnit はここです。Composer でインストールしたものを自動的に認識しています。
「開き直してダイアログでOKしただけ」で、勝手にいろいろできてしまいました。便利ですが、何が起こっているのかわからなくなる恐れもあります。もし「あれ?」と思ったら、主にこのあたりの設定を確認すればいい、と理解してください。
autoload
を書き換えたのに composer install
を実行していなかったので、このままではまだ自分の書くクラスがロードされません。PhpStorm にやらせましょう。composer.json のコンテキストメニューから...
FizzBuzz実装
Cmd + N で src
下にクラスを作成しようと思います。ファイルの種類を選択するポップアップが出ている状態で、おもむろに class
のようにタイプしてみてください。
何文字か入力すると、選択項目が絞り込まれます。
この「ポップアップリストからの突然のタイピング」はいろいろな箇所で使えて便利な技です。最近使用したファイル (Cmd + E) やクラスの Structure ポップアップ (Cmd + F12) で素早く目的の項目にアクセスできます。バージョン管理メニュー (Ctrl + V) やリファクタリングメニュー (Ctrl + T) でも有効です。
プロジェクト設定ができているので、クラス作成ダイアログでは、ディレクトリと名前空間が正しく埋まっています。(うまく設定できていなければ、このダイアログで名前空間が空白になります)
クラスから Cmd + Shift + T でテストを作成/行き来できるのは Java と同じです。
PHPUnit 6+ format にチェック。
PHPUnit のコードだと認識すれば Cmd + N に PHPUnit Test Method が追加されます。
現在は test
プレフィクス形式ですが、近いバージョンアップで、ここで生成されるコードの雛形をカスタマイズできるようになります。そうなれば @test
アノテーション形式のテストも可能です。
テストの実行
JUnit の場合は、テストケースのメソッドにアイコンが表示されますが、PHPUnit には現在アイコン表示がありません。しかし、クラス名やメソッド名を右クリックすれば、実行したいテストだけを実行することができます。
Run と Debug を選択することができます。もし PHP に Xdebug がインストールされていれば、本書の Java のデバッグと同様に、ブレークポイントからステップ実行できます。(ただし PHP には、スタックフレームを巻き戻すようなすごい機能はありません)
また、phpunit.xml があれば、その右クリックから簡単に、テストスイートすべてを実行できます。
もともと PHPUnit は、JUnit と異なり、CLI しか持っていません。にもかかわらず、その実行結果をうまく JUnit と同じような GUI で表現してくれます。CLI の出力はそのまま読め、また、表示されているファイルパス + 行番号は、クリックしてすぐそこに移動することができます。
その他
Java では psvm
-> TAB であの面倒な記述の public static void main(...)
メソッドを作成しましたが、PHP でも pubsf
で public static function () { ... }
と展開できます。ほか、pubf
や prif
といった Live Template が最初から定義してあります。
__DIR__
を使った場合のファイルパスの補完が便利です。また、実在しなければ警告となり、インテンションアクションで後から作成、もできます。
Web サーバーのドキュメントルートにあたるディレクトリを Resource Root としておくと、URL を補完でき、また、実在しない場合の警告を活かすことができます。
これは IntelliJ も共通ですが、バージョン管理中に変更のあったファイルは、コミットダイアログを出すまでもなく、Show Diff (Cmd + D) で大きなウィンドウに差分表示されます。もちろんこれの右側も編集できるエディタです。これ、単に個人的に、コミットダイアログを出さずに済むので気に入っててオススメですよってだけです。
本の章立ての中では目立たないですが、(S)FTP クライアントと REST クライアントの紹介、ありがたいです。見落とさないでください、PHPer ならいつかきっと役に立ちますよ。
IntelliJ IDEA Ultiname の Java 開発者向け機能は、値段だけのことはあって、公式が非常に充実していますが、PhpStorm は、サードパーティプラグインがかなり活躍します。各言語の中で、PhpStormはPHPの方言みたいなののプラグインが、もっとも多いんじゃないでしょうか。なので、自分のフレームワークや重視したい技術キーワードで、まずはいちどプラグインを検索してみてください。
差分でわかりにくいって人には、少し古いですが、PhpStorm 2016.3 入門動画を作りました - なんたらノート第三期ベータ が参考になるかもしれません。カバーする領域だいたいかぶってます。
...で
まあじっさい、編集も設定も、こんなにスムーズに使えることはないです。わりと毎回試行錯誤だったり、無駄な操作してたりです。
もし「うわ... こんなにうまくいかない」と思っても、最初はぜんぜん大丈夫。とにかく意図したとおりにコードを入力できさえすれば、それだけで十分で、あと IntelliJ は勝手に役立ってくれてて、いつの間にか助けてくれてるんで。
でもせっかく高い買い物したんなら、あとたった2894円だけ出して近道行ったほうが、お得じゃないでしょうか。ライセンスの有効期限もあることだし。