ホームポジションを崩さないタイピングがしたくて3週間Colemak配列を触ってみた

「快適なタイピングをするためにキー配列を変えてみたい」が本音でした。ホームポジションはオマケに考えてたのですが、結果的に成功だったという話を書きます。

あくまでも、僕の感想です。

Add 2019/3/2 Manjaro linuxでのキーレイアウトの変更
Fix 2019/3/18 Xmodmapのコマンドは再起動毎に実行する必要がなかったため追記

# 1. はじめに
### 今まで
僕は10年前にパソコンを触り始めて以来ずっと、「Qwerty配列」(もしくは「JIS配列」)と呼ばれる配列のキーボードを使用してきました。正確には、Wikipediaによると、「日本語109キーボードを、Windowsでの利用にあわせて刻印を変えたOADG 109A型」というものらしいです(初めて知った)。画像は[OADG 109A型](http://www2d.biglobe.ne.jp/~msyk/keyboard/layout/OADG109A.html)の配列です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/336583/584abd13-1ac2-6cc3-bb20-141d35c2a8bd.png)


キーボードは、気がついたら自由に使いこなせるようになってて、左手指3本、右手指2本だけタイピングしてきたので、少し気にかけていました。右手指2本なのに、右手でタイピングする範囲が「Yキー」の列から右側全部だったので、結構手を動かすし、手首が疲れるんですよ...。当たり前ですね...。

なおそうかなって思った時期もあったけど、タイピングが遅くなるし、すぐに飽きてしまって結局諦めていました。今の方が楽じゃん？という感じ。

### オリジナルのキー配列を考えてみたかった
「キー配列」って自由に変えられますよね。例えば母音(aiueo)を横一列に並べるとか。面白そうだけど、それでタイピングしやすくなるのかは分からないし、何をどう変えようかも検討がつかない。そもそも変えようなんて考えたことがなかった。けど僕も変えてみたい。

その結果、「まずは既に考案されている他の配列を試してみよう」ってなった訳です。

### ホームポジションを意識したのはオマケ
キー配列を変えるってことは1から感覚を身に着けなおすことになりますよね。それなら、最初からホームポジション崩さないようにする、複数の指でタイピングして練習して体に定着させようと思ったんです。

### Colemak配列とは
Colemak配列はこんな感じの配列です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/336583/f915080a-a216-caeb-5bef-95974a23160c.png)

特徴は、

- エルゴノミック(人間がより無理なく、効率的に使用できるデザイン)で快適に打鍵可能
- Qwerty配列から移行しやすい
- 入力のほとんどを強い指で行え，同じ指の打鍵率が低い
- 英文の入力に最適化された配列

