Rosetta2ってなに? [Mac]

----------------------------------------
※2023/12/3
komagataさんのブログでplatformに言及していました!
GemfileのPLATFORMSの書き方 - komagataのブログ
それに伴い修正・追記しています。
----------------------------------------


こんにちは!もとひろです。
今回は、「Rosetta2(ロゼッタ2)ってなに?」をテーマに書きたいと思います。
初心者が書く簡単な内容になると思いますので、ご了承ください。

Rosettaとは

そもそもRosettaとはなんなのでしょうか。

Rosetta とは特定のアーキテクチャのバイナリを別のアーキテクチャのバイナリに変換することで互換性を維持する Apple の技術のことです。

Rosetta 2 ってなに?|M1 Mac ってなに? ぼくにも使える?

現在のRosetta2では、Intel版のアプリケーションをApple Siliconを搭載したMacで使えるようにしてくれるもの、となっています。

Apple Siliconとは

Appleシリコン(Apple silicon)[1][2][3]は、AppleARMアーキテクチャを使用して設計したシステム・オン・チップ(SoC)およびシステム・イン・パッケージ (SiP) プロセッサの総称である。

Appleシリコン - Wikipedia

いわゆるM1チップ、M2チップといわれるやつですね。

Rosetta2 っていつ必要?

Intel版のアプリケーションを使いたい場合です。
Apple Siliconで動くアプリケーションを使う場合は必要ありません。

Intel版のアプリケーションの見分け方

Finderでアプリケーションの情報を確認すると、「一般情報: 種類: 」のところに書いてあります。
アプリケーション(Intel):Intel
アプリケーション(Universal):IntelもAppleSiliconも両方OK
アプリケーション(Apple シリコン):AppleSilicon

Rosetta2をインストールするには

Rosetta2が必要なアプリケーションを開くときにやる方法と、ターミナルからインストールする方法があります。

Rosetta2が必要なアプリケーションを開くときにインストールする方法

アプリケーションを開こうとするとRosettaをインストールするか案内がでるので、それに従ってインストールします。
詳しくは以下を参考にしてください。
Mac に Rosetta をインストールする必要がある場合 - Apple サポート (日本)

ターミナルからインストールする方法

以下を実行します。
$ softwareupdate --install-rosetta

Rosetta2を使うには

インストールしてあれば、Intel版のアプリケーションを使う際に自動的に使用されるようです。
そのおかげでIntel版のアプリケーションを使うことができます。

開発などの都合で、AppleSilicon版ターミナルではなくIntel版ターミナルで操作したい、ということがあるかもしれません。
(そのようなタイミングがあるのかどうか私は現時点で分かりません)
そのような場合には以下の方法でIntel版ターミナルを使うことができます。

AppleSilicon版ターミナルを一時的にIntel版ターミナルにしたい

ターミナル上で以下を入力すると一時的にIntel版に変更されます。
$ arch -x86_64 zsh
元のAppleSilicon版に戻したい時は以下を実行します。
$ exit
また、一時的に変更しているだけなので、一度終了し次回立ち上げたときには元のAppleSilicon版に戻っています。

常にIntel版ターミナルにしたい

ターミナルアプリケーションの「情報を見る」を選択し、「Rosettaを使用して開く」の項目にチェックをいれます。

(小さく表示してますのでクリックで拡大できます)
これだけでターミナルがIntel版へ変更されます。
一度終了しても次回もIntel版のままです。

以下のようにターミナルを2つ使い分けるやり方もあるようです↓
M1 MacでARMとIntelのターミナルを切り替えて使う (Homebrew 3以降の場合) #Mac - Qiita

現在のターミナルがAppleSilicon版かIntel版か確認する方法

$ uname -mを実行します。
AppleSiliconであればarmと表示されます。
M1:arm64
Intelx86_64

AppleSiliconでRailsでのbundle install できないときがあるらしい?

----------------------------------------
※2023/12/3
komagataさんのブログでplatformに言及していました!
GemfileのPLATFORMSの書き方 - komagataのブログ
それに伴い修正・追記しています。
----------------------------------------

以下の記事にこのような記載がありました。

後に判明するのですが、ARMだとRuby on Railsを使って開発しているアプリの bundle install が通らないという問題が発生したこともあり、当面はRosetta2の併用は必須だと感じました。

M1 Macを購入したのでセットアップ&zsh環境をいい感じにした #Zsh - Qiita

通常であればbundle installをすると、既存のプラットフォームと一致しない場合自分のプラットフォームがGemfile.lockに追加されます。
Understanding The Gemfile.lock File

が、Bundlerのバージョンかなにかが合わないと、自分のプラットフォームが追加されずプラットフォームが合わないのでBundlerが正常に動作しないことがあるようです。
なぜBundlerが正常に動かないことがあるのか、それに対してどう対応するのが正解なのか、調べても確証が得られませんでした。すいません。

bundle installできないときにIntel版で実行する方法もありますが、
もし原因がGemfile.lockのプラットフォームであれば、Gemfile.lockのプラットフォームにarmを追加する方法も良いのかなと、私個人としては思いました。
プラットフォームを限定する必要がないのであれば、AppleSiliconもIntelも問題なく使えるrubyuniversal-darwinを追加するのが良いかと思います。
Linuxも問題なく使えるようにするにはx86_64-linuxを追加する必要があります。
Ruby: GemfileとGemfile.lock究極ガイド(翻訳)|TechRacho by BPS株式会社

プラットフォームを追加するには以下を実行します。
$ bundle lock --add-platform ruby
$ bundle lock --add-platform universal-darwin ※追記
$ bundle lock --add-platform x86_64-linux

まとめ

今回はRosetta2について書いていきました!
なかなか理解しづらいところで難しかったです。

間違い等ありましたら、ご指摘いただければ幸いです。

基本的な部分は以下サイトが分かりやすいので、ぜひ参考にしてください。
Rosetta 2 ってなに?|M1 Mac ってなに? ぼくにも使える?



終わります👋