旧仮名キーボード開発史

旧仮名キーボードの開発にまつわる記録をまとめます。

開発史

時期 内容
R2の年末 かねて温めていたところの企画「旧字旧仮名で日本語入力できるスマホ用キーボード」を実現すべく、構想をまとめはじめる。名称を「旧仮名キーボード」と定める。
R3/1/2 漢字辞典は『新修漢和大字典』を典拠とすることに決定し、古本屋に注文(この本は国会図書館デジタルコレクションでも閲覧できるが、当時のデジタルライブラリは今のように使い勝手の良い閲覧画面ではなかったため、紙の辞書を使用した)。
R3/1/6 国語辞典は『辞苑』を典拠とすることに決定し、古本屋に注文。
R3/1/17 noteにて旧仮名キーボード開発記をスタート。
R3/1/24 採用する文法体系を検討するため、益岡田窪文法の資料として『基礎日本語文法』『24週日本語文法ツアー』を注文。
R3/1/26 形態素解析器としてMeCabを採用。また、MeCabとSwiftの連携のため、mecab-ioc-sampleを下敷きとして利用。その他、キーボード作成ノウハウに関する貴重な日本語資料として「iOSカスタムキーボードの作り方」「Swiftで日本語入力できるキーボードアプリを作った」などを参照。異体字セレクタ確認ツールとして「異体字セレクタセレクタ」を利用。
R3/5/24 キーボードの機能部分がほぼ完成し、辞書作成に着手。将来的な文語体対応を考慮した結果、益岡田窪文法ではなく橋本文法(あるいはそれによく似た品詞体系)を採用することにし、NAIST Japanese Dictionaryを下敷きとして採用。Google Apps Scriptにより、スプレッドシート上で動作する辞書更新支援ツールを何種類も自作し、辞書の書き換えを細々と続ける。なお、旧仮名キーボード開発記は、この日公開した#6を境に長期休載となる。
R4の年初 名詞以外の辞書の書き換えはほぼ完成したが、試行錯誤の過程で辞書仕様が再定義されたことにより、機能の追加開発(それに伴う大規模な修正)が発生。パフォーマンスを維持したまま各種機能を実現するため、MeCabのソースコードの改造を始める。しばらくアルゴリズムの読解に苦戦していたが、MeCab作者の著作『形態素解析の理論と実践』(非常に良書だった)を購入したのをきっかけに、MeCab改造が高速で進むようになる。
R4の中頃 MeCab改造が完了し、入力文字列の後ろを補う予測変換や濁点入力がなくても爆速で辞書引きできる機能に対応。名詞の辞書の書き換えに着手するも、その後長く作業が停滞する。
R5の春 作業再開。とりあえずアプリとしてまとめあげることを重視し、11月リリースを目指す計画を立てる。また、国会図書館デジタルコレクションが大改修され、非常に使い勝手が良くなったことに気付いた(特に画像内の文字をテキスト検索できる機能が付いたことに驚いた)ため、以後積極的に利用するようになる。
R5の夏 一般名詞の辞書については完成。固有名詞の書き換えは作業量的にリリース日に間に合わないので、9月末までに完成したところをもってリリース版とする方針に変更。地名の仮名遣いについては、国会図書館デジタルコレクションの『大日本地名辞書』を典拠とした。
R5の10月 細かい設定機能、UI、パフォーマンス、変換精度の改善に着手。ある時期からアプリが突然落ちるようになる。調査の結果、使用メモリが大きくなりすぎることが原因と判明し、キーに設定したSVG画像を削除したところ大幅に改善。そこで、平成23年に購入したWindows向けフォント作成ソフトTTEditにて自作フォントを作成し、それをSVG画像の代わりとして使用。さらに、全面的なリファクタリングを兼ねてソースコードのメモリ効率を改善し、50MB超だった使用メモリを16MBまで削減。これで10月の工数を使い切る。
R5/11/5 連休最終日に審査に申請完了するつもりだったが、10月の積み残し機能が消化しきれておらず、開発期限を1週間先に再設定。
R5/11/12 開発切り上げ。さまざまな機種のエミュレータで動作確認を実施。審査用のメタデータ作成開始。
R5/11/13 早朝7:50、期限切れになっていたApple Developer Programのメンバーシップを有効化。アプリのバイナリファイルをApp Store Connectにアップロードしようとしたが、「キーボード拡張で別のフレームワーク(MeCab)を使用している」という理由で失敗。MeCabのフォルダをキーボード拡張フォルダに移し替えようとするも、変な操作をしてしまい、MeCabのファイル一式を消してしまう。ゴミ箱から復元しようとしてもなぜかフォルダしか復元できず、中身のファイルがどこにも見当たらない。Gitにも改造版MeCabをコミットしていなかったので、完全にファイルが消えたことに気づく。ここで、仕事のため作業中断。帰宅後、どこかにファイルが残っていないかゴミ箱を探していたところ、「Mecab copy」というフォルダ(Mecabフォルダ移し替えのときに誤ってフォルダを二重に登録してしまい、すぐに消したもの)を発見し、中身にすべてのファイルが残存していることを確認。すぐにバックアップを取り、キーボード拡張フォルダに移し入れる。ところが、MeCab(C言語)とキーボード機能(Swift)のブリッジを作成して連携するとMeCab側にエラーが大量発生。エラーは、この日のうちには解決できなかった。
R5/11/14 試行錯誤の末、モグラ叩き式に問題部分をコメントアウトしていったところ、ついにエラーは出なくなった。動作も正常に見えたので、これをコンパイルしてApp Store Connectにアップロード。リリース日時を「R5/11/16 1:00JST以降」と設定し、審査に提出。提出後、アプリ内に公式サイトへのリンクを貼っていたことに気付く(以前、別のアプリの申請のときに外部リンクのトラッキング問題で不備を指摘され、却下されたことがある)。安全のために自分で申請を一時取り下げ、アプリ内のリンクを削除した上で再提出した。
R5/11/15 深夜1時以降、久しぶりに旧仮名キーボード開発記を更新しようと思い、noteに原稿を書き始める。記事執筆中の2:07に審査ステータスが「審査待ち」から「審査中」に切り替わる。審査結果を待ちながら、旧仮名キーボード開発記を2年6ヶ月ぶりに更新。その後、5:00に審査結果が「却下」として返却される。曰く、アプリ名のサブタイトルが「旧仮名使いで入力変換できる無料キーボード」となっているが「無料」という語が含まれるのは規約に反するとのこと。すぐに修正し、5:11に再提出。再審査は15:09から始まり、15:44に完了。結果は「合格」。ステータスが「審査中」から「リリース待ち」に変わる。リリース発表のためのnoteを執筆開始。
R5/11/16 深夜1:00、自動でリリース完了。リリースに寄せてのnoteを公開。疲れて寝る。また、その日の夜23:00頃、夕食を食べながら、2年5ヶ月ほど放置していたフォロワー数3人のTwitterアカウントを開き、noteのリンクを一応ツイート。ここで、公式Twitterアカウントを作成すべきことに気付き、大急ぎで作成。23:59に滑り込みで最初のツイートを公開するに至る。
R5/11/17 App Store上でのアプリの対応言語がなぜか「英語」になっていたのでアップデート。そのほか軽微な修正数件。
R5/11/18 11:22、公式Twitterアカウントのツイートが初めてのリツイートを受ける。おそらく、ここで旧仮名キーボードに初めて利用者が付く。App Store Connectによれば、この日に45人のユニークユーザがダウンロードしたことになっている。問合せ窓口から初めてメッセージを受ける(2人)。利用者からnote経由で初めてサポート(金銭的支援)を贈られる。
R5/11/19 App Storeにて旧仮名キーボードが初めて評価を受ける(星5つ)。ユニークユーザ数 50人突破。さらに、60人突破。
R5/11/21 ユニークユーザ数 70人突破。さらに、80人突破。
R5/11/25 ユニークユーザ数 90人突破。
R5/12/2 ユニークユーザ数 100人突破。
R6/1/22 ユニークユーザ数 200人突破。
R6/4/11 ユニークユーザ数 300人突破。
R6/4/18 文語モードを公開。従来の文法体系を抜本的に見直したほか、文語体と口語体とを1つのアプリに同居させたことにより、全体としての変換精度が劣化したおそれがある。しかし、新しい文法体系を構築するにあたっては、精度管理の容易性を重視したため、今後の変換精度改善作業は順調に進行することが可能。新しい文法体系においては、従来のIPA辞書等にみられたような各形態素単位で品詞を想定する方式を完全に廃止し、隣接する形態素との承接のみを考慮する方式を採用した(MeCabにおける左連接IDと右連接IDの仕様を最大限に活かした)。なお、今回のバージョンアップにおいては、文語体モードのほか、要望のあった機能をいくつか同時公開した(旧字新仮名モードの追加、空白文字の種類の設定など)。