2011年1月16日日曜日

Rails:簡易辞書システムを作成しよう

システム開発において、やはりデータ設計がしっかりできていないと、後々仕様変更などで苦労するものです。また、技術者の異動や、ユーザ(お客様)も人事異動により業務やシステムを知らない人がシステムのユーザになることも頻繁にあると思います。

データ中心アプローチ(DOA)の専門家ではありませんので、それは専門の書籍などで理解していただきたいと思いますが、やはりユーザと技術者とで認識のズレ(齟齬)がないように辞書があったほうが良いですね。

開発工程が進むにつれて、技術者も増えるので、情報共有という点でもはやり辞書(データのリファレンス的な物)は必要ですね。

気が向いたので、JRuby on Railsの環境で構築することにしました。

まずはJRubyをダウンロード。環境はWindows XP。(この環境はいずれ変えてしまうかも知れません)

http://jruby.org/download からJRuby1.5.6をダウンロードしました。Rubyの1.8.7相当になります。(>JRuby  -v で確認)
JRuby1.6.0.RC1もリリースされているようですが、Ruby1.8.7相当の方でとりあえず十分だと思うのでまずはこのバージョンを選択。

またWindows環境なので、JRuby 1.5.6 Windows Executable (md5, sha1) をダウンロード。
exe形式の実行ファイルなので、インストールすると、Pathにインストール先のbinディレクトリ(Windowsの場合フォルダと言いますが、ディレクトリという文言を使用させてもらいます)が追加されます。

次に Rails をインストール。バージョンを指定しないと Rails 3.0 以上がインストールされてしまうようで、2.3.xを指定します。
今回はバージョン2.3.xで現時点で最新の 2.3.8 を指定しました。

NetBeansもインストールされている環境なので、NetBeans上でRailsの開発もできるのですが、今回敢えてコマンドラインから環境を作ることにしました。

>gem install rails --version 2.3.8
JRuby limited openssl loaded. http://jruby.org/openssl
gem install jruby-openssl for full support.
Successfully installed activesupport-2.3.8
Successfully installed activerecord-2.3.8
Successfully installed rack-1.1.0
Successfully installed actionpack-2.3.8
Successfully installed actionmailer-2.3.8
Successfully installed activeresource-2.3.8
Successfully installed rails-2.3.8
7 gems installed
Installing ri documentation for activesupport-2.3.8...
Installing ri documentation for activerecord-2.3.8...
Installing ri documentation for rack-1.1.0...
Installing ri documentation for actionpack-2.3.8...
Installing ri documentation for actionmailer-2.3.8...
Installing ri documentation for activeresource-2.3.8...
Installing ri documentation for rails-2.3.8...
Installing RDoc documentation for activesupport-2.3.8...
Installing RDoc documentation for activerecord-2.3.8...
Installing RDoc documentation for rack-1.1.0...
Installing RDoc documentation for actionpack-2.3.8...
Installing RDoc documentation for actionmailer-2.3.8...
Installing RDoc documentation for activeresource-2.3.8...
Installing RDoc documentation for rails-2.3.8...

続いてデータベースはMySQLを使用するので、アダプタをインストールします。

>gem install activerecord-jdbcmysql-adapter
JRuby limited openssl loaded. http://jruby.org/openssl
gem install jruby-openssl for full support.
Successfully installed activerecord-jdbc-adapter-1.1.1
Successfully installed jdbc-mysql-5.1.13
Successfully installed activerecord-jdbcmysql-adapter-1.1.1
3 gems installed
Installing ri documentation for activerecord-jdbc-adapter-1.1.1...

いよいよプロジェクトを作成します。
今回プロジェクト名はnew_windとしました。データベースはデフォルトだとSQLiteが指定されるようなので、mysqlを指定します。
でも、作成されるconfig/database.ymlのadapterにmysqlと指定されてしますので、これを生成後にjdbcmysqlに変更する必要があります。

>rails new_wind --database=mysql
      exists
      create  app/controllers
      create  app/helpers
      create  app/models
      create  app/views/layouts
      create  config/environments
      create  config/initializers
      create  config/locales
      create  db
      create  doc
      create  lib
      create  lib/tasks
      exists  log
      create  public/images
      create  public/javascripts
      create  public/stylesheets
      create  script/performance
      create  test/fixtures
      create  test/functional
      create  test/integration
      create  test/performance
      create  test/unit
      create  vendor
      create  vendor/plugins
     途中省略
      create  log/development.log
      create  log/test.log

