PhpStormと僕

日々周りを巻き込むことをモットーに。気まぐれでJetBrains製のIDEネタとか書いてます。

IGNITIONチームの開発フローについて話してきた #nanapi_study #hatenatech

こんにちは!だいぶ久々の投稿です。

今週は台風18号、来週は台風19号が来ていますが、そんな台風の合間を縫って東京と京都の勉強会で話してきました。

f:id:rinrin900:20141010113329p:plain

f:id:rinrin900:20141010113338p:plain

nanapi勉強会 vol4 - 【nanapi x はてな】はてなとnanapiの開発フロー - nanapi勉強会 | Doorkeeper

【nanapi x はてな】はてなとnanapiの開発フロー in Kyoto - connpass

ブログを書くまでが勉強会!既にこれらの勉強会についてのまとめはいくつかブログが上がっていましたので、このエントリでは懇親会で話したり聞かれたネタとか、スライドの補足とかを諸々書いてみます。

物理カンバン廃止について

最初は物理カンバンを使ってタスク管理してましたが、途中からIGNITIONチームでは物理カンバンを使わない、という選択肢を取りました。

理由としてはいくつかありますが、一番の理由は「管理が面倒&無駄が多い」っていうところです。 バーンダウンチャートを作るなりログに残すにしても結局別のタスク管理ツールとの二重管理が必須になってました。

あと、振り返りMTGをやるときにも物理カンバンを別の会議室まで引っ張って行くのも正直面倒というのもあります。日々の開発の中でだるいなーと思う箇所を排除したい(という意識を共有できるメンバーが多い)チームだったのでそういう選択を取りました。

もちろん物理カンバンの一覧性&視認性は捨てがたいところではあるんですが。 リモート開発をいつでも出来るような環境を想定した開発フロー選定、というのもちょっと意識しました。

Jenkinsを使わない

語弊がありそうなので最初に書いておきますが、Jenkins自体はとても良いツールだと思いますし、nanapi.jpや他サービスの方では一部では現在も使っています。

が、IGNITIONチームではJenkinsは使わない、という選択肢を取りました。 理由としてはいくつかあって

  • メンテコストが非常に高い
  • 属人性が高くなりすぎる
    • 社内のメンテナが固定されがち
    • 結果、各ジョブが秘伝のタレ化する
    • 社内のJenkins職人(通称Jenkinsおじさん)しかメンテできない

というのを問題視しています。

個人的意見ですが、クックパッドさんのデベロッパープロダクティビティ のように、それらをミッションとした専属チームがメンテをし続けられるのであればJenkinsも良いのかなあと思っています。

nanapiの規模だと個人が管理し続けるのはとてもしんどいので、そういったジョブはすべてSaaSに寄せる方向で検討している、といった感じです。

PhpStormの話

とりあえず言いたいことはすべて去年のPhpStorm Advent Calendarに書きました!

IntelliJ IDEAとかRubyMineでもPHP周りの独自機能を除けば基本は同じなので、ショートカットとか便利機能とか参考にして頂ければと思います。 全部読むのだるい方は、とりあえず25日目の記事を見ると大体幸せになれます。

ちなみに今年はAdventCalendarは書かないです。(予定)

Mackerelチームについて

発表者の id:motemen さんの記事が参考になります!

開発フローに正解なんてないので、気に入った&チームに合いそうな部分を取り入れていけば良いのかなあと思います。

うちでは早速 Mackerelチームの 式次第 のやり方を振り返りMTGに取り入れてみました。

はてなMackerelチームの開発フロー(スクラム、リモート)について話しました #nanapi_study #hatenatech - 詩と創作・思索のひろば (Poetry, Writing and Contemplation)

関連リンク

nanapi勉強会vol4でパネリストしてきた | おそらくはそれさえも平凡な日々

「nanapi勉強会 vol4」に参加してきました - 勉強会ログ

nanapi勉強会 vol4に行ってきた感想 - きょこみのーと

nanapi 勉強会 vol.4 #nanapi_study に参加してきました - めも帖

ちょっと面白いプラグイン Referencer

今日見つけたちょっとおもしろプラグイン。 http://plugins.jetbrains.com/plugin/7104

  • Ctrl+Shift+Alt+C, Ctrl+Shift+Alt+C
  • Ctrl+Shift+Alt+V, Ctrl+Shift+Alt+V

とかで動きます。

それぞれ、

  • 現在のファイルから、いい感じの文字列を選択してクリップボードにコピー
  • 現在のファイルから、いい感じの文字列を選択して貼り付け

が出来たりします。

AccountController.php_-_candycane_-____www_candycane_.png

具体的には、現在の時刻とかUnixTimeとか、現在のファイルパスとか開いてるファイルパス一覧とか、ファイル内の変数とかメソッド名とか、コード内のテキストとか色々取ってこれます。

