M1 Mac

はじめに

2020-11-13 に Apple Store で注文した MacBook Air 16G/256G が 2020-11-29 に届いたのでさっそく設定。

2020-11-20 に生協に注文した Mac mini 16G/256G は 2021-01-12 に届いた。

どちらもメモリ16Gにしたが,通常は8Gで十分かも。SSDは満タンの半分程度で使うつもりで選ぶほうが安心。

セットアップと一般的な設定

他の Mac からコピーという手もあったが,ここはクリーンセットアップすることにする。Apple ID を設定したら iCloud から多くの設定を拾ってくれたので,たいした手間ではない。セットアップ中に「コンピュータアカウントを作成」でアカウント名が okumuraharuhiko とサジェストされるので okumura に直す(後でも直せる)。

まずは「システム環境設定」→「ソフトウェアアップデート」でOSをアップデート。「セキュリティとプライバシー」で FileVault をオンにする。

コンピュータ名が長ったらしいものになったのでシステム環境設定の「共有」で直す。ついでに「リモートログイン」を許可しておく(ssh でログインするため)。

Finder の環境設定→詳細で「すべてのファイル名拡張子を表示」をオンにする。Safari の環境設定「一般」で「ダウンロード後、“安全な”ファイルを開く」をオフにする。

メール設定では,表示→「メッセージ内のリモートコンテンツを読み込む」をオフに,作成→メッセージのフォーマットを「標準テキスト」に。

システム環境設定でキーボード→ショートカット→入力ソースのショートカットは Emacs に有害なので外す。キーボード→音声入力はデフォルトではControlキーを2回だが,これもControlキーを多用すると間違いやすいので,これ以外(例えばFnを2回)にする。ついでにキーリピートを最速にする(爆速にする方法もある)。

コントロールセンターでキーボードの輝度をゼロに(MacBook Air)。

「システム環境設定」→「ディスプレイ」で正しい解像度が選べない場合は Option キーを押しながら「変更」をクリック(→ Apple M1チップ搭載MacとEIZOモニターの互換性)。

(これは好みだが)システム環境設定でディスプレイの色温度を自分好みに設定する。あるいは1日中 Night Shift に設定するのが簡単。

以上以外に,私は非常に慎重を期すためにいつも自分を管理者から外している。具体的には,システム環境設定の「ユーザとグループ」で自分(奥村)以外に管理者(名前は例えば admin とする)を一人作成し,その管理者(Apple ID には紐付けない)でログインし直して奥村を一般ユーザに格下げする。これで何か重要なことをする際には管理者の名前とパスワードを聞いてくるのでうっかり危ないコマンドを実行する危険性が減る。Unix 的には sudoers から外したことに相当する。コマンドでシステム領域に触れたいときは su admin してから sudo 何々 する。ただ,macOS はデフォルトでずいぶん安全になったので,今はここまでする必要はないかもしれない。

M1 Mac に残る問題(おそらく Big Sur 11.2 で改善されたはず):

ターミナル

ターミナルを開き,試しに uname -m と打ち込むと arm64 と表示される。いったんターミナルを閉じて,Finder でターミナルを選択して「情報を見る」で「Rosettaを使用して開く」にチェックを付けると Rosetta がインストールされる(一般には任意の x86_64 なアプリを最初に起動したときに Rosetta がインストールされるのであろう)。Rosetta で開かれたターミナルに uname -m と打ち込むと x86_64 と表示される。今度は「Rosettaを使用して開く」をオフにしてターミナルを開き直して uname -m するとまた arm64 になるが,Rosetta がインストールされたので

arch -x86_64 uname -m

と打ち込むと x86_64 になる(Rosetta がない状態ではこのコマンドは Bad CPU type in executable エラーになる)。このようにちょっとしたコマンドなら arch -x86_64 を冠することにより Rosetta で実行できるが,まとまったことをするには

arch -x86_64 zsh

とすれば Rosetta で zsh が立ち上がる。x86_64 のコードを実行するにはこの状態で行う。.zshrc に alias x86='arch -x86_64 zsh' のようにエイリアスを作っておけば x86 と入力するだけでこの状態になる。

シェル

今まで bash を使っていたが,クリーンセットアップしたので zsh になった。とりあえずプロンプトを見やすくするために ~/.zshrcPROMPT='%m:%~%# ' と書き込む。あるいは Rosetta 状態かどうかをプロンプトに含めてもよい:

ARCH=`uname -m`
PROMPT="${ARCH} %m:%~%# "

あるいは場合分けもできる:

ARCH=`uname -m`
if [[ $ARCH == 'arm64' ]]; then
    PROMPT="[a] %m:%~%# "
else
    PROMPT="[x] %m:%~%# "
fi

ほかに例えば次のようなオプションを設定しておく:

HISTFILE=~/.zsh_history
HISTSIZE=1000
SAVEHIST=1000
setopt HIST_VERIFY
setopt INC_APPEND_HISTORY
setopt HIST_IGNORE_ALL_DUPS
setopt HIST_ALLOW_CLOBBER
setopt HIST_REDUCE_BLANKS
setopt HIST_IGNORE_SPACE
setopt NO_HIST_BEEP
setopt NO_CLOBBER

環境変数は ~/.zshenv で設定するが,NO_GLOBAL_RCS オプションを指定しないと PATH を上書きされてしまう。

