はじめに
Ruby on RailsにはScaffoldというジェネレータがあり、テーブルのメンテナンスアプリケーションを自動生成してくれます。これによりRuby on Railsの生産性が向上しました。
そこで本稿では、Adobe AIR(以下、AIR)の生産性を向上させる試みの一環として、データベースをメンテナンスするAIRアプリケーションのジェネレータを作成します(以下、メンテナンスアプリケーションジェネレータ)。
ジェネレータの作成には、Ruby on Railsを利用します。
対象読者
- ActionScriptやAIRのプログラマー
- Rubyプログラマー
- 生産性の向上を目指すSEやSEマネージャ
必要な環境
- Ruby 1.86以上
- Ruby on Rails 1.2.5以上
- Flex SDK 3以上
※RoR 2.0以降は、web_serviceの部分が異なるので、対象外です。
AIR版メンテナンスアプリケーションジェネレータの作成
本稿では、まずRuby on Railsを使用して、AIR版メンテナンスアプリケーションジェネレータを作成し、次に作成したジェネレータで実際にアプリケーションを生成してみます。最後に、「Dictionaryの作成」と「ActionWebServiceへのFindById
の追加」に関して説明します。
Ruby on RailsによるAIR版メンテナンスアプリケーションジェネレータの作成
作成するジェネレータの格納場所
Ruby on Railsは以下の場所からユーザー定義のジェネレータを探すので、本稿では「RAILS_ROOT\lib\generators」配下に「air_maintenance」ディレクトリを作り、ジェネレータを配置する前提で話を進めます(図1、図2参照)。
- RAILS_ROOT\lib\generators
- RAILS_ROOT\vendor\generators
- RAILS_ROOT\vendor\plugins\任意のサブディレクトリ\generators
なお、「RAILS_ROOT」はRuby on Railsで生成したアプリケーションのルートディレクトリを表します。
ジェネレータクラスの作成
まず、ジェネレータクラスair_maintenance_generator
を作成します。
継承しているNamedBase
は、Ruby on Railsにおけるジェネレータの拡張元となるクラスです。class_collisions
メソッドで、これから生成するクラスが、RubyやRuby on Railsのクラスとして既に使用されていないか確認します。
また、directory
メソッドで、これから生成するクラスを格納するディレクトリを作成し、template
メソッドで、テンプレートを基にクラスを生成します。
第1引数でテンプレートディレクトリからのテンプレートファイルの相対パス、第2引数で生成されるファイルのRAILS_ROOTからの相対パスを指定します。
class AirMaintenanceGenerator < Rails::Generator::NamedBase def manifest record do |m| # Check for class naming collisions. m.class_collisions class_path, "#{class_name}" # API and test directories. m.directory File.join('air-source', class_path, class_name) # 一覧検索を行う MXML m.template 'list_mxml.rb', File.join('air-source', class_path, class_name, "#{class_name}List.mxml") # 一覧検索を行う Function m.template 'list_function.rb', File.join('air-source', class_path, class_name, "#{class_name}ListFunction.as") # データ型 m.template 'data_type.rb', File.join('air-source', class_path, class_name, "#{class_name}.as") # 新規作成を行う MXML m.template 'new_mxml.rb', File.join('air-source', class_path, class_name, "New#{class_name}.mxml") # 新規作成を行う Function m.template 'new_function.rb', File.join('air-source', class_path, class_name, "New#{class_name}Function.as") # 更新を行う MXML m.template 'update_mxml.rb', File.join('air-source', class_path, class_name, "Update#{class_name}.mxml") # 更新を行う Function m.template 'update_function.rb', File.join('air-source', class_path, class_name, "Update#{class_name}Function.as") # アプリケーションを実行するための XML m.template 'appxml.rb', File.join('air-source', class_path, class_name, "#{file_name}-app.xml") end end end
これから作成するAIRアプリケーションは、図3のように記事『Rails ActionWebServiceジェネレータのカスタマイズ』で作成したActionWebServiceと連携することで、データベース上のテーブルをメンテナンスできるというものです。