ガラパゴスタ

楽する。楽しむ。生み出す。

一番使っているキーはどれ?キーロガーを自作して仕込んでみた

f:id:stakiran:20190203173842j:plain

「一番たくさん使ってるキーはどれだろう」と、ふと気になったので、キーロガーを自作して仕込んでみることにしました。

計測概要

はじめに計測に関する前提などをまとめておきます。

計測時間

2 時間です。

計測時に行ったタスク

計測時は以下作業を行っていました。

  • 1.4H [趣味] ドキュメント作成
  • 0.1H [雑務] メールチェック/SNSチェック
  • 0.2H [雑務] GTD 進捗更新
  • 0.1H [雑務] ファイル整理
  • 0.2H [休憩] 休憩(席離れてトイレやら何やら)

計測ツール

気が向いたら公開します。

以下は主な仕様(専門用語続くのでわからない方は飛ばしてください)です。

  • Python で作成
  • キー入力は win32api の GetAsyncKeyState 関数を使用
    • もっというと ctypes を使って ctypes.windll.user32.GetAsyncKeyState
  • データは 1 分ごとに json ファイルに保存
  • json ファイルたちをマージするスクリプトは別途作成

記録データ

今回記録したデータは以下のとおりです。

  • 各キーの入力回数

おまけとして以下も記録しました。

  • マウスカーソルの移動距離
  • アクティブウィンドウの切り替え回数

データ(見やすく整えた版)

早速データを見ていきます。

まずはデータをそのまま載せます。

キー入力データ(CSV, 降順)

L-click,1417
return,1058
backspace,960
space,804
down,785
ctrl,766
a,654
s,601
o,581
shift,567
up,566
i,535
e,512
u,428
n,406
r,389
alt,388
left,361
t,359
right,330
k,262
g,210
l,204
y,179
v,157
d,157
3,138
delete,119
c,116
m,112
h,102
M-click,95
b,93
w,91
z,90
,65
.,61
f,53
1,47
R-click,42
p,40
x,27
j,22
0,22
end,16
4,15
2,15
q,10
8,8
f9,7
f10,7
escape,7
5,5
L-Win,4
6,4
pause,3
nonconvert,3
tab,2
home,2

アクティブウィンドウ切替回数

331 回(約 21.7 秒ペースで切替)

マウスカーソル移動距離

908584 pixel(約 240 メートル)

データ(生データ)

これは本当の生データです。並び替えなどをしていないので見づらいです。

{
    "key": {
        "L-click": 1417,
        "M-click": 95,
        "alt": 388,
        "a": 654,
        "f": 53,
        "space": 804,
        "l": 204,
        "e": 512,
        "y": 179,
        "backspace": 960,
        "k": 262,
        "o": 581,
        "g": 210,
        "s": 601,
        "u": 428,
        "r": 389,
        "i": 535,
        "t": 359,
        "return": 1058,
        "c": 116,
        "up": 566,
        "ctrl": 766,
        "left": 361,
        "1": 47,
        "down": 785,
        "2": 15,
        "shift": 567,
        "end": 16,
        "delete": 119,
        "j": 22,
        "n": 406,
        "w": 91,
        "v": 157,
        "h": 102,
        "x": 27,
        "z": 90,
        "3": 138,
        "d": 157,
        ".": 61,
        "0": 22,
        "m": 112,
        "right": 330,
        "4": 15,
        "5": 5,
        "b": 93,
        "R-click": 42,
        "8": 8,
        "p": 40,
        "6": 4,
        "q": 10,
        "home": 2,
        ",": 65,
        "f9": 7,
        "f10": 7,
        "escape": 7,
        "L-Win": 4,
        "nonconvert": 3,
        "pause": 3,
        "tab": 2
    },
    "window": {
        "switch_count": 331
    },
    "mouse_distance": {
        "pixel": 908584
    }
}

レポート

ここから記録データについて振り返っていきます。

キー入力考察: 1~10 位

L-click,1417

1位は左クリック。2 時間で 1400 回くらいクリックしてます。

