遅まきながら、Vagrant(Virtualbox)でRuby on Railsのローカル環境を構築してみたの巻(その1)

Date:

Share post:

今までPHPを主な案件としておりましたもので、名前だけは以前から聞いていましたが全く触ったことがないRuby on Rails・・・。差し当たっては環境構築から理解を深めようと思い、Vagrantでのローカル環境構築にトライしてみました。

各バージョンは以下の通りです。

ホストOS:MacOS(Monterey12.7)
ゲストOS:AlmaLinux 9.2 rbenv(プロジェクト毎に異なるRubyのバージョンをインストールできる):1.2.0-80-gd6bb1c6 Ruby:3.2.2
gem(Rubyのパッケージ):3.4.21 Bundler(laravelでいうところのcomposer、gemのバージョンや依存関係を管理してくれるgem):2.4.21 Rails(Rubyのフレームワーク):7.1.1
  • VagrantでのBox追加
  • Webminのインストール

は、他の記事でも既出かと思いますので割愛します。

Ruby on Railsでは、WebサーバとしてNginxを使用する(Apacheも使える)ことが多いようです。ですので今回はVirtualminでLEMP環境を作成します。

VirtualminでLEMP環境を作成するのは、こちらに記載がありますが

curl -O https://software.virtualmin.com/gpl/scripts/virtualmin-install.sh --bundle LEMP

と–bundleオプションを設定することでLEMP環境が作成できます。Virtualminインストール後の初期作業(仮想ホストの作成と共有ディレクトリの設定)についても割愛しますが、一部必要と思う箇所のみ記載します。

今回は
rails-test.com
という仮想ホストを作成しました。

あと、こちらにも記載があります通り、NginxのIPアドレスを自分の環境のIPに変更する必要があるので変更します。
Webmin > サーバー > Nginxウェブサーバー から「構成ファイルの編集」で /etc/nginx/nginx.conf のlistenのIPを変更します。ポート80と443の2箇所です。

【/etc/nginx/nginx.conf】
          ・
          ・
          ・
server {
server_name rails-test.com www.rails-test.com mail.rails-test.com;
listen 10.0.2.15 → XXX.XXX.XXX.XXX;
          ・
          ・
          ・
}
listen 10.0.2.15:443 → XXX.XXX.XXX.XXX:443 ssl;
          ・
          ・
          ・

変更後にNginxを再起動します。
(Webmin > ダッシュボードのサーバステータスからでもsshでログインしていればコマンドでも大丈夫です。)
コマンドの場合は以下です。

# systemctl restart nginx

WebminとVirtualminの準備ができましたので、実際にrbenv,Ruby,Bundler,Railsをサーバにインストールしていきます。SSHでログインします。

$ vagrant ssh

rootにユーザを変更して、Railsに必要なパッケージをインストールします。

$ su - root
# yum -y install openssl-devel readline-devel nodejs libuv gcc make libxml2 libxslt libxml2-devel libxslt-devel mariadb-devel zlib-devel libyaml-devel

rootからデフォルトユーザに戻り、デフォルトユーザのユーザディレクトリ(今回の場合/home/rails-testとします)でrbenvをインストールします。rbenvは先にも記載しましたが、プロジェクト毎に異なるRubyのバージョンをインストール、管理できるツールです。

$ 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

PATHが通っているかを確認します。

$ rbenv -v
rbenv 1.2.0-80-gd6bb1c6

バージョンが表示されれば大丈夫です。

次にruby-buildをインストールします。ruby-buildはUNIX系のシステム上で異なるバージョンのRubyをコンパイルしインストールするための、rbenv installコマンドを提供するrbenvのプラグインになります。

$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bash_profile
$ source ~/.bash_profile

PATHが通っているかを確認します。

$ ruby-build --version
ruby-build 20231025-2-gb54a73b

こちらもバージョンが表示されれば大丈夫です。

rbenvとruby-buildが使用できるようになりましたので、Rubyをインストールします。
Rubyのインストール可能なバージョンを確認します。
以下のコマンドで確認ができます。

$ rbenv install --list-all

バージョン一覧が表示されるかと思います。
今回は現時点で最新バージョンである、3.2.2をインストールしようと思います。

$ rbenv install 3.2.2

Rubyがビルドされるので結構時間がかかります。
ビルドの状況は、上記コマンド実行時にログをtailして下さいと表示が出ますので、別のウィンドウでSSHログインし、

$ tail -f /tmp/ruby-build.20231025172352.8473.log

とすることで状況が確認できます。

ビルドが正常に完了すると、インストールしたRubyを有効化して下さいとメッセージが出力されるので有効化します。
有効化は2種類あり、globalとlocalがあります。

global:システム全体で有効化
local:プロジェクト内で有効化 

今回はローカル環境ですので、全体での有効化とします。

$ rbenv global 2.7.8
$ rbenv rehash
※rbenv rehash コマンドを実行すると、大まかには ~/.rbenv/versions/*/bin/ 以下のファイルを ~/.rbenv/shims/ 以下にコピーします。ですので実行するのはrubyをインストールした時に行います。gem installの時は自動でコマンド実行されます。

有効化した後に、以下のコマンドで有効化の確認ができます。

$ rbenv versions
  system
* 3.2.2 (set by /home/rails-test/.rbenv/version)

次にBundlerをインストールします。先に記載しました通り、gemのバージョンや依存関係を管理してくれるgemになります。

$ rbenv exec gem install bundler
※rbenv exec とすることで現在有効なRubyを明示的に指定してインストールされます。

インストール後にバージョンと、場所を確認してみます。

$ bundler -v
Bundler version 2.4.21
$ rbenv exec gem which bundler
/home/rails-test/.rbenv/versions/3.2.2/lib/ruby/site_ruby/3.2.0/bundler.rb

有効なバージョンのRuby配下にインストールされています。

そしてRailsのインストールです。

$ rbenv exec gem install rails
※こちらもrbenv exec で現在有効なRubyを明示的に指定してインストールします。

Bundlerと同様、インストール後にバージョンと、場所を確認してみます。

$ rails -v
Rails 7.1.1
$ rbenv exec gem which rails
/home/rails-test/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/railties-7.1.1/lib/rails.rb

こちらも有効なバージョンのRuby配下にインストールされています。

ようやくRailsのインストールまでができましたので、次回は

    • テスト用のプロジェクト作成
    • Welcomeページ表示
      • ビルトインサーバを使用した場合
      • UNIXドメインソケットを使用してNginxのリバースプロキシを使用した場合(Nginx – puma)

を行いたいと思います。

Related articles

LaravelでPDF生成(mpdf)

EC関連のシステムなどでは請求書や領...

我流Flutter学習ステップ(6)スマホでの動作...

本シリーズ(?)の最初の投稿で書いた...

その「平均値」に意味はあるのか?

最近「平均」に関して思うところがあっ...