QIIME2 細菌叢の解析 Part1 Intel Macへの環境構築

# はじめに

こんにちは
卒論で初めて**バイオインフォマティクス**に触れることになった大学5年生です。(執筆当時）
情報系でも理工学系でもありませんが、
右往左往しつつも**遺伝子解析**の一種である**16SrRNAアンプリコン解析**のdryな部分を実行しました。

学科の性質上、実験でもwetな生物や実験の知識を持っていましたが、
プログラミングや統計学はさわり程度の理解しかありませんでした。
それでもやってみたら思いの外なんとかなりました。

この記事は
ほぼゼロからQIIME2を用いるところまでたどり着けたので
**どのような流れで始めたら良いのか**、**何が必要なのか考えた**内容になります。
対象はこれから腸内細菌叢の解析で**とりあえずQIIME2を動かしてみたい人**向けです。
**公式HPのInstaling QIIME2を読んでもしっくりこない人**が対象です。
また、卒論の過程でNGSや腸内細菌叢、16SrRNAについても調べておりましたので、
用語についても私の理解に基づく簡単な説明をしております。

厳密な理解を求めるならば「次世代シーケンサーDRY教本」や「メタゲノムデータ解析凄技レシピ」に
流れや用語の正確な定義が記載されておりますので、そちらをご参照ください。

すでに周辺知識のある人には物足りない内容になっているかもしれません。
内容に不備や間違いなどございましたら、ご指摘していただけたら嬉しく思います。

# 目次
**はじめに**
**経緯**
**動作環境**
***Intel MacとM1 Mac***
**Pythonで書かれたQIIME2について**
**1.QIIME2を入れるための準備**
**2.QIIME2を導入**

# 経緯

**NGS**が出て以降、遺伝子解析の敷居が下がったので、
**腸内細菌叢**や**シングルセル解析**でなにかしてみたいと思う人は多いと思います。
ですが専攻している分野と大きく隔たりがあると、困難もその分大きいように感じます。
何から始めたら良いか分からなったり、
何とか導入できてもエラーの解消ができなかったりと、辞めてしまう人も多いのではないでしょうか

私自身、ゼミも遺伝子解析とは無縁でしたが、
指導教員から提示してもらった卒業論文のテーマがきっかけで**バイオインフォマティクス**に興味を持ちました。
家族の影響で自作パソコンを組むなど、ハードの部分では多少知識があったのですが、
ソフトの部分では難しいことをあまりしてきませんでした。そのリベンジもあったように思います。

QIIME2の公式HPに手厚く解説が書いてありますが、
門外漢が取り組むのに、作業を進める中で**様々なギャップ**を実感しました。
例えばですが、**何かを導入**するのに、
・これはこう書かれているけど、これを入れるのにこれが必要で…
・この環境ではこれが必要で…
などと**面倒な入れ子構造**になっていたことがあります。

書かれている内容に関して**橋渡し**的な内容が欲しいと思ったので、
今後**QIIME**2を始める人がいれば、その一助になればと備忘録も兼ねて記事を作成しています。
なお、今回の記事では基本的に**Intel Mac**への導入方法になります。
**Intel Mac**と**M1 Mac**については後述します。


:::note info
**NGS(Next Generation Sequencing)** : 次世代シーケンサー。比較的安価で短時間で遺伝子配列の決定ができる。
 * 第1世代 : サンガー法+キャピラリー電気泳動で読取塩基長は~1000塩基。
 * 第2世代 : 短いDNA断片を増幅し、蛍光分子の付加によりDNAの塩基配列を決定。読取塩基長は~数百塩基。
   * illumina社のMiseqで環境中（土壌、水、腸内、etc)の細菌16SrRNAを読み取るのは第2世代
   * QIIME2は16SrRNAの解析を含む様々な遺伝子解析ができる。
 * 第3~5世代 : 1分子のDNAの塩基配列をPCR無しで読み取る。読取塩基長は平均10k塩基。
