Macでのバイオインフォマティクス解析の環境構築 2025版

# Macでのバイオインフォマティクス解析の環境構築 2025版

メインマシンを Intel CPU の Mac から ARM CPU の Mac に変えたのをきっかけにバイオインフォマティクス解析を行うための環境構築方法を再検討したので、まとめとしてここに記載します。Miniforge を使い、Bioconda から解析用ツールをインストールして使用する手順を紹介しています。HomeBrew や MacPorts 等のパッケージマネージャについては取り扱っていません。  


他のブログや書籍によるとターミナルを "Rosettaを使用して開く" 方法が推奨されてきたようです。しかし、ARM CPU の Mac が普及し開発環境の整備が進んだ現在においては **Rosetta を用いてターミナルを動かす必要はない**と考えています。その一因としては 2023.10 頃のアップデートにより [conda 仮想環境を作成する際に CPU プラットフォームを指定して仮想環境を作成できるようになった](https://github.com/conda/conda/pull/11794)ことが挙げられます 。そのため、Bioconda の解析ツールを使用する際には x86_68 プラットフォームでツールをインストールし、numpy や pandas など機械学習系のライブラリを使用する際には ARM ネイティブ版を使うといった切り替えが容易に行えるようになっています。  

本ポストは他のブログや書籍に記された知見の価値を下げるものではありません。自分自身も以前に先人の例に倣って Rosetta モードでターミナルを動かしていたことがあり、当時のベストプラクティスを共有していただいた投稿者・著者の方々には改めて敬意を示したいと思います。一方でベストプラクティスも時とともに変わることがあります。ここでは "現時点で私がベストプラクティスと考えている" 環境構築方法として紹介したいと思います。

また、旧マシンで使用していた conda 仮想環境 の新マシンへの移行についても記載しています。ただし、長期的に運用をして検証したわけではなく、絶対パスで設定ファイルが書かれているツールの場合には動作できないケースもありましたので、参考情報程度に考えていただきますと幸いです。  

__実行環境__
MacBook Pro 14inch
OS: 15.4.1

## おすすめ設定手順
Rosetta (Rosetta 2) をインストールしておく。
Miniforge3は ARM CPU 版 (Miniforge3-MacOSX-arm64.sh) を取得してインストール。
conda 仮想環境作成時に、`--platform osx-64` を指定して作成すると、以後、その仮想環境内では Intel CPU 用のパッケージをインストールしてくれる。[[参考](https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#specifying-a-different-target-platform-for-an-environment)]


```
# ターミナルが ARM ネイティブで動いていることを確認。
# 下記コマンドを実行して arm64 と表示されればOK。
$ uname -m
arm64

# Rosetta がインストールされていなければインストールする
$ softwareupdate --install-rosetta

# Miniforge3 のインストーラを取得してインストール。
# 下記コマンドは公式サイトよりコピペ。自動的に ARM 版のインストーラが取得できる。
$ curl -L -O "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh"
$ sh Miniforge3-Darwin-arm64.sh

# 仮想環境作成 (Miniforge3 インストール後、新しいターミナルを開いて conda を有効化した状態で行う)
# --platform osx-64 を指定する。実行後の画面にも osx-64 と表示されることを確認。
# ARM ネイティブのパッケージを使用したい場合には --platform の指定は不要
$ conda create --platform osx-64 -n myenv
Channels:
 - bioconda
 - conda-forge
Platform: osx-64
...(以下省略)

# 仮想環境有効化・仮想環境へのツールインストール
# インストール実行時に Platform: osx-arm64 と表示されることを確認。
$ conda activate myenv
$ conda install -c bioconda skesa
Channels:
 - bioconda
 - conda-forge
Platform: osx-64
Collecting package metadata... (以下省略)
```

**[注意点]** `conda create` と `conda install` の部分はそれぞれ `mamba create` と `mamba install` で代用可能。ただし、mamba コマンドで仮想環境を作成した場合は、ツールインストール時にも mamba コマンドを使うこと。(さもなくば --platform で指定した内容が反映されない。将来アップデートされたときには conda/mamba どちらでも同様に使えるようになるかも)


## ターミナルにおける Rosetta の動作についての検証
Rosetta がインストールされていればターミナル自体が Rosetta によるエミュレーションモードで動いていなくても、必要に応じて勝手に Rosetta が動いて適切に実行されると思われる。以下、検証です。
```
# ターミナルは arm64 ネイティブで動いていることを確認
$ arch
arm64  

# x86_64向けにビルドされているプログラムを実行してみる
# ここで使用した blastp は古いマシンでインストールされたもの
# file コマンドを使って x86_64 プラットフォーム向けにビルドされたものであることを確認
$ file ./blastp
./blastp: Mach-O 64-bit executable x86_64  #

# 普通に実行してみる --> 実行できる (自動的に Rosetta によってエミュレーションモードで動作する)
# Rosetta がインストールされていない状態では Bad CPU type in executable というエラーになる
$ ./blastp  

# 明示的に x86_64 を指定して実行 --> 実行できる
$ arch -x86_64 ./blastp

# 明示的に arm64 を指定して実行 --> 実行できない
$ arch -arm64 ./blastp
arch: posix_spawnp: ./blastp: Bad CPU type in executable
```
以上のことから、コマンドラインで x86_64 用にビルドされたバイナリを実行する際には、ターミナルが Rosetta で動いているかどうかにかかわらず実行できることがわかります。

## この方法を推奨する理由
生命科学用の解析ツールの多くは Bioconda から利用できるようになっています。しかし、Bioconda で利用できるツールの多くは ARM CPU の Mac には対応しておらず、Rosetta を介して動かす必要があります。また、一方で機械学習においてよく使われる numpy や pandas などのライブラリは高速で動作させるためできれば ARM ネイティブの環境で動かしたいという希望があります。この２つを両立させるためには、ターミナルを使い分ける方法 (Rosettaで動かすターミナルとネイティブに動かすターミナルの２つを容易する) や、Miniforge の x86_64版と ARM 版の両方をインストールし、必要に応じて使い分けるといった方法が考えられます。  

本ポストで紹介した方法は Miniforge は ARM 版のみをインストールし、仮想環境作成時に CPU プラットフォームを指定するというものですので一元して管理することが可能です。osx_64 (x86_64) プラットフォーム用の仮想環境でインストールしたツールについては自動的に Rosetta を介して実行されますので特にプラットフォームの違いを意識する必要なく使用できると思われます。

---

# 以下、補足的な内容です


## 古いマシンの conda 仮想環境を新しいマシンに移す
自分は Mac の移行アシスタントを使ってデータの移行を行なったため、以前のマシンでインストールされていた Miniforge (Miniconda) のディレクトリ構造はそのままで新しいマシンに引き継がれました。**Rosetta をインストールすれば旧マシンでインストールした Miniforge やその仮想環境ははそのまま使用することができます。**ただし、自分は ARM  ネイティブの Miniforge で運用したかったので下記の方法で以前の仮想環境を利用できるようにしました。

### 方法１ `envs_dirs` に旧環境へのパスを追加
新しいマシンに Miniforge をインストールする前に、移行アシスタントによって移行された旧 Minoforge のディレクトリを別名に変更して退避しておきます。ここでは miniforge3_x86 という名称に変更しておきます (`mv ~/miniforge3 ~/miniforge3_x86`)。あるいは新しいマシンに Miniforge をインストールする際に別の場所にインストールしても良いです (注)。  
Miniforge をインストール後、旧マシンで作成した仮想環境を参照できるようにするには、下記コマンドで `envs_dirs` に旧仮想環境がインストールされているディレクトリを指定します。  

```
$ conda config --append envs_dirs ~/miniforge3_x86/envs
```
これにより `conda env list` を実行した際に旧マシンで作成した仮想環境も表示されるようになります。設定した内容は `~/.condarc` に書き込まれます。また、追加した内容を戻すには `conda config --remove envs_dirs ~/miniforge3_x86/envs` とします。  
なお、同様の操作は `mamba config` コマンドでも可能ですが、コマンドのオプション指定方法に若干の違いがあります。

注) 一部のツールは絶対パスで設定が書かれている場合があり、旧マシンでインストールした Miniforge のディレクトリ名を変更してしまうとうまく動かない可能性があります。

### 方法２ 仮想環境をエクスポートした後、新しい環境にインストールしなおす
方法１でも実用上問題なかったのですが、古いディレクトリが肥大化していてすっきりさせたかったので以下の方法で新しい環境にインストールしなおしました。
```
# 旧マシンで作成した仮想環境の名前を指定
$ ENVNAME=hoge_env

# 仮想環境を有効化し、設定内容をエクスポート
$ conda activate ${ENVNAME}
$ conda env export --no-builds > ${ENVNAME}.env.yml

# 新しい環境にインストールしなおす
$ conda env create --platform osx-64 -n ${ENVNAME}_x64 -f ${ENVNAME}.env.yml
```