【環境ごとまるっと提供】Ruby on Rails に触れてみよう

# 環境ごとまるっと提供とは
webアプリ構築の勉強を始めようとした場合、書籍やサイトを参考にしながら実際にやってみるというのは、非常に有効な手段です。
一方で、参考にした情報だけではうまく動作させることができないケースが多い気がします。
そういった前提条件を調べているうちに、よくわからないエラーにハマり、結局挫折してしまうなんてことも多いのではないでしょうか？？もちろんそういうエラーを解決するのは、トラブルシューティングなども見据えると非常に力になって良いことだと思うのですが、挫折してしまって何もしなくなるのは本末転倒です。
各個人に芽生えた学習意欲が、「動かないから断念」という理由で消えてしまうのは非常にもったいないことだと思います。そういった意欲がなくなってしまうことを少しでも防げるように、本稿では、Vagrantを利用した環境構築スクリプトとセットで紹介し、動かしながら学習できるところまでサポートしたいと思います。
※VirtualBox&Vagrantの環境をセットアップしてあることが前提になってしまうのですが、それらのインストールは、非常に簡単ですので、「動かないから断念」問題になる可能性が低いです。

# Ruby on Railsとは
詳細は、いたとるところで紹介されているので割愛しますが、アジャイル開発などでよく利用されている、非常に生産性の高いWebアプリ構築用のフレームワークです。このフレームワークのコンセプトを基に、ruby以外でも似たようなフレームワークが生まれるほど偉大なフレームワークです。
簡単なCRUDを行うWebアプリであれば、コマンドを叩いていくだけでできあがってしまいます。
今回は、自動的にそこまで構築するスクリプトを紹介いたします。

# 環境構築用のVagrantfile
お手元の環境に、Vagrantがインストールされていれば、以下のVagrantfileとshell群を配備して、vagrant upしていただければ、自動的に環境が構築されます。（各種ミドルウェアを自動的にインストールしたうえで、railsのサンプルアプリを作成するところまで自動的に行います。）

まずは、お決まりのVagrantfileから。

```ruby:Vagrantfile
Vagrant::Config.run do |config|
  config.vm.box = "centos64_6_5"
  config.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-6.5_chef-provisionerless.box"

  config.vm.define "for_rails" do |for_rails|
    for_rails.vm.network "hostonly", "192.168.55.10"
    for_rails.vm.provision "shell", path: "setup_rbenv.sh"
    for_rails.vm.provision "shell", path: "make_ready4rails.sh"
  end

end
```

setup_rbenv.sh→[Vagrant Tips#3 rbenvを使ったRuby環境をセットアップする(centos)](http://qiita.com/yukimura1227/items/740be1aaff186baf7e42)をご参照ください。

次に、rails環境の準備を行うスクリプトです。

```bash:make_ready4rails.sh
#!/bin/bash

GEM_PATH="/usr/local/rbenv/shims/gem"

echo "stop iptables..."
sudo service iptables stop

echo "installing sqlite-devel..."
sudo yum install sqlite-devel -y

echo "installing gcc-c++..."
sudo yum install gcc-c++ -y

echo "${GEM_PATH} install rails..."
${GEM_PATH} install --no-document rails -v '4.1.1'

# execute create_rails_sample_app.sh by vagrant user
su - vagrant -c 'sh /vagrant/create_rails_sample_app.sh'
```

上記rails環境構築スクリプトの内部から呼び出されるrailsのサンプルアプリを作成するスクリプトです。

```bash:create_rails_sample_app.sh
#!/bin/bash

GEM_PATH="/usr/local/rbenv/shims/gem"
RAILS_PATH="/usr/local/rbenv/shims/rails"

echo "installing gem that sample app needs..."
echo "${GEM_PATH} install therubyracer..."
${GEM_PATH} install --no-document therubyracer -v '0.12.1'

echo "${GEM_PATH} install sqlite3..."
${GEM_PATH} install --no-document sqlite3 -v '1.3.9'

echo "${GEM_PATH} install json..."
${GEM_PATH} install --no-document json -v '1.8.2'

echo "creating rails sample app..."

cd ~

${RAILS_PATH} new todo

cd ~/todo

echo "gem 'therubyracer'" >> Gemfile
echo "gem 'rb-readline'" >> Gemfile

bundle install

~/todo/bin/rails generate scaffold task content:text

~/todo/bin/rake db:create

~/todo/bin/rake db:migrate
```

※各ファイルの改行コードは、\nとしてください。

# 動かしてみましょう
まずは、「vagrant ssh」でvagrantにアクセスしてください。
そして
「/home/vagrant/todo/bin/rails server」
というコマンドを実行してください。
そうすると、組み込みのwebサーバが立ち上がります。


上記サーバが立ち上がったら、ブラウザを起動して
http://192.168.55.10:3000/tasks/
にアクセスしてみてください。
英語ですが、contentというカラムを持ったtaskテーブルの登録・更新・削除といった機能を利用できるかと思います。

ここまでできたら、お好きなrailsの書籍でアレコレ実行してみましょう！！
勤勉な皆様が、環境構築にて挫折しないことを祈っております。
(慣れてきたら、環境にも目を当ててくださいね！)