背景
Ruby を始めるにあたって環境構築をしようとしたところ、rbenv、RVM、bundler、gem、etc.. のよう言葉が出てきて混乱しました。
ある程度理解できたと思うのでまとめます。
Rubyのバージョン
ルビーのバージョン2.3で作ったアプリは、ルビーのバージョン2.6が入った端末だといじれない。
ルビーのバージョン2.6で作ったアプリも同様にルビーのバージョン2.3が入った端末だといじれない。
一つの端末に複数バージョンのRubyは共存できない。(rbenv、RVMとか使わない場合)
rbenv、RVM とは
バージョン管理ツール。入れると1台の端末で異なるバージョンのRubyが共存できるようになる。
▼使用例
・状況
去年から開発してるアプリAのRubyバージョンは2.3
来月から開発するアプリBのRubyバージョンは2.6を使いたい
・問題点
アプリAとアプリBを同時に開発したいが一つの端末に複数バージョンのRubyは共存できない、どうしよう・・
・解決方法
rbenv、またはRVMを使うと一つの端末に複数バージョンのRubyが共存できるようになる
アプリAを開発するときはバージョン2.3に切り替え、アプリBを開発するときはバージョン2.6に切り替えられる
といった感じです。
▼RVMとrbenvの比較
・RVM
上記で述べたバージョン切り替え機能に加え、特定バージョンのRubyを指定してインストールできる
RVMを入れるとデフォルトのCDコマンドがRVM仕様のCDコマンドに上書きされる
rbenvより重い
bundlerと相性が良くない
・rbenv
上記で述べたバージョン切り替え機能を使えるが、特定バージョンのRubyを指定してインストールできない
ruby-buildを入れると特定バージョンのRubyを指定してインストールできるようになる。
バージョンの切り替えがRVMより簡単
最近はRVMよりrbenvが使われることの方が多い?
など、違いは他にも結構あるみたいです。
gemとは
ライブラリのこと。別名。有名なwebフレームワークのRailsもgemの一つである。
Railsについて、Rails自体が他の様々なgemに依存しているため、Railsを入れるとRailsが依存するgemも一緒に入れないといけない。
gemの依存関係管理は大変らしい。
同一プロジェクト内で同じ種類のgemの複数バージョンは使えない。(bundlerを使わない場合)
▼下記に大半のgemがある
https://rubygems.org
http://bestgems.org
GitHubにしか公開されてない隠れgemもある。
bundlerとは
gemの依存関係管理が楽になる。
gemの種類やバージョンを管理できる。
gemfileに記載したgemを一括インストールできる。ローカルインストールできる。
別端末にGemfileを共有すると、Gemfileに記載されたgemを別端末に一括で入れられる。
同一プロジェクト内で同じ種類のgemの複数バージョンを同時に使えるようになる。
bundler自身もgem。
使ってないと地獄を見ることがある。
ローカルインストール
bundlerを介してプロジェクトごとにgemをインストールすること。
bundlerを介さず、Ruby環境全体にgemをインストールすることをローカルインストールとは対にグローバルインストールと言う。
環境構築の際はbundlerのみをグローバルインストールし、その他gemは可能な限りローカルインストールすることが望ましいと感じる。
RSpecとは
テストプログラムを走らせるために必要なgem。テスティングフレームワーク。
テストデータを用意するためのFactoryBotと共に、利用される事が多い。
Rubocopとは
Rubyのリンター、フォーマッターのこと。
envとは
使い分けできる環境のこと。
Railsではデフォルトでdeveloper
test
production
環境が用意されている。
ブランチごとに上記3つの環境を使い分けることができる。それぞれの環境に異なるgemをインストールしたり、異なるDB(テスト用DBなど)を使用できる。
developerで開発し、最終的にproduction
をpushするのが一般的。
フロントエンド関連
Railsに限ったことではありませんが、フロントエンドの主要素は下記3点だという認識です。
HTML
後述するCSS、Javascriptは、HTMLが存在する前提で使用する。
後述するCSS、Javascriptは、HTMLの見た目の表現と動的な振る舞いを強化する目的で使用する。
WEBサーバーの処理結果によって、HTMLのデータを部分的に動的にするのが「テンプレートエンジン」。テンプレートエンジンを使うとHTMLの記述が楽になることもある。
Railsでは主に下記のテンプレートエンジンが利用される。
・ERB
・Slim
・Haml
JavaScript、TypeScript(動的な振る舞い)
動的な振る舞いをさせるプログラミング言語。
下記のようなフレームワーク、ライブラリがある。
・Vue(javaScript、TypeScriptのフレームワーク)
・Nuxt(javaScript、TypeScriptのフレームワーク)
・React(javaScriptのフレームワーク)
・Angular(javaScriptのフレームワーク)
・JQuery(javaScriptのライブラリ)
CSS(見た目の表現)
HTMLのヘッダー部分や、タグ内にstyleで記述される。または外部CSSファイルを読み込む(HTMLヘッダーにCSSファイルを記述する)。
CSSを自分で1から作らなくても見た目の表現ができるCSSフレームワークがある。
CSSフレームワークは上述した動的な振る舞いをさせるプログラミング言語と組み合わせて使用する。
下記のようなものがある。
・vuetify(Vue)
・MATERIAL-UI(React)
・BootStrap
フロントエンドの構成の一例として、下記のような組み合わせが考えられる。
・(HTML+ERB) + (javaScript(vue)) + vuetify
・(HTML+Haml) + (TypeScript(vue)) + vuetify
・(HTML+Slim) + (javaScript(React)) + MATERIAL-UI
etc...
蛇足
Rubyで開発をする際は下記のようなIDEやエディタが使われるようです。
NetBeans
eclipse
RubyMine
Aptana Studio
Atom
vscode
XCode(Mac)
私の記事に不備などありましたらご指摘いただけると幸いです。