はじめに
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