目次

ダイレクトアプローチによる「Hello World」アプリケーション

webブラウザでアクセスすると「Hello World」と表示されるシンプルなwebアプリケーションを開発してみます。

ダイレクトアプローチ版「Hello World」アプリケーションの開発

1. 作業用ディレクトリの作成

「Hello World」アプリケーションの開発作業を行うためのディレクトリを作成します。

mkdir hello_world

2. Aloneを構成するファイルをコピー

Aloneの配布ファイルのうちlibディレクトリを前項の手順で作成したhello_worldディレクトリにコピーします。

cp -r alone/lib hello_world/

3. プログラムファイルの記述

hello_worldディレクトリの中にindex.rbというファイルを以下の内容で作成します。このファイルがアプリケーションのプログラム本体です。

index.rb
#!/usr/bin/env ruby
# encoding: utf-8
 
require "lib/alone"
 
Alone::main {
  @message = "Hello, World."
  AlTemplate.run "index.rhtml"
}

4. テンプレートファイルの記述

開発しようとしている「Hello World」アプリケーションはwebアプリケーションです。最終的な結果はブラウザで表示されますので、アプリケーションは通常はHTMLを生成してクライアントに返します。

テンプレートファイルは、生成するHTMLの雛形となるものです。index.rhtmlというファイルを以下の内容で作成してください。

index.rhtml
<%= header_section %>
  <title>Test</title>
 
<%= body_section %>
  <p><%=h @message %></p>
 
<%= footer_section %>

以上で完成です。hello_worldディレクトリの中には以下のファイル・ディレクトリが存在するはずです。

index.rb アプリケーション本体
index.rhtml アプリケーションからHTTPレスポンスとして返される画面を生成するための雛形です。HTML内に一部Rubyのコードが埋め込まれたERBで記述します。
lib/ Aloneのライブラリ群が格納されたディレクトリです。アプリケーションから呼び出されます。開発環境で使用する簡易webサーバal_server.rbも含まれています。

それでは、作成したアプリケーションを実行してみましょう。

簡易webサーバ al_server.rb による「Hello World」アプリケーションの実行

作成したアプリケーションはApacheなどCGIアプリケーションを実行できる環境に配置すれば実行可能ですが、Aloneにはal_server.rbという簡易webサーバが付属しており、作成したアプリケーションを手軽に実行できます。al_server.rbを利用すればwebサーバのインストールや設定を行うことなくアプリケーションのテストができますので、開発時には便利です。

al_server.rbを使ってアプリケーションを利用するには、hello_worldディレクトリ内で以下のコマンドを実行してください。簡易webサーバがポート10080で待ち受ける状態で起動し、カレントディレクトリ(.)のアプリケーションやファイルにwebブラウザでアクセスできる状態になります。

ruby lib/al_server.rb .

webブラウザでhttp://localhost:10080/にアクセスしてみてください。「Hello World」アプリケーションによって生成された画面が表示されます。

Hello Worldアプリケーションの解説

ダイレクトアプローチよるHello Worldアプリケーションのユーザーコードは、アプリケーション本体であるindex.rb、そしてレスポンスとしてクライアントに送出するHTMLを生成するためのテンプレートであるindex.rhtmlの二つからなります。

index.rbはwebブラウザからアクセスされ、CGIアプリケーションとして実行されます。つまり、このファイルがアプリケーション実行の起点となります。

index.rbのソースコードを以下に示します。

index.rb
#!/usr/bin/env ruby
# encoding: utf-8
 
require "lib/alone"
 
Alone::main {
  @message = "Hello, World."
  AlTemplate.run "index.rhtml"
}

Aloneを使ってCGIアプリケーションを開発するためには、スクリプトの冒頭でrequireメソッドを呼び出してAloneのライブラリを読み込みます。

require "lib/alone"

ダイレクトアプローチでは、アプリケーションのコードはAlone::mainメソッドの引数にブロックとして渡します。

Alone::main {
  @message = "Hello, World."
  AlTemplate.run "index.rhtml"
}

ブロックの内部では画面に表示させたい文字をインスタンス変数@messageに格納した後にAlTemplate.runを実行しています。

AlTemplate.runはERBで記述したテンプレート名を指定して実行すると、そのテンプレートの解析・処理を行い結果を標準出力に出力します。出力された内容はHTTPレスポンスとしてwebサーバからクライアントに送信されます。

Hello Worldアプリケーションで使用しているテンプレートindex.rhtmlのソースコードを示します。

index.rhtml
<%= header_section %>
  <title>Test</title>
 
<%= body_section %>
  <p><%=h @message %></p>
 
<%= footer_section %>

テンプレートはクライアントに返すHTMLの雛形を記述するものです。

Hello worldアプリケーションでは使用していませんが、Rubyのコードを<% %>に記述することができます。<%= %>で囲んだ場合は、内部のRubyコードで最後に評価された値が挿入されます。例えば、Hello Worldアプリケーションのindex.rbの場合は、header_section、body_section、footer_sectionなどAloneで定義済みのメソッドを呼び出してHTMLのヘッダ部、bodyタグ、フッタ部など固定的な記述を挿入しています。また、アプリケーションコード内で値をセットしたインスタンス変数@messageの内容も挿入しています。@messageのように、インスタンス変数を介してアプリケーションコードからテンプレートにオブジェクトを渡すことができます。

Hello Worldアプリケーションで実際に出力されるHTMLは次のようなものになります。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <meta http-equiv="Content-Script-Type" content="text/javascript">
  <meta http-equiv="Content-Style-Type" content="text/css">
  <link type="text/css" rel="stylesheet" href="/al_style.css">
 
  <title>Test</title>
 
</head>
 
<body>
 
  <p>Hello, World.</p>
 
</body>
</html>