[トップ] [更新履歴] [著書] [コンピュータ] [ゲーム] [CGI配布]


Title: cgikit.el

Index


CGIKitというとても便利なCGI作成フレームワークがあります。 通常、RubyでCGI作成となるとcgi.rbを使用しますが、CGIKitというcgi.rbとは独立したフレームワークを使うことで開発効率が大幅に上がります。 しかし、CGIKitでは多数のファイルを同時に扱う必要があります。 テンプレート(*.html)、バインディング(*.ckd)、コード(*.rb)の3つが一体となってひとつのコンポーネントを扱います。 それらは密接に関連しているので同時に編集しないといけません。

そこで、Emacs環境でCGIKitによる開発効率をアップさせるために簡単なEmacsLispでcgikit.elを書きました。

1 機能

2 インストール

  1. *.elをload-pathの通ったディレクトリへコピーします。
  2. バイトコンパイルします。
  3. .emacsに

    (load "cgikit")
    (load "cgikit-help-ja.el")

    と書きます。

  4. 短縮名を使いたければさらに.emacsに

    (cgikit-invade-global-namespace)

    を追加します。

3 使い方

3.1 まず最初にコンポーネントディレクトリを開く

まず最初にコンポーネントを格納したディレクトリを開きます。

M-x cgikit-find-directory

短縮名を有効にしているときは、

M-x ckf

でもできます。また、現在のバッファがCGIKitコンポーネント関係のものであれば

C-c C-d

でもできます。

ディレクトリを聞いてくるので、編集したいコンポーネントのディレクトリを指定します。 すると画面が3分割され、次のような構成になります。

+--------------------+
|    template        |
|                    |
+--------------------+
| code       | bind  |
|            |       |
+--------------------+

また、新規コンポーネント作成のときはディレクトリが新たに作られ、初期テンプレートが挿入されます。

3.2 別なコンポーネントディレクトリを開く

3分割状態になると別なコンポーネントを開くことも簡単にできます。

C-c C-f

あるいは

M-x ckc

としてください。 コンポーネント名を補完つきで入力すると、そのコンポーネントにおける3分割状態になります。

3.3 コンポーネント関連のウィンドウへジャンプ

3分割状態において、それぞれのウィンドウへジャンプすることができます。 キーバインドはしてありませんので必要な人のみどうぞ。

M-x cgikit-switch-to-html-window
M-x cgikit-switch-to-rb-window
M-x cgikit-switch-to-ckd-window

3.4 エレメント・バインディング間の移動・リンク

テンプレートファイル、バインディングファイルにおいて、カーソル移動及び対応する場所へのリンクをします。 存在しないバインディングは新規作成されます。

3.5 ヘルプ機能

3.5.1 エレメントが持つ属性を表示

バインディングファイル内でM-cを押すとそのエレメントの取りうる属性を表示します。 どの属性を持つのかわからなくなったときに便利です。

3.5.2 エレメントの説明を表示

同様に、M-hを押すとそのエレメントの説明を表示します。 スペースキーで元の画面に戻ります。

3.6 埋め込みckd

現状のCGIKitコンポーネントは、html/ckd/rbの3つのファイルを同時に扱わないといけません。 一見きれいに分離されていてよさげにも見えますが、CGIKitコンポーネントを実際に開発したり解読したりするときかなりつらいものがあります。 というのは、ひとつのエレメントに関する情報が分散しているからだと考えています。 あるエレメントの情報を見たいときに、いちいちrbとckdの対応する場所にカーソルを持っていき、視線をその場所に移すのがかなりストレスになります、少なくとも俺は。

この問題を解決するために、ckdをrbに埋め込み、rbをセーブすると同時にckdを自動生成することを考えました。 これにより、

一見ごちゃごちゃしていそうですが、幸いEmacsにはfont-lockでソースコードに色をつけてくれるおかげで埋め込みckdとコードははっきりと区別できます。

3.6.1 書き方

RDのように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

3.6.2 設定

埋め込みckdを有効にするには、

(setq cgikit-embedded-ckd t)

を.emacsに書きます。

また、デフォルトでは埋め込みckdを有効にしているが、特定のコンポーネントでは無効にしたい場合、そのコンポーネントのrbファイルの最下部に

# Local Variables:
# cgikit-embedded-ckd: nil
# End:

と書いてください。

逆に、デフォルトで無効にしているが、特定のコンポーネントで有効にしたい場合は

# Local Variables:
# cgikit-embedded-ckd: t
# End:

と書いてください。

4 カスタマイズ

4.1 画面構成の変更

ファイルを開いたときの画面構成は cgikit-find-files-1 関数に定義されていますが、別な画面構成がいいという人は新たに関数を書いて(ex. my-cgikit-find-files)、cgikit-find-files-function変数にその関数シンボルを指定してください。

5 History

[2003/11/04]Ver 0.2.1
[2003/10/30]Ver 0.2.0

戻る ホームページへ戻る

Valid XHTML 1.0!
rubikitch(rubikitch@ruby-lang.org)

投書箱:コメントや伝えたい情報などがあればお気軽にどうぞ
名前 メール [説明]
URL
本文