内容
普段 Ruby を使っていない人向けに Ruby の環境を構築するまでの工程を書く。Ruby プログラムを書く予定はないが、Ruby 製のアプリケーションを利用するために、 Ruby 環境を構築する必要があったのだが、検索しても分かりにくい記事やら明らかに内容が非 Ruby 書いてる人から見ても変なのばっかヒットするので、自分で書く。私は専門家でもなんでもないので、書いた内容の正しさは保証しません。
Ruby を使っている人が全然書いてくれない前提条件
本当の専門家はおそらくみんな知っているのだろうが、検索でヒットしないのが悲しい。
- OS に含まれるインタープリタ型プログラミング言語のインスタンス A と開発に使うインスタンス B が同じ A = B だと、B をカスタマイズすると A を含む OS が壊れるので、A ≠ B となるように B を別に用意するのが現代では一般的である。
- macOS(やその他多くの Unix-like システム) は Ruby を含む。
- rbenv が Ruby に対して前提条件1を実現するために存在する。
- Ruby のパッケージ(部品化された Ruby で書かれたプログラム)は gem と呼ばれている。
- gem を取り扱うプログラムの名前とコマンド名は
gem
である。 - gem にはそのまま gem 名のコマンドとして呼び出し可能なものがある。
- プログラム
gem
はパッケージ管理ソフトとしては(おそらく)機能が不十分である(と考えられている)。 - プログラム
gem
を補完し、パッケージ管理ソフトとするプログラム Bundler が存在する。 - Bundler は
bundle
という名前の gem であり、呼び出し可能である。 - コマンド
bundle
を実行すると現在のディレクトリ下のGemfile
という名前のテキストファイルの指示に従って様々な gem をインストールし、Ruby 環境を構成する。 - Ruby アプリケーションは1つの gem として提供される(ものもある)。
- 高度な Ruby アプリケーションは複数の Ruby アプリケーションの連携で構成される。
- 高度な Ruby アプリケーションを真面目に取り扱うならば、bundler を利用するのが自然である。
やること
前提条件を考えると、gem で提供される Ruby アプリケーションを真面目に使うには、
- Ruby
- rbenv
- gem
- bundler
を利用する必要があることが分かる。私は Fish Shell を使っているので、bash や Zsh 利用者とは異なる部分が含まれる。
- rbenv を Homebrew を通してインストールし、Fish 上で機能するように rbenv に指示された通りに謎の設定コマンドを Fish の設定ファイルに記述する。
- 最新の Ruby インスタンスをインストールする。
- インストールした Ruby インスタンスをシェルが呼び出す Ruby インスタンスに指定する。
- Ruby インスタンスに bundler をインストールする。
- やんなきゃ動かない謎のコマンド
rbenv rehash
を実行する。
#! /usr/bin/env fish
brew install rbenv
echo "status --is-interactive; and source (rbenv init -|psub)" >> $HOME/.config/fish/config.fish
rbenv install 2.7.2
rbenv global 2.7.2
gem install bundler
rbenv rehash
rbenv rehash
は必要なのだが、なぜ必要なのかは理解していない。
Ruby アプリケーションのインストール
- 私は Asciidoctor で図形を楽に入れられるようにする Asciidoctor Diagram を利用したい。
- 私は私のユーザースペース全体でこのアプリケーションが機能すればいいので、ホームディレクトリ以下に ファイル
Gemfile
を作成し、そこに、gem の設定を記述し、bundler を動かす。 - やんなきゃ動かない謎のコマンド
rbenv rehash
を実行する。
#! /usr/bin/env fish
echo "\
source 'https://rubygems.org'
gem 'asciidoctor'
gem 'asciidoctor-diagram'
" > $HOME/Gemfile
bundle
rbenv rehash
こちらも同様に rbenv rehash
が必要なのだが、なぜ必要なのかは理解していない。
あとがき
ただアプリケーションが動くようになった過程を書いただけなので、詳しい方の補足・訂正・批判を待っています。