15. Light Weight Languageに関する知識 II

シラバス: 

1. 科目の概要

Light Weight Languageによるシステム構築の応用例としてRubyによるアプリケーション構築フレームワークであるRuby on Rails (RoR)を取り上げる。RoRの基本的な仕組みを解説し、RoRを利用したデータベースアプリケーション開発やアプリケーションのカスタマイズ、開発方法などについて解説する。

2. 習得ポイント

本科目の学習により習得することが期待されるポイントは以下の通り。

3. IT知識体系との対応関係

「15. Light Weight Languageに関する知識Ⅱ」とIT知識体系との対応関係は以下の通り。

[シラバス:http://www.ipa.go.jp/software/open/ossc/download/Model_Curriculum_05_02.pdf]

<IT知識体系上の関連部分>

4. OSSモデルカリキュラム固有の知識

OSS モデルカリキュラム固有の知識として、Ruby on Rails(RoR)に関する知識が挙げられる。RoRの仕組み、開発手順、プラグイン開発、RoRアプリケーションの仕組みをLinux上での作業を通して習得する。

(網掛け部分はIT知識体系で学習できる知識を示し、それ以外はOSSモデルカリキュラム固有の知識を示している)

II-15-1. Ruby on Rails (RoR)の仕組み

RubyによるWebアプリケーション開発フレームワークであるRuby on Rails (RoR)の基本的な概念、構成、仕組みについて解説し、導入と設定方法、簡単な使い方を紹介する。またコードの自動生成や開発方法を述べ、RoRを利用したアプリケーション開発の第一歩に関して説明する。

【学習の要点】

* Ruby on Rails(RoR)はRuby言語によるWebアプリケーション開発フレームワークである。

* RoRでは、「設定より規約」「Don't Repeat Yourself」の方針がフレームワーク全体に適用されており、開発に要する作業量を大幅に減らすことが可能である。

* RoRのインストール方法には、各LinuxOSに付属するパッケージマネージャを用いる方法やRuby独自のパッケージ管理システムであるRubyGemsを用いる方法などがある。

* RoRではアプリケーションに必要なファイルの雛形を自動生成する仕組みが充実しており、開発の効率化を図ることができる。

図II-15-1. RoRにおける規約による関連付け

【解説】

1) Ruby on Rails(RoR)

Ruby on Rails(RoR)はRuby言語によるWebアプリケーション開発フレームワークであり、素早い開発を可能にするフレームワークとして人気を得ている。RoRの設計は「設定より規約:CoC(Convention over Configration)」と「DRY(Don’t Repeat Yourself)」の哲学に基づいている。

* 「設定より規約」は、従来のフレームワークでは設定ファイルに記述していた情報を、RoR側が規約にしたがって自動的に解決することにより、設定ファイル記述の大部分を不要とする考え方である。開発者がRoRの規約に従ったクラス名、変数名、ファイル名などを用いることで開発スピードが大幅に向上する。

* 「DRY」はアプリケーションに関するソースコード、設定などあらゆる情報は、一ヶ所に一度だけ記述する、という考え方であり、作業量が少なくなると共に、保守性が向上する。

2) RoRのインストール

* RubyGemsを利用したインストール

最も基本的な方法である。Rubyのインストール、RubyGemsのインストール、RubyGemsによるRoRのインストール、の手順で行う。

* apt-getを利用したインストール

debian系のLinuxディストリビューションではrailsパッケージが用意されており、apt-getコマンドによるインストールが可能である。

* One-Stepインストール

RubyStackなどのOne-Stepインストーラを用いることで、Ruby、RoR、Apache HTTP Server、MySQL、Mongrelなどを、事前に設定された状態で一挙にインストールすることができる。

3) RoRの構成

railsコマンドにより、アプリケーションを作成できる。アプリケーションの初期構造は以下のとおり。ソースコードファイルや設定ファイルなどを配置する場所が規約により指定されている。

* README - インストール手順と使い方

* Rakefile – ビルドスクリプト

* app/ - モデル、ビュー、コントローラのファイル

* components/ - 再利用可能なコンポーネント

* config/ - 各種設定ファイル

