uzullaがブログ

uzullaがブログです。

PHP開発には単なるエディタだけでなく、もっと良い環境を - Webアプリエンジニア養成読本 AdventCalendar2014 22日目

いきなり宣伝ですが、エンジニアのお祭りYAPC::Asia Tokyo 2015の情報をもれなくチェックするためのメール通知サービスが開始されました!

YAPC::Asia Tokyo 2015

毎年「チケット販売いつのまにおわったの…」等といった悲しい声をいただきます。わすれないように是非上記リンクより、メールアドレスを登録しましょう!


さておき、本エントリはWebアプリエンジニア養成読本アドベントカレンダーです。

Webアプリエンジニア養成読本 Advent Calendar 2014 - Qiita

私の担当分においては、こちらの書籍でお話できなかった、初心者向けの事について書いたりしております。

上のアドベントカレンダーページから是非他の記事もご覧下さい。

エディタの話

多くの書籍などで様々なエディタが紹介されますが、初心者向けの書籍では、ほとんど機能のない素のエディタを使う事が多いと思います。
しかし、実際問題として、書籍でcoteditorなどをおすすめした当の本人である私もcoteditorでPHPを書く事はほとんどありません。

現在私は主にPHPStormでPHPをかいています。

開発環境の種類

基本的にPHPはいまどきのエディタであれば何でも開発ができます。CotEditor等で開発することは全く問題ありません。CotEditorはすごく良いエディタで私も愛用しています。

しかし、CotEditorはPHPの開発支援はほとんどなく、シンタックスハイライト(コードを色づけして、みやすくする)くらいしかありません。

高度な開発環境、IDEをつかうことで、もっと様々な開発支援機能が提供されます。

PHPIDEはさまざまなものがありますが、PHPStorm、NetbeansEclipse+PDT等が一般的だとおもいます*1。ここではPHPStormを念頭にお話しますが、他でも同様の機能は提供されているはずです。

具体的な開発支援機能

IDEには色々な機能がありますが、少し紹介します。

シンタックスエラーチェック

f:id:uzulla:20141222044641p:plain

一番わかりやすくて便利なのは、シンタックスエラーをチェックする機能ではないでしょうか。要は、PHPの文法がまちがっていたりすると、赤いバッテンや下線などがでて、実際に動かす前にエラーを教えてくれます。

PHPStormくらい高度な解析が可能なIDEだと、「文法的にはあっているけど、あやしい」という所も積極的におしえてくれます。従っていくだけで、コード品質がどんどんあがっていくわけです。自分では合ってるとおもっているけど、PHPStormが文句を言うコードは実際にうごかなかったりするので、非常に便利です。

PHPのバージョンを指定すれば、PHPのバージョンに応じた解析をしてくれます(たとえば、PHP5.5で非推奨な関数で文句をいったり、5.3以下でサポートしていない文法をエラーにしたり)。

コード整形(リフォーマット)

f:id:uzulla:20141222044933p:plain

コードのインデントや、=や括弧の前後をキッチリそろえ、コーディングスタイルが統一されていることがのぞましいですが、気を付けて書いてもキッチリ揃えるのは困難です。そんな時に一発で綺麗にしてくれます。手間もへりますし、品質もあがります。

なにも考えずにガンガンかいた後にGitなどにコミットし、後で「あー、なんかこのコードきたないなー」とおもってなおすと、無駄に整形しただけのコミットログとか残るのも微妙なものです(特に、後でBlameする時とか、Diffをとったりするとかしづらくなるので)。

あとは、すごく酷いコードをなげわたされたとき(みたことありますか?)、コード整形をかけると一発でそれなりに読みやすくなるのが最高だと思います。同様にHTMLのコードも整形できることが多いので、こちらも結構重要です。

コードジャンプ

http://i.gyazo.com/0200403ee4bd5458b8b202fa7e2d298e.gif

変数や、関数の宣言部分(つまりは、本体)にジャンプする機能です。コードをかいていると「この関数ってどんな処理だっけ?」とおもったりすることがありますが、そこにキー一発でジャンプします。勿論別のファイルであっても問題ありません。

他人のコードや、大きなフレームワークを使っていると自分が覚えていない関数を使う事が頻繁に発生しますので、これをドンドンつかうことで快適にコードを読みつつコーディングが可能になります。

単純に、コードを読むだけの作業の時にもつかうと、非常にはかどります。

補完、サジェスト

http://i.gyazo.com/8d07eb6612fae9004796dfd1e75c41f6.gif


