TOP>>概略>>WALRUSとは何か <概略>ツアーOBAQ構成定義アプリケーションサーバリファレンスサイトマップ

WALRUSとは


WALRUSとは何か

WALRUSとはRuby言語をベースにしたWEBアプリケーションサーバです。 次のような用途に適しています。

  • WEBアプリケーションの開発
  • このマニュアルのような複雑な構造を持った文書の作成
  • ニュースサイトのように更新が多いサイトのメンテナンス

動的なHTMLコンテンツを部品化して管理することができます。

バッチモードとオンラインモード

WALRUSにはふたつのモードがあります。

  • バッチモード

    単体で静的なドキュメントを生成する時に使用します。

  • オンラインモード

    apache(+mod_ruby)と共に動作して、動的なWEBコンテンツをサービスする時に使用します。

最初はバッチモードで使用し、慣れてきたらオンラインモードに移行することができます。 ほとんどのコンテンツは、両方で同じように使用することができます。

また、WEBアプリケーションの開発においては、 バッチモードを利用して、簡単にテストを行なうことができます。

WALRUSの特色

  • HTMLテンプレートの展開

    CGIのプログラムでは、言語によらずHTML文書を生成するための複雑な文字列処理が必要となります。 PHPやJSP等の埋めこみ型の言語を使用すれば、多少楽になりますが、 HTML文書の静的な部分と動的な部分がひとつのファイルに混在して、非常にメンテナンスしにくいプログラムとなりがちです。

    WALRUSでは、できあがる画面(HTML文書)の見栄えとその中にプログラムで挿入する内容を全く別々に記述できます。 また、前者(HTMLテンプレート)は特殊なタグを使用しない、普通のHTMLファイルで既存のHTMLエディタで編集できます。

  • 環境獲得による容易な更新

    このページをこのマニュアルの別の位置に移動したとしましょう。 本文は同じですが、上部のナビゲーションバーや右のコンテンツリストなどは修正が必要になります。 プログラムで生成することも可能ですが、相対リンクの処理などは意外と複雑になります。

    WALRUSでは、ディレクトリに属性やメソッド(手続き)を持たせて、文書から参照することができます。 この環境獲得という機能によって、複雑なコンテンツをシンプルなスクリプトで実現できます。 また、修正が非常に容易なシステムを作ることができます。

  • SQLやHTMLを構造的に記述するライブラリ

    次のような記述ができます。

    # HTMLの生成    
    E(:ul) { [1, 2, 3].collect { |i| E(:li) { i } } }
      => <ul><li>1</li><li>2</li><li>3</li></ul>
    
    # SQLの生成
    q = Query.new(Shohin.price)
    q.cond = (Shohin.code == 1)
    q.to_s
      => select price from Shohin where code = 1 ;

    いずれも、SQLやHTMLの文法上のミス(括弧の閉じ忘れなど)がほとんどなくなります。

  • RubyUnitと連動するテスト支援機能

    テンプレート展開機能により、ビューとビジネスロジックが完全に分離できます。 そのビジネスロジックだけを、バッチで起動して単体テストを行なうことができます。

  • log4jに似たロギングライブラリ

    log4jと同様のカテゴリによって階層化したロギングのライブラリがあります。 デバッグログやコンソールメッセージなどを非常に柔軟に出力できます。

    テスト中は、全てのメッセージをソースファイル名や行番号をつけてコンソールに出力して、 本番運用時は、レベル(通知、警告、エラー)ごとに別のSYSLOGに出力するというようなことが簡単にできます。 もちろん、ソースの修正は必要ありません。

  • RDとの連動

    コンテンツをRubyの標準的なドキュメント形式である、RDフォーマットで記述できます。 RDは記述するのが非常に楽な形式ですが、出力結果の柔軟性にはやや難があります。 WALRUSでは、テンプレート展開とRDを組み合わせることで、簡単な記述と自由な出力を両立しました。

    このマニュアルでは本文はRDで記述し、テンプレートはHTML+CSSで記述しています。 テンプレートを修正することで、本文以外の領域に自由に追加できます。

    また、必要ならばドキュメントごとに別のテンプレートを使用することもできます。


ページトップへ