どうも、エンジニアブロガーのYutaです。今回はVagrantでRuby on Rails(以下rails)の開発環境を整える方法についてレクチャーします。
この記事の通りに設定してもらえれば、仮想環境でrailsを動かすことができるので、エンジニアやってる感が出せると思います(笑)
また、設定するに当たって、Linuxコマンドやbashにも触れるのでインフラ周りについて知りたくなるきっかけになるかもしれませんね。
もし、記事の中でわかりにくいところがあったり、別途解説して欲しい箇所があったら、問い合わせページやコメントで知らせてもらえたら嬉しいです。
それでは、早速やっていきましょう。
この記事の対象者
- ProgateのRailsコースを一通りやりきった人
- Vagrantでrailsの環境を構築してみたい人
- cloud9の重さにイライラしている人
Vagrantを立ち上げるまでに必要な手順
まずは、以下のvagrant公式サイトでOSに沿ったvagrantファイルをダウンロードします。
続いて、virtualBox公式サイトでvirturalBoxをダウンロードしましょう。
ダウンロードが完了したら、任意の階層でディレクトリを作成します。
mkdir xyz #mkdirは新規ディレクトリを作るためのLinuxコマンド
cd xyz # cdは引数に指定したディレクトリに移動するLinuxコマンド
以下コマンドでvagrantを初期化してください。vagrant init
コマンドを実行することで、VagrantFileを読み込み、仮想環境を構築するための準備を行うことになります。
vagrant init
vagrant up
で仮想マシンのセットアップが開始されます。環境にもよりますが、初回はだいたい早くて15分くらいかかります。
完了したら、以下のコマンドでsshへvagrantの設定に関する内容を書き込みましょう。
vagrant ssh-config >> ~/.ssh/config
# 吐き出される内容
Host default
HostName 127.0.0.1
User vagrant
Port 2222
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /Users/ushijima_yuta/rails_projects/myapp/.vagrant/machines/default/virtualbox/private_key
IdentitiesOnly yes
LogLevel FATAL
ssh default #sshのHostをデフォルトにする
ここまでの環境構築が完了したら、vagrant ssh
とコマンドを叩けば、インストールした仮想環境のCentOSに接続することができます。
Rails環境を構築するためのセットアップ
現在の仮想環境は、Railsを動かすために必要なツールやプログラムが何も入っていない状態です。
そのため、CentOSの場合はyum
と呼ばれるパッケージマネージャーを使ってそれぞれのプログラムをインストールしていくことになります。
基本的にはこれから記述するコマンドをターミナルへコピペしてもらえれば動きますが、最新版ではない可能性があるのでそこは注意してください。
$ sudo yum update
$ sudo yum install git make gcc-c++ patch openssl-devel libyaml-devel libffi-devel libicu-devel libxml2 libxslt libxml2-devel libxslt-devel zlib-devel readline-devel ImageMagick ImageMagick-devel epel-release
# node.jsをダウンロード
$ sudo yum install nodejs npm --enablerepo=epel
# rbenvをダウンロード
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
$ rbenv --version
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ rbenv install 2.4.1
$ rbenv global 2.4.1 # rbenv globalとすることで、システム全体でのバージョンを2.4.1にします。
$ rbenv rehash
## Rails + Bundler
$ gem install --no-ri --no-rdoc rails
$ gem install bundler
RailsでDBを使用するための設定
RailsでAcitveRecordを使うためには、RDBS(リレーショナル・データベース・システム)と連携させる必要があります。
ここでは、Railsでよく使われているRDBSであるPostgreSQL(ポスグレエスキューエル)とMySQL(マイエスキューエル)の設定方法を取り上げます。
PostgreSQLをDBに使用している場合
# 諸々のパッケージをダウンロード
sudo yum -y install http://yum.postgresql.org/9.5/redhat/rhel-7-x86_64/pgdg-redhat95-9.5-2.noarch.rpm
sudo yum -y install postgresql-devel postgresql95-server postgresql95-contrib
sudo /usr/pgsql-9.5/bin/postgresql95-setup initdb
sudo systemctl start postgresql-9.5.service
sudo systemctl enable postgresql-9.5.service
# postgresの初期設定
$ sudo passwd postgres
Changing password for user postgres.
New password: #パスワードを適当に設定する
Retype new password:
$ su - postgres
$ createuser vagrant -s
$ psql
postgres=# \password vagrant # vagrantユーザにパスワードを設定
Enter new password: #パスワードを適当に設定する
Enter it again:
postgres=# \q # psqlプロンプト終了
$ exit
$ sudo vi /var/lib/pgsql/9.5/data/pg_hba.conf
# "local" is for Unix domain socket connections only
# local all all peer
local all all md5
$ sudo systemctl restart postgresql-9.5.service
# database.ymlを編集し、defaultにusernameとpasswordを設定
default:
...
username: vagrant
password: # 先ほど設定したパスワード
MySQLをDBに使用する場合
# デフォルトでインストールされているmariaDBを削除
$ sudo yum remove mariadb-libs
# MySQLパッケージのダウンロード
$ sudo yum localinstall https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
# MySQL本体のダウンロード
$ sudo yum install mysql-community-server
# 正しくダウンロードされているか確認
$ mysqld —version
# MySQLの起動
$ sudo systemctl start mysqld.service
# MySQLが自動的に起動するように設定
$ sudo systemctl enable mysqld.service
# 起動した際に自動設定される初期パスワードを表示
cat /var/log/mysqld.log | grep password
2018-04-28T13:03:14.377383Z 1 [Note] A temporary password is generated for root@localhost: kbsteX,5asV_
# 初期パスワードを変更するため、先ほどの初期パスワード(上記の場合はkbsteX,5asV_)を入力
$ mysql_secure_installation
# 新規のパスワードを入力(ただし、パスワードが最低1つの数値文字を含み、1つの小文字および大文字を含み、1 つの特殊文字 (英数字以外) を含むこと)
# 例:Yamada_taro1234
The existing password for the user account root has expired. Please set a new password.
New password: 例に挙げたようなパスワードを入力
Re-enter new password: パスワードを再入力
The 'validate_password' plugin is installed on the server.
The subsequent steps will run with the existing configuration
of the plugin.
Using existing password for root.
Estimated strength of the password: 100
# rootパスワードを変更するかどうか(yをタイプするとrootパスワードを変更できます)
Change the password for root ? ((Press y|Y for Yes, any other key for No) : y
New password:
Re-enter new password:
Estimated strength of the password: 100
# パスワードがある場合のみ設定を続けるかどうか
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
# 匿名のユーザーを削除するかどうか
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.
# For advice on how to change settings please see
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
# リモートホスト(他の端末)からのrootログインを禁止するかどうか
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.
# デフォルトで作成されているテスト用データベースを削除するかどうか
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
- Dropping test database...
Success.
- Removing privileges on test database...
Success.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
# ユーザー権限が保存されているテーブルを今すぐ再読み込みするかどうか
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.
All done!
$ sudo vi /etc/my.cnf
/etc/my.confの末尾に以下を記述します。
#文字コードの設定を追加
character_set_server=utf8
skip-character-set-client-handshake
# 設定を反映させるためにMySQLを再起動します
$ sudo systemctl restart mysqld.service
# railsでMySQLを使うためのパッケージをインストールします
$ sudo yum install mysql-devel
# database.ymlを編集し、defaultにusernameとpasswordを設定
default:
...
username: root
password: # 先ほど設定したパスワード
socket: /var/lib/mysql/mysql.sock # ターミナルで mysql_config —socketとコマンドを叩いて表示されたパスを記述
vagrant上でアプリケーションサーバーを立ち上げ、ブラウザで確認するための設定
Vagrantfileを設定する
仮想環境で立ち上げたアプリケーションサーバーをローカルのブラウザで表示させるための設定を行います。
vagrantfileがあるディレクトリに移動して、好きなエディタで編集しましょう。
ここでは、Vimを使って編集しています。
$ vim Vagrantfile
設定するのはvagrantfileの28~35行目あたり。vimで行番号が表示されていない場合は、set numberで表示可能です。
~
# vagrantfile
28 # Create a forwarded port mapping which allows access to a specific port
29 # within the machine from a port on the host machine and only allow access
30 # via 127.0.0.1 to disable public access
31 config.vm.network "forwarded_port", guest: 3000, host: 3000, host_ip: "127.0.0.1"
32
33 # Create a private network, which allows host-only access to the machine
34 # using a specific IP.
35 config.vm.network "private_network", ip: "192.168.33.10"
~~
設定が完了したらファイルを保存(vimならwqで保存可能)し、以下のコマンドでサーバーを立ち上げます。
bin/rails s -b 0.0.0.0
ブラウザに、http://0.0.0.0:3000/と打ち込んで、任意のページが表示されればOKです。
エラーが出た場合は、大概はうまくDBと接続できていないことが多いので、設定を再確認しましょう。
vagrantでgitを使いやすくするbashrcの設定
ここからは個人的に開発するためにターミナルを使いやすくするための設定を行います。
別にここの項目を設定しないからと言って、特に開発に支障が出ることはありませんが、やっておくとより開発がしやすくなると思いますよ。
Bash_profileとbashrcについての違いが知りたい方は、以下のサイトが参考にしてみてください。
それではまず、開発するときにターミナル上で、現在のブランチ名を表示させる設定をしていきましょう。
この設定をすることで、誤ってmasterブランチにpushしてしまうような自己が未然に防げます。
git-promptをインストールする
$ sudo yum -y install wget # wgetコマンドをインストール
・
・ # ずらずらとインストールログが表示されます
・
Complete!
# git-completion.bashをインストール
$ wget https://raw.githubusercontent.com/git/git/v2.5.0/contrib/completion/git-completion.bash
# git-prompt.shをインストールする
$ wget https://raw.githubusercontent.com/git/git/v2.5.0/contrib/completion/git-prompt.sh
# bashrcで読み込ませるために隠しファイルにリネーム
$ mv git-completion.bash .git-completion.bash
$ mv git-prompt.sh .git-prompt.sh
ここまでできれば、必要なプログラムのインストールは完了。
続いてbashrcに以下の記述をしましょう。
$ vim ~/.bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=
# Source git completion
if [ -f ~/.git-completion.bash ]; then
. ~/.git-completion.bash
fi
# 現在のブランチ名を表示する設定
if [ -f ~/.git-prompt.sh ]; then
# リポジトリの状態によって表示が変わる設定を有効にする
GIT_PS1_SHOWDIRTYSTATE=1
. ~/.git-prompt.sh
PS1='\[\e[32m\][\u@\h \W]\e[m $(__git_ps1 "\e[36;1m\](\[\e[36;1m\]%s)")\[\e[0m\]\] \$ '
fi
# gitコマンドのエイリアス
# alias:git
alias g="git "
alias gs="git status "
alias ga="git add "
alias grb="git rebase "
alias gcm="git commit "
alias gb="git branch "
alias gbr="git branch -r "
alias gbg="git branch |grep "
alias gbrg="git branch -r |gpep "
alias gco="git checkout "
alias gcow="git checkout working "
alias gcod="git checkout development "
alias gcom="git checkout master "
alias gd="git diff "
alias gds="git diff --staged "
alias gpush="git push origin HEAD "
alias gpull="git pull origin HEAD "
alias gsh="git show "
alias gl="git log "
alias gpl="git pull "
alias gfpu="git push -f "
alias gpu="git push "
設定が完了したら、ファイルを保存してbashrcを以下のコマンドで再読み込みします。
$ source ~/.bashrc
そうすると、ターミナルで以下のような表示がされているはずです。
[vagrant@localhost baukis_study] (feature/routes)
これで現在自分がどのブランチで開発しているか一発でわかるようになりましたね!
あとはgit cloneでリモートのリポジトリからクローンしてもいいし、rails newで新しくプロジェクトを立ち上げてもいいですね。