Rails開発のための仮想環境をvagrantでつくる

  • 31
    いいね
  • 1
    コメント

追記

Dockerでの構築方法を以下にまとめました。参考にしてみてください。
Docker で Rails5 の開発環境を「rails new」から構築する

はじめに

Railsの開発を進めたいが、手元のパソコンの環境は不用意に壊したくないという時、仮想環境で開発を行うと思います。
そのために、すぐに開発に使えるVagrantfileを作成しました。
こちらのgithubリポジトリで公開しています。

https://github.com/kawasin73/vagrant-centos-rails

インストールされるもの

  • CentOS 6.7
  • rbenv
  • ruby 2.2.2
  • sqlite
  • MySQL
  • Nokogiriに必要なライブラリ
  • ImageMagickに必要なライブラリ
  • Git
  • その他、必要そうなライブラリ

必要となる環境

開発環境は、VirtualBox と Vagrant を用いて構築します。

Mac OSX では、VirtualBox と Vagrant を Homebrewでインストールできます。

brew cask install virtualbox
brew cask install vagrant
vagrant plugin install vagrant-vbguest

Windows でインストールするときは、公式サイトからダウンロードしてください。

vagrant-vbguest は、Guest Additionを最新に更新してくれるpluginです。
このプラグインがない場合、2回目以降のvagrant upで、mount に失敗することがあります。
また、vagrant-vbguest をインストールした場合でも、vagrant upに失敗してしまうことがあるようです。その場合は、以下の記事を参考にしてください。

利用方法

git clone https://github.com/kawasin73/vagrant-centos-rails
cd vagrant-centos-rails
vagrant up
vagrant ssh

vagrant up を実行すると、CentOSのboxのダウンロードが始まりCentOSが立ち上がります。そして、初回起動時はprovisionが行われ、上に挙げたライブラリがインストールされます。
provisionerはShellなので、Vagrant と VirtualBox 以外に必要となる依存はありません。

また、ゲストOS上の~/dataにホストOSのカレントディレクトリをマウントしているので、ホストOSのIDEを使っての開発もできます。

vagrant ssh に成功したら、

cd data
gem install rails
rails new . --database=mysql --skip-turbolinks
rake db:create
bundle install

とするとRailsの開発を進められます。
詳しくは、@masuidriveさんの @masuidrive のRailsプロジェクトの始め方を参考にすると良いと思います。

Vagrantfile

Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|

  GUEST_RUBY_VERSION = '2.2.2'

  config.vm.box = "bento/centos-6.7"

  config.vm.hostname = "centos-6-for-rails"

  config.vm.network "forwarded_port", guest: 3000, host: 3000

  config.vm.network "private_network", ip: "192.168.33.10"

  config.vm.synced_folder ".", "/home/vagrant/data"

  config.vm.provider "virtualbox" do |vb|
    # Display the VirtualBox GUI when booting the machine
    vb.gui = false

    # Customize the amount of memory on the VM:
    vb.memory = ENV["VM_MEMORY"] || "1024"
  end

  config.vm.provision "shell", privileged: true, inline: <<-SHELL
    function install {
      echo installing $1
      shift
      yum -y install "$@" >/dev/null 2>&1
    }
    yum -y update >/dev/null 2>&1
    install "development tools"  gcc-c++ glibc-headers openssl-devel readline libyaml-devel readline-devel zlib zlib-devel
    install "Git" git
    install "sqlite" sqlite sqlite-devel
    # mysql 5.6
    yum install -y http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm >/dev/null 2>&1
    install "MySQL" mysql mysql-server mysql-devel
    chkconfig --add mysqld
    chkconfig --level 345 mysqld  on
    echo "Start and Initialize MySQL"
    service mysqld start >/dev/null 2>&1
    mysql -uroot <<SQL
-- SET ROOT PASSWORD --
UPDATE mysql.user SET Password=PASSWORD('password') WHERE User='root';
-- REMOVE ANONYMOUS USERS --
DELETE FROM mysql.user WHERE User='';
-- REMOVE REMOTE ROOT --
DELETE FROM mysql.user
WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
-- REMOVE TEST DATABASE --
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
-- RELOAD PRIVILEGE TABLES --
FLUSH PRIVILEGES;
CREATE USER 'rails'@'localhost';
SET PASSWORD FOR 'rails'@'localhost' = PASSWORD('password');
CREATE DATABASE development_db  DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE test_db DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON development_db.* to 'rails'@'localhost';
GRANT ALL PRIVILEGES ON test_db.* to 'rails'@'localhost';
SQL
    install "Nokogiri dependencies" libxml2 libxslt libxml2-devel libxslt-devel
    install "ImageMagick" ImageMagick ImageMagick-devel
    cp /etc/localtime /etc/localtime.org
    ln -sf  /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
    echo "ZONE=\"Asia/Tokyo\"" > /etc/sysconfig/clock
    service crond restart
  SHELL

  config.vm.provision "shell", privileged: false, inline: <<-SHELL
    echo installing rbenv
    git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
    git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
    echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
    echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
    source ~/.bash_profile
    echo 'gem: --no-ri --no-rdoc' >> ~/.gemrc
    echo installing ruby#{GUEST_RUBY_VERSION}
    rbenv install #{GUEST_RUBY_VERSION}
    rbenv global #{GUEST_RUBY_VERSION}
    echo installing Bundler
    gem install bundler -N >/dev/null 2>&1
  SHELL
end

MySQLは、初期化とユーザーの作成、データベースの作成まで行っています。

今後について

PostgreSQLやRedisなども入れることができたらなぁと思っています。
皆さん使ってみてください!

参考URL

@masuidriveさんのVagrantfileは、ubuntuだったので、それのCentOS版を今回作りました。