Keyball44のファームウェアを変更してみる
前回の記事の続きです。
この記事の内容は、先月のKeyball制作直後にためしにKeyball44のファームウェアを変更してみた作業メモです。
以下の記事で紹介されているファームウェアを入れてみます。
ファームウェアをビルドする環境の作成が必要です。以下の公式ドキュメントを見ながらセットアップします。
環境ができれば、以下のようなコマンドでビルドできます。
qmk compile -kb keyball/keyball44 -km takashicompany
hexという拡張子のファイルが生成されるので、これをKeyballに書き込みます。
Keyballへのファームウェアの書き込みは、以下のツールからできます。
Pro Micro Web Updater
- Choose Fileを押して、hexファイルを選択
- flashボタンを押す
- Keyballについているリセットのタクトスイッチを素早く2回押す(私はUSBを接続しているほうで押した)
- 接続先にPro Microの選択肢が現れるのでそれを選択する
- 書き込みが終わるまで待つ
最初は左右両方のKeyballに同じファームウェアを書き込む必要があるようです。ファームウェア修正時は修正内容によってはUSBケーブルを接続している側だけ書き込めば動くようです。
RemapのサイトでKeyball44に接続し直すと、レイアウトは次のようになりました。
Keyball制作直後にこのファームウェアにして少し触ってみた結果、私にはどうも合わなそうだと感じました。
トラックボールを少し動かすと自動でレイヤーが変わりマウスボタンの操作ができるようになるという挙動が私には馴染めませんでした。
そのため、ファームウェアを戻すことになったのですが、この方のファームウェアのソースコードを見て、ファームウェアのソースのいじり方がわかりました。ソースコードが大いに参考になったので、次の私のファームウェアカスタマイズに活かせることになりました。
Pro Micro Web Updaterで私がハマった点
この Pro Micro Web Updater はChoose Fileでhexファイルを選択して書き込むと、そのあとファームウェアをビルドしなおしてhexファイルを選択しなおしてもhexファイルの変更が反映されないようなのです。ビルドしなおして、ファームウェアを書き込みなおしてもKeyballに動作が反映されないという現象に悩まされました。どうやらPro Micro Web Updater のページを都度リロードしてhexファイルを選択しなおせば、新しいファームウェアの書き込みが行われることがわかりました。
RemapでKeyball44をいじってみる
Remapは自作キーボードのキー配置をカスタマイズできるツールです。KeyballシリーズはRemapに対応しており、Keyball44を接続したPCでRemapを開けばキー配置をカスタマイズできます。
この記事はKeyball44を制作して最初にRemapに接続したときの記録です。制作直後にすべてのキーが機能するかどうかを確認するために最初にRemapを使いました。
Remapのサイトの配色は現在クリスマスバージョンになっているらしいのですが、私はこのバージョンしかまだ見たことがなく、ノーマルバージョンをまだ知らないです。
Keyball制作日記はQiitaに書きました。
RemapでKeyball44にアクセス
Remapのトップページにある「CUSTOMIZE YOUR KEYBOARD」をクリックすると、次のような画面になります。
「+KEYBOARD」を押すと、デバイス選択画面になります。Keyball44にファームウェアが書き込まれていれば、選択肢に出てきます。ファームウェア書き込み前は選択肢に出てきません。
デバイスを選択すると、次のようなキーレイアウトの表示になります。
左上の「ⓘ」アイコンを押してみると、私のKeyball44では次のような表示になりました。
Col x Row が 6x8 になっているのがこのときはよくわかりませんでしたが、あとからファームウェアのソースコードを見てわかりました。ファームウェアの中では左右のキーボードを縦に並べて配置しています。左手側が上で、右手が下です。 Cols=6 は横にキーが6個並び、 Rows=8 は縦にキーが8段(片手あたり4段)並んでいることを表します。ファームウェアの内部でキーを識別するための座標は、左手側はCol=0が左端、Col=5が右端、右手側はCol=0が右端、Col=5が左端です。
https://github.com/Yowkees/keyball/blob/main/qmk_firmware/keyboards/keyball/keyball44/keyball44.h
トラックボールの配置を設定
トラックボールを左右のどちらに置いたかを最初にRemapに教えてあげる必要があるようです。右のほうに「Layout Option」というメニューがあるので、そこから左右いずれかを指定します。
「Right」を選択すれば、トラックボールが右にあるキー配列がRemapの画面上に再現されます。
制作したKeyball44の動作確認
制作したKeyballのキーがすべて動作するかを確認するために、Remapの右のほうにある「Test Matrix mode」を押します。
こんな画面になります。
Keyballにあるキーを押してそのキーコードがPCに届くと、該当位置が青くなります。キーを全部押して、全部青くなることを確認します。
どれかがWindowsボタンに割り当てられているようで、Windowsのスタートボタンが開く時がありますが、そのときは落ち着いてブラウザにフォーカスを戻します。
USキーボード or JISキーボード
Remapの画面の右上にEnglishかJapaneseかの区別が表示されています。最初Englishと表示されていました。その状態でKeyball44でShift押しながらセミコロンを押すと、 +
が入力されます。つまりJISキーボードの動きになっており、Remapでの表示とは食い違っています。USキーボードなのかJISキーボードなのかの設定はWindows側にあり、Remapにはその設定が反映されていないようです。私はJISキーボードに慣れていて、それを変えるつもりはないので、右上の言語選択を「Japanese」に変えました。JapaneseにするとRemap上のキー配列の記号の位置が変わり、実際の動きと一致するようになります。
デフォルトのキー配置
Keyball44標準のファームウェアでのキー配置をここにスクショで貼り付けておきます。レイヤーが0から3までの4つあります。
Keyball44のためにそろえた部品たち
自作キーボードKeyball44制作のために買ったパーツや道具の一覧を掲げておく。道具に関しては一部もともと保有していたものも含まれる。
前回の記事
Keyball44キット本体
Keyball44のキットにはパーツのほかは梱包物一覧を案内する書類が1枚であり、制作方法はネット上のドキュメントに誘導している。
キットに含まれないパーツ
Keyball44のキットに含まれず、別途購入したパーツは次の通り。
ProMicro
- 必要な数: 2個
- 遊舎工房実店舗で購入
Cherry MX互換キースイッチ
- 必要な数: 44個(親指ロープロ仕様なら39個)
- 私は親指も同じ形のキーにすることにしたので44個にした。制作中の破損に備えた予備を含めて46個を購入した
- 遊舎工房実店舗で購入
- 実店舗ならばさまざまなキースイッチを実際に押してみて選ぶことができる
- 私が選択したキースイッチ: Gateron Silent スイッチ クリア
- 打鍵音が一番静かなことが選定基準
- 店舗でのキースイッチテスターでの番号は: 311
Gateron Silent スイッチshop.yushakobo.jp
choc互換ロープロファイルキースイッチ
- 必要な個数: 5個(親指ロープロ仕様のみ)
- 私は親指も同じ形のキーにすることにしたので不要のため購入しなかった
34mmトラックボール
- 必要な個数: 1個
- 遊舎工房のネットショップで購入
- 実店舗に行ったのにこれをあとでわざわざネットで購入したのは理由は覚えていないがたぶんお店になかったのだと思う
ぺリックス交換用トラックボールshop.yushakobo.jp
TRRSケーブル
- 3極か4極
- 左右の接続のため
- 遊舎工房実店舗で購入
USBケーブル
- PCと接続するため
- 遊舎工房実店舗で購入
- 家に転がってるかもしれないが店舗に行ったらあったので
- PCのUSB Type-Cのポートが埋まっており、キーボードに接続できる余地がType Aしかなかった。ただキーボード側はUSB Type-Cにしたかった。なのでケーブルはType-AとType-Cのものにした
Cherry MX互換キーキャップ
- 必要な数: 44個(親指ロープロ仕様なら39個)
- 私は親指も同じ形のキーにすることにしたので44個にした
- 私はDSAというプロファイルを選択した
- キーの配置を自由に変更できるように全部同じ形にするため
- DSAならば店舗にたくさん無刻印のキャップがあったため
- 高さが低くて打刻感が私好みかもしれないと思ったため
- 自由に配置を変更できるようにしたいため
- いろんな色をそろえる
- 全部無刻印
- 色のバリエーションの配置を決めていないので配置自由度のために多めに購入して、全部で52個+肉球になった
- 購入先
- 遊舎工房実店舗で22個と肉球
- 遊舎工房のネットショップで30個
- 実店舗で白のキャップが在庫切れだったので白だけネットで購入した
- 自作キーボードを作っている人の記事を見るとなぜか肉球を1つ忍ばせている人がいつので、先人たちのマネをすることにした
DSA 無刻印キーキャップ(1個)shop.yushakobo.jp
ZOMO PLUS プラスチック版 肉球キーキャップshop.yushakobo.jp
ロープロファイルキーキャップ
- 必要な個数: 5個(親指ロープロ仕様のみ)
- 私は親指も同じ形のキーにすることにしたので不要のため購入しなかった
キートップシール
キーボードに手を置いたときにホームポジションが触覚でわかる必要があると思った。普通のキーボードならFとJのキートップに凸凹があったりする。今回のキーキャップは全部同じ形で全部同じ触り心地なので、ホームポジションがわからなくなる心配があった。そのためFとJにだけシールで凸凹にしようと思った。
お店にあったのでなんとなくこれを買った。シールだったらなんでもよかった。2つだけで充分だった。
道具
はんだごて
- Keyballの組み立てガイドには「LEDを実装する場合は温度調整可能なもの」とあるが、私は今回はLEDなしにしたので、家にあった安物でとりあえずやってみることにした
家にあったものはこれ
はんだこて台
- 家にはんだごてがあるのにはんだごて台がなかったのでAmazonで買った
はんだごて(SR-30)をはんだごて台(ST-11)に差し込んだところ、大きさがちょっと合わなくて不安定化も。とりあえずこのまま使った。
はんだ
- Keyballの組み立てガイドには「LEDを実装する場合は低融点のものが有効」とあるが、私は今回はLED不要なのでなんでもよさそうだった
- はんだごて初心者には鉛入りのほうがいいという記事が多かったので、鉛入りにした
融点は 183~193度と書いてある
はんだ吸い取り線
フラックス
キーキャップキースイッチ引き抜き工具
- 遊舎工房実店舗で購入
テスター
はんだ付けがうまくできているかチェックするためにテスターがあったほうがいいのではと思った。昔に買った安いテスターがあったのでそれを使うことにする。久しぶりに電源を入れたら "-1" という意味不明な表示がされていた。安物だったから壊れたかと思ったが、電池交換したら動くようになった。
(完成後の追記:テスターは結局使わなかった)
そのほか
このあたりが他にも必要らしい。「0番+精密ドライバー」というのはよくわからないが家にあったドライバーで済ませることにした。ピンセット、カッター、マスキングテープは家にあったので購入しなかった。今回私は親指ロープロファイルを採用しないことにしていたため、紙やすりは不要だと判断した。
- 0番+精密ドライバー
- ピンセット
- カッター
- 150番手くらいの紙やすり(親指chocロープロ仕様とする場合のみ)(私は用意しなかった)
- マスキングテープ
合計でたぶん4万円ぐらいだ。
材料や道具は以上。
次の記事(Qiita) qiita.com
Keyball44のパーツを遊舎工房で買う
自作キーボードのお店に行った。 秋葉原にある遊舎工房というお店である。
前回の記事
キースイッチとキーキャップを買いに実店舗に行った。キースイッチとキーキャップ以外もなにかあれば買う。
お店に行ってわかったこと概要
- 自作キーボードという今まで知らなかったマニアックな世界を覗き見ることができて楽しかった
- キースイッチは店舗で触ってみれば簡単に選ぶことができる
- キースイッチは3ピンと5ピンの2種類あり、キーボード基盤がそれに対応している必要がある。両方に対応している基盤が多いのだとは思う
キースイッチ
キースイッチとはこういう部品である。これは実際に私が購入したもの。
お店に行ってからわかったのだが、キースイッチにはピン数が3ピンと5ピンの2種類あるらしい。自作キットによってどちらに適合するかが決まるらしいが、どちらのピン数にも対応できる自作キットも多いらしい。
Keyballがどちらタイプなのかわからなかったが、基盤の写真を見ると5つぐらい穴があるように見えたし、店舗にあるキースイッチの種類として5ピンが多かったので、メジャーな5ピンで大丈夫なんだろうと思って5ピンのものを選んだ。
ピンが5つ
実店舗ではいろいろなキースイッチが並べられ、実際に押して選ぶことができる。自作キーボード素人が実店舗に行ったらどんな感動があるかは、次の動画が参考になる。楽しそうである。
触ってみた結果、Gateron Silent スイッチ クリアというやつになった。46個買った。44個あればいいのだが、制作中の破損に備え予備として2個加えた。(完成後の追記:組み立て完了後の余りが3個あった。お店の人が1つ余分に入れてくれたのかもしれない)
キーキャップ
キーキャップは、実店舗に行く前にネットで調べていてわかっていたことだが、キャップの上面の形がいろいろある。キーボード全体で手に沿って曲面になるように、1段目用(R1)、2段目用(R2)、、、などに形が分かれているものもある。位置によって形を変えることをせずに全部同じ形にする前提のものもある。キーキャップの形のことをプロファイルというらしい。
私はキー配置を自由に変更できるようにしたいので、キーキャップの色の配置も後で自由に変更できるようにしたかった。そのため位置によらず全部同じ形にしたかった。そしてその中で実店舗でたくさん売っていたことを理由に、DSAというプロファイルにした。DSAの中から色だけ適当に選んだ。自由に配置できるようにしたかったので、無刻印である。
DSA 無刻印キーキャップ(1個)shop.yushakobo.jp
ホームポジションが手触りでわかるようにFとJに凸凹があるといいと思ってキーキャップを探した。しかし、そのようなものはなさそうだったので、FとJにだけシールを貼ることにした。
キースイッチとキーキャップの組み合わせにも相性があるのかわかってなかったが、実店舗で見た感じ接続部分の形(十字の形の凸凹)が同じに見え、組み合わせは気にしなくてもいいのだろうと思った。
そのほか
そのほかにProMicroなどを買った。
買ったものは次の通り。
- キースイッチ: 44個+予備2個
- キーキャップ: 全部で44個必要だが、お店では色のバリエーションの在庫が少なかったため20個余りを購入し、残りはネットで購入
- ProMicro: 2個
- TRRSケーブル
- USBケーブル
- キートップシール
- キーキャップキースイッチ引き抜き工具
キーキャップキースイッチ引き抜き工具
ほかにも購入が必要なものがたくさんあるので、帰路あるいは帰宅後に注文した。
Keyball44という自作キーボードキットを作ることに決めた
自作キーボードを作ることにした。
経緯は前回の記事参照
私はRemapというツールでカスタマイズ性を確保したいだけなので、自作といっても完全にゼロから設計するのではなく、自作キットで十分である。
自作キーボードを調べていたら、トラックボールを内蔵している自作キーボードのキットがあった。Keyballというシリーズだ。これを見つけて、もうこれしかないと思った。トラックボールが右手の下にあるのは合理的に思える。右手の下の段はキーがあってもどうせ指が動かなくて使えないからだ。このスペースを有効活用できる。
これを完成させるにはキットのほかにたくさんの部品を集める必要がある。もろもろ含めると合計でたぶん4万円ぐらいかかる。いままで100円のキーボードしか買ったことのない私が、突然2桁高いキーボードを買うことになる。
Keyballを見つけて、もうこれがほしいと思ってしまったので、以下に書いた自宅キーボード選定基準は後付けの可能性も否定できないがいちおう書いておく。
キーボードを選定するうえでの要件
- Remapでカスタマイズできること、またはファームウェアを直接いじってカスタマイズできること
- 持ち運びしやすいよう極力小さいこと(≒キーの数が少ないこと)
- トラックボール内蔵。手の移動が少なくて済む位置にあること
- オフィスでも使えるよう打鍵が静かなこと
優先度の低い(いらない)機能
- ピカピカ光る機能
要件を満たすものはほかにもあるだろうが、Keyballが欲しくなったのである。
左右分離はこだわっていなかったが、分離していると持ち運びやすいかなぐらいに思った。(完成後の感想追記:分離しているとむしも持ち運びづらい。しかし打鍵しているときは角度を左右別々に調整できるので、楽だと感じた)
Keyballを紹介しているブログ記事やYouTube動画を見て、制作作業とカスタマイズと使用感をイメージした。
トラックボールがマウスの代わりになる。マウスのボタンはキーボードのキーに割り当てる。キー割り当てのレイヤーを別にできるらしいので、普通の文字のキー位置にマウスボタンを割り当てられる。スクロールもトラックボールでできるらしい。(完成後の感想追記:普通の文字のキー位置にマウスボタンを割り当てると混乱したので、トラックボール利用時にマウスレイヤーへの自動切り替えはさせないことにした)
右手の下にトラックボールがあるのもちょうどいい。このエリアにキーがあっても私はほとんど押せないからだ。
打鍵音は、自作キットの性質ではなく、キースイッチという部品の性質らしい。好みのキースイッチを選べばいいらしい。キースイッチの上にキーキャップがある。キースイッチもキーキャップもそれぞれ独立にほしいものを選ぶ。これらはキットには含まれず別に手配が必要だ。キースイッチは押したときの感触や打鍵音に関わるから、ネット上だけの情報では選べなくて、実店舗に行って触って選んだほうがいいかもと思った。
欲しいし使いこなしたいが、事前の不安点としては、大量のはんだ付け作業を経て作りきることができるかどうかと、独特のキー配置に慣れるかどうかの2点である。
一時期電子工作をしていたことはいちおうある。
この時期にはんだごても少し触っていたが、自作キーボードのキーの数ほどはんだ付けを一度にしたことはなく、はんだ付けは不安だ。はんだ付け箇所が極力少ないほうがいい。よって、自作キーボードによくあるLEDを光らせる機能は使わないことにする。LEDを付けるだけではんだ付け箇所が200箇所以上増えるのである。PCで文字を打つのが目的で、光らせたいわけではないのだ。
独特のキー配置に慣れるかどうかも不安な点で、特に親指付近のキーを押せるようになるかどうかが不安である。親指付近は普通は大きいスペースバーがあるものだ。その位置に普通の大きさのキーが並び、使い分ける必要がある。親指付近に重要なキーを複数配置できるのは合理的に思えるので不安だが使いこなせるようになりたい。(完成後の感想:1週間ぐらいたってもまだ親指付近のキーを素早く押しわけることができていない)
キーが縦に並んでいることにも注意だ。普通はキーが斜めに配置されている。慣れるまでは誤入力が多いかもしれない。(完成後の感想追記:最初の1週間ぐらいは誤入力だらけだったがじょじょに慣れてきた)
Keyballにはキー数のバリエーションが39個、44個、61個のものがある。
- 61個: 一番キー数多く、4段ある
- 44個: 数字の段がなく、3段になる
- 39個: "A" の左や "P" の右の列がなく、一番コンパクト
小さいほうがよかったので、61個は多すぎと思った。数字を犠牲にして小さいほうを選ぶ。数字はなにか押しながらなにかという組み合わせで入力する。39個だと小指エリアが少なすぎる。私は小指で外側のキーを押すことは不自由なくできているし、39個だとさすがに特殊キーが少なすぎて慣れるのが大変ではと思った。なので、44個のものにした。
キースイッチとキーキャップを選定しなければいけない。これは実店舗に行って触ってみて決めることにした。
実店舗に行ったのになにも買わないということにはならないだろう。実店舗に行き、パーツを買った時点で後戻りできないことになる。
はんだ付けして、新しいキーボードを手が覚えるまで走り切る。買う前からイメージしたせいで、すでに既存のキーボードでは加速度的に不満がたまるようになり、作業効率が下がってしまったのだ。
あと、ノートPCのキーボードを触っていると最近低温やけどになってる気がする。ときどき熱っって感じて手がびっくりするときがある。PCが熱すぎるかも。早くキーボードが欲しい。
これまでのキーボードにまつわる経歴
久しぶりにブログを更新する。
最近PCのキーボードを新しくした。その経緯と新しいキーボードに関することをこれからいくつかの記事に分けて書こうと思う。まずはこれまでの経緯を書く。
以前私はPC98用のキーボード を使っていた。PC98というのは20世紀にNECが販売していた独自のアーキテクチャのパソコンである。PC98が生産終了しても相当しばらくの間キーボードだけはPC98のものを使っていた。PC98のパソコン本体を私が使っていた期間はごくわずかで、キーボードだけをずっと使い続けていた。
98キーボードはUSBなんてものが登場する前の製品なので、現代のパソコンに接続するにはPC98のレガシーな接続規格をUSBに変換する装置が必要だった。生産終了した98キーボードはハードオフで100円で買うものだったが、変換装置は1万円ぐらいするものだった。変換装置は家電量販店やパソコンショップにあるようなものではなく、製作している会社から直接取り寄せるマニアックな代物だった。
98キーボードはカーソルキーが普通に上下左右に並んでいて使いやすかった。現代のキーボードのカーソルキーは山型の配置だったり、上下がやたら小さかったりして使いづらい。98キーボードはスクロール上下や行の先頭最後への移動も、キーボードに視線を移すことなく手触りだけでキーの場所がわかる。テンキーもあり大きなキーボードだったが、端のほうにある特殊キーも含め完全にブラインドタッチできた。単に私の指先や手のひらの触覚が98キーボードに最適化されすぎていただけの可能性もあるが。
現代のキーボードはごちゃごちゃとキーが配置され、視線をキーボードに落とさないとキーを見つけることができない。とくに右下など端のエリアはボタンが飾りにしかならない。端のエリアはパソコンやキーボードによって配置が異なるし、一番触れる機会の多い業務PCも愛着があるわけではないので、指先がキー配置を覚えられない。
98キーボードにこだわって使い続けていたわけだが、あるとき変換装置の予備を買おうとしたらもう入手できなくなっていることに気がついた。98キーボード以外のキーボードで入力することができない指になっていたため、98キーボードが万が一壊れたときに備え予備を確保しようと100円のキーボード本体は複数買えたが、変換装置がすでに入手困難だった。製造元に問い合わせたが、中のパーツに入手困難なものがあるために製造てきなくなったとのこと。
しかし、98キーボードの変換装置が入手不可になってまもなく、個人PCも業務PCもMacに統一できた。Windows PCのキーボード配置にはなじめなかったが、Macのキー配置にはあっさりなじむことができた。MacはEmacsキーバインドが使えるため、キーボードの右端のエリアを使わずに済むためであった。以前からエディタはEmacsを使っていたためストレスなくMacに慣れることができた。Macへの移行により98キーボードから卒業できた。
時が流れ、業務PCが再びWindowsになった。それ以降私はPCのキーボード操作が不自由になってしまった。
WindowsでキーバインドをカスタマイズしまくってEmacsキーバインドに近づける努力をした。以前はKeyhacを、今はAutoHotkeyなどを使っている。しかしアプリによって、あるいは時と場合によってキーバインドのカスタマイズが効かないときもあり、大変なストレスである。ブラウザ上のアプリでテキスト編集中に切り取り(Ctrl+W)しようとしたら突然アプリが消える(タブが閉じられる)事故がよく起きる。ファイルを保存(Ctrl+X Ctrl+Sの2ストローク)しようとしたら選択していた部分が消え(切り取り)ただちにファイルが保存されてしまうこともある。何を押せばコピー&ペーストができるのかがわからなくなって、マウスで右クリックしてメニューを選ぶこともよくある。ChromeのDeveloper Toolsを開くためのショートカットが使えず、毎回マウスでポチポチしないと開けない。
エディタはTerminal上でのEmacsを使えるのでテキスト編集は不自由ないが、GUIアプリを操作するのがつらい。
そして、テキスト編集がEmacs以外でできないのも大問題である。
昨今、開発時にVSCodeのような環境を使うのが当たり前になっている。VSCodeは開発に便利な機能が多くそろっており、本当はVSCodeを使いこなしたいが、Emacsから離れられない。VSCodeにEmacsキーバインドを実現するプラグインを入れている。それでも操作性がEmacsと完全に同じになるわけではなく、VSCodeの操作は大変ストレスである。
ここ数年は、1年に一度ぐらいのペースでVSCode移行チャレンジをしてきた。移行しようと決めてEmacsを起動しないように心に決める。しかし、途中で挫折しEmacsに戻ってしまう。VSCode移行チャレンジをなんどかやってきたが、VSCodeになじめなかった。
ただ、今年に入ってGitHub Copilotなども普及してきて、さすがにVSCodeに移行しないと時代についていけなくなるという焦りが出てきた(数年前から同じことを繰り返し思っているが)。そして改めてVSCodeに完全移行したいのだ。
KeyhacやAutoHotkeyなどのソフトウェアでEmacsキーバインドを再現するのもいい加減疲れてきたのである。どんなに設定してもうまくいかないケースがあるのだ。Windowsを使い始めてから何年も経つのにいまだにキーボードを使いこなせてない。
そんな中、最近Remapというキーボード配置をカスタマイズできるツールを知った。Remapはカスタマイズ結果をキーボードのハードウェア側に記録する。レイヤーの概念があるし、単発で押したときと長押しした時とで役割を変えられるし、普通の文字のキーも修飾キーも対等にカスタマイズできる。これを使えば欲しいキーバインドがだいたい実現できそうである。
RemapでキーバインドをカスタマイズすればWindows上のソフトウェアでカスタマイズする必要がなくなるし、Windowsからは普通のキーボードとしてキーコードを受信して標準の動作をすればよいので、カスタマイズがときどき効かないといった問題も起きなくなるだろう。PCが変わるごとにキー配置のカスタマイズに苦労することもなくなる。これまでカスタマイズが大変すぎてPCの交換ができなかったのである。
私がずっと欲しかったキーバインドのカスタマイズはRemapだったのだ。
制約として、Remapというツールは自作キーボードにしか使えない。それならばキーボードを自作しよと考えた。Remapは自作キーボードの界隈ではデファクトのようで、自作キーボードのためのソフトウェアらしい。だが、私はRemapを使うために自作キーボードにすることになる。自作キーボードならば愛着がわき、キー配置を覚えるモチベーションにもなり、それが結局はスムーズなキーボード操作につながるだろう、という期待もある。
自作キーボードに移行しそのキーバインドに慣れたら、今度は逆にEmacsを使えなくなるはずである。切り取りのつもりでCtrl+Wを押したらCtrl+Xのキーコードが送信されることになり、Emacsでは切り取りの動作にならないからだ。Emacsキーバインドをハードウェアで実現することの引き換えに本物のEmacsをあきらめることになる。ここにきてEmacsからVSCodeに完全移行が実現することになる。
Terminalでのコマンドライン操作には支障がでないように慎重にキーバインドを設計するつもりである。例えばCtrl+KはTerminal上でCtrl+Kになるようにし、GUIアプリではCtrl+Kの操作をあきらめる。
自作キーボードに慣れたらそれ以外のキーボードが使いづらくなるはずなので、自作キーボードは持ち歩けるようにする必要がある。したがって極力小さくなるようにキーの数を絞る。そして、持ち歩きの利便性のためにトラックボールを内蔵したキーボードにしたい。
ちなみに私はトラックボールを使ったことがない。果たして慣れることができるだろうか。
自作キーボードも初めてである。はんだ付けの経験は少ないのだが、うまく作れるだろうか。自作キーボードに出てくる用語がぜんぜんわからないので、ブログや動画を見まくって理解するしかない。
さらにいうと、自作以前に私はキーボードをほとんど買ったことがない。私は98キーボードとMac標準以外で使いこなせそうなキーボードに出会ったことがないので、PC標準添付以外のキーボードを購入したのは、ハードオフで買ったの100円の98キーボードだけである。
ところで、最近私は韓国語を勉強している。だからPCでハングルの文字を入力したい。Windowsで入力言語をインストールすれば入力できるが、言語切り替えをしないといけない。もちろんショートカットで切り替えられるのだが、このショートカットがとても押しづらい。言語の切り替えはみんなが使うような機能ではないから押しづらい組み合わせしか与えられないのだろう。自作キーボードならば専用の切り替えキーを用意できるため、ハングルを入力する心理的障壁が大幅に減るはずである。これも自作キーボードに移行したいきっかけのひとつである。
いちおう市販品のキーボードのカスタマイズ性も軽く調べたが、自作に比べるとキーバインドのカスタマイズ性が劣りそうである。
ということで自作キーボードを検討することした。次の記事に続く。
JavaScriptのブラウザ上でのデバッグログをconsole.logのかわりにHTMLに表示
スマホ実機での動作確認時などで、開発者ツールが使えない状態で、画面上に気軽にJavaScriptオブジェクトをログ出力させます。HTMLに <div id="log"></div>
という要素を配置しておき、JavaScriptから任意のオブジェクトの内容をHTMLに表示させます。
console.log
とまではいかないものの、オブジェクトもJSONで整形して表示します。JavaScriptオブジェクトのプロトタイプをすべてたどって属性を表示します。すべての属性値を表示してしまうと膨大になってしまいますので、階層数に上限を設けました。
function log(obj) { function getAllProperties(obj, maxDepth) { if (obj === null) { return null; } if (typeof obj !== "object") { return obj; } const cloneObj = {}; let currentObj = obj; while (currentObj !== null) { if (maxDepth <= 0) { cloneObj["..."] = "..."; break; } const currentProps = Object.getOwnPropertyNames(currentObj); currentProps.forEach(prop => { if (!(prop in cloneObj)) { const v = obj[prop]; cloneObj[prop] = getAllProperties(v, maxDepth - 1); } }); currentObj = Object.getPrototypeOf(currentObj); maxDepth--; } return cloneObj; } const logElem = document.getElementById("log"); const message = JSON.stringify(getAllProperties(obj, 3), null, " "); logElem.textContent = message + "\n----\n" + logElem.textContent; console.log(obj); }
#log { white-space: pre-wrap; }
<div id="log"></div>