日本語文字をローマ字に変換するpykakasiモジュールのインストールと利用について

# やりたいこと
[`pykakasi`](https://github.com/miurahr/pykakasi)を利用して、
日本語文字をローマ字に変換できるようにする

# モチベーション
別のスクリプトで`Flask`を用いてファイルアップロードするものを書いているんですが、
そのスクリプトで`from werkzeug import secure_filename` を下記のように使っています。

`filename = secure_filename(filepath)`

このとき、`filepath`が`ほげ.jpg`などの日本語の場合、日本語の文字が除去されてしまって、`jpg`になってしまった...
それでは困るので、解決案として日本語のファイル名があったときに、ローマ字に変換すればよいのではと思い調査したところ、`pykakasi`というモジュールでできそうだった。

早速pipでインストールして利用しようとすると、少しだけはまったので、備忘も兼ねて記載


# `pykakasi`のインストールと利用
## インストールについて
`python + pyenv-virtualenv`の環境
`pip install pykakasi`では、変換用の辞書がどうやら見つからずエラーになった。

[漢字をローマ字に変換できるPythonライブラリ "pykakasi" を使ってみた。](https://qiita.com/almichest/items/52f871ee22e4a44346d4)の記事のコメントを参考にインストールしたら問題なく解決！

```bash
$ pip install git+https://github.com/miurahr/pykakasi
```

## 利用について
### python2.7系統
python2系で利用していたので早速、利用

```py2
# coding: utf-8
from pykakasi import kakasi

kakasi = kakasi()

kakasi.setMode('H', 'a')
kakasi.setMode('K', 'a')
kakasi.setMode('J', 'a')

conv = kakasi.getConverter()

filename = '本日は晴天なり.jpg'

print(conv.do(filename))　# 本日は晴天なり.jpg
``` 

で、`print`した結果、`本日は晴天なり.jpg`となった。あれ？

で、さらに調べてみると、[pykakasiインストール後に変換できない　mac raspberry pi](http://muu.in.net/pykakasi%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E5%BE%8C%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%80%80mac-raspberry-pi/) にて、文字列が`unicode`でないと変換できないとのこと！

というわけで、修正して試した。

```py2
#!/usr/bin/env python2
# coding: utf-8
from pykakasi import kakasi

kakasi = kakasi()

kakasi.setMode('H', 'a')
kakasi.setMode('K', 'a')
kakasi.setMode('J', 'a')

conv = kakasi.getConverter()

filename = '本日は晴天なり.jpg'


print(type(filename))

print(conv.do(filename))

print(type(filename.decode('utf-8')))
print(conv.do(filename.decode('utf-8')))
```

出力結果

```
<type 'str'>
本日は晴天なり.jpg
<type 'unicode'>
honjitsuhaseitennari.jpg
```

おお、できた！python2では、文字はstr型とunicode型があって、特になにもしないと`str`型になってしまうので、`decode`しないといけなかった。
ということは、`__future__`モジュールの`unicode_literals`を用いればdecodeしなくてもよいんじゃ？ということで試してみた。

```py2
#!/usr/bin/env python2
# coding: utf-8
from __future__ import division, unicode_literals
from pykakasi import kakasi

kakasi = kakasi()

kakasi.setMode('H', 'a')
kakasi.setMode('K', 'a')
kakasi.setMode('J', 'a')

conv = kakasi.getConverter()

filename = '本日は晴天なり.jpg'


print(type(filename))

print(conv.do(filename)
```

出力結果

```
<type 'unicode'>
honjitsuhaseitennari.jpg
```

やっぱり。2系統書くときはちゃんと`__future__`モジュール使うべきですね。

### python3系統
python3では、日本語文字は全てunicodeで扱われるので、特にdecodeせずともいけるじゃないかという推測の元試してみた。

```py3
#!/usr/bin/env python3
# coding: utf-8
from pykakasi import kakasi

kakasi = kakasi()

kakasi.setMode('H', 'a')
kakasi.setMode('K', 'a')
kakasi.setMode('J', 'a')

conv = kakasi.getConverter()

filename = '本日は晴天なり.jpg'

print(type(filename))
print(conv.do(filename))
```

出力結果

```
<class 'str'>
honjitsuhaseitennari.jpg
```

やっぱり！

# 参考

- [漢字をローマ字に変換できるPythonライブラリ "pykakasi" を使ってみた。](https://qiita.com/almichest/items/52f871ee22e4a44346d4)

- [pykakasiインストール後に変換できない　mac raspberry pi](http://muu.in.net/pykakasi%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E5%BE%8C%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%80%80mac-raspberry-pi/)