Skip to main content

ローカル開発向けにmacOSへRubyをインストールする方法

著者
blog feature ruby security

2022年9月27日

0 分で読めます

RubyまたはRuby on Railsの開発を始めるなら、次のことを知っておきたいでしょう。

  1. MacにRubyを正しくインストールする方法。

  2. brewや既存のRuby 2.7 Macのインストールと競合しないローカル開発環境の構築方法。

このチュートリアルでは、その両方を学びます。新しいmacOS M1搭載のノートパソコンをお使いの場合もご安心ください。このチュートリアルはMac M1へのRubyのインストールにも対応しています。

brew install rubyは絶対に実行しないでください

Rubyをインストールするために、brew install rubyを実行したり、update ruby macコマンドを実行してmacOS上の既存のRubyバージョンを更新したりするよう指示するガイドやブログ記事がありますが、こうした方法は避けることを強くおすすめします。

とはいえ、RedditユーザーのpostmodernはRubyのスレッドで、brewによるインストール先を別のディレクトリに明示的に指定できるだろうと述べています。Brewはデフォルトで/usr/localにインストールしますが、postmodernによると、AppleのシステムRubyスクリプトはインタープリターの場所が/usr/bin/rubyにハードコードされているため、影響しません。また、Appleはプリインストール版のPython、Ruby、Perlを廃止する計画があるとも指摘しています。

MacでシステムのRubyを使えないのはなぜ?

brew install rubyやbrew uninstall rubyなど、標準のRubyバージョンを変更するコマンドを実行すると、macOSの機能に問題が生じるおそれがあります(Mac M1でも同様です)。

また、macOSにプリインストールされているRubyのバージョンは古いことにも注意が必要です。2022年製の新しいM1ノートパソコンでも、ruby 2.6.8p205が使われています。最新バージョンのRuby 3.1.2は2022年4月にリリースされており、macOSのプリインストール版からメジャーバージョンアップしています。

ローカル開発環境ではRuby 3を使いたいと思うでしょう。これだけでも、プリインストール版のRubyから移行する十分な理由になります。さらに、使うバージョンを自由に選べるようになります。これを実現するために、Rubyの仮想環境を利用します。

MacにインストールされているRubyのバージョンを確認する方法

標準でインストールされているRubyインタープリターのバージョンを確認するには、次のコマンドを実行します。

/usr/bin/ruby --version

アップグレードしていない場合、macOS MontereyにはRuby 2.6.8が付属しています。アップグレード済みの場合や、rbenv、rvmなどのRubyバージョン管理ツールを使っている場合は、別のバージョンが表示されることがあります。また、macOSのパッケージマネージャーHomebrewでインストールした場合、ファイルパス/usr/local/bin/rubyにRubyが見つかることもあります。

MacのRubyフォルダはどこにありますか?

Rubyインタープリターは、インストール先によって、macOS上の/usr/bin/rubyまたは/usr/local/bin/rubyにあることがよくあります。Ruby gemはmacOSのオペレーティングシステムによって標準でインストール、管理されるため、sudo gem installの使用やRuby gemへの変更は推奨されません。代わりに、rbenvなどのツールを使ってRubyの仮想環境をインストールすることを検討してください。

Rubyの仮想環境

ほかのプログラミング言語やツールでもおなじみの便利な仕組みが、Rubyの仮想環境です。PythonのvirtualenvやNode.jsのnvmを使ったことがあれば、Rubyのvirutalenvへの移行も簡単でしょう。始めるには、rbenvやrvmなど、Rubyエコシステムのツールをいくつか用意するだけです。

これらのツールは、Rubyのソースコードをインターネットから取得してローカルでコンパイルし、指定したパスから利用できるようにすることで、Macに標準搭載されたRubyとの競合を回避します。その後、新しいディレクトリのパスを使用するシェルに追加するよう指示されます。これにより、新しいターミナルを開いたときに新しいRubyバージョンを使えるようになります。

これらは基本的にRubyのバージョン管理ツールで、設定されたRubyのインストールディレクトリに応じて、必要なときに異なるRubyランタイムバージョンをすばやく切り替えられます。

rbenvとrvm、どちらを使うべき?

よく使われているRubyの仮想環境ツールには、rbenvとrvmがあります。業界の進化に伴い、特定の環境ツールやバージョンは古くなる傾向があるため、rbenvとrvm1の機能を詳しく比較することはしません。その代わりに、Rubyに詳しい開発者仲間に意見を聞き、大多数がすすめていたrbenvを選びました。

まだ試していませんが、注目に値するほかのRuby仮想環境マネージャーとして、chrubyとruby-installがあります。

rbenvを使ってみましょう

オープンソースのrbenvプロジェクトはGitHubで公開されています。問題への対応や最新ドキュメントの確認には、rbenv READMEが役立ちます。

rbenvでRubyをインストールする方法

ほかの多くのツールと同じく、macOSで人気のパッケージマネージャーHomebrewを使います。ターミナルで次のコマンドを実行してください。

brew install rbenv ruby-build

インストールが完了したら、rbenvを使ってシェルを設定します。これにより、新しいターミナルウィンドウを開いてプロンプトからコマンドを入力するたびに、macOSにプリインストールされているRuby 2.6.8ではなく、rbenvで独自にインストールしたRubyランタイムバージョンが使われるようになります。

