MacのシステムRubyは開発に使わない!代わりに使うべき正しい方法
誰かに「システムのRubyを使ってはいけない」とアドバイスされたことはありませんか?実はこれは良いアドバイスなのですが、なぜそう言われるのでしょうか?この記事では、その理由を詳しく解説します。
あなたのMacに入っているのはどのRuby?
macOSには、あらかじめ「システムRuby」がインストールされています。
whichコマンドを使えば、Rubyがどこにインストールされているかを確認できます。
$ which ruby
/usr/bin/ruby
/usr/bin/rubyと表示された場合、それはmacOSにプリインストールされたシステムRubyです。
システム管理用のスクリプトを実行するだけであれば、システムRubyを更新したりgemを追加したりしない限り、そのまま使っても問題ありません。
しかし、Rubyでプロジェクトを開発する場面では、絶対に使うべきではありません。
開発用には別途Rubyを用意しよう
Rubyでプロジェクトを開発する場合は、HomebrewでRubyをインストールするか、asdf・chruby・rbenv・rvmといったバージョンマネージャーを使用しましょう。
複数のプロジェクトを並行して進めていて、すべてを一度にアップデートできないような状況では、バージョンマネージャーが特に役立ちます。各バージョンマネージャーの比較やRubyの最適なインストール手順については、「Install Ruby on a Mac(MacへのRubyインストールガイド)」を参照してください。
では、なぜmacOSのデフォルトRubyを使ってはいけないのでしょうか?開発にMac標準のRubyを使うことが良くない理由を、順番に見ていきましょう。
1. gemのインストールでつまずく
RubyGemsは、Rubyでの開発を簡単かつ快適にしてくれる既製のソフトウェアライブラリです。ほとんどのRubyプロジェクトでは、少なくともいくつかのgemが利用されています。
MacのシステムRubyを使っていると、gem installを実行した際に、gemがシステムRubyのディレクトリ/Library/Ruby/Gems/2.6.0へ保存されようとします。このディレクトリはシステムのスーパーユーザーであるrootが所有しており、一般ユーザーには書き込み権限がありません(そもそもこのフォルダを変更すべきではありません)。
例えばgem install railsを実行すると、次のような権限エラーが発生します。
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.6.0 directory
2. システムのセキュリティを脅かす
UnixベースのOSは柔軟なので、回避策もあります。スーパーユーザーとしてgemをインストールすれば、権限制限を上書きできるのです。しかし、これは絶対にやめましょう。
$ sudo gem install rails
sudoを実行しようとするときは、必ず一度立ち止まって「自分の足を撃とうとしていないか?」と自問する習慣をつけてください。
このケースでsudoが必要になるのは、OSが管理するシステムファイルを変更しようとしているからです。やってはいけません!システムが壊れた状態や侵害された状態のままになってしまう恐れがあります。さらに悪いことに、gemの中に悪意のあるコードが含まれており、コンピュータが改ざんされる危険性もあるのです。
3. gemの管理が困難になる
経験豊富な開発者は、Bundlerを使ってgemをインストールし、依存関係を管理しています。
想像してみてください。プロジェクトごとに異なるバージョンのgemを使っている状況(プロジェクトの合間に新しいgemがリリースされたのかもしれません)。あるいは、同じプロジェクト内の2つの異なるgemが、依存先のgemの異なるバージョンを要求しているケースもあるでしょう。
Bundlerはプロジェクトディレクトリ内のGemfileを使って、必要なgemを正確に追跡します。もしsudoでシステムRubyにgemをインストールしてしまうと、システムRubyのディレクトリに互換性のないgemが混在し、収拾のつかない状態になってしまいます。
ホームディレクトリをgemの保存先として指定するコマンドでBundlerをインストールすれば、権限の問題を回避することも可能です。しかし、HomebrewでRubyをインストールするかバージョンマネージャーを使えば、Bundlerが最初から付属しており、ローカル開発環境が自動的に正しくセットアップされるため、その方がはるかに簡単です。
4. 常に最新のRubyを使おう
プロジェクトを始めるときは、最新のRubyリリースを使いましょう(執筆時点では3.0です)。
macOS CatalinaやBig Surに搭載されているシステムRubyは2.6.3とかなり古いものです。Rubyを学び始めたばかりなら、Homebrewでインストールして、Ruby 3.0でプロジェクトを進めましょう。次のプロジェクトを始める頃には、異なるRubyバージョンのプロジェクトを並行して扱えるよう、バージョンマネージャーの導入を検討するタイミングかもしれません。
Big Sur以降のmacOSではどうなる?
macOS Big Surが現行バージョンとなっていますが、Appleは次のように公式に述べています。
「Python、Ruby、Perlなどのスクリプト言語ランタイムは、レガシーソフトウェアとの互換性のためにmacOSに含まれています。将来のmacOSのバージョンでは、スクリプト言語ランタイムはデフォルトでは含まれなくなり、追加パッケージのインストールが必要になる可能性があります。」
2021年末にこの記事を読んでいるなら、システムRubyはすでに削除されているかもしれません。まだ残っていたとしても、HomebrewやバージョンマネージャーでRubyをインストールし、早めに準備しておきましょう。
Rubyを楽しもう
RailsでWebアプリケーションを構築したい開発者の方には、「Install Rails on a Mac」というガイドもおすすめです。「Install Ruby on a Mac」の内容をさらに発展させ、RubyだけでなくNodeにも対応するバージョンマネージャーの選び方まで解説しています。
Rubyでのコーディングの楽しさをぜひ味わってください!Rubyは「プログラマーの幸せのために作られた言語」として知られています。ただし、忘れないでください。システムRubyはあなたのためではなく、macOSのために存在しているのです。
-
Mac版タスクマネージャーはこれ!「アクティビティモニター」の使い方を徹底解説
「Macのタスクマネージャーはどこにある?」——WindowsからMacに乗り換えたばかりの方なら、一度は疑問に感じたことがあるはずです。実は、macOSにはWindowsのタスクマネージャーと完全に同じものは存在しません。その代わりとなるのが、標準搭載されている「アクティビティモニター」というアプリです。名前こそ違いますが、ほぼ同じ役割を果たしてくれる頼れるツールです。 この記事では、アクティビティモニターとは何か、どうやって起動するのか、そして各機能をどう使いこなせばいいのかを、初心者にもわかりやすく解説していきます。 アクティビティモニターとは? OS(オペレーティングシステム)の重要
-
Macでライン入力(Line In)を使って外部オーディオ機器を接続・活用する方法
すべてのMacには内蔵マイクが搭載されていますが、それとは別に、音声の入出力に利用できるポート——ヘッドフォンジャックも備わっています。もちろん、Appleがこれを有料アドオン化しない限り、の話ですが!そんな日が来るまでは、このポートを活用して、外部マイクなどのライン入力(Line In)対応オーディオデバイスをMacに接続できます。macOSでは、ヘッドフォンジャックの用途を入力側へ切り替えたり、接続したデバイスをデフォルトの入力デバイスとして設定したりすることも可能です。ここでは、macOSでライン入力オーディオデバイスを使用する方法を詳しく解説します。ライン入力(Line In)とは何か