* db/ - データベーススキーマとマイグレーションの情報

* doc/ - 自動生成されるドキュメント

* lib/ - ライブラリ

* log/ - アプリケーションのログファイル

* public/ - Webからアクセス可能なディレクトリ

* script/ - ユーティリティスクリプト

* test/ - テストプログラム

* tmp/ - 一時的なファイル

* vendor/ - 外部のコード

II-15-2. Ruby on Rails (RoR)の仕組み

RoRを用いたWebアプリケーション開発を行う際に基本となるMVCアーキテクチャについて触れ、RoRではMVCアーキテクチャがどのように実現されるか、その構成要素を解説する。

【学習の要点】

* RoRではMVCアーキテクチャが採用されている。

* RoRにおけるControllerは、ApplicationControllerクラス継承したRubyクラスとして記述する。

* RoRにおけるViewはテンプレートと呼ばれる。テンプレートを記述する際に、各種テンプレートエンジンを利用することで、動的に画面を生成できる。

* RoRにおけるModelは、ActiveRecord::Baseクラスを継承したRubyクラスとして記述する。Active RecordはO/Rマッピング機能を提供し、開発者がデータベースを直接操作する必要はない。

図II-15-2. RoRにおけるMVC

【解説】

1) RoRにおけるMVCの配置

RoRではMVCアーキテクチャを採用している。

* app/controllers/

* app/models/

* app/views/

に対応するモジュールが置かれる。

2) RoRにおけるMVCの役割

* Model

- 通常のMVCでは、Modelはデータとビジネスロジックをカプセル化したものである。データベースとの関連は実装に任せられている。

- RoRではModelをActiveRecord::Baseクラスを継承したRubyクラスとして記述する。ModelはActiveRecordの機能ににより自動的にデータベーステーブルと関連付けられる。

- RoRにおいても、ビジネスロジックは通常のMVCと同様にModelに記述することが一般的である。異なる意見として、RoRではControllerが3層アーキテクチャにおけるビジネスロジック層、Modelがデータアクセス層にあたる、という考え方があり、この場合、ビジネスロジックはControllerに記述する。

* View

- Viewはユーザインタフェースを提供する。RoRでもViewの役割は通常のMVCと同様である。

- RoRにおけるViewはテンプレートと呼ばれる。テンプレートに対し、builder、ERb、rjs、hamlといったテンプレートエンジンを適用することで、クライアントへのレスポンスを動的に生成することができる。

- RoRではViewとControllerの結びつきが強い。そのため、RoRにおけるViewとControllerはAction Packという単一のコンポーネントにまとめられている。

- RoRでは、Viewにプログラム要素が入り過ぎるのを防ぐために、ヘルパーを利用することができる。ヘルパーとは、表示の整形など、View用のプログラム要素を、Viewから簡単に呼び出せるRubyメソッドとして記述したものである。

* Controller

- 通常のMVCでは、Controllerはリクエストの内容を解析し、適したModel、Viewへ処理を委譲する。

- RoRにおけるControllerはApplicationControllerクラス継承したRubyクラスとして記述する。

- 一つのアプリケーション内に複数のControllerが存在することが一般的である。

- リクエストはまずRoR内蔵のルータによって受け付けられる。ルータは、開発者が記述したControllerクラスのオブジェクトの内、リクエストに対応するオブジェクトのメソッドを呼び出す。

- RoRのルータとControllerの役割を合わせたものが、通常のMVCにおけるControllerであると言える。

II-15-3. Railsにおけるデータベース連携

RoRを用いたWebアプリケーション開発ではどのようにデータベースとの連携が行われるかを解説する。RoRにおけるデータベース連携のコンポーネントであるActiveRecordの概要と構成について説明し、データベース操作に必要な各種の設定について述べる。

【学習の要点】

* Active RecordはRoRに用意されたO/Rマッピング層である。

* Active Recordを利用した場合、データベーススキーマの情報は動的に取得されるため、Rubyソースコード中にデータベーススキーマの情報を記述する必要はない。

* RoRではアプリケーションのデータベーススキーマの変更を管理するために、マイグレーション機能を利用することができる。

