浅いキースイッチがなかったので自作することにした

# はじめに

昨今キーボード界隈が賑わっています。

しかし、実際にキーボードを買ってみると、いくら練習してもlaptop備え付けのものよりタイピング速度が速くならないことがあります。これは多くのキースイッチが深く押すことを前提に作られているからです。

備え付けの薄型キーボードが好みだった自分はそのギャップに満足できず、浅く打てるキースイッチを自作するに至りました。

共感が得られれば誰かが製品化してくれるんじゃないかという淡い期待と、キーボード沼に落ちる過程の参考(と反面教師)になればと思い、試行錯誤とその結果を書こうと思います。

# 経緯
人々がキーボードにお金をかける理由はいろいろあります。

自分の場合は以下でした。
- 「一生使うのでいいモノが欲しい」
- 「入力機器を良くすれば効率が良くなる」

というわけで数万円単位のキーボードを購入しました。
趣旨と外れるので詳細は省きます[^kinesis]が、2週間で慣れ、楽にタイピングできるようになりました。

### タイピング速度の低下

しかし、1ヶ月経っても元の備え付けのキーボードよりタイピングが速くならなりませんでした。

むしろ練習するほど元のキーボードでのタイピングが速くなり、購入したキーボードが一種のトレーニング器具のように思え、虚しさが募っていきました。

具体的には以下の不満がありました。
- `k`→`i`等の同じ指での連続入力が遅くなる
- 親指単体での`⌘` `⌥`の同時押しが難しい

原因はキースイッチの底打ちの深さだと考えました。
もっと浅ければ水平方向の移動がメインになり、運指が楽になると思いました。

(左: 底打ちが深いと垂直方向の移動が大きい, 右: 浅いと水平方向の移動がメイン)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676735/1a10a478-d21d-59b0-e7ce-6fd8b134bf06.png" width="500px">


せっかく万単位のお金を払った[^timeismoney]のだから、快適に打てるようにしたい。
幸いにも購入したキーボードは改造が容易で、自分は電子工作の理解がある。よりよいキースイッチを見つけて交換してみよう。

こうして、サンクコストバイアス-ドリブンで「浅いキースイッチ」を探求することになりました。

# 事前知識
一応キースイッチの構造とPre/Total Travelについて説明しておきます。

その他の用語は、https://scrapbox.io/self-made-kbds-ja/ で検索するとわかると思います。

キースイッチの構造は以下のようになっています。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676735/10a9c401-4d5d-16e3-6a2f-7e3505d13397.png" width="320px">

- キーキャップ: 濃いグレー
- ステム(軸): 水色
    - ステムの足: 右下の突起
- ハウジング: 薄いグレー
- スプリング: ぐるぐるの部分
- 金属部品: 赤と青

キーキャップはステムにはめ込む形でくっついています。
キーを押すとステムが押し込まれ、赤と青の金属部品が接続され電気的信号に変わるからくりです。この電気的に接続する最小の深さを **Pre Travel** (または作動点,アクチュエーションポイント)と呼びます。

さらに深く押し込むとステムがハウジングにぶつかり底打ちする。この深さを **Total Travel** と呼びます。

一般的なメカニカルスイッチは、Pre Travelが**1-2mm**、Total Travelが**3-4mm**です。

現在のMBPのシザー構造のMagicKeyboardは、(Pre Travelは不明ですが) Total Travelは約**1mm**です[^magickeyboard]

これから一般的なメカニカルスイッチは底打ちがかなり深いことがわかります。

# 探求

Total Travel **1mm** 程度を実現するためにいろいろ調べてみました。
遊舎工房で好みのスイッチを探したり、ブログを読んだり、youtubeを見たり、Discordを覗いたりしました。[^source]

下では浅いキースイッチを実現する上で考えたことを雑に書きます。
結果だけ知りたい人は読み飛ばしてください。

### 浅いキースイッチを探す

実際に底打ちの浅いキースイッチや、ロープロファイルなどが販売されています。
しかし、これらはTotal Travelは**3mm**程度で、理想の**1mm**には程遠かったです。
また、ロープロファイルは規格が異なり購入したキーボードに取り付けることは不可能でした。

現段階ではいい選択肢ではなさそうです。

### Total Travelを浅くする
通常Total Travelはハウジングとステムの距離(黒矢印)によって決まります。[^ttbound]

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676735/e3673f54-8790-66ce-cc3f-6e516954bb80.png" width="200px">

それでは、どうやってTotal Travelは浅くできるのでしょう？

一般的に、キーキャップに**Oリング**(紫色)をはめる手法が使われます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676735/6d2c76a6-59cc-8f53-218e-c739ba3bf0ec.png" width="200px">

ステムがハウジングの底にぶつかる前に、Oリングがハウジングの頭にぶつかり底打ちを起こすといった原理です(底打ちというよりむしろ頭打ち)

Oリングは以下の特徴があります。
- o: 安価(数百円~)
- o: 2つ以上挟んだり組み合わせることで、Total Travelを調整できる
- x: しかし、攻めすぎると Pre Travelに達しなかったりチャタリングを起こす
- x: また、攻めすぎるとキーキャップをステムに完全にはめ込むことができない[^detail]
- △: キースイッチそのものの打ち心地を殺してしまう。逆に言えば静音化される
- x: タクタイルスイッチだとキーが戻らなくなる
- x: ステムがボックスタイプだと使えない

