====== ダイレクトアプローチによる「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というファイルを以下の内容で作成します。このファイルがアプリケーションのプログラム本体です。
#!/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というファイルを以下の内容で作成してください。
<%= header_section %>
Test
<%= body_section %>
<%=h @message %>
<%= 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」アプリケーションによって生成された画面が表示されます。
{{:handbook:hello_world_otuput.png|}}
===== Hello Worldアプリケーションの解説 =====
ダイレクトアプローチよるHello Worldアプリケーションのユーザーコードは、アプリケーション本体であるindex.rb、そしてレスポンスとしてクライアントに送出するHTMLを生成するためのテンプレートであるindex.rhtmlの二つからなります。
index.rbはwebブラウザからアクセスされ、CGIアプリケーションとして実行されます。つまり、このファイルがアプリケーション実行の起点となります。
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のソースコードを示します。
<%= header_section %>
Test
<%= body_section %>
<%=h @message %>
<%= 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は次のようなものになります。
Test
Hello, World.