Apple Siliconでのプログラミングを完全に理解した
はじめに
こんにちは。「すば」と申します
この記事は「完全に理解したTalk Advent Calendar 2020」22日目の投稿記事です。
(23日になったくらいに投稿してますけど、体調悪かったので許してください><)
今回は、新しくApple SiliconのMacbookAirを買ったので、これで開発環境を整えた時の方針の話ををしていきたいと思います
一体何が問題?
Apple SiliconではCPUのアーキテクチャがx86_64からArm64に変わりました。
細かいことはさておき、プログラムはCPUのアーキテクチャに応じてコンパイルされます。
そのため、x86_64用のバイナリは、Arm64では動きません。
つまり、今までのバイナリが動かなくなってしまうわけです。
ただし、新しいMacOSには、Apple Siliconで今までのx86_64用のバイナリを動かすRosetta 2という機能があります。
では、ここからどのように開発環境を整えればいいかの方針をお話しします。
環境
Apple Silicon MacbookAir
英語で使ってます。
GUIアプリはとりあえず入れてみよう
GUIアプリに関しては、Arm64とか気にせず入れてみるといいと思います
有名なのは普通に動きます
自分は以下の物を何も考えずに入れて正常に動作しています
- Google Chrome
- Alfred
- Android Studio
- iTerm2
- LastPass
- Discord
- Evernote
Visual Studio Code
だけは気にして、MacのArm64 Preview版を入れました。
Rosetta 2で動かす
時には動かないことがあるかと思います。
その時は、Rosetta 2を試してみましょう。
やり方は以下の通りです。(項目名が英語になっててわかりづらいかもです。すみません)
- FinderでApplicationsを開く
- 動かしたいアプリを右クリックして、
Get Info
をクリック -
Open using rosetta
にチェック
これでアプリを実行してみてください
アプリがApple Siliconに対応しているかを事前に調べる方法
Is Apple silicon ready?というサービスで調べることができます。
CLIアプリはarm64で入れるようにしよう
CLIアプリは、Homebrewでインストールする方が多いと思われますが、
公式サイト上のインストーラはApple Siliconではまだ動作しません。
動作させるには以下の方法があります
- Terminalを
Rosetta 2
で動くようにして、公式サイトのインストーラを実行。(この場合、バイナリがx86_64になる) - Alternative Installsに従って、インストール(この場合、バイナリがArm64になる)
自分は2にしました。
1だと、将来的にArm64で動くアプリが増えてきた時に、どれがx86_64なのかわからなくなる気がします。
また、TerminalがRosetta 2
で動いている場合、どのような動作をするのか予想しづらいというのもあります。
インストール方法は以下の通りです。(Alternative Installs](https://docs.brew.sh/Installation#alternative-installs)も参考にしてください)
$ cd /opt
$ sudo mkdir homebrew
# これでうまくいくはずなんだけど、なんか動かなかったから自分は$USERを手動で入力した。
$ sudo chown $USER:admin homebrew
$ curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew
.zshenvに以下のコードを追記して、PATHに追加します。
export PATH=$PATH:/opt/homebrew/bin
最後にTerminalで再起動して、PATHを読み込み直すと、Homebrewが使えるようになっています。
Homebrew以外のパッケージマネージャーも入れてみよう
Homebrew
だけだと対応していないアプリもあります。
その場合、他のパッケージマネージャーからインストールするといい場合があります
自分が試したパッケージマネージャーには以下のものがあります
例えばNeovim
の場合、nix-shell
でしかインストールできませんでした。
プログラミング言語に関して
どれが動くのか正直よくわからないです。
ここからは個人的に調査してみた結果です。
言語 | 状況 |
---|---|
ruby | デフォルトで入ってるから動く |
python | デフォルトで入ってるから動く |
nodejs | homebrewでインストールして動く |
golang | 動くらしいんだけど、動作するバイナリのインストール方法がわからない。。。 |
rust |
rustup のdefault toolchain をbetaにするとインストールできる |
flutter(dart) | 通常インストールで動く |
java | 新しいバージョンだと、動作するArm64バイナリがAzulから配布されているらしい。(よくわからない) |
どのアーキテクチャでコマンドが動くかの調べ方
ちょっとこのコマンドのバイナリは、どのアーキテクチャ用なのかとか調べたいことがあると思います。
その場合は、lipo
コマンドを使うといいようです。
以下のコマンドで調べることができます
$ lipo -archs <コマンドのフルパス>
# lsのバイナリを調べたいとき
# まずコマンドのフルパスを調べる
$ which ls
# => /bin/ls
# バイナリを調べる
$ lipo -archs /bin/ls
# => x86_64 arm64e
仮想環境は・・・もうちょっと我慢しよう・・・
昨今、仮想環境は開発ではよく使われているのは周知の通りです。
ただ、Apple Siliconに関しては以下のように環境が整っていない状態にあります。
名前 | 状況 |
---|---|
Parallel Desktop | テクニカルプレビュー |
Docker for Mac | テクニカルプレビュー |
VirutualBox | 動かない |
VMWare | 動かない |
Android Emulatir | 動かない |
まだ仮想環境を十全に使うには時間が必要なようです。
まとめ
みんなApple Silicon速いぜ!楽しいぜ!買おうぜ!