こんにちは!ゆきまさです!!(@yyykms)
今回はRuby on Railsの環境構築を簡単に行うために、Homesteadを使用した方法を紹介します。
HomesteadはLaravelの開発環境を簡単に構築できるパッケージですが、Ruby on Railsで必要なソフトも入っているため同じく簡単に構築できます。
また、HomesteadはVagrantを使用するので、仮想環境の構築も同時に学べるので採用しました。
Laravelの構築も一緒にできますが、今回はRuby on Railsの環境構築のみとします。
環境
- Mac (ver 10.14.5)
- VirtualBox (ver 6.0.4)
- Vagrant (ver 2.2.4)
- Homestead (ver 8.4.0)
- Ruby (ver 2.6.3)
- Ruby on Rails (ver 5.2.3)
- MySQL (ver 5.7.26)
Homesteadとは?
HomesteadはLaravel公式のboxで、Vagrantを使用することで仮想マシンにLaravelの開発環境を簡単に構築することができるパッケージです。
PHPやWebサーバ、その他のサーバソフトウェアをローカルマシンにインストールする必要なく、開発環境を構築できます。
導入されているソフトウェア
公式より以下のソフトが既に含まれています。(2019/7 現在)
- Ubuntu 18.04
- Git
- PHP 7.3
- PHP 7.2
- PHP 7.1
- Nginx
- MySQL
- lmmによるMySQLとMariaDデータベーススナップショット
- Sqlite3
- PostgreSQL
- Composer
- Node (Yarn、Bower、Grunt、Gulpを含む)
- Redis
- Memcached
- Beanstalkd
- Mailhog
- avahi
- ngrok
- Xdebug
- XHProf / Tideways / XHGui
- wp-cli
- Minio
オプションで導入できるソフトウェア
- Apache
- Crystal & Lucky Framework
- Dot Net Core
- Elasticsearch
- Go
- MariaDB
- MongoDB
- Neo4j
- Oh My Zsh
- Ruby & Rails
- Webdriver & Laravel Dusk Utilities
- Zend Z-Ray
VirtualBoxをインストール
仮想化ソフトは他にもいくつかあるそうですが「VirtualBox」を使用します。
インストールはこちらから >> https://www.virtualbox.org/
Download VirtualBoxから、自分の使用しているOSを選択

「機能拡張がブロックされました」と表示されたら「システム環境設定」→「セキュリティとプライバシー」から読み込みを許可しましょう
Vagrantをインストール
Vagrantとは仮想化ソフト(VirtualBox)を使用し、コマンドを入力することで仮想環境を管理したり構築したりすることができるツールです。
インストールはこちらから >> https://www.vagrantup.com/
Download Vagrantから、自分の使用しているOSを選択

