MS_IME - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

IME

概要

Input Method Editor の略であり、Windows で文字入力を補助する
(ローマ字から平仮名 / 片仮名への変換、平仮名から漢字への変換などを行う)ソフトウェア。

Windows に限らない一般名称はインプット メソッドであるが、
Windows 以外の OS で使われるインプット メソッドについても IME と呼ばれることもある。

補足(開発者にとって IME が問題になる場面): 定義としては上記の通りだが、
本 Wiki の他ページで IME が繰り返し登場するのは、
アプリケーションの動作に影響するからである。整理しておく。

場面 内容 参照
入力できる文字の範囲 IME が変換候補に出せる文字集合 JIS2004関連
非 Unicode アプリで文字が消える IME → ウィンドウ プロシージャの経路で失われる アプリケーションのUnicode化
外字の入力 IME パッドから登録済みの外字を入力する Windowsの外字
入力モードの制御 氏名欄は全角かな、電話番号欄は半角英数、等 IME制御
変換確定前の文字 未確定文字列(コンポジション)の扱い 後述

「未確定文字列」が、Web / デスクトップ双方で事故を起こす

【IME の入力の流れ】
   キー入力
     → 【未確定(コンポジション)状態】… 下線付きで表示される
     → 変換
     → 【確定】… ここで初めて「入力された」

【よくある不具合】
   ・未確定のまま Enter を押すと、
     【確定のつもりが、フォームが送信される】★
   ・キー イベントで入力チェックすると、
     未確定の文字まで拾って誤判定する
   ・「1 文字入力するたびに検索」する実装で、
     変換前のローマ字で検索が走る

Web での対処compositionstart / compositionend):

let composing = false;
input.addEventListener('compositionstart', () => composing = true);
input.addEventListener('compositionend',   () => { composing = false; search(); });
input.addEventListener('input', () => { if (!composing) search(); });

// Enter での誤送信を防ぐ
input.addEventListener('keydown', e => {
    if (e.key === 'Enter' && e.isComposing) return;   // ← 変換確定の Enter
    // ...
});

e.isComposing は現在のブラウザで標準に使える。
日本語・中国語・韓国語の入力を扱うなら必須の知識である。

参考

Microsoft Learn


Tags: 移行, Windows

⚠️ **GitHub.com Fallback** ⚠️