Apple SiliconのMacが登場してアプリやコマンドがApple Siliconに対応しているかそれともIntel版のものか、を意識する必要が出てきました。
使っているアプリやコマンドがApple Silicon版かIntel版かを調べる方法を記載します。
検証した環境
1 | macOS Big Sur | 11.0.1 |
2 | MacBook Air | M1, 2020 |
アプリの調べ方
App Storeやdmg, pkgなどを使ってインストールしたアプリはアクティビティモニタで調べる事が出来ます。
アクティビティモニタを開き、CPUタブにしアーキテクチャを見ます。
例えばメールアプリのSpark、ランチャーユーティリティアプリのAlfredはIntel版のものが動いているのが分かります。
またタスク管理アプリのOmniFoucusはApple Siliconに対応したものをリリースしているため、Apple Silicon対応版が動いているのが分かります。
コマンドの調べ方
lipo
コマンドを使う事で調べる事が出来ます。
先に結論から書いてしまうと、 lipo
+ which
で調べる事が出来ます。
$ lipo -archs $(which jq)
arm64
$ lipo -archs $(which peco)
x86_64
arm64
やarm64e
と表示されればApple Silicon対応、x86_64
はIntel版を使ってるということになります。
lipo
はlipo -archs <コマンドのパス>
でコマンドのアーキテクチャが、更にlipo -info <コマンドのパス>
でコマンドのアーキテクチャの詳細情報が表示出来ます。
$ lipo -archs /usr/bin/vim
x86_64 arm64e
$ lipo -info /usr/bin/vim
Architectures in the fat file: /usr/bin/vim are: x86_64 arm64e
ターミナルで使っているコマンドのパスを調べるにはwhich
を使えばよいので
$ which vim
/usr/bin/vim
この2つを組み合わせる事でアーキテクチャを調べる事が出来ます。
$ lipo -archs $(which vim)
x86_64 arm64e
余談
書いている中で気になったこと、分からなかったことがあったので調べてみました。
lipoについて
そもそもlipo
て何だ?何するコマンドだ?と思って調べてみたところ、
$ man lipo
NAME
lipo - create or operate on universal files
SYNOPSIS
lipo input_file command [option...]
DESCRIPTION
The lipo tool creates or operates on ``universal'' (multi-architecture) files. Generally, lipo reads a single input
file and writes to a single output file, although some commands and options accept multiple input files. lipo will
only ever write to a single output file, and input files are never modified in place.
・・・
DeepLで翻訳してみて、以下の部分が重要そう。
lipo ツールは “Universal” (マルチアーキテクチャ) ファイルを作成したり操作したりします。
更に今回使用した-archs
というオプションはアーキテクチャを調べるためのコマンドになっています。
Display only the architecture names present in a single input file. Each architecture name is a single word,
1つの入力ファイルに存在するアーキテクチャ名のみを表示します。各アーキテクチャ名は1つの単語です。
アーキテクチャについて
Apple Siliconが出てarm64
x86_64
という単語をよく聞くようになったのですが、
そもそもarm64
とかx86_64
て何?と思って調べてみました。
ザックリ言うと、
アーキテクチャ | 開発会社 | 動作 |
---|---|---|
arm64 | ARM | iOS・Androidなど主にスマホのCPU上で動く |
x86_64 | Intel/AMD | Intel・AMDのCPU上で動く |
と、動作するCPUが違うんですね。
またarmアーキテクチャの中にも種類(歴史)があって、例えば古いものだと32bit版のarmv7
というものもあります。
そのため今までのiPhoneも使っているアーキテクチャが変わってきていて一例として以下のように変化してきています。
端末 | アーキテクチャ | bit |
---|---|---|
iPhone 4 | armv7 | 32bit |
iPhone 5s | arm64 | 64bit |
iPhone 12 Pro | arm64e | 64bit |
参考: iOSアーキテクチャとApp Thinningについてまとめてみた - Qiita
そもそもarmてARM社が作っているのにAppleが使っているの?と思ったら、
一般にはARMという名前は知られていない。それは、ARM社は自社で半導体工場を持たないファブレス企業だからだ。彼らは、CPUを設計し、その設計情報を世界中の企業にライセンス提供している。それを購入した企業は、そこに自社独自の機能を付け加えて製造する。
Apple社は、iPhoneやiPadに、携帯電話として必要な通信機能やグラフィックス処理機能、AI(機械学習)機能などを独自に追加したプロセッサ(Aシリーズ)を使っているし、Qualcomm社もまた同様の機能を独自に付加した製品(Snapdragon)を作り販売… 【図解】コレ1枚でわかるIntelとARM:ITソリューション塾:オルタナティブ・ブログより引用
AppleはARM社のCPUの設計情報を使っている、という事なんですね!
個人的な感想
今開発者の人達は「x86_64版のみのアプリやコマンドをarm64版にも対応させる」という事をしています。
GOやJavaScriptのarm64対応がmasterブランチにマージされた、という話が少し前に話題になっていました。
arm64にも対応させる、という事は、 将来的にiPhoneやiPad上でも動くようにする行為にも繋がるんだろうなぁ 🤔
Apple SiliconがiPhone/iPadのSoCの延長にあり、その環境に対応したアプリやコマンドが増える、という事は、iPhoneやiPad上でWeb開発やアプリ開発をゴリゴリやれる日もそう遠くないのかもしれませんね!期待 ✨