Python 使いのための Ruby 入門
目次
Python と比較しながら Ruby に入門する。
ツールをざっくりと比較#
ざっくりと、という言葉を入れたのは、完全に 1:1 対応とも言い難いため。以下の表は雰囲気を掴む程度に理解する。
Python | Ruby | 説明 |
---|---|---|
Pip | RubyGems (gem ) | パッケージ(gem)の管理とインストールを行うツール |
pyenv | rbenv | Ruby のバージョンを管理。バージョンを切り替えるためのツール。 |
Poetry | Bundler | プロジェクトの依存関係を管理し、gem の依存関係を解決するためのツール。 |
pyproject.toml | Gemfile | プロジェクトの依存関係を記述するファイル。 |
poetry.lock | Gemfile.lock | インストールされた gem のバージョンを固定するためのファイル。 |
指定したバージョンを使う#
Python:
pyenv install 3.11.8
pyenv local 3.11.8
Ruby:
rbenv install 3.0.3
rbenv local 3.0.3
プロジェクト別に仮想環境を作る#
Python:
python3.11 -m venv .venv
. .venv/bin/activate
pip install pytest
Ruby:
bundle config set --global path './vendor/bundle' # これは一度やれば OK
bundle add rspec
ここは厳密に対応関係があるわけではない。
python の venv の場合は runtime 丸ごと .venv
以下にコピーされるが、
一方 ruby の場合は runtime はシステムに (rbenv で) install されたものを使う。ここは異なる。
同じだと言えるのは、インスールしたライブラリを保存する場所を、システムのそれとは独立させられること。上のコマンドを実行すると、 python では .venv
以下に
保存されるし、 ruby では ./vendor/bundle
以下に保存される。ちなみに ./vendor/bundle
という directory 名が
慣例としてよく利用されているようだ。これは Bundler の docs にも記述されている。
ちなみに、 bundle config set --global path './vendor/bundle'
をすると、その config は ~/.bundle/config
に保存される。
同様のコマンドで bundle config set --local path './vendor/bundle'
があり、そのとき config は .bundle/config
に保存される。
global と local 両方に config がセットされている場合 local のほうが勝つ。
コマンド例#
Poetry コマンド | Bundler コマンド | 説明 |
---|---|---|
poetry add <package> | bundle add <gem> | 依存関係としてパッケージ/gem を追加する |
poetry add --group dev <package> | bundle add --group dev <gem> | dev group に依存関係としてパッケージ/gem を追加する |
poetry install | bundle install | プロジェクトの依存関係をインストールする |
スクリプトをシンプルに実行する#
Python:
# 仮想環境を activate した状態で
python a.py
Ruby:
bundle exec ruby a.rb
ポイントは bundle exec
にある。これでプロジェクト毎に install したライブラリを利用しながら実行することができる。
テストを実行する#
Python:
# 仮想環境を activate した状態で
pytest
Ruby:
bundle exec rspec
または
bundle install --binstubs # 一度やれば OK
bin/rspec
bundle exec rspec
は rspec
コマンドを bundle
配下で実行するという意味で、上の ruby のコマンド実行と同じ意味。
ruby の実行とちょっと違うのは、この bundle exec
を省略することができること。一度 bundle install --binstubs
を実行すると、 ./bin
directory ができて
その下に rspec
という実行ファイルができる。これを指定して実行することで bundle exec
を省略することができる。
この話は bundle exec rails
でも同様。
VSCode での debug#
どうも vscode-rdbg が良いみたいなので入れてみたけど、よかった。 VSCode の Python extension だと Testing というのがあったけど、 Ruby の場合は Debug しかないのかな? F5 で debug を実行できる。 break point を 設定したりできて良かった。
Ruby のある version 未満の場合は gem install debug
をしておく必要があるみたい。
また上の設定をしている場合は .vscode/launch.json
はデフォルトからちょっといじる必要がある。
"rdbgPath": "bin/rdbg",
を追加しておく必要がある。
文法を学ぶ#
以下のようなドキュメントが参考になる: