【M1 Pro/Max対応】M1 Mac環境構築ベストプラクティス

# はじめに
2021/10/26にM1 Pro/Maxを搭載したMacBook Proが発売され、現在環境構築をされている方も多いかと思います。

一方で、Pro/Maxも含めた**M1 Mac**はIntel Macと同じ方法でセットアップできないツールが多く、また公式未対応時のイレギュラーなセットアップ方法の記事がネット上に多く存在するため、**どのセットアップ方法が正しいのか判断するのが非常に難しい**状況となっています。
![独自インストール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/a6953011-924a-8d9b-8d63-c1fce4b6bad9.png)
そこで今回、私が調べた範囲で**現時点でのベストプラクティスと思われる方法**をまとめてみました。

方法選択には主観も含まれているため、「**こちらの方が良い！**」という方法をご存じであれば、気軽にコメント頂けるとありがたいです

## 更新情報
本記事は**2021/10/30時点**での内容をベースとしています。
発売直後でベストプラクティスが固まっていない要素も多いため、情報が入り次第適宜記事を更新していこうと思います。

### 2022/6/26更新
- PyTorchでGPUが使用できるようになったそうなので、[インストール法を修正](https://qiita.com/c60evaporator/items/aef6cc1581d2c4676504#pytorchのインストール)しました

### 2024/4/14更新

- MinicondaによるPython環境構築に関して、こちらで紹介しているパッケージは全てPython3.10で動作することを確認したため、Python3.10を選択するよう記述を更新しました。

# 対象とする開発環境
**Mac OSの初期設定**、および私が開発によく使用している、

**・VSCode**
**・Python**
**・Docker**
**・Android Studio**

の環境構築法についてまとめてみました。

# 手順
以下の順番で環境構築方法を解説していきます。
一部の環境構築のみ実施したい場合は、以下のリンクから直接内容に飛んでください

|対象ツール|リンク|
|---|---|
|Mac OS初期設定|[リンク](https://qiita.com/c60evaporator/items/aef6cc1581d2c4676504#mac-os初期設定)|
|VSCode|[リンク](https://qiita.com/c60evaporator/items/aef6cc1581d2c4676504#vscode%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89)|
|Python|[リンク](https://qiita.com/c60evaporator/items/aef6cc1581d2c4676504#python環境構築)|
|Docker|[リンク](https://qiita.com/c60evaporator/items/aef6cc1581d2c4676504#docker環境構築)|
|Android Studio|[リンク](https://qiita.com/c60evaporator/items/aef6cc1581d2c4676504#android-studio環境構築)|

## Mac OS初期設定
開発用ソフトをインストールする前に、まずはMac OSの設定を整えて使いやすいデスクトップ環境を構築します。
### 初期設定
電源を入れると、色々と初期設定が求められます。基本的には指示に従って進めればOKです
### デスクトップ設定
まず電源を入れて目につくのが、下のDockが大きくて邪魔だということです。
![Dock.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/9c51e6d5-6dd9-486e-f2ea-258f79eb0d00.png)
その他にもスクロールの向きがWindowsと逆だったり、Finder(Windowsでいうエクスプローラ)が使い辛かったりするので、
以下のYouTubeチャンネルを参考にして設定し直すと、使いやすくなるかと思います。

https://www.youtube.com/watch?v=J5e8Rv80bbk

### OSアップデート
購入直後のOSはバージョンが古くなっていてセキュリティ的に脆弱なことがあるので、アップデートします。
基本的には初回起動時に自動でアップデート画面が出てきますが、以下の方法で手動アップデートも可能です

・Dockから「システム環境設定」を開く
![スクリーンショット 2021-10-26 19.49.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/bedc33ca-79eb-f06a-1056-646879de6312.png)
・「ソフトウェアアップデート」を開き、アップデートがあれば指示に従い実行
![スクリーンショット 2021-10-26 19.56.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/55770de9-e953-a3e2-559e-2e86fb7ea481.png)

### ターミナルのショートカット作成
以後の操作ではターミナル（Windowsでいうコマンドプロンプト）を多用しますが、デフォルトではショートカットが存在しないので、以下の手順で作成します。

画面右上のメニューバーから、検索メニューに入ります
![スクリーンショット 2021-10-26 20.51.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/5a8bd35e-3a4e-1af9-d931-2410466b7756.png)
「ターミナル」で検索して出てきたターミナルのアイコンを、画面下のDockにドラッグ&ドロップします
![スクリーンショット 2021-10-26 20.59.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/ffaa3a7d-502e-1b38-ecd5-b9840d67a054.png)

### Homebrewのインストール
Macにおける定番パッケージ管理ツールであるHomebrewをインストールします。

Homebrewをインストールする事で、今までインストールしたアプリケーションを一括管理することができ、更新管理等を効率化できます（Linuxにおけるaptや、Pythonにおけるpipに近いイメージです）

[Homebrew公式サイト](https://brew.sh/index_ja)にアクセスし、下図のチェックボックスをクリックしてシェルコマンドをコピーします
![スクリーンショット 2021-10-26 20.43.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/6f595b9e-c8b0-a908-0e1c-c60a2ccebe47.png)
コピーしたシェルコマンドをターミナルに貼り付け、Enterを押して実行します。
パスワードが求められるので、OSのユーザーパスワードを入力します。

M1系CPUではインストールが完了すると、以下のように「パスを通してください」というメッセージと共に2個のコマンドが表示されます。

```
==> Next steps:
- Run these two commands in your terminal to add Homebrew to your PATH:
    echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/******/.zprofile
    eval "$(/opt/homebrew/bin/brew shellenv)"
- Run `brew help` to get started
```

指示に従い、まずは1個目のコマンドをコピペして実行します
（******の部分はユーザ名が入る）

```terminal
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/******/.zprofile
```
次に、2個目のコマンドをコピペして実行します

```terminal
eval "$(/opt/homebrew/bin/brew shellenv)"
```
以下のコマンドでHomebrewのバージョンが表示されたら成功です

```
brew --version
```
※Homebrewの使い方は、以下の記事が分かりやすいです

https://kunolog.com/homebrew/

https://qiita.com/vintersnow/items/fca0be79cdc28bd2f5e4

#### Homebrewでのインストールおすすめアプリケーション
このタイミングで、Homebrewを使って以下のアプリケーションを入れてしまうと便利です
・Chrome
・Git（入っていないとき）

```:Chromeをインストールするコマンド
brew install google-chrome --cask
```
※最後の「--cask」は、GUIアプリケーションのインストールに必要なオプションです。

私のMac OS（12.0.1）ではGitが最初から入っていましたが、入っていない場合はインストールが必要です。入っているかどうかは以下で確認できます

```
git --version
```
上記でバージョンが表示されれば既にインストールされています。インストールされていない場合は以下でインストールします

```
brew install git
```

## VSCode環境構築
**VSCode**（Visual Studio Code）は**軽量かつ多機能なソースコードエディタ**で、Python（分析）やRuby（Webアプリ）など、多くの言語における主要なエディタとして定着しつつあります。
Microsoft製のためWindowsのイメージがあるVSCodeですが、Macでも着々とシェアを伸ばしているようです。

以下の手順で、VSCodeでの開発態勢を整えて行きます。
（[こちらの記事](https://kunolog.com/m1_vscode/)を参考にさせて頂きました）

### VSCodeのインストール
まずVSCode本体をインストールします。
Homebrewが入っていれば、以下のコマンドでインストールできます

```
brew install --cask visual-studio-code
```
Finderの「アプリケーション」フォルダにVSCodeが生成されるので、Dockにドラッグ&ドロップしてショートカットを生成すると便利です。
![スクリーンショット 2021-10-26 21.36.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/822c821f-f9cc-1003-86f8-435dd8f519f7.png)

初回起動時には以下の確認が出るので、「開く」を押します
![スクリーンショット 2021-10-26 20.20.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/0d666728-067e-7ac2-4a0c-f25d0ece66ad.png)

これでVSCodeのインストールが完了です。

参考までに、Homebrewを使用しないVSCodeのインストール法も下記します。

#### 参考：Homebrewを使用しないVSCodeのインストール

[VSCodeのダウンロードページ](https://code.visualstudio.com/Download)にアクセスし、以下のリンクからM1 Mac版のVSCodeをダウンロードします。
![スクリーンショット 2021-10-26 20.12.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/f6e6ca6e-24d5-53e4-fbe0-984469399191.png)
ダウンロードしたファイルをFinderで開き、Visual Studio Code.appを「アプリケーション」にドラッグアンドドロップします
![スクリーンショット 2021-10-26 20.18.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/218ea9bc-3e36-fc62-92ea-917676ffebb2.png)

### VSCode拡張機能のインストール
VSCodeには便利な拡張機能（アドオン）が多く存在し、これらをインストールすることで開発効率をアップさせることができます。

以下のように、VSCodeを起動して出てくる左下の「Extensions」タブをクリックし、検索して出てきたアドオンを「Install」ボタンでインストールできます。
![スクリーンショット 2021-10-26 21.49.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/94352299-87f9-af26-84bb-20e6e3290457.png)

個人的（Python分析エンジニア的）おすすめアドオンは、以下となります。

|アドオン名|機能|
|---|---|
|Python|PythonのリンターやJupyter拡張等、Pythonの基本機能を網羅したアドオン|
|Git Graph|Gitのツリーをグラフィカルに可視化|
|Rainbow CSV|CSVファイルを色分け表示するアドオン|
|Remote SSH|リモート端末上のコードをSSH接続で開発するアドオン|
|Remote Containers|Dockerコンテナ上のコードを開発するためのアドオン|
|Docker|Dockerのコンテナ管理やDockerFileのリンターを含んだアドオン|

Web系の開発をするのであれば、以下の記事が参考になるかと思います。

https://qiita.com/ucan-lab/items/e85931bf8276da43cc97

### VSCodeでの開発方法
VSCodeで実際にコードを書く際は、以下の手順が基本となります
#### 作業用フォルダの作成
Finderあるいはターミナル（mkdirコマンド）で、好きな場所に作業用フォルダを作成します
#### VSCodeで作業用フォルダを開く
VSCodeを起動し、左上のタブを選択したのち「Open Folder」をクリックします
![スクリーンショット 2021-10-27 2.58.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/bd86adfd-f348-13eb-f3d6-3d727e176abd.png)
#### スクリプトの作成
開いたフォルダ上で右クリックし、「New File」を選択します
![スクリーンショット 2021-10-27 3.13.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/8b152a1f-bb90-807c-fedf-c8156d60dbeb.png)
#### スクリプトのデバッグ
以下のように、左側のデバッグタブ（虫のマーク）を選択し、「Run and Debug」を押すことで、スクリプトをデバッグ実行できます
![スクリーンショット 2021-10-27 4.13.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/4d64ad87-6ee6-2cd3-2974-cbdef358991b.png)
行番号の左を選択すれば、ブレークポイント（デバッグ中に処理を止めて変数を確認するポイント）を打つこともできます

## Python環境構築
M1 Macでは、今回の新型Pro発売前からPython環境構築にハマるとの声が多く聞かれます。
その原因は、**pipやanaconda等のよく使われるパッケージ管理ツールが使用できないライブラリが多い**ことに集約されるようですが、各ライブラリのpip対応も徐々に進んでおり、状況が刻一刻と変わる段階にあります。

上記の状況を鑑みて、本記事では[**記事執筆時**](https://qiita.com/c60evaporator/items/aef6cc1581d2c4676504#更新情報)における、M1 MacにPython本体およびよく使うライブラリをインストールする方法を紹介します。

執筆においては、以下の記事を参考にさせて頂きました

https://zenn.dev/karaage0703/articles/0ab9e654cfb0ec

https://zenn.dev/osuzuki/articles/380be0f682d72d

### Python本体のインストール確認
Python自体はデフォルトでインストールされており、現時点ではこの**デフォルトのPython以外は一旦削除することが望ましい**です（環境の乱立による不具合を防ぐため）

「デフォルトのPython以外に何があるの？」と思われた方も多いかと思いますが、PythonはHomebrew等でもインストールできるため、まずはデフォルトのPythonのみがインストールされているかを確認します。

#### Python本体のパス確認
以下のコマンドを打ち、帰ってきたパスが`/usr/bin/python3`であればデフォルトのPythonにパスが通っているのでOKです

```
which python3
```

#### HomebrewのPythonが存在しないことを確認
以下のコマンドでHomebrewのインストールパッケージ一覧を表示させ、Pythonが存在しないことを確認します

```
brew list
```

### 各種ライブラリのインストール
以下の有名どころの分析系ライブラリをインストールする方法を紹介します。

|ライブラリ名|用途|インストール方法|
|---|---|---|
|numpy|数値計算|パターン1 (Miniforge)|
|pandas|データ整形|パターン1 (Miniforge)|
|scipy|統計計算|パターン1 (Miniforge)|
|scikit-learn|機械学習|パターン1 (Miniforge)|
|lightgbm|機械学習|パターン1 (Miniforge)|
|xgboost|機械学習|パターン1 (Miniforge)|
|jupyter|各種可視化|パターン1 (Miniforge)|
|matplotlib|グラフ描画|パターン1 (Miniforge)|
|seaborn|グラフ描画|パターン1 (Miniforge)|
|geopandas|地理データの分析|パターン1 (Miniforge)|
|opencv|画像処理|パターン1 (Miniforge)|
|optuna|パラメータチューニング|パターン1 (Miniforge) ~~パターン2 (Miniforge + pip)~~|
|自作ライブラリ|いろいろ|パターン2 (Miniforge + pip)|
|TensorFlow|機械学習(深層学習)|パターン3 (Miniforge + いろいろ)|
|PyTorch|機械学習(深層学習)|パターン4 (Miniforge + pytorch公式リポジトリ)|

パターン1〜4の具体的手順について、以下で詳説します

#### パターン1：Miniforgeによるインストール
[Miniforge](https://github.com/conda-forge/miniforge)とは、パッケージ管理システム「**conda**」をconda-forgeリポジトリで利用するためのツールで、**M1 Macを含むマルチプラットフォームに対応**していることが特徴です。

現状、**多くのライブラリにおいてM1 Macに簡単にインストールするための唯一の手段**となっています。

##### ・conda系ツールまとめ
conda系のツールはAnacondaやMiniconda等種類が多く、「どれがどれだか分からない！」という方も多いと思うので、以下にまとめました。
（間違いがあればご指摘頂ければと思います）

|名称|パッケージ管理システム|使用リポジトリ|初期パッケージ|商用利用|
|---|---|---|---|---|
|Anaconda|conda|Anacondaデフォルトリポジトリ|てんこ盛り|有償|
|Miniconda|conda|Anacondaデフォルトリポジトリ|最小限|有償|
|Miniconda + conda-forge|conda|conda-forge|最小限|無償|
|Miniforge|conda|conda-forge|最小限|無償|

パッケージ管理システムとリポジトリの違いは、以下のようになります

パッケージ管理システム（conda）：パッケージを管理する**仕組み**
使用リポジトリ(conda-forge等)：パッケージを格納しておく**場所**

余談ですが、[Anaconda商用利用有償化問題](https://qiita.com/tfukumori/items/f8fc2c53077b234384fc)は、condaではなくAnacondaデフォルトリポジトリが有償化されたことが根本原因（リポジトリの負荷増大防止のため）のようです。

##### Miniforgeのインストール方法
[MiniforgeのGitHubページ](https://github.com/conda-forge/miniforge)にアクセスし、以下の`Miniforge3-MacOSX-arm64`をダウンロードしてください
（高速化を目的としたpypyやMamba等もありますが、今はひとまず無視してください）
![スクリーンショット 2021-10-27 1.34.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/3989e527-36cc-1d5f-ff87-7ae5cabb6813.png)
ターミナルから以下のコマンドでダウンロードフォルダに移動し

```
cd ~/Downloads
```
以下のコマンドでダウンロードしたMiniforge3-MacOSX-arm64.shを実行してください

```
bash Miniforge3-MacOSX-arm64.sh
```
途中色々と聞かれますが、全てEnterを押すかyesで進んでください。
インストール完了後、シェルを一度閉じてから開き直し、以下のコマンドでcondaを有効化し、`(base)`と表示されれば成功です

```
conda activate
```
また、以下のコマンドでcondaのデフォルト環境(base)上にインストールされているPythonのバージョン等の情報が表示されます

```
conda info
```
このままでは常にシェルに(base)と表示されてしまいますが、以下のコマンドでcondaを無効化すれば消すことができます

```
conda deactivate
```

#### 仮想環境の作成
condaでパッケージ管理を行う際は

・ベース環境 (base)
・仮想環境

の2通りの方法があります。
後述しますが、M1 Macにおいてはライブラリによってpipとcondaの2通りのパッケージ管理ツールを使い分ける必要があり、前述の「混ぜるな危険問題」（pipとcondaで同じライブラリをインストールし不具合発生）が起こりやすい状況と言えます。
このリスクを回避するためには、**仮想環境を利用する**ことが望ましいです（問題が発生したら新たに仮想環境を作り直せば良い）

~~また、上記の方法でMiniforgeをインストールすると、conda上にPython3.9がインストールされますが、MacOS版TensorFlowは[現状Python3.8にしか対応していない](https://github.com/apple/tensorflow_macos#requirements)ため、Python3.8の環境を簡易的に作るためにも仮想環境は良いソリューションとなります。~~
2024/4現在、Python3.10で動作します。

前置きが長くなりましたが、以下のコマンドでPython3.10の仮想環境を作成します

```
conda create --name 仮想環境名 python=3.10
```
※「仮想環境名」の部分は好きな英数の名前を付けてください（例：python310）

作成が完了したら、以下のコマンドで環境一覧を表示させ、作成した仮想環境名が存在することを確認します

```
conda env list
```

```:表示例
# conda environments:
#
base                  *  /Users/******/miniforge3
仮想環境名                 /Users/******/miniforge3/envs/仮想環境名
```
※「******」の部分はユーザ名が入ります

以下のコマンドで、作成した仮想環境を有効化します

```
conda activate 仮想環境名
```
以下のコマンドで、インストールされているライブラリを確認します

```
conda list
```

```:実行結果
# Name                    Version                   Build  Channel
ca-certificates           2021.10.8            h4653dfc_0    conda-forge
libcxx                    12.0.1               h168391b_0    conda-forge
libffi                    3.4.2                hbdafb3b_4    conda-forge
libzlib                   1.2.11            hee7b306_1013    conda-forge
ncurses                   6.2                  h9aa5885_4    conda-forge
openssl                   3.0.0                h3422bc3_1    conda-forge
pip                       21.3.1             pyhd8ed1ab_0    conda-forge
python                    3.8.12          hd949e87_2_cpython    conda-forge
python_abi                3.8                      2_cp38    conda-forge
readline                  8.1                  hedafd6a_0    conda-forge
setuptools                58.2.0           py38h10201cd_0    conda-forge
sqlite                    3.36.0               h72a2b83_2    conda-forge
tk                        8.6.11               he1e0b03_1    conda-forge
wheel                     0.37.0             pyhd8ed1ab_1    conda-forge
xz                        5.2.5                h642e427_1    conda-forge
zlib                      1.2.11            hee7b306_1013    conda-forge
```
最低限のライブラリのみがインストールされていることがわかります。
numpy等の計算系ライブラリは入っていないため、別途インストールする必要があります。

なお、作成した仮想環境は以下のコマンドで削除できます

```
conda remove -n 仮想環境名 --all
```

#### ライブラリのインストール
[前述のリスト](https://qiita.com/c60evaporator/items/aef6cc1581d2c4676504#各種ライブラリのインストール)で「パターン1」となっていたライブラリに関しては、condaでインストールすることができます
（インストール前に仮想環境がactivateされていることを確認して下さい）
##### numpy

```
conda install numpy
```

##### pandas

```
conda install pandas
```

##### scipy

```
conda install scipy
```

##### scikit-learn

```
conda install scikit-learn
```

##### lightgbm

```
conda install lightgbm
```

##### xgboost

```
conda install xgboost
```

##### jupyter

```
conda install jupyter
```

##### matplotlib

```
conda install matplotlib
```

##### seaborn

```
conda install seaborn
```

##### geopandas

```
conda install geopandas
```

##### opencv

```
conda install opencv
```

なお、ライブラリを一個ずつインストールすると、手間が掛かる上にactivate忘れ等のミスの原因となるので、[**後述のenvironment.yamlで一括インストール**](https://qiita.com/c60evaporator/items/aef6cc1581d2c4676504#参考ライブラリの一括インストール)すると便利です

#### ライブラリインストールの確認
仮想環境をactivateした状態で以下のコマンドを打ち、インストールしたライブラリが含まれていることを確認します

```
conda list
```

#### VSCodeへの仮想環境の適用
作成した仮想環境にVSCodeからアクセスできるようにします。

VSCodeを開き、先ほどの[「VSCode使用法」](https://qiita.com/c60evaporator/items/aef6cc1581d2c4676504#vscodeで作業用フォルダを開く)の項と同様に、作業したいフォルダを開きます。
以下のように左下に「Python 3.*.*」と表示されている部分があると思うので、そこをクリックし、出てきた項目から「Enter interpreter path」を選択します
![スクリーンショット 2021-10-27 3.24.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/52052e0c-3e43-d067-79b3-4b091452b58d.png)
Find...をクリックします
![スクリーンショット 2021-10-27 4.01.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/cd300f1b-64c5-27f9-717e-7665d24399da.png)
フォルダ選択画面が表示されるので、インタープリタを探して「インタープリタを選択」を押します
インタープリタは、先ほど`conda env list`で表示された仮想環境のパス内に存在します。
一般的には以下のようなパスとなるかと思います。

```
/Users/******/miniforge3/envs/仮想環境名/bin/python3.x
```
※「******」の部分はユーザ名が、「x」の部分はPythonのバージョンが入ります

以下のように左下のPythonのバージョンが仮想環境のものに変われば成功です
![スクリーンショット 2021-10-27 4.11.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/af9a67d2-6353-fdaa-de4c-0dd2b293b415.png)
これで、デバッグ実行時に仮想環境のライブラリが適用されます。
（シェル実行する際はactivateコマンドで仮想環境を有効化してから実行して下さい）

#### ※ condaを使用したくない方へ
特にWindowsユーザの方は、[condaとpip混ぜるな危険問題](https://qiita.com/ynakayama/items/29efebeb38604d10acef)や[Anaconda有料化問題](https://qiita.com/tfukumori/items/f8fc2c53077b234384fc)等から、condaにイヤな思い出がある方も多いかと思います。私もそうでした。

このような方であっても、現状ではMiniforge以外でのインストールが困難なライブラリが多いため（scipy、scikit-learn、TensorFlowなど）、現時点では**condaのデメリットを鑑みてもMiniforgeを使用することをお薦めします**

一方でpipで簡易にインストールできるライブラリも徐々に増えている([numpyやpandasは既にpipでもインストールできるようです](https://ichiken-usa.blogspot.com/2021/05/m1pandas.html))ため、将来的にはconda（Miniforge）を使用しなくともM1 MacでPython環境構築できるようになる可能性が高いと思います。

現状未対応のライブラリも徐々に対応が進んでいるため、大きな動きがあれば本記事でも内容更新しようと思います（以下はscikit-learnでの開発進捗を共有するIssues）

https://github.com/scikit-learn/scikit-learn/issues/19137

### パターン2：Miniforge + pipによるインストール
condaでインストールできないライブラリに関しては、pipでインストールすることも可能です。
この際、**同じライブラリをpipとcondaで2重にインストールすると不具合の原因となる**ので、ご注意ください
(仮想環境内であれば、仮想環境を作り直せば復旧可能です)

pipでのインストールは、以下の手順で行います

#### Miniforge環境の構築
まずは[パターン1の手順を一通り完了させ](https://qiita.com/c60evaporator/items/aef6cc1581d2c4676504#パターン1miniforgeによるインストール)、condaでインストールできる依存ライブラリは全てインストールしておきます

#### pipによるライブラリインストール
condaでインストールできないがpipでインストールできる主なライブラリ（前述の「パターン2」）のインストール方法を紹介します

##### optuna
optunaは

```
conda install optuna
```
でインストールしようとすると、

```
UnsatisfiableError: The following specifications were found to be incompatible with each other:

Output in format: Requested package -> Available versions
```
~~というエラーが出てうまくインストールできないので、pipでインストールします~~
~~(Windowsではcondaでもインストールできるようですが、M1でできない原因は不明です)~~

**※2023/1/3更新: M1でもcondaでoptunaをインストール出来るようになったようです**


##### 自作ライブラリ
[こちらの記事で紹介した方法](https://qiita.com/c60evaporator/items/e1ecccab07a607487dcf)でpipインストール可能とした自作ライブラリや、conda-forgeに登録されていないマイナーなライブラリをインストールしたいときも、pipが便利です。

例えば[こちらの記事](https://qiita.com/c60evaporator/items/8cb774e65d4423fd93ee)で作成した「seaborn-analyzer」というライブラリをインストールしたい場合、仮想環境をactivateして[READMEに記載されている依存パッケージ](https://github.com/c60evaporator/seaborn-analyzer#必要要件)をcondaでインストールしたのち、

```
pip install seaborn-analyzer
```
でインストールできます

### 【参考】ライブラリの一括インストール
上記の手順ではライブラリを一個ずつインストールしており、手間が掛かる上にactivate忘れやpipとcondaの間違い等のミスも起こりやすい状況となっています。

上記の問題の解決策としては、**environment.yaml**（pipにおけるrequirements.txtに相当）による**一括インストール**が便利です

例えば[前述のパターン1(condaでインストール)およびパターン2(pipでインストール)](https://qiita.com/c60evaporator/items/aef6cc1581d2c4676504#各種ライブラリのインストール)の全てのライブラリをインストールしたpython3.10仮想環境を作成したい場合、以下のようなenvironment.yamlを作成します

```environment.yaml
name: 環境名
channels:
  - conda-forge
dependencies:
  - python=3.10
  - numpy
  - pandas
  - scipy
  - scikit-learn
  - lightgbm
  - xgboost
  - jupyter
  - matplotlib
  - seaborn
  - geopandas
  - opencv
  - pip:
    - optuna
    - seaborn-analyzer
prefix: /Users/ユーザ名/miniforge3/envs/環境名
```
上記で作成したenvironment.yamlを以下のコマンドで実行すれば、記述したライブラリが全てインストールされた仮想環境を作成することができます。

```
conda env create --file environment.yaml
```

インストール元のリポジトリも個別に指定できるので、**conda-forge以外のリポジトリ（pip等）からのインストールも可能**です

上記はライブラリの名称のみを指定していますが、バージョンまで指定してインストールしたいときや、現在の環境をenvironment.yamlに書き出したいときは、以下の記事が参考になります。

https://qiita.com/yubessy/items/2dd43551aa8308dc7eca

### パターン3：TensorFlowのインストール
TensorFlowは記事によってインストール方法が異なっており、ベストプラクティスが定まっていない状況と思われますが、恐らく現状では以下の方法が一番簡単です（[参考記事](http://peachvalley.net/tensorflow-20210724/)）

https://developer.apple.com/metal/tensorflow-plugin/

上記を参考に、以下の方法でTensorFlow (M1 GPU対応)のインストールを進めます

#### Miniforge環境の構築
まずは[パターン1の手順を一通り完了させ](https://qiita.com/c60evaporator/items/aef6cc1581d2c4676504#パターン1miniforgeによるインストール)、opencvをcondaでインストールしておきます。

#### tensorflow-depsのインストール
仮想環境をactivateしたのち、TensorFlow-deps（依存パッケージ）を以下のコマンドでインストールします

```
conda install -c apple tensorflow-deps
```

#### base TensorFlowのインストール
以下のコマンドで、Mac版TensorFlowをインストールします

```
python -m pip install tensorflow-macos
```

#### tensorflow-metalプラグインのインストール
TensorFlowでM1 GPUを効率的に利用するためのプラグインであるtensorflow-metalを、以下のコマンドでインストールします

```
python -m pip install tensorflow-metal
```

#### 動作確認
以下のコマンドでTensorFlowのバージョンが表示されれば成功です

```
python -c 'import tensorflow as tf; print(tf.__version__)'
```

### パターン4：PyTorchのインストール
以下のサイトに記載されているように、pytorchのリポジトリ経由でcondaからpytorchをインストールできるようになったようです。

https://min.news/en/tech/5e6bf957ff2b999266b5d56bc93a62b1.html

以下の手順でPytorchをインストールします

#### Miniforge環境の構築
まずは[パターン1の手順を一通り完了させ](https://qiita.com/c60evaporator/items/aef6cc1581d2c4676504#パターン1miniforgeによるインストール)ます。

#### pytorchのインストール
仮想環境をactivateしたのち、~~pytorchとtorchvisionを以下のコマンドでインストールします~~

```
conda install -c pytorch pytorch torchvision
```

##### ※2022/6/26更新
PyTorchがM1 GPUに対応したそうなので、GPUを利用したい方は以下のpip3コマンドでインストールした方がパフォーマンスが向上するようです ([こちら](https://qiita.com/szk1akhr/items/90136cd4d1381769fbb5)や[こちら](https://towardsdatascience.com/gpu-acceleration-comes-to-pytorch-on-m1-macs-195c399efcc1)を参考にさせて頂きました)

```
pip3 install -U --pre torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/nightly/cpu
```

以下Pythonスクリプトでバージョンが1.12.0以上、かつMPUが有効（True）になっていればOKです

```python
import torch
print(torch.__version__)
print(torch.backends.mps.is_available())
```

M1MacのGPU学習を有効化する（データやモデルをGPUに送る）際には、CUDAでは"cuda"としていた部分を以下のように"mps"と指定すると良いでしょう（mpsは[Metal Performance Shaders](https://developer.apple.com/metal/pytorch/)の略）。

```python
model.to("mps")
```

参考までに、私の環境（M1 Pro 10core-CPU & 14core-GPU）でのCPUとGPUでの学習時間を比較しました。
詳細は以下の動作確認用スクリプト中の`4_pytorch_test.py`を参照頂きたいですが、データはCIFAR10、モデルはResNet16、バッチ数32、エポック数5で学習しています。

|環境|学習所要時間|
|---|---|
|GPU (device="mps")|140.2s|
|CPU (device="cpu")|1590.9s|
|CUDA参考 (CUDA + GeForce RTX4080 + Ubuntu22.04)|52.1s|

CPUよりはだいぶ速くなっており、CUDAとも思ったほど差がなさそうに見えます。とはいえ大きなモデルではCUDAに優位性があることは間違いないので、速度重視であればNVIDIAのGPUとCUDAを使用した方が良いでしょう。

### 動作確認用スクリプト
以下に、今回インストールしたライブラリの動作確認用スクリプトをアップロードしたので、こちらをVSCodeで実行してエラーが出なければ成功です。

https://github.com/c60evaporator/m1mac-miniforge-test/tree/master/miniforge_test

以上でPythonの環境構築は完了です！

かなり手間がかかりましたが、環境をほぼMiniforgeに統一できたので、**現状でのベストプラクティスに近い環境**となったのではと考えております。

（あえて言うのであればMiniforgeをHomebrewでインストールするか少し迷いましたが、現時点では適用事例が少ないので公式の方法でのインストールにしております）

## Docker環境構築
Dockerに関しても、M1 Macはややイレギュラーな対応が必要となります。具体的には以下となります。

・Rosetta2 (Intel CPU用に開発されたアプリを動かすためのツール)のインストールが必要
・一部のDocker Imageが正常に動作しない

以下の手順でセットアップを進めます

### Docker Desktopのインストール
まず、Docker Desktop本体のインストールを完了させます
#### Rosetta2のインストール
以下のコマンドで、Rosetta2をインストールします

```
softwareupdate --install-rosetta
```
途中でインストール確認メッセージが出てくるので、「A」と入力してEnterを押します

#### Docker Desktopのダウンロードとインストール
[Docker公式](https://docs.docker.com/desktop/mac/apple-silicon/)から、以下のボタンよりDocker.dmgをダウンロードします
![スクリーンショット 2021-10-28 13.02.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/39ea2aad-3357-c5d2-1210-8246fb04119f.png)
ダウンロードしたファイルをダブルクリックすると以下の画面が開くので、指示通りウィンドウ内のDockerのアイコンをApplicationsにドラッグ&ドロップします
![スクリーンショット 2021-10-28 16.18.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/be5688c4-92d9-9932-ce5b-611a4899935d.png)
しばらく待つとDocker Desktopのインストールが完了します

#### Dockerの動作確認
Docker Desktopを開くと、管理者権限の確認画面が出てくるのでパスワードを入力します。
利用規約確認画面でOKを押してしばらく待ち、以下の画面が出て来れば起動成功です。
![スクリーンショット 2021-10-28 17.58.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/d67477b7-6e41-02cf-24b2-98ebb801ecf7.png)
コンテナが起動するかどうかを確認するため、適当な作業用フォルダを作成し、直下に以下のようなdocker-compose.yamlを作成します（Python開発環境のImageです）

```docker-compose.yaml
version: '3'
services:
  test_python:
    image: python:3.8-buster
    volumes: 
      - .:/mnt
    stdin_open: true
    tty: true
    working_dir: /mnt
    command:  /bin/bash
```
上記ファイルのあるディレクトリにターミナルで移動し、以下のコマンドでコンテナを起動します

```
docker-compose run test_python
```
Imageのダウンロードとコンテナ起動が始まるのでしばらく待ち、以下のようなbashが立ち上がれば成功です

```
root@******:/mnt# 
```
（bashからは「exit」で抜けられます）

また、VSCodeのRemote Containersアドオンがインストールされていれば、リモート接続タブから以下のように作成したコンテナにアクセスすることができます
![スクリーンショット 2021-10-28 18.30.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/a7457436-88d8-8dfd-f50b-0282a7ed2d23.png)
上図の場合作業用フォルダ名が「miniforge_test」だったので、この名前に合わせてコンテナ名が作成されます
※docker-composeによるコンテナ名の命名規則は[こちら](https://qiita.com/ymm1x/items/56961f8e2ffb48b8dbe3)参照

#### 一部のImageでのエラー回避方法
下記記事のように一部のImage（mysql等）では、M1 Macに非対応であることに由来したエラーが発生します。

https://qiita.com/prkrsign890/items/10ecb57e0387a673b3a2

上記記事に記載されているように、docker-composeに`platform: 'linux/amd64'`という定義を追加すれば（あるいはrunやup時に`--platform linux/amd64`というオプションを追加）、エラーを回避することができます（[公式にも記載あり](https://docs.docker.com/desktop/mac/apple-silicon/#known-issues)）

### ※Docker Desktopの商用有償化回避
ご存じの方も多いかと思いますが、Docker Desktopは2022年2月より、従業員数250人以上または売上10億円以上の企業において有償化されます。

https://qiita.com/autotaker1984/items/284e28f82fc1828da44e

有償化を回避するためには、以下のようにLimaを使用する方法等があるようです。

https://qiita.com/yoichiwo7/items/44aff38674134ad87da3

## Android Studio環境構築
**別記事で投稿しました**

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