setopt NO_GLOBAL_RCS
export PATH=... # bashと同様

PATH は上記のように場合分けして設定する。

Command Line Tools

コマンドラインで開発する場合,巨大な Xcode をインストールする必要はない。コマンドライン用の開発ツールは,何らかの開発用コマンド(gcc とか python3 とか)を実行しようとするとインストールを促される。より確実な方法は,ターミナルに xcode-select --install と打ち込むか,https://developer.apple.com/downloads からダウンロードしてインストールする。

Homebrew

Homebrew 3.0.0: "Apple Silicon is now officially supported for installations in /opt/homebrew."

wget,gnupg,pinentry-mac,imagemagick,poppler,ffmpeg,graphviz など,大部分のものは Apple Silicon 版が用意されるようになった。pandoc はまだ Intel 版だけ。

ARM 版は,Installation にあるように /opt/homebrew(ユーザ権限で書き込めるようにしておく)にインストールする:

cd /opt
curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew

ARM 版 Homebrew で brew install emacs でインストールされる emacs はターミナル版。brew install --cask emacs でインストールされるものは Emacs for Mac OS X のバイナリで M1 用ではないが Rosetta で動く。

Rosetta で実行する Intel 版は通常通り Homebrew の最初に書いてあるコマンドを uname -m が x86_64 なターミナルに打ち込めばインストールできる。

Emacs 27

arm64 環境でビルドしてみたがエラー。Rosetta 環境でなら簡単にできたので,現在はそれを使っている。ビルドが面倒な場合には適当なバイナリを探してくる。

Python

Apple のコマンドラインツールに入っている /usr/bin/python3 は universal binary な 3.8.2 である:

% file /usr/bin/python3
/usr/bin/python3: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64e:Mach-O 64-bit executable arm64e]
/usr/bin/python3 (for architecture x86_64):	Mach-O 64-bit executable x86_64
/usr/bin/python3 (for architecture arm64e):	Mach-O 64-bit executable arm64e

これに Apple から提供されている tensorflow_macos を入れれば Apple Silicon に最適化された TensorFlow とその依存するパッケージ群(numpy など)が入る。TensorFlow Blog の Accelerating TensorFlow Performance on Mac 参照。venv なので,bash 互換シェル(zsh でもよい)で source ~/tensorflow_macos_venv/bin/activate すると使えるようになり,deactivate で戻る。matplotlib や pandas は入らない。pip で入れようとしてもコンパイルでエラーになる。強者用である。

本家 python.org の Python が 3.9.1 から universal バイナリも experimental という括弧書きで提供されるようになった。ただし pip で簡単にパッケージを追加できる状況にないので,混乱しないためには通常の macOS 64-bit Intel installer でインストールし,Rosetta で使うのが簡単である。インストールすると zsh を使っている場合は .zprofile に PATH が追記されるので適宜修正する。

一方,miniforge を使えば主要ライブラリを含めて arm64 版がインストールできる(こちら参照)。うまくすれば Apple の TensorFlow と組み合わせることもできる(TensorFlow 2.4 on Apple Silicon M1: installation under Conda environment および Benchmark M1 vs Xeon vs Core i5 vs K80 and T4 参照)。

miniforge は Homebrew で入れるのが簡単。/opt/homebrew/bin/brew install miniforge とすればよい。/opt/homebrew/Caskroom/miniforge 以下に入るので /opt/homebrew/Caskroom/miniforge/base/bin をPATHに加える。conda update --allconda listconda install ... のようにして管理する。パッケージは /opt/homebrew/Caskroom/miniforge/base/lib/python3.9/site-packages に入る。

ただ,ipython --matplotlib と打ち込んだだけで bus error で落ちてしまった。通常のコードは実行できるし,ipython --simple-prompt --matplotlib なら落ちないので,UI がらみか。 ← 直った。

R

Fully Native M1/Apple Silicon R Setup のようにすれば arm64 版 R ができるとのこと。

R は今のところ arm64 対応していない(Will R Work on Apple Silicon? 参照)。まずは Fortran 90 compiler が必要とのこと。

TeX

TeX Live 2021 pretest が出た。Universal バイナリが含まれているようだ。以下は古い情報。

Rosetta で使っても十分速いが,native なコードを使いたければ,MacTeX の About Arm のページから MacTeX-2020-Universal.pkg をダウンロードして展開して得られるバイナリで TeX Live 2020 のバイナリを置き換えればよい。例えば TeX Live 2020 が /usr/local/texlive/2020 にインストールされているなら次のようにすればよい。

pkgutil --expand MacTeX-2020-Universal.pkg /tmp/hoge
pax -rz -f /tmp/hoge/MacTeX-2020-Universal-Start.pkg/Payload
mv usr/local/texlive/2020/bin/custom /usr/local/texlive/2020/bin/

これで /usr/local/texlive/2020/bin/custom にパスを通す。

lualatex で188ページの原稿をコンパイルする時間(数回のうち最小値):

VS Code

Download Visual Studio Code からダウンロードできる Mac 版は Intel 用。Download Visual Studio Code Insiders で ARM64 をクリックすれば ARM 版が入る。

X Window System

XQuartz 2.8.0 beta1 で Apple Silicon をサポート。

参考