Help us understand the problem. What is going on with this article?

M1 Macの開発環境

MacBook Pro (M1)でのメモです。インストールできるかどうか状況確認メモです。

自分がよく使うものを中心に。なるべくARMネイティブになるように。PowerPC->x86->x86_64とユニバーサルバイナリを挟んで対応してきたMacPortsはこういう過渡期に強いです。

編集リクエストウェルカムです。

現在の状況

※上流の言語がまだサポートしていないもの(Go製のもの)はまだリストに入れていません(例: Hugo)

IDE/エディタ

状況 アプリ バージョン arch インストール メモ(記録日)
✔︎ Visual Studio Code exploration arm64 insider build 11/24更新: Insiderページの右下のARM64 Experimentalを選べばARMネイティブ
✔︎ Vim 8.2.1719 arm64 MacPorts 11/21
NeoVim 0.4.4 arm64 MacPorts 11/22: ビルド失敗
Emacs 27.1 arm64 MacPorts 11/21: ビルド失敗
✔︎ Emacs 27.1 x86_64 バイナリインストーラ 11/23
✔︎ GoLand 2020.2.3 universal(x86_64/i386) 公式サイト 11/20: x86_64向けGoを検知してビルド&実行までできた
✔︎ Visual Studio for Mac 2019 x86_64 公式サイト 11/24
Eclipse 2020-09 x86_64 公式サイト 11/24: JDKが選べるが、arm64JDKを指定するとエラー

CLIツール/パッケージマネージャ

状況 アプリ バージョン arch インストール メモ(記録日)
✔︎ MacPorts 2.6.4 universal(x86_64/arm64) Big Sur版 11/20
✔︎ 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/27: ビルドは成功するものの実行時にsigkill

プログラミング言語

状況 アプリ バージョン arch インストール メモ(記録日)
✔︎ Python 2.7.16 ユニバーサル プリインストール 11/30
✔︎ Python 3.8.2 ユニバーサル プリインストール 11/30
✔︎ Python 3.8.6 arm64 MacPorts 11/20
Python 3.9 arm64 MacPorts 11/20: ビルド失敗
Python 3.9 arm64 ソースビルド 11/20: ビルド失敗
✔︎ Python master arm64 ソースビルド 11/25
✔︎ Ruby 2.6.3p62 arm64 MacPorts 11/20
✔︎ Ruby 2.7.1p83 arm64 MacPorts 11/21
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 master arm64 ソースビルド 11/25
✔︎ PHP 7.4.12 arm64 MacPorts 11/21
✔︎ 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 issueの手順でビルド ビルドはできたがこのコメントの署名ではダメ。きちんとやるにはお布施が必要?
✔︎ Go 1.15.5 x86_64 公式サイト 11/20
✔︎ 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.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.6 arm64 MacPorts 11/22: ビルド失敗
✔︎ 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 83.0 x86_64 公式サイト 11/30
✔︎ Slack x86_64 AppStore 11/20
✔︎ 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

ゲーム/グラフィックス

状況 アプリ バージョン arch インストール メモ(記録日)
✔︎ Unreal Engine 4 4.25.4 x86_64 Epic Game Launcher 11/20:初回起動とシェーダービルドはファンがめちゃ回るのでAirユーザーには辛そう。一度起動すると高速。
✔︎ 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.91 x86_64 公式サイト 11/26更新: 2.91がリリースされたがバイナリはx86_64のままだった
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 13.9.9 x86_64 公式サイト 11/25: electron-builderが対応になったらPR出したい

フォント

状況 フォント バージョン インストール メモ(記録日)
✔︎ 源ノ角ゴシック 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

がんばるよ表明

https://www.docker.com/blog/apple-silicon-m1-chips-and-docker/

Go

2021/2リリースの1.16に多数のissueが登録されている。ビルドはできるようになった模様。例年12月にでるbeta1でバイナリダウンロードできるようになるかな。

https://github.com/golang/go/issues/38485

issueコメントでクロスビルドの方法が紹介されていて、この通りにやると確かにビルドは成功し、go versionとかgo envは動くが、pkg/tool以下のコンパイラとかリンカが署名がうまくできずにコードのコンパイルはできない状況。

Electron

https://www.electronjs.org/blog/apple-silicon

11/17リリースの11.0でM1対応完了済み。VSCode/Slackがネイティブになる日も近い?

Java

https://adtmag.com/articles/2020/11/12/azul-supports-apple-silicon.aspx

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.2goland.jdkというファイルを削除すると、デフォルトJDKで起動するように戻ります。焦って再インストールしても復元されませんのでお気をつけください。

Node.js

Node.js会長によると、このPRでM1対応はOKということになっているらしい。今のところmasterブランチのみで、12.20リリース候補ブランチとか14.xとか他のブランチにバックポートはされていないぽい。

Qt

作業中

https://bugreports.qt.io/browse/QTBUG-85279

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。

Erlangはちょっと前にJITを装備して速度が数倍になるというアップデートがあったのですが、これへの対応はまだとのこと。

それでもネイティブで動かせば高速とのこと。

QEMU

パッチが出てきました

https://patchwork.kernel.org/project/qemu-devel/list/?series=391797

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したら治った。

GateKeeper

動かし方まで全部わかったわけではないけど、調べたことの備忘録をzennの方に投稿しています。

仮想化

Appleのフォーラムに投稿されたもののうち、2つためしてみて、SimpleVMは動かし方がわからなかったけど、virtualは動いて、Ubuntu Serverのイメージの実行はできました。まあブロックデバイスが存在しないのでインストールはできないのですが・・・

スクリーンショット 2020-11-27 22.06.14.png

Dev successfully runs ARM Windows virtualization on M1 Mac, says it’s ‘pretty snappy’で、QEMU使ってWindowsを動かした人もいるとのこと。裏の仮想化のOSサポートの部分は全く問題なさそうです。

Dockerはというと、Dockerが利用しているGoのApple M1対応待ちなところもあるかと思います。ただ、こちらも12月リリースのbeta1には入ってくるでしょうし、近々大きなニュースがみられるんじゃないかと期待しています。

future
ITを武器とした課題解決型のコンサルティングサービスを提供します
http://future-architect.github.io/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away