:::
:::note info
**腸内細菌叢** : 腸内に存在する細菌たちのこと。読み取る塩基配列の長さでショートリードシーケンスやロングリードシーケンスがある。前者は系統分析に向いており、後者であれば機能予測も可能。また、前者の具体例に種特有に保存されている領域である16SrRNAを増幅させシーケンスをするアンプリコン解析や、de novo(新規)にゲノム断片を結合させロングリードを構成するシーケンスを行うショットガンメタゲノム解析がある。


:::
# 動作環境
* 機種ID:MacBookPro14,1
* プロセッサ:2.3GHzデュアルコアIntel Core i5
* メモリ:16 GB
* MacOS:Monterey version12.4

マシンスペックに関してよほど貧弱でなければ動くと思いますが、
メモリが少ないとOS側から落とされることがあるようです。
QIIME2で十数万のリードを処理しましたが、16GBで特に問題は生じませんでした。

### Intel MacとM1 Mac
* 2020年6月からAppleはMacの**CPUアーキテクチャ（基本設計）** を
**Intel社製のもの(Intel Mac)** から **自社製のもの(M1 Mac)** に移行させています。
* 現行で発売されている製品はほぼM1/M2 Macに切り替わっています。
  * 従来の**Intel Mac向けに設計されたプログラムをM1 Macで使えるようにすることも同様に過渡期**です。なので、M1 MacだとQIIME2を入れる過程でイレギュラーな対応を迫られるかもしれません。 Kenta Nakamuraさんが『【M1 Pro/Max対応】M1 Mac環境構築ベストプラクティス』でNakamuraさんが調べた範囲におけるベストなセットアップについて詳しく紹介されています。
* 私の環境はIntel Macだったので、QIIME2を入れるまでに問題が起こりませんでした。

https://qiita.com/c60evaporator/items/aef6cc1581d2c4676504

* Intel MacとM1 Macを見分けるには自身のMacについてプロセッサを調べると分かります。Tamocさんの「Intel MacとAppleシリコンMac（M1, M2等）を見分ける方法」に詳細な方法が載っています。

https://tamoc.com/check-intel-mac/

