⌨
日本語入力システムSumibiの開発 part11: モードレスなMozc
はじめに
OpenAIなどのリモートAPIに接続できない環境でも「Sumibi」を使えるようにMozcをバックエンドの変換エンジンとして利用できるようにしました。Sumibi Ver3.3で細かい問題は解消できました。Emacsでmozc.elを使っている皆さんは、一度Sumibiも試していただければ幸いです。
Sumibiの最大の特徴は、従来のIMEのような「日本語入力モード」と「英語入力モード」の切り替えが不要な点です。このモードレスなインターフェースデザインにより、他のIMEには無い快適さを実現しています。
モードレス設計の仕組み
トリガーベースの変換
通常のIMEでは、日本語を入力する前にIMEをオンにし、英語を入力する前にオフにする必要があります。Sumibiでは、この煩わしさを解消するため、以下のような動作をします:
- 常に直接入力状態:普段は英数字をそのまま入力
-
Ctrl-Jで変換:日本語に変換したい部分を入力後、
Ctrl-Jを押すだけ - 自動的な範囲判定:カーソル位置から前方に向かって、変換すべきローマ字の範囲を自動認識
例えば、以下のようなPythonのコメントを書く場合:
def calculate_total(items):
# itemsのgoukei wo keisan← ここでCtrl-J
# itemsの合計を計算
return sum(items)
goukei wo keisanと入力した後、Ctrl-Jを押すだけで「合計を計算」に変換されます。IMEのオン・オフを意識する必要がありません。
インテリジェントな境界認識
Sumibiは、プログラミングでよく使われる記号((){}[]<>など)を境界として認識します。これにより、コード内で日本語を使う際も、意図しない範囲まで変換されることがありません:
console.log("kekka: " + result); // kekkaha← Ctrl-J
console.log("kekka: " + result); // 結果は
括弧や引用符があっても、適切な範囲だけが変換対象になります。
実際の利用シーン
プログラミング中のコメント記述
# yu-za- no denwa
# ↓ Ctrl-J
# ユーザーの電話
# ↓ 続けて入力
# ユーザーの電話bangou wo kensaku
# ↓ Ctrl-J
# ユーザーの電話番号を検索
モード切り替えなしで、英語と日本語を自然に混在させながら記述できます。
チャットやコミュニケーション
@john Thanks for your help! /tasukarimasita ← Ctrl-J
@john Thanks for your help! 助かりました
日本語変換の範囲を明示したい場合は、'/' でガードします。 '/' よりも前は参照しません。
モードレスならではの利点
- 思考の流れを妨げない:モード切り替えのための認知的負荷がなく、書きたいことに集中できる
- タイプミスの削減:「IMEがオンのまま英語を打ってしまった」というミスがない
- 一貫した操作性:どのバッファでも、どの状況でも、同じ操作で日本語入力が可能
- 部分的な変換:文章の一部だけを選択して変換することも可能(リージョン選択 + Ctrl-J)
最後に
いかがでしたでしょうか。
Emacsを主戦場としている人は、モードレスの感覚を一度味わってみてください。
Discussion