初めに
これまではPHPかPythonでの開発がほとんどだったのですが、様々な事情により、Ruby on Railsの案件に取り組むことになりました。Pythonと比較しながらRuby on Railsを勉強しているのですが、その際に参考にした記事などを残しておきたいと思います。内容は随時更新します。
目次
- Rubyの環境構築
- Railsの導入
環境
- ubuntu 19.04 eoan ermine
- rbenv version 1.1.1
- ruby verison 2.6.5
Rubyそのものについて
Pythonでは、以下の環境を使っていました。
* pyenv(Pythonのバージョン管理)
* pip(デフォルトのPackage管理)
* pipenv(仮想環境構築+Packageの管理)
Rubyでそれぞれに対応するのは、(というかPythonのそこら辺のツールはRubyのツール群に触発されて開発されたものが多いので、こちらのほうが大元というべきなのですが、)
* rbenv(Rubyのバージョン管理)
* gem(デフォルトのPackage管理:ただしRubyではPackageのことをGemとよんでいる)
* bundler(仮想環境構築+Gemの管理)
です。Gemというのは、PythonでいうPackageみたいなもののようです。一般的なRubyプロジェクトは、bundlerを用いて
mkdir PROJECT_DIR
cd PROJECT_DIR
rbenv local 2.6.5 #pipenv install 3.8.0と同じノリです
gem install bundler
bundler init #これによってGemfile, Gemfile.lockが作られる。pipenv initと同じ
vi Gemfile #Gemfileに必要なライブラリ群を記載
bundler install --path vendor/bundler #Gemfileに記載したライブラリ群をvendor/bundler以下にインストール
bundler exec COMMAND #pipenv run COMMANDに対応するコマンド
として環境を作るようです。
PipenvとBundlerは大体同じですが、以下のような細かい違いがあります。
-
bundler exec
はpipenv run
と対応しています。 -
pipenv shell
に対応するコマンドはなさそうです - pipenvでは、Packageのインストール先は、デフォルトで
~/.local
以下に作られ、PIPENV_VENV_IN_PROJECT
でプロジェクトディレクトリ以下に作成されます。 - bundlerでは
~/.bundle/config
ファイルにBUNDLE_PATH = "vendor/bundle"
を指定することでプロジェクトディレクトリ以下(PROJ_DIR/vendor/bundle
に)作成されます。
bundle install
時に--path
オプションを指定すべきかどうかは、宗教戦争になりつつあるようで、bundle install時に--path vendor/bundleを付ける必要性は本当にあるのか、もう一度よく考えてみようが参考になりました。(自分はSystemを汚したくない派なのでvendor/bundleすることにしました)
Rails環境構築
RailsはRuby用のWeb開発フレームワークです。Flaskみたいな感じかと思っていましたが、どちらかというとDjangoのcounterpartという印象です。
Railsは統合的なWeb開発環境であり、bundlerを内包しているとのことです。
ちなみにBundlerとBundleは同じ。
Bundlerの公式ドキュメントによると、RailsはBundlerを内包しています。
Rails comes with baked in support with bundler.
Bundler公式ドキュメント
Bundlerを用いたRailsのインストールは
gem install rails
rails new APP_DIR
cd APP_DIR
bundler install
で良いようです。
しかし、このときのRailsのインストール先はSystemです。SystemのRubyGemはできるだけクリーンに保ちたいので、以下のようにします。
mkdir APP_DIR
cd APP_DIR
bundler init
vi Gemfile #ここでrailsをGemfileに追加
bundler install --path vendor/bundle #上記のBUNDLE_PATHの設定をしている場合は`--path`オプションは不必要
bundler exec rails install -B -d mysql
# -B:rails new 時に改めて bundler install しない
# -d DBとして mysqlを使用。(デフォルトはsqlite)
# ここで既存のGemfileをOverwirteするかどうか訊かれるので、Y