Ruby on Rails の開発環境つくってみた
普段、Javaでジャバジャバしてる私がRuby on Railsの環境構築した時の備忘録であり、
SIer様が言うところの新規参画者向けの"環境構築手順書"的な位置づけです。
ベストプラクティスではないと思いますが、構築に際して下記要件を意識しています。
裏付けはありませんが、WindowsとRubyの相性が良く無さそうな事とMac環境に
依存することも避けたい、本番環境は大抵LinuxなのでVirtualBox+Vagrantで
仮想Linux環境を作ることにしました。
仮想環境を作成する為、PCのメモリは4GB以上は欲しいです。
コーディングに関してテキストエディタ派とIDE派で分かれているようですが、
普段JavaでIDEを使うことに馴れてしまっている事もあるので、IDEを選択しました。
Rubu on Railsに対応したIDEですが、メジャーどころでNetBeansとRubyMineがあり、
NetBeansは無償かつJavaEE系の開発にも最適化されているので使いたいところですが、
残念ながら公式でサポート終了*していることもあるので今回はRubyMineを使ってみます。
*Ruby, Ruby on Rails Support Discontinued in NetBeans IDE
[2015/3/1追記]
RubyMineを導入したかったのですが、知識不足での環境構築が良い感じに出来なかった為、
しばらくはテキストエディタを使っていきたいと思います。
補完・デバッグはエディタのプラグインやデバッグ用Gemでどうにか出来ればと思います。
※開発環境の為、セキュリティ対策は皆無ですので、注意してくださいね。
1.VirtulBoxのインストール
以下のサイトから最新版のプログラムをダウンロードし、インストールします。 https://www.virtualbox.org/
2.Vagrantのインストール
以下のサイトから最新版のプログラムをダウンロードし、インストールします。 https://www.vagrantup.com/
インストールが完了したらターミナルからバージョンを確認します。
$ vagrant --version
Vagrant 1.7.2
3.仮想環境を作成する。
Vagrantでは仮想イメージをBoxと呼ばれるパッケージで管理します。
仮想マシンを作成、OSを0からインストールしても良いのですが、ここではさっさと開発環境を
作成してしまいたいので、公開されているBoxファイルを使用します。
今回はサーバ構成自動化ツールのChefが公開しているBoxを使いたいと思います。 https://vagrantcloud.com/chef
CentOS6.6のBoxは chef/centos-6.6
になります。
まず、Box名を指定して初期設定をします。
$ vagrant init chef/centos-6.6
カレントディレクトリに Vagrantfile
が作成されるのでこれを修正します。
# 以下の行のコメントを外す(ブリッジ接続になります。) # config.vm.network "public_network" # 以下の行のコメントを外す(メモリ割り当てが1024MBになります。) # config.vm.provider "virtualbox" do |vb| # # Customize the amount of memory on the VM: # vb.memory = "1024" # end
今回はブリッジ接続にしましたが、ホストオンリーアダプタにする場合は、
以下の行のコメントを外します。
# config.vm.network "private_network", ip: "192.168.33.10"
編集が終わったら仮想マシンを構築、起動します。
$ vagrant up
初回起動時にブリッジするインタフェースを選択するよう聞かれるので指定します。
==> default: Available bridged network interfaces: 1) en0: Wi-Fi (AirPort) 2) en1: Thunderbolt 1 3) en2: Thunderbolt 2 4) p2p0 5) awdl0 6) bridge0 ==> default: When choosing an interface, it is usually the one that is ==> default: being used to connect to the internet. default: Which interface should the network bridge to? 1
起動したら試しにターミナルからsshで接続してみます。
$ vagrant ssh
実行すると仮想環境にログインできます。
$ vagrant ssh Last login: Tue Feb 24 19:29:31 2015 from 10.0.2.2 [vagrant@localhost ~]$
念の為、OSのバージョンを確認してみます。
[vagrant@localhost ~]$ cat /etc/redhat-release CentOS release 6.6 (Final)
続いてネットワークの構成を確認します。
[vagrant@localhost ~]$ ifconfig eth0 Link encap:Ethernet HWaddr 08:00:27:6B:1C:DD inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe6b:1cdd/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:379 errors:0 dropped:0 overruns:0 frame:0 TX packets:241 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:42250 (41.2 KiB) TX bytes:33387 (32.6 KiB) eth1 Link encap:Ethernet HWaddr 08:00:27:56:51:14 inet addr:192.168.1.103 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: 2408:212:5e0:1200:a00:27ff:fe56:5114/64 Scope:Global inet6 addr: fe80::a00:27ff:fe56:5114/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:12 errors:0 dropped:0 overruns:0 frame:0 TX packets:10 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2436 (2.3 KiB) TX bytes:1264 (1.2 KiB)
※eth1がブリッジアダプタで、開発時はこのアドレスにアクセスします。
問題が無ければ、ここで一度 yum update
でシステムのアップデートをします。
[vagrant@localhost ~]$ sudo yum update
以上で仮想環境の作成が完了です。
これからは開発環境として関連するソフトウェアのインストールをしていきます。
※再起動した際、共有フォルダのマウントで以下のエラーが発生した場合
==> default: Mounting shared folders... default: /vagrant => /Users/[ユーザーid] Failed to mount folders in Linux guest. This is usually because the "vboxsf" file system is not available. Please verify that the guest additions are properly installed in the guest and can work properly. The command attempted was: mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3` vagrant /vagrant mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` vagrant /vagrant The error output from the last command was: /sbin/mount.vboxsf: mounting failed with the error: No such device
VirtualBox の Guest additions を再セットアップすると治るようです。
[vagrant@localhost ~]$ sudo /etc/init.d/vboxadd setup Removing existing VirtualBox non-DKMS kernel modules [ OK ] Building the VirtualBox Guest Additions kernel modules Building the main Guest Additions module [ OK ] Building the shared folder support module [ OK ] Building the OpenGL support module [ OK ] Doing non-kernel setup of the Guest Additions [ OK ] Starting the VirtualBox Guest Additions [ OK ] [vagrant@localhost ~]$
参考
VirtualBox + Vagrant で自分用のboxファイルを作成する - uehatsu's tech blog
Hashicorp社の新サービスATLASと周辺ツールのまとめ
Vagrantのネットワーク周りのあれこれ | Septeni Engineers' Blog | セプテーニ エンジニアブログ
vagrant upでmountエラーがでる場合の対処法 - Qiita
4.開発環境を構築する。
仮想環境に必要な以下のソフトウェアをインストールします。
Rubyのバージョン管理システムについてはrvmとrbenvの2つが良く使用されていますが、
rbenvの方がシンプルと言うことでrbenvを採用します。
4-1. ライブラリ群
必要なライブラリをまとめてyumインストールします。
$ sudo yum install kernel-devel git gcc gcc-c++ openssl-devel zlib-devel libyaml-devel libffi-devel readline-devel tcl-devel tk-devel gdbm-devel bison libxml2-devel libxslt-devel patch sqlite-devel
インストールするライブラリ
kernel-devel, git, gcc, gcc+, openssl-devel, zlib-devel, libyaml-devel, libffi-devel,
readline-devel, tcl-devel, tk-devel, gdbm-devel, bison, libxml2-devel, libxslt-devel,
patch, sqlite-devel
4-2. rbenv
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
設定ファイル .bash_profile
に必要な設定を追加します。
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile $ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
設定ファイルを再読込します。
$ source .bash_profile
バージョンを確認します。
$ rbenv --version rbenv 0.4.0-138-g4d0c289
ruby-buildをGitHubリポジトリからクローンします。
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
参考
rbenv/README.md at master
ruby-build/README.md at master
4-3. ruby
インストール可能なバージョン一覧を確認する。
$ rbenv install --list
可能な限り最新の安定版をインストールする。
$ rbenv install -v 2.2.0
rbenvを更新し、インストールされているバージョン一覧を確認する。
# 更新 $ rbenv rehash # 一覧表示 $ rbenv versions 2.2.0
インストールしたバージョンに切り替えて、確認する。
# 切り替え $ rbenv global 2.2.0 # 確認 $ ruby --version ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-linux]
$ irb irb(main):001:0> puts "こんにちは世界" こんにちは世界 => nil irb(main):002:0> [ctrl+Dで終了]
参考
Linux - Ruby 2.1.x ソースからコンパイルインストール - CentOS 6.5
rbenv を使って ruby をインストールする(CentOS編) - Qiita
4-4. bundler
Gemパッケージの管理ツールであるbundlerをインストールします。
$ rbenv exec gem install bundler $ rbenv rehash
参考
Command Reference - RubyGems Guides
5.Railsプロジェクトを作成する。
標準でゲストOSの /vagrant
フォルダが共有フォルダになっているのでRailsプロジェクト用に
フォルダを作成する。
$ mkdir /vagrant/rails $ cd /vagrant/rails
Gemfileを作成
$ rbenv exec bundle init
Gemfileを修正
source "https://rubygems.org" # railsは最新バージョンを指定する。 gem "rails", "4.2.0"
ちなみにRailsの最新バージョンを確認する場合
[vagrant@localhost rails]$ gem search -r ^rails$ *** REMOTE GEMS *** rails (4.2.0)
全てのバージョンを確認する場合
[vagrant@localhost rails]$ gem search -r ^rails$ -a *** REMOTE GEMS *** rails (4.2.0, 4.1.9, 4.1.8, 4.1.7.1, 4.1.7, 4.1.6, 4.1.5, 4.1.4, 4.1.3, 4.1.2, 4.1.1, 4.1.0, 4.0.13, 4.0.12, (以下省略)
-r
オプションはリモートを検索対象に、^rails$
は正規表現で [行頭]rails[行末] を表している。
Rails を ./vender/bundle ディレクトリにインストールする。
$ rbenv exec bundle install --path ./vendor/bundle
インストールされたGemを確認する。
rbenv exec bundle list $ rbenv exec bundle list Gems included by the bundle: * actionmailer (4.2.0) * actionpack (4.2.0) 〜略〜 * rails (4.2.0) 〜略〜
Railsプロジェクトを作成する。
$ rbenv exec bundle exec rails new project_name --skip-bundle
--skip-bundleオプションを必ず指定すること。
指定しない場合、Rubyのインストール先にGemパッケージがインストールされてしまいます。
作成したRailsプロジェクトのフォルダに移動し、bundle install
を実行する。
$ cd project_name/ $ pwd /vagrant/rails/project_name $ rbenv exec bundle install --path ./vendor/bundle
GemパッケージをGitの管理対象外とする為、./vendor/bundle
ディレクトリのパスを .gitignore
に追加する。
$ echo './vendor/bundle' >> .gitignore
Railsアプリケーションを起動してみます。
$ rbenv exec bundle exec rails server --binding=0.0.0.0
多くのWebサイトの情報ではデフォルトで0.0.0.0にバインドすると書いてあったものの、
動かしてみるとlocalhostにバインドされてしまい、他の端末からアクセスできなかったので
-binding
オプションで指定してあげます。
(どうやらRails4.2.0から変更があったみたいですね。)
# localhostにバインドされている。(デフォルト) => Rails 4.2.0 application starting in development on http://localhost:3000 # 0.0.0.0にバインドする。 => Rails 4.2.0 application starting in development on http://0.0.0.0:3000
ホストPC(Mac or Windows)からアクセスして Welcome aboard 画面が表示されればRailsの
起動確認は完了です。
Rails本体をインストールするためのbundle installとrailsアプリとしてのbundle installがあって、
ちょっと分かりづらいかな・・・
参考
rbenv インストールから Bundler を使用した Rails のローカルインストールと起動まで - Qiita
Rubyアソシエーション: アプリケーションの土台作成
rails serverでポートを指定して起動する - 感謝のプログラミング 10000時間
Rails4.2beta1をインストールして最初にはまったこと TECHSCORE BLOG
## 6.IDEをインストールする。
ここまで来たら既にテキストエディタで開発ができるようになっていると思います。
だいぶ長くなってしまったので、続きは後半で。。。