ロゴテキスト ロゴ

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

    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タブにしアーキテクチャを見ます。

    アクティビティモニタでApple Siliconに対応しているか調べた結果

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

    プロフィールの背景画像 プロフィール画像
    Yuki Takara
    都内でフリーランスのエンジニアをやってます。フロントとアプリ開発メインに幅広くやってます。