問題の発生
新しいApple Silicon搭載Macをセットアップし、ファイルを移行して、いざ作業を始めようとターミナルを開いたとします。しかし、使い慣れたCLIツールやローカルスクリプトを実行しようとすると、すべてが停止してしまいます。ヘルプメニューやプログラムの出力が表示される代わりに、無愛想なエラーメッセージが表示されます。
zsh: bad CPU type in executable: ./filename
これは、Macがネイティブで解釈できない言語で書かれたプログラムを実行しようとしているために発生します。M1、M2、M3チップはARM64アーキテクチャを採用していますが、HugoやTerraformの旧バージョン、あるいは独自のGoバイナリなど、多くの古いツールはIntelのx86_64アーキテクチャ向けにコンパイルされています。
根本原因の特定
Apple Siliconプロセッサは、Intelチップとは異なる命令を処理します。翻訳プログラムがない状態では、MacはIntelベースのバイナリを理解不能なデータとして認識します。このエラーは、実行しようとしているファイルの命令セットをカーネルが認識できないことを示しています。
ステップ1:バイナリの確認
fileコマンドを使用して、問題のあるファイルのアーキテクチャを確認します。これは、ファイルが具体的に何であるかを明らかにする組み込みユーティリティです。ターミナルで以下のコマンドを実行してください:
file ./filename
出力にMach-O 64-bit executable x86_64が含まれている場合、それが原因です。必要な翻訳レイヤーがない状態で、Intel専用のファイルを実行しようとしています。
解決策1:Rosetta 2のインストール(手っ取り早い修正方法)
AppleはRosetta 2という翻訳レイヤーを提供しています。これはソフトウェアとハードウェアの間に位置し、Intelの命令をリアルタイムでARMの命令に変換します。非常に効率的で、多くの場合、ネイティブ速度の70〜80%でアプリを実行できます。
インストールするには、ターミナルで次のコマンドを実行します:
softwareupdate --install-rosetta --agree-to-license
ダウンロードサイズは小さく(約400MB)、1分もかかりません。完了したら、もう一度コマンドを実行してみてください。追加の設定なしですぐに動作するはずです。
解決策2:ネイティブARM64バイナリへの切り替え
Rosettaは優れた橋渡し役ですが、ネイティブソフトウェアの方が常に高速で、バッテリーにも優しいです。現在、ほとんどの最新の開発ツールは、Apple Silicon専用バージョンを提供しています。ネイティブバイナリへの移行は、長期的に見て最善の戦略です。
- ソースを確認する: プロジェクトのGitHubの「Releases」ページを確認してください。ファイル名にarm64、aarch64、またはApple Siliconが含まれているものを探します。
- Homebrewを更新する: Intel Macから移行した場合、Homebrewのインストール場所が間違っている可能性があります。ネイティブのHomebrewは
/opt/homebrewに配置されますが、Intel版は/usr/localに配置されます。 - ツールを再インストールする:
brew listを使用して古いパッケージを特定し、ARM版がインストールされるように再インストールします。
解決策3:ソースから再コンパイルする
自作スクリプトや社内ツールを扱っている場合は、新しいマシンで再コンパイルするだけで解決します。環境がネイティブでARM64であるため、clang、gcc、Goコンパイラなどの標準的なコンパイラは、デフォルトで現在のアーキテクチャをターゲットにします。
# 例:C++ツールの再コンパイル
g++ -o my_tool main.cpp
# 新しいアーキテクチャの確認
file my_tool
出力にMach-O 64-bit executable arm64と表示されれば成功です。
解決策4:PATHの整理
シェルが依然として/usr/local/binに隠れている古いIntelバイナリを参照しているために、エラーが解消されないことがあります。新しいARMバージョンを優先するようにMacに指示する必要があります。設定ファイルを開きます:
nano ~/.zshrc
$PATH変数の先頭にHomebrewのパスを追加または移動します:
export PATH="/opt/homebrew/bin:$PATH"
ファイルを保存し(Ctrl+O, Enter)、終了します(Ctrl+X)。source ~/.zshrcを実行してセッションを更新してください。
修正の確認
修正が反映されたか確認するには、アクティビティモニタを開き、CPUタブに移動します。種類列を探してください。ネイティブで動作しているプログラムは「Apple」と表示され、Rosettaを使用しているものは「Intel」と表示されます。CLIツールがネイティブであれば、実行中にApple (ARM)として表示されます。
重要なポイント
- インストール前に確認: ネイティブのARM64ソフトウェアは、翻訳されたIntelソフトウェアよりも大幅にエネルギー効率が優れています。
- Rosettaはオプション: macOSにはデフォルトでRosetta 2は含まれていません。レガシーツールに依存している場合にのみ必要です。
- パスの整理: Apple Siliconへの移行は、
.zshrcを監査し、古いIntelディレクトリへのハードコードされたパスを削除する良い機会です。

