今まで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)
を行いたいと思います。