😽

第4回:ひらがな入力のマッピング

に公開

🧩 はじめに

前回の記事では、テンキーによる2ステップ入力のロジック設計について解説しました。今回はそのロジックを活かして、具体的に「ひらがなをローマ字で出力するマッピング構造」について掘り下げます。


🧠 マッピングの基本構造

2タッチ入力では、テンキーの 1タッチ目(行)2タッチ目(段) を組み合わせて、ひらがなに対応するローマ字を出力します。

例:

  • 7 → 1 → あ行の1段 → a
  • 8 → 3 → か行の3段 → ku

この組み合わせを Map オブジェクトで定義することで、柔軟かつ高速な変換が可能になります。


🔧 実装例:2タッチマッピング

twoTouchCombineMap := Map(
  "A_ROW_1", "a", "A_ROW_2", "i", "A_ROW_3", "u", "A_ROW_4", "e", "A_ROW_5", "o",
  "K_ROW_1", "ka", "K_ROW_2", "ki", "K_ROW_3", "ku", "K_ROW_4", "ke", "K_ROW_5", "ko",
  "S_ROW_1", "sa", "S_ROW_2", "si", "S_ROW_3", "su", "S_ROW_4", "se", "S_ROW_5", "so",
  ...
)

🛠 実装上の工夫

  1. マッピングの可読性と保守性
    • Map を使うことで、キーと値の対応が明確
    • 行・段の命名規則を統一することで、動的なキー生成が可能
  2. 状態管理との連携
    前回紹介した HandleKey() 関数内で、以下のようにマッピングを参照しています:
combineKey := rowKey . "_" . columnNum
if (twoTouchCombineMap.Has(combineKey)) {
  outputRomaji := twoTouchCombineMap[combineKey]
  Send(outputRomaji)
}

📈 応用と拡張性
このマッピング構造は以下のような拡張が可能です:
• 濁音・半濁音の変換:dakutenMap, handakutenMap を使って直前の文字を変換
• 小文字変換:smallKanaMap による xa, xi などの出力
• 記号・数字の入力:specialTwoTouchMap による特殊キー対応


🖼 実行例
• 8 → 2 → 出力:ki
• 9 → 5 → 出力:so
• 0 → 4 → 濁音キー → 出力:go


✅ まとめ
今回は、2タッチ入力方式におけるひらがな出力のマッピング構造について解説しました。次回は、濁音・半濁音・小文字・記号などの特殊処理について詳しく紹介します。

📥 SNS

🔗 GitHubリポジトリ
https://github.com/chiquwa/2touch-ime

🔗 Zenn記事一覧
https://zenn.dev/chiquwagohan

🔗 Note記事一覧
https://note.com/search?context=note&q=from%3A%40chiquwa&size=10

EXEファイルの購入
https://note.com/chiquwa/n/n59973d490326

https://www.youtube.com/watch?v=7_C7cDYGKiA

Discussion