* データベースの接続に関する設定はconfig/database.ymlで行う。

図II-15-3. ActiveRecordによるO/Rマッピング
【解説】

1) ActiveRecord

Active RecordはRoRに用意されたO/Rマッピングの層である。通常のRubyプログラム内で利用することも可能である。

2) ActiveRecordによるO/Rマッピング

* ActiveRecored::Baseクラスを継承したクラスは、クラス名を元にデータベーステーブルと結び付けられる。

* データベースの行は、Modelクラスのオブジェクトにマッピングされる。

* データベースの列は、Modelクラスのオブジェクトの属性にマッピングされる。このとき、SQLの型はRubyのクラスに変換される。

* データベーステーブルの列に関する情報は、ActiveRecordによって動的に取得されるため、ソースコードや設定ファイル内に記述する必要はない。

* ActiveRecordはModelオブジェクトに対し、値の検証を行う機能を提供する。定型的な検証については、あらかじめ用意されているヘルパーメソッドを利用することができる。

* ActiveRecordは、1対1、1対多、多対多のテーブル間の関連をサポートする。

3) データベースへの接続

* ActiveRecordでは、データベース操作は共通のインタフェースによって抽象化されている。

* データベース接続処理の詳細は、データベース毎の固有のアダプタによって行われる。

* 各種データベースへの接続に用いるアダプタの多くは、RubyGemsによりインストールすることができる。

* RoR内でActiveRecordを利用する場合は、config/database.ymlにデータベース接続情報を指定する。

* ActiveRecordを単体で用いる場合、データベース接続はActiveRecord::Base.establish_connectionクラスメソッドによって行う。データベース接続情報はメソッドの引数として渡す。

4) マイグレーション

Webアプリケーションをインクリメンタルに開発する場合、開発が進むにつれてデータベーススキーマが変化していく場合が考えられる。RoRでは、このようなデータベーススキーマの変更を管理する仕組みとして、マイグレーションを利用することができる。

* マイグレーションはdb/migrateディレクトリに配置されるRubyコードである。

* マイグレーションにはバージョン番号が割り当てられる。

* マイグレーションはActiveRecord::Migrationのサブクラスであり、データベーススキーマの変更を行うクラスメソッドupと、データベーススキーマの変更を取り消すクラスメソッドdownを含む必要がある。

II-15-4. RoRを利用したデータベースアプリケーション開発

データベースアプリケーションの開発方法を、RoRでどのように実現するかについて具体的な操作手順を交えて説明する。テーブルの定義、テーブル操作、トランザクション処理といったそれぞれの手順がRoRでどう実現されるかを解説する。

【学習の要点】

* テーブルの作成、スキーマの変更はマイグレーションに記述する。

* テーブルに対する新たな行の追加は、対応するModelクラスのnewメソッドを利用してオブジェクトを作成し、saveメソッドで保存することで実現できる。

* テーブルからのデータの取得は、対応するModelクラスのfindメソッドで実現できる。取得したデータはModelクラスのオブジェクトとして返却される。

* 既存の行の更新は、取得したModelクラスのオブジェクトの属性を更新し、saveメソッドで保存することによって実現できる。

* テーブルの既存の行の削除は、対応するModelクラスのクラスメソッド、もしくはインスタンスメソッドにより実現できる。

* トランザクションは、Modelクラスのtransactionメソッドにより実現できる。

図II-15-4. ActiveRecordを利用したデータベース操作

【解説】

1) Model開発の手順

* config/database.ymlファイルに、データベース接続に関する設定を記述する。database.ymlは3つのセクションに分かれており、それぞれ開発用データベース、テスト用データベース、本番用データベースの情報を記述する。

* rakeタスク「rake db:create」を実行することにより、データベースを作成する。

* スクリプト「ruby script/generate model [Model名]」を実行することにより、Modelクラスとマイグレーションの雛形を生成する。

- Modelクラスの雛形はapp/models/ディレクトリに生成される。

- マイグレーションの雛形は、db/migrate/ディレクトリに生成される。

* マイグレーションにデータベーステーブルの作成処理、および削除処理を記述する。

* rakeタスク「rake db:migrate」により、マイグレーションに記述したテーブルの作成処理を実行する。

