mixi engineer blog

*** 引っ越しました。最新の情報はこちら → https://medium.com/mixi-developers *** ミクシィ・グループで、実際に開発に携わっているエンジニア達が執筆している公式ブログです。様々なサービスの開発や運用を行っていく際に得た技術情報から採用情報まで、有益な情報を幅広く取り扱っています。

キーボードとアジャイル開発

やぁ、たんぽぽグループの森本だよ。

先日の昼休みにnaohiro.ohgataから「キミのblogは文章が短すぎるんだよ。もっと読者を楽しませなきゃ」と言われたんだ。naohiro.ohgataは皆が一目置いているJavaScriptのスペシャリストで、僕も尊敬
している。だから今日は翻訳シリコンバレーっぽい口調で書いてみようと思う。

僕が初めてキーボードというモノを触ってから30年以上たっていると思う。その時はキーボードには何の興味も無くて、コンピュータに命令を伝えるためのただの付属品だった。もちろんタッチタイピングなんかできなくて、自己流でポチポチとキーボードを打ってたんだ。今思い返すと笑っちゃうんだけど自分ではそれなりに早いつもりでいまさらタッチタイピングを覚えるなんてバカらしいとか思ってた。実際まわりの人も似たようなポチポチタイピングで、その中では一番早くてちょっとしたもんだと勘違いしてたりもした。

1度目の転職で初めてちゃんとタッチタイピングしている人に出会った。エディタはemacsを使っててその人がキーボードを触ると魔法のようにプログラムが生み出されてた。
あれは衝撃だったね。ハハ!
同時にGNU,X11,usenetなんかにも出会ったんだ。今思えばあれが僕のプログラマー人生のターニングポイントだったと思う。

さっそく次の日からタッチタイピングの練習を始めたよ。最初は f,j,f,j といった基本的なキーの練習でもどかしかったけれでも、1ヶ月も立てばキーボードを見なくても打てるようになってきた。そうなればあとは早いもんさ。だって一日中キーボードを打っている仕事だから、打てば打つほど上達していくんだ。

そうしてある日僕はあるコトに気づいたんだ。"打ちやすいキーボード"と"打ちにくいキーボード"があるってコトにね。
タッチタイピングを覚えてキーの入力速度が上がってきたので、ようやく気づけたんだと。あの出会いが無かったら今でも自己流でポチポチとDellのキーボードを叩いてたかもしれないと思うとゾッとするよ。

ちなみに、当時最高のキーボードはSun Type3キーボードだった。次のType4キーボードがゴミみたいだったので、古いtype3が取り合い状態だったよ。PCで作業するときのオキニイリはIBMのメカニカルキーボードだった。カチャカチャとスイッチ音がうるさいのが玉にキズだけどね。

三種の神器であるところの タッチタイピング・打ちやすいキーボード・emacsを手にいれた僕はバリバリとプログラムを書いていった。でも、ある日僕は気づいたんだ。
ESCキーの位置が遠いんじゃないかってね。

emacsではESC/ALTキーを多用するんだけど、昔のキーボードはALTキーが無いモノが多かったのでESCキーを使っていたんだ。でも、ちょっと場所が遠いんだよね。ホームポジションから手が浮きそうになる。偉い人に「ESCはCTRL+]で代用できるよ」って教えてもらった僕はESCの代わりにCTRL+]を使い始めた。でも、それが悲劇の始まりだった。

] は右手の小指の守備範囲のキーだ。右手の小指は他にも ), - + [ { } : ; " , / ? と沢山の記号が割り当てられている。通常の文章を入力してるのならば何の問題も無かったんだろうけども、プログラムを打つと右手の小指はものすごく酷使されるんだ。ただでさえ酷使されているところに、ESCキーの負荷までやってきたので僕の小指は限界を越えてしまったんだ。

病院に行くと関節炎と診断された。そして信じられないことに関節に注射をされたんだ。針がゴリゴリと関節に入っていくあの感触はいまでも忘れられない。そして僕はCtrl+]を使うことをきっぱりと止めたんだ。

でも、ESCは?
諦めるしかないのか?
そして僕はkinesisキーボードと出会ったんだ。

当時の会社は大阪の日本橋というところにあった。秋葉原ほどのスケールは無いけれども電気街でコンピュータの部品なんかもたくさん売っていた。そこに"ふぁすとばっく"というちょっと変わったモノ(BeOSやBocaの16port serial cardなんか)を扱っている店があった。

その店にひっそりとkinesisキーボードも置いてあったんだ。当時の値段で6,7万したような気がする。さすがにすぐには買う踏ん切りがつかなかった。それからいくつかのキーボードを試してから僕は思った。5,000円のキーボードをいくつも試してやっぱりダメだったって気づくよりも、kinesisキーボードを買ったほうがトータルではお得なんだって。

最初は僕にこの荒馬(ハハ!)が乗りこなせるのかと不安でいっぱいだったよ。でも、いざ使ってみてほとんど違和感がないことにビックリしたんだ。そりゃそうさ同じQWERTY配列で一部のキーの位置が違うだけ、一週間も使えば古いキーボード以上の速度で打てるようになったんだ。

kinesisに点数をつけるとしたら85点ぐらいはあげてもいい気がする。そこまで気にいっていてどうして100点じゃないのかって? プログラマーは傲慢なんだよ。ハハ!

ESCは親指の位置にあるキー(kinesisは親指の箇所にキーが12個もあるんだ!)に割り当てている。おかげでホームポジションから指が離れることも関節炎になることもなくなった。

でも、今度はマウスを使うときに手がホームポジションから離れることが気になり始めたんだ。それから何年もの間、僕は理想のマウスを求めてさまよいつづけた。

