HomesteadでRuby on Railsの環境構築
今回は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」を使用します。
インストールは下記のリンクから。
Download VirtualBox から、自分の使用している OS を選択する。
「機能拡張がブロックされました」と表示されたら「システム環境設定」→「セキュリティとプライバシー」から読み込みを許可しましょう。
Vagrantをインストール
Vagrantとは仮想化ソフト(VirtualBox)を使用し、コマンドを入力することで仮想環境を管理したり構築したりできるツールです。
インストールは下記のリンクから。
Download Vagrant から、自分の使用している OS を選択する。
ダウンロードしたらバージョンを確認してみる。
$ vagrant --version
Vagrant 2.2.4
これで 2.2.4 の 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
ディレクトリの中にファイルやディレクトリを作成すれば、ホストとゲストで共有できます。
ホスト名の設定
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 のインストールが完了しました。
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
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 サーバーを起動させたので、あとはブラウザに表示させてみましょう。
すでにホスト名の設定も行なっているので、ブラウザの 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
に記述されている情報を元に、データベースを作成してくれます。
これらはデフォルトで下記 2 つのデータベース名が記述されます。
- プロジェクトフォルダ名_development
- プロジェクトフォルダ名_test
特に変更はせずに、先ほどの rails db:create
コマンドを実行して上記の 2 つのデータベースを作成しましょう。
$ rails db:create
Created database 'test_app_development'
Created database 'test_app_test'
データベースが作成されたので再度ブラウザにアクセスしてみます。
すると今回はエラーが出ないで、下記のように表示されました。
これは Rails の初期画面で、このページが表示されればサーバーが正常に動作しているということなので、問題なくアクセスできたことが確認できました。
以上で Ruby on Rails の環境構築は終了です。
結構長くなってしまいましたが、最後まで読んでいただきありがとうございました。
まとめ
Vagrant box は何回でも作成できるので、失敗したり調子が悪いようだったら削除して何回でもやり直しましょう。
1 回構築しただけではなかなか理解しにくいと思うので、数をこなして慣れていくのが早いかなと思います。
また、今回は Homestead を使用した Ruby on Rails の環境構築でしたが、Laravel の環境構築もできるので是非色々いじってみてください。
そして、Ruby on Rails の環境構築が終わったら次は実際にアプリケーションを作っていくと思います。
環境構築が終わった人は Ruby on Rails の勉強で有名な Railsチュートリアル をやってみるのがいいかなと思います。
書籍もたくさんあり、自分が勉強に使用した書籍がおすすめなのでよければこちらも参考にしてください。
参考記事
Discussion