Apple Silicon MacでアプリやコマンドがApple Silicon対応のものかを調べる

2020.12.12
Apple Silicon MacでアプリやコマンドがApple Silicon対応のものかを調べる

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

arm64arm64eと表示されればApple Silicon対応、x86_64はIntel版を使ってるということになります。




lipolipo -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て何?と思って調べてみました。



ザックリ言うと、

アーキテクチャ開発会社動作
arm64ARMiOS・Androidなど主にスマホのCPU上で動く
x86_64Intel/AMDIntel・AMDのCPU上で動く

と、動作するCPUが違うんですね。




またarmアーキテクチャの中にも種類(歴史)があって、例えば古いものだと32bit版のarmv7というものもあります。


そのため今までのiPhoneも使っているアーキテクチャが変わってきていて一例として以下のように変化してきています。

端末アーキテクチャbit
iPhone 4armv732bit
iPhone 5sarm6464bit
iPhone 12 Proarm64e64bit

参考: 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開発やアプリ開発をゴリゴリやれる日もそう遠くないのかもしれませんね!期待 ✨

おすすめ