MeCabをWindowsでポータブルに使えるようインストールする


# はじめに

これは個人的な思いなんですが、
いろんなソフトウェアを使うときにレジストリに設定が書き込まれて云々という、
インストーラー形式の導入方法はポータビリティが失われるので苦手です。

おそらく似たような思いを抱いている人もいると思うので、
今回はMeCabをローカルにインストールする方法を記載します。

（毎度のことながらもっといい方法あったら教えて下さい）

# 実現方法

Windows 10 64bitの環境でやっています。

## MeCab のダウンロード

まずは普通にMeCabのインストーラをダウンロードします → [ダウンロード](https://taku910.github.io/mecab/#download)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328319/ed086ffe-d3f6-f358-e354-21d46eb373d4.png)


## Universal Extractor のダウンロード

様々なアーカイブを展開できる、Universal Extractorをダウンロードします。

[Universal Extractor Download Archive](https://www.legroom.net/files/software/archive/)

私はインストーラーが嫌いなので（←）、「uniextract161_noinst.rar」をダウンロードしました。
ダウンロードしたrarファイルを展開すればスタンドアロンで起動する Universal Extractor が起動できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328319/ca7ccea3-15df-932a-48cb-180b7e365c41.png)

本家からフォークした「UniExtract2」というOSSもあるみたいですが、こちらは試していません。

https://github.com/Bioruebe/UniExtract2

## MeCab の展開

先程ダウンロードした uniextract を使用して、
MeCabのインストーラを展開します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328319/55d1222b-4266-b9fb-13c9-2557dca3c834.png)

上記のように、入力と宛先を指定して展開すると、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328319/a2da081a-4a48-8e40-ac29-5492569ec8c6.png)

上記フォルダのように展開されます。

`install_script.iss` をテキストエディタなどで参照すると、
インストーラがどういったことをやっているのかが大体わかって面白いです。

特に、89行目以降の

```text
[Registry]
Root: HKLM; Subkey: "software\MeCab"; ValueName: "mecabrc"; ValueType: String; ValueData: "{app}\etc\mecabrc"; Check: "IsAdmin"; Flags: uninsdeletekey 
Root: HKCU; Subkey: "software\MeCab"; ValueName: "mecabrc"; ValueType: String; ValueData: "{app}\etc\mecabrc"; Flags: uninsdeletekey 
```

は `mecabrc`(mecabの設定ファイル)の場所をレジストリに登録しているのでしょうか。興味深いですね。

## MeCab のコピー

展開したフォルダ内の `{app}` フォルダの中身をお好みの場所にコピーします。
私はWinPythonというものを使用しているので、WinPython展開フォルダの `t/MeCab` にコピーしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328319/95e531a9-d360-e411-a711-e34816ceeb82.png)

今後、`{installDir}` は `{app}` の中身をコピーした場所として説明をしていきます。適宜読み替えてください。


## 辞書の作成

次に、`install_script.iss` にある、

```
Filename: "{app}\bin\mecab-dict-index.exe"; Parameters: "-f SHIFT-JIS -t {code:GetCharCode}"; WorkingDir: "{app}\dic\ipadic"; 
```

と同様の内容をやっていきます。

しかし、その前に

```
Source: "{app}\bin\libmecab,2.dll"; DestDir: "{app}\bin"; DestName: "libmecab.dll"; 
```

の内容もやる必要があるので、
`{installDir}\bin\libmecab,2.dll` の名前を `{installDir}\bin\libmecab.dll` にリネームします。

そしてコマンドを以下の通り実行します。

```cmd
cd {installDir}\dic\ipadic
set PATH=%PATH%;%CD%\..\..\bin
mecab-dict-index -f SHIFT-JIS -t UTF-8
```

すると、`{installDir}\dic\ipadic` フォルダに

- matrix.bin
- sys.dic
- char.bin
- unk.dic

の4ファイルが生成されると思います。

（コマンド内の「UTF-8」は環境に応じて変更してください。コマンドプロンプトで使う場合は「SHIFT-JIS」がよいと思います。）

この状況で `mecab` コマンドを実行すると

```
param.cpp(69) [ifs] no such file or directory: c:\Program Files\mecab\etc\mecabrc
```

というエラーが出ると思います。
これは、`mecabrc` (mecabの設定ファイル)を読み込む先として、デフォルトでは「c:\Program Files\mecab\etc\mecabrc」が設定されていることに起因します。

## MECABRC の設定

ソースコードを読むと、
mecabrcの場所については環境変数 `MECABRC` を見ていることがわかりますので、 [該当箇所](https://github.com/taku910/mecab/blob/3a07c4eefaffb4e7a0690a7f4e5e0263d3ddb8a3/mecab/src/utils.cpp#L309)

```cmd
set MECABRC={installDir}\etc\mecabrc
```

とすることで参照先を変更することができます。
（`%HOME%\.mecabrc` を読むようにもなっていますので、そちらに `{installDir}\etc\mecabrc` の内容をコピーしてもよいでしょう。）

# 実行してみる

`PATH` と `MECABRC` が設定されている状態であれば、`mecab` コマンドを使用することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328319/c170c199-ddfe-d192-1744-3e97e92cc191.png)

以上で、導入完了になります。

# オマケ（WINPYTHON環境で自動で使えるようにする）

導入は完了したわけなんですが、いちいち `PATH` と `MECABRC` を設定するのも面倒なので、
WinPythonを立ち上げたときに自動で設定が行われるようにします。

（ほとんど、JuliaをWinPythonに導入するのと同じやり方です → [過去記事](https://qiita.com/yoh1496/items/7d7435655abfb0b1d084) ）

## 起動時の環境変数設定

`{winPython}/settings/winpython.ini` ファイルを編集し、
[environment]に `PATH` と `MECABRC` の行を追加します。

```text
[environment]
PATH=%PATH%;%WINPYDIR%\..\t\MeCab\bin
MECABRC=%WINPYDIR%\..\t\MeCab\etc\mecabrc
```

私は、`{winPython}\t\MeCab\` に MeCab をコピーしたので、上記のような設定になりました。

## WinPython Command Promptで使う

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328319/d926ad7f-0b75-dbcf-5e06-1cafb4fa2e1e.png)

コマンドプロンプトで使えるようになります（結果は割愛）。

## Jupyter Lab で使う

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328319/8d62051d-54d1-5616-7c99-422eded9011a.png)

JupyterLab でも当然使うことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328319/13b78504-8fa7-8f07-4ec3-ef6065babc51.png)

いいぞ。


# おわりに

「はじめに」にも書きましたが、私はインストーラー形式がすごく苦手です。

というより、WinPythonで色々使用できるように構築しておくと、
コピペでそのまま環境を移動できるようになるなど、非常に便利ですので、おすすめです。

dockerなどで開発環境が一発で整う昨今に、
「フォルダのコピペで環境が複製できる」というポータビリティの確保の仕方もどうかとは思いますがｗ

# 参考文献

- [MeCab: Yet Another Part-of-Speech and Morphological Analyzer](https://taku910.github.io/mecab/)
- [Universal Extractor | LegRoom.net](https://www.legroom.net/software/uniextract)
- [WinPython](https://winpython.github.io/)