メインコンテンツまでスキップ

どうしてもAZIKで寿司打がしたい

『寿司打』というゲームをご存知でしょうか?
回転寿司のように流れてくるお皿が届く前に、表示された文章を打ち込んでいく、という所謂タイピングゲームです。

私は一時期寿司打にハマり、メトロノームをつけながら最適なタイピング速度を調整したり、フラッシュ暗算的なノリで単語を見た直後に目を瞑ってタイピングするトレーニングをしてみたり、人生の時間を浪費したのを覚えています。
(フラッシュ暗算をしたことはありません)

スコア(正確性)スコア(得点)
基本的には精度を重視するスタイルボーナス初期と後期で速度を調整して得点のチューニングをしたり

とはいえここ最近はずっと寿司打をやっておらず、ようやく寿司打を卒業できたかなと思っていたのですが、子どもが寿司打をやっているのを見かけてしまい、寿司がまた脳内でフラッシュバックしてしまいました。
昔取った杵柄ということである程度できるかなと思っていたのですが、全然出来なくなっていました(理由は後述)。

流石にこのままでは終われないなと思ったので、今回はそれに対応するためにやったことをまとめます。

何故全然出来なくなっていたのか

理由は明確で、最近はずっとAZIKという拡張されたかなテーブルを使って日本語を入力しているからです。(正確にはAZIKをベースに、さらにちょっとカスタマイズしたものを使っています。)
寿司打は当然標準的なローマ字入力しかサポートしてないので、拡張マッピング領域のかなを入力すると、全てミスになってしまうわけですね。

AZIKについて

AZIKは「ローマ字入力の互換性を保ちつつ打鍵数を減らす」ことを目指した拡張ローマ字入力方式です。通常のローマ字入力はそのまま使えるので、覚えた短縮パターンだけを少しずつ取り入れていけるのが特徴です。
例えば「消防署長」(しょうぼうしょちょう)は、通常のローマ字入力だと syoubousyotyou (14打鍵)ですが、AZIKでは xpbpxocp (8打鍵) で入力できます。

詳しくはAZIKの解説ページをご覧ください。

対応したこと

寿司打にかなテーブルをアップロードなんてできたら良いのですが、そんなことはできるはずもないので、自分の環境で普段通りAZIKで打鍵したものをローマ字に変換して出力することにしました。
そうしてできたのがAZIK to Romaji Converter for Karabiner-Elementsでございます。(そのまんま)

基本的な考え方としては、

  1. 入力シーケンスを変数 azik としてステート管理
  2. 子音が入力されたらそのままキーを送信しつつ、ステートに子音をセット
  3. 次のキー入力時にステートを参照し、かなが確定したら対応するローマ字の残りを出力してステートをクリア

という流れです。例えば kp (こう)と入力した場合は、

  1. k → そのまま k を送信、ステートを "k" にセット
  2. p → ステートが "k" なので ou を送信、ステートをクリア
  3. 結果として kou が出力される

のようになります。

やってみて

思った以上に変換が完璧に動いて満足しています。寿司打で出てくる例だと「超常現象」が cpjpgdxp と、かなり入力が短縮できて良い感じですね。(タイピングゲームとしてこれがありなのか実装した後に不安にはなっていますが...)
とはいえ真面目に寿司打に取り組んでいた時に比べると、随分遅くなっているなあと、少し反省するような、どうでも良いような、そんな気持ちになりました。またやろうかなあ、寿司打。