辞書共有サービスの進捗
辞書共有サービスの開発に着手して随分時間が立つので、そろそろ最近の状況についてお知らせします。
今回開発しているのは、大きく四つの部分に分かれます。
- 辞書共有サービス本体(google app engine)
- 同期クライアント(python)
- AquaSKK 用アダプタ
- Emacs 用アダプタ
1. 辞書共有サービス本体
今のところ、以下の機能を実装しています。
- トップページ
- 接続トークンのダウンロード・再発行
- ユーザー辞書の初期登録
- cron ジョブ
- 同期クライアント向け Web サービス(登録、取得)
基本的に app engine は辞書データを蓄積するのが目的なので、華美な見た目もなく、ひたすらシンプルな感じです。今の問題点は辞書の初期登録処理に時間がかかりすぎることです。
ローカル環境で試しただけですが、3,600 エントリ程度で 8 分前後かかります。なので、辞書ファイルを一旦アップロードした後、別途 cron で登録処理を走らせるという二段階の仕組みになっています。
本番環境でもパフォーマンスが悪いようなら、初期登録の方法そのものを根本的に考え直す必要が出てくるかもしれません。タスクを細分化するなどして CPU 使用時間を平均化しないと、制限に引っかかるような気がします。
2. 同期クライアント
実装はほぼ完了しています。
- 各種 SKK 実装向けのインタフェース(検索、補完、登録、削除)
- 辞書共有サービスとの連携
SKK 実装にインタフェースを提供しつつ、非同期で辞書共有サービスと連携します。ローカルのデータは SQLite で保持します。SQLite をまともに使うのは今回が初めてだったのですが、セットアップは簡単だしパフォーマンスも良いしで、好印象を持っています。素晴しい世の中になったものです。しみじみ。
3. AquaSKK 用アダプタ
AquaSKK と同期クライアントを橋渡しする部分です。AquaSKK 内部ではユーザー辞書のように振舞います。基本的なやりとりは実装済みなので、あとはユーザー辞書と切り替えできるようにする程度ですね。
4. Emacs 用アダプタ
ddskk と同期クライアントの通信に必要になります。未着手です。ddskk のユーザー辞書と切り替え可能な方向で行くのか、フックとして補助的な感じで行くのか、決めかねています。
まとめ
充実したライブラリと SQLite のおかげで、コードは単純になっているし、初期登録を除けば、まあ順調だと思います。python の流儀もだいぶ飲み込めてきました。他の言語との概念的な共通点が多いので、言い回しに慣れれば、それほど苦労しないかなと。あと、SocketServer.ThreadingTCPServer のような部品もあるので、一通りドキュメントに目を通しておくことが大事ですね。
進捗が悪いのは、気が向いた時だけ作業する、という最近のスタイルのせいです。毎日必ず時間を取るようにすれば改善されるんでしょうけど、人生というのは、ままならないものなのですからね ;-) 母の病気以降、思うところがあり、時間の使い方については試行錯誤が続いています。
なお、辞書共有サービスをリリースする時には、AquaSKK に同期クライアントを同梱するつもりです。当然、AquaSKK 内部から同期クライアントも起動できるようにし、手間を軽減したいです。
なんとか、今年中にリリースできればいいなと思っています。