mixi engineer blog

*** 引っ越しました。最新の情報はこちら → https://medium.com/mixi-developers *** ミクシィ・グループで、実際に開発に携わっているエンジニア達が執筆している公式ブログです。様々なサービスの開発や運用を行っていく際に得た技術情報から採用情報まで、有益な情報を幅広く取り扱っています。

めくるめくDvorakJPの世界

初めまして。QWERTYの入力できないyuzuemonです。 先日社内LTにてDvorakJPについてのお話をしようとしたのですが、ローマ字テーブル拡張の話も盛り込んで紹介をしようとしたら伝えたいことが多すぎて5分を優に過ぎてしまいました。 今回はこの場を借りてDvorakJPへの熱い想いを語らせていただきます。

Dvorak配列(以下、Dvorak)とは

そもそも「Dvorakってどんな配列なの?」とよく訊かれますので、まずはDvorakの配列を見ていただきたいと思います。

こんな配列をしています。

ホームポジション上の凸がある位置のキーは "U" と "H" です。 大きな特徴としては以下の2つです。
  • 母音が左手のホームポジション上に集中している
  • ハードウェア機構はQWERTYと変わらない
OSでの対応もされており、Mac, Linuxではキーボード設定からDvorakに変更可能です(Windowsも可能ですが一手間必要です)。 ちなみにKinesisではハードウェア上でQWERTYとDvorakを切り替えることができるので、私はKinesis側で切り替えて利用しています。

文字入力について

前述の左手のホームポジション上にすべての母音が集中していることや、右手のホームポジション上に比較的使用頻度の高いキーが並んでいることからもDvorakは「ホームポジションから極力手を動かさない」ことに特化しています。

キーの使用頻度について軽く検証

折角なので軽く調べてみました。 今回は実際に入力したデータに基づいて検証してみようと、自分のTwitterアカウントの全ツイートをTwilogから取得し、MeCabでカナ変換後、訓令式ローマ字に変換して各アルファベットの出現回数をグラフ化してみました。 (URLや非公式RTなどの自動挿入の部分は省いています)。

全9,961ツイート、383,115文字 から。(記号は割愛しています。)

想像以上に"a"が多くてびっくりです。気になって他サイトでの検証結果とも比較してみたのですが、概ね同じようになりました。(と言ってもこのような検証はDvorakユーザの方しか行っていないようですが......)

以下のグラフは、Dvorakの配列順にソートしたものです。

グラフの中央(aからsまで)がDvorakでのホームポジションです。概ねホームポジション行に使用頻度の高いキーが集まっているのが分かります。 キーの使用頻度だけでも長々分析できそうですが、今回はあくまで私のツイートが元である為、大まかな目安としてだけ捉えて次のお話に進みます。

Dvorakの弱点

さて、Dvorakはアメリカで考案されたキーボード配列で、使用率が高いキーをホームポジションに集めています。

気になる日本語入力ですが、 下の表に簡単にローマ字入力時の各キーの役割を纏めてみました。

垂直に並んでいますが、1列目から5列目までが左手の打鍵範囲、6列目から10列目までが右手の打鍵範囲です。

基本的に「右手に子音、左手に母音」の構成となっている為、右手→左手と交互にリズムよく打鍵しやすくなっています。 しかし、このままでは幾つか問題があります。

1: カ行が打鍵しづらい

まず、母音が集中している左手側に "k" もある為にカ行が打鍵しづらい問題があります。 カ行は入力頻度も高い為、右手では子音、左手で母音というリズムが乱されてしまい、スムーズな打鍵を行うことができません。

2: "ん" 入力時に右手の打鍵数が増える

反転【hanten】など、"ん" を入力する場合、右手で "n" を1回ないし2回打鍵する必要があります。 これも打鍵のリズムを乱す大きな要因です。

3: 母音が2つ続く文字が打鍵しづらい

日本語には母音が2つ続く文字が存在します。 公開【koukai】、調査【tyousa, chousa】などの"ou", "ai"などですね。 これらは左手で連続して打鍵する必要が生じる為、左手の負荷が増大します。

4: 拗音が打鍵しづらい

きゃ、きゅ、きょなど、「ゃ」「ゅ」「ょ」が付く拗音もカ行同様左手で"y"を押す必要があります。 これらは 子音 + y + 母音 の構成となる為、左手の打鍵が続き、リズムのある入力を妨げる要因となります。 上記を纏めると、例えば東京【toukyou】の場合
左手 o u k y o u
右手 t
と左手の打鍵が多いです。逆に前述の反転【hanten】は右手の打鍵が多くなります。 如何に頻出するキーがホームポジションに集まっていたとしても、左右の打鍵のバランスが悪いようでは入力に対する指の負荷を軽減することはできません。

DvorakJPによる問題点の解消

解決方法としてローマ字テーブルを書き換えるというものがあります。 代表的なものとしてDvorakJPがありますので、今回はDvorakJPを例に問題の対策をあげてみます。

対策1: カ行が打鍵しづらい

"c" でカ行を入力するよう変更します。 "c" + 母音は、IMEのデフォルトのローマ字テーブルではカ行とサ行が混在していますが、DvorakJPではカ行で統一します。

対策2: "ん" 入力時に右手の打鍵数が増える

