📌
第3回:テンキー入力のロジック設計 AutoHotKeyV2
行・段の2ステップ入力の状態管理と変換処理
🧩 はじめに
本記事では、テンキーによる2タッチ日本語入力システムの中核となる「入力ロジック」について詳しく解説します。AutoHotkey v2を用いて、行(母音グループ)と段(母音位置)を2ステップで入力し、ひらがなをローマ字で出力する仕組みを構築します。
🧠 入力方式の設計思想
テンキーを使った2タッチ入力では、以下のような設計思想に基づいています:
1タッチ目(行):テンキーの数字に各行(あ行、か行など)を割り当て
2タッチ目(段):母音の位置(あ・い・う・え・お)をテンキーで指定
組み合わせでローマ字出力:例:7 → 1 で「あ(a)」、8 → 3 で「く(ku)」
この方式により、テンキーのみで効率的な日本語入力が可能になります。
🔧 実装の概要
2touch.ahk
行・段のマッピング
ROW_KEYS := Map(
7, "A_ROW", 8, "K_ROW", 9, "S_ROW",
4, "T_ROW", 5, "N_ROW", 6, "H_ROW",
1, "M_ROW", 2, "Y_ROW", 3, "R_ROW",
0, "W_ROW"
)
COLUMN_KEYS := Map(
7, 1, 8, 2, 9, 3,
4, 4, 5, 5
)
2タッチ組み合わせの変換
2touch.ahk
twoTouchCombineMap := Map(
"A_ROW_1", "a", "A_ROW_2", "i", ...
"K_ROW_1", "ka", "K_ROW_2", "ki", ...
)
このように、行_段のキーでローマ字を出力する仕組みです。
🔄 状態管理と入力処理
グローバル変数による状態保持
2touch.ahk
lastPressedKeyCode := ""
lastOutputRomaji := ""
lastActionWasConversion := false
キーハンドラ関数の流れ
1タッチ目の記録:行キーを押すと lastPressedKeyCode に記録
2タッチ目の処理:段キーを押すと、行と段を組み合わせて変換
特殊キー処理:濁音・半濁音・小文字などは直前の出力に対して変換
2touch.ahk
if (ROW_KEYS.Has(lastNum) && COLUMN_KEYS.Has(currentNum)) {
rowKey := ROW_KEYS[lastNum]
columnNum := COLUMN_KEYS[currentNum]
combineKey := rowKey . "_" . columnNum
if (twoTouchCombineMap.Has(combineKey)) {
outputRomaji := twoTouchCombineMap[combineKey]
Send(outputRomaji)
lastOutputRomaji := outputRomaji
lastPressedKeyCode := ""
}
}
🛠 実装上の工夫
NumLockの状態に依存しない設計
特殊記号や数字の入力にも対応
誤入力時のリセット処理
2touch.ahk
NumpadAdd::ResetKey()
✅ まとめ
本記事では、テンキーによる2ステップ入力のロジック設計とAutoHotkey v2による実装方法を解説しました。次回は、実際のひらがな入力マッピングについて詳しく見ていきます。
📥 SNS
🔗 GitHubリポジトリ
🔗 Zenn記事一覧
🔗 Note記事一覧
EXEファイルの購入
Discussion