VPSでRuby開発をしよう

第4回Railsでの開発は本当に簡単か?

Ruby連載の第4回目にあたる今回は、Webスケジューラ作成をちょっとお休みして、Ruby on Rails(以下Rails)ではアプリを本当に簡単に作成できるのかを実験してみましょう。

本連載では、@YMCのVPSサービスを用いて説明を進めていきます。利用するVPSサービスにより細かな違いはありますが、大きな流れは同じですから、ご利用の環境に合わせて読み替えてください。

“とりあえず動く”アプリを作ってみる

プロジェクトの作成

いきなりですが、名前と電話番号、メールアドレスからなる人名録を作ってみましょう。以下のコマンドを実行します。

$ rails -d mysql addrbook

引数のうち、⁠-d mysql」はDBエンジンにMySQLを使用するという指定、⁠addrbook」は作成するプロジェクトの名前です。どんな名前でも構いませんが、わかりやすくて長すぎない名前がいいでしょう。

プロジェクト名と同じaddrbookというディレクトリができますので、カレントにします。lsコマンドで見てみると、たくさんのサブディレクトリが作成されています図1⁠。

図1 Railsにより作成されるサブディレクトリなど
$ ls -la
total 68
drwxrwsr-x 13 webmaster webmaster  4096 Jun 12 11:24 .
drwxr-sr-x  6 webmaster webmaster  4096 Jun 12 11:24 ..
drwxrwsr-x  6 webmaster webmaster  4096 Jun 12 11:24 app
drwxrwsr-x  5 webmaster webmaster  4096 Jun 12 11:24 config
drwxrwsr-x  2 webmaster webmaster  4096 Jun 12 11:24 db
drwxrwsr-x  2 webmaster webmaster  4096 Jun 12 11:24 doc
drwxrwsr-x  3 webmaster webmaster  4096 Jun 12 11:24 lib
drwxrwsr-x  2 webmaster webmaster  4096 Jun 12 11:24 log
drwxrwsr-x  5 webmaster webmaster  4096 Jun 12 11:24 public
-rw-rw-r--  1 webmaster webmaster   307 Jun 12 11:24 Rakefile
-rw-rw-r--  1 webmaster webmaster 10011 Jun 12 11:24 README
drwxrwsr-x  3 webmaster webmaster  4096 Jun 12 11:24 script
drwxrwsr-x  7 webmaster webmaster  4096 Jun 12 11:24 test
drwxrwsr-x  6 webmaster webmaster  4096 Jun 12 11:24 tmp
drwxrwsr-x  3 webmaster webmaster  4096 Jun 12 11:24 vendor

続いて、以下のコマンドを実行しましょう。

$ script/generate scaffold item name:string phone:string mail:string

最後の3つの引数は、データ型の定義です。ここでは、名前を格納するname、電話番号を格納するphone、メールアドレスを格納するmailの3つを定義し、いずれも文字列型(string)としました。

次に、このプロジェクトからMySQLデータベースを利用するための設定ファイルを一部変更します。config/database.ymlファイルのdevelopmentセクションを、viなどのエディタでリスト1のように変更してください。赤文字の部分はMySQLのユーザ名とパスワード、青文字の部分は作成するMySQLのデータベース名です。いずれも次の手順で使用します。

リスト1 config/database.ymlの変更箇所
(略)

development:
  adapter: mysql
  encoding: utf8
  reconnect: false
  database: addrbook_development
  pool: 5
  username: addruser
  password: addruser
  socket: /var/lib/mysql/mysql.sock

(以下略)

MySQLでの準備

ここでいったんRailsから離れて、MySQLで作業します。コマンドラインでの操作方法を紹介しますが、phpMyAdminなどのツールを使ってもかまいません。

まずはMySQLにログインして、このプロジェクト専用のユーザを作成します。

$ mysql -u root -p
(略)
mysql> CREATE USER 'addruser'@'%' IDENTIFIED BY 'addruser';

続いて空のデータベースを作成し、今作成したユーザaddruserに権限を与えて、MySQLからログアウトします。

mysql> GRANT ALL PRIVILEGES ON `addrbook_development` . * TO 'addruser'@'%' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
mysql> exit

これで、MySQLでの準備作業が終わりました。

MySQLテーブルの作成

次は、実際にデータを格納するMySQLテーブルの作成です。といってもMySQLのクエリを実行する必要は無く、シェルで以下のコマンドを実行するだけです。

$ rake db:migrate

これだけでscript/generate scaffold~での指定に基づき、addrbook_developmentデータベースにitemテーブルが作成されます。

