Slide 1

Slide 1 text

なぜ私はキーボードを作るのか GMOペパボ株式会社 西畑 洵

Slide 2

Slide 2 text

自己紹介 名前:西畑 洵 (@j_o_lantern0422) 所属:GMOペパボ株式会社 情報システムグループ 愛用しているキーボード:Helix(マルチキースイッチ仕様) 愛用しているポインティングデバイス:Digio2 Q(トラックボール) 今組み立てているキーボード:ErgoDash 待ってるキーボード:Mint60 ● 自作キーボード以外の趣味 ○ Rubyを書くこと ○ PCゲーム ○ 苔テラリウムを作ること

Slide 3

Slide 3 text

話すこと ● 自作キーボードとは何か ● 私がキーボードを自作するに至ったわけ ● パーツ選定の楽しさ ● レイヤーやキーマップについて ● キーボード自作におけるやらかし ● 自分だけの自作キーボードケースを得る方法 ● どうしていくつもキーボードを自作するのか ● より深みにハマる、自作キーボード沼

Slide 4

Slide 4 text

キーボード履歴書 2010年ぐらい(学生):PCの付属品その場にあった間に合わせのキーボード 2011〜12年(学生):Thinkpad X60 2015年(社会人3年目):Happy Hacking Keyboard Lite2   メカニカルキーボード(赤軸) 2017年前半(社会人5年目):Happy Hacking Keyboard Professional JP 2017年後半(社会人5年目):Happy Hacking Keyboard Professional JPと               Lite2の2台を両手で使う 2018年:キーボードを自作し始める

Slide 5

Slide 5 text

私がキーボードを自作するまで ● 肩こりが酷い(HHKB時代) ● 知ったきっかけは社内で盛り上がっていた HelixのGroup Buy(GB) ○ Group Buy:クラウドファンディングに近く、 共同購入者を集めてPCBなどの発注を一括でやること ● 自分が知ったときにはすでにGBの募集期間が 終わっていた ● やっぱり自作は怖いな…と思っていた

Slide 6

Slide 6 text

HHKB2台使い時代 ● 世間には分割キーボードというものがあるらしい ● でも自作はちょっとハードルが高いな(とこのときは思っていた) ● ErgoDox EZとかもあるけど、やっぱHHKBでしょ! ● 左:HHKB ProJP ● 右:HHKB Lite2

Slide 7

Slide 7 text

HHKB2台使いの特徴 ● メリット ○ 何も自作しなくていい ○ 日本語配列のキーキャップが手に入る ○ 両手にすべてのキーがあるので最悪片手で全部のキーがいじれる ○ 片側(利き手側がおすすめ)をLite2にすると 低コスト+USBポートが1つ節約できる ● デメリット ○ でかい ○ Karabiner-elementsがないと無力 ■ 修飾キーが左右で同期してくれないため

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

自作に至るモチベーション ● キーボードが机の殆どを占領していて邪魔… ● 1枚で使うより快適とは言え、最適な置き方をするには 取り回しづらかった ● 周りのHelixを楽しみにしている空気感が自作欲を高めた ○ 楽しそうなお祭り感(後のHelix祭り) ○ Helixかっこいい ○ 自分で考える最強のキーマップに惹かれる ● キーキャップを選べるの凄く楽しそう コンパクトな感じがする 自分にとって最適なキーマップを選べる ワイワイ楽しそうだし、自作してみよう!

Slide 10

Slide 10 text

自作キーボードについて ● 自作キーボードの概要 ● PCBとは何か? ● レイヤーについて ● 自作キーボードの紹介 ○ Let's Split ○ Helix ○ Ergo42

Slide 11

Slide 11 text

自作キーボードの概要 2種類の概念 1. 誰かが販売するPCBを用いて組み立てる、ラジオの自作に近い自作 Let’s Split、ErgoDox、Helix、Mint60、ErgoDash etc… メリット:簡単(?)、好きなキースイッチ、キーキャップ、配列 デメリット:キーの物理的な配置は選べない 2. PCBからの自作 メリット:だいたいのことは想いのままになる デメリット:大変

Slide 12

Slide 12 text

自作キーボードのPCBとは? Printed Circuit Board(プリント回路基板) キーボードの回路がプリントされた、いわゆる基板 electrowなどの業者に発注して輸入するケースが多い

