ChefでRails5の開発環境を手に入れる
こんにちは、よしかわです。 今回は、仮想環境でVagrantとChefを用いて、Rails5の環境構築をしたので、まとめていきたいと思います。 開発環境と本番環境の違いによって生じる無駄なデバッグをなくすためにも、技術を駆使して乗り越えましょう。
対象読者
- 自分の開発環境を汚したくない人
- 本番環境と開発環境を近づけたい人
- 他の人と同一環境にしたい人
- Railsの開発環境がとにかく欲しい人
事前準備
VirtualBoxとVagrantのダウンロードをしてください。 Macの方は以下のコマンドでダウンロードすることができます。
brew cask install virtualbox vagrant
以下のサイトでソースコードを公開しています。
vagrant-template/ror5 at master · YoshikawaTaiki/vagrant-template · GitHub
Chefとは
Chefは各種設定作業をRubyのコードで自動化するツールです。各種設定作業の手順(ChefではRecipeという)や設定(ChefではAttributeという)をクックブックと呼ばれる単位で記述できます。シェルスクリプトで自動化する方法と比較してChefを利用するメリットとして依存関係を自動で解決してくれたり、簡潔に記述することが出来ます。
ChefDKで開発を行うので、こちらからインストールしてください。
Chefのバージョンの確認
$ sudo chef -v Chef Development Kit Version: 2.5.3 chef-client version: 13.8.5 berks version: 6.3.1 kitchen version: 1.19.2 inspec version: 1.45.13
vagrantのプラグインのインストール
vagrant plugin install vagrant-omnibus vagrant-vbguest vagrant-vbox-snapshot
knife-soloをインストール
$ sudo chef gem install knife-solo
Gemfileの作成&編集
$ rbenv exec bundle init $ vim Gemfile
Gemfile
source "https://rubygems.org" gem "chef" gem "chef-dk" gem "knife-solo" gem "berkshelf"
gemインストール
$ rbenv exec bundle install
chefリポジトリを作成
$ bundle exec knife solo init .
berksfileの編集
source "https://api.berkshelf.com" cookbook 'git' cookbook 'build-essential' cookbook 'yum' cookbook 'vim' cookbook 'openssl' cookbook 'nginx' cookbook 'ruby_build' cookbook 'postgresql' cookbook 'nodejs' cookbook 'selinux' cookbook 'ruby_2-5-0', path: './site-cookbooks/ruby_2-5-0'
クックブックの作成
$ chef generate cookbook site-cookbooks/ruby_2-5-0
site-cookbooks/ruby_2-5-0/recipes/default.rb
rbenv_system_install 'foo' do git_url "https://github.com/rbenv/rbenv.git" end rbenv_ruby '2.5.0' rbenv_global '2.5.0' rbenv_gem 'unicorn' do rbenv_version '2.5.0' end rbenv_gem 'postgresql' do rbenv_version '2.5.0' end rbenv_gem 'rails' do rbenv_version '2.5.0' end
コミュニティクックブックのダウンロード
$ bundle exec berks vendor ./cookbooks
$ Vagrant init $ vim Vagrantfile
Vagrantfileの編集
# -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| config.vm.synced_folder ".", "/vagrant", disabled: false # if Vagrant.has_plugin?("vagrant-vbguest") config.vbguest.auto_update = true end # cache package if Vagrant.has_plugin?("vagrant-cachier") config.cache.scope = :box end config.vm.define :develop do |develop| DefineMachineEnvironment develop, "rails", "1024" # install and update chef_version latest develop.omnibus.chef_version = :latest develop.vm.hostname = "rails-local" develop.vm.box = "centos/7" develop.vm.network :private_network, ip: "192.168.86.12" develop.vm.network :forwarded_port, guest: "3000", host: "3000" develop.vm.provision :chef_solo do |chef| #chef.log_level = "info" chef.cookbooks_path = "./cookbooks" chef.add_recipe 'yum' chef.add_recipe 'postgresql' chef.add_recipe 'git' chef.add_recipe 'vim' chef.add_recipe 'nginx' chef.add_recipe 'nodejs' chef.add_recipe "selinux::disabled" chef.add_recipe 'build-essential' chef.add_recipe 'ruby_build' chef.add_recipe "ruby_2-5-0" chef.json = { "ruby_rbenv" => { "global" => "2.5.0", "rubies" => "2.5.0", "gems" => { "2.5.0" => [ { 'name' => 'bundler' } ] } } } end end ## Define macros def DefineMachineEnvironment(tmp, virtualbox_name, use_memory) tmp.vm.provider "virtualbox" do |vbox| vbox.name = virtualbox_name vbox.memory = use_memory end end end
仮想マシンの起動
vagrant up
仮想マシンにログイン
vagrant ssh
仮想マシン内で以下のコマンドでGemfile作成
mkdir hello cd hello su bundle init vim Gemfile
Gemfileの修正
source "https://rubygems.org" gem "rails"
データベースはPostgreSQL
bundle install rails new hello --database postgresql rails s
ローカル環境にRuby on Rails5の開発環境が整いました。