((<CGIKit|URL:www.spice-of-life.net/download/cgikit/index.html>))というとても便利なCGI作成フレームワークがあります。 通常、RubyでCGI作成となるとcgi.rbを使用しますが、CGIKitというcgi.rbとは独立したフレームワークを使うことで開発効率が大幅に上がります。 しかし、CGIKitでは多数のファイルを同時に扱う必要があります。 テンプレート(*.html)、バインディング(*.ckd)、コード(*.rb)の3つが一体となってひとつのコンポーネントを扱います。 それらは密接に関連しているので同時に編集しないといけません。
そこで、Emacs環境でCGIKitによる開発効率をアップさせるために簡単なEmacsLispでcgikit.elを書きました。
(1) *.elをload-pathの通ったディレクトリへコピーします。 (2) バイトコンパイルします。 (3) .emacsに
(load "cgikit") (load "cgikit-help-ja.el") と書きます。
(4) 短縮名を使いたければさらに.emacsに
(cgikit-invade-global-namespace) を追加します。
まず最初にコンポーネントを格納したディレクトリを開きます。
M-x cgikit-find-directory
短縮名を有効にしているときは、
M-x ckf
でもできます。また、現在のバッファがCGIKitコンポーネント関係のものであれば
C-c C-d
でもできます。
ディレクトリを聞いてくるので、編集したいコンポーネントのディレクトリを指定します。 すると画面が3分割され、次のような構成になります。
+--------------------+ | template | | | +--------------------+ | code | bind | | | | +--------------------+
また、新規コンポーネント作成のときはディレクトリが新たに作られ、初期テンプレートが挿入されます。
3分割状態になると別なコンポーネントを開くことも簡単にできます。
C-c C-f
あるいは
M-x ckc
としてください。 コンポーネント名を補完つきで入力すると、そのコンポーネントにおける3分割状態になります。
3分割状態において、それぞれのウィンドウへジャンプすることができます。 キーバインドはしてありませんので必要な人のみどうぞ。
M-x cgikit-switch-to-html-window M-x cgikit-switch-to-rb-window M-x cgikit-switch-to-ckd-window
テンプレートファイル、バインディングファイルにおいて、カーソル移動及び対応する場所へのリンクをします。 存在しないバインディングは新規作成されます。
バインディングファイル内でM-cを押すとそのエレメントの取りうる属性を表示します。 どの属性を持つのかわからなくなったときに便利です。
同様に、M-hを押すとそのエレメントの説明を表示します。 スペースキーで元の画面に戻ります。
現状のCGIKitコンポーネントは、html/ckd/rbの3つのファイルを同時に扱わないといけません。 一見きれいに分離されていてよさげにも見えますが、CGIKitコンポーネントを実際に開発したり解読したりするときかなりつらいものがあります。 というのは、ひとつのエレメントに関する情報が分散しているからだと考えています。 あるエレメントの情報を見たいときに、いちいちrbとckdの対応する場所にカーソルを持っていき、視線をその場所に移すのがかなりストレスになります、少なくとも俺は。
この問題を解決するために、ckdをrbに埋め込み、rbをセーブすると同時にckdを自動生成することを考えました。 これにより、
一見ごちゃごちゃしていそうですが、幸いEmacsにはfont-lockでソースコードに色をつけてくれるおかげで埋め込みckdとコードは((*はっきりと区別*))できます。
((<RD|URL:www.rubyist.net/~rubikitch/computer/rd-intro/>))のようにRubyスクリプト中で
=begin
から
=end
までの部分が無視されることを利用します。
埋め込みckdは
=begin ckd
から(ckdは小文字)始まり
=end
で終わります。
例をあげてみましょう。こんな感じになります。 ここでは色がつかなくて見辛いですが、実際は色がつきます。
=begin ckd name : CKString { value = name; } =end attr_accessor :name =begin ckd comment : CKString { value = comment; escape=false; } =end def comment display_comment @comment end
埋め込みckdを有効にするには、
(setq cgikit-embedded-ckd t)
を.emacsに書きます。
また、デフォルトでは埋め込みckdを有効にしているが、特定のコンポーネントでは無効にしたい場合、そのコンポーネントの((*rbファイルの*))最下部に
# Local Variables: # cgikit-embedded-ckd: nil # End:
と書いてください。
逆に、デフォルトで無効にしているが、特定のコンポーネントで有効にしたい場合は
# Local Variables: # cgikit-embedded-ckd: t # End:
と書いてください。
ファイルを開いたときの画面構成は cgikit-find-files-1 関数に定義されていますが、別な画面構成がいいという人は新たに関数を書いて(ex. my-cgikit-find-files)、cgikit-find-files-function変数にその関数シンボルを指定してください。
:[2003/11/04]Ver 0.2.1
* CGIKit-1.1.0から標準添付になりました。ありがとうございます。 * ヘルプをcgikit-1.1.0対応
:[2003/10/30]Ver 0.2.0
* ((<埋め込みckd>)) * ((<エレメント・バインディング間の移動・リンク>))の挙動にバグがあったのを修正。 * C-c C-f, C-c C-dをバインド。