前回の続きです。
#自作キーボードとは#
市販品はどうしてもマスプロダクトなので、自分の好みを100%達成したものはなかなか見つけることができません。欲しいものがないなら作ればいいじゃない、という精神で日々自作のキーボードが生み出されています。
最近では自作のキットが発売されていたり、3Dプリンタや工作室のサブスクリプションの普及したりで大変ハードルが下がっております(さすがに完全自作までは手を出していない)。
#うちの子#
とりあえず見てってよ!(サイズ比較のために目薬を置いています)
##スペック##
ベースキット:Ergo42 Towel
キースイッチ:Cherry MX 赤軸
キーキャップ:Majestouch 交換用キーキャップセット 日本語108キー・無刻印 + FILCO Calendar Keycap Set 2020 日本の祝日入り・上面印刷・ブラック (Windowsキー部分だけ、Filco Majestouch Black)
##こだわりPoint##
なんといってもこの形状ですね。完全分離型で左右に分かれて少し斜め置きしているのも粋ですが、加えて配列が格子状になっているのがかなりこだわりのポイントです。
市販のほとんどのキーボードはタイプライター時代の名残でキーの配置が行ごとにずらしてあります(Row-Staggered)。しかしこの配置は人間の指の動きと微妙にマッチしていないため、実は人間にはあんまり優しくない構造です。
そのため人間工学を謳った商品では逆に列ごとにずらす配列(Column-Staggered)のものがあります。
こうした配列を自由にコントロールできるのが自作キーボードの魅力です。
その中でも私が選んだのは格子配列(Ortholinear)と呼ばれる配列です。板チョコみたいと言われてたりしましたが、行列が全て整列された構造です。
#作成の流れ#
キーボードの選ぶポイントは前回のとおりです。それを踏まえまして、作成の流れは次のとおりです。
- 作りたいキーボードキットを探す
- キースイッチを決める
- キーキャップを決める
- ビルド
- キー配置を考える
- 書き込みして微調整
- 完成
##1.作りたいキーボードキットを探す##
市販にありそうなものを探すくらいなら自作より買った方が安くて早くてメーカー保証を受けれるので安心です。というわけで、わざわざリスクとコストを背負ってまでこだわるポイントや人気ラインは次のあたり
-
分割型かそうではないか
左右に分割されているかそうでないか。分割型はエルゴノミクスの観点から分かれているので、左右対称のものがほとんどですが、作成時に基盤を分けて非対称にできるrunner3680のようなキットもあります。 -
キー配列(Row-Staggered、Column-Staggered、Ortholinear)
掌の形に合わせて列が整列されているColumn-Staggeredのものと、全体がテンキーのような格子状の配列になったOrtholinearという形状が人気の印象です(売ってないから)。
Column-Staggeredのものはどうしても指の形に合わせてキーが配置してあるので、掌が小さかったり大きかったりすると使いにくいかと思います。また、キー数がどうしても少なくなるので(1指4キーくらいが限界)、レイヤー切り替えを多用したりキーそのものの割り当てを諦めたりが必要です。 -
キー数
前述のとおり、Column-Staggeredではキー数が少なくなります。
##2.キースイッチを決める##
キットの場合、ほぼ100%メカニカルスイッチです。1個100円前後で購入できるので、必要数を考えて購入しましょう。10個単位とかで売っているため、端数が出るのは予備パーツと考えよう・・・・・・
個人的には軽くて静かな赤軸が好みですが、さらに静かなサイレント赤軸(ピンク軸)や軽いと誤タッチがあるので重めの黒軸やクリック感のある茶軸という選択も自由です。
薬指小指担当の外側のキーだけ軽めのスイッチにするなどバリエーションを変えることもできます。
##3.キーキャップを決める##
大事な点は2つ。形状とデザインです。
形状については、大きく分けると全て同じ形のフラットなタイプと、徐々に傾斜がつくタイプがあります。
私は少し傾斜をつけていますが、傾斜をつける場合、キーボード自体にも傾斜がある方がよい場合があります。
また、傾斜がついているタイプはR1~R4の4段階になっていますが、市販品なんかから流用する場合、個数に注意してください(R1がすごく少ないことがある)。
デザインについてはおしゃれなキーキャップから武骨なデザインまで、いろいろです。見栄えに直接反映するポジションなので悩ましいところ。
基本的に自作だとレイヤを切り替えて使っていくので印字がないものが好まれるイメージですが、アルファベットだけは印字させたり、ハンドスピナーがついていたり、いろいろあります。
TALP KEYBORDさんは日本語の表示があり、バリエーションも豊富です。
1からオーダーメイドできる海外のサイトなんかもありますが、めちゃくちゃ高くつくので初心者にはお勧めできません。
##4.ビルド##
購入したらビルド(組み立て)です。
基本的には基盤にスイッチとマイコン、光らせる場合はLEDをはんだ付けすれば終わりです。
マイコンやスイッチは直接基盤にはんだ付けするのではなく、差し込むだけにするパターンもあります。光らせるのは職場では悪目立ちしすぎるのでやらないほうが無難(その分安くできるし・・・・・・)
工具がないと作成できないので、持っていない人はここでも出費があります。
10うん年ぶりにはんだ付けをしましたが、楽しかったです。
ただ、はんだ付けセットについていた中国製のはんだが粗悪品で、まったくはんだ付けができない上にコテ先が腐食して死にました。はじめやり方のせいだと思い、せっかくの替え先を半分以上殺してしまったのは後悔しています。
##5.キー配置(Keymap)を考える##
ビルドが終われば次はキー配置の確認です。ここが一番時間がかかる。
キットではQMK_Firmwareに対応しているものが多く、自由なカスタマイズがお手軽にできるのでお勧めです。
自作キーボードはキー数が少なくなるので、足りない分はレイヤ(層)を切り替えながら使用します。
こちらを見ながら開発環境構築しましょう。
うちの子のコードはこんな感じです。
#include QMK_KEYBOARD_H
#include "keymap_jp.h"
extern keymap_config_t keymap_config;
#define BASE 0
#define META 1
#define TENK 2
#define MIRR 3
// Fillers to make layering more clear
#define _______ KC_TRNS
#define XXXXXXX KC_NO
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* BASE
* ,------------------------------------------------. ,------------------------------------------------.
* |CapLck| Q | W | E | R | T | [ | | ] | Y | U | I | O | P | Bksp |
* |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
* | Tab | A | S | D | F | G | ( | | ) | H | J | K | L | - | @ |
* |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
* | LSft | Z | X | C | V | B |Ctrl/;| |Ctrl/:| N | M | , | . | UP | Del |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* | LCtrl| LGUI | LAlt | \_ |Sp/MET| Space|En/MET| |Sp/MET| Enter|En/MET| APP | LEFT | DOWN | RIGHT|
* `------------------------------------------------' `------------------------------------------------'
*/
[BASE] = LAYOUT( \
KC_CLCK, KC_Q, KC_W, KC_E, KC_R, KC_T, JP_LBRC, JP_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, JP_LPRN, JP_RPRN, KC_H, KC_J, KC_K, KC_L, KC_MINS, JP_AT, \
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, CTL_T(KC_SCLN), RCTL_T(JP_COLN), KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, RSFT_T(KC_DELT), \
KC_LCTL, KC_LGUI, KC_LALT, JP_BSLS, LT(META,KC_SPC), KC_SPC, LT(META,KC_ENT), LT(META,KC_SPC), KC_ENT, LT(META,KC_ENT), KC_APP,KC_LEFT, KC_DOWN, KC_RGHT \
),
/* META
* ,------------------------------------------------. ,------------------------------------------------.
* | ESC | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | Bksp |
* |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
* | Tab | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 0 | + | - | ^ |
* |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
* | LSft | ! | " | # | $ | % | & | | ' | ( | ) | = | * | / | ~ |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* | LCtrl| LGUI | LAlt | _ |無変換| 変換 | TENK | | TENK |PrtScr| Pause| | | < | ? | > |
* `------------------------------------------------' `------------------------------------------------'
*/
[META] = LAYOUT( \
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, \
_______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, JP_PLUS, KC_MINS, JP_CIRC, \
_______, S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), JP_EQL, JP_ASTR, JP_SLSH, JP_TILD, \
_______, _______, _______, JP_UNDS, JP_MHEN, JP_HENK, TG(TENK) , TG(TENK), KC_PSCR, KC_PAUS, JP_PIPE, JP_LT, JP_QUES, JP_GT \
),
/* TENK
* ,------------------------------------------------. ,------------------------------------------------.
* | 全半 | Q | W | E | R | T | [ | |NumLck| 7 | 8 | 9 | + | - | Bksp |
* |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
* | Tab | A | S | D | F | G | ( | | Tab | 4 | 5 | 6 | * | / | : |
* |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
* | LSft | Z | X | C | V | B |Ctrl/;| | LSft | 1 | 2 | 3 | = | UP | Del |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* | LCtrl| LGUI | LAlt | \_ | Space| Enter| MIRR | | TENK | 0 | . | Enter| LEFT | DOWN | RIGHT|
* `------------------------------------------------' `------------------------------------------------'
*/
[TENK] = LAYOUT( \
JP_ZHTG, KC_Q, KC_W, KC_E, KC_R, KC_T, JP_LBRC, KC_NLCK, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_PMNS, _______, \
_______, KC_A, KC_S, KC_D, KC_F, KC_G, JP_LPRN, KC_TAB, KC_P4, KC_P5, KC_P6, KC_PAST, KC_PSLS, JP_COLN, \
_______, KC_Z, KC_X, KC_C, KC_V, KC_B, CTL_T(KC_SCLN), KC_LSFT, KC_P1, KC_P2, KC_P3, JP_EQL, KC_UP, KC_DELT, \
_______, _______, _______, JP_BSLS, KC_SPC, KC_ENT, LT(MIRR,KC_APP), TG(TENK), KC_PENT, KC_P0, KC_PDOT, KC_LEFT, KC_DOWN, KC_RGHT \
),
/* MIRR
* ,------------------------------------------------. ,------------------------------------------------.
* | Bksp | P | O | I | U | Y | ] | | ] | Y | U | I | O | P | Bksp |
* |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
* | Tab | - | L | K | J | H | ) | | ) | H | J | K | L | - | @ |
* |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
* | Del | UP | . | , | M | N |Ctrl/:| |Ctrl/:| N | M | , | . | UP | Del |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* | LEFT | DOWN | RIGHT| App | Enter| Space| MIRR | | TENK | Enter| Space| APP | LEFT | DOWN | RIGHT|
* `------------------------------------------------' `------------------------------------------------'
*/
[MIRR] = LAYOUT( \
KC_BSPC, KC_P, KC_O, KC_I, KC_U, KC_Y, JP_RBRC, JP_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, _______, \
JP_AT, KC_MINS, KC_L, KC_K, KC_J, KC_H, JP_RPRN, JP_RPRN, KC_H, KC_J, KC_K, KC_L, KC_MINS, JP_AT, \
RSFT_T(KC_DELT), KC_UP, KC_DOT, KC_COMM, KC_M, KC_N,RCTL_T(JP_COLN), RCTL_T(JP_COLN), KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, RSFT_T(KC_DELT), \
KC_LEFT, KC_DOWN, KC_RGHT, KC_APP, KC_ENT, KC_SPC, _______, TG(TENK),KC_ENT, KC_SPC, KC_APP,KC_LEFT, KC_DOWN, KC_RGHT \
)
};
BASEレイヤも含めて4レイヤ用意しました。ぶっちゃけ3層以降はあんまり使っていません。
###BASEレイヤ###
* ,------------------------------------------------. ,------------------------------------------------.
* |CapLck| Q | W | E | R | T | [ | | ] | Y | U | I | O | P | Bksp |
* |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
* | Tab | A | S | D | F | G | ( | | ) | H | J | K | L | - | @ |
* |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
* | LSft | Z | X | C | V | B |Ctrl/;| |Ctrl/:| N | M | , | . | UP | Del |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* | LCtrl| LGUI | LAlt | \_ |Sp/MET| Space|En/MET| |Sp/MET| Enter|En/MET| APP | LEFT | DOWN | RIGHT|
* `------------------------------------------------' `------------------------------------------------'
Ergo 42の開発者様のサイトを参考にこんな感じ。意識したのは、
- 常にキーボードを持ち歩けるわけではないので、いわゆるQWERTY配列からの移行コストを小さくする。
- 普段変換くらいでしか使ていない親指を活用するため、レイヤ切り替えは親指に持っていく。
という点。ホームポジションに対して、アルファベットを同じにし、加えて左手側は全角半角切り替え(CapLck) 、Tab、Ctrl(LCtrl)、Shift(LSft)、Windowsキー(LGUI)、Altといったよく使う修飾キーを同じ位置に割り当てました。
右側も同様ですが、Pの下に-があるのが特徴です。+よりも登場頻度ははるかに多いと思いますし個人的に打つのが苦手なキーの1つなので、近くに配置しています。
APPは右クリック。あったら便利かなと思いましたがないならないで別に困らないやつ。Back Space(Bksp)とDelete(Del)はどちらを上にしようかとても悩みました。十字キーは割り当てしなかったらすこぶる不便でした。Insertはいらない子。
[]();:は中央に配置。左手で左かっこ、右手で右かっこという考え方が気に入りました。コロンセミコロンは長押し・同時押しではCtrlとして機能します。
中央最下段の3キーずつはSpaceとEnterです。左右でSpaceとEnterを割り振るパターンが多いのですが、せっかく同じサイズで作ったので、1つずつ交換しました。METとなっているのはMETAレイヤ切り替えのボタンで、押している間だけレイヤがMETAレイヤに切り替わります。左右とも真ん中のキーは純粋なSpaceとEnterとして割り当てています。
###METAレイヤ###
* ,------------------------------------------------. ,------------------------------------------------.
* | ESC | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | Bksp |
* |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
* | Tab | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 0 | + | - | ^ |
* |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
* | LSft | ! | " | # | $ | % | & | | ' | ( | ) | = | * | / | ~ |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* | LCtrl| LGUI | LAlt | _ |無変換| 変換 | TENK | | TENK |PrtScr| Pause| | | < | ? | > |
* `------------------------------------------------' `------------------------------------------------'
記号と数字担当のMETAレイヤ。
左にF1からF6、右にF7からF12を割り当て、対応する数字をその下に、さらにその数字に対応する記号をその下に配置しています。これにより移行コストがかなり小さくなったと考えています。
あとは余ったところに記号を割り振りました。バッククォート? 知らない子ですね・・・・・・
左右の真ん中TENKは次のTENキーレイヤへの切り替えです。METAキーとは異なり押してる間ではなく、押すたびにモードが切り替わるトグル型にしています。このキーはBASEレイヤ上ではMETAレイヤへの切り替えるキーにも割り当ててあります。同じキーに違うレイヤへの割り当て方法を検討した結果、METAレイヤ切り替え時にTENKレイヤ切り替え用トグルキーをを配置することで実現しました。
これにより左右で真ん中最下段を同時に押下することでTENキーモードへ切替というちょっとかっこいい感じになりました。
###TENKレイヤ###
/* TENK
* ,------------------------------------------------. ,------------------------------------------------.
* | 全半 | Q | W | E | R | T | [ | |NumLck| 7 | 8 | 9 | + | - | Bksp |
* |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
* | Tab | A | S | D | F | G | ( | | Tab | 4 | 5 | 6 | * | / | : |
* |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
* | LSft | Z | X | C | V | B |Ctrl/;| | LSft | 1 | 2 | 3 | = | UP | Del |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* | LCtrl| LGUI | LAlt | \_ | Space| Enter| MIRR | | TENK | 0 | . | Enter| LEFT | DOWN | RIGHT|
* `------------------------------------------------' `------------------------------------------------'
TENキーレイヤ。
前述のようにトグル型でレイヤを切り替えるので、もう一度TENKキーを押すまでこのモードのままです。
TENキーがないと不便かな? ということで右手にテンキーの機能を集めました。左手は元のレイヤに戻ります。右手の余ったところには記号や十字キーなんかを割り当てています。
仕事で使うかもと思って実装しましたが、特にTENキーを使うような仕事はなかった。
###MIRRレイヤ###
/* MIRR
* ,------------------------------------------------. ,------------------------------------------------.
* | Bksp | P | O | I | U | Y | ] | | ] | Y | U | I | O | P | Bksp |
* |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
* | Tab | - | L | K | J | H | ) | | ) | H | J | K | L | - | @ |
* |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
* | Del | UP | . | , | M | N |Ctrl/:| |Ctrl/:| N | M | , | . | UP | Del |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
* | LEFT | DOWN | RIGHT| App | Enter| Space| MIRR | | TENK | Enter| Space| APP | LEFT | DOWN | RIGHT|
* `------------------------------------------------' `------------------------------------------------'
MIRRORレイヤ。作ったけどほとんど使ってない。というか作ってたことを忘れる。
TENキーレイヤでは左手をそのまま割り当てに戻しました。というのもテンキー使いながら文章打つこともぶっちゃけあるかなという公算です。しかしながら右手にはTENキーを割り当てているので、そのままでは右手のキーはすべて使えない!
ということで、左手だけですべての動作ができるようにMIRRレイヤに切り替えることでBASEレイヤの右手を全て打てるようにしました。
配置は悩みましたが、そのままだとレイヤ切り替えキーと十字キーがバッティングするので、十字は左に。そうなるとキー配置が変わってしまうので左右を反転しています(さすがに十字は反転しない)。別に割り当てる必要なかったのですが、BASEレイヤと同じにしました。
##6.書き込みして微調整##
直接書き込みもできるんですが、結構めんどくさいのと、ミスると壊れるらしいので、こちらを見ながら書込環境をセッティングしました。
設定がきちんと反映されているかはキーボードの入力したときのコードを拾わなければいけません。kbvのようなソフトを使用しましょう。
あとは使いながら微調整をしてああでもないこうでもないと楽しみましょう。
QMK FirmwareのPro MicroはモゲMicroと蔑称されてる程、端子が弱く抜き差しに不安があるようです。
持ち歩いたりも検討していたので、それは怖かったため端子をマグネットケーブルで拡張しています。
USBケーブルの先だけが磁石により着脱可能になっている商品です。先を変えれば同じケーブルでUSB-mini BでもUSB-TYPE CでもLightningケーブルでもつながる便利な商品です。地味にホールの防塵防水にも役立ちます。便利。
##7.完成##
おめでとうございます! 沼へようこそ。
#感想#
作った感想は私はBを右手で打つタイプの人間だったということです。最初だけちょっとミスタイプが多かったですが、今では慣れました。
格子配列は使いにくいのでは? とちょっと思ったりもしましたが、格子配列の代表として電話やテンキー、電卓があります。これらを使っていて使いにいと思うことはあまりないのではないでしょうか。
実際に使ってみてわかったのは、列ごとに整列しているため各指ごとの役割が分担しやすく、しかも出張(本来の指で押すべきでないキーを押す動作)も行いやすいため、ホームポジションを意識しつつそれを崩した使いかたもできる理想の配列ではないかと思います。市販品にも普及してほしい・・・・・・
移行コストは意識した甲斐もあり、そこまで苦にはなりませんでした。そこまで大きく変えてないので通常のQWERTY配列にもすぐ戻れます。たまに-を打ち間違えるけど。
レイヤを切り替えるタイピングはShiftと同時押しみたいなものなので、そこまで苦ではないです。むしろ、遠くまでキーを触りにいかなくていい分ミスタイプも減りますし、ストレスフリーです。
キーキャップについてはFilco Majestouchのものだと、ホームポジションがR2にあたるのでなので、Ergo42では1行ずれます。ホームポジションのためのガイドはないと不便なので、別途UVレジンを100均で購入し、ポチを付けました。親指で触る想定のキーは普通と逆向きにして押しやすさを追求しています(最下段全部を逆向きにすると使いにくかったです)。
個人的にはあとトラックボールがついてるとめちゃくちゃ便利だなぁと思ったのでいろいろ検討してみましたが、いったん挫折。
左右の最下段の真ん中の2キーがスイッチ付きのトラックポイントとかになると画期的かなと思ったりしているので、いつか実装したい。
#Q&A#
Q.でもお高いんでしょう?
A.ぶっちゃけ安くはないです。でも楽しいです!
総額でいえばいろいろコミコミで2万円くらいでした。たしかに高いですが、知識も付きましたし、何より愛着が湧きます。
部品を交換していけば基盤さえ死ななければ一生使えるので、10年くらい使い倒せば年2,000円。
初期投資が結構必要なのでコンコルド効果で使いたくなりますし、100%自分の希望どおりなので使っていて楽しいです。
Q.BYOD(Bring Your Own Device)が認められていないんですけど?
A.会社と交渉しましょう。でも使えたら楽しいです!
どうしてもだめなら自宅で自分用に・・・・・・在宅勤務が一般化すればワンチャン。
Q.会社はフリーアドレスなんですけど?
A.うちもです。でも愛着のある道具で仕事をするのは楽しいです!
IKEAでキッチン用の小ラックを買ってお盆代わりにしています。