[MacOS] 日本語の変換と間違えて、Enterで文章が送信される問題を解決する
はじめに
Sally 株式会社で CTO をしている @aitaro です。マーダーミステリーアプリの「ウズ」や「マダミス.jp」を開発しています。
欧米発のチャットツールや Web サービスを使っていて、日本語を変換しようと Enter キーを押した瞬間にメッセージが送信されてしまう経験はないでしょうか。私自身、長年この問題に悩まされ、最近では Claude Code でも同じ問題が発生して困っていました。本記事では、この問題の根本的な解決策として、キーマッピングの見直しを提案します。
なぜこの問題が起きるのか
日本語 IME では、Enter キーは「変換候補を確定する」という役割を持ちます。一方、欧米では文章を書くときに Enter キーを押すことはないため、欧米のサービスでは利便性のため Enter キーに「送信」という機能が割り当てられているのが一般的です。
この設計思想の違いにより、欧米系サービスでは 2 つのパターンの問題が発生します。
パターン 1:変換確定と同時に送信される
サービス側のキーボードショートカット実装に問題があるケースです。日本語入力がほぼ不可能になります。Claude Code(2.0.0〜2.0.4)や Gemini in Gmail のメール下書き機能などで発生していました。
パターン 2:変換確定時は送信されないが、確定済みの状態で Enter を押すと送信される
欧米系サービスで最も多いパターンです。入力中の文章が変換前なのか確定済みなのかモードを常に意識する必要があります。Claude Code(2.0.5 以降)、Claude Desktop、Discord、Messenger などがこのパターンです。
最近話題になった、Claude Code の v2 リリースでは、リリース直後はパターン 1 に該当し、IME 変換の issue に多くの reaction が集まっていました(anthropics/claude-code#8405)。 現在では修正され、パターン 2 になりましたが、以前としてモードを意識して使わなければならないのは体験が悪いと思います。
日本のサービスでは、この違いを理解して送信を Shift+Enter に割り当てるなど配慮していることが多いです。しかし、日本人ユーザーが開発者の周りにいなければ、この問題に気づくことは困難です。
解決策の方針
ヒューマンインターフェースの原則では、UI は基本的にモードレスであるべきとされています。入力中の文章が変換前なのか確定済みなのかを常に意識しなければならない現状は、非直感的で使いづらい状態です。しかし、一方で、日本語(や IME を必要とする言語)を知らないサービス開発者にはこの問題が見えないため、新しいサービスが生まれるたびに構造的に発生し続けます。
毎回サービス開発者に連絡するよりも、ユーザー自身の日本語入力環境をモードレスに近づける方が現実的です。Enter キーの挙動がモードによって変わるのが根本原因なので、IME の確定キーを別のキーに割り当てることで解決できます。
以下、私が試したいくつかのアイデアを紹介します。
アイデア 1: スペースキー
US 配列のキーボードでは、スペースキーが最も大きく押しやすいキーです。欧米の言語でスペースを押す頻度と、日本語で確定キーを押す頻度は同程度なので、スペースキーに割り当てるのは理にかなっているように見えます。
しかし、実際に試してみると誤操作でスペースが頻繁に入力されてしまいました。タイピング中に手がスペースキーに触れることが多く、使いづらかったため却下しました。
アイデア 2: コマンドキー
次にコマンドキーを試しました。タイピング速度が速い場合に問題が発生します。
「コマンドキーで確定 → ワ行を打つ」という動作で、コマンドキーが離れる前に W キーが入力されてしまい、ウィンドウが閉じてしまうことがありました。これもストレスフルだったため、お勧めできません。
アイデア 3: 英かなキー
JIS 配列のキーボードには、スペースキーの両サイドに「英数」「かな」キーがあります。これらのキーは押してもモードが切り替わるだけで副作用が小さく、親指で押しやすい位置にあるという利点があります。
私は US 配列を使っているため試していませんが、JIS 配列の方は採用する価値があるかもしれません。
アイデア 4: 右シフトキー(本命)
US 配列を使っている方には、右シフトキーが本命です。私はこの設定で落ち着いています。
右シフトキーを選んだ理由は、日本語入力中はシフトキーが基本的に不要だからです。日本語の文中に英単語を入れたい場合は、一旦確定してから入力するのが一般的です。また、Enter キーの下にあるため、Enter キーを押す感覚から大きく外れないのも利点です。
この設定にしてから、意図しない送信がなくなり、快適に作業できるようになりました。
設定方法
Karabiner-Elements という macOS 用のキーボードカスタマイズツールを使って、右シフトキーを IME 確定キー(Ctrl+M)に割り当てます。Karabiner-Elements は、macOS でキーの入れ替えや複雑なキーマッピングを実現できる無料のオープンソースソフトウェアです。
まず、Karabiner-Elementsをインストールしていない場合はインストールします。
brew install --cask karabiner-elements
次に、Karabiner-Elements を起動して、Complex Modifications
> Add your own rule
から以下のルールを追加します。
{
"description": "右Shift 単押しで Ctrl+M(日本語入力中のみ)",
"manipulators": [
{
"conditions": [
{
"input_sources": [{ "language": "^ja$" }],
"type": "input_source_if"
}
],
"from": {
"key_code": "right_shift",
"modifiers": { "optional": ["any"] }
},
"to": [{ "key_code": "right_shift" }],
"to_if_alone": [
{
"key_code": "m",
"modifiers": ["control"],
"repeat": false
}
],
"type": "basic"
}
]
}
この設定により、日本語入力中に右シフトキーを単押しすると、Ctrl+M(確定)が送信されます。また、他のキーと組み合わせて使う場合や英語入力中は、通常の右シフトキーとして機能します。私の場合は Enter キーと近く、押し慣れているため右シフトキーを割り当てましたが、好みに合わせて左シフトキーを利用しても良いと思います。
設定を追加したら、Karabiner-Elements が自動的にリロードするので、すぐに使えるようになります。
まとめ
日本語変換中に Enter で送信される問題は、IME の確定キーを別のキーに割り当てることで根本解決できます。特に US 配列のキーボードを使っている方には、右シフトキーへの割り当てがお勧めです。
この設定により、欧米発のサービスでも快適に日本語入力ができるようになりました。同じ悩みを持つ方の参考になれば幸いです。
Discussion