CakePHP Advent Calendar 2012 8日目のエントリーです。
昨日は@ootatterさんのCakePHPのacl.phpとacl.ini.phpでした。サンプルコードをgithubに置かれているのですぐに試すことができるのがいいですね。
昨年はNetBeansのプラグインの話を書きました。なんと今年も同じです。以前よりも少しは良くなったんじゃないかとは思うので、追加・改善した点について書きます。
NetBeansと聞いて吐きそうになっている他のエディタ・IDEを使っている方も少しの間だけお付き合いいただけたらと思います。
アンケート
まずは改善された部分からです。
改善点
主に以下のものです。
- New Projectの作成
- プラグインのアップデート
- コード
NewPorjectの作成
データベースさえ用意しておけばすぐに試せるように
- database.phpの作成
- Security文字列の自動生成
- app/tmpディレクトリのパーミッションの変更(777)
- testディレクトリ・webrootディレクトリの設定
を新規プロジェクト作成時に行うようにしました。zipファイルを展開するかgitコマンドを使うか選択して作成することができます。ちなみにgitコマンドでのプロジェクトの作成は、cloneしているわけではなく、init > リモートの追加 > pullというような動作をしています。理由はcloneする前にnbprojectができているので空じゃないじゃんかよと怒られるからです。
DB作って新規プロジェクトからプロジェクトを作成して、ブラウザからアクセスすれば、オールグリーンになってるはずです。
スクリーンキャスト
[youtube]http://www.youtube.com/watch?v=h3g4ld2jzbU[/youtube]
補足:zipファイルを展開する場合は、emptyファイルを除外することもできるように実装はしていますが、Panelには設定を追加していません。設定があった方がいいという方がいれば追加します。
プラグインのアップデート
お気づきの方もいるかもしれませんが、CakePHP NetBeans pluginはNetBeansから直接インストール&アップデートできるようになりました。
最新バージョンは下記からダウンロードすることができます。
- http://plugins.netbeans.org/plugin/44579/php-cakephp-framework
- https://github.com/junichi11/cakephp-netbeans/downloads
さっき直接インストールできるって言ったのに、最新バージョンは下記からと言ったのには訳があって、プラグインポータルに登録すればすぐにNBから直接更新できるようになるのではないからです。手順としては、まず検証をリクエストします。次にプラグインのVerifyerが9人ぐらいいて(実質3,4人ですが)その人達が2人以上GOを出さないと更新できないようになっています。すぐに検証してくれる人もいれば、そうでない人もいるので新しいバージョンが出ていても、更新が来ないのはそのためです。(プラグインポータルにあってNBから直接インストールできないプラグインたちは、作者が検証のリクエストを行なっていません)ちなみに最新版は0.6.15です。12月2日に登録してますが、7日現在まだ検証にパスしていませんヽ(*´∀`)ノ キャッホーイ!!
コード
最初の頃にとりあえず動かそうと思って、2.xでも動作するようにコードを追加していったら、分岐が増えて汚くなってしまったので、最近、機能を追加するときに少し整理しました。
その他(細かな修正)
キャッシュを削除するアクションで今までは、処理が終わっても何も反応しませんでしたが、ステータスバーに通知を表示するようにしました。
以前はコード補完用のファイルを作成する機能をつけていましたが、削除しました。
ctpファイルのアイコンをphpと別のものにしていましたが、エディタツールバーの表示がおかしくなるので、通常のphpファイルと同じものにもどしました。
追加機能
- Install Plugins (
オワコン? - コード補完
- CakePHP用のフォーマットアクション
- go to element
- デバッグレベルの表示&変更
- appディレクトリ名の変更&複数appディレクトリの対応
- デフォルトアセットの検証
Install Plugins
@k1LoWさんが5日目に紹介されていたrecipeのような機能です。名前の付け方のセンスがいいですよねー。
githubのzipファイルを対象として、Urlを設定しておいてインストールしたいものを選択してインストールします。(条件を緩めたので他でもurlの最後がzipだとインストールできるかもしれません)
詳しくはこちらを参照ください。NetBeans CakePHP Plugin (Install Plugins)
Composerで管理できるようになっているので、そちらを使ったほうがいいのかもしれません。(参考:CakePHP Composerを使ってプラグンをインストールする)packagistで検索したら前に検索したときはなかったのですがdebug_kitは登録されていました。Cake3からはComposerに対応するらしく、そのために最近Vendorディレクトリがvendorに変更されましたね。
補足:いつの間にかgithubのアーカイブのurlは変わっています(対応済)。
コード補完(7.2)
今までプラグインや独自のモデルやコンポーネントの補完はドキュメントブロックにタグを書くことで補完できていましたが、その操作なしで補完できるようにしました。通常のコンポーネントやヘルパーはもちろんですが、プラグイン、そしてエイリアスもOKです。エイリアスの場合はちゃんとエイリアスのクラスのメソッドが表示されます。
7.3では、エディタ側の変更があり、只今絶賛例外吐き出し中なので、バグ報告して修正されても今までの挙動と変わってしまうと使えなくなる可能性があります。そのときはどうにかならないか中の人にも聞いてみます。(一度聞いているのですが、返信がないのでとりあえずバグ報告から。。。
追記 12/08 : バグが修正されて補完も動きました。
補足:バグ報告してfixされたようです。次のビルドでちゃんと動くことを確認したら追記もしくはツイートします:)
……きこえますか…きこえますか…とあるbakerです… 今… あなたの…心に…直接… 呼びかけています…他のプラグインをつくっている場合では…ありません…あなたが…追加する…機能は…fuel…yii…ではありません…cakeです…cakeの機能を…追加するのです…behaviorの補完を追加するのです…
というのが聞こえてきそうですが、上記のバグ修正で7.3でも動けばやってみるだけやってみようかと思います;)
CakePHP用のフォーマットアクション
NetBeansのフォーマットの機能を使うと、ドキュメントブロックがメソッドの先頭にあわせてインデントされてしまいます。これだとCakePHPのコーディング規約に反します。さらにWindows環境だと、改行コードがcrlfになってしまうので、別途プラグインをインストールして改行コードを変更する必要があります。
それは面倒だと思ったので
- フォーマット
- ドキュメントブロックのインデント解除
- LF以外の改行コードの変更(強制的にLFへ変更します)
を行うアクションを追加しました。ショートカットを追加しておくと便利かと。フォーマットの設定はNetBeansで設定されている値を使うので、オプションから適切な設定にしてください(参考:NetBeans (CakePHP) フォーマットの設定)。ショートカットを追加しない場合は、エディタ上で右クリック > Format for CakePHP
スクリーンキャスト
[youtube]http://www.youtube.com/watch?v=5BFGzgRKd3A[/youtube]
補足:テストの時にコーディング規約のチェックする前にコーディング時にエディタ上でチェックしておくとより楽になると思います。(参考:NetBeans CakePHP Code Sniffer)
Go to element
Viewファイルの”$this->element(‘hogemoge’);”のhogemogeの部分をCtrlを押しながらクリックしたときに(移動できるときは文字が青に変わります)、もしそのエレメントファイルが存在すればそれを開きます。
補足:キーボードだけで移動できると便利ですがすみませんわかりません。。。メソッドとかクラスであれば、Ctrl + Bで移動できたかと思います。
デバッグレベルの表示&変更
app/Config/core.phpにあるdebugレベルをウィンドウの右下に表示します。(Cakeのアイコンが表示されます。)そこをクリックすると0〜2の値を選択して変更することができます。
複数のプロジェクトを開いている場合はアクティブなファイル(e.g. プロジェクトツリーでアクティブになっているファイル、編集中のファイル)について表示しているので注意してください。
appディレクトリ名の変更&複数appディレクトリの対応
app名の変更に対応できるようにしようと思って、以前から設定できる場所はつくっていたのですが、何も動かない状態でした。
外国の方がapp名を変更したり、複数のappを使っていたりして、動かないと報告がきていたのでそれに対応しました。
既存のソースですでにapp名を変更している場合
まず既存のソースからプロジェクトを新規作成してください。
プロジェクトのプロパティ > フレームワーク > CakePHP のapp Folder nameを変更すればOKです。認識されない場合は、プロジェクトを一度閉じて再度開いてみてください。
プロジェクトツリーからデフォルトのapp名を変更する場合
変更するとプロジェクトプロパティ側も変更されます。webrootの設定エラーが出たら、正しい位置を設定しなおしてください。
複数のappがある環境で使いたい場合
appディレクトリをプロジェクトディレクトリとして新規にプロジェクトを作成してください。それから下記の設定をします。
- app Folder name : myapp(app名)
- use the relative…にチェックを入れる
- CakePHP Directory : ../
複数のappがある場合でも通常のCakePHPのディレクトリ構造と異なると動かないと思うので注意してください。
この場合はコアのファイルがプロジェクトに入っていないので、コード補完が効かなくなります。そのときは、インクルードパスにコアのディレクトリを追加してください。
デフォルトアセットの検証
http://www.isitcake.com いいなー。と思って主にデフォルトのアセットがそのままかどうかを検証するアクションを追加しました。下記のように実行できます。いい名前が浮かばず。。
プロジェクトノード > 右クリック > CakePHP > Verify CakePHP
デフォルトから変更がなければ、defaultと表示します。
その名前のファイルがなければOK:Not Foundと表示します。(ファイル名が変更されていても同じ動きです。)
favicon.icoについては無ければOK:Not Found, 存在して中身がデフォルトと異なるとOK:Changedと表示されます。
NetBeans7.3での対応
7.3からAPIが変更になるので、変更しないといけない部分があるのですが、コード補完の問題以外は対応済みです。(コミット履歴を見るとわかりますが、この対応はオリジナルの作者=中の人が行なってくれました。感謝)
最後に。。。
不具合・要望等があればできるかどうかはわかりませんが、できるだけ対応したいとはおもっていますので、その時はgithubのissue、twitter、コンタクトフォーム等伝わる手段で連絡いただけたらなーと思います。
このエントリーがNetBeansユーザへのクリスマスプレゼントとなれば幸いです。
明日は@hamacoさんです。よろしくおねがいします。
——
おまけ
NBのプラグインを登録して検証されたとき、どういった場合にNOGOがくるかというと、
- アンインストールすると不具合がでて動かなくなる
- jdkのバージョンの違いで動かなかったりする
といった場合です。たとえNB側のバグでもNOGOが来ます。最初に登録した時にapache.commons.langを使っていたのですが、これを使うとアンインストール時にプラグインだけではなく本体から他のファイルも削除されるというのにぶち当たりました。いつ修正されるのかもわからなかったので、それを使っている部分を削除&別のコードに変更して登録しました。(なぜかそういうの引いてしまう。。。)
またNetBeans7系はjdkが1.6と1.7で動くことが期待されているので、nbmファイルを作るときは外部ライブラリも含めて1.6でビルドしておく必要があります。