* アプリケーション仕様に基いて、Modelクラスに検証メソッド、およびビジネスロジックを行うメソッドを追加する。

2) ActiveRecordを利用したデータベース操作

* テーブルに対する新たな行の追加

テーブルに対応するModelクラスのnewメソッドを利用してオブジェクトを作成し、saveメソッドを呼ぶことでデータベースに新たな行が追加される。また、Modelクラスのcreateメソッドを利用することで、オブジェクトの作成と、データベースへの保存を同時に行うことができる。

* テーブルからのデータの取得

テーブルに対応するModelクラスのfindメソッドによって既存の行データをModelクラスのオブジェクトとして取得することができる。findメソッドには主キーのほか、検索条件やソート条件など、SQLで指定できる検索条件の多くを引数の形で指定できる。

* 既存の行の更新

取得したModelオブジェクトの属性の値を変更し、saveメソッドを呼ぶことで、既存の行を更新できる。また、Modelクラスのupdate、およびupdate_allメソッドを利用することで、行データの取得と更新を一度に行うことができる。

* 既存の行の削除

テーブルに対応するModelクラスのdestroy、およびdestroy_allメソッドを利用することで、テーブルレベルの行の削除を行うことができる。また、取得したModelオブジェクトのdestroyメソッドを利用することで、そのオブジェクトに対応する行を削除することができる。

* トランザクション

Modelクラスのtransactionメソッドを利用することで、トランザクション処理を実現できる。トランザクションとして実行される一連の処理はブロックとして渡される。

II-15-5. RoRを利用したWebアプリケーション開発

RoRによるWebアプリケーション開発の概要と作業の流れを解説する。RoRを利用して開発したWebアプリケーションの構成要素を説明し、データベースの設定方法やWebサーバの起動、インタラクションの確認方法などについて解説する。

【学習の要点】

* RoRを利用したWebアプリケーション開発は、Model、View、Controllerに該当する各要素の作成を通じて行われる。

* RoRではModel、View、Controllerの各要素を、scaffoldと呼ばれる仕組みにより一挙に自動生成することができ、開発を開始するにあたっての雛形とすることができる。

* scaffoldを利用して生成したアプリケーションは、データベースの設定、Webサーバの起動を行うことで即座に動作させることが可能である。

図II-15-5. Scaffoldを利用したアプリケーションの生成例

【解説】

1) RoRによるWebアプリケーション開発

* Modelの作成

「Ⅱ-15-4. RoRを利用したデータベースアプリケーション開発」を参照のこと。

* Controllerの作成

スクリプト「ruby script/generate controller [Controller名]」を実行することにより、Controllerの雛形を生成することができる。生成される要素は以下のとおり。

- app/controller/[Controller名]_controller.rb

Controllerの本体となるクラスを記述するソースコードファイル。初期状態ではControllerクラスが、メソッドを持たない状態で記述されている。Controllerクラスにアクションメソッドを追加することによってContorollerの開発を行う。

- test/functional/[Controller名] _controller_test.rb

Controllerの機能テストを記述するソースコードファイル。

- app/views/[Controller名]/

Controllerに対応したViewを配置するためのディレクトリ。このディレクトリにテンプレートファイルを置くことで、規約によりControllerとViewが関連付けられる。

- app/helpers/[Controller名]_helper.rb

Controller、およびControllerに関連付けられたView内から呼び出し可能なヘルパーメソッドを記述するソースコードファイル。

* Viewの作成

Viewはテンプレートによって表現される。動的なレスポンスを実現するテンプレートを記述する際には、テンプレートエンジンとして以下のようなライブラリを利用できる。

- builder – 主に、XMLレスポンスの構築に用いられる。

- erb – 主に、動的なHTMLページの構築に用いられる。

- rjs – JavaScriptの生成に用いられる。

テンプレートの配置ディレクトリ、およびファイル名は規約によって定められている。

- テンプレートは、それを呼び出すControllerと規約によって関連付けられる。テンプレートは、「app/views/[関連Controller名]/」ディレクトリに配置する。

- テンプレートのファイル名は「[アクションメソッド名].[フォーマット].[テンプレートエンジン名]」とする。

