ICU とは Unicode 関連の処理をまとめたクロスプラットフォームでポータブルな、そして実績があり MITライセンス と組み込みにやさしいライブラリである。
ICU の変換や正規化などに使われるリソースデータは 20MB と大きく、再配布するアプリケーションには大きな足かせとなる。これを削減したい場合はどうすればよいだろうか?
答えは公式の FAQ にのっている。これに基づいて削減してみよう。
http://userguide.icu-project.org/icufaq#TOC-How-can-I-reduce-the-size-of-the-ICU-data-library-
1. ICU Data Customizer を使う
ICU Data Customizer は ICU で使われる変換テーブル、正規化ルールなどを必要に応じてカスタマイズし、データを生成してダウンロードできる便利なサービスである。
http://apps.icu-project.org/datacustom/
バージョン毎に異なるので、古い ICU のバージョンを使っている場合はそれに対応するものを使う必要がある。例えば ICU 49 なら以下を使う。
http://apps.icu-project.org/datacustom/ICUData49.html
デフォルトでは圧縮なしで約 20MB あることがわかる。ここでは ShiftJIS <=> UTF-8 の変換だけ行うというニーズをやってみる。
The estimated uncompressed size of this data library is 19195 KB
まず変換テーブル (Charset Mapping Tables) だけ残し、残りのチェックを外す。これだけでなんと約 25% になる。
The estimated uncompressed size of this data library is 4696 KB
つぎに一旦変換テーブルのチェックを外し、ShiftJIS 関連にチェックを入れる(もしかしたら ibm-943_P15A-2003 だけでよいかもしれない)。
- ibm-942_P12A-1999.cnv
- ibm-943_P130-1999.cnv
- ibm-943_P15A-2003.cnv
- ibm-5039_P11A-1998.cnv
すると 500KB 程になり、元の約 20MB に比べると約 40 倍の差が出た。これで "Get Data Library" ボタンをクリックするとダウンロードできるようになる。
The estimated uncompressed size of this data library is 503 KB
ちなみに一度ダウンロードすると 410 で再ダウンロードは出来ないので、再ダウンロードしたい場合はもう一回 "Get Data Library" で再生成しておく必要がある。また、UTF-8/UTF-16 はコアにバンドルされているため問題ない。
2. ファイルを置換してビルドする
その前に置換前の icudata ライブラリを確認してみよう。ダウンロードしてすぐ ../source/runConfigureICU MacOSX
した場合はサイズは約 20MB あることがある。
-rwxr-xr-x 1 hkrn staff 20787296 libicudata.50.1.dylib
話に戻って入手したデータは ICU のソースコード中の icu/data/source/data/in/icudt[xx]l.dat ([xx] は ICU のバージョン) と置換し、もう一度ビルドする。そしてサイズを確認すると 520KB 程度になっていることがわかる。
-rwxr-xr-x 1 hkrn staff 520288 11 17 libicudata.50.1.dylib
文字コードを変換するだけなら通常 icuuc と先ほどの icudata のみでよく、必要に応じて icui18n をリンクする。前者の場合静的リンクしても 2MB 程度になり、小型化を図ることが出来る。