Slide 13

Slide 13 text

レイヤーとキーマップ [_QWERTY] = KEYMAP( \ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JA_AT\ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, JP_SCLN,JP_COLN \ KC_LCTRL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, JP_SCLN, JP_COLN\ KC_LSFT, KC_LGUI, KC_LALT,LOWER , KC_KANA ,KC_SPC, KC_ENT, KC_EISU, RAISE,KC_BSPC, JP_CIRC, JP_YEN \ ),

Slide 14

Slide 14 text

レイヤーとキーマップ

Slide 15

Slide 15 text

レイヤーについて

Slide 16

Slide 16 text

レイヤーについて(Lower)

Slide 17

Slide 17 text

レイヤーについて(Raise)

Slide 18

Slide 18 text

自作キーボードの紹介 Let’s Split ● 分割自作キーボードの走り ● すごく安い ● 24×2で48キーの分割格子型キーボード ● 基本的に自分でパーツを買い集める

Slide 19

Slide 19 text

自作キーボードの紹介 Helix ● 片手6×5+2 ○ 片手32キー、合計64キー ● 親指に割当て出来るキーがLet's Splitと 比較して多くErgoDox等に近い ● 遊舎工房さんのサイトが充実していて 日本語マニュアルもあるので 初心者でも組みやすい

Slide 20

Slide 20 text

自作キーボードの紹介(Ergo42) ● Let's Splitより1列多い ● ProMicroがPCBと重ならないので薄く作りやすい ● 完成品も買える

Slide 21

Slide 21 text

キーボードを自作しはじめる ● やっぱり分割キーボードがいい ● レイヤーを作り込む気でいたのでキー数は少なくてもいい ● HelixのGBは終わっていたのでPCBが販売されていた Let's Splitにした ここから Let's Split → Helix(ロープロ茶軸) → Helix(マルチキースイッチ)→ ErgoDash(銀軸で作成予定)

Slide 22

Slide 22 text

パーツ選定について

Slide 23

Slide 23 text

パーツ選定の楽しさ ● モダンな自作キーボードで選定するパーツは下記 ○ キースイッチ ○ キーキャップ ○ LEDの有無 ○ ケース

Slide 24

Slide 24 text

キースイッチの選定 ● 高さを選ぶ ● 軸を選ぶ ○ 赤軸・茶軸・白軸・黒軸 etc… ○ この話だけで沼なので割愛 ロープロファイルスイッチ CherryMX互換スイッチ

Slide 25

Slide 25 text

キーキャップの種類 ● 現状ロープロファイルスイッチのキーキャップは選択肢が少ない ○ 刻印済みか、無刻印かぐらいしかないので今後に期待 ● BOXタイプ(Cherry MX互換スイッチ)であれば選択肢が多い ○ 素材:PBT・ABS ○ 高さ:SA>DCA≧DCS>G20 ■ DCAとDCSはさほど高さに差があるわけではなくて、 段によって形が異なる ○ 色やイラスト、凝った形

Slide 26

Slide 26 text

自作だからこそできるキースイッチの選び方 ● 普通の市販のキーボードの場合選べるキースイッチの軸・高さは 1種類だけ ● 自作の場合自分でキースイッチを集めることさえできれば 好きな様にできる ● 小指が触るところは赤軸、他は茶軸、手前はロープロファイルと いった事が可能

Slide 27

Slide 27 text

自由なキースイッチ選定 Kalih BOX 赤軸 Kalih BOX 茶軸 Kalih low profile オレンジ軸 Kalih low profile 茶軸

Slide 28

Slide 28 text

キースイッチ選定の理由 ● 短い指でアクセスするキーはロープロファイル ○ 中でも親指は力がはいるのでオレンジ軸 ○ 小指とかは茶軸にして軽め ● 上の方のキーは若干手を伸ばす必要がある ○ 軽く押したいので赤軸 ● 他 はすべて茶軸

Slide 29

Slide 29 text

自作キーボードのケースについて ● キットに付属しているケース ○ HelixやErgo 42など ○ PCBの作者の方が監修しているので精度が高い ● 自分で作る ○ スキルと機材のある人は3Dプリンタで自作 ○ 私:Githubなどに上がっているデータを使ってレーザーカッターで   実装 ■ 材料は東急ハンズで調達 ■ レーザプリンタを持っていないのでFabCafe@渋谷で依頼