# Pythonで書かれたQIIME2について
* **QIIME2はPython**というプログラミング言語で書かれています。
そのためにPythonを記述・実行をする環境を構築しなければなりません。
* したがって、この記事は**ローカル環境にQIIME2を使用できる環境を構築**するまでを目標としています。
* Python情報サイトである[Python.jp](https://www.python.jp/install/docs/pypi_or_anaconda.html "Python.jp anaconda")のHPにpython自体のことや導入法について詳しくまとめられていますが、導入法とAnacondaやminicondaについて、以下、必要な部分だけ取り出して記述します。
  * 主な導入法は数種類あり、公式サイトのインストーラーを用いる方法や**Anaconda**を用いたものなどがあります
  * データサイエンスをするなら**多様なライブラリを使うことの出来る、機械学習と親和性の高いAnaconda**が選ばれます。
* QIIME2のインストールガイドでは**Anacondaの軽量版であるminiconda**が推奨されています。
  * **Anaconda**　約300のパッケージ
    * **miniconda**  Anacondaの最低限のライブラリ(約30のパッケージ)が搭載された軽量モデル
* Anacondaやライブラリの入れ子構造、QIIME2の関係をベン図で以下に示します
![無題の図形描画-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3305399/502fbed5-f117-8203-e492-557fc7272970.png)



:::note info
ローカル : 自分のPC
環境構築 : プログラムを開発・実行する環境を用意すること
:::

https://www.python.jp/install/docs/pypi_or_anaconda.html


## Pythonで使われるライブラリやパッケージ、モジュール、関数・クラスについて
* ライブラリから関数・クラスまで入れ子構造になっています。
* 一つの関数・クラスが書き込まれたファイルをモジュール(.py)と呼びます。
* 複数のモジュールをまとめたものがパッケージです。
* ライブラリーはざっくりと複数のパッケージが収められているイメージです。
* パッケージの導入にはAnacondaとPyPiがあります。
  * Anaconda　condaコマンドでパッケージを導入
  * The Python Package index(PyPi)　pipコマンドでパッケージを導入
   
https://step-learn.com/article/python/145-library-packege.html

https://qiita.com/ynakayama/items/29efebeb38604d10acef

:::note info
パッケージを入れるのにcondaコマンドとpipコマンドの両者を混在させることは非推奨となっています。
condaで入れられるものは`conda`を極力用いて、pipは`pip`にしかないものに用いることが望ましいようです。
:::

# QIIME2導入
* [QIIME2](https://qiime2.org/ "QIIME2 Home")はMacOS/Windows/Linux user向けにサービスを提供しており、自分の環境に適したコードをコピペして使っていきます。
* **Qiime2docs内のGetting stated**から順に進めていきましょう。
  * 以降、公式の推奨するやり方の一つ **(minicondaの導入 → QIIME2)** をなぞって進めていきます。
* これまでさまざまな開発環境に触れてこなかったら下記の順番に進めていくことになります
**1.QIIME2を入れるための準備**
***1.1 homebrewとXcodeの導入***
***1.2 miniconda3の導入*** 
**2.QIIME2を導入**

:::note info
 Qiime2のインストール方法に自身のPCに直接環境を作るか、dockerを使って仮想環境で入れるかの2通りがあります。
仮想環境の中で環境を構築すると、必要に応じて環境を切り替えられるメリットがあります。
今回はminicondaを使ったやり方を紹介します。miniconda上でも仮想環境を作ることができます。
:::
# 1.QIIME2を入れるための準備
* [miniconda](https://docs.conda.io/en/latest/miniconda.html "conda miniconda")の本体はコマンドかインストーラーを使ってインストールします。今回はコマンドを使用してターミナル経由でインストールします。
* ターミナルを立ち上げて、以下のコマンドでminicondaの本体をdlしてインストールしていきます。
  ターミナルでdlするのに使う**wgetのためにhomebrewが必要で、homebrewのためにはXcode**が必要になります。
  * 従って**Xcodeを入れてから、homebrewを導入**していきます

:::note info
homebrew : 様々なパッケージのインストールと管理をしてくれるシステム
Xcode : Macの統合開発環境
:::

### 1.1 homebrewとXcodeの導入
* Appストアで[Xcode](https://apps.apple.com/jp/app/xcode/id497799835?mt=12 "Xcode Appstore")は配布されているので、それをDLして**ターミナル**で以下のコマンドを実行します
```bash
xcode-select –install
```
* Xcodeのインストールが終わったら、今度は**homebrew**を導入していきます
* [homebrew公式HP](https://brew.sh/index_ja "homebrew home")から最新版のURLの載ったコードをコピペしてターミナルで実行します。
```/bin/bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```

 
:::note info
M1 Macの場合追加作業が必要なようです。
penchi.jpさんの
[Mac（Intel、M1）にHomebrewとGitをインストールする方法 -2022.11.7 追記- macOS Ventura対応](https://penchi.jp/archives/14853.html "penchi m1")に詳しく記述されていたので、M1Macで作業する場合はこちらを参考にすると良いと思います
:::

### 1.2 minicondaを導入
 
[conda](https://docs.conda.io/en/latest/miniconda.html "conda miniconda")の本体をdlします。私の場合はIntel Mac(x86_64)の方を使用します。
```zsh
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh
```

これでminicondaの本体が手に入りました。うまくいくと下のように出ると思います。
![スクリーンショット 2023-04-04 16.11.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3305399/6d632b0c-dc81-3259-d794-8d9f6ab81089.png)

:::note info
python2系のminiconda2よりも**python3系のminiconda3**を入れた方が良いです。(python2系のサポートが終了しているため)
minicondaの入れ方はhamaponさんの[minicondaでスマートに環境構築 for Mac](https://qiita.com/hamapon/items/9520a8e7e569137256de "hamapon qiita")を参考にさせてもらいました。
:::

次にminicondaのインストーラーを実行します
```zsh
bash Miniconda3-latest-MacOSX-x86_64.sh
```
規約が出てくるので**enter**キーで続きを表示させていきます

<img width="650" alt="2023-04-04 16.11.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3305399/8d182057-7532-11d6-6533-78317fe4f7a3.png">

ライセンス許可を求められたらyesを打ち込む

<img width="350" alt="スクリーンショット 2023-04-04 16.11.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3305399/30daa296-db64-df3e-afec-81c0dac8a0c3.png">

最後にどこにインストールするか出てくるので、特定の入れたい場所などなければそのままenterキーを押します。

<img width="400" alt="スクリーンショット 2023-04-04 16.11.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3305399/d4565a8f-4f67-8d6a-bfd2-1ea93449f32b.png">

このあと、ターミナルを閉じて起動すると、(base)が付くようになります。

<img width="340" alt="スクリーンショット 2023-04-04 16.26.26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3305399/1a53c009-9e61-e505-7e88-60280abf63a1.png">

:::note info
(base)はデフォルトのConda環境のbase環境が有効になっています。
このconda環境においてPythonが実行できるようになります。
:::

試しに`conda`と入れて起動に成功すると下記のように表示されるはずです。
<img width="600" alt="スクリーンショット 2023-04-04 16.29.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3305399/bc166493-3643-eac4-7ac5-66c30a974127.png">


#### 1.3よくあるエラーについて
* zsh: command not found: conda
これはプログラムが見つからない時に表示されます。
プログラムのおいてある場所(パス)の指定ができていないことが理由です。
なので、zshの環境設定ファイル(.zshrc)を編集してパスを通していきます。
最初に自身で設定したときは様々な文献をツギハギで試したので、本体の導入やパスの設定で手こずりました。
   * シェルがzshだからコマンドが有効でなかったのかと思ってbashに変更したり迷走しました。
   * 見たまま入れてしまっていたので、流れなどが意識できていなかったのが失敗の理由でした。
  
解決までの流れやzshについて、kamiさんの[【.zshrcファイルの作成】MacでzshのPATHの通し方【.zshrcファイルの更新】
](https://god48.com/zsh-path "kami zsh")を参考にさせてもらいました

:::note info
zshはシェルの一種。2019年のMac OS CatalinaからターミナルのデフォルトのシェルがBashからzshに変更
シェル : ユーザーとOSの中核(カーネル)を結ぶインターフェース 
インターフェース : 2つの異なる機器やシステム、ソフトウェア間で情報のやり取りがなされる際、その間をつなぐ規格や機能

:::
:::note info
デフォルトシェルはZshになっていますが、bashなどで書かれたスクリプトはわざわざ変更しなくて良いです。私は当初シェルの知識がなく、zsh: command not found: condaが出た時にデフォルトシェルをBashに切り替えてその環境設定ファイルにパスを通していました。Bashの立ち位置やBashが使える理由について、Koichi Nakashimaさんの[Macでシェルスクリプトを書く人への最初の基礎知識 「シェルはbashからzshに変わっていません！今でもbashで動くんだよ！」](https://qiita.com/ko1nksm/items/59c2e8aに7afa969af8212 "Koichi Nakashima Zsh") に詳しいので、きちんと勉強したい方はこちらを参照されると良いかと思います。
:::


# 2 QIIME2の導入
* ここから**condaコマンドを使ってQIIME2**を入れていきます。基本的には**QIIME2のインストールガイド**に添って進めています。

condaを**最新版**にして
```python
conda update conda
```
**wgetをインストール**します
```python
conda install wget
```

自分のOSやCPUに合わせたQIIME2の本体をwgetで手に入れて環境を作ります。私の場合はmacOS(intel)and OSXです。
```python
wget https://data.qiime2.org/distro/core/qiime2-2023.2-py38-osx-conda.yml
conda env create -n qiime2-2023.2 --file qiime2-2023.2-py38-osx-conda.yml
```
:::note info
conda env creat : 仮想環境のconda環境を作成するコマンド
-n : 名前の変更なので、今回は仮想環境名がqiime2-2023.2に変更
:::
必要なら不要なインストーラーを消します。
```python
rm qiime2-2023.2-py38-osx-conda.yml
```

ここまでで、環境ができました。
お疲れ様でした。
上手くいっていると下記のコマンドでQIIME2が起動します。
```python
conda activate qiime2-2023.2
```
下は試しに qiime --help を打ち込んだところです、
正常に機能しているところです。
<img width="1200" alt="スクリーンショット 2023-04-07 8.08.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3305399/b1f2bd16-0340-6c2e-e165-f406c3241703.png">