Ruby on Rails を用いた Web アプリケーション開発支援の研究
2006MI197 山田 博貴
指導教員

1 はじめに近年 Web アプリケーションが普及しており，その開蜂巣 吉成解決策とはいえない．

3 拡張可能な scaﬀold の提案

発方法として Ruby on Rails が注目されている．Ruby
on Rails はラピッドプロトタイピングに基づく開発で成したい Web アプリケーションに共通する機能やデザあり，scaﬀold という生成系を用いて Web アプリケーインが追加された雛型を生成する方法を提案する．既存ションの雛型を生成し，機能を追加して開発する．の Web アプリケーションを分析し，共通機能の整理を

2 節の問題を解決するために CRUD のみでなく，作Web アプリケーションは種類毎に共通の機能がある．

行った．また，実際に Web アプリケーションを作成し，また，Web アプリケーション開発企業などが種類の異scaﬀold を構成するファイルの分析，整理を行った．本なる Web アプリケーションを作成する場合でも，デ研究では，これらの共通機能を部品として組み合わせてザインやレイアウトなどを共通に利用する場合がある．

再利用できる枠組みを提供する．

scaﬀold は CRUD(Create, Read, Update, Destroy) のみ実行できる雛型しか生成せず，Web アプリケーショ

3.1 Web アプリケーションの分析
Ruby on Rails の公式ページ [3] で紹介されている 71

ンを開発する毎に，これらの共通に利用できる機能やデ個の Web アプリケーションを種類や機能，データの観ザインを追加するのは開発効率が悪い．

点で分析した．Web アプリケーションは 8 種類で，機本研究では，scaﬀold を拡張して共通の機能やデザイ

能は 9 種類，データは 7 種類に分類した．この関連のンが追加された雛型を生成する方法を提案する．ユーザ

一部を図 1 に示す．左側はデータ，中央は Web アプリ

は作成したい Web アプリケーションの種類と追加したケーション，右側は機能である．また，実線は Web ア

い機能，デザインを指定することで，それらが反映されプリケーションから機能，データへの利用関係を表す．

た雛型が生成される．生成される雛型は，共通に利用できる機能やデザインが埋め込まれているので，それらを追加するコードを記述する必要がなく，従来の開発方法

ファイル

記事・コメント

プロフィール

予定の機能を追加する手間が省ける．

更新情報通知

ブログ

ユーザ認証
SNS

ユーザ情報

URL

スケジュール管理

メール送受信ソーシャル
ブックマーク

2 Ruby on Rails の問題点

検索

ファイル共有データ

Web アプリケーション開発企業では，ブログ，SNSなどの Web アプリケーションを複数の企業から請け負トラックバック

図1

Webアプリケーション

機能

アプリケーションと機能，データの関連図

い，開発している．ブログのトラックバック機能など，各 Web アプリケーションには共通の機能が多くある
が，相手企業ごとに機能の一部をカスタマイズする必要

3.2 scaﬀold を構成するファイルの分析
scaﬀold が生成するコードに共通の機能やデザインながある．一つの企業向けに複数の Web アプリケーショ

どを埋め込むために，ファイルの構成を分析した．ブロンを開発する場合，企業のロゴやヘッダなど，共通のグ，掲示板アプリケーションを作成したところ，scaﬀoldデザインやレイアウトを採用することも多い．scaﬀoldが生成するコードの 17 箇所を変更可能な箇所として抽は CRUD のみ実行できるコードしか生成しないので，出した．表 1 に scaﬀold を構成するファイルの一部と変Web アプリケーションで共通に利用できる機能や，デザインを反映させる類似したコードを Web アプリケー

更箇所を示す．

ションを開発する毎に記述するのは開発効率が悪い．
これらの解決策として scaﬀold を修正して CRUD 以外の機能が追加された雛型を生成する方法 [1] や，動的なモデルをベースにしたビューを生成する方法 [2] などがある．しかし，Web アプリケーション毎に scaﬀoldで生成するためのコード修正が必要であるので，十分な

表 1 scaﬀold を構成するファイル
scaﬀold 構成ファイル

ファイルの説明scaﬀold_generator.rb

生成するファイルの定義

2

controller.rb

利用するメソッドの定義

3

model.rb

データベース接続に関する定義

1

layout.html.erb

すべてのページのレイアウト定義

2

view-show.html.erb

データ一覧ページの表示

1

変更箇所数

ユーザ認証機能を埋め込む場合の例を挙げる．ユーザ認るデザインを記述する．