Slide 30

Slide 30 text

自作キーボードやらかし集

Slide 31

Slide 31 text

キーボード自作におけるのやらかし ● 自作する以上、失敗はつきもの ● でも失敗を恐れずに色んな人にキーボードを 自作してほしい ○ 自分の失敗を反面教師として紹介して同じ轍を踏まない手助けにしたい

Slide 32

Slide 32 text

ProMicroバラバラ事件

Slide 33

Slide 33 text

ProMicroとは? ● 自作キーボードのファームウェアが記録されるマイコン ○ このファームウェアにキーマップが書かれている ● 自作キーボードのあらゆる動作を制御している 心臓とも脳みそとも言える部分

Slide 34

Slide 34 text

ProMicroバラバラ事件 はじめての自作キーボード「 Let’s Split」を作っていたときのこと ダイオード全部つけられたし、 ProMicroつけるぞ! 引用 :https://camo.githubusercontent.com/30e4685638a88d0773bbdba4811292794c475fc2/687474703a2f2f692e696d6775722e636f6d2f 754a50716269422e6a7067 ダイオードよし!

Slide 35

Slide 35 text

ProMicroバラバラ事件 ここでLet's Splitの罠が… キースイッチをつければもはや完成では?! PCB 苦労してダイオードを付けた! ProMicroつけたらそれっぽくなるぞ ProMicro邪魔ではんだ付けできないじゃん …

Slide 36

Slide 36 text

ProMicroバラバラ事件 ● このころProMicroをコンスルーで取り付けるという知見を持っていなかった ● つまり半田を溶かし、吸い取る等して取り外す必要があった ○ ProMicroの穴は小さすぎて吸い取り器と吸い取り線を使っても吸いきれなかった ProMicro バラせば いいんじゃね

Slide 37

Slide 37 text

ProMicroバラバラ事件 こちらが事件現場の様子です ● 半田の熱でピンヘッダが溶けた ● ニッパでバラバラにすればなんとか取れそうだっ た ● 結局、PCB側のピンホールごともげてしまったの で再起不能

Slide 38

Slide 38 text

ケース置き去り事件

Slide 39

Slide 39 text

ケース置き去り事件 ダイオードの向きヨシ! ProMicroより先にキースイッチのはんだ付け ヨシ! ProMicroのはんだ付けヨシ!

Slide 40

Slide 40 text

ケース置き去り事件 あれ、ケースっていつ付 けるんだっけ

Slide 41

Slide 41 text

ケース置き去り事件 サンドイッチタイプのキーボードケースはケースをキースイッチで挟むようにして付ける 必要がある 1. PCBとダイオード 2. ケース 3. キースイッチ 4. PCB の順番で挟まっている必要がある PCB ケース キースイッチをProMicroより先につける事を意識しすぎてケースのことを忘れていた

Slide 42

Slide 42 text

