狠狠撸

狠狠撸Share a Scribd company logo
颁补苍苍补をフォークしてみた 
はしもとまさ@東海道らぐ 
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のディレクトリ構造 
※各ディレクトリにImakefileが存在します。 
(ROOT) lib 
server 
cmd 
canna 
include 
dic 
misc 
クライアントやサーバーが使用する 
ライブラリ群 
Cannaサーバー 
Canna停止や辞書作成時に 
使用するコマンド群 
注:コマンド毎にディレクトリは別 
make時に「include」ディレクトリが作成され、 
各ディレクトリ内にあるヘッダファイルの 
シンボリックリンクが作成される。 
(ROOT) にあるCanna.confの内容と 
Imakefileの記述から 
Cannaconf.hを作成して、 
include内に置かれる 
共通ヘッダファイル置き場 
辞書 
設定ファイル等
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> 
「sys/un.h」がUNIXドメインソケットに 
#else 
必要なヘッダーファイル 
#include <sys/socket.h> 
#include <netinet/in.h> 
…とすると、「UNIXCONN」って何?? 
#include <netdb.h> 
#ifdef UNIXCONN 
#include <sys/un.h> 
#endif 
#ifdef HAVE_ARPA_INET_H 
#include <arpa/inet.h> 
#endif 
#endif 
案の定、「#define UNIXCONN」としてやるとビルドが通った???
仮説。 
恐らく「UNIXCONN」は、 
imake独自のコンパイルスイッチではなかろうか? 
…が、imakeは、 
「いまだに異常なほど文章化されていません。」 
そのため、すっかり藪の中なのであった。。。 
(ご存知な方、ご教授くださいm(_ _)m)
cmakeを使ったディレクトリ構成(予定) 
(ROOT) lib 
server 
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の作成 
● 来年以降: 
– 形態素解析部の修正(←これいつたどり着ける???)
ご清聴、ありがとうございました!

More Related Content

颁补苍苍补をフォークしてみた