はじめに
Scaffoldは、Ruby on Rails(以下、Rails)における代表的なジェネレータであり、テーブルのメンテナンスアプリケーションを自動生成してくれます。また、Scaffoldによって生成されたコードは、Railsアプリケーションのディレクトリツリーに格納されており、自分で変更することができます。
データ処理部分の開発が簡略化されるので、生成したアプリケーションをすぐに実行して試すことができ、そこからの変更も素早く行える。Scaffoldは、アジャイルな開発手法に適しており、生産性の向上に大きな貢献をしています。
一方、Scaffoldで生成したアプリケーションは出発点にすぎず、自立した完成品のアプリケーションではありません。そのため、開発者がプロジェクトに適した形になるように手を加える必要があります。
しかし、毎回似たような修正を行うのであれば、生成した時点でその修正が加えられているようにした方が、より生産性も向上します。
例えば、筆者は下記のような修正を加えたいと考えました。
- 一覧検索画面で検索条件を指定したい。
- 一覧検索ページの一覧明細や新規作成/参照/編集ページにスタイルシートを適用したい。
- ~idなどの列名が、変更を加えなくても画面上に表示されるようにしたい。
- 生成時の列名を英語ではなく、日本語にしたい。
- 作成日時や更新日時が、新規作成および編集ページに表示されないようにしたい。
- 作成日時や更新日時の表示形式を「YYYY/MM/DD」から始まる表記にしたい。
- 数値項目には数値しか入力できないようにしたい。
- 日付項目には日付しか入力できないようにしたい。
- テーブルの列名の属性に応じて、テキストボックスに入力できる文字の長さが制限されるようにしたい。
- ~flagの列名に関しては、チェックボックス表記にしたい。
- 任意の列名に関して、フォーカスアウト時にマスタテーブルを検索して、検索条件に一致した名称を表示するようにしたい。
本稿では、Scaffoldに対して上記のような変更を加える方法に関して、説明します。
対象読者
- ActionScriptやAIRのプログラマー
- Rubyプログラマー
- 生産性の向上を目指すSEやSEマネージャ
必要な環境
本稿が対象とする開発環境は、次のとおりです。
- Ruby 1.86 以降
- Ruby on Rails 2.0.0 以降
解説の流れ
本稿では、Scaffoldをカスタマイズします。
カスタマイズした Scaffold で品目マスタメンテナンスアプリケーションを自動生成します。自動生成した品目マスタメンテナンスは、部品識別IDや手配区分IDなどからフォーカス遷移した場合に名称が表示されるなどの機能を兼ね備えています。また、数値項目である仕入契約単価では、数値以外を入力しようとするとエラーになるようになっており、契約日付などの日付項目では、「YYYY/MM/DD」もしくは「YY/MM/DD」などのフォーマットを受け付けるようになっています。
つまり、自動生成した時点で、前述した修正内容が既にソースに組み込まれているため、その分修正コストが削減できます。以降、次のような流れで解説を進めます。
- 「カスタマイズのもとになるジェネレータの格納場所」の説明
- 「カスタマイズを加えたジェネレータの配置場所」の説明
- フォーカスアウト時に名称を検索する機能を持たせる任意の列名を設定するための「フォーカスアウト時の名称検索マスタを用意する方法」の説明
- 「カスタマイズしたジェネレータのコード」の説明
- カスタマイズしたジェネレータを使用して「アプリケーションを生成する方法」の説明