----------------------------------------
※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]は、AppleがARMアーキテクチャを使用して設計したシステム・オン・チップ(SoC)およびシステム・イン・パッケージ (SiP) プロセッサの総称である。
いわゆる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
Intel:x86_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も問題なく使える※ruby
universal-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 ってなに? ぼくにも使える?
終わります👋