Oリング以外の手法として「ステムとハウジングの底の間に何かしらの素材を挟む」という下駄をはかせる手法があると思います。ただ自分にそんな技術はなかったので諦めました。

結局、一番手軽なOリングを採用しました。これによってTotal Travelを最小で**1.5mm**にすることができました。

(2023/10/5 追記)
記事公開後、もりやんさん(@catfist)にスペーサーをステムの芯に被せる手法を共有いただきました。Oリングの欠点をクリアしているように思います。ぜひご参照ください
https://note.com/catfist/n/nb3981c46db23


### Pre Travel を浅くする
Total Travelが浅くできたので、Pre Travel も浅くすることを考えたいです。 

押し込んでからのキー入力までの時間を短くするためには、浅ければ浅い方が良いはずです。**Pre Travel** が **Total Travel** に近いと電気的接続が不安定でチャタリングを起こします。ただ、かえって浅すぎると、指がキーに触れただけで入力が検出される可能性があります。このため**0.5mm**程度が望ましいと考えました。

では、どのように浅くできるのでしょうか？

Pre Travel は、ステムと金属部品の位置関係で決定されます。
通常時、ステムの足は金属部品を押しのけています。ステムを上から押すと、ステムの足は金属を押しのけるのをやめ、金属部品同士が接触することを許します。このとき、ステムの足の傾きが緩やかだと金属部品同士が接触するまで長い押し込みが必要になります。逆に傾きが急勾配だと押し込みは短くて済みます。

つまり、Pre Travelを浅くするには以下のどちらかが必要です。
- ステムの足を急勾配にする
- 金属部品を加工し接触しやくする

一般人にとって金属の再現的な加工は難しいでしょうから、ステムをいじるしかなさそうです。

光学式の3Dプリンタで出力すれば、理想のステムが得られるかもしれません。しかし、キーキャップを出力する人はいても、ステムを出力する前例はあまり見つけられませんでした。また、素材で打ち心地は変わるし、出力精度が性能に直結するはずで、より多くの試行錯誤が必要そうです。自分は3Dプリンタも持っていないので試すには敷居が高く断念しました。

結局自分は、複数のキースイッチからステムとハウジングを組み合わせることにしました。これを**キメラスイッチ**と呼びます。

キメラスイッチは以下の特徴があります。
- x: 望んだPre Travelが得られるか試してみないとわからない
- x: ステムとハウジングの相性が合わないと、そもそもキースイッチとして機能しないし部品を壊す恐れがある

いいところ無しでしたが、浅いPre Travelを得るにはこの方法しかありませんでした。
いろいろ試していたところ奇跡的にPre Travel **0.1-0.4mm**を実現する組み合わせを発見できました。理想の**0.5mm**とは異なりますがなんとか動作したので良しとしました。

# 結果
Oリング+キメラスイッチによって、浅いキースイッチを自作できました。
(厳密には既製品を組み合わせただけなので自作は誇張かもしれません)

スペックは以下です。

- Total Travel: 1.5mm
- Pre Travel: 0.1-0.4mm

https://twitter.com/haruyama480/status/1631699808502312966

キメラスイッチのレシピ
- [durock製](https://shop.yushakobo.jp/collections/all-switches/Durock_JWK)のハウジング
  - 実際のハウジングには打鍵音の良さから[Mekanisk Ultramarine](https://shop.yushakobo.jp/products/4298)を使っているが、durock製であればok
- [cherry mx 銀軸](https://shop.yushakobo.jp/products/cherry-mx?variant=44079445606631)のステム
  - 入手しづらかったので自分は中古のキーボードから抜いた

作業は結構大変でした。キーキャップ外してOリングはめたり、キースイッチを開いてステム差し替えたりの単純作業の繰り返し。キーキャッププラーとスイッチオープナーは必須だと思います。

無事タイピング速度も改善し、e-typingでは元のキーボードと同等のスコア「Comet」が出るようになりました。


# あとがき
改造直後はキメラスイッチの耐久性が謎でしたが、今年2月から合計9ヶ月ほど使いましたが特に問題なさそうでした。

QMKを使っていて、かつ、チャタリングに悩んだ場合は、https://25keys.com/2022/02/10/debounce/ を参考にしてください。

<!-- [^sokouchi]: 底打ちまで深く押す必要がないのかもしれないが、自分は、底打ちのタイミング=確実に入力したタイミングと認識して次の動作に利用しており、底打ち浅い方が良いと考えています -->

[^timeismoney]: お金以上に時間を払うことになりました


[^magickeyboard]: キーの上に定規とシャープペンを立てて、シャープペンのみ押し込むことで計測しました。目視なので正確ではありませんが1mm以下でした

[^detail]: キーキャップをステムにはめるには、ステムが底打ちしてからじゃないとステムの先が入っていかない。例えば、底打ちする前にキーキャップ側のOリングがハウジングに当たってしまうと、まったくはめ込めない


[^kinesis]: kinesis advantage 2 という素晴らしいキーボードを使っています。変わったキーボードですが、本記事はこのキーボードに限らないと思います。今回は布教したい気持ちを抑えて書きます


[^source]: 参考情報 https://scrapbox.io/self-made-kbds-ja/, [キーボード関連Discordサーバ](https://scrapbox.io/self-made-kbds-ja/%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89%E9%96%A2%E9%80%A3Discord%E3%82%B5%E3%83%BC%E3%83%90)