NetBeansサイド
FuelBeans 13 : ファイルとコードのテンプレート
入力をできるだけ減らす。うっかりミスを無くす。そのために既存のコードを使いまわしましょう。
一度書いたコードはあなたの資産です。昔も今も、機能を試すためにテストコードを書くのは有効な手段です。昔は、そして理解した内容、記憶(プリントアウトを含む)を基にコードを書きましたが、現在、書いたコードはそのまま気軽に使いまわせます。
小さなコードの断片、スニペットはあなたの資産です。ですが、ただコピペしたり、エディターで取り込むだけでは、芸がありません。
NetBeansはここらへんの芸が細かいIDEになっています。
今回のチュートリアルのネタ元は、次の二つの記事です。
NetBeans ファイルテンプレートモジュールのチュートリアル
この2つをお読みになり、理解できる方は以下はお読みになる必要はありません。多分に、開発元で書かれている方が、私のようなユーザーの書いていることより、正確でしょう。ご自身で活用ください。
いわゆるひな形のことです。ワープロでも表計算でも、既存の書類を元に、新規で作成するときに、ひな形として利用できる機能が付いています。それがNetBeansにも備わっています。
まずは、改めて、新しいPHPファイルを作成してみましょう。Controller下に適当な名前で新規PHPファイルを作成してください。すると…
<?php
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
?>
コメントの英文は、このテンプレートを変更したければ、ツール→テンプレートでこのテンプレートを編集しろ、と言っています。では、お言葉に甘え、テンプレートウィンドウを開いてください。
カテゴリーごとにフォルダーにわかれています。PHPのフォルーダを開き、PHPファイルを選択、下のエディターボタンで見てみましょう。
上部、コメントの部分がごちゃごちゃしていますね。ライセンス関係の設定をしておくと、ここに指定した文面が自動的に入るようになっています。ライセンス関係ない?では、ご自由に変更してください。多分、多くの方には、次の形式が使いやすいでしょう。(ライセンス関係の文章を入れたければ、一番お手軽な方法はテンプレートマネージャーを開き、ライセンスフォルダーの下にある、デフォルトを編集する方法です。)
1 <?php
2
3 /*
4 *
5 */
6
まっさらなコメント、最後の?>を取り去った形です。多くのフレームワークでは最後の?>を付けないことを推奨しています。ある環境では、つけていると条件次第で何も出力されないことがあり、原因がわかりづらいからです。(私は経験したことがないので、現在もこれが起きるのかわかりません。)
まあ、これが基本です。新規で新しいテンプレートを一から書くことも出来ますし、複製で増やすことも出来ます。
しかし、これで終わっては能がありません。もうひと工夫しましょう。
FuelPHP用のテンプレートを作成しましょう。
まず、PHPのフォルダー下に、新規フォルダーを作ります。続いて名前を変更します。FuelPHPにしましょう。フォルダーなのに「テンプレートの…」と表示されていますが、細かいバグは気にせず、入力項目両方共にFuelPHPと指定してください。
これでFuelPHPフォルダーが作成されました。この下にFuelPHP用のファイルテンプレートを作成しましょう。追加は既存のコードをテンプレートにするボタンです。現在、元になるコードはありませんので、使いません。
今回は他のテンプレートを複製し、名前を変更しましょう。「PHP ファイル」を複製し、名前を変更します。テンプレートの表示名が新規作成のメニューで表示される項目名です。ここには「FuelPHP コントローラー」と入れてください。テンプレートのファイル名は新規作成するときにデフォルトで入力されるファイル名です。わかりやすく、FuelPhpControllerとでもしてください。最後に了解をクリックし、変更を反映させます。
続いて、コードを書き換えましょう。FuelPHP コントローラーを選択し、エディタで開くをクリックします。次のコードを入力してください。
<?php
/*
*
*/
class Controller_${name?capitalize} extends Controller {
function action_index() {
}
public function before()
{
return parent::before();
}
public function after($response)
{
return parent::after($response);
}
}
エラーが出ます。クラスの定義の所で本来のPHPではないコードが入っているからです。気にせず、保存してください。
前回のチュートリアルで、Controller_Templateクラスのコードを見てもらいました。コントローラでは、before()、after()関数をコンストラクター、デコントラクターの代わりに利用するんでした。その時の肝となるポイントが、親をそのままreturnで返してあげることです。これを忘れないように、テンプレートに入れておきましょう。使わなければ、削除すればいいのです。
では、実際に今作成したテンプレートを使ってみましょう。controllerかどこか適当なフォルダーで右クリック、新規にカーソルを合わせます。
今作成したFuelPHP コントローラは表示されていません。この新規では、使用された順番に上から表示される為です。作成したてのテンプレートは表示されていません。一番下の、その他を選んでください。
カテゴリでPHPを選んでもFuelPHP コントローラは見当たりません。カテゴリのPHPをダブルクリックで開いてください。階層構造で、下にFuelPHPが見当たります。
テンプレートの設定時に作成したフォルダーの階層は、このカテゴリの階層になります。
FuelPHPカテゴリを選択すると、今作成したFulePHP コントローラーテンプレートが表示されます。選択し、次へをクリックします。
すると次のページではファイル名がnewFuelPhpControllerになっています。テンプレートの名前を変更するときにテンプレートのファイル名として、FuelPhpControllerと付けましたが、その名前の前にnewを付けたものが、ここに表示されます。
ファイル名を変更し(全部小文字ですよ)、完了ボタンを押してください。どうでしょう?同じ内容で作成されたでしょうか?
ここで注目はクラス名です。ファイル名の先頭の一文字を大文字にしたものがクラス名に自動的にセットされているはずです。(実は、これを実現する方法を探すために数時間費やしました)
残念ながら、フォルダーの階層には対応していません。つまり、例えばcontrollerの下にincludeフォルダー、その下にheader.phpファイルをこのテンプレートで作成する場合、クラス名は、Controller_Include_Headerが正しいのですが、そうはならず、Controller_Headerになります。あくまでもファイルの名前の先頭が大文字になるだけです。(Javaで組めば実現できそうですが、そこまでやっても使ってくれる人少ないでしょうから、見送ります。)
Controllerの下にフォルダーを使用したい方では、テンプレートにコメントで、// フォルダーの階層はクラス名に完全に反映されない、とか注意喚起を促すようにしておくほうがいいかも知れません。
これで、ファイルテンプレートは自由に作成できると思います。
実際、コーディングするにはこちらのほうがお役に立つでしょう。いわゆるスニペットの挿入機能です。
ですが、曲者NetBeans、ただ挿入するだけではありません。色々と出来るんです。
PHP使いであれば、最初に利用するのは、これから紹介するコードテンプレートです。(テンプレートエンジンを利用する方は、使わないかも知れません。)
HTMLの中で、<?php ?>を記述する機会は多いと思います。(テンプレートエンジン使いは、少ないかも知れません。)(しつこいので、もう書きません。:D )
まず、これを解決しましょう。
NetBeansのコードテンプレートはコードに短い名前を付け、それをカーソル位置で展開する機能です。
今回はphpという名前をつけます。つまり、キーボードからphpと叩き、展開するためのキー(選べます)を続いて叩くと、<?php ?>と展開されるようにします。
まず、コードテンプレートの設定を行えるようにしましょう。ツール→オプション→エディター→コードテンプレートで設定ウィンドウを開きます。
まず言語です。これが間違いやすいのです。ここで指定する言語とは、挿入するカーソルの位置が、どのコンテキスト(文脈)にあるときに適用されるかです。難しいですか?例で考えれば簡単です。
<?php から ?>までの間はPHPのコードです。ですから、PHPのコンテキストです。<html>から</html>までの間はhtmlのコードです。ですから、HTMLのコンテキストです。
今回の<?php ?>を入力するのはHTMLの文脈ですから、HTMLを言語に指定します。
すると、その下の展開されるテキストとか、説明と書かれているところには、何も表示されません。何も登録されていないからです。
早速登録してみましょう。新規ボタンをクリックです。
続いて省略名を入力します。今回はphpです。(省略名の変更はできません。気に入らない場合は一度削除し、登録し直すことになります。)
すると、展開されるテキストにキャロット(カーソル)が表示されます。ここで展開されるソースを指定します。<?php ?>と入力しましょう。済んだら了解ボタンをクリックです。
テンプレートを展開では4種類の組み合わせが選べます。一般的に入力補完に使用されるキーはTABが多いようですので、このあとTABキーを前提で、話を続けますが、もちろん、自分にあったものを選んでくださいね。
では、試してみましょう。適当なフォルダーに新規でHTML ファイルを作成しましょう。
<html>と</html>の間、適当な場所で、phpとタイプし、続いてTABキーを押します。phpは続けてタイプする必要があります。phだけうち、他の場所へカーソル移動、その後hの後ろにpを入れ、タブを押しても展開されません。短縮名は一度に入力される必要があります。
きちんと展開されたと思います。これはこれで便利です。他のIDEやエディターでもこのレベルであれば、サポートしているものはたくさんあります。ここからがNetBeansの真骨頂です。再度、今登録したコードテンプレートの設定に戻りましょう。言語はHTML、省略名はphpを選びます。
コードを<?php ${cursor} ?>に変更してください。了解を押し、再びphpに続きTABを押します。すると前回と動きが異なります。気が付きましたか?
最初は展開後、カーソルは<?php ?>の後ろにありました。現在のバージョンはカーソルが<?phpと?>の間にあります。つまり展開後、カーソル移動なしに、続けて入力できるわけです。便利ですね。
更に改良します。今度は展開されるコードを次のようにしてください。<?php ${cursor}${selection} ?>
では次にbodyのタグ間、適当な位置に<div>echo $title;</div>と打ち込んでください。
よくやる間違いです。<?php ?>で囲むのを忘れて、phpコードを打ち込んでしまった状況です。では、echo $title;を選択状態にしてください。ちょっと待つと、このコードの行番号に電球のマークが付きます。では、それをクリックしてください。
すると「囲む <?php|selection?>」という項目があるはずです。それを選択して下さい。
はい。見事に<?phpと?>に囲まれました。ちなみに、この選択範囲に対するコード補完を表示するショートカットは、デフォルトでALT+Enterです。
このように便利なphp短縮名が出来ましたが、これには欠点があります。<html>と</html>で囲まれていない場合、使用できないのです。例えば、ビューを分割する場合、分割されたビューには、<html></html>がありません。その様な状況では使用できません。賢すぎるのも、良し悪しですね。(実際はhtmlタグを一つでも記述すると、htmlコンテキストだと判断されるようです。そのタグで囲まれた中であろうと、外であろうと。)
では別の例を見てみましょう。今度はPHPの文脈で働くコードテンプレートの例です。
DBのSELECTをFuelPHPのクラスを用いて行うコードです。私はDB関連の短縮名には先頭にdbをつけ、そのあとは命令の頭三文字を付けています。ですから今回は、dbselにしました。皆さんはご自身でネーミングを考えてくださいね。
実際のコードはこうなります。
$result =
DB::select('${フィールド}', array('フィールド', 'エイリアス'))
->from('${table}')
->join('pictures', 'RIGHT OUTER')
->on('users.id', '=', 'profiles.user_id')
->where_open()
->where('id', '=', 1)
->and_where('id', 'in', array(1,2,3))
->where_close()
->or_where_open()
->where('id', 'between', array(1, 10))
->or_where('name', 'like', 'joe')
->or_where_close()
->order_by('name','asc')
->order_by('surname', 'desc')
->group_by('genre', 'category')
->having('name', '!=', 'John')
->and_having('surname', '=', 'Doe')
->limit(10)
->offset(5)
->distinct(true)
->as_object()
->execute();
関数をほとんど使用しています。どんなものがあるか、どう使うかをドキュメントを確認しなくても利用できるように、色々詰め込んでいます。使い方のサンプルになっています。
関数はSELECT文のパラーメータ名そのものです。
では、試しに登録して、展開してみましょう。
展開後、フィールドにカーソルが入っていると思います。ここはSELECTする項目を指定します。シングルコーテーションで区切り、指定します。配列は項目とその項目の別名を指定するときに利用します。
まず、フィールドを指定することがあるでしょうから、フィールドを入力できるようにしました。${名前}はその場所をユーザーに指定してもらうために利用します。
つぎに、タブを押すと、from()の中、テーブル名の指定場所に移動します。テーブル名は必須ですから、こうして指定させます。
この入力の補助状態はEnterキーを押すか、どこかで編集を始めると終了になります。
別の例を見ましょう。Formクラスのinput関数です。htmlのinputを生成します。言語はPHP、短縮名を決めて、コードを指定してください。
echo Form::input('${フィールド名}', Input::post('${フィールド名}') ? : '', array('size' => ${size}))
実際に使用してみましょう。最初のフィールド名にカーソルがフォーカスされています。フィールド名をタイプするたび、その後にある同じ名前の個所に、タイプした内容がコピーされていくのを確認してください。
このように、同じ値を指定する必要がある場所には、同じ${'名前'}を指定します。
もっと複雑なことも出来ますが、それを覚えてどうにかしようとすると、時間がかかりすぎ、手軽に利用できなくなります。コードの補完をお手軽にやるには、この程度で使用するのが良いと思います。
私が利用している、テンプレートをGithubで公開しています。前にテストしたときには、上手くいったのですが、今ためしてみると上手く取り込めないようですので、余計な物を入れないで、単純にコードテンプレートをインストールできるzipをこちらで配布しています。
オプションウィンドウの下側、インポートで取り込んでください。
ただし、あなたと同じ短縮名のものがあった場合、上書きしてしまいます。自分で、コードテンプレートを活用されている方は、Githubのページをご覧ください。READMEの内容が表示されており、そこに登録してある短縮名と、コードが一覧できるようになっています。必要なものだけ、取り込むことができます。
但し、公開していますが、全部を試しているわけではありません。つまり、何かのついでに、登録したが、まだ実際に使用していないものが半分あります。ご自身で、適宜修正してお使いください。
実はNetBeansにはまだまだ補完の機能があります。
HTMLでタグを入力するのでしたら、パレットウィンドウを利用できます。パレットのアイコンををコードの挿入したい場所にD&Dします。すると、必要に応じで、ウィンドウが開き、そこに値を入力し、その値に基づいて、コードを生成してくれます。
また、ALT+Insertキーでその状況に応じたコードをインサートすることができます。FuelPHPを利用せず、生のPHPを利用するのでしたら、試してもらいたい機能として、DBを表示するテーブルのコードを生成してくれるものがあります。
テーブルと、表示する項目を指定すると、コードが生成されます。
NetBeansはJavaで組まれておりますが、こうした補助機能はJavaで構築されており、自分で作成することも出来ます。NetBeans自体が、Javaのフレームワークになっているのです。
ただ、FuelPHPを利用する限り、こうした補完は余り必要にならないでしょう。ですから、参考までに覚えておく程度で良いでしょう。
| FuelBeans 11 あなたが合わせるのでなく、ショートカットを合わせよう< 前 | 次 >FuelBeans 15 : デバッガーを使いこなす |
|---|
| < 前 | 次 > |
|---|