証機能はユーザとパスワードのデータ，ログイン画面が3.3.3 アプリケーション設定ファイル必要になる．scaﬀold_generator.rb の manifest メソッデルファイル (user.rb) 生成の定義を記述する．実際にアプリケーション設定ファイルには構築したい Web
アプリケーションの種類，追加したい機能，用いるデザインを記述する．認証機能のあるブログアプリケーショ
ンを作成する際の記述例を以下に示す．
Application: BlogOption: login-auth, before-index
Style: nanzan-style.css，nanzan-style.html.erb

認証を行うコードは session_controller.rb，user.rb に

アプリケーション定義は機能部品の集合であり，複記述する．また，ログイン画面は view_login.html.erb

数の機能部品を適用することで各 Web アプリケーショを修正し，すべてのページでログアウトできるようにンを構成する．Application: Blog ではブログの機能部

layout.html.erb を修正する．

品集合があらかじめ定義されたファイルを読み込む．

3.3 拡張可能な scaﬀoldOption: login-auth で読み込んだブログ用雛型の該当ドに新規コントローラファイル (session_controller.rb)
生 成 ，scaﬀold_view メ ソ ッ ド に 新 規 ビ ュ ー フ ァ イル (view_login.html.erb) 生 成 の 定 義 を 記 述 す る ．

model_generator.rb の manifest メソッドには新規モ

各機能やデザインごとにコードを埋め込む箇所が決箇所に認証機能追加コードを埋め込む．また，認証を行まっているので，機能部品等と埋め込み箇所の対応関係うタイミングは複数の可能性があるので，オプションを管理し，Web アプリケーション毎に必要な部品などとして指定できる．上記で示す例ではトップページがを選択できる scaﬀold を提案する．scaﬀold に与える選表示される前にログイン画面を表示すると指定してい択肢としては，Web アプリケーションの基本機能を提る．ページテンプレートは，あらかじめ CSS ファイル供するアプリケーション定義，オプションとして追加でと layout ファイルが用意してある場合は，指定するこきる機能部品，画面構成を定義するページテンプレートとで反映される．指定していない場合は従来の scaﬀoldの 3 つであり，これらをアプリケーション設定ファイによる画面構成として生成される．

ルに記述し，拡張 scaﬀold によって雛型を生成する (図2)．ページテンプレートはユーザ毎に異なるので，ユーザ自身が利用するファイルを追加する必要がある．

scaﬀold を利用した開発方法とのコード記述量を比較した．従来の開発方法に比べて 96 行分が自動で生成され，利用する機能の指定ユーザが追加

入力

ページテンプレート
CSSファイル

拡張scaffold機能部品

出力

高機能なアプリケーションの雛型

図2

提案する拡張 scaﬀold を機械的に適用して，認証機能のあるブログアプリケーションを作成し，従来のアプリケーション指定
アプリケーション定義ファイル

4 考察

ユーザによる記述の手間が省ける．また，作成したブロ

layoutファイル
ページテンプレート

グ，掲示板で認証機能，レイアウトが修正することなく再利用できることを確認した．

自動生成ツールの概略図

3.3.1 機能部品
機能部品には機能毎に scaﬀold を構成するファイルの変更箇所に追加すべきコードを対応付け，記述する．例
として認証機能の一部を挙げる．scaﬀold_generator.rbの manifest メソッドを指定し，新規コントローラ生成のコードを埋め込む処理が記述されている．
Point: scaffold_generator.rb，manifest
Code: ${ m.template( ’session_controller.rb’,File.join(’app/controllers’,controller_class_path,"#{controller_file_name}_controller.rb" )) $}3.3.2 ページテンプレート
ページテンプレートは CSS ファイルと layout ファ
イルで構成され，配備先のサイト毎に用意する．layout.html.erb の<head>内 で CSS フ ァ イ ル を 指 定 し ，<body>内に会社のロゴやヘッダなどの共通に利用す

5 おわりに
本研究では Web アプリケーション開発現場におけるscaﬀold の問題点に着目し，Web アプリケーションで共通に利用できる機能やデザインが追加された雛型を生成する scaﬀold の拡張の提案を行った．今後の課題は機能部品の追加，実装，評価などが挙げられる．

参考文献[1] CodeZine，“Rubyon

Rails のscaﬀoldを

カ ス タ マ イ ズ し て 使 い や す く す る ，”

http://codezine.jp/article/detail/2912．
[2] MINIELEMENTS，“ActiveScaﬀold，”
http://activescaﬀold.com.
[3] 37signals，“Real applications live in the wild，”
http://rubyonrails.org/applications．