IMEを自作し始めた理由
日本語入力は、毎日使う道具です。文章を書く、検索する、メールを送る、コードを書く、記事を直す。ほとんどの作業は、入力から始まります。
だからIMEの挙動が少し合わないだけでも、作業中の感覚は大きく変わります。変換候補がずれる、スペースの扱いが合わない、よく使う言葉が出ない。小さな違和感でも、毎日続くとかなり気になります。
自作IMEを作り始めた理由は、かな入力時にデフォルトのスペースを半角スペースにしたかったからです。きっかけはそれだけでした。
ただ、触り始めるとIMEは単なる変換機能ではありませんでした。入力モード、候補表示、変換履歴、学習、辞書、設定まで、日常の入力体験全体を支える仕組みでした。
CodexでTime IMEを作る
今回は、Codexを使ってmacOS向けの自作IMEを作りました。
IMEをmacOSに入力ソースとして認識させるには、bundle、設定ファイル、署名、登録場所を整える必要があります。ここを雑に触ると、普段の入力環境そのものに影響します。
そのため、開発用のbundle、本番用の登録、ロールバック用のバックアップ、検証用のコマンドを分けて進めました。Codexには、コードを書くことだけでなく、登録、確認、ログ確認、修正の流れも任せています。
最初から完成形を作ったわけではありません。入力できない、候補が出ない、候補順位がおかしい、矢印キーが入力欄側へ抜ける。こうした問題をひとつずつ潰しながら進めました。
IMEはデータなしでは育たない
IMEを作って強く感じたのは、IMEはコードだけでは成り立たないということです。
辞書、履歴、学習、予測、抑制語彙、ユーザー設定。こうしたデータがあって、はじめて自分の入力に合うIMEになります。変換エンジンだけ作っても、日常の入力で使いやすくなるわけではありません。
ただし、何でも学習させればよいわけでもありません。文章から抽出した語彙をそのまま候補に入れると、文中の一部だけが単語扱いされたり、読みが怪しい語が混ざったりします。
便利なIMEにしたいなら、学習候補をいったん隔離し、使えるものだけ候補へ昇格させる設計が必要です。学習するIMEは便利ですが、勝手に汚れるIMEは使いにくい。ここはかなり重要でした。
デバッグWindowを作った
IMEの難しいところは、通常のアプリよりもテストしづらいことです。
普通のアプリなら、画面を開いてボタンを押せば確認できます。しかしIMEは、入力先のアプリ、入力モード、キーイベント、候補Window、確定処理が絡みます。コード上では候補が作れていても、実際の入力では動かないことがあります。
そこで、Time IMEではデバッグ用のWindowを作りました。実際に文章を入力しながら、候補表示や変換結果を確認できるようにするためです。
さらに、指定した文章を1文字ずつ入力し、候補表示をスクリーンショットとして保存し、変換結果をログに残す仕組みも作りました。ここまで用意すると、Codexに修正を頼むときも、何が起きているのかを具体的に渡せます。
実入力のSpace経路を通す
途中で特に重要だったのが、変換テストを必ず実入力のSpace経路に通すことでした。
内部関数を呼んで、読みから候補が返ることを確認するだけでは不十分です。候補は存在するのにSpaceを押すと半角スペースが入る。候補Windowには出ているのに確定できない。こうした問題は、実際のキー入力に近い経路を通さないと見つかりません。
Time IMEでは、候補生成だけでなく、Space確定、入力先への反映、スクリーンショット確認、変換履歴の記録まで見るようにしました。
この段階まで来ると、Codexは単にコードを書く相手ではありません。実際の入力操作に近い経路を通して、IMEの挙動を検証する作業者にもなります。
AIエージェントで仕事道具そのものを作る
今回の実験で面白かったのは、Codexがアプリを作るだけでなく、普段使う作業環境そのものを作り替えるところまで入ってきたことです。
IMEは、かなり日常に近い道具です。ブラウザやエディタよりもさらに手前にあります。その入力基盤を、AIエージェントと一緒に作り、設定し、デバッグし、学習させるところまで進められました。
これは、AIで文章を書く話とは少し違います。AIに作業を任せるだけではなく、AIと一緒に自分の作業環境そのものを作り替える話です。
Codexで自作IMEを作ってみると、AIエージェントの使い方が変わって見えます。コードを書かせるだけではなく、検証環境を作らせ、ログを残させ、改善サイクルを回させる。AIは開発環境の中にいる作業者に近くなります。
まとめ
Codexを使って、macOS向けのTime IMEを作りました。
入力ソースとして認識させ、かな / 英数の切り替え、変換候補、Space確定、設定、学習、デバッグWindow、自動入力テストまで進めました。もちろん、まだ完成ではありません。候補順位や語彙の品質は、実際に使いながら調整する必要があります。
それでも、AIエージェントで日常の入力環境まで自作し、デバッグまである程度自動化できる手応えはありました。
AI活用の範囲は、文章生成やコード生成だけではありません。毎日使う仕事道具そのものを、自分の作業に合わせて育てる。その相手としてCodexを使うことが、かなり現実的になってきています。