ケース置き去り事件(結末) ● ProMicroのような小さいパーツから半田を吸うのは 大変 ● ハンダ吸い取り器とハンダ吸い取り線を酷使しても 吸いきれなかった ● 順番はほんとにちゃんと確認しよう! ● 深夜に眠気に耐えながらはんだ付けするのはやめ よう! ● 先のProMicroバラバラ事件の時点で新しく PCBを発 注していたので諦めた ● Grab 2 switches and your top plate (That's 2 switches for each side)とちゃんと書いてあった

Slide 43

Slide 43 text

PCB焼身事件

Slide 44

Slide 44 text

PCB焼身事件 ダイオードの向きヨシ! ProMicroより先にキースイッチのはんだ付け ヨシ! ProMicroのはんだ付けヨシ! ケースをキースイッチで挟んでることヨシ!

Slide 45

Slide 45 text

PCB焼身事件 ● Let's SplitはPCBの一部をジャンパさせる必要がある ● ジャンパは半田を複数のランドをまたがるように乗せる必要がある ● うまくやると右のようになる 引用 :https://camo.githubusercontent.com/05d6caf3c229a2ad234015f83f7118e5e00ab5c9/687474703a2f2f692e696d6775722e 636f6d2f654c52554a78412e6a7067

Slide 46

Slide 46 text

PCB焼身事件 どんどん上がっていく半田の温度 溶けていくフラックス、 一緒に削れていくPCB どんどん焦げていき プリントされていた回路も消滅

Slide 47

Slide 47 text

ダイオード消滅事件

Slide 48

Slide 48 text

ダイオード消滅事件 ● Helixのダイオードはキットで 購入すると表面実装のチップに なっている ● 半田をつけすぎるとチップが 焼けてしまうため注意が必要

Slide 49

Slide 49 text

ダイオード消滅事件 ● 半田を除去する手段 ○ ハンダ吸い取り線に吸着させる ○ ハンダ吸い取り器で吸う ● 何故かこのとき吸い取り器を 選んでしまった

Slide 50

Slide 50 text

様々な事件を経て ● 手順を最初に最後まで読んでから作業をするべき ○ 手順通りに進めれば基本的にはOK ○ 全体像を把握していると間違えそうなときに気づける ○ 足りない材料や欲しくなりそうな機材がわかる ● はんだごては絶対に温度調整ができるものにするべき ○ PCB焼身事件を忘れるな ● ProMicroはコンスルーで取り付けよう ○ 1組100円しないのでPCBを犠牲にするより遥かにマシ ○ ProMicroバラバラ事件を忘れるな ○ モゲマイクロ対策にもなる

Slide 51

Slide 51 text

より深みにハマる、自作キーボード沼 ただ自作するだけではなく更にそこからもう一歩踏み込んだ世界 ● ProMicroにピンが余っている場合がある ○ キーを増設できるのでは…? ● ポインティングデバイスを増設したい ○ トラックポイントを付ける ● キーボード光らせたい! ○ LED増設

Slide 52

Slide 52 text

キーボードの深み(キースイッチの増設) ● adjustやraise、lowerキーを割当てると入力に使うキーがその分減 る ○ 自作キーボードはキー数が少なくなる分Fnキーのようなレイヤー切り替えを多 用する ● レイヤー切り替えで指が拘束されるのが地味につらい ○ 小指の酷使 ○ 親指はSpaceやEnterに使いたかった お前には立派な足が付いてるじゃ ないか

Slide 53

Slide 53 text

フットペダルをつけよう ● 足で操作すれば指は酷使されない(あたりまえ) ● 指でレイヤーを切り替えるとどうなるか ○ レイヤー切り替えキーを押しながら他のキーを押そうとするとどうしても手が 無理な形になることがある ○ 結果的にレイヤー上で使えるキーの数が制限される ■ 指を同時に置きづらいキーはレイヤー切り替えに使いづらい ● 足で切り替えるメリット ○ 手をキーボードから離してもレイヤーは切り替えられる ○ レイヤーを切り替えてから複数同時にキーを押す操作も簡単

Slide 54

Slide 54 text

フットペダルをHelixに増設する ● フットペダルにはキーを割り当てるのでキースイッチを 増設する手順を踏む ● フットペダルをつけるには ○ ProMicroの空いているピンから線を伸ばしてキースイッチとする ○ HelixのPCBのどこからか線を伸ばして増設する ○ Helixのキーから線を伸ばしてフットペダル用にする ● PCBから足を伸ばすのは難易度が高い ● キーを潰して線を伸ばすのが一番簡単だけどやっぱり格好悪い

Slide 55

Slide 55 text

フットペダルの作成 ● フットペダルはUSB接続の製品をばらして流用する ● スイッチはタクトスイッチなら何でもいい ○ Kailhロープロファイルキースイッチを流用

Slide 56

Slide 56 text

Helixの元々のキーマップ(rev2.h) #define KEYMAP( \ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \ L30, L31, L32, L33, L34, L35, L36, R36, R30, R31, R32, R33, R34, R35, \ L40, L41, L42, L43, L44, L45, L46, R46, R40, R41, R42, R43, R44, R45 \ ) \ { \ { L00, L01, L02, L03, L04, L05, KC_NO }, \ { L10, L11, L12, L13, L14, L15, KC_NO }, \ { L20, L21, L22, L23, L24, L25, KC_NO }, \ { L30, L31, L32, L33, L34, L35, L36 }, \ { L40, L41, L42, L43, L44, L45, L46 }, \ { R05, R04, R03, R02, R01, R00, KC_NO }, \ { R15, R14, R13, R12, R11, R10, KC_NO }, \ { R25, R24, R23, R22, R21, R20, KC_NO }, \ { R35, R34, R33, R32, R31, R30, R36 }, \ { R45, R44, R43, R42, R41, R40, R46 } \ }

Slide 57

Slide 57 text

#define KEYMAP( \ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, R06, \ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \ L30, L31, L32, L33, L34, L35, L36, R36, R30, R31, R32, R33, R34, R35, \ L40, L41, L42, L43, L44, L45, L46, R46, R40, R41, R42, R43, R44, R45 \ ) \ { \ { L00, L01, L02, L03, L04, L05, KC_NO }, \ { L10, L11, L12, L13, L14, L15, KC_NO }, \ { L20, L21, L22, L23, L24, L25, KC_NO }, \ { L30, L31, L32, L33, L34, L35, L36 }, \ { L40, L41, L42, L43, L44, L45, L46 }, \ { R06, R05, R04, R03, R02, R01, R00 }, \ { R15, R14, R13, R12, R11, R10, KC_NO }, \ { R25, R24, R23, R22, R21, R20, KC_NO }, \ { R35, R34, R33, R32, R31, R30, R36 }, \ { R45, R44, R43, R42, R41, R40, R46 } \ } キーマップ を対応させる(rev2.h)

Slide 58

Slide 58 text

キーマップを対応させる(keymap.c) [_QWERTY] = KEYMAP( \ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LSFT, KC_6, KC_7, KC_8, KC_9, KC_0, JP_MINS, \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JP_AT, \ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, JP_SCLN, JP_COLN, \ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, JP_LBRC, JP_RBRC, KC_N, KC_M, JP_COMM, JP_DOT, JP_SLSH, JP_UNDS, \ ADJUST, KC_LGUI, KC_LALT, LOWER, EISU, KC_SPC, KC_ENT, KC_ENT, KC_SPC, KANA, KC_BSPC, KC_BSPC, JP_CIRC, RAISE \ ),

Slide 59

Slide 59 text

ProMicroとキーマップの関係

Slide 60

Slide 60 text

ProMicroとキーマップの関係 #if HELIX_ROWS == 4 #define MATRIX_ROWS 8 #define MATRIX_ROW_PINS { D4, C6, D7, E6 } #else #define MATRIX_ROWS 10 #define MATRIX_ROW_PINS { D4, C6, D7, E6, B4 } #endif // wiring of each half #define MATRIX_COLS 7 #define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2 }

Slide 61

Slide 61 text

ProMicroとキーマップの関係

Slide 62

Slide 62 text

ProMicroのピンとキーマップについて

Slide 63

Slide 63 text

フットペダルが完成! ● Helix側とフットペダル側を取り外せるようにした ● Raiseなどのレイヤー切り替えキーを 割り当てようと思ったがShiftにした ○ Helixは比較的キーが多いためレイヤー切り替えは頻繁ではなかった ○ 親指はSpaceやEnterに割り当てるため親指Shiftにはキーが足りない

Slide 64

Slide 64 text

結局何故キーボードを作るの?

Slide 65

Slide 65 text

自分に道具を合わせるという考え方 ● 基本的には自分が道具に合わせるのが既製品に対する接し方 ● 既製品がベストであるかどうかはケースによる ○ 合わないなら道具を自分に合わせて変えていくと幸せ ● 道具が自分に合っていると本業のプログラミングなど キーボードを使う作業の楽しさが増す

Slide 66

Slide 66 text

こだわった道具を使うのは楽しい

Slide 67

Slide 67 text

キーボード界隈の人たちと合うのが楽しい ● 共通の趣味 ● 自分の知らない知見 ○ PCBの書き方 ○ 見たことのないキーボードとの出会い ● まだまだマイナーな分野なので製作者に会える

Slide 68

Slide 68 text

Tokyo Mechanical Keyboard Meetup

Slide 69

Slide 69 text

Maker Fair Tokyo 2018

Slide 70

Slide 70 text

なぜ私はキーボードを作るのか

Slide 71

Slide 71 text

Where is my End Game?