というのが挙げられます([引用](http://gihyo.jp/dev/serial/01/keyboard-picturebook/0001))。Dvorak配列のように英文入力に最適化され、かつ、**Qwerty配列で利用してきたショートカットキーはそのまま使える**ので移行がしやすいというメリットがあります。

操作感は残しつつキー配列を変えてみたいと思っていた僕にはぴったりでした。


## 2. まずは大体の配置を覚える
外出るときはノートPCだけ持って普段使用しているキーボードは持ち歩きません。なので、キートップは変えずソフトウェア的にだけキーを変えると、外に出てPCを使うときにどこが何のキーなのか分からず困ってしまいます。ある程度覚えるまでは「Qwerty配列」のまま使って練習するときだけ配列を変えたい。あと、どこに何のキーがあるのか分かるような環境で。

**ぴったりなサイトがありました。**(https://www.keybr.com/)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/336583/551a119d-570f-81fb-ba43-57f46540d79c.png)


キー配置図を見ながら表示されている文字をひたすら入力して練習できるサイトですが、「Qwerty配列」を「Colemak配列」としてエミュレートするオプションがあります。
「Setting」→「Keybord Layout」→「LayoutをUS Colemakに変更」→「Emulate layoutにチェック」でできます。他にも「Dvorak配列」や「Workman配列」にもできます。練習したいキーの個数も最小6個から設定できるので慣れていけば徐々に個数を増やしていくという練習もできます。もちろん最初から全キーで練習もできます。僕は軽く配置覚えるまで、ちょっと練習したいなってときにこのサイトで練習しました。

## 3. Colemak配列に移行する
軽く配置を覚えられたら、「Qwerty配列」から「Colemak配列」に移行しました。練習は嫌い。使いながら覚えて慣れていくのが楽しいです。
僕はWindowsユーザなので、Windowsでのキー配列の変更方法を書きます。ごめんなさい。

Windowsでは、レジストリをいじる必要がある(らしい)のですが、そんなことはやりたくないので「[KeySwap](https://www.gigafree.net/utility/keyboard/keyswap.html)」というツールを使います。設定方法はリンク先がわかりやすかったので割愛させていただき、注意することだけ書くことにします。

### 設定した内容はシステム再起動後に反映される
自分の環境ではサインアウト→サインインでも反映されます。が、本題はそこではなくて、**システムを再起動するまで設定が正しくできているかわからない**ということです。設定ミスで特定の文字が入力できなくなった場合、それがログインパスワードに含まれていたら一大事です。なので、

### まずはログインパスワードを変更しよう
パスワードは配置を変更しない**数字だけのパスワード**に変更することをお勧めします。
確かめられたら元に戻すだけなので、パスワードを無効にしてもOK。

パスワードの変更方法は「スタートメニュー」→「ユーザーアイコンをクリック」→「アカウント設定の変更」→「サインインオプション」から変更できます。

**注意は促しましたので変更は自己責任で行ってください。ログインできなくなったりキー入力できなくなっても僕は一切の責任を負いません。**

### あとはタイピングするだけ
レポート書くなり、サイトで練習するなりして過ごします。ゲーム感覚で練習できるサイトもありますし、遊ぶのもありです。

## 4. 3週間触ってみた感想
予想以上に**快適なタイピングができるようになりました**。

### ホームポジションが崩れにくくなった
ついに、**両手とも4本指でタイピングできるようになり**、ホームポジションが崩れにくくなりました。嬉しいです。変えるまでの**忙しない感じが感じられなくなりました**。
キーボードの使用上しかたありませんが、括弧やハイフン、エンターキー、カーソル移動などを除けばほぼ変わりません。前の状態を録画して比較してみたかったと少し後悔してます。

### 英文は超快適
keybrで練習し始めたときから感じていましたが、英文のタイピングでは**打ちやすいところにキーがある**ので超快適でした。また、交互に指を動かすのでリズムよく打てます。
しかし、僕は日本人なので日本語(ローマ字)の方が頻繁に入力します。英文は快適だけど日本語はどうなのか、と言われれば「**英文には劣るが打ちやすくなる**」です。母音の「I」「U」「E」「O」が右手側に集まっていたので打ちやすくなるのかな、といった印象です。

### ショートカットキーが普段通り使えてよかった
いつものように、元に戻したり、コピー&ペースト出来るのは良かったと感じました。文章書くときには困りませんでしたが、他のソフトを使う際に、**そのソフトで使っていたショートカットキーが飛び散ってしまい**、その配置でショートカットに慣れるか、今までと同じ位置になるように設定しなおさないといけません。

### Qwerty配列を使う機会が頻繁にある
あいにく、社会は「Qwerty配列」ばかりです。学校で使うPCは「Qwerty配列」ですし、キー配列を変更したまま友人にPCを貸すこともできません。配列を変えてからも、たまには「Qwerty配列」も触らないとナメクジの速度になってしまいました。
3週間程度では何年も使って身についた感覚は消えなかったので、少し触っていれば「Qwerty配列」に戻れました。しかし、当時のタイピング速度はありません。二刀流で生きていくのかな、と感じています。

### プログラミングが快適になる感じはない
これはいろんな方が言われていますが、キー配列を変えてもプログラミングにはあまり変化を感じませんでした。理由も同様で、今の開発環境ならほぼ補完してくれるから、です。快適なプログラミングをするなら変えるべきことが他にあると感じます。

全く同じようなことを感じておられる方が記事にまとめてくれていたので、読んでみるといいかも。
「[Colemak を使うことを止めることにした](http://www.kojion.com/posts/568)」

## 5. まとめと今後
**快適なタイピングがしたいならキー配列を変えるべき**だということが分かりました。また、キー配列を考える上で、僕が求める基準が何なのかが分かった気がします。これをふまえて、僕は、
### Colemak配列やめます

が、「Qwerty配列」に戻すわけではありません。今度は、以下の画像の「Eucalyn配列」というのに変えます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/336583/6ebfa797-dcd4-83eb-3957-b79ad1d81a08.png)
「Eucalyn配列」の特徴は、

- ローマ字入力特化
- よく使うショートカットはそのまま
- HJKLの配置

です。詳細は「[Eucalyn配列について](http://eucalyn.hatenadiary.jp/entry/about-eucalyn-layout)」にまとめられています。**ローマ字入力特化**が気になってしまいました。この記事も「Eucalyn配列」で書いてみましたが、確かにローマ字入力しやすいし、一番いいのは「、」「。」の位置です。とても打ちやすくて気に入っています。しばらく触ってみたら今度はアレンジしてみようと考えています。

## 6. Manjaro Linuxでのキーレイアウトの変更方法
これをちょうど書き終えたくらいにLinuxデビュー果たしました。
環境は以下の通り。

OS : Manjaro Linux
Linuxカーネル : 4.19.24-1-MANJARO
デスクトップ環境 : Cinnamon

せっかくなので、Manjaro Linuxでの設定方法もまとめておこうと思います。
**参考サイト**
[Arch Linux で Caps Lock と Ctrl を交換(変更)したり、Mac 風なキー配置にしてみたり。](http://cat-clock.hatenablog.com/entry/2014/02/01/171700)
[rc.localを使えない環境でマシン起動時にコマンドを実行する](http://atomiyama.com/linux/page/rc-local-systemd/)

キーコードと現在割り当てられているキーの情報を表示

```
$ xmodmap -pke | less
```
変更前の状態(~/.Xmodmap_old)と変更後の状態(~/.Xmodmap)を記載するファイルを作成し、
ファイルに以下のように書き込む。

``` :~/.Xmodmap
!Eucalyn

keycode 24 = q Q q Q
keycode 25 = w W w W
keycode 26 = comma less comma less
keycode 27 = period greater period greater
keycode 28 = semicolon plus semicolon plus
keycode 29 = m M m M
keycode 30 = r R r R
keycode 31 = d D d D
keycode 32 = y Y y Y
keycode 33 = p P p P
...
```
適用させる。

```
$ xmodmap ~/.Xmodmap
```
~~このコマンドをログイン毎に実行するように設定する。Manjaro Linux(Arch Linux)はrc.localがないらしいので、systemdを使って再現する方法を用いる。~~
再起動しても設定は維持できるため不要でした。

/etc/rc.localを作成し以下を書き込む。

``` :/etc/rc.local
#!/bin/sh

xmodmap ~/.Xmodmap
```
ファイルに実行権限を与える。

```
# chmod 755 /etc/rc.local
```
サービスファイル(/etc/systemd/system/rc-local.service)を作成し以下を書き込む。

``` :/etc/systemd/system/rc-local.service
[Unit]
Description=/etc/rc.local

[Service]
ExecStart=/etc/rc.local
Restart=always
Type=simple

[Install]
WantedBy=multi-user.target
```
最後にサービスの自動起動設定をする。

```
# systemctl enable rc-local.service
```

これでログイン時に自動的にキーレイアウトが変更されるようになる。
ただ、設定するのが結構重い(気がする)。もっといい方法あるかな...？

---
初投稿になります。今後も「新しいこと」に触れて記事にまとめようと考えています。記事の作成にあたり、十分に注意を払いましたが、何か問題があればご指摘ください。

最後まで読んでいただきありがとうございました。皆様も良いタイピングライフをお過ごしください。