M1 Macが届いたので触ってみた
PONOS Advent Calendar 2020 の16日目の記事です。
昨日は@lovericeさんの Stateパターンを使ってみる でした。
はじめに
流行りのM1搭載MacBook Airを購入しました。🎁
メモリを増やしたりUSキーボードにしたら出荷が遅くなって、届いたのはつい数日前です。
ここまで試したり設定したことを書いておきます。
所感
予想よりも遥かにRosetta2が優秀です。
全然違和感なく使えてて凄い。
インストール済みのアプリだと、GitHub DesktopやDiscordあたりがIntel版バイナリだったんですが、今調べるまで気づかなかったくらいです。
特に、Discordはカメラとかマイクのハードウェアを使うのに、普通に使えてるの凄い。
CPUアーキテクチャ周りのTips
アプリごとのアーキテクチャ切り替え
アプリケーション情報で「種類」欄を見れば、どのタイプか分かります。
「Universal」は、Intel版もArm版も両方のバイナリを同梱しています。
(スクショでかいな・・・)
「Rosettaを使用して開く」にチェックを入れると、Intel版として動きます。
Intel版しかないアプリについては、このチェックボックスは出てきません。(暗黙的にRosettaを使用する。)
アプリがどのアーキテクチャに対応しているか調べる
lipo
コマンドで、アプリ内にどのアーキテクチャ用のバイナリが含まれているかを調べることができます。
参考: ユニバーサルバイナリ再登板ということは「lipo」の出番かも
$ lipo -info /usr/local/bin/fish
Architectures in the fat file: /usr/local/bin/fish are: x86_64 arm64
$ lipo -info /usr/bin/vim
Architectures in the fat file: /usr/bin/vim are: x86_64 arm64e
$ lipo -info /Applications/GitHub\ Desktop.app/Contents/MacOS/GitHub\ Desktop
Non-fat file: /Applications/GitHub Desktop.app/Contents/MacOS/GitHub Desktop is architecture: x86_64
上の例だと、GitHub DesktopはIntel版しか入ってないみたいですね。
シェルが動いているアーキテクチャを調べる
uname -m
もしくは'arch'をオプション無しで叩くことで調べられます。
# Rosetta2(Intel)で動いているとき
$ uname -m
x86_64
$ arch
i386
# ネイティブ(ARM)で動いているとき
$ uname -m
arm64
$ arch
arm64
アーキテクチャを切り替えて実行
archコマンドで、アーキテクチャを指定して実行できます。
$ arch -x86_64 bash
man arch
を見てみると、指定できるのはIntel系のアーキテクチャだけみたいです。
The arch_name argument must be one of the currently supported architectures:
i386 32-bit intel
x86_64 64-bit intel
x86_64h 64-bit intel (haswell)
ので、ネイティブで実行しているシェルから、Intel版バイナリを使いたいときに使用できます。(逆は駄目。)
fish
ログインシェルはfishを使っています。
fish自体もM1 Mac対応していて、特に違和感なく使えています。
プロンプトにアーキテクチャを表示
当面の間はアーキテクチャを切り替え・意識して使うことが多そうなので、プロンプトに表示するようにしました。
honeniq/shellder/fish_prompt.fish
function prompt_arch -d "Display current CPU architecture."
switch (uname -m)
case arm64
prompt_segment white cyan "arm"
case x86_64
prompt_segment cyan white "x64"
end
end
fishのテーマをちょっといじって、「arm」とか「x64」と表示するようにしました。
かわいい。🐠
Homebrew
パッケージマネージャとしてHomebrewを使っています。
公式サイトによると、バージョン2.6.0からM1 Mac対応も始まっているようです。
macOS Homebrew running natively on M1/Apple Silicon/ARM has partial functionality. We recommend installing into /opt/homebrew and forbid installing into /usr/local (to avoid clashing with the macOS Intel install and allow their usage side-by-side). We currently recommend running Homebrew using Intel emulation with Rosetta 2.
とはいえ、まだIntel版をRosetta2経由で使うことを推奨 との事。
ARM版を使う場合は、Intel版とかち合わないよう、Homebrewで管理するパッケージは /opt/homebrew に入れるのが推奨です。
(デフォルト設定だと、推奨通り /opt/homebrew にインストールされます。)
Intel版を使うように強制
推奨通り、当面はIntel版だけを使うことにしました。
シェルがARMで動いているときもIntel版を使えるように、fish functionでbrew
コマンドをラップしてみました。
honeniq/dotfiles/.config/fish/functions/brew.fish
## wrap 'brew' command on M1 Mac
function brew
if test (uname -s) = "Darwin"
and test (uname -m) = "arm64"
command arch -x86_64 brew $argv
else
command brew $argv
end
end
問題なく動いてそう。
しばらくこの形で使ってみます。
明日は @nisei275 さんです!
Author And Source
この問題について(M1 Macが届いたので触ってみた), 我々は、より多くの情報をここで見つけました https://qiita.com/honeniq/items/c2350c7920f4735ac106著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .