homebrewからMacPortsに乗り換える(macOS Big Sur)

# MacPortsとは
歴史あるMacのパッケージ管理システム．大体のことはこちらの記事に分かりやすくまとめられている

https://qiita.com/tenomoto/items/66614f982de96641d662

# Macパッケージを使う目的
- 大気海洋データの解析
- 特にPython3(+Cartopy)とGrADSを多用する
- ソースコンパイルに自信がないandそのトラブルシュートに時間を割きたくない

※ macOSはBig Sur


# 使うソフトと新旧のパッケージ管理


|               | 旧（移行前）　　　　                  | 新（移行後）           | 
| ------------- | ----------------------------------- | ----------------------- | 
| GNU系コマンド | homebrew                            | MacPorts                | 
| Python3系     | homebrew + miniconda                | MacPorts                | 
| GrADS         | GrADS v2.0.2 (コンパイル済みを移植) | MacPorts (GrADS v2.2.1) | 

# あえて(?)MacPortsを使う動機
- 開発ツリーが単一であり安心（[MacPortsの紹介](https://qiita.com/tenomoto/items/66614f982de96641d662)）
- Pythonパッケージも（自分の必要なものは）大方整備されている
- HPが意外と洗練されている（特に[Available Ports](https://ports.macports.org)は見やすい）
- MacでGrADS2.2.xを動かすには唯一の選択肢（自分の知る限り）
- <strike>まだMontereyへ移行する気はない</strike> 自分の必要のものは移行完了（上記Available Portsで対応OSを確認できる）
- MacPortsからhomebrewへの移行をまとめた記事は多いが，逆はほとんどない

# 結果
- 快適，homebrewと遜色ない
- brew, pip, condaを混ぜて使わなくて良くなりストレス減（これはhomebrewが悪いわけでないが）
- GrADS2.2.xを使える(驚きと)幸せ

# 移行手順

## miniconda3のアンインストール
こちらの記事を参考にさせていただいた

https://weblabo.oscasierra.net/python-anaconda-uninstall-macos/

```
$ conda install anaconda-clean
$ anaconda-clean
```
.zshrcの内部，conda initで書き込まれた部分を削除

## homebrewのアンインストール
こちらの記事を参考にさせていただいた

https://weblabo.oscasierra.net/homebrew-uninstall/

公式のGitHubリポジトリに説明がある（[Homebrew (un)installer](https://github.com/homebrew/install#uninstall-homebrew)）

```
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
```

この時の注意として，私はログインシェルのzshをhomebrewでインストールしていたので，homebrewアンインストール直後，<b>端末を一切使えない</b>事態に陥った．．
事前にログインシェルを変更しておくべし（釈迦に説法）
私は以下の記事を参考に，窮地を脱した（環境設定からログインシェルを変更できることを初めて知った．．）

https://code-graffiti.com/terminal-shell-zsh-in-macos-10-15-catalina/

## MacPortsのインストール
公式ページを参考にした

https://www.macports.org/install.php

以下，日本語でまとめる
（Xcode, Command Line Tools, XQuartzをダウンロード済みの場合の人は適宜飛ばしてください）
（過去のmacOS(OSX Leopard以後)にも対応しているのもMacPortsのメリットの一つだが，今回は割愛）

### Xcodeのインストール
Appストアよりダウンロード
[Xcode](https://itunes.apple.com/us/app/xcode/id497799835)

### Xcode Command Line Toolsのインストール
Xcodeダウンロード後，以下を端末で実行

```
$ xcode-select --install
```
ポップアップが出るので，インストールボタンをクリック

### Xcodeのライセンス同意
順次，以下のコマンドを端末で実行

```
$ sudo xcodebuild -license
```
自己責任で同意

### XQuartzのダウンロード
以下のリンクよりダウンロード、pkgファイルの実行

https://www.xquartz.org

### インストーラのダウンロード
[インストールページ](https://www.macports.org/install.php)上部より適当なバージョンを選択
（今回はBig Sur）

Downloas（or任意のディレクトリ）に「MacPorts-2.x.x-11-BigSur.pkg」のようなファイルがダウンロードされるので，ダブルクリックで実行，順次指示に従いインストール

### `/opt/local/bin`へパスを通す
例えば，（簡単のため全てechoリダイレクトで.zshrcを編集）

```
$ echo 'export PATH="/opt/local/bin:$PATH"' >> .zshrc 
```
ちなみに，MacPorts関連のデータは基本的に`/opt/local`以下へインストールされる（それゆえ`sudo`が必要となる）

### `port`のアップデート
```
$ sudo port -v selfupdate
```

ここまでくれば，"enjoy MacPorts!"


## `port`によるGNU系のコマンド（その他）のインストール
```
$ sudo port install coreutils
```
インストール完了後，コメントにある通り，デフォルトのBSD系コマンドよりGNU系コマンドを優先するなら`/opt/local/libexec/gnubin`へパスを通す

```
$ echo 'export PATH="/opt/local/libexec/gnubin:$PATH"' >> .zshrc
```
zshのインストールとログインシェルの変更

```
$ sudo port install zsh
$ sudo chpass -s '/opt/local/bin/zsh' $USER
```
順次インストール（個人的なチョイス）

```
$ sudo port install git
$ sudo port install emacs
$ sudo port install tmux
$ sudo port install zsh-syntax-highlighting  ;#要source文を.zshrcへ追加
$ sudo port install gnutar  ;#gnu-tarではない！
$ sudo port install gsed
$ sudo port install gawk
$ sudo port install wget
$ sudo port install diffutils
$ sudo port install htop
$ sudo port install ImageMagick  ;#Python3.9もインストールされた

$ sudo port install gcc11  ;#バージョンは要確認
$ sudo port select --set gcc mp-gcc11
```
ほとんどHomebrewと同じなので，違和感なし
`sudo`でパスワード打つの億劫なので，短時間に作業できると吉
`port select --set gcc`はgccのバージョンを指定する，`none`を指定するとデフォルトを使えたりする，つまり，複数バージョンを同時併用できる（と思っている）

## `port`によるGrADSのインストール
```
$ sudo port install grads
```
grads-v2.2.1がダウンロードされる（2021/11現在）が，これだけでは動かない
`GAUDPT`のパスを指定してくれというエラーが出るので，指定する
そのパスは`port contents grads | grep udpt`で確認できる
その他，`GASCRP`, `GADDIR`も天下り式に指定する（スクリプトファイルとFontやMapファイルは[東北大学のサイト](https://wind.gp.tohoku.ac.jp/html/index.php?%B8%F8%B3%AB%BE%F0%CA%F3/GrADS/GrADS%A4%CE%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB)等を参考にしてください）


```
$ echo 'export GAUDPT="/opt/local/share/grads/udpt"' >> .zshrc
$ echo 'export GASCRP="/usr/local/lib/grads"' >> .zshrc
$ echo 'export GADDIR="/usr/local/lib/grads"' >> .zshrc
```

## `port`によるPython3系のインストール
（個人的なチョイス）

```
sudo port install python39  ;#既にインストール済み
sudo port select —set python3 python39  ;#pyhon3に設定（python2は使わないのでデフォ）
sudo port install py39-numpy
port select --set cython cython39
#列挙で一気にダウンロードしてくれる（是非横スクロール）
sudo port install py39-pandas py39-matplotlib py39-cartopy py39-pygrib py39-xarray py39-scipy py39-jupyterlab py39-metpy
```
python3.8を使いたければ，python38, py38-xxxをインストールすれば良い
シンプルで扱いやすい

# 考察
元々MacPortsユーザーは多かったが，後発のHomebrewへ利用者が流出している，という記事をよく見かける
その理由として，homebrewは

- OSのシステムも利用するのでインストールは高速で低容量
- GitHubリポジトリをそのまま利用しミニマル
- ユーザ，（有志含む）メンテナ共に多く，アップデート頻度高
- brew caskによるGUIソフトのダウンロード
- `sudo`不要

などが挙げられている（参考：[3周まわってMacPortsからHomebrewへ移行した](https://code.lioon.net/command/switch-homebrew.html), [MacでHomebrewを使ったパッケージ管理覚書](https://blog.yuuki-note.com/entry/2020/10/07/005924), [MacPorts と Homebrew の違いについて](http://osanai.org/57/)）
MacPortsではこれこれができない，や，homebrewでしかこれこれはできない，などの決定的な根拠を持ってhomebrewを利用している，という場合もあるのかもしれないが，少なくともWeb上の情報では見当たらない
また，MacPortsのroot権限の行使に関しても，なんとなく不安な気持ちになるのはわかるが，これが原因で内部システムが書き換えられ深刻な問題に陥る，ようなケースも私の探した限り見受けられなかった（もしあれば教えて欲しいです）

# 最後に
MacPortsは，自然科学のデータ解析を行う身としてCartopyやGrADSやGMTを簡素に安心して使える，
という点において大変ありがたいパッケージ管理システムと感じた