M1macでのPython環境にうんざりしちゃったので再環境構築した

現行販売されているMacがM1プロセッサーに置き換わり、対応するアプリはとても早くて満足なのですが、開発環境の構築などは、ライブラリが対応していないなど、引っかかることが多いです。
(研究室や職場で仕方なくM1使ってて、苦労している方もいるのではないでしょうか。)

今回は、M1のMacbookで、『Intel MacのPython環境』を再現してみたのでやり方を残しておきます。


:::note warn
大事なデータを削除してしまう可能性があります。
TimeMachineでのバックアップなど、十分な対策の上、自己責任で行ってください。
:::

## （Intel版）Homebrewのインストール
環境構築には必須なので、一番最初に入れます。
`arch -x86_64`を先頭に付けることで、Intel用がインストールされます。

```: bash
$ arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 
```

:::note warn
既にM1用のHomebrewをインストールしている方も、現時点でM1用は削除せずに上記のコマンドを実行してください。 
:::

## iTerm2のダウンロード
Intel用のiTerm2をインストールしてきます。

``` :bash
$ arch -x86_64 /usr/local/bin/brew install iterm2 --cask
```
既にiTerm2をインストールしている方は、アプリ側でRosetta2を使用するように設定をしてください。
以下の記事がとても参考になります。
[Appleシリコン搭載のMacターミナルでRosettaを使用する方法](https://blog.looseknot.jp/mac/m1mac_terminal_rosetta.html)
※Mac純正のTerminalについて解説されてますが、iTerm2でもできます。

## ログインシェルの確認
M1のHomebrewでインストールしたBashを使用していた人は、Intel版に変更します。
```:bash
# ログインシェルの確認
$ echo $SHELL
> /opt/homebrew/bin/bash

# bashのインストール
$ arch -x86_64 brew install bash

# シェル一覧に追加
$ sudo vim /etc/shells
→ /usr/local/bin/bash
を末尾に追加

# 保存後、ログインシェルの変更
$ chsh -s /usr/local/bin/bash
```
再起動すると、ログインシェルが変わっているはずです。

## iTerm2上でRosetta2を確認
iTerm2を起動(or再起動)し、以下のコマンドの結果を確認してください。
```:bash
$ uname -m
> x86_64 # Rosetta2上で動いている場合
> arm64  # m1ネイティブで動いている場合 
```
`x86_64`と表示されればOKです。

## PATHの追加（変更）
```:~/.bashrc
## M1 Homebrewを使っていた方はコメントアウト
# export PATH=/opt/homebrew/bin:$PATH

## 追加
export PATH=/usr/local/bin:$PATH
### aliasで使い分けます
alias brew=/usr/local/bin/brew      # Intel用のHomebrew
alias mbrew=/opt/homebrew/bin/brew  # M1用のHomebrew
```

`brew`と`mbrew`のaliasを付けることで、M1用のHomebrewでインストールしたいCaskアプリなど、使い分けることができます。
M1用Homebrewを使いたい際は、`mbrew install app_name --cask`などで使用してください。

保存後、`source ~/.bashrc`し、`which brew`で`> /usr/local/bin/brew`と表示されるか確認してみてください。

:::note info
PATHの変更後も`brew`が`/opt/homebrew/bin/brew`になっている場合は、PATHに`/opt/homebrew/bin`が残っていることが考えられます。
`~/.bashrc`内に`export PATH=""`以下を追加して、PATHをリセットしてみてください。
```~/.bashrc
export PATH="" # 追加

# PATHの追加をするところ
export PATH=/usr/local/bin:$PATH
...
```
:::

## miniforge3のインストール
Python環境を作っていきます。

既にM1用のminiforgeをインストールしている方は、`rm -r ~/miniforge3`などで削除してください。

:::note warn
削除の前に、保存したい環境は
`conda env export -n [env_name] > env_name.yml`
で環境の情報を保存しておくことをオススメします。
:::

```:bash
# Intel版、miniforge3のインストール
$ brew install wget
$ wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-MacOSX-x86_64.sh
$ bash Miniforge3-MacOSX-x86_64.sh
```

## (任意)M1用のHomebrew内の整理

無事、Intel用のHomebrewをインストールできたことですが、私はM1用Homebrewを削除せず、以下の運用をしています。

- Formulaeなど、Terminal上で動かすアプリはM1用でインストール
- CaskなどのGUIアプリはM1用でインストール

そのため、M1用で使っていたFormulaeのアプリは削除してしまいました。
```:bash
$ mbrew list
> (たくさん表示される。)

# 一つ一つ見て、削除して良いか確認するのが良いですが、
# 億劫な人は以下のコマンドで一括削除できます。

$ mbrew remove `mbrew list --formula`

# Formulaは削除され、Caskアプリは残っているはず。
$ mbrew list
```

## 完成！
`conda create -n test python=3.7`
などで、Intel Macとして動くか試してみてください。
※M1用では、condaでpython=3.7がインストールできないので、、、

## さいごに
M1用に、色んなライブラリが対応してきているようですが、まだまだ対応していないのが多く、環境構築に手こずってしまうことが多いです。。。
今回の内容は、『応急処置』ですが、現時点ではIntel Macと同じ様に使えているので、
困っている方の参考になれば嬉しいです。

## 参考URL
https://blog.looseknot.jp/mac/m1mac_terminal_rosetta.html
https://www.task-notes.com/entry/20150117/1421482066

大変参考になりました。ありがとうございました。