いよいよ...webアプリケーションを作ってみる!
ようやく、データベースを使ったwebアプリケーション作成の準備が整った。で、何を作ろうか...。検索してみると、みんないろんなものを作っている。ToDoリスト、日記、ブログ、アドレス帳、料理レシピ集、フォトアルバム、お店ガイド、...等々。呼び方はいろいろだけど、出来上がりのwebアプリケーションの骨格はみな同じだ。webブラウザを通してデータベースにアクセスして、データの追加、削除、表示が出来るようになっている。
これってmysqlコマンドで、データベースにアクセスするのと似ている。あとは見せ方の問題なのか...。タイトルと写真があればフォトアルバム、やるべきことがタイトルになっていればToDoリスト、今日の出来事なんてタイトルなら日記になるのか...。
それでは何を作るかではなく、どんなタイトルを付けるかを決めれば良いのだ。しばし考え「ソフトウェアブック」に決定。パソコンにインストールしているソフトウェアの「名称」「説明」「ダウンロード先」などを管理するリスト。はじめの一歩としては丁度いい規模かも。
Ruby on Railsプロジェクトの開始
- ターミナルで、railsappフォルダに移動して、softwarebookプロジェクトを作成する。コマンドは「rails softwarebook」と単純で分かり易い!
MacBook:~ zari$ cd ~/railsapp MacBook:~/railsapp zari$ rails softwarebook
- softwarebookフォルダが作成され、フォルダとファイルがズラズラと作成された。こちらは複雑で分かりにくい...。
create create app/controllers create app/helpers create app/models create app/views/layouts create config/environments create components create db create doc create lib create lib/tasks create log create public/images create public/javascripts create public/stylesheets create script/performance create script/process create test/fixtures create test/functional create test/integration create test/mocks/development create test/mocks/test create test/unit create vendor create vendor/plugins create tmp/sessions create tmp/sockets create tmp/cache create Rakefile create README create app/controllers/application.rb create app/helpers/application_helper.rb create test/test_helper.rb create config/database.yml create config/routes.rb create public/.htaccess create config/boot.rb create config/environment.rb create config/environments/production.rb create config/environments/development.rb create config/environments/test.rb create script/about create script/breakpointer create script/console create script/destroy create script/generate create script/performance/benchmarker create script/performance/profiler create script/process/reaper create script/process/spawner create script/runner create script/server create script/plugin create public/dispatch.rb create public/dispatch.cgi create public/dispatch.fcgi create public/404.html create public/500.html create public/index.html create public/favicon.ico create public/robots.txt create public/images/rails.png create public/javascripts/prototype.js create public/javascripts/effects.js create public/javascripts/dragdrop.js create public/javascripts/controls.js create public/javascripts/application.js create doc/README_FOR_APP create log/server.log create log/production.log create log/development.log create log/test.log
データベースの設定ファイルを登録した
- RailsからMySQLに接続するための設定は、「~/railsapp/softwarebook/config/database.yml」ファイルに保存するそうだ。テキストエディットで開いて、データベースの設定を確認する。
- development:、test:、production: のように設定が分かれており、それぞれ開発環境、テスト環境、製品環境(本稼働環境)として個別にデータベースを登録して、それぞれの環境で稼働出来るそうだ。
- 今回はdevelopment:(開発環境)のデータベースだけ設定して試してみる。password:の項目に「'0123'」を設定した。(MySQL 権限の初期設定で登録したrootユーザのパスワード)
... 途中省略 ... development: adapter: mysql database: softwarebook_development username: root password: '0123' host: localhost ... 途中省略 ...
- ちなみにこの設定だと「mysqlを通して、softwarebook_developmentというデータベースを利用、ユーザ名:root、パスワード:0123、localhostから接続する。」という意味。
注意!!:ハマったこと
-
-
- Railsが自動作成するdatabase.ymlファイルには、development:とtest:の項目で、「password:」直後の「スペース1文字分」が抜けている。パスワードを入力する時には、1スペース間隔を空けて入力すること。
-
-
-
- パスワードを数字だけで設定した場合、先頭の数字が「0」ゼロで始まると、「password: 0123」とすると「0」を省略してMySQLとやり取りしてしまうようだ。「0123」をパスワードとして設定するのであれば、「password: '0123'」のように、シングルクォーテーションで囲む必要あり。(自分の環境だとエラーが出て接続出来なかった...。なんで数字だけの、しかも先頭が0で始まるパスワードにしちゃったんだろ...。運が悪い、けど...一つ利口になった。)
-
OK ...... password: '0123' NG ...... password:'0123' スペースなし NG ...... password: 0123 ' 'がない
mysqlで接続し、データベースを新規作成した
- ターミナルから、rootユーザでMySQLに接続(太字の部分を入力した)
MacBook:~ zari$ mysql -u root -p Enter password:
- データベースの新規作成(太字の部分を入力した)
mysql> create database softwarebook_development; Query OK, 1 row affected (0.00 sec)
- 今作ったデータベースを確認してみる。
mysql> show databases;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Database |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
information_schema | |
mysql | |
softwarebook_development | |
test |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- mysqlでの接続作業はここまで。
Railsのモデルを作成した。
- ここで言うモデルとは、データベースのテーブルの中の1レコード分を表現するものだと、自分なりに解釈した。
- モデル名は「software」とし、以下の要素を保持することにした。
- ソフトウェア名:title
- 概要説明:description
- ダウンロード先アドレス:url
MacBook:~ zari$ cd ~/railsapp/softwarebook MacBook:~/railsapp/softwarebook zari$ script/generate model software
- ディレクトリを~/railsapp/softwarebookに移動して、太字のコマンドを入力すると、またまたフォルダとファイルが生成された。
exists app/models/ exists test/unit/ exists test/fixtures/ create app/models/software.rb create test/unit/software_test.rb create test/fixtures/softwares.yml create db/migrate create db/migrate/001_create_softwares.rb
データベースにテーブルとフィールドを登録
- Railsのモデルの設計にあわせて、MySQLのテーブルとフィールドを設定した。設定はRailsのマイグレーションという機能から行った。
- マイグレーションとは、開発過程でのデータベースの変更履歴を管理するような仕組みらしい。
- マイグレーションの設定ファイルは「~/railsapp/softwarebook/db/migrate/001_create_softwares.rb」で行う。
- さっきモデルを作成した時に自動的に生成されたのだ。
- データベースの変更があるたびに 002_*.rb、003_*.rb、...のように先頭にバージョン番号が付加されたファイルが増えていくらしい。
- テキストエディットで開き、コメント行# t.column :name, :stringを参考にして、title、description、urlというフィールドを作成する行を追加した。(太字の部分を追加した)
class CreateSoftwares < ActiveRecord::Migration def self.up create_table :softwares do |t| # t.column :name, :string t.column :title, :string t.column :description, :text t.column :url, :string end end def self.down drop_table :softwares end end
- 保存したら、ターミナルから以下のコマンドを実行した。(太字の部分を入力した)
MacBook:~/railsapp/softwarebook zari$ rake migrate (in /Users/zari/railsapp/softwarebook) == CreateSoftwares: migrating ================================================= -- create_table(:softwares) -> 0.0332s == CreateSoftwares: migrated (0.0334s) ========================================
- 無事、テーブルとフィールドが作成されたようだ。
scaffoldでアプリケーションの基盤が完成!
- あとは、次のコマンドで全てが片付いた。この1行にRuby on Railsの魅力が凝縮されているらしい...。
MacBook:~/railsapp/softwarebook zari$ script/generate scaffold software
- 相変わらズラズラと、フォルダとファイルが...。
exists app/controllers/ exists app/helpers/ create app/views/softwares exists test/functional/ dependency model exists app/models/ exists test/unit/ exists test/fixtures/ identical app/models/software.rb identical test/unit/software_test.rb identical test/fixtures/softwares.yml create app/views/softwares/_form.rhtml create app/views/softwares/list.rhtml create app/views/softwares/show.rhtml create app/views/softwares/new.rhtml create app/views/softwares/edit.rhtml create app/controllers/softwares_controller.rb create test/functional/softwares_controller_test.rb create app/helpers/softwares_helper.rb create app/views/layouts/softwares.rhtml create public/stylesheets/scaffold.css
アプリケーションの確認
- Railsの開発用サーバーを起動すると、下記のような表示が出てスタートする。
MacBook:~/railsapp/softwarebook zari$ script/server => Booting WEBrick... => Rails application started on http://0.0.0.0:3000 => Ctrl-C to shutdown server; call with --help for options [2006-10-22 14:04:12] INFO WEBrick 1.3.1 [2006-10-22 14:04:12] INFO ruby 1.8.2 (2004-12-25) [universal-darwin8.0] [2006-10-22 14:04:12] INFO WEBrick::HTTPServer#start: pid=950 port=3000
- webブラウザを起動して、http://0.0.0.0:3000/softwares へアクセスしてみる。多分こんな画面が表示されるはず。
- 英語表示で見た目の工夫もないが、データの新規作成、一覧表示、個別表示、修正、削除が出来るようになっていた。基本機能が実現されているので、あとは表示方法のカスタマイズをしていくことで洗練させていけば良いとのこと。
世界一時間のかかったRuby on Railsでの開発...。
ここまで長かった...。web上では「10分で作る」とか「15分で作る」...などというページが多数あるが、なんと!!1週間近くもかかってしまった...。(これは自分自身のスキルの問題で、決してRuby on Railsの効率が悪い訳ではない!)おそらく世界一時間のかかったRuby on Rails開発でしょう。(しかも完成しているのは、まだ基盤だけ)開発の早さを謳うページは数えきれないほどあるのだから、たまにはこんなページがあっても良いかもしれない!?。
ここまでやってみて感じたことは、とりあえずでも、こんなふうに動いてしまうとは素晴らしいことだ!一度動いてしまうと、あとは試行錯誤で少しずつ前進して行ける気になる。スクリプト言語というのはコンパイルとか、ビルドとか、そんなワンクッションがなく修正したらすぐ反映するところが手軽で良いかな。
きっと、今なら出来るさ...。10分、15分というのは無理かもしれないけど、30分くらいあれば...。scaffoldくらいまでならね。