プロジェクトが作成できたら、カレントディレクトリをプロジェクトに移動します。
>cd new_wind

続いてデータベース作成です。
JRubyではなく、Rubyであれば >rake db:create で良いのですが、JRubyの場合、
>jruby -S db:create のように作成するようです。
ですが、このコマンドでデータベースを作成した場合、エンコーディングがutf8にならないようなので、mysqlのコマンドで作成しました。

mysql> create database new_wind_development default character set utf8;

あまり真面目に考えていないので、まず作成するテーブルは”ドメイン”と”辞書”の二つ。
ドメインはその項目が紐づく業務をしていします。例えば、販売管理、会計など。
辞書は項目、つまりデータです。名称(論理名)と、物理名、型、桁数、説明(備考)、ドメイン等を登録したいと思います。

では早速scaffoldで作成。(以下は辞書のテーブルの足場(scaffold)を作成)

>jruby -S script/generate scaffold dictionary logical_name:string physical_name:string dom
ain_id:integer data_type:string data_digit:string remark:text
JRuby limited openssl loaded. http://jruby.org/openssl
gem install jruby-openssl for full support.
      exists  app/models/
      exists  app/controllers/
      exists  app/helpers/
      create  app/views/dictionaries
      exists  app/views/layouts/
      exists  test/functional/
      exists  test/unit/
      exists  test/unit/helpers/
      create  public/stylesheets/
      create  app/views/dictionaries/index.html.erb
      create  app/views/dictionaries/show.html.erb
      create  app/views/dictionaries/new.html.erb
      create  app/views/dictionaries/edit.html.erb
      create  app/views/layouts/dictionaries.html.erb
      create  public/stylesheets/scaffold.css
      create  app/controllers/dictionaries_controller.rb
      create  test/functional/dictionaries_controller_test.rb
      create  app/helpers/dictionaries_helper.rb
      create  test/unit/helpers/dictionaries_helper_test.rb
       route  map.resources :dictionaries
  dependency  model
      exists    app/models/
      exists    test/unit/
      exists    test/fixtures/
      create    app/models/dictionary.rb
      create    test/unit/dictionary_test.rb
      create    test/fixtures/dictionaries.yml
      exists    db/migrate
      create    db/migrate/20110115075258_create_dictionaries.rb

続いてテーブルの作成。

>jruby -S rake db:migrate
(in C:/Documents and Settings/t0079/My Documents/NetBeansProjects/new_wind)
rake aborted!
The driver encountered an unknown error: com.mysql.jdbc.exceptions.jdbc4.MySQLSy
ntaxErrorException: Unknown database 'new_wind_development'

ここで、database.ymlのadapterにjdbcmysqlを指定したのに、jdbcドライバな無いと怒られてしまいました。
(実はデータベースも名前を間違えて作成してしまったので、その点も指摘されたメッセージが表示されています)

lib/jarディレクトリの下にJDBCドライバを配置しなければなりません。
jarディレクトリは存在しないと思いますので、jarディレクトリを作成し、その中にMySQLのドライバの含まれたjarファイルを置いてください。
気をとりなおして再度テーブルを作成。

>jruby -S rake db:migrate
(in C:/Documents and Settings/t0079/My Documents/NetBeansProjects/new_wind)
==  CreateDictionaries: migrating =============================================
-- create_table(:dictionaries)
   -> 0.0310s
   -> 0 rows
==  CreateDictionaries: migrated (0.0310s) ====================================

今度は成功。

続いてテスト用初期データ登録のためのmigrationを作成します。

>jruby -S
script/generate migration add_dictionary_data
JRuby limited openssl loaded. http://jruby.org/openssl
gem install jruby-openssl for full support.
      exists  db/migrate
      create  db/migrate/20110115075505_add_dictionary_data.rb

TODO:あとで、ここにテストデータのdb/migrate/20110115075505_add_dictionary_data.rbファイルの内容を追加します。

データ登録はmigrateの実行で行います。

>jruby -S
rake db:migrate
(in C:/Documents and Settings/t0079/My Documents/NetBeansProjects/new_wind)
==  AddDictionaryData: migrating ==============================================
==  AddDictionaryData: migrated (0.2970s) =====================================

これで、データが登録されました。
次は、ドメインを選択(プルダウン)で指定できるようにしましょう。

0 件のコメント:

コメントを投稿