第4回 Gaucheでテンプレートエンジンを作る
吉田 裕美
有限会社イーワイオフィス
2009/2/19
Lispの一種であるScheme。いくつかある処理系の中でも気軽にスクリプトを書けるGaucheでLispの世界を体験してみよう(編集部)
- - PR -
前回「GaucheでRDBプログラミング」に続き、Webプログラミングです。WebアプリケーションやGUIアプリケーションのように、人との対話があるアプリケーションは一般にMVCを採用しています。
MVCとは、計算やデータ処理部分のモデル、表示部分のビュー、全体の流れを制御する部分のコントローラにモジュールを分割して作る技法です。
MVCを採用すると、変更に強いメンテナンス性の高いソフトウェアになるといわれています。実際に、多数のWebアプリケーションフレームワークがMVCを採用しています。
前回のRDBプログラミングはモデル部分の中心になるものでしたが、今回はビューの部分を作っていきましょう。
HTMLの生成
Webアプリケーションでは、Webブラウザからのリクエストに対し、サーバ側でHTMLを組み立ててWebブラウザに戻します。HTMLは、開始タグ、内容、終了タグという要素の集まりで、さらに内容の部分に要素を書くことができる再帰的な構造をしています。
例えば、この連載の第2回「Gaucheでプログラミング」で書いた、何曜日かを表示するCGIが作るHTMLは以下のようになっています。
<html> |
このような再帰的な構造は、下のようにS式で表すことができます。S式では、1つの要素をリストで表すので終了タグは不要になります。
(html |
Gaucheには、text.html-liteというモジュールがあり、上に書いたようなS式で簡単にHTMLを扱えます。連載の第2回で書いた何曜日かを表示するCGIをtext.html-liteを使って書くと以下のようになります。
#!/usr/local/bin/gosh |
テンプレートエンジンを作ってみる
S式によるHTML表記は、Lispプログラマには支持されますが、デザイナーが作ったHTMLを基にView部分を作るためには、HTMLからS式に変換する手間が掛かります。
そこでJavaのJSPやRubyのERBのような、HTMLに少し手を入れるだけでView部分が作れるようなテンプレートエンジンを作ってみることにします。
テンプレートエンジンの仕組み
以下のテンプレートは0、30、45、60、90度のsinの値をTABLEで表示するものです。
<html><body> |
JSPと同様に、<% 〜 %>の〜にはGaucheのコードが書かれ、実行されます。また、<%= 〜 %>は〜を実行した値に置き換えられます。
JSPは、Javaに変換され、コンパイルされ実行されますが(詳しくは、@ITのJSPの記事を調べてみてください)、ここでも同じようにテンプレートをGaucheのプログラムに変換し実行することにします。変換されたGaucheのプログラムは、以下のようになります。
(begin |
テンプレートの変換のルールは、
- HTMLの部分は文字列として、display関数で出力されます
- <% 〜 %>の内部はそのままプログラムになります
- <%= 〜 %>は〜の値を出力するので(display 〜)になります
というものです。
1/2 |
| Index | |
| Gaucheでテンプレートエンジンを作る | |
| Page1 HTMLの生成 テンプレートエンジンを作ってみる テンプレートエンジンの仕組み |
|
| Page2 テンプレートエンジンのプログラム |
|
| Gaucheでメタプログラミング |
| Coding Edgeお勧め記事 |
| いまさらアルゴリズムを学ぶ意味 コーディングに役立つ! アルゴリズムの基本(1) コンピュータに「3の倍数と3の付く数字」を判断させるにはどうしたらいいか。発想力を鍛えよう |
|
| Zope 3の魅力に迫る Zope 3とは何ぞや?(1) Pythonで書かれたWebアプリケーションフレームワーク「Zope 3」。ほかのソフトウェアとは一体何が違っているのか? |
|
| 貧弱環境プログラミングのススメ 柴田 淳のコーディング天国 高性能なIT機器に囲まれた環境でコンピュータの動作原理に触れることは可能だろうか。貧弱なPC上にビットマップの直線をどうやって引く? |
|
| Haskellプログラミングの楽しみ方 のんびりHaskell(1) 関数型言語に分類されるHaskell。C言語などの手続き型言語とまったく異なるプログラミングの世界に踏み出してみよう |
|
| ちょっと変わったLisp入門 Gaucheでメタプログラミング(1) Lispの一種であるScheme。いくつかある処理系の中でも気軽にスクリプトを書けるGaucheでLispの世界を体験してみよう |
|
TechTargetジャパン
- 実例で学ぶRailsアプリのテスト方法 (2011/12/22)
具体的なWebアプリを例に簡単なテストを使ったリファクタリングについ
て解説する - Railsの人気テストフレームワーク6選! (2011/8/18)
今回からテストを使ったリファクタリングを解説する。まずはRailsで人
気のあるテストフレームワークをいくつか紹介する - ActiveRecordの更新系操作 (2011/6/27)
Railsのモデル層を担当するActiveRecordを使った登録、更新、削除
など、更新系の機能を中心に見ていきます - 実例アプリで学ぶ“Railsらしさ”の基礎 (2011/5/26)
Ruby on Railsで書かれた実例アプリを取り上げて、初心者が陥りがちなコードの書き方を指摘します。より「Railsらしい」コードとは?
|
|

