はじめに
rails new
するにはグローバルにrailsをインストール必要があり、gem install rails
を実行すると、railsとそれに依存するgemが大量にグローバルにインストールされます。別に(私の経験では)大した害はないですが、やっぱりグローバルはクリーンに保ちたいので、グローバル環境をクリーンに保ちつつRailsプロジェクトの環境を構築する手順をメモしておきます。
実行環境
macOS Catalina バージョン10.15.7
gem 3.2.7
ruby 3.0.0
手順
bundlerをインストール
# bundlerはグローバルにインストールします
gem install bundler
# インストールされたか確認
bundler --version
=> Bundler version 2.2.7 # 私の場合、2.2.7でした
プロジェクトフォルダを作成
mkdir my_app
cd my_app
通常、rails new my_app
でフォルダを作ると思いますが、そうしないのがポイントですね。
まあこの段階ではグローバルにrailsを入れてないので、できないんですが、、、
Gemfileを作成
bundle init
Gemfileを編集
# frozen_string_literal: true
source "https://rubygems.org"
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
gem "rails" # この部分をアンコメント
railsをインストール
bundle install --path vendor/bundle
pathを指定することでグローバルではなくプロジェクト直下のvendor/bundle/
にrailsや依存するライブラリがインストールされます。
ちなみに、一度bundle install --path vendor/bundle
を実行すると、
.bundle/config
が作成されます。中を見てみると、
---
BUNDLE_PATH: "vendor/bundle"
環境変数のようなものが設定されており、
これがあれば、次回からbundle install
だけでvendor/bundle/
配下にgemがインストールされることになります。
railsプロジェクト生成
bundle exec rails new .
bundle exec
はグローバルではなく~/vendor/bundle/
のgemを実行してくれます。
他の方の記事では--skip-bundle
を渡しているものもありますが、ここでは、bundle/config
がすでに作られているので、bundle install
が実行されてもグローバルが汚染されることはないです。
Gemfileがコンフリクト起こしますが、上書きして大丈夫です。
サーバー起動
bundle exec rails s
これでサーバーが立ち上がれば成功です。
参考記事
ローカル環境を汚さずにRuby on Railsの環境構築をする - Qiita
新規Railsプロジェクト作成時のコマンド - Qiita