cannaをフォークしてみた

18

Click here to load reader

Upload: masahiko-hashimoto

Post on 04-Jul-2015

185 views

Category:

Technology


1 download

DESCRIPTION

Cannaをフォークして、Izumoという日本語入力システムを開発中です。

TRANSCRIPT

Page 1: Cannaをフォークしてみた

Cannaをフォークしてみた

はしもとまさ@東海道らぐIn OSC 2014 Tokyo/Fall

2014/10/18

Page 2: Cannaをフォークしてみた

今回のお話。

● Cannaをフォークしてみました!

● Cannaとは・・・?

– 元はNECが作成していた日本語変換システム。

– その後、Canna Projectが開発を引き継いだ。

– …が、2004/5/20を最後にリリースされていない。

– サーバー&クライアント型。MITライセンス。

Page 3: Cannaをフォークしてみた

CannaからIzumoへ

● 日本語変換システム「Izumo」– https://github.com/hashimom/Izumo– よく聞かれるのが、「なぜいずも?」

● とりあえず、Cannaを漢字にしてみよう!

余談)島根県では神無月ではなく神在月と呼ばれるらしい

● 主な変更点: 現状、特になし!(おいっ)– クライアントライブラリ、ツール群をざくっと削除してシンプルに– ビルド方法を変更(中) ※後述– 辞書ファイルの見直し(近日中)

Page 4: Cannaをフォークしてみた

とりあえずgithubへ…

● おーぷんここんに取り込まれる??? …が!?

異議なし!(笑)

Page 5: Cannaをフォークしてみた

imakeって?

● 「xmkmf」ってコマンドを叩くと、Imakefileの記述から、Makefileを作成します。

● X Window SystemのX11R6.9(2005年)まではimakeを利用してビルドされていました。– なので、imakeのことを調べるとそっち系のものばかり引っかかります。

● 例) Cannaのビルド方法:

$ xmkmf$ make canna

Page 6: Cannaをフォークしてみた

imakeの欠点

「解説書:非常に広く使用されているツールとしては、imakeはいまだに異常なほど文章化されていません。

 (中略)

多くのプログラマがimakeのさまざまな部分と取り組んできましたが、X Windowシステムの配布のために用意している風変わりな機能から汎用的な部分を抜き出してツールとして分割することは誰もできませんでした。」

オライリー「make 改訂版」(2005年)より

いろいろダメぽい・・・^^;

Page 7: Cannaをフォークしてみた

Cannaのディレクトリ構造

server

(ROOT) lib

canna

cmd

dic

misc

include

※各ディレクトリにImakefileが存在します。

make時に「include」ディレクトリが作成され、各ディレクトリ内にあるヘッダファイルの

シンボリックリンクが作成される。

(ROOT) にあるCanna.confの内容とImakefileの記述から

Cannaconf.hを作成して、include内に置かれる

共通ヘッダファイル置き場

Canna停止や辞書作成時に使用するコマンド群

注:コマンド毎にディレクトリは別

Cannaサーバー

クライアントやサーバーが使用するライブラリ群

辞書

設定ファイル等

Page 8: Cannaをフォークしてみた

imakeを置き換えてみよう!

代替案は・・・– Autotools

– Cmake

好き嫌いありそうですね・・・。

Page 9: Cannaをフォークしてみた

Autotoolsってどうさ!?

● Linuxでは定番ですよね!– ビルド方法:

$ ./configure

$ make

● 各ディレクトリにmakefile.acを置く必要があるが、Canna.confみたいなものは必要なさそう!

※CannaのImakefileは全てCanna.confを参照していますorz

Page 10: Cannaをフォークしてみた

でもMacとかでも動くようにしたいな〜

● 最近のMac(Xcode)には、Autotoolsが削除されてる!?

– Xcode 4.3から入ってないらしいですね。

(Mac持ってないので知らんのだけど…)

● 一応Autotoolsを使えるようではあるけどなんだかめんどくさそうですね〜・・・

(注:よくわかっていませんw)

Page 11: Cannaをフォークしてみた

というわけでcmakeを使ってみる

● imakeとは別物なのね・・・^^;– 実はごちゃ混ぜになって同一だと思ってたらしい(笑)

● へぇ〜GUIでもビルドできるのか!

● VisualStudioのプロジェクトファイルも作成可能!?● ディストリビューションのパッケージングも可能!??

● …と、調べていくうちにどんどん使ってみたくなりましたとさ。

Page 12: Cannaをフォークしてみた

見様見真似でCmake

● CMakeLists.txtを作成して、下記コマンドでビルドします。

$ cmake .

$ make

● …が、なぜかビルドエラー!??

– UNIXドメインソケット関連のライブラリを呼び出す箇所でビルドエラーが起きてるみたい。。。

– CmakeList.txtは問題無さそうなのになぜ???

Page 13: Cannaをフォークしてみた

問題はここ!??

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」としてやるとビルドが通った・・・

Page 14: Cannaをフォークしてみた

仮説。

恐らく「UNIXCONN」は、imake独自のコンパイルスイッチではなかろうか?

…が、imakeは、

「いまだに異常なほど文章化されていません。」

そのため、すっかり藪の中なのであった。。。

(ご存知な方、ご教授くださいm(_ _)m)

Page 15: Cannaをフォークしてみた

cmakeを使ったディレクトリ構成(予定)

server

(ROOT) lib

include

dic

misc

(ROOT) 一箇所にのみCMakeLists.txtを配置する。

Izumoサーバー

クライアントやサーバーが使用するライブラリ群

辞書と辞書を作成するツール群

設定ファイル等

いっそヘッダーファイルは全てここに置いてしまってもいい

シンボリックリンクも不要

廃止ディレクトリ:● cmd: コマンド廃止 & dicへ移動● canna: includeへ移動

Page 16: Cannaをフォークしてみた

IzumoのCMakeLists.txt

…は、近日中に公開!

githubに見に行ってください。

– https://github.com/hashimom/Izumo

Page 17: Cannaをフォークしてみた

今後のIzumoの予定

● 11月: 〜関西オープンフォーラム

– cmake対応– 辞書ファイルの拡張

● 12月: 〜東海道らぐ名古屋オフ?– クライアントライブラリの作成– ibus-izumoの作成

● 来年以降:– 形態素解析部の修正(←これいつたどり着ける???)

Page 18: Cannaをフォークしてみた

ご清聴、ありがとうございました!