cannaをフォークしてみた
DESCRIPTION
Cannaをフォークして、Izumoという日本語入力システムを開発中です。TRANSCRIPT
Cannaをフォークしてみた
はしもとまさ@東海道らぐIn OSC 2014 Tokyo/Fall
2014/10/18
今回のお話。
● Cannaをフォークしてみました!
● Cannaとは・・・?
– 元はNECが作成していた日本語変換システム。
– その後、Canna Projectが開発を引き継いだ。
– …が、2004/5/20を最後にリリースされていない。
– サーバー&クライアント型。MITライセンス。
CannaからIzumoへ
● 日本語変換システム「Izumo」– https://github.com/hashimom/Izumo– よく聞かれるのが、「なぜいずも?」
● とりあえず、Cannaを漢字にしてみよう!
余談)島根県では神無月ではなく神在月と呼ばれるらしい
● 主な変更点: 現状、特になし!(おいっ)– クライアントライブラリ、ツール群をざくっと削除してシンプルに– ビルド方法を変更(中) ※後述– 辞書ファイルの見直し(近日中)
とりあえずgithubへ…
● おーぷんここんに取り込まれる??? …が!?
異議なし!(笑)
imakeって?
● 「xmkmf」ってコマンドを叩くと、Imakefileの記述から、Makefileを作成します。
● X Window SystemのX11R6.9(2005年)まではimakeを利用してビルドされていました。– なので、imakeのことを調べるとそっち系のものばかり引っかかります。
● 例) Cannaのビルド方法:
$ xmkmf$ make canna
imakeの欠点
「解説書:非常に広く使用されているツールとしては、imakeはいまだに異常なほど文章化されていません。
(中略)
多くのプログラマがimakeのさまざまな部分と取り組んできましたが、X Windowシステムの配布のために用意している風変わりな機能から汎用的な部分を抜き出してツールとして分割することは誰もできませんでした。」
オライリー「make 改訂版」(2005年)より
いろいろダメぽい・・・^^;
Cannaのディレクトリ構造
server
(ROOT) lib
canna
cmd
dic
misc
include
※各ディレクトリにImakefileが存在します。
make時に「include」ディレクトリが作成され、各ディレクトリ内にあるヘッダファイルの
シンボリックリンクが作成される。
(ROOT) にあるCanna.confの内容とImakefileの記述から
Cannaconf.hを作成して、include内に置かれる
共通ヘッダファイル置き場
Canna停止や辞書作成時に使用するコマンド群
注:コマンド毎にディレクトリは別
Cannaサーバー
クライアントやサーバーが使用するライブラリ群
辞書
設定ファイル等
imakeを置き換えてみよう!
代替案は・・・– Autotools
– Cmake
好き嫌いありそうですね・・・。
Autotoolsってどうさ!?
● Linuxでは定番ですよね!– ビルド方法:
$ ./configure
$ make
● 各ディレクトリにmakefile.acを置く必要があるが、Canna.confみたいなものは必要なさそう!
※CannaのImakefileは全てCanna.confを参照していますorz
でもMacとかでも動くようにしたいな〜
● 最近のMac(Xcode)には、Autotoolsが削除されてる!?
– Xcode 4.3から入ってないらしいですね。
(Mac持ってないので知らんのだけど…)
● 一応Autotoolsを使えるようではあるけどなんだかめんどくさそうですね〜・・・
(注:よくわかっていませんw)
というわけでcmakeを使ってみる
● imakeとは別物なのね・・・^^;– 実はごちゃ混ぜになって同一だと思ってたらしい(笑)
● へぇ〜GUIでもビルドできるのか!
● VisualStudioのプロジェクトファイルも作成可能!?● ディストリビューションのパッケージングも可能!??
● …と、調べていくうちにどんどん使ってみたくなりましたとさ。
見様見真似でCmake
● CMakeLists.txtを作成して、下記コマンドでビルドします。
$ cmake .
$ make
● …が、なぜかビルドエラー!??
– UNIXドメインソケット関連のライブラリを呼び出す箇所でビルドエラーが起きてるみたい。。。
– CmakeList.txtは問題無さそうなのになぜ???
問題はここ!??
net.hを見ると見覚えのないコンパイルスイッチが!?#if defined(nec_ews_svr2) || defined(pcux)#include <sys/types.h>#include <net/socket.h>#include <net/in.h>#include <net/netdb.h>#include <net/un.h>#else#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h>#ifdef UNIXCONN#include <sys/un.h>#endif#ifdef HAVE_ARPA_INET_H#include <arpa/inet.h>#endif#endif
「sys/un.h」がUNIXドメインソケットに必要なヘッダーファイル
…とすると、「UNIXCONN」って何??
案の定、「#define UNIXCONN」としてやるとビルドが通った・・・
仮説。
恐らく「UNIXCONN」は、imake独自のコンパイルスイッチではなかろうか?
…が、imakeは、
「いまだに異常なほど文章化されていません。」
そのため、すっかり藪の中なのであった。。。
(ご存知な方、ご教授くださいm(_ _)m)
cmakeを使ったディレクトリ構成(予定)
server
(ROOT) lib
include
dic
misc
(ROOT) 一箇所にのみCMakeLists.txtを配置する。
Izumoサーバー
クライアントやサーバーが使用するライブラリ群
辞書と辞書を作成するツール群
設定ファイル等
いっそヘッダーファイルは全てここに置いてしまってもいい
シンボリックリンクも不要
廃止ディレクトリ:● cmd: コマンド廃止 & dicへ移動● canna: includeへ移動
IzumoのCMakeLists.txt
…は、近日中に公開!
githubに見に行ってください。
– https://github.com/hashimom/Izumo
今後のIzumoの予定
● 11月: 〜関西オープンフォーラム
– cmake対応– 辞書ファイルの拡張
● 12月: 〜東海道らぐ名古屋オフ?– クライアントライブラリの作成– ibus-izumoの作成
● 来年以降:– 形態素解析部の修正(←これいつたどり着ける???)
ご清聴、ありがとうございました!