2) scaffoldによるアプリケーション生成

RoRでは、scaffoldと呼ばれる仕組みにより、簡単なアプリケーションを一挙に作成することができる。scaffoldを利用した場合の、アプリケーションの動作を確認するまでの手順は以下のとおり。

* railsコマンドによってアプリケーションのディレクトリ構造を生成する。

* 「ruby script/generate scaffold」スクリプトによってアプリケーションの雛形を生成する。

* config/database.ymlファイルの編集によってデータベース接続設定を行う。

* 「rake db:create」タスクにより、データベースの作成を行う。

* 「rake db:migration」タスクにより、データベースのマイグレーションを行う。

* 「ruby script/server」スクリプトによってWebサーバを起動する。

II-15-6. Webアプリケーション開発のカスタマイズ

ルーティングやページ遷移、表示部分のカスタマイズ、リダイレクト処理など、RoRによるWebアプリケーションをカスタマイズする典型的な手法を紹介する。

【学習の要点】

* アプリケーションのルーティング(URLのマッピング)の動作は、config/routes.rbファイルを修正することで変更できる。

* ページの表示内容は、該当するテンプレートファイルを修正することで変更できる。

* リダイレクト処理は、該当するControllerのアクションメソッド中でredirect_toメソッドを呼び出すことで実現できる。

図II-15-6. RoRのルーティング

【解説】

1) RoRにおけるルーティングの変更

RoRの、URLとメソッドのマッピングの仕組みは、config/routes.rbファイルを修正することで変更できる。config/routes.rbファイル内には、ActionController::Routing::Routes.drawメソッドの呼び出しが記述される。drawメソッドの引数として渡すブロックの中で、mapオブジェクトのメソッドを呼び出すことで、ルーティングを変更することが可能である。railsコマンドでプロジェクトを作成した場合、config/routes.rbファイルには次の記述がある。

map.connect ‘:controller/:action/:id’

* connectメソッドへの引数は、パターンと追加パラメータに分けられる。上記の例では、パターンのみが渡されている。

* パターンはスラッシュ、またはピリオドでコンポーネントにわけられる。

* 「:[パラメータ名]」の形式のコンポーネントは、リクエストされたURLパスの該当部分の値を[パラメータ名]に対応する値として設定する。

* 上記の例のパターンに対し、「/admin/show /1」というURLパスが与えられた場合、

- controller => ‘admin’

- action => ‘show’

- id => ‘1’

という設定が行われる。

* controllerパラメータはControllerオブジェクトの決定に、actionパラメータは、アクションメソッドの決定に利用される。その他のパラメータはアクションメソッド内で利用することができる。

* controllerパラメータ、およびactionパラメータは、必ずしもパターン内で指定する必要はなく、追加パラメータとして指定することも可能である。以下の例の場合「foo/bar/baz」というパスに対し、AdminControllerオブジェクトのshowメソッドが呼び出される。

map.connect ‘foo/bar/baz’, :controller => ‘admin’, :action => ‘show’

* connectメソッドの呼び出しはブロック内に複数記述することが可能であり、呼び出された順にパターンに対するマッチングが行われる。マッチした時点で、パターンに対応するアクションが実行される。

2) RoRアプリケーションの表示内容の変更

RoRアプリケーションの表示は、テンプレートによって行われる。例として、「ruby script/generate scaffold」スクリプトで生成されるテンプレートの一部を以下にあげる。これらを修正することで、生成したアプリケーションの修正を行うことができる。

* app/views/[コントローラ名]/index.html.erb – 一覧画面のテンプレート

* app/views/[コントローラ名]/edit.html.erb – 編集画面のテンプレート

* app/views/[コントローラ名]/show.html.erb – 詳細画面のテンプレート

3) RoRアプリケーションにおけるリダイレクト

リダイレクト処理は、該当するControllerのアクションメソッド中でredirect_toメソッド呼び出すことにより実現できる。リダイレクト先は引数として指定し、controller、actionをパラメータとして指定することができる。

II-15-7. RoRの機能拡張

