質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

1017閲覧

rails newの前にインストールされたrailsと、rails newでbundlerによってインストールされるrailsの違い

mdfaf

総合スコア3

Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2021/11/23 08:46

#Railsのinstallについて
rails newを実行した際に生成されるGemfileの中に**gem 'rails'**という記述があるのですが、
gem installで入れたrailsとこのgemfileからbundlerで入れたrailsは何がちがうのでしょうか。なぜここでもインストールしているのでしょうか。

Gemfile

1コードsource 'https://rubygems.org' 2git_source(:github) { |repo| "https://github.com/#{repo}.git" } 3 4ruby '2.6.3' 5 6# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' 7gem 'rails', '~> 5.2.5' 8# Use sqlite3 as the database for Active Record 9gem 'sqlite3' 10# Use Puma as the app server 11gem 'puma', '~> 3.11' 12# Use SCSS for stylesheets 13gem 'sass-rails', '~> 5.0' 14# Use Uglifier as compressor for JavaScript assets 15gem 'uglifier', '>= 1.3.0' 16# See https://github.com/rails/execjs#readme for more supported runtimes 17# gem 'mini_racer', platforms: :ruby 18. 19. 20.

##行ったこと
AWScloud9を用いているのでRubyはインストール済みです。

terminal

1$gem install rails -v 5.2.5 2$rails new test_app

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

gem installで入れたrailsとこのgemfileからbundlerで入れたrailsは何がちがうのでしょうか。

バージョンが違うものが入る可能性はありますが、基本的には同じものです。

なぜここでもインストールしているのでしょうか。

bundler経由でインストールするとGemfile.lockというファイルが作られますが、bundlerを使う場合にはこのファイルに書かれたGemしか使われないので、Gemfileに書いて「railsも使う」ことを明示しておく必要があります。

投稿2021/11/23 08:57

編集2021/11/23 08:58
maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2021/11/23 09:00

なお、「bundlerなしでRailsを使う」というのは、現実的な選択肢ではありません。
guest

0

ベストアンサー

@maisumakun の回答で正しいと思いますが、「なぜ」という点について、加筆します。

bundlerでRailsを入れておくことで、システムに入っているRailsの今後の変遷に拘らず、Railsアプリの実行環境の統一性が保たれます。実際、システムに入っているrails (rails newを行った時に使われたrails)は、その後、いつでもバージョンアップ(あるいはダウン、あるいは消去)される可能性があります。それをした途端にRailsアプリまで挙動不審になったり動かなくなるのは、困ります。

newで作ったrailsアプリの中にrails自体がインストールされていることで、そのような場合でも、bin/railsを実行することで、いつでも統一性が確保されます(実用的には、素のrailsを使うのは rails newを実行する時だけであり、それ以降は__毎回必ず__bin/railsを用いるのが安全だと思っています。例えば、bin/rails c など)。

あるいは逆に、システムのrailsは以前のバージョンのままにして、特定のRailsアプリのrailsだけはバージョンアップしたい場合もあるでしょう。その場合も、bundleを使うことで簡単にそれが実現できます。

このような実用性の面からも、bundlerによってRailsがインストールされるのは好ましいことでしょう。

投稿2021/11/23 21:42

MasaSakano

総合スコア188

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mdfaf

2021/11/24 03:07 編集

補足説明ありがとうございます。とても参考になりました! 説明の中で、(実用的には、素のrailsを使うのは rails newを実行する時だけであり、それ以降は毎回必ずbin/railsを用いるのが安全だと思っています。例えば、bin/rails c など)とおっしゃっていますが、普段使っているコマンドのrails serverやrails generateなどはgem installで入れたrailsを使っているということになるんでしょうか。bundlerで入れたrailsを使うときはbin/railsやbundle exec rails などのように明示的に指定する必要があるということですか?
MasaSakano

2021/11/24 12:12

はい、その通り、明示的指定が必須です(実行環境のシェルのcommand-search PATHを特別に設定しているとか、シェルで意図的に専用aliasを設定していれば話は別ですが)。 generateは所詮ヘルパーなのでどちらを使っても大した問題ではありませんが、rails serverは重大な問題を引き起こす可能性がなくはありません。万全を期すならば、rails newを実行した後、システムからはrailsをuninstallしておけば間違いなくて安全だと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問