rbenvをシェルに設定するには、次のコマンドを実行します。

rbenv init

追加の設定が必要な場合は、画面に表示される手順に従ってください。シェルの設定ファイルにコマンドを貼り付けるよう求められることがあります。macOSのデフォルトであるZ Shell(ZSH)を使っている場合は、次のコード行を~/.zshrcファイルの先頭に追加してください。

eval "$(rbenv init - zsh)"

これでrbenvのインストールは完了です。正しく設定できたか診断チェックを実行して確認してもよいでしょう。rbenvのGitHubプロジェクトが提供するrbenv-doctorツールを使うには、次のコマンドを実行します。

  1. 新しいターミナルウィンドウを開き、新しいrbenv環境を読み込みます

  2. 次のコマンドを実行します。

    curl -fsSL https://github.com/rbenv/rbenv-installer/raw/main/bin/rbenv-doctor | zsh

警告:このコマンドを安易に実行しないでください。公開されているオープンソースのGitHubリポジトリ由来のコマンドを、開発環境のシェルにパイプで渡すことになります。悪意ある第三者がソースコードを改ざんしている可能性もあるため、実行する前に必ずコードを十分に確認してください。

rbenvで新しいRubyバージョンをインストールする方法

Rubyの仮想環境を構築できましたね。rbenvの設定が完了したので、これを使ってRubyのバージョンをすべて管理できます。

まず、インストール可能なRubyバージョンを一覧表示して、最新リリースまたは必要な特定のバージョンを選びます。rbenvでRubyの全バージョンを一覧表示するには、次のコマンドを実行します。

curl -fsSL https://github.com/rbenv/rbenv-installer/raw/main/bin/rbenv-doctor | zsh

実行結果は次のとおりです。

2.6.10
2.7.6
3.0.4
3.1.2
jruby-9.3.6.0
mruby-3.1.0
picoruby-3.0.0
rbx-5.0
truffleruby-22.1.0
truffleruby+graalvm-22.1.0

Only latest stable releases for each Ruby implementation are shown.
Use 'rbenv install --list-all / -L' to show all local versions.

表示されたRubyバージョンのいずれかをインストールできます。rbenvを使ってRuby 3.1.2をインストールしてみましょう。

rbenv install 3.1.2

このコマンドを実行すると、必要なソースコードファイルの取得が始まり、展開、コンパイルを経て、シェルから利用できるRuby 3.1.2ランタイムバージョンがインストールされます。

インストールが完了したら、シェルを起動するたびに選択したバージョンが使われるように設定します。そのためには、次のコマンドを実行します。

rbenv global 3.1.2

最後に、シェルでruby --versionを実行して、想定どおりに動作することを確認できます。次のような結果が表示されます。

ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [arm64-darwin21]

最後に、rbenv globalについて補足します。コマンド名がglobalなので、実行するとmacOSのプリインストール版Rubyに何らかの影響があるのではないかと心配していました。しかし、その心配はありません。このコマンドが指すのは、rbenvの設定ファイル~/.rbenv/versionで管理されるユーザー全体の設定です。特定のRubyプロジェクトやディレクトリに紐づかないという意味です。

次にやることは?

Ruby on RailsとRubyのセキュリティ脆弱性

Rubyの開発に取りかかる前に、安全なコーディング規約に従い、Ruby gemを脆弱性から守るために、以下のリソースをご覧ください。フレームワークのRuby gemに起因するRuby on Railsの脆弱性にも、一般的なRubyのセキュリティ脆弱性にも役立ちます。

Rubyの開発とセキュリティに関する、次のリソースを強くおすすめします。

最後に、Rubyを含むさまざまなエコシステムで発生しているサプライチェーン攻撃により、悪意あるリモートコード実行やRuby gemのその他のセキュリティリスクが生じる可能性があることも忘れずに注意してください。

無料のRubyコードチェッカーを今すぐお試しください。Snyk Codeエンジンが、コードのセキュリティと品質に関する問題をどのように分析するか確認できます。

Capture the Flagを始めよう

オンデマンドのバーチャル入門ワークショップを見て、Capture the Flagの課題の解き方を学びましょう。

続きを読む

blog feature snyk container custom base recommendations
Blog

Evo Agentic AppSecのご紹介:AI開発のスピードに対応するセキュリティ

AI駆動型開発のスピードに、従来のセキュリティワークフローは追いついていません。SnykのAgentic AppSecは、セキュリティエージェントが脆弱性を継続的に検出、修正、検証し、人が基準を定められるようにします。

blog feature ai violet
Blog

VulnBump:AIエージェントはビルドを壊さずに脆弱な依存関係を修正できるか?

VulnBumpは、実際の依存関係アップグレード307件を対象にAIエージェントをテストします。脆弱性が解消され、ビルドとテストが成功した場合にのみ、修正としてカウントされます。

Blog

フロンティアモデルは脆弱性を発見した。攻撃者だけがエクスプロイトチェーンを見つけた。

静的解析で欠陥は見つかりましたが、ライブ攻撃テストで侵害につながる連鎖を実証できたのは唯一でした。Evo COS、Claude Security、Claude Code Securityを比較します。