LoginSignup
37
36

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-05-22

追記

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版を今回作りました。

37
36
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
36