まずはトラックボールを買って足で操作してみた。細かい動作が全然できなかった。練習を積めばうまくなったのかもしれないけれど、足が酷くつったのであきらめた。

kinesisは右手と左手の間に大きな空間がある。ここにトラックボールを置いたり、タッチパッドを置いてみたりもした。見た目はかっこいいのだけれども指の移動距離が大きすぎた。マウスの場合は肘はつけたまま腕を移動するのでホームポジションに戻ってくるのは楽なんだけど、kinesisの上に置いたタッチパッドを操作するためには肘を浮かせる必要がある。これがどうにもストレスだった。

指マウスも買ってみた。結局平らな位置まで指を動かす必要があってこれもダメだった。

もちろんヘッドトラッキングも試したさ。Track IR 4Proを購入してみた。操作性はとてもよかった。ついに答えを見つけたと思ったよ。でもね、ヘッドレストに頭をつけたままで頭を上下に動かすことはとてつもなく困難だったんだ。

視線トラッキングや脳波マウスも検討だけはしたけれども、高すぎたり機能がまだまだだったりで導入にはいたらなかった

そうして、失意のままマウスを使いつづけた。もちろん極力マウスを使わなくてもいいように、ありとあらゆるショートカットを駆使するようにはしている。でもマウスをつかったほうがはるかに簡単に操作できることもあるんだ。

ある時、kinesisにIBMのキーボードについているTrackpointをつけている人がいると噂に聞いたんだ。そして調べてみるとなんと本当だった!
埋立地の記憶出張版 KINESIS改造計画途中経過

長くなっちゃったけど、ここまでが前置きさ。ここから本題の「キーボードとアジャイル開発」の話にはいるよ。キーボードへのTrackpointの取り付けをいきあたりばったりアジャイルに行なっていくよ。

まずはTrackpointのついたキーボードの入手だ。幸いなことに知り合いからマウス程度の値段で安く入手できた。

さっそく分解して目的のTrackpointを取り出すことにする。

キーボード基板の背面にがっちりと固定されているようだ。

これが取り出したTrackpointのパーツ。
フラットケーブルを切断しないように取扱いには注意が必要だ。左右スイッチの部分は今は気にしない。これはアジャイル開発の原則であるYAGNIによるもので、実際に必要になるまで機能の追加はしないんだ。

Trackpoint本体が基板と一体化してて、やたらとデカいのが気になるけど、アジャイルなので気にせずにすすめようと思う。

次はkinesisキーボードを分解して取り付け位置の検討だ。これがkinesisの中身。左右にグローブみたいな形の基板があるけれど、そこに主なキーが配置されてるんだ。右手側の基板をはずして取り付ける箇所があるか考えてみることにしよう。

これが右手側の基板を外したところ。

真ん中の基板との間に少しスキマがあいているので、ここに配置できるか調べてみる。うーん。どうも厳しいみたいだ。

キーボードの上に置いてサイズを比べてみも、やっぱりTrackpointの基板が大きい。

どうやっても収まりそうにないので、基板を飛び出させて配置することにした。こういう臨機応変さがアジャイル開発の利点であり醍醐味なのさ。

サイズは現物あわせで、だいたいの箇所をルーターで削っていく。

削り終わったのでTrackpointを埋め込み右手側基板を戻したところ。削ったところは見せないのかって? ハハ!お楽しみは最後に取っておくもんさ。

次はこの小さい基板をなんとかしなくちゃならない。そのままだと他の部品にあたってショートしそうなので裏側にダンボールを貼り付け、右手側基板のスキマに挟み込んでみた。まるで最初から設計していたかのようにシックリと収まった姿には感動すら覚えるね。アジャイル万歳!

次はTrackpint基盤にUSBケーブルを接続するよ。

kinesisキーボードにはUSBハブもついているので、そこの隙間をちょいと広げてケーブルを通すことにした。

これでTrackpoint付きキーボードが完成だ。みんなにもアジャイル開発のすばらしさがわかってもらえたと思う。ウォーターフォールモデルでやっていたら未だにエクセルで仕様書を書いている段階じゃないかな。ハハ!

さぁ、これが完成したTrackpoint付きkinesisキーボードだ。

ホームポジションに指を置いたままでTrackpointまで問題なく指が届くのは最高の気分だよ。

ここまで読んでくれた忍耐強く賢明な読者は気づいてると思う。このままだと左右スイッチは使えないってことにね。心配しなくても大丈夫、必要になってから考えるのがアジャイルなんだ。

一つの方法は別のスイッチを取り付けることだけれども、kinesisにはすでに沢山のスイッチがついている。通常のキーボードはホームポジションの上に2列下に1列の合計4列だけども、kinesisはホームポジョンの下に2列キーがついてるんだ。その中でも左手の'x'キーの下にある '|' と '\' のキーは、右手の'p'キーの横にも同じものがあるので、一つは殺してしまっても問題ないんだ。

ほとんどのOSではマウスキー機能を有効にするとテンキーの5がマウスのクリックになると思う。あとはkinesisのマクロ機能をつかって、'numpad on', '/', '5' を割り当てれば、左クリック機能の割り当ては完成さ。同様に 'numpad on', '-', '5' を ctrl付きでmacro登録すれば右クリック機能の割り当ても完成。残念なことにこの設定だとドラッグとかの複雑な操作はできないけれど、当面の僕の目的には何の問題も無いのでとてもハッピーさ!

追記

何人かの読者からお叱りを受けたよ、"キーボードが汚い"ってね。僕がそんなことに気づかないような間抜けに見えるかい?もちろんちゃんと分解掃除したさ。これが証拠の写真。キートップはエタノールでジャブジャブ洗ったよ。