この記事は、OpenStream Advent Calendar 2018 の2日目の記事です。昨日は miyatay さんの CognitoxAlexaアカウントリンクが大変だった話 でした。
さて、本当はOCamlの話を書きたいところでしたが、ぶっちゃけネタがなかったので、今年いろいろ進展があったキーボードや日本語入力まわりについて書こうかと思います。
<!–more–>
プログラマーとして一番良く触るものは何か?と聞かれた時、大半の方はまず キーボード と答えると思います。もしかしたらマウスのほうが触っている時間が長い、という方もいるかもしれませんが。一日の大半をともに過ごすキーボードは、PCとのインターフェースでもあります。そんなキーボードについてちゃんと考えることは重要ではないかと思うんです。
道具にこだわるのは2流、とか言う意見 私も割といろいろキーボードを変えたり買ったりしていました。今まで買ったキーボードを古い順に時系列で並べると、こんな感じになりました。
HappyHackingKeyboard Pro Realforce Kinesis Ergodox EZ * 2 Iris Crkbd Ergodox EZが×2になっているのは、家用と仕事用に買ったからです。こう見ると結構買ってますね。
最近はあまり聞かなくなりましたが、少し前は、常駐先とかで配られるキーボード以外を使っていると、 なんでキーボードなんかにお金かけるの? と言われるときもありました。これは、道具に拘泥するな、という意味で言っていたと思います。
直近で書いた記事にも書きましたが、最近はつぎのように考えています。
仮にもプロフェッショナルなのであれば、自分が一番良く使う道具にお金をなんでかけないの?と逆に聞きたいです。スポーツでも職人でも、自分が使う道具は、自分の性能を100%発揮できるように調整したり変えたりするはずです。
弘法筆を選ばず かもしれませんが、弘法が自分で選んだ筆を使ったほうがいいものを書ける確率が上がるのは自明でしょう。
自作キーボードが増えてきた 今年は特に、日本での自作キーボード熱が盛り上がった年だと思います(個人の観測範囲では)。その理由としては、よく言われるように次のような要因が上げられると思います。
QMK Firmwareが事実上のデファクト化、高機能化 個人がPCBなどの設計をある程度気軽に行える環境が整ってきた 3Dプリンターやレーザーカッターを利用するハードルが下がった 個人販売をサポートするプラットフォームがある程度充実してきた 今年私が作ったIris/Crkbdは、どちらも開発者の方が自分のEnd gameを目指して試行錯誤された結果出来たものです。無論、あくまでその開発者の人にとってのEnd gameを目指したものである以上、万人受けはしません。
ですが、各種設計がオープンソースとなっているので、元のキーボードに触発された個人がまた新しいキーボードを派生させていく様はみていて面白いです。
2018年のキーボードと配列 最近は左右分離+少キー構成がマイブームです。ErgodoxからIris/Crkbdに変えたのも、結局利用しづらいキーが多く、有効利用できなかったというのがあります。
あるキーボードを特徴づけるのは、キーの物理的な配列とキースイッチです。かつ、QMK Firmwareなどを利用しているキーボードでは、キーの論理配列=キーマップの自由度が、市販のキーボードとは比較出来ないほど高いです。 キーマップによっては、元々のキーボードとは全く違うものになる場合すらあります。
元々キーの論理配列と言えば、QWERTY配列を代表として、QWERTY配列から派生したColemak/Workmanや、Dvorak配列など色々ありますが、あくまでアルファベット部分の配列を指していました。それらも、キーボード自体がそういう配列になっているというわけではなく、何らかのツールで実現されていました。
そういった配列変更をキーボード単体で完結させることが出来るようになり、かつ他にも様々な機能を付加することも出来るようになりました。2018年の12月現在、私が利用しているCrkbdの配列はこんな感じになっています。
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_QWERTY] = LAYOUT_kc( \ //,-----------------------------------------. ,-----------------------------------------. TAB, Q, W, E, R, T, Y, U, I, O, P, BSPC,\ //|------+------+------+------+------+------| |------+------+------+------+------+------| LCTL, A, S, D, GUIF, G, H, GUIJ, K, L, SCLN, QUOT,\ //|------+------+------+------+------+------| |------+------+------+------+------+------| LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT,\ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------| M_EISU,LOWER,SFT_SPC, SFT_ENT, RAISE,M_KANA\ //`--------------------' `--------------------' ), [_LOWER] = LAYOUT_kc( \ //,-----------------------------------------. ,-----------------------------------------. ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, DEL,\ //|------+------+------+------+------+------| |------+------+------+------+------+------| CTLTB, LCTL, LSFT, LALT, LGUI, XXXXX, XXXXX, RGUI, RALT, RSFT, RCTL, F11,\ //|------+------+------+------+------+------| |------+------+------+------+------+------| LSFT, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F12,\ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------| M_EISU,LOWER, SFT_SPC, SFT_ENT, RAISE,M_KANA \ //`--------------------' `--------------------' ), [_RAISE] = LAYOUT_kc( \ //,-----------------------------------------. ,-----------------------------------------. ESC, EXLM, AT, HASH, DLR, PERC, CIRC, AMPR, ASTR, LPRN, RPRN, BSPC,\ //|------+------+------+------+------+------| |------+------+------+------+------+------| CTLTB, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, MINS, EQL, LCBR, RCBR, PIPE, GRV,\ //|------+------+------+------+------+------| |------+------+------+------+------+------| LSFT, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, UNDS, PLUS, LBRC, RBRC, BSLS, TILD,\ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------| M_EISU,LOWER,SFT_SPC, SFT_ENT, RAISE,M_KANA \ //`--------------------' `--------------------' ), [_NAGINATA] = LAYOUT_kc( \ //,-----------------------------------------. ,-----------------------------------------. TAB, Q, W, E, R, T, Y, U, I, O, P, JA_AT,\ //|------+------+------+------+------+------| |------+------+------+------+------+------| LCTL, A, S, D, F, G, H, J, K, L, SCLN,JA_CLN,\ //|------+------+------+------+------+------| |------+------+------+------+------+------| LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT,\ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------| M_EISU,LOWER, NSS, NSE, RAISE,M_KANA \ //`--------------------' `--------------------' ), [_ADJUST] = LAYOUT_kc( \ //,-----------------------------------------. ,-----------------------------------------. RST, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, DEL,\ //|------+------+------+------+------+------| |------+------+------+------+------+------| XXXXX, LCTL, LSFT, LALT, LGUI, XXXXX, LEFT, DOWN, UP, RGHT, XXXXX, F11,\ //|------+------+------+------+------+------| |------+------+------+------+------+------| LSFT, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F12,\ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------| M_EISU, LOWER,SFT_SPC, SFT_ENT,RAISE, M_KANA \ //`--------------------' `--------------------' ) }; Crkbd/Irisなどで利用されている QMK Firmware では、=layer= という概念を追加することで、物理的に42キーしか無いキーボードでも、
...