PhpStormとCodeIgniterを利用している場合、「PhpStormでautocompleteを有効にする方法(CodeIgniter3利用時)」の方法で、autocompleteを有効にできた。これで多少コーディングがはかどる。
だがこのところ、書きたいコードのアイデアに溢れているが、キーボードを打つ指さばきが(肉体的に)衰え、全盛期のようなスピードでコードが書けない。(ホントはアイデアも無い。)
また、何度も同じことをすることが苦手になってしまった。

ふと、何が面倒くさいのだろうなと考えてみたが、CodeIgniterでは$this->をたくさん記述する。


public function create()
{
    $this->load->helper('form');
    $this->load->library('form_validation');

    $data['title'] = 'Create a news item';

    $this->form_validation->set_rules('title', 'Title', 'required');
    $this->form_validation->set_rules('text', 'Text', 'required');

    if ($this->form_validation->run() === FALSE)
    {
        $this->load->view('templates/header', $data);
        $this->load->view('news/create');
        $this->load->view('templates/footer');

    }
    else
    {
        $this->news_model->set_news();
        $this->load->view('news/success');
    }
}

$this->だらけだ。$this->をタイプするにはShiftキーを押しながらのタイプも含まれ、自分には、なかなかのタイピングコストだ。IMEに辞書登録するのも1つの手ではあるが、高機能なPhpStormであれば、何かあるのではないかと調べてみた。

PhpStormのLiveTemplates機能

PhpStormには、LiveTemplatesという入力補助機能がある。

forek を入力して、Command(CTRL)+Jすると、


foreach(  as  =>  ){
            
}

に変換してくれる。素晴らしい省力化である。
この機能にカスタムなキーワードを追加できないかと思ったら、Fileメニュー / settings / Editor / LiveTemplatesでの設定画面からカスタマイズできることがわかった。

例えば、sessionと入力すると


$this->session->

と補完してくれると便利だ。

PhpStormのLive Templatesの管理画面から追加することができる。
phpstorm livetemplates setting

手順としては次の通り。

1.右上の「+」ボタンでTemplatesグループを追加する。
2.追加したTemplatesグループを選択し、再び右上の「+」ボタンでLive Templateを追加する。
3.設定中に次のテキストを入れる。

Abbreviation:短縮名 補完する際に入力する省略名。ココではsession.
Description:説明文 なんでも良いが、Command(CTRL)+J の際に表示される説明文。
Template text:補完後の文字列。

ここでTemplate text には


$this->session->$MEMBER$$END$

と入っているが、$END$は補完後のカーソル位置を示す予約後。$MEMBER$は自分で定義した変数で、Edit variablesボタンでどんな変数か定義することができる。Edit variablesを有効にするには、次の赤枠の部分、Applicable 「Change」の部分を押して、どの言語で有効なLiveTemplatesか指定する。この場合は、PHP・PHP Commentを選択した。

phpstorm livetemplate setting changesitu waku

Edit variablesでのダイアログでは、先ほど定義したMEMBER変数の挙動を定義する。
ここでは、Expressionにcomplete()を選択したが、これはLiveTemplatesの補完後にさらにcode completion を呼び出してくれるようだ。
phpstorm livetemplates setting edit variable

 参考:PhpStorm 9.0.0 Help Live Templates

PhpStormでsessなど、snippetの一部の入力+Command(CTRL)+Spaceで補完が始まる。
phpstorm_codeigniter3_livetemplate

Command(CTRL)+JでもOKだ。
phpstorm_codeigniter3_livetemplate_ctrlj

補完完了すると、sessionのメンバがsuggestされる!
phpstorm_codeigniter3_livetemplate_complete

これはとても省力化だ!

このLiveTemplatesに$this->でよくアクセスするメンバを記載しておけば大変便利だ。
というわけで、次のsnippetを登録してみた。