関数名を途中までいれると自動的に関数名を補完してくれます。あるいは、関数の引数が何個あって、どういうものなのかも表示してくれます。

関数だけだと、コードジャンプ(宣言ジャンプ)だけでも助かりますが、オブジェクト指向プログラミングをはじめると、コード補完のありがたみがどんどん増します。
OOPのオブジェクトにどんなメソッドやプロパティがあるのか、うろおぼえでもドンドン補完かけて書いていけるので)これはJavaなどでは定番(必須?)の機能なのですが、LLにおいてはPHP以外では少ないようにおもいます 。

vimEmacsなどでも補完をする機能があったりするのですが、PHPStormなどのIDEはちゃんとコンテキストをよんでくれるので、補完の精度が非常にたかく、ウソがでてくることが希で信頼できます。

リファクタリング

http://i.gyazo.com/8e383afb8b981defbe63f5390c5bd923.gif


変数名や、クラス名が後になってきにくわないことは良くあります。そんなとき、一発で、問題無く置換してくれる機能がリファクタリング機能です。
単純な置換とはまったくちがい、ちゃんと文脈をみてコードを壊さないように置換してくれるので非常に便利です。

リファクタリングを活用すれば、微妙な変数も億劫になる事無く修正できます。

デバッガ

PHPで一番つかわれているxdebugと呼ばれるデバッガ(の機能)は色々なクライアントをつかって利用できるのですが、IDEのクライアント機能はエディタと連駅してステップ実行やブレークポイントをうつことができます。

デバッガといっても初心者の方にはなんのことやら?とおもうかもしれませんが、いわゆるプリントデバッグ(echoデバッグ)をほとんどやらなくてすむようになるので、非常に便利な機能です。(とはいえ、私はぱっとみるだけなら、プリントでバッグをつかったりもしますが)

Git連携

f:id:uzulla:20141222045654p:plain

簡単にGitコミットや、過去のコミットとのdiffを見る事ができます。現在のブランチもPHPStormの場合、左下に常時表示されます。特に、Diffは便利で、コンフリクトの解消もサイドバイサイドでみながらマウスでポチポチできるのは大変楽です。

コミット前にコードに怪しい(前述のシンタックスエラーチェック)所がないかおしえてくれますし、コードフォーマットを自動でかけるオプションもあったりします。

ほかにも…

http://i.gyazo.com/83462b7d1379a81ec832514f69b23c33.gif

IDEによって機能はまちまちですが、便利な機能はたくさんあります。PHPStormでいえば、Shift2回おした後にでてくる入力欄に、ファイル名でも関数名でもクラス名でも入力したらそのファイルのそこが開ける機能があり、いちいち深いディレクトリにいかなくても一発でファイルを開くことができて、とても便利です。

他にも、私はあまりつかっていませんが、VagrantやComposerなどの外部ツールの連携もあったりします。シェルをひらくことなく利用ができます。


IDEが向かないケース

とにかく私はIDE最高!と考えていますが、デメリットはないのでしょうか?

有償(PHPStormの場合)

PHPStormは一番いいIDEだとはおもいますが、有償です。私は仕事でガンガンつかうので当然払いますが、まだお金ははらいたくない人も多いでしょう。あるいは、企業で何人も導入するのは負担がきびしい、という場合もあるはずです。

そのときは、Netbeansがまずはお勧めです、オープンソースで無償で利用できます。

英語が無理

PHPStormは基本的に英語でつかいます。日本語化が検討されていますが、まあ割とだれも必要性を感じていないので、英語のままです。私も、ヘルプの長い文章以外で英語でこまったことはありません。

ただ、どうしても日本語が使いたい場合には、こちらの場合もNetbeansの日本語版をつかってみてください。

複雑な(ごった煮の)サイトの修正

PHPでありがちなのですが、1つのサイトに複雑にさまざまなファイルが入り交じっていて、なおかつ環境がftpでアップロードする本番サーバーだけの場合、プロジェクト単位であつかうIDEは使いにくい事があります。そういったスタイルは旧来的なものなので、改善するか、控えるというのが一番良いと私は思いますが、まぁ、良くあるケースです。

勿論FTPでリモートサーバーをみたり、そこにアップロードする機能とかあったりもするのですが、本番サーバーをガンガン書き換えるのであれば、codaなどのエディタのほうが気楽だ、という場合もあるでしょう。
(Codaは、FTPクライアントとエディタが融合したソフトで、私もCoda1のころは愛用していました)

