ゲームをするように仕事をしたい

この記事はCARTAエンジニアのアドベントカレンダー2022の22日目の記事です。

本エントリはいわゆるゲーミフィケーションとかの話ではありませんが、しかしながら、いわゆらないゲーミフィケーションの話と言えるかもしれません。

申し遅れました、 Lighthouse Studio の海老原 (@co3k) です。前置きが長くなりすぎるとあれなので簡潔に前置くと、主に 神ゲー攻略 というゲーム攻略サイトの開発や運用をしており、(中略)そういうわけでゲームのコントローラーを使って仕事をしたいと思うに至ったわけです。

先行事例 1: のざ(チームメンバー)

先述したとおり我々にとってはゲームのコントローラーを使って仕事をするモチベーションがあるので、チーム内でこのようなニーズが同時多発的に発生することにさほど驚きはありません。

ということで、チームメンバーである のざ が仕事中にゲーム……じゃなかった、ミーティングに参加している様子をお見せいたします。

周囲からは「ダメだ、ゲームをやっているようにしか見えないwwww」など大変好評でした。

さて、この事例では JoyToKey というソフトウェアを用いて、マウス操作をコントローラーでおこなっているのみですが、実は JoyToKey ではマウス操作以外にもキーボード操作のマッピングもできるため、うまくすれば完全にコントローラーだけで仕事ができるようになるかもしれません。素晴らしい!

先行事例 2: krisfris/pydov

続いてご紹介する事例は Kris Fris 氏の pydov というスクリプトで、これはゲームコントローラーでタッチタイピングをするという、やりたいことど真ん中のツールです。

github.com

氏が以前公開されていたブログ記事ではかなり詳しい説明があったのですが、現在はアクセスできない状態になってしまっています。残念……

どういうものだったのか、僭越ながら海老原の方で簡単にご説明いたします。

  • ゲームコントローラーはボタン数は少ないものの、 2 本のアナログスティックの組み合わせに注目すれば入力パターン数は莫大となる。そのため、様々なスティックのジェスチャーに対応したキー入力アクションを割り当てた
  • スムーズな入力のためには、視覚的なフィードバックがなくとも正確な(ミスが少ない)方法が必要
    • 検証した結果、上下左右の軸に沿った入力の精度は高いこと、かつ入力状態から非入力状態(ニュートラルな状態)に戻す操作と、端まで入力してから別な端まで移動する操作が容易であることがわかった

先行事例を参考にやってみた……かったが

じゃあ早速ゲームのコントローラーを使って仕事をしよう! と息巻いたものの、

  • 残念ながら JoyToKey は Windows 対応ソフトウェアで、 macOS ユーザである海老原が利用することはできなかった
    • また、 macOS 上で動作する他の代替ソフトウェアでも、複数キーの組み合わせなどの機能をカバーするものが見つからなかった(もしくは動作しなかった)
  • krisfris/pydov が海老原の環境ではどうしても正常に動作させられなかった (作者の方ともコミュニケーション取らせていただいたのですが解消せず><)

というわけで自作しました

自分自身のキーの入力頻度を分析する

まず、どの操作にどういうマッピングをするのがいいかを割り出すために、適当なキーロガーを書いて、適当に自分のキーストロークを記録し、それぞれのキーの入力頻度を出してみることにしました。以下がそのヒートマップです(なお、パスワード等のフィールドの入力はこのヒートマップには反映されていないのでご安心を)。

特に使用頻度の高いキーを負担の少ないジェスチャーに割り当てることで、スピーディに入力することが期待できます。

コードを書く

コードを書きます。いくつかアプローチを試したのですが、SDL (SimpleDirectMediaLayer) に載っかっておくのが海老原の環境では一番スムーズにいきました。言語についてもなんでもよかったのですが、 SDL の Python バインディングである PySDL2 が一番問題なく動いたので、前述の krisfris/pydov と同様に Python で書くことにしました。 Python だとプログラマティックにキーボード入力やマウス入力をおこなう PyAutoGUI が利用できるので、そういう意味でも楽ができていいですね。

できあがったコードは以下です。

github.com

工夫したポイントとしては、

  • モード切替の概念を導入して、「マウスモード」と「キーボードモード」を切り替えるようにしました
  • krisfris/pydov でやっていたような端→端の移動は作り込みが大変そうだったので削り、(そうすると組み合わせが減ってしまうので)スティックだけではなくボタンとの組み合わせで入力するようにしました
  • 最初は入力頻度だけに頼ってマッピングしていたのですが、
    • h, j, k, l は vim での移動で多用していたが、これはキーボードというデバイスに都合のいいマッピングに過ぎないため、ゲームコントローラーにおいても入力しやすいジェスチャであり続ける必要がないことがわかりました
    • 「連想しやすさ」も重要であることがわかりました。そのため、右スティックは母音入力用とし、 iOS や Android の日本語キーボードアプリ等のフリック入力を参考にしたジェスチャ配置に変更したらだいぶ捗りが出てきました

あたりです。参考になれば幸いです。

寿司打チャレンジ

では実際のところ、どの程度ゲームコントローラーで仕事ができそうなのか検証してみましょう! 本記事はアドベントカレンダーの記事です。アドベントカレンダー(物理)といったらクリスマス、クリスマスといったらお祝い事、お祝い事といったら寿司、寿司といったら 寿司打 ですね。

ということで、コントローラーを使って寿司打をプレイする動画を撮ってみました!!!

リザルト画面のキャプチャ画像を表示するにはこちらから展開できます

コントローラーで寿司打をやってみた結果wwwww

比較のためにキーボードでもやってみました

今後の展望

やはり現状ですと、キーボードに一日の長どころじゃない長があるという感じですね。ただ、先述の Kris Fris 氏によれば、数週間でキーボードの半分くらいのスピードで入力できるようになったということですので、あとは練習あるのみという感じですね! 僕は本気です! ということで来年またお会いしましょう! よいお年を!