絞り込みできないからあんまり使い道思い浮かばないけど、ちょっと使ってみる。

「PhpStormで始める快適なWebアプリケーション開発」について話してきた #phpcon2013

先日のPHP Conference 2013でPhpStormの便利な機能とか、フレームワーク開発での小ネタとかについて話してきました。 限られた時間だったので矢継ぎ早になってしまって、こちらで詳細書いてみます。

PhpStorm × Framework

Symfony2

Symfony2 Plugin

強力なコード補完をサポートしてくれるSymfony2用のプラグインです。 xml/yamlファイル内でのジャンプとかもサポートしてくれます。

f:id:rinrin900:20130918123508p:plain

こんな感じで、サービスコンテナから取得したクラスに対してもコード補完してくれたりします。

詳しい設定や使い方はこちらが参考になります。

PhpStromのSymfony2 Pluginによる入力補完が便利すぎる

CakePHP

CakeStorm

私が個人的に作っているCakePHP用のプラグインです。1.3系、2系共に動きます。

Controller⇔View、View⇔Element、Model/Controller⇔TestCaseなどのファイル間ジャンプや$this->render()しているテンプレートファイルへのジャンプをサポートします。

f:id:rinrin900:20130918123636p:plain

f:id:rinrin900:20130918123642p:plain

詳細の使い方はこちらを参照してください。

PhpStormのCakePHPプラグイン、CakeStormを作ってみました

Laravel

Laravel IDE Helper Generator

一手間掛かりますが、上のHelperを設定しておくと各種クラスでのコード補完をしてくれます。

f:id:rinrin900:20130918123755p:plain

その他フレームワークなど

専用プラグインがないフレームワークでも、PhpDocをしっかり書けば特殊な呼び出し方をしているクラスからもコード補完してくれます。

例えば、CodeIgniterとかでは

f:id:rinrin900:20130918124108p:plain

@property Search_model $Search_model

のような形で、@propertyアノテーションを指定しておくと、

f:id:rinrin900:20130918124234p:plain

このように、$this->Search_modelのような呼び出しの形でもコード補完してくれます。

PhpStormで便利な機能

便利機能はめちゃくちゃ多いんですが、「高機能すぎて把握しきれない・・・」というような方は多いと思います。 そこで、個人的によく使うコマンドや、 マイナーだけど便利だなーって思う機能を幾つか紹介します。

また、機能は全てアクションの正式名称のまま表記しているので、 気になったショートカットなどは[Preferences]-[Keymap]から検索するとすぐ見つかると思います。

機能名の横の()はWindows環境でのデフォルトショートカットを表しています。

Find Action (Ctrl+Shift+A)

PHPエンジニア養成読本でいうところの「最強コマンド」です。 PhpStorm内で実行したいアクションをここで入力すると、それにマッチする or 近しいアクションを一覧で表示してくれます。 なので、各機能ごとのショートカットを覚えきれなくても、このコマンドのショートカットさえ覚えておけば一通りのことが可能になります。

例えば、GitにPUSHしたいときはCtrl+Shift+A → "push"と入力すると

f:id:rinrin900:20130918124641p:plain

このようになり、置換や一括置換を行いたいときはCtrl+Shift+A → "replace"と入力すると

f:id:rinrin900:20130918125204p:plain

このような形で、実行可能なアクションを一覧で表示してくれます。

Jump to Class (Ctrl+N) / Jump to File (Ctrl+Shift+N)

それぞれクラス名やファイル名を指定して直にファイルにジャンプ出来る機能です。 1文字入力毎にファイル一覧を高速でサジェストしてくれます。 個人的にはJetBrains系IDEの醍醐味と言っても過言ではないくらいの超有用機能だと思います。 ちなみにPhpStorm7からファイルのサジェストが超高速になってます。

f:id:rinrin900:20130918124727p:plain

f:id:rinrin900:20130918125247p:plain

それぞれ"Account"という単語を、上がJump to Class、下がJump to Fileで絞り込んだ状態です。 機能の名前の通り、Jump to Classはクラス名にAccountが含まれるファイル、 Jump to Fileはファイル名にAccountが含まれるファイルを一覧で表示してくれます。

Go to Decralation (Ctrl+B)

変数やクラス、メソッドの定義元にジャンプする機能です。Vim界でいうところの"gf"コマンドに相当します。

例えば、CakeEventクラス上のCtrl+Bを押すことにより、CakeEventクラスの定義箇所までジャンプすることが出来ます。 同様にメソッドや変数も、参照可能な範囲であればジャンプ出来ます。

f:id:rinrin900:20130918125848p:plain

f:id:rinrin900:20130918125521p:plain