たぶんドキュメント作成で情報収集しまくっていた(ブラウザでググって結果を見てはエディタに戻って要点まとめたり内容コピペしたりの繰り返し)からですね。

return,1058
backspace,960
space,804

2~4 位は Enter、Backspace、Space。「まあそうだろうな」的なキーが並んでます。

down,785

5 位はカーソルキーの↓。カーソルキーの上下キーはカーソル移動から項目選択まで多用するので、これも「まあそうだろうな」ですね。

ちなみにカーソルキーの↑は、もうちょっと後で登場します。

なぜ↓の方が多いのかですが、これは「テキストは上から下に書く」という行動や、「選択肢が表示される時は下にずらりと並び、必要なら下に移動して選ぶ」というシステムの一般的仕組みなどが理由だと思います。

ctrl,766

6 位は Ctrl キー。修飾キーの王様です。

僕の場合、ショートカットキーは多用しているので、たぶんこの順位なのだと思います。

a,654
s,601
o,581

7~9 位は a、s、o です。ここでようやく文字キーが登場してきます。

a と o は母音なので「まあ多いでしょうね」です。ドキュメント作成でバリバリ書いてましたし、僕はローマ字入力ですし。

s については、たぶん Ctrl + S でこまめに上書き保存しているせいだと思います。(たぶん一段落打ち終える度に反射的に押してる)

ついでに言えば、a と s は Alt キーとのショートカットキーで最もよく使うキーでもあります。左手だけで押しやすいですからね。実際、ドキュメント作成中でも使ってますし、そもそも仕事でもプライベートでも常に使っている タスク管理ツール Tritask でも操作の基点が Alt + A だったりしますし。

shift,567

10 位は Shift キー

これはドキュメント作成で Camelcase(先頭大文字の英語) を書く機会が多かったからだと思います。

趣味ではありますが技術ネタなので、名称はちゃんと書かないといけません。たとえば GitHub や iOS などですね。Github とか github とか ios とか Ios とか IOS とか iOs とかはダメです。

キー入力考察: 11~20 位

up,566

11 位はカーソルキー↑。5 位の↓が 785 回だったことに比べると、やや落ちてますね。↓の方が多い理由は先程述べました。

i,535
e,512
u,428

12~14 位は i、e、u。つまりは母音ですね。

一般的に母音は(僕のようにローマ字入力だと)入力数が多い傾向にあります。ローマ字入力は子音 + 母音で 50 音 1 文字をつくりますが、子音がたくさんあるのに対して、母音はたった aiueo の 5 つですからね。必然的に数は多くなる。

n,406
r,389
alt,388
left,361
t,359
right,330

15~21 位は n、r、Alt、←、t、→

※きりが悪いので 20 位といいつつ 21 位まで紹介します。

まず修飾キーである Alt キーと、カーソルキーの←→が出現しています。僕は Alt キーのコンビネーション(Alt + Tab によるウィンドウ切替含む)も、カーソルキーによるカーソル移動も多用するタイプなので、「まあそうですよね」ではあります。

それから文字キーですが、n, r, t の三つがランクインしてますね。子音の中では、 s に続いて、この三つがよく使われるキーだということでしょうか。たしかに、改めて眺めてみると「ああ、技術文書やソフトウェアの文脈ではよく見かけそうなアルファベットだなぁ」と思わないでもない。

キー入力考察: 入力回数の少ないキーたち

全部見るのはしんどいので、少し飛ばして、一番少ないキーあたりを見てみましょう。

q,10

まず 一番少ない文字キーは、やはりダントツで Q ですね。

8,8
f9,7
f10,7
escape,7
5,5
L-Win,4
6,4

他には 8、F9、F10、Esc、5、Windows、6 キー などが入っています。

まず 5,6,8 といった数字キーは数字なのに少なめですが、これは作成していたドキュメントの性質でしょうね(あまり数字は登場しない内容)。一番多い数字でも 0 キーの 22 回でした。