ダウンロードしたらバージョンを確認してみる。
$ vagrant --version Vagrant 2.2.4
これで2.2.4のVagrantがインストールされました。
vagrantのコマンドについては下記の記事を参考にしてみてください
Vagrantコマンドのチートシート
VagrantでHomesteadのboxをインストール
boxとはOSのディスクイメージファイルで、これを追加することで仮想環境を作成できます。
VagrantCloudより「laravel/homestead」を確認できるので、コマンドでboxを追加します。
$ vagrant box add laravel/homestead
実行するとproviderは何かと聞かれるので「virtualbox」の「3」を選択します。
結構時間がかかるので終わるまで待ちましょう。
$ vagrant box add laravel/homestead ==> box: Loading metadata for box 'laravel/homestead' box: URL: https://vagrantcloud.com/laravel/homestead This box can work with multiple providers! The providers that it can work with are listed below. Please review the list and choose the provider you will be working with. 1) hyperv 2) parallels 3) virtualbox 4) vmware_desktop Enter your choice: 3 ==> box: Adding box 'laravel/homestead' (v7.2.1) for provider: virtualbox box: Downloading: https://vagrantcloud.com/laravel/boxes/homestead/versions/7.2.1/providers/virtualbox.box box: Download redirected to host: vagrantcloud-files-production.s3.amazonaws.com ==> box: Successfully added box 'laravel/homestead' (v7.2.1) for 'virtualbox'!
Successfulluyとなったので、以下のコマンドでboxがちゃんと追加されたか確認しましょう。
$ vagrant box list laravel/homestead (virtualbox, 7.2.1)
Homesteadをダウンロード
ダウンロードしたファイルは任意のディレクトで良いですが、今回はホームディレクトリの直下にダウンロードするので移動しておきます。
$ cd $ pwd /Users/ユーザー名
以下のコマンドでgithubからリポジトリをクローンします。
$ git clone https://github.com/laravel/homestead.git Homestead Cloning into 'Homestead'... remote: Enumerating objects: 59, done. remote: Counting objects: 100% (59/59), done. remote: Compressing objects: 100% (46/46), done. remote: Total 3606 (delta 37), reused 22 (delta 13), pack-reused 3547 Receiving objects: 100% (3606/3606), 782.03 KiB | 863.00 KiB/s, done. Resolving deltas: 100% (2190/2190), done.
これでホームディレクトリに追加されました。
Homesteadの初期化
HomesteadはHomestead.yaml
というファイルに色々書くことで、任意の設定をすることができます。
まずはダウンロードしたHomesteadディレクトリに移動して中身を確認してみましょう。
$ cd Homestead/ $ ls CHANGELOG.md Vagrantfile composer.lock phpunit.xml.dist scripts Homestead.yaml.example bin init.bat readme.md src LICENSE.txt composer.json init.sh resources tests
中に様々なファイルが入っていますが、初期化をしていないのでHomestead.yaml
が生成されていません。
Homestead.yaml
は以下のコマンドで初期化することにより生成されます。
$ bash init.sh Homestead initialized! $ ls CHANGELOG.md LICENSE.txt aliases composer.lock phpunit.xml.dist scripts Homestead.yaml Vagrantfile bin init.bat readme.md src Homestead.yaml.example after.sh composer.json init.sh resources tests
Homestead initialized!
と表示され、ディレクトリ内にHomestead.yaml
が生成されていることが確認できます。
SSH鍵のファイルを作成
ホストOSとゲストOSの通信はSSHで行うので、それに必要な鍵を作成します。
以下のコマンドで既に鍵があるかを確認。
$ ls ~/.ssh/
無い場合は以下のコマンドで作成しましょう。
$ ssh-keygen -t rsa
途中で以下の表示のように保存するディレクトリを聞かれるので、そのままEnterを押します。
GEnter file in which to save the key (/Users/ユーザー名/.ssh/id_rsa):
次にEnter passphrase
とパスフレーズを求められるので任意のパスフレーズを設定します。
Enter same passphrase again:
と再度確認を求められるので設定したパスフレーズを入力します。
$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/Users/ユーザー名/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /Users/ユーザー名/.ssh/id_rsa. Your public key has been saved in /Users/ユーザー名/.ssh/id_rsa.pub. The key fingerprint is: ...(以下省略)...
ファイルキーが作成されたので、先ほどのコマンドで作成されたか確認しましょう。
$ ls ~/.ssh/ id_rsa id_rsa.pub
これでSSH鍵のファイルが作成できました。
Homesteadの設定
Homestead(仮想マシン)の各設定は、初期化した時に生成したhomestead.yaml
に記述します。
$ vi Homestead.yaml
下記がHomestead.yaml
のデフォルトのです。
--- # IPアドレス ip: "192.168.10.10" # 割り当てるメモリ memory: 2048 # 割り当てるCPU cpus: 2 # 使用するプロバイダ provider: virtualbox # SSH公開鍵のパス authorize: ~/.ssh/id_rsa.pub # SSH秘密鍵のパス keys: - ~/.ssh/id_rsa # 共有ディレクトリの設定 # map: ホストマシン側で共有したいディレクトリ # to: ゲストマシン側で共有したいディレクトリ folders: - map: ~/code to: /home/vagrant/cod # Nginxサイトの設定 # map: アクセスするドメイン名の設定 # to: ゲストマシンNginxのドキュメントルートの設定 sites: - map: homestead.test to: /home/vagrant/code/public # 使用するDB名 databases: - homestead # ports: # - send: 50000 # to: 5000 # - send: 7777 # to: 777 # protocol: udp # blackfire: # - id: foo # token: bar # client-id: foo # client-token: bar
rails serverは3000なので、コメントアウトを外して新しく記述します。
ports: - send: 3000 to: 3000
それ以外はデフォルトのままで使用しますが、共有ディレクトリの設定や、ドキュメントルートの設定などの変更が可能です。
デフォルトのfolders
だと、ホストマシンのホームディレクトリ直下にcode
ディレクトリが指定されていますが、現在はcode
ディレクトリがないので作成しておきます。
$ mkdir ~/code
このcode
ディレクトリの中にファイルやディレクトリを作成すれば、ホストとゲストで共有することができます。
sites
プロパティをHomestead boxのプロビジョニング後に変更した場合、仮想マシンのNginx設定を更新するため、vagrant reload --provision
を再実行する必要があります。
ホスト名の設定
HomesteadではデフォルトでIPアドレス192.168.10.10
にhomestead.test
というドメイン名で設定してあり、
ホストOSのhosts
ファイルに追記することで、Webブラウザでhttp://homestead.test
にアクセスすることができます。
MacとLinuxでは/etc/hosts
にファイルがあるので追加していきましょう。
アクセス権限がないと保存できないので、sudo
をつけて192.168.10.10 homestead.app
を追記します。
$ sudo vi /etc/hosts ## # Host Database # # localhost is used to configure the loopback interface # when the system is booting. Do not change this entry. ## 127.0.0.1 localhost 255.255.255.255 broadcasthost ::1 localhost 192.168.10.10 homestead.test
Vagrant Boxの実行
各種設定が終わったら仮想マシンを起動します。
Homesteadのディレクトリ内にVagrantfile
があるので、違うディレクトリにいる場合は移動します。
$ pwd /Users/ユーザー名/Homestead
下記のコマンドで仮想マシンを起動できます。
$ vagrant up Bringing machine 'homestead-7' up with 'virtualbox' provider... ==> homestead-7: Importing base box 'laravel/homestead'... ==> homestead-7: Matching MAC address for NAT networking... ==> homestead-7: Checking if box 'laravel/homestead' version '7.2.1' is up to date... ==> homestead-7: Setting the name of the VM: homestead-7 ==> homestead-7: Clearing any previously set network interfaces... ...(以下省略)...
起動できているか状態を確認します。
$ vagrant status Current machine states: homestead-7 running (virtualbox) The VM is running. To stop this VM, you can run `vagrant halt` to shut it down forcefully, or you can run `vagrant suspend` to simply suspend the virtual machine. In either case, to restart it again, simply run `vagrant up`.
running (virtualbox)
となっているので起動できていることが確認できました。
起動できたので、ssh
コマンドで仮想マシンに入ります。
$ vagrant ssh Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-47-generic x86_64) Thanks for using _ _ _ | | | | | | | |__ ___ _ __ ___ ___ ___| |_ ___ __ _ __| | | '_ \ / _ \| '_ ` _ \ / _ \/ __| __/ _ \/ _` |/ _` | | | | | (_) | | | | | | __/\__ \ || __/ (_| | (_| | |_| |_|\___/|_| |_| |_|\___||___/\__\___|\__,_|\__,_| * Homestead 8.4.0 released! * Settler v7.2.1 released! Make sure you update 0 packages can be updated. 0 updates are security updates. Last login: Thu Jul 4 20:54:14 2019 from 10.0.2.2 vagrant@homestead:~$
無事に仮想マシンに入れました。
これで仮想マシンを構築できたので、あとは仮想マシンにRailsの環境を構築していきます。
Ruby on Railsの環境を構築
Railsに必要なソフトをインストールしていくのですが、ほとんどはHomesteadで既に用意されています。
まだ用意されていないrbenv
やそのほかのライブラリ等を入れていきましょう。
必要なライブラリをインストール
まずはゲストOSであるUbuntu自体をアップデート(最新化)します。
$ sudo apt update
今回はMysqlを使用するので、必要な関連パッケージをインストールします。
$ sudo apt install mysql-server mysql-client $ sudo apt install libmysqlclient-dev
これらのインストールを忘れてRailsのプロジェクトを作成しようとすると、以下のようなエラーが発生するかもしれません。
$ rails new test_app -d mysql ...(途中省略)... An error occurred while installing mysql2 (0.5.2), and Bundler cannot continue. Make sure that `gem install mysql2 -v '0.5.2' --source 'https://rubygems.org/'` succeeds before bundling. ...(途中省略)... Install missing gem executables with `bundle install`
これは「mysql2というパッケージのインストールに失敗した」ということで、よくハマっている人を見かけるのでちゃんとインストールをしておきましょう。
Rubyをインストール
まずはRubyの「インストール」と「バージョン切替」を簡単に行えるようにするrbenvをGitHubからクローンします。
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv Cloning into '/home/vagrant/.rbenv'... remote: Enumerating objects: 15, done. remote: Counting objects: 100% (15/15), done. remote: Compressing objects: 100% (11/11), done. remote: Total 2759 (delta 4), reused 8 (delta 4), pack-reused 2744 Receiving objects: 100% (2759/2759), 528.92 KiB | 874.00 KiB/s, done. Resolving deltas: 100% (1724/1724), done.
クローンできたらrbenvコマンドが使えるように設定します。
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc $ echo 'eval "$(rbenv init -)"' >> ~/.bashrc $ exec $SHELL -l
下記のコマンドでrbenvが使えるようになったか確認します。
$ rbenv --version rbenv 1.1.2-2-g4e92322
次はGithubからRubyをビルドするために使うプラグインの「ruby-build」をクローンします。
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build Cloning into '/home/vagrant/.rbenv/plugins/ruby-build'... remote: Enumerating objects: 38, done. remote: Counting objects: 100% (38/38), done. remote: Compressing objects: 100% (25/25), done. remote: Total 9750 (delta 14), reused 29 (delta 8), pack-reused 9712 Receiving objects: 100% (9750/9750), 2.08 MiB | 2.10 MiB/s, done. Resolving deltas: 100% (6340/6340), done.
クローンできたので、次にインストールできるRubyのバージョンを確認してみましょう。
$ rbenv install --list Available versions: 1.8.5-p52 1.8.5-p113 1.8.5-p114 1.8.5-p115 1.8.5-p231 1.8.6 1.8.6-p36 1.8.6-p110 1.8.6-p111 1.8.6-p114 ...(途中省略)... 2.5.4 2.5.5 2.6.0-dev 2.6.0-preview1 2.6.0-preview2 2.6.0-preview3 2.6.0-rc1 2.6.0-rc2 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0-dev jruby-1.5.6 jruby-1.6.3 ...(以下省略)...
今回は最新のバージョンのRubyを指定します。
$ rbenv install -v 2.6.3 /tmp/ruby-build.20190704201543.18071 ~ Downloading ruby-2.6.3.tar.bz2... -> https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.3.tar.bz2 Installing ruby-2.6.3... /tmp/ruby-build.20190704201543.18071/ruby-2.6.3 /tmp/ruby-build.20190704201543.18071 ~ checking for ruby... /home/vagrant/.rbenv/shims/ruby config.guess already exists config.sub already exists checking build system type... x86_64-pc-linux-gnu ...(以下省略)...
完了したら仮想マシンにインストールされているRubyのバージョンを確認します。
$ rbenv versions * system (set by /home/vagrant/.rbenv/version) 2.6.3
最新バージョンのRubyがインストールされているのを確認できました。
あとはインストールしたRubyのバージョンを適用して確認してみます。
$ rbenv global 2.6.3 $ rbenv versions system * 2.6.3 (set by /home/vagrant/.rbenv/version)
マークが移動したので正しくインストールできたかを確認します。
$ ruby -v ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]
これでRubyのインストールが完了しました。
global
ではなくlocal
を指定することで、プロジェクトごとにバージョンを指定することができます。
Bundlerをインストール
Bundlerはプロジェクトごとで使うgemを、インストールしたり使用したりすることができます。
Gemfile
という名前のファイルにgem
の名前を記述しておくことにより、書いてある通りにインストールしたり、Rubyからそれらのgem
を利用したりすることができます。
以下の表はBundlerの代表的なコマンドです。
コマンド | 説明 |
bundle init | 初期状態のGemfileをカレントディレクトリに作成する |
bundle install (または「bundle」のみ) | Gemfileに記述したgemをインストールする |
bundle exec [コマンド] | Bundlerが管理するgemを利用できる状態でコマンドを実行する |
bundlerはRubyGemsからインストールできるのでgem
コマンドでインストールします。
$ gem install bundler Fetching bundler-2.0.1.gem Successfully installed bundler-2.0.1 Parsing documentation for bundler-2.0.1 Installing ri documentation for bundler-2.0.1 Done installing documentation for bundler after 2 seconds
bundle
コマンドが使えるようになるのでバージョンの確認をしてみます。
$ bundle -v Bundler version 2.0.1
インストールできました。
Ruby on Railsをインストール
最後にRuby on Railsをインストールしましょう!
Ruby on Railsは、gem
コマンドでインストールできます。
$ gem install rails Fetching i18n-1.6.0.gem Fetching rack-2.0.7.gem ...(途中省略)... Removing ruby (1:2.5.1) ... Removing ruby2.5 (2.5.1-1ubuntu1.2) ... Removing libruby2.5:amd64 (2.5.1-1ubuntu1.2) ... Removing rake (12.3.1-1) ... Removing ruby-test-unit (3.2.5-1) ... Processing triggers for libc-bin (2.27-3ubuntu1) ... Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
インストールが終わったらrails
コマンドが使用できるので確認しましょう。
$ rails -v Rails 5.2.3
最新のバージョンがインストールされました。
これで必要なライブラリがインストールできたので、次は実際にプロジェクトフォルダを作成します。
バージョンを指定したい場合はオプションをつけて指定することができます。$ gem install rails -v バージョン
Railsのプロジェクトフォルダを作成
code
ディレクトリ内にプロジェクトフォルダを作るので移動しましょう。
$ cd code/
今回は例としてtest_app
というプロジェクトフォルダを作成します。
プロジェクトフォルダはrails new
というコマンドで作成ができ、-d
オプションで使用するデータベースを指定できます。
オプションを指定しない場合は「SQLite」というデータベースがデフォルトで使用されますが、今回は「Mysql」を使用するので以下のコマンドでフォルダを作成します。
$ rails new test_app -d mysql create create README.md create Rakefile create .ruby-version create config.ru create .gitignore create Gemfile run git init from "." Initialized empty Git repository in /home/vagrant/code/test_app/.git/ create package.json create app ...(途中省略)... Using spring-watcher-listen 2.0.1 Using turbolinks-source 5.2.0 Using turbolinks 5.2.0 Using uglifier 4.1.20 Using web-console 3.7.0 Bundle complete! 18 Gemfile dependencies, 78 gems now installed. Use `bundle info [gemname]` to see where a bundled gem is installed. run bundle exec spring binstub --all * bin/rake: spring inserted * bin/rails: spring inserted
ディレクトリ内にtest_app
というファイルが作成されていることが確認できます。
$ ls test_app
Homestead.yaml
でホストOSとゲストOSの共有設定が書かれているので、ゲストOSでフォルダを作成するとホストOS側にも反映されます。
Railsアプリを起動
まずは先ほど作成したフォルダに移動します。
$ cd test_app/
Railsのサーバーはプロジェクトフォルダに移動して、rails server
コマンドで起動することができます。
しかし、Vagrant環境で仮想マシンを起動している場合は、rails server -b 0.0.0.0
というオプションをつけてRailsサーバーを起動させる必要があります。
Railsサーバーはデフォルトで127.0.0.1:3000
にバインドされるので、LAN内の外部クライアントからのIPアドレスを受け付けません。
なので、同じLAN内にいる外部クライアントにも公開できるようにするため、-b 0.0.0.0
というオプションをつけて明示的にバインドさせる必要があります。
詳しくはこちらの記事を参考にしてみてください。
それでは以上のことを踏まえてサーバーを起動してみましょう。
$ rails server -b 0.0.0.0 => Booting Puma => Rails 5.2.3 application starting in development => Run `rails server -h` for more startup options Puma starting in single mode... * Version 3.12.1 (ruby 2.6.3-p62), codename: Llamas in Pajamas * Min threads: 5, max threads: 5 * Environment: development * Listening on tcp://0.0.0.0:3000 Use Ctrl-C to stop
このように表示されれば無事にサーバーが起動したことになります。
サーバーを停止したいときはCtrl + c
で停止することできます。
Railsサーバーの起動は以下のコマンドで省略することができます。
$ rails s -b 0.0.0.0
ブラウザに表示させる
Railsサーバーを起動させたので、あとはブラウザに表示させてみましょう。
すでにホスト名の設定も行なっているので、ブラウザのURLにhttp://homestead.test:3000
と入力してアクセスしてみましょう。
すると以下のようなエラーが発生します。

これはMysqlにhomesteadというユーザーでログインしようとした結果、「パスワードがない」と言われていることが原因です。
Homesteadでは下記のようなデフォルトの設定があるので、データベースの設定ファイルにこのパスワードを記述します。
- データベース : homestead
- ユーザー名 : homestead
- パスワード : secret
サーバーを起動しているので、新たにタブを増やし再度vagrant ssh
で仮想マシンに接続しておきましょう。
データベースの設定ファイルは、config
ディレクトリの中にdatabase.yml
というファイル名で入っています。
$ ls config/ application.rb credentials.yml.enc environments master.key spring.rb boot.rb database.yml initializers puma.rb storage.yml cable.yml environment.rb locales routes.rb $ vi config/database.yml
viで開きpassword
の所に先ほどのsecret
を追記して保存しましょう。
# MySQL. Versions 5.1.10 and up are supported. # # Install the MySQL driver # gem install mysql2 # # Ensure the MySQL gem is defined in your Gemfile # gem 'mysql2' # # And be sure to use new-style password hashing: # https://dev.mysql.com/doc/refman/5.7/en/password-hashing.html # default: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: secret socket: /var/run/mysqld/mysqld.sock development: <<: *default database: test_app_development # Warning: The database defined as "test" will be erased and # re-generated from your development database when you run "rake". # Do not set this db to the same as development or production. test: <<: *default database: test_app_test
保存したらサーバーを再起動してからもう一度ブラウザにアクセスしてみます。
すると今度は別のエラーが発生しました。

先ほどのエラーは解決できたのですが、今回は「test_app_development
というデータベースが無いよ」と注意されています。
Railsにはrails db:create
というコマンド存在していて、database.yml
に記述されている情報を元に、データベースを作成してくれます。
これらはデフォルトで
- プロジェクトフォルダ名_development
- プロジェクトフォルダ名_test
という2つのデータベース名が記述されているので特に変更はせずに、先ほどのrails db:create
コマンドを実行して上記の2つのデータベースを作成しましょう。
$ rails db:create Created database 'test_app_development' Created database 'test_app_test'
データベースが作成されたので再度ブラウザにアクセスしてみます。
すると今回はエラーが出ないで、下記のように表示されました。

これはRailsの初期画面で、このページが表示されればサーバーが正常に動作しているということなので、問題なくアクセスできたことが確認できました。
以上でRuby on Railsの環境構築は終了です。
結構長くなってしまいましたが、最後まで読んでいただきありがとうございました。
まとめ
Vagrant boxは何回でも作成できるので、失敗したり調子が悪いようだったら削除して何回でもやり直しましょう。
一回構築しただけではなかなか理解しにくいと思うので、数をこなして慣れていくのが早いかなと思います。
また、今回はHomesteadを使用したRuby on Railsの環境構築でしたが、Laravelの環境構築もできるので是非色々いじってみてください。
そして、Ruby on Railsの環境構築が終わったら次は実際にアプリケーションを作っていくと思います。
環境構築が終わった人はRuby on Railsの勉強で有名なRailsチュートリアルをやってみるのがいいかなと思います。
書籍もたくさんあり、自分が勉強に使用した書籍がおすすめなのでよければこちらも参考にしてください。