RoRの機能を拡張するプラグインについて解説する。プラグインとは何か、プラグインの導入と利用方法について述べ、既存のプラグインとしてどのようなものがあるか、どのようにプラグインを利用すると効果的かといった話題について述べる。さらにサンプルプログラムでプラグインの利用例を示す。

【学習の要点】

* RoRは、プラグインを導入することでフレームワークに存在しない機能を追加することができる。

* プラグインの検索・インストールはscript/pluginスクリプトで行うことができる。

* プラグインはvender/pluginsディレクトリに保存される。

図II-15-7. プラグインの利用例

【解説】

1) プラグイン

プラグインは、RoRのフレームワークが提供する機能の拡張、もしくは機能の修正を行うためのプログラムである。プラグインを利用することにより、既存のコードを修正すること無く新たな機能を付け加えることができる。また、プラグインの提供者は独自に修正やアップデートをリリースすることができる。

2) プラグインのインストール

プラグインは、script/pluginスクリプトを利用して、Web上で公開されているリポジトリからインストールすることができる。スクリプトの詳細は以下のコマンドで確認できる。

ruby script/plugin -h

* プラグインのリスト

入手可能なプラグインのリストは以下のコマンドにより確認することができる。

ruby script/plugin list

* リポジトリの追加

以下のコマンドにより、リポジトリの追加を行うことができる。あらかじめリポジトリをsourceとして登録しておくことで、プラグイン名でのインストールが可能になる。

ruby script/plugin source [URL]

* プラグインのインストール

以下のコマンドにより、指定したプラグインをインストールすることができる。リポジトリがsourceとして登録されている場合はプラグイン名、登録されていない場合はURLを指定する。URLとして、subversionやgitのリポジトリを指定することができる。

ruby script/plugin install [プラグイン名 or プラグインのURL]

* インストールしたプラグインはvendor/pluginsディレクトリに配置される。

3) プラグインの例

