LoginSignup
5
1

More than 3 years have passed since last update.

Apple Siliconでのプログラミングを完全に理解した

Last updated at Posted at 2020-12-22

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
  • Twitter

Visual Studio Codeだけは気にして、MacのArm64 Preview版を入れました。

Rosetta 2で動かす

時には動かないことがあるかと思います。
その時は、Rosetta 2を試してみましょう。

やり方は以下の通りです。(項目名が英語になっててわかりづらいかもです。すみません)

  1. FinderでApplicationsを開く
  2. 動かしたいアプリを右クリックして、Get Infoをクリック
  3. Open using rosettaにチェック

これでアプリを実行してみてください

アプリがApple Siliconに対応しているかを事前に調べる方法

Is Apple silicon ready?というサービスで調べることができます。

CLIアプリはarm64で入れるようにしよう

CLIアプリは、Homebrewでインストールする方が多いと思われますが、
公式サイト上のインストーラはApple Siliconではまだ動作しません。

動作させるには以下の方法があります

  1. TerminalをRosetta 2で動くようにして、公式サイトのインストーラを実行。(この場合、バイナリがx86_64になる)
  2. 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 rustupdefault 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速いぜ!楽しいぜ!買おうぜ!

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1