ファクションキーとして F9, F10 が来ていますが、ぶっちゃけ覚えがありません……。F10 はたぶん秀丸エディタのタグジャンプ(grep で多数の文書を横断的に検索する際によく使います)だと思いますが、F9 は覚えがない。

Escape は、ダイアログを閉じたり、あと個人的に使っている AutoHotkey の Hotstring の内部状態クリアなどで使うことがあるので、「まああってもおかしくはないな」という感じ。

L-Win は要するに Windows キーで、これもよく使う(特に Win + R のファイル名を指定して実行)ので不思議ではないです。むしろたった 4 回なのは少ないくらい。コンソールを使ったプログラミングやら何やらの作業になると、たぶん 40 回とか 400 回くらいにはなるでしょう。

pause,3
nonconvert,3
tab,2
home,2

最後に ワースト TOP 4 は Pause/Break、無変換、Tab、Home キー

pause は Pause/Break キーのことで、僕はプログラムランチャ CraftLaunch を割り当ててます。今回は特に新しいアプリを立ち上げる機会がなかったので少なめですね。

nonconvert は無変換キー。カタカナに一気に変換する時に使うことがあります。

tab は Tab キーで、用途によっては Alt やカーソルキー←→と同等くらいには使うこともあります(プログラミングやアウトライナーでインデント整える、フォーム上でフォーカスを動かすなど)が、今回はほぼドキュメント作成だったので出番無し。

home は Home キーで、カーソルを行頭に移動させるのにたまに使いますが、僕はどちらかと言えば「行末にカーソルを合わせた状態で → キー」を押して移動させるのが好きなので、Home はあまり使わないですね。今回はたった 2 回です。

アクティブウィンドウ

アクティブウィンドウとして「切替回数」も測定してみました。

計 331 回

今回の計測は 2 時間でしたから 21.7 秒に 1 回 のペースでウィンドウを切り替えていることになります。

これは間違いなく今回のドキュメント作成で、テキストエディタとブラウザを行ったり来たりしていたからだと思います。

あとは、ブラウザだけ or テキストエディタだけでも、タブが変われば切り替えたとみなす(みなすようにしました)ので、タブを多用してサクサク切り替えまくる僕としては、切替回数は増えがちです。

マウスカーソル移動距離

マウスカーソルを動かした距離も計測してみました。

計: 908584 ピクセル

……ピンと来ませんよね。

まず僕のディスプレイが 1920x1280 なので、横移動で換算すると 908584/1920 = 473.2 というわけで ディスプレイ 472 枚分動かした ことになります。言い方を変えれば 左端から右端まで 236 回往復するのに相当 するとも言えますね。

これだけだとまだピンと来ないので、メートルにも換算します。

ピクセルをメートルに直すのはぶっちゃけ面倒なのですが、

  • ピクセルが p[pixel]、dpi が d[dpi] とすると、
  • p[pixel] は p/(d/2.54) [センチメートル]

が成立します。問題は dpi の値ですが、Windows だと

  • コントロールパネル > ディスプレイ > カスタムテキストサイズの設定(DPI)

から確認できます。僕の環境では 96 ピクセル/インチ でした。

あとはこれを割り当てると、

  • p[pixel] は p/(96/2.54) [センチメートル] → p/37.79 [センチメートル]

ということになり、つまり ピクセル数を 37.79 で割ればセンチメートルになる と結論付けられます。

計算してみましょう。

908584 / 37.79 = 24042.9743318338 = 24043 センチメートルです。

結論:240 メートル

……多いんだか、少ないんだか。

おわりに

今回試しに記録ツールを自作して仕込んでみましたが、自分の傾向が可視化されて面白いですね。

ちなみに、世の中には 10 年単位で記録した猛者 もいるらしくて、いやはや脱帽です。僕もいつか仕込んでみたいなぁ。

というわけで以上、キーログネタでした。

p.s. 本記事で使ったキーロガーは気が向いたら公開します。ついて言っておくと、キーロガーという呼称を使っていますが、動作としては回数をカウントするのみであり、「パスワードを盗む(キーを押した順番まで記録する)」といった類のツールでありません。