現在公開されているプラグインに関する情報は、Webページ(http://wiki.rubyonrails.org/rails/pages/Plugins)などから入手できる。公開されているプラグインの例を以下にあげる。

* CSS Graphs(http://nubyonrails.com/pages/css_graphs)

グラフを作成するためのヘルパーを提供するプラグイン。

* Calendariffic(http://opensvn.csie.org/calendariffic/calendariffic/)

ポップアップカレンダーによる日付入力インタフェースの実現を容易にするプラグイン。

* TextAreaWithStatus

(http://text-area-with-status.googlecode.com/svn/tags/text_area_with_status)

文字数制限のあるテキスト入力欄の作成を容易にするプラグイン。

* Restful Authentication(git://github.com/technoweenie/restful-authentication.git)

ユーザ登録機能、およびユーザ認証機能の作成を容易にするプラグイン。

II-15-8. RoRのプラグイン開発

RoRの機能を拡張するプラグインを新たに開発する方法を説明する。ジェネレータの実行や機能の実装と実行といったプラグイン作成手順の流れを示し、作成したプラグインをテストする手法を示す。また新たに作成したプラグインを利用するサンプルプログラムを示し実際の利用手順を説明する。

【学習の要点】

* プラグインの雛形はスクリプトにより自動生成することができる。

* プラグインの実装はvender/plugins/[プラグイン名]/lib/[プラグイン名].rbファイルに記述する。

* プラグインのテストはvender/plugins/[プラグイン名]/test/[プラグイン名]_test.rbファイルに記述する。

* プラグインのテストはrake test:pluginsコマンドによって実行する。

図II-15-8. プラグインの開発例

【解説】

1) プラグインの種類

RoRのほとんどの機能はプラグインとして開発可能である。以下に拡張例をあげる。

* ActiveRecord::Baseクラスに新たなメソッドを追加することで、Modelクラスに新たな機能を加える。多くの場合、Modelクラス内で「acts_as_」で始まるメソッドを呼び出すことで、機能が有効になるように作成される。

* Viewテンプレート内で利用可能なヘルパーを追加する。Viewテンプレート内でメソッドとして呼び出すことで利用することができる。

2) プラグインの開発

プラグインの開発にあたっては、「ruby script/generate plugin [プラグイン名]」スクリプトにより、雛形を生成することができる。生成されるファイルについて以下に説明する。

* vendor/plugins/[プラグイン名]/README

プラグインの利用者向けに、プラグインのインストール方法、使い方などを記述する。

* vendor/plugins/[プラグイン名]/init.rb

プラグインの初期化処理を記述する。プラグインのモジュールをRoRに組み込む処理などが該当する。init.rbで一般的に行われる処理を以下にあげる。

- ActiveRecord::Base.send(:include, [モジュール名])

Modelクラスに対し、モジュール内のメソッドを追加する。

- ActionController::Base.send(:include, [モジュール名])

Controllerクラスに対し、モジュール内のメソッドを追加する。

- ActionView::Base.send(:include, [モジュール名])

モジュール内のメソッドをViewテンプレート内で利用可能なヘルパーとして登録する。

* vendor/plugins/[プラグイン名]/install.rb

プラグインのインストール処理を記述する。JavaScriptやスタイルシートを展開する処理などを記述する。

* vendor/plugins/[プラグイン名]/uninstall.rb

プラグインのアンインストール処理を記述する。

* vendor/plugins/[プラグイン名]/lib/[プラグイン名].rb

プラグインの本体となるソースコードを記述する。「vendor/plugins/[プラグイン名]/lib/」ディレクトリは、RoRの起動時にロードパスに追加される。記述の仕方としては、プラグイン独自のモジュールを定義してその中にメソッドとして処理を記述し、init.rb内でRoRに組み込む方法が一般的である。

* vendor/plugins/[プラグイン名]/tasks/[プラグイン名]_tasks.rake

プラグイン用のrakeタスクを記述する。

* vendor/plugins/[プラグイン名]/test/[プラグイン名]_test.rb

Test::Unitモジュールを利用してプラグイン用のテストを記述する。

3) プラグインのテスト

rakeタスク「rake test:plugins」によって、全てのプラグインのテストが実行される。特定のプラグインのみテストする場合は、「rake test:plugins PLUGIN=[プラグイン名]」とする。

II-15-9. RoR応用アプリケーションの利用

典型的なWebアプリケーションであるコンテンツ管理システム(Content Management System; CMS)について説明し、CMSのRubyによる実装例としてRubricksやRadiant CMSなどのアプリケーションを紹介する。RubricksやRadiant CMSの構成と特徴について述べ、さらに各アプリケーションの導入と設定方法を解説する。

【学習の要点】

* CMSとはWebページや画像データといったコンテンツを作成、編集、管理する機能を提供するソフトウェアである。

* RoRを用いて開発されたOSSのCMSとしてRubricksやRadiant CMSがある。

* Rubricks、Radiant CMS共に拡張性が重視されており、拡張機能をプラグインとして開発、あるいは導入するための仕組みが提供されている。

図II-15-9. Radiant CMSの管理画面

【解説】

1) CMS(Content Management System)

CMSとは、コンテンツの作成、編集、管理を容易にすると共に、一貫した形式で公開することを可能にするソフトウェアである。Webサイトの構築に広く利用されており、ブラウザ経由でWebページの追加や編集を行う機能や、ユーザの権限を管理する機能などが提供される。BlogやWikiもCMSの一種であると考えることができる。

2) Rubricks

Rubricksは日本人の開発グループにより開発されているCMSである。

* RoR上に構築されており、MITライセンスで公開されている。

* BBSやニュース配信の機能が用意されており、コミュニティポータルの作成を容易にする。

* Rubricksはコンポーネントアーキテクチャと呼ばれる機構を採用しており、必要な機能はコンポーネントの単位で管理され、自由に組み合わせることが可能になっている。

3) Rubricksのインストール