ブラウザでのアプリ実行

ここまでの手順で、⁠とりあえず動く⁠アプリの開発は終わりました。実際の動作を見てみましょう。

RailsはWEBrickという簡易型のhttpサーバを備えていて、テスト用なら十分な機能を持っています。以下のコマンドでWEBrickを起動します。

$ script/server

図2のように、サーバのステータス画面が表示されます。

図2 WEBrickの起動
$ script/server

=> Booting WEBrick
=> Rails 2.3.2 application starting on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2009-06-12 12:14:41] INFO  WEBrick 1.3.1
[2009-06-12 12:14:41] INFO  ruby 1.9.1 (2009-05-12) [i686-linux]
[2009-06-12 12:14:41] WARN  TCPServer Error: Address already in use - bind(2)
[2009-06-12 12:14:41] INFO  WEBrick::HTTPServer#start: pid=20225 port=3000

なお、⁠Ctrl-C to shutdown server」と表示されているとおり、Ctrl+Cキーを押せばサーバを終了してシェルに戻ります。

ブラウザからアクセスするにはデフォルト設定の場合、URLにポート番号3000を加えます。たとえば「rails.gihyo.jp」というホスト名なら、⁠http://rails.gihyo.jp:3000/」という形になります。

アクセスすると、図3のような画面が表示されます。これはいわゆるウェルカム画面で、ルーティングを適宜設定すればアプリの画面をデフォルトで表示できます。

図3 Railsの⁠ウェルカム⁠画面
図3 Railsの“ウェルカム”画面

今回は説明の意味も含め、URLでアプリを指定します。⁠http://rails.gihyo.jp:3000/items/」のように、末尾に「items/」を加えてアクセスしてみてください。図4のような画面が表示されるでしょう。なんとも素っ気無い画面ですが、よく見れば「Name」⁠Phone」⁠Mail」と、先ほど定義した項目名が並んでいます。

図4 作成したアプリの初期画面
図4 作成したアプリの初期画面

下の方に「New item」というリンクがありますので、クリックしてみましょう。図5のような入力画面が表示されます。

図5 新規データの登録画面
図5 新規データの登録画面

適当にデータを入れて、⁠Create」ボタンをクリックします。図6のように、データが正常に登録されたと表示されます。ここで「Edit」をクリックすると再編集画面、⁠Back」なら一覧画面に変わります。

図6 データの登録結果
図6 データの登録結果

今回のまとめ

このように、プロジェクト名の指定やデータ型の定義、DBユーザと空のデータベース作成といった作業はありますが、全くコードを書かなくても簡単なアプリを作成できることは、ご理解いただけたでしょうか。

なお、Rubyの知識は不可欠ですが、コードを追加して機能を強化することも可能です。その場合でも、コードを全て自分で記述する場合と比べ、労力がはるかに少なくて済むでしょう。

画面周りも、テンプレートの修正などによりカスタマイズできます。

次回は、日本語表示が可能なWebスケジューラの作成を目指します。

Railsインストールに失敗したら

環境によってはRailsのインストール時にエラーメッセージが表示されたり、RailsからMySQLを利用しようとするとエラーになることがあります。その場合は、以下の点に気を付けてRubyとRailsを再インストールしましょう。

Rubyインストールの前に開発用パッケージ類をインストールする

たとえばCentOSの場合、Rubyをインストールする前に下記のコマンドを実行しましょう。

$ yum install gcc bison zlib-devel mysql-devel openssl-devel

続いてRubyをインストールしますが、既にソースからコンパイルしていた場合は、ソースを展開したディレクトリを削除してから展開し直し、再コンパイルします。

MySQL/Rubyのインストール

MySQLを利用するために、⁠MySQL/Ruby」のインストールが必要になる場合があります(MySQLとRubyではなく、⁠MySQL/Ruby」という名称です⁠⁠。

RailsからMySQLを利用する際にエラーになるようなら、MySQL/Rubyのソースをダウンロードして展開した後、展開したディレクトリに移動してから以下の手順でインストールしましょう。なお、MySQL/RubyをRuby 1.9.1で利用する場合には、最新版のMySQL/Ruby 2.8.1を利用する必要があります(6月現在⁠⁠。

ダウンロードするバージョンには注意してください。

$ ruby extconf.rb --with-mysql-config
$ make
$ make install

CentOSの場合でmysql-develパッケージが未インストールの場合には、あらかじめyumコマンドなどでインストールしておいてください。

おすすめ記事

記事・ニュース一覧