また、サーバーにはいって修正する、みたいなときも当然ながらサーバーにIDEをインストールするのは現実的ではないので*2むずかしいでしょう。(ただし、sshでリモートサーバーをマウントして作業することはできます)

PCの性能が低い

IDEはさまざまな支援機能のために、かなり重いです。超時間つかうと動作が緩慢になったりすることがあります。はっきりいっていいPCに買い換えるのが一番だとおもいます。

ただ、PHPStormなどはバッテリーセーブモードなど、一部の機能を動的にオフにして負荷をさげる機能があったりします。ただ、それをつかったら意味があんまりないので…微妙ですね。

他の言語も頻繁に修正する

たとえば、PHPと一緒にHTML,JSを修正するのであれば、IDEで十分でしょう。どのIDEもHTMLやJSの開発支援もセットになっており、PHPStormは特にJSもPHP同様に強い開発支援機能を搭載しています。まちがいなく普通のエディタよりも開発効率はあがるでしょう。

ただ、Perlなどまったく別の言語の場合は別です、エディタは体に馴染むものなので、つかいわけるのがむずかしい事はあります。

…とはいえ、Perl以外の、Rubyなど多くの言語についてはPHPStorm開発元がほぼ同じ体験を提供するRubyMineというIDEをだしていますし、NetbeansはCやJavaの開発をサポートします、Eclipseはいわずもがな、Javaなどを書く事ができます。(むしろ、PHPStorm以外は無料でどれも編集できるので、プロジェクトは別としても、同一のIDEで作業できるかなとおもいます)
*3

PHPをもっと好きになるために

こういったツールは「便利だけどつかうべきではない」なんて事は一切ありません。役立つなら、ドンドンつかうべきです。開発が楽になれば、もっともっとコードを気軽に書く事ができて、好きになることまちがいありません。


人気あるSublimeATOMなどで開発されている人も多いとおもいますが、PHPは他のLLにくらべ、IDEがとても良い性能をもっていますので、是非一度つかってみてはいかがでしょうか?

最後に、しなければならない宣伝

さて、宣伝タイムです。帰らないで下さい。

まず再度の書籍の宣伝です、本アドベントカレンダータイトルの書籍です。

このエントリが役立つ方には、まだちんぷんかんぷんかもしれません。即座に買えとはいいませんが、いつかは買って欲しいです。まあ、本屋にいって他の書籍のついでに立ち読みしてみるのも良いでしょう、買って欲しいですが。

もし、この書籍の内容が理解できれば、おそらく仕事でもなんとかやっていけるレベルにいるのではないでしょうか。そのようなベンチマークとしても役立つと考えております。つまりは買っていただきたい!ということです。

しなければならない宣伝2

来年の夏に開催されるYAPC::Asia Tokyo 2015についてです。

YAPC::Asia Tokyo 2015

YAPC::Asia Tokyoは世界最大級のエンジニアの手による草の根技術カンファレンスです。これまで9回開催され、様々な技術に関する発表そして技術者同士の出会いを生んできました。

「なんかエンジニアコミュニティってきいたことがあるけど…」「カンファレンスってどんなの?いったことない」という人でもきっと新しい発見があるイベントとなりますので是非ともチェックしてください。

f:id:uzulla:20141201013416p:plain

YAPCPerlのカンファレンスと思われがちですが(実際そうなのですが)、どんな言語の人でも、きっとPHPの人でも楽しめるイベントになっております。なにせ去年のベストトーク賞はPHPトークでした*4


来年は10年目かつ、今の運営における最後の開催となり、規模も、話題のバリエーションも間違いなくパワーアップしますので、是非来年のスケジュールにいれておいてはいかがでしょうか?

f:id:uzulla:20141201013436p:plain


…といっても、来年の話では忘れてしまうでしょう。冒頭にも記載しましたが、メール通知サービスが開始されました!是非ご登録下さい!

YAPC::Asia Tokyo 2015


といった宣伝をおこなった所で、こちらからは以上です。

いやはや、もうすこしで終わりですがネタがありません!あとはもうPHP愛でも語るしかない気がしはじめました。なにか気になる事があれば是非聞いて下さい。

ではまた次回お会いしましょう!

*1:ほかにも結構あります、つかったことはないですが、MicrosoftのVisualStudioもPHPサポートのプラグインなどがあるようです

*2:Linuxでうごくにせよ、Xで接続するのか!?ってなるので

*3:Perlもあるにはあるのですが…うーん…

*4:というか私です