Recent Files (Ctrl+E)

PhpStorm上で直近に開いたファイル履歴を表示してくれます。 普段開発をしていると同じようなファイルを何回も行き来することは多いので、使用頻度はかなり高めです。

類似コマンドでRecent Changed Filesというものもあり、こちらは「直近に編集したファイル」履歴を表示してくれるので、用途を分けて使い分けるといいです。

f:id:rinrin900:20130918130142p:plain

自動アップロード

f:id:rinrin900:20130918130608p:plain

私は「ローカルのMac上でPhpStormを立ちあげて開発」、「開発用のサーバにコードを置いて実行」のようなスタイルで開発していますが、 ファイルを編集する度に手動でアップロードしなければならないのは死ぬほど苦痛です。

PhpStorm上では、"ファイルに差分が発生したら自動的にアップロード"してくれる機能があるので、そちらを設定しておくと便利です。

f:id:rinrin900:20130918131024p:plain

上記なように、サーバに合わせた形でDeployment Serverを設定しておき、 [Tools]-[Deployment]-[Automatic Upload(always)]にチェックを入れておけばokです。

また、Git上でブランチを移動した際に、ブランチの差分ファイルのみを自動アップロードしてくれる機能もあります。 その際は、以下のように[Tools]-[Deployment]-[Options]から[Upload external changes]にチェックを入れておけば有効になります。

f:id:rinrin900:20130918131436p:plain

Local History

PhpStorm上で編集したファイルを、ファイル毎に時系列で編集履歴を閲覧することが出来ます。 「Gitにコミットしてなかったけど、今朝の時点に戻したい・・・」みたいなときにも便利です。 また、こういう機能があることを知っておくだけでもいざというときの保険になりますので是非押さえておきましょう。

f:id:rinrin900:20130918131728p:plain

リモートデバッグ

EclipseNetbeansなどのIDEと同様、PhpStormでもリモートデバッグが可能です。 面倒な設定がほぼ不要なのと、コードの動的実行が可能な点が他より優れています。

f:id:rinrin900:20130918132216p:plain

リモートデバッグの設定についてはこちらが参考になります。

Zero-configuration Web Application Debugging with Xdebug and PhpStorm

コードの動的実行は、「ブレイクポイントで停止した箇所で任意のPHPコードを実行出来る」機能です。 どんな形式で返ってくるのか試したい関数や、複雑なコードでどういう途中結果が帰ってきてるのか知りたいような場合に便利です。 もちろん、停止箇所で保持している変数を参照して実行することも可能です。

例えば、CakePHPではfind()メソッドでDatabaseから任意のデータを取得出来ますが、「取得条件を変えた時にどんな値が返ってくるのか試したい」みたいなことは多々あります。 そのようなときは、任意の箇所をブレークポイントを貼って止めておき、実行中のプラグラムで

$this->Search->find('all', array(
        'contain'    => false,
        'conditions' => array(
          'Search.created <' => $today
        )
      ));

のような箇所を選択し、[Evaluate Expression]のコマンドを実行すると

f:id:rinrin900:20130918133042p:plain

このような形で実行結果が見れます。

CakeStormのSmartJumpに「水平/垂直タブで開く」機能を追加しました

こんばんは。 早いもので、もう7月も終わりそうです。

最近自転車で500km/月を目標に走りこんでるんですが、5月、6月共に450km弱で未達。 7月から急激に暑くなったので距離もだいぶ落ちるなーとおもいきや、今日時点で既に490kmちょい走ってるのでめでたく達成出来そうです。

暑いの苦手だと思ってたけど、その分の爽快感があるからいいのかも、ってちょっと思ったりしてます。

さて、最近自分でも意外なくらいマメに更新しているCakeStormですが、 自分は割とエディタを分割して使うことが多いので、ファイルを開いていちいち分割したファイルに移動しなきゃいけなかったりがめんどくさかったので、 SmartJumpに「水平/垂直タブで開く」機能をつけてみました。

http://plugins.jetbrains.com/plugin/7277

CakeStormってなに?って方はこちらを。

PhpStormのCakePHPプラグイン、CakeStormを作ってみました http://nanapi.co.jp/blog/2013/07/02/phpstorm-cakestorm/

f:id:rinrin900:20130729154443g:plain

ファイルを開くときに、それぞれ「水平で開く」「垂直で開く」用のSmartJumpから開くことで、エディタを分割して新しいタブでファイルを開いてくれます。

キーマップはそれぞれ

  • SmartJump→Ctrl+; S (既存のまま)
  • 水平で開くSmartJump→Ctrl+; H
  • 垂直で開くSmartJump→Ctrl+; V

VはVertical、HはHorizontalの略で覚えると良いです。 頻繁にエディタ分割をする人には結構役に立つと思います。