* Rubricksの推奨環境は開発Webページ(http://dev.rubricks.org/wiki/RubricksSystemRequirementJa)を参照のこと。注意点としては2008年8月の段階で、RoRのバージョン1.x系のみの対応となっている。

* Rubricksのインストール手順についてはWindows向け、およびCentOS向けの手順が公開されている。詳細は開発Webページ(http://dev.rubricks.org/wiki/RubricksInstallationGuideJa)を参照のこと。

4) Radiant CMS

Radiant CMSはシンプルでわかりやすいインタフェースを特徴としたCMSである。

* Rubricks同様、RoR上に構築されており、MITライセンスで公開されている。

* Ruby言語の公式ページ(http://www.ruby-lang.org)で採用されるなど、Webサイト構築用のCMSとして比較的多くの実績をもつ。

* Webサイトのツリー構造を柔軟に構築できる機能や、個々のページを統一的なレイアウトで表示する機能など、一般的なWebサイトを構築するための基本的な機能が提供されている。

* Rubricksと同様に拡張機能を管理する機能を持つ。拡張機能はExtensionという単位で管理され、様々な機能がサードパーティから提供されている。

5) Radiant CMSのインストール

Radiant CMSはRubyGemsパッケージとして提供されており、gemコマンドを利用してインストールすることができる。詳細な手順はWebサイト(http://wiki.radiantcms.org/Installation)を参照のこと。インストールの流れを以下に示す。

* Ruby、およびRubyGemsのインストール

* gemコマンドによるradiantパッケージのインストール

* Radiantプロジェクトの作成

* データベースの接続設定と初期化

* サーバの起動

II-15-10.Radiant CMSのカスタマイズ

Radiant CMSはExtensionを導入することで機能を拡張することができる。Radiant CMSの開発プロジェクトやサードパーティから提供されている各種Extensionの種類と導入方法を示し、Rediantをカスタマイズする手順について説明する。

【学習の要点】

* Radiant CMSは導入時、デフォルトで “Archive”、“Markdown”、“Textile”などがExtensionとして含まれるほか、様々なExtensionがサードパーティから提供されており、自由に組み合わせて使用することができる。

* Extensionは、Radiantプロジェクトのvendor/extensions/ディレクトリに配置する。

図II-15-10. RadiantのArchive Extension

【解説】

1) Extensionの種類

Radiant CMSの導入時にデフォルトでインストールされているExtensionとして、“Archive”、“Markdown”、“Textile”がある。また、サードパーティから公開されているExtensionの一覧がWebページ(http://wiki.radiantcms.org/Thirdparty_Extensions)に掲載されている。利用可能なExtensionの一部を以下にあげる。

* Archive

ニュース記事を扱うサイトや、blogサイトで見られるような、年、月、日毎のアーカイブページを作成することが可能になる。

* Markdown

HTMLの代わりにMarkdown形式によってページを記述することが可能になる。

* Textile

HTMLの代わりにTextile形式でページを記述することが可能になる。

* Search

サイト内のページに対するサーチ機能の追加が可能になる。

* FCKeditor

JavascriptによるWYSIWYGエディタ「FCKeditor」をページの編集に用いることが可能になる。

2) Extensionのインストール

インストール手順の詳細は、Webページ(http://wiki.radiantcms.org/Extensions)、およびExtensionディレクトリ内のREADMEファイルを参照のこと。一般的な手順を以下に記述する。

* インストールしたいExtensionを、リポジトリからのチェックアウトや開発Webサイトからのダウンロードにより取得する。

* チェックアウト、もしくはダウンロード・解凍してできたExtensionディレクトリを、Radiantプロジェクトのvendor/extensions/ディレクトリの下に配置する。この際、ディレクトリ名をExtension名にする必要がある。Extensionディレクトリの下には、ファイル名の末尾が「_extension.rb」となっているファイルが含まれており、「_extension.rb」の前の部分がExtension名である。

* Extensionがデータベースを利用する場合、マイグレーションを実行する。

* インストールされているExtensionは、Radiant CMS管理ページの「Extensions」メニューから確認することができる。

3) Extensionのアンインストール

インストールの場合と同様、手順の詳細はRadiant CMSの公式Webページ、およびExtensionパッケージ内のREADMEファイルを参照のこと。一般的な手順を以下に記述する。

* Extensionがデータベースを利用する場合、VERSION=0を指定してマイグレーションを行い、データベースをインストール前の状態に戻す。

* Radiantプロジェクトのvendor/extensions/ディレクトリ以下に配置されたExtensionディレクトリの内、アンインストールしたいディレクトリを消去する。