snippet expand
t $this->
configitem $this->config->item("configname")
view $this->load->view("name")
library $this->load->library("name")
helper $this->load->helper("name")
model $this->load->model("name")
database $this->load->database()
benchmark $this->benchmark->
config $this->config->
controller $this->controller->
hooks $this->hooks->
input $this->input->
lang $this->lang->
load $this->load->
log $this->log->
output $this->output->
router $this->router->
security $this->security->
uri $this->uri->
db $this->db->
dbforge $this->dbforge->
dbutil $this->dbutil->
calendar $this->calendar->
email $this->email->
encrypt $this->encrypt->
encryption $this->encryption->
form_validation $this->form_validation->
ftp $this->ftp->
image_lib $this->image_lib->
migration $this->migration->
pagination $this->pagination->
parser $this->parser->
table $this->table->
trackback $this->trackback->
typography $this->typography->
unit_test $this->unit_test->
upload $this->upload->
agent $this->agent->
xmlrpc $this->xmlrpc->
xmlrpcs $this->xmlrpcs->
zip $this->zip->
cache $this->cache->
session $this->session->

※ t で $this-> となる超省略形も追加してみた。
個人的なお気に入りは t,db,sessionである。

また、これらの定義を追加するのは手間なので、次のGitHubに定義を公開中。
PhpStorm Live Template for CodeIgniter ver.3 (maybe work on ver.2)

PhpStormのLiveTemplatesの定義XMLファイルは次のフォルダに格納されているので、ここにXMLを保存すれば良い。

Windows: <your home directory>.<product name><version number>\config\templates
Linux: ~/.<product name><version number>/config/templates
OS X: ~/Library/Preferences/<product name><version number>/templates

ex.) Windows
C:\Users\ussername\.WebIde90\config\templates\CodeIgniter.xml

CodeIgniterのform_validationルール

CodeIgniterの$thisメンバを補完するLiveTemplateで記述し始めると、さらに欲が出てくるというもの。


$this->form_validation->set_rules( 'yname', 'Your name','required|max_length[1]|numeric');
 

form_validationルールを記載する場合、このruleを記憶していないため、毎回CodeIgniterリファレンスにお世話になる。

Docs » Libraries » Form Validation
Rule Reference

Docs » ライブラリ » フォームバリデーション(検証)
ルールリファレンス

だが簡単なルールであれば、PhpStormがSuggestしてくれるとうれしい。
というわけで、ここでも有効なLiveTemplatesを作成。
今回は、一覧表示されたほうが便利なので、「rule」とタイプするとForm Validation Ruleが表示されるようにしてみた。
phpstorm_livetemplate_codeigniter_validation_rule

定義したルールは次の通り。

snippet expand
rule-required required
rule-alpha alpha
rule-alpha_numeric alpha_numeric
rule-alpha_numeric_spaces alpha_numeric_spaces
rule-alpha_dash alpha_dash
rule-numeric numeric
rule-integer integer
rule-decimal decimal
rule-is_natural is_natural
rule-is_natural_no_zero is_natural_no_zero
rule-valid_url valid_url
rule-valid_email valid_email
rule-valid_emails valid_emails
rule-valid_ip valid_ip
rule-valid_base64 valid_base64
rule-matches matches[form_item]
rule-regex_match regex_match[/regex/]
rule-differs differs[form_item]
rule-is_unique is_unique[table.field]
rule-min_length min_length[3]
rule-max_length max_length[12]
rule-exact_length exact_length[8]
rule-greater_than greater_than[8]
rule-greater_than_equal_to greater_than_equal_to[8]
rule-less_than less_than[8]
rule-less_than_equal_to less_than_equal_to[8]
rule-in_list in_list[red,blue,green]
rule-trim trim
rule-htmlspecialchars htmlspecialchars
rule-urldecode urldecode

これらの定義もGitHubで公開中。
PhpStorm Live Template for CodeIgniter ver.3 (maybe work on ver.2)

このように、自分で定義したmodelやlibraryもLive Templatesに定義すれば、きっと256倍楽しくコードを書くことができるに違いない。