MacBook Pro (M1)でのメモです。インストールできるかどうか状況確認メモです。
自分がよく使うものを中心に。なるべくARMネイティブになるように。もしプライマリーで提供されているインストール手段(.dmg利用など)でARM対応が済んでいればそれを紹介しますが、もしそれで対応していない場合にはMacPortsやソースビルドなどの結果も合わせて紹介します。
PowerPC->x86->x86_64とユニバーサルバイナリを挟んで対応してきたMacPortsはこういう過渡期に強いです。
なお、ここで紹介するバージョンは最新版から古い可能性がありますが、「M1サポートが追加された前後のバージョン」を明記するのを目標にしていますので、これより新しければ問題ないと見てもらえればと思います。
編集リクエストウェルカムです。
現在の状況
IDE/エディタ
Eclipseはあまりきちんと試していませんが、それ以外は使えないということはないです。また、x86_64であっても起動時間以外は問題はないでしょう。
状況 | アプリ | バージョン | arch | インストール | メモ(記録日) |
---|---|---|---|---|---|
✔︎ | Visual Studio Code | stable | ユニバーサル | バイナリインストーラ | 3/6更新: 1.54からmacOSの配布がユニバーサルになりました。単体版も配布されています |
✔︎ | Vim | 8.2.1719 | arm64 | MacPorts | 11/21 |
NeoVim | 0.4.4 | arm64 | MacPorts | 11/22: ビルド失敗 | |
✔︎ | NeoVim | master | arm64 | ソースビルド | 12/24 |
✔︎ | Emacs | 27.1 | arm64 | MacPorts | 12/11更新 |
✔︎ | Emacs | master | arm64 | ソースビルド | 12/06 |
✔︎ | Emacs | 27.1 | x86_64 | バイナリインストーラ | 11/23 |
✔︎ | IntelliJ IDEA Ultimate / Community / Goland / WebStormなど | 2020.3.1 | arm64 | JetBrainsのサイト or toolbox | 12/31更新 Intel版とは別バイナリなので、インストール済みの場合は一度アンインストールが必要 |
✔︎ | GoLand | 2020.2.3 | universal(x86_64/i386) | 公式サイト | 11/20: x86_64向けGoを検知してビルド&実行までできた |
✔︎ | Android Studio | 2020.3.1 | universal(x86_64/arm64) | 公式サイト or toolbox | 2021/11/17: 2021/7/28リリースのArctic Foxからネイティブサポート |
✔︎ | Visual Studio for Mac | 2019 | x86_64 | 公式サイト | 11/24 |
Eclipse | 2020-09 | x86_64 | 公式サイト | 11/24: JDKが選べるが、arm64JDKを指定するとエラー |
開発ツール/パッケージマネージャ
MacPortsやHomebrewのportやformulaによってはまだ非対応のものもあります。
状況 | アプリ | バージョン | arch | インストール | メモ(記録日) |
---|---|---|---|---|---|
✔︎ | MacPorts | 2.6.4 | universal(x86_64/arm64) | Big Sur版 | 11/20 |
✔︎ | Homebrew | 3.0.0 | arm64 | Alternative Installs から | 02/05 |
✔︎ | Docker | AppleSilicon Preview7 | 混載 | Developer Preview版 | 12/11 |
✔︎ | CMake | 3.18.5 | arm64 | MacPorts | 11/20: なにかの依存で入った |
✔︎ | Ninja | 1.10.1 | arm64 | MacPorts | 11/24 |
✔︎ | TexLive | 2020 | arm64 | MacPorts | 11/21: +fullでインストール。途中texlive-fonts-extraでめちゃ時間かかる |
✔︎ | the_silver_searcher | 2.2.0 | arm64 | MacPorts | 11/20 |
✔︎ | Doxygen | 1.8.20 | arm64 | MacPorts | 11/22 |
✔︎ | Graphviz | 2.40.1 | arm64 | MacPorts | 11/22 |
✔︎ | jq | 1.6 | arm64 | MacPorts | 11/22 |
✔︎ | word2vec | 20170716 | arm64 | MacPorts | 11/22 |
✔︎ | mecab | 0.996_0 | arm64 | MacPorts | 11/22 |
QEMU | 5.0.0 | arm64 | MacPorts | 11/27: ビルドエラー | |
QEMU | master | arm64 | ソースビルド | 11/27: ビルドエラー | |
✔︎ | QEMU | master | arm64 | ソースビルド+パッチ | 11/30更新: ビルドは成功し、ビルドしたフォルダでは動くが、make installすると動かなくなる |
✔︎ | fish | 3.1.2 | ユニバーサル | バイナリインストーラー | 11/30 |
✔︎ | pict | master | arm64 | ソースビルド | 12/10 |
✔︎ | gcloud sdk | latest | arm64 | マニュアルインストール | 3/4 |
✔︎ | cocoapod | 1.10.1 | x86_64 | gem | 3/7 |
プログラミング言語
Erlangはmacportsには来ていませんが、23.2でM1対応済みです。どの言語もmaster/mainブランチには対応が入っており、Go/Rustは最新のベータで、それ以外の最新の安定版で対応が降ってきている状況です。メンテナンス期間のバージョンでも使えるかどうかは言語次第ですが、最近のプログラミング言語の後方互換性の高さを考えると、特定のバージョンをサポートしていないとかはあまり気にする必要性は減ってきていますし、Dockerも動くので、逃げ道はいくらでもあります。
状況 | アプリ | バージョン | arch | インストール | メモ(記録日) |
---|---|---|---|---|---|
✔︎ | Python | 2.7.16 | ユニバーサル | プリインストール | 11/30 |
✔︎ | Python | 3.8.2 | ユニバーサル | プリインストール | 11/30 |
✔︎ | Python | 3.8.7 | arm64 | MacPorts | 1/3 |
✔︎ | Python | 3.9 | arm64 | MacPorts | 12/11更新 |
Python | 3.9.0 | arm64 | ソースビルド | 11/20: ビルド失敗 | |
✔︎ | Python | 3.9.1 | arm64 | ソースビルド | 12/11 |
✔︎ | Python | 3.9.1 | ユニバーサル | 公式サイト | 12/11: 深いページに潜らないとx86_64のみのインストーラがダウンロードされてしまう |
✔︎ | Ruby | 2.6.3p62 | x86_64 | プリインストール | 12/02 |
✔︎ | Ruby | 2.6.3p62 | arm64 | MacPorts | 11/20 |
✔︎ | Ruby | 2.7.1p83 | arm64 | MacPorts | 11/21 |
✔︎ | Ruby | 3.0 | arm64 | MacPorts | 1/3 |
Node.js | 12 | arm64 | MacPorts | 11/20: icuのビルドで失敗/upstreamの12への修正まち | |
Node.js | 14 | arm64 | MacPorts | 11/20: icuのビルドで失敗/upstreamの14への修正まち | |
✔︎ | Node.js | 14.15.1 | x86_64 | 公式サイト | 11/20 |
✔︎ | Node.js | 15.4.0 | arm64 | MacPorts | 12/18 |
✔︎ | Node.js | 15.4.0 | arm64 | ソースビルド | 12/18 |
✔︎ | Node.js | master | arm64 | ソースビルド | 11/25 |
✔︎ | PHP | 7.3.11 | x86_64 | プリインストール | 12/02 |
✔︎ | PHP | 7.4.12 | arm64 | MacPorts | 11/21 |
✔︎ | Perl | 5.18.4 | x86_64 | プリインストール | 12/02 |
✔︎ | Perl | 5.26 | arm64 | MacPorts | 11/20: なにかの依存で入った |
✔︎ | Perl | 5.28 | arm64 | MacPorts | 11/21: TexLiveの依存で入った |
✔︎ | Perl | 5.30 | arm64 | MacPorts | 11/21: TexLiveの依存で入った |
Go | 1.15.5 | arm64 | ソースビルド | 11/20: 途中で止まる | |
✔︎ | Go | master | arm64 | ソースビルド | 12/03更新 |
✔︎ | Go | 1.15.5 | x86_64 | 公式サイト | 11/20 |
✔︎ | Go | 1.16 RC 1 | arm64 | 公式サイト | 1/29 |
✔︎ | Java | 8/11/13/16-ea | arm64 | Azul Zulu | 11/21 |
✔︎ | Lua | 5.3.5 | arm64 | MacPorts | 11/22: neovimの依存で入った |
Erlang | 23.1 | arm64 | MacPorts | 11/23: 途中で止まる | |
Erlang | 23.1 | arm64 | ソースビルド | 11/23: configureで止まる | |
✔︎ | Erlang | master | arm64 | ソースビルド | 11/23 |
Rust | 1.47 | arm64 | MacPorts | 11/28: ICUのビルドでエラー | |
Rust | 1.48 | arm64 | Rustup | 11/28: エラー: target 'aarch64-apple-darwin' not found in channel. | |
✔︎ | Rust | 1.49-beta | arm64 | Rustup | 12/15 |
✔︎ | Rust | 1.50-nightly | arm64 | Rustup | 11/28 |
DB/サーバー
状況 | アプリ | バージョン | arch | インストール | メモ(記録日) |
---|---|---|---|---|---|
✔︎ | PostgreSQL | 11.9 | arm64 | MacPorts | 11/21 |
✔︎ | MariaDB | 10.5.7 | arm64 | MacPorts | 11/21 |
✔︎ | MongoDB | 4.4.2 | arm64 | MacPorts | 11/21 |
Redis | 6.0.9 | arm64 | MacPorts | 12/12更新: ビルド失敗 | |
✔︎ | Redis | snapshot | arm64 | ソースビルド | 11/24 |
✔︎ | Apache2 | 2.4.46 | arm64 | MacPorts | 11/22 |
✔︎ | Nginx | 1.19.4 | arm64 | MacPorts | 11/22 |
✔︎ | ZeroMQ | 4.3.3 | arm64 | MacPorts | 11/22 |
✔︎ | DBngin | Build 30 | x86_64 | 公式サイト | 11/22: redis起動しない。その他OK |
デスクトップアプリケーション
状況 | アプリ | バージョン | arch | インストール | メモ(記録日) |
---|---|---|---|---|---|
✔︎ | Google Chrome | 87.0.4280.67 | universal(x86_64/arm64) | 公式サイト | 11/20 |
✔︎ | Firefox | 84.0 | universal(x86_64/arm64) | 公式サイト | 12/16 |
✔︎ | Slack | 4.11.3 | x86_64 | AppStore | 11/20 |
✔︎ | Slack | 4.12 | arm64 | 公式サイト | 12/14 |
✔︎ | Kindle | x86_64 | AppStore | 11/21 | |
✔︎ | KeePassXC | 2.6.2 | x86_64 | 公式サイト | 11/20 |
✔︎ | iTerm2 | 3.4.1 | universal(x86_64/arm64) | 公式サイト | 11/20 |
✔︎ | HandBrake | 1.4.0-beta1 | arm64 | GitHubのインストーラ | 11/23 |
✔︎ | Stoplight Studio | x86_64 | 公式サイト | 11/26 | |
✔︎ | 1Password | 7.7 (70700016) | x86_64 | AppStore | 11/30 |
✔︎ | 1Password | 7.7.1-BETA4 (70701004) | arm64 | 公式サイト | 12/25 |
Canon webcam utility | 1.0 | x86_64 | 公式サイト | 12/19 |
ゲーム/グラフィックス
状況 | アプリ | バージョン | arch | インストール | メモ(記録日) |
---|---|---|---|---|---|
✔︎ | Unreal Engine 4 | 4.25.4 | x86_64 | Epic Game Launcher | 11/20:初回起動とシェーダービルドはファンがめちゃ回るのでAirユーザーには辛そう。一度起動すると高速。 |
Unity2019 | 4.16f1 | x86_64 | Unity Hub | 12/03 空のプロジェクトでWebGL buildが走るところまで確認、ちゃんと動作確認するなら全ターゲットをビルドしてRunさせる必要がある | |
✔︎ | Godot Game Engine | 3.2.3 | x86_64 | 公式サイト | 11/20: 署名されてないので右クリックで注意ダイアログを開いて強制オープンが必要 |
Godot Game Engine | 3.2.4 beta 2 | universal(x86_64/arm64) | 公式サイト | 11/21: 起動せず | |
✔︎ | Blender | 2.92 | x86_64 | 公式サイト | 4/17更新: 2.92がリリースされたがバイナリはx86_64のままだった |
✔︎ | Blender | 2.93 beta | arm64 | daily build | 4/17追加 |
Blender | arm64 | MacPorts | 11/21: 依存パッケージのopenimageioがamd64非対応でインストール不可 | ||
ffmpeg | arm64 | MacPorts | 11/22: arm64非対応 | ||
✔︎ | ffmpeg | ソースビルド | arm64 | MacPorts | 11/24 |
gimp | arm64 | MacPorts | 11/22: 依存パッケージのffmpegがインストール不可 | ||
inkscape | arm64 | MacPorts | 11/22: 依存パッケージのlibrsvgがインストール不可 | ||
✔︎ | Figma | x86_64 | 公式サイト | 11/25 | |
✔︎ | draw.io desktop | 14.1.8 | arm64 | 公式サイト | 01/26更新 |
フォント
| 状況 | フォント |バージョン | インストール | メモ(記録日) |
|:-:|:-:|:-:|:-:|:-:|:-:|
|✔︎| 源ノ角ゴシック | 2.012R| GitHub | 11/30 |
他の方のレポート
DTMステーション
音楽系のアプリの動作レポート。ゲームやグラフィックスはシェーダーやGPUによるところが多く、そこの変換のロスがないため、効率良く動作しますが、同じクリエイティブ系でも音楽はそうはいかないため、ネイティブアプリが出揃うまではパフォーマンスのペナルティは大きいようです。ただ、iOSアプリの活用など、新しい可能性も秘めているので、将来が楽しみですね。
西川和久の不定期コラム
CrossOver 20でWindowsアプリを動かす。日本語フォントもIMEも問題なしとのこと。
React Native
Masayuki IwaiさんのHomebrewを使ってReact Native環境を作る記事。
細かいメモ
バイナリの確認
どっちのバイナリか?はfileコマンドで調べている。32bit/64bit共存時代はアクティビティモニタで見えた気がしたが、今回は違いはない。スクリプト言語製のものはランタイムを調査。
11/22: コメントで指摘いただきましたが、アクティビティモニタの表示項目のアーキテクチャを有効にするとみれます
MacPortsはportコマンドはスクリプト。
% file /opt/local/bin/port
/opt/local/bin/port: a /opt/local/libexec/macports/bin/tclsh8.5 script text executable, ASCII text
そいつのランタイムのtclはユニバーサル。かっこいい。
% file /opt/local/libexec/macports/bin/tclsh8.5
/opt/local/libexec/macports/bin/tclsh8.5: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64:Mach-O 64-bit executable arm64]
/opt/local/libexec/macports/bin/tclsh8.5 (for architecture x86_64): Mach-O 64-bit executable x86_64
/opt/local/libexec/macports/bin/tclsh8.5 (for architecture arm64): Mach-O 64-bit executable arm64
Docker
12/11追記
12/11に開催されているDocker Community All-Handsで、本日中にDeveloper Previewが公開されると表明されました。正式リリースは来年。buildxでマルチプラットフォーム対応(クロスコンパイル)も加速。
12/11さらに追記
Developer Preview版の動作を確認しました。ダウンロードにはDeveloper Preview Programへの参加と、Docker Community Slackへの参加が必要です。Developer Previewに登録してしばらくしてメールが来ると、Slackアカウント名を尋ねるフォームにアクセスできます。このフォームの申請を出すと、Slackでプライベートな開発者向けチャンネルに招待されます。その中でダウンロードのリンクの案内があります。Developer Previewなので問題があったりしたら積極的に報告した方が良いと思われます(今のところ普通に動いてしまって指摘内容は見当たりませんが)。
DockerのCLIはGoで書かれているものの、GoのM1対応が来年の2月なのでそれ以降になるのかな、と思っていましたが、プレビュー版をみると、CLIやDocker DesktopのGUIはx86_64で、バックエンドのサーバープロセスだけがarm64ネイティブになっていますね。
12/18追記
Developer Preview Programへの参加をしなくてもダウンロードできるようになりました。先週、Developer Programで公開されたのはPreview5というバージョンでしたが、こちらのパブリック公開されたバージョンはPreview7に更新されています。
4/17追記
Previewが出て4ヶ月ぐらいですが、とうとう公式版が公開されました。まだGUI周りはIntel版ですが、基本的な動作に問題はありません。
バックエンドの話についてZennに書きました。
Go
12/18更新
M1対応のコードがマージされました。1.16 beta 1がリリースされました。これをインストールすれば完璧です。beta 1なので、試して問題があれば報告しましょう。
Electron
11/17リリースの11.0でM1対応完了済み。VSCode/Slackがネイティブになる日も近い?
Java
Azul Systemsが16以降に対応し、その後8/11/13にバックポート済みで、15にもバックポート予定。
macOSのJavaのダウンロードはAzulのページから行えます。このリンクはJDK11のarm版です。ここからzipファイルをダウンロードして展開します。ここの中のzulu-11.jdk
フォルダを/Library/Java/JavaVirtualMachines
フォルダに配置します。こんな風になるように。
% ls /Library/Java/JavaVirtualMachines
zulu-11.jdk
macOSはこのフォルダに配置されたJavaのJDKを認知して、/usr/bin以下のjavaコマンドやjavacコマンドはここに置かれたJDKにフォワードしてくれます。バージョンを見ると今置いたJDKの情報が出てきます。
% java -version
openjdk version "11.0.9.1" 2020-11-04 LTS
OpenJDK Runtime Environment Zulu11.43+1007-CA (build 11.0.9.1+1-LTS)
OpenJDK 64-Bit Server VM Zulu11.43+1007-CA (build 11.0.9.1+1-LTS, mixed mode)
なお、このJDKをJetBrains製のIDEの実行ランタイムに設定することはできますが、起動しなくなりました。もし失敗して起動しなくなった時は、/Users/[ユーザー名]/Library/Application Support/JetBrains/GoLand2020.2
のgoland.jdk
というファイルを削除すると、デフォルトJDKで起動するように戻ります。焦って再インストールしても復元されませんのでお気をつけください。
Node.js
Node.js会長によると、このPRでM1対応はOKということになっているらしい。masterにはマージされています。
12/18更新
15.3.0にバックポートが、バイナリリリースには含まれていませんので、自分でビルドする必要があります。MacPortsなら、port install nodejs15でバイナリが降ってきます。
Qt
作業中
Erlang
MacPortsはうまくいかなかったが、ソースビルドならできるという話を聞いたのでトライ。ウェブサイトにある23.1のコードはだめだったが、githubから落とした最新であればいけた。
$ git clone https://github.com/erlang/otp.git
$ cd otp
$ export MACOSX_DEPLOYMENT_TARGET=11.0.1
$ export ERL_TOP=`pwd`
$ ./otp_build autoconf
$ ./configure --prefix=/opt/local/erlang
$ make
$ sudo make install
MacPortsとかと混ざらないように、/opt/local/erlangに入れるようなコマンドになっています。/opt/local/erlang/binをパスに通せばOK。
- 公式サイトの説明
- いものやま。: gitリポジトリからビルドの説明
- Erlang/OTP ソースコードインストールのススメ: より詳しい説明。というか、ここをみろ。
Erlangはちょっと前にJITを装備して速度が数倍になるというアップデートがあったのですが、これへの対応はまだとのこと。
Erlang/OTP の ARM 向け JIT は AsmJit が ARM 向けに対応しているので、そのうち入ると思っている。なんで、サーバも ARM になっていくってのもありそう。
— V (@voluntas) November 21, 2020
それでもネイティブで動かせば高速とのこと。
うぉぉぉ Dialyzer が早いぞ Apple M1 。
— V (@voluntas) November 22, 2020
QEMU
パッチが出てきました
4/17追記
GUI付きで仮想PCのハイパーバイザとして使うのであれば、UTMが便利です。
MacPorts
MacPortsはarm64版のバイナリをダウンロードしたり、ないものはビルドしてインストールしてくれる。よきよき。bzip2みたいなのはバイナリがあるので瞬間で終わる。
---> Fetching archive for bzip2
---> Attempting to fetch bzip2-1.0.8_0.darwin_20.arm64.tbz2 from https://kmq.jp.packages.macports.org/bzip2
---> Attempting to fetch bzip2-1.0.8_0.darwin_20.arm64.tbz2.rmd160 from https://kmq.jp.packages.macports.org/bzip2
---> Installing bzip2 @1.0.8_0
---> Activating bzip2 @1.0.8_0
---> Cleaning bzip2
3箇所問い合わせにいってバイナリがなければソースを落としてきてビルドする。ビルド中、全然CPUファンが回らない不思議体験。
---> Fetching archive for xxhashlib
---> Attempting to fetch xxhashlib-0.8.0_0.darwin_20.arm64.tbz2 from https://kmq.jp.packages.macports.org/xxhashlib
---> Attempting to fetch xxhashlib-0.8.0_0.darwin_20.arm64.tbz2 from http://jog.id.packages.macports.org/macports/packages/xxhashlib
---> Attempting to fetch xxhashlib-0.8.0_0.darwin_20.arm64.tbz2 from https://packages.macports.org/xxhashlib
---> Fetching distfiles for xxhashlib
---> Attempting to fetch xxhash-0.8.0.tar.gz from https://kmq.jp.distfiles.macports.org/xxhash
---> Verifying checksums for xxhashlib
---> Extracting xxhashlib
---> Configuring xxhashlib
---> Building xxhashlib
---> Staging xxhashlib into destroot
---> Installing xxhashlib @0.8.0_0
---> Activating xxhashlib @0.8.0_0
---> Cleaning xxhashlib
一度、icuのビルドがおかしくなったが、プロンプトに出てくる説明の通りに、port clean icuしたら治った。
Homebrew
- 12月1日にリリースされた 2.6.0 で M1 / Big Sur のサポートが始まった
- Installation の Alternative Installs 参照
~ ❯❯❯ sudo mkdir /opt/homebrew && \
sudo chown (whoami):staff /opt/homebrew && \
curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C /opt/homebrew
Password:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 128 100 128 0 0 335 0 --:--:-- --:--:-- --:--:-- 335
100 1990k 100 1990k 0 0 2047k 0 --:--:-- --:--:-- --:--:-- 2047k
~ ❯❯❯ set PATH $PATH /opt/homebrew/bin
~ ❯❯❯ brew --version
Homebrew >=2.5.0 (shallow or no git repository)
Homebrew/homebrew-core N/A
~ ❯❯❯ brew update
~ ❯❯❯ brew --version
Homebrew 2.6.0
Homebrew/homebrew-core (git revision 4822f9; last commit 2020-12-02)
GateKeeper
動かし方まで全部わかったわけではないけど、調べたことの備忘録をzennの方に投稿しています。
仮想化
Appleのフォーラムに投稿されたもののうち、2つためしてみて、SimpleVMは動かし方がわからなかったけど、virtualは動いて、Ubuntu Serverのイメージの実行はできました。まあブロックデバイスが存在しないのでインストールはできないのですが・・・
Dev successfully runs ARM Windows virtualization on M1 Mac, says it’s ‘pretty snappy’で、QEMU使ってWindowsを動かした人もいるとのこと。裏の仮想化のOSサポートの部分は全く問題なさそうです。
Dockerはというと、Dockerが利用しているGoのApple M1対応待ちなところもあるかと思います。ただ、こちらも12月リリースのbeta1には入ってくるでしょうし、近々大きなニュースがみられるんじゃないかと期待しています。
cocoapod
Rosettaを有効にしたターミナルを起動して操作する方法を紹介する記事も多いのですが、podコマンドだけをintelモードで起動するのがお手軽です。
# もし間違ってARMでインストールしていたら消す
$ sudo gem uninstall ffi
$ arch -x86_64 sudo gem install ffi
$ arch -x86_64 pod install
Android Studio
2021/7/28リリースのAndroid Studio Arctic Fox 2020.3.1からM1ネイティブサポートになりました。M1機でAndroid Virtual Device Managerを選ぶと、推奨イメージにarm64-v8aなイメージが表示されます。これでAndroidエミュレータもネイティブ動作します。