Mac(Catalina)にcabocha-pythonがインストールできないときの対処法

# 環境
MacOS: Catalina バージョン10.15.2
Python: 3.7.5

# 問題
[言語処理100本ノック 2015](http://www.cl.ecei.tohoku.ac.jp/nlp100/)の 5章 係り受け解析 のためにCaboChaのpythonモジュール`cabocha-python`をインストールしようとしました。
HomebrewからCaboChaをインストールすることはできたのですが、その後の`pip install cabocha-python`で以下のようなエラーが出てインストールできませんでした。

```shell:zsh
% pip install cabocha-python

Collecting cabocha-python
  Downloading https://files.pythonhosted.org/packages/f6/d7/9d65ff2cf49f34ef8313c2fe6fe2f8b0a0e165ea385e6ef6e20b4538560c/cabocha-python-0.69.1.tar.gz (49kB)
     |████████████████████████████████| 51kB 4.9MB/s 
Building wheels for collected packages: cabocha-python
  Building wheel for cabocha-python (setup.py) ... error
  ERROR: Command errored out with exit status 1:
   command: /Users/usr/Documents/training/nlp100/.venv/bin/python3.7 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/9p/xbrbn3tj3nv9m0s8_zxnpq8m0000gn/T/pip-install-9gvea7po/cabocha-python/setup.py'"'"'; __file__='"'"'/private/var/folders/9p/xbrbn3tj3nv9m0s8_zxnpq8m0000gn/T/pip-install-9gvea7po/cabocha-python/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /private/var/folders/9p/xbrbn3tj3nv9m0s8_zxnpq8m0000gn/T/pip-wheel-o5qn4gsq --python-tag cp37
       cwd: /private/var/folders/9p/xbrbn3tj3nv9m0s8_zxnpq8m0000gn/T/pip-install-9gvea7po/cabocha-python/
  Complete output (234 lines):
  running bdist_wheel
  running build
  running build_py
  creating build
  creating build/lib.macosx-10.15-x86_64-3.7
  copying CaboCha.py -> build/lib.macosx-10.15-x86_64-3.7
  warning: build_py: byte-compiling is disabled, skipping.
  
  running build_ext
  building '_CaboCha' extension
  creating build/temp.macosx-10.15-x86_64-3.7
  clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/cabocha/0.69/include -I/Users/kenji.mineta/Documents/training/nlp100/.venv/include/python3.7m -I/Users/kenji.mineta/Documents/training/nlp100/.venv/include/python3.7m -I/usr/local/Cellar/python/3.7.5/Frameworks/Python.framework/Versions/3.7/include/python3.7m -c CaboCha_wrap.cxx -o build/temp.macosx-10.15-x86_64-3.7/CaboCha_wrap.o
  CaboCha_wrap.cxx:3512:18: warning: exception of type 'const char *' will be caught by earlier handler [-Wexceptions]
      catch (const char *e) {
                   ^

〜〜〜〜〜中略〜〜〜〜〜

  36 warnings generated.
  warning: no library file corresponding to '-L/usr/local/Cellar/mecab/0.996/lib' found (skipping)
  clang++ -bundle -undefined dynamic_lookup -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk build/temp.macosx-10.15-x86_64-3.7/CaboCha_wrap.o -L/usr/local/Cellar/cabocha/0.69/lib -lcabocha -lcrfpp -lmecab -liconv -lmecab -lstdc++ -o build/lib.macosx-10.15-x86_64-3.7/_CaboCha.cpython-37m-darwin.so
  ld: library not found for -lcrfpp
  clang: error: linker command failed with exit code 1 (use -v to see invocation)
  error: command 'clang++' failed with exit status 1
  ----------------------------------------
  ERROR: Failed building wheel for cabocha-python
```

# 結論
公式のGoogle DriveからダウンロードしてきたCaboChaを`make install`する。
https://drive.google.com/drive/folders/0B4y35FiV1wh7cGRCUUJHVTNJRnM

```shell:zsh
% ./configure --with-mecab-config=`which mecab-config` --with-charset=UTF8
% make
% make check
% sudo make install
```
その後、`pip install`することでインストールできました。

```shell:zsh
% pip install cabocha-python

Collecting cabocha-python
  Downloading https://files.pythonhosted.org/packages/f6/d7/9d65ff2cf49f34ef8313c2fe6fe2f8b0a0e165ea385e6ef6e20b4538560c/cabocha-python-0.69.1.tar.gz (49kB)
     |████████████████████████████████| 51kB 5.0MB/s 
Building wheels for collected packages: cabocha-python
  Building wheel for cabocha-python (setup.py) ... done
  Created wheel for cabocha-python: filename=cabocha_python-0.69.1-cp37-cp37m-macosx_10_15_x86_64.whl size=30510 sha256=d7b78e7b33eff91b2e579f14587c84716559f7974ee746a3d4c9f5cfef49c97e
  Stored in directory: /private/var/folders/9p/xbrbn3tj3nv9m0s8_zxnpq8m0000gn/T/pip-ephem-wheel-cache-kzn05_d1/wheels/d4/62/d0/724e685135e5fa3da495d2f54dbe459adc56ffda08e3a01ebb
Successfully built cabocha-python
Installing collected packages: cabocha-python
Successfully installed cabocha-python-0.69.1

%
```
やったぜ。

# MeCabのインストールから整理してみる
※brewコマンドはインストール済みとします。

CaboChaをインストールするには、事前にMeCabやCRF++等をインストールしておく必要があります。
これらのインストールにはbrewを使用しても問題ありませんでした。
## MeCabのインストール
```shell:zsh
% brew install mecab
% brew install mecab-ipadic
```
## CaboChaに必要なモジュールのインストール
```shell:zsh
% brew install git curl xz
% brew install crf++
```
## CaboChaのインストール
### CaboChaをダウンロード
[公式のGoogle Drive](https://drive.google.com/drive/folders/0B4y35FiV1wh7cGRCUUJHVTNJRnM)から最新版のCaboChaをダウンロードしてきます。自分がダウンロードしたのは`cabocha-0.69.tar.bz2`でした。
### CaboChaをmake install
ダウンロードしたファイルを適当な作業ディレクトリに解凍します。
解凍すると`cabocha-0.69`というディレクトリができるので、ターミナルを開いて移動します。

```shell:zsh
% cd cabocha-0.69
```
`cabocha-0.69`内で`make`コマンドを実行します。
`./configure`の引数を忘れないように注意してください（理解はしていませんが…）。

```shell:zsh
cabocha-0.69 % ./configure --with-mecab-config=`which mecab-config` --with-charset=UTF8
cabocha-0.69 % make
cabocha-0.69 % make check
cabocha-0.69 % sudo make install
```
CaboChaが動くかどうか確認してみます。
以下のようにターミナル上で`cabocha`が実行できればCaboChaのインストールは成功です。

```shell:zsh
% cabocha
貴社の記者が汽車で帰社した。　←ここは手入力します。
  貴社の-D    
    記者が---D
      汽車で-D
      帰社した
EOS
(^cで終了)
```

### cabocha-pythonのインストール
これまでの手順でCaboChaをインストールすることで、PyPIにあるcabocha-pythonをインストールできるようになりました。

```shell:zsh
% pip install cabocha-python
```
また、ダウンロードした`cabocha-0.69`内にある`python/`を使ってインストールすることもできました。

```shell:zsh
cabocha-0.69 % pip install python/
```
### 動作確認
```shell:zsh
% python
>>> import CaboCha
>>> cp = CaboCha.Parser()
>>> print(cp.parseToString("記者の記者が汽車で帰社した"))
  記者の-D    
    記者が---D
      汽車で-D
      帰社した
EOS
```
やったぜ。
# エラーの原因について（未解決）
冒頭に載せたエラーは、C++のコンパイラ周りで発生しているようです。
どうやらCommand Line Toolsのバージョンが新しいとうまくいかないらしいです。
参考：[【Macメモ】MacのJupyter NotebookでCabochaを動かす](https://qiita.com/makaishi2/items/be4fc86135a694808138)
> これから行うビルド作業では、CLTのバージョンが9.4である必要があります。
> もし、CLTのバージョンはこれより大きなものの場合、Appleダウンロードサイトから、Command Line Tools 9.4をダウンロード・導入するようにして下さい。

しかし、自分の使っているMacOS（Catalina）でCLTのバージョンを下げる方法が分かりません…。
[色々見ながら](https://qiita.com/imbsky/items/da709a514dded95b8575)、パスを通してみるなどしたのですが、結局うまくいきませんでした。

# 所感
いっそのことMeCabから`make install`した方が良いのかもしれませんが、動いたので良しとしました。
(Mac初心者なので、できる限りbrewに任せたい)

同じようなエラーが出た方、原因について詳しい方いましたらコメントで教えていただけると幸いです。

# 参考にしたページ
[【Macメモ】MacのJupyter NotebookでCabochaを動かす](https://qiita.com/makaishi2/items/be4fc86135a694808138)
[CaboChaで始める係り受け解析](https://qiita.com/nezuq/items/f481f07fc0576b38e81d)
[macOS 10.15 CatalinaとXcode 11で/usr/includeが見つからない問題](https://qiita.com/imbsky/items/da709a514dded95b8575)
[root権限なしでCaboChaをインストールする．](https://qiita.com/namakemono/items/f6aa6043998a13323a86)