"n" の打鍵前には必ず母音の打鍵があります。 Dvorakでは左手中段(ホームポジションの段)に母音が並んでいます。その下段に撥音拡張と呼ばれる "ann, onn, enn, unn, inn" の役割を持たせます。 「そんなことをして大丈夫なのか」と思われるかも知れませんが、未確定の子音に続けて " ;, q, j, k, x" を打鍵しても文字が確定することは無い為に問題はありません。 "ann" などに "n" が2つあるのは、単語末尾の "ん" の入力時でも未確定の "n" を残さない為です。

対策3: 母音が2つ続く文字が打鍵しづらい

先述の通り左手に母音が並んでいますので、その上段の "' , ." に「子音の後に押された場合にのみ "ai, ou, ei" を入力したものとする」役割を持たせます。 こちらも同様、未確定の子音に続けて " ' , ." を打鍵することが無い為に問題はありません。

対策4: 拗音が打鍵しづらい

この問題については、"y" 以外の別の子音でも拗音を入力可能にすることで解決します。 具体的には、"h" と "n" にも "y" と同様の役割を持つようにします。 例えば、サ行は以下の表のように "y" の他に "h" でも拗音を入力することができますが、
sha(sya) しゃ
shu(syu) しゅ
sho(syo) しょ
これと同様の仕組みを、他の子音にも取り入れる訳です。
nha(nya) にゃ
nhu(nyu) にゅ
nho(nyo) にょ
しかし、実際には子音の後に続けて "h" を打鍵しづらい場合があります。 そこで、ひとまず "h" を打鍵しやすい子音のみ、拗音を "h" でも入力可能に設定します(背景色が薄オレンジの子音)。

残りの "h" を打鍵しづらい子音は、"h" の代わりに "n" でも拗音を入力可能にします。
hna(hya) ひゃ
hnu(hyu) ひゅ
hno(hyo) ひょ
この拡張は理解しづらいと思いますので、下の表を見ながらイメージしてみてください(背景色が水色の子音)。

通常、指の移動の際には、隣の指も引き摺られる形でホームポジションから若干離れてしまいがちです。続けて打鍵する際には指の戻りの分だけロスが発生してしまいます。 ここでは "h" と "n" の2つのキーに "y" を割り当てることで、出来る限り指の戻りが少ない指で打鍵することを可能としています(もちろん、通常通り "y" で入力することも可能です)。

DvorakJPによる拡張の纏め

DvorakJPはDvorakに加えて、ローマ字入力中にのみ以下のような拡張を行っています。
  1. カ行はcでも入力可能にしている
  2. 二重母音、母音 + "ん" を1打鍵で入力可能にしている
  3. 拗音は "h" や "n" でも入力可能にしている
上記の対策により、「左手は母音、右手は子音」がより明確になっています。 ヤ行とパ行は左手での入力のままではありますが、頻度の少なさからDvorakJPではそのままとなっています。 それぞれの手の役割を以下に纏めてみました。
右手の役割
右手の役割は子音の入力が中心です。拗音を入力する際にのみ、続けて打鍵する必要が生じます。
左手の役割
左手の役割は母音、二重母音、母音 + "ん"の入力が中心です。 未確定状態の子音は、続けて打鍵するキーによって以下のように変化します。

Ex. s(未確定)の後に打鍵した場合

上記のように、各手の役割が別れているため、殆どのローマ字は「右手で始まり、左手で終わる」ことになります。
ただし、左手にはヤ行とパ行の子音打鍵の役割もある為、若干右手より負荷が高くなるかも知れません。DvorakJP適用時の左右の負荷については、また後程調べてみたいと思います。

改めて、DvorakJPの配列表。

全体の纏め

私見ですがDvorakJPのメリット・デメリットを纏めてみました。
メリット
  1. 自分の環境下では快適に入力できるようになる
  2. 指の移動が減る
  3. ローマ字入力時の打鍵数が減る
デメリット
  1. 自分の環境下以外で入力しづらくなる
  2. キーボードショートカットの配置が大きく変わる
  3. 習得するのにやや時間が掛かる上、QWERTYとの両立が難しい
  4. 変態扱いされる
と、デメリットが多いです。

しかし、ブラウザやエディタをカスタマイズするのと同様、キーボード配列やローマ字テーブルをカスタマイズすることもそれ程不思議なことではないと思っています。

ちなみに、私は大体習得に1年程掛かりました。
入力しづらい期間が半年程続きましたが、後40年はキーボードと向き合って生きていくつもりですので、将来を考えて今の内に負担の少ない配列に移行することへの抵抗はありませんでした。

なお、一見して変態だと思われがちですが、例えばGoogle日本語入力では、デフォルトでz+[hjkl]で←↓↑→が入力できるようローマ字テーブルの拡張がされていますし、ACTと呼ばれる配列ではwtで"わたし"と入力できるなど、使いこなせばより便利な入力が可能です。
ボクが変態というわけではないのです。

以上、DvorakとDvorakJPについて長々と述べさせていただきましたが、上記の入力方式はあくまでもひとつの例です。
世間にはDvorakベースのDvorakY、ACT、DvorakJPなどと呼ばれる配列の他に、QWERTYベースのAZIK、親指シフトとその派生配列など様々あります。
自分好みのカスタマイズもテキストベースのローマ字テーブルファイルを書き換えるだけなので簡単にできますので、是非みなさん独自のキーボード配列やローマ字テーブル拡張を試し、新しい世界を体感してみては如何でしょうか?