RailsのAPI開発にスキーマ駆動開発を導入して、品質と開発スピードを高める

こんにちは、freee API開発チームのkotegawaです。 この記事はfreee Developers Advent Calender 2018の19日目の記事です。

freeeのAPI開発

freeeでは今年の7月から、API開発専任チームが新設されました。 API開発チームでは、

  • 社外向け新規APIの開発
  • API開発基盤の強化
  • 新規プロダクトの開発

などの業務を社内の認証基盤チームやインフラチームと協力しながら行っています。 今日はAPIチーム発足前にfreeeが抱えていたAPIの課題と、それを解決するために導入したスキーマ駆動開発について紹介します。

APIチーム誕生前の課題

もともと弊社のAPIの課題として、以下のようなものがありました。

  • APIドキュメントと実際の実装に差異があった
    • 開発する度にAPIドキュメントを更新することにメンテナンスコストがかかっており、また手動で更新するオペレーションをとっていたことで、ミスも生まれやすい環境にあった。
  • デグレ問題
    • 社外公開するAPIと社内向けのprivate APIで共通のロジックを使っている箇所が多く、private APIへの変更が、社外APIへの予期せぬデグレ・バグや事前告知のない変更を生むことがあった。

どうやって解決したか

上で挙げた課題を解決するために、APIチームではSwagger(Open API)を用いた スキーマ駆動開発 という手法を取り入れました。

その内容としては、APIスキーマ(仕様書)をjsonやらyamlやらで記述していけば、APIドキュメントやリクエストのvalidation、E2Eテストがスキーマに基づいて自動生成されるような環境を目指していくというものです。

実際にスキーマ駆動開発をどのような技術で実現していったか、以下で解説していきます。

Swagger(Open API)

Swaggerは正式にはOpen APIという名前になってますが、RestfulなAPIの仕様策定・実装するためのオープンソースのフレームワークです。 image.png

画面左側のようにjsonやyamlでSwagger Specという仕様に基づいてスキーマを記述していけば、その周辺ツール群がよしなにAPI開発に必要なものを自動生成してくれます。 Swagger公式ツール群の例としては、以下のようなものがあります。

  • 上記画像の右側のようなAPIドキュメントを自動生成してくれるSwagger UI
  • APIクライアントやmockサーバーを自動生成してくれるSwagger Codegen

committee

Swagger周辺のツール群には上記の公式のもの以外にも多くのがあります。その1つがcommitteeというgemです。

committeeによるRequest Validation

committeeはRackのミドルウェアで動作するgemで、Swagger Specに基づいて記述されたjsonを噛ませてあげれば、そのスキーマに基づいて、公開APIへのリクエストに対してvalidationをかけてくれます。

例えばschema jsonに以下のような定義をすると、

{
  "name": "walletable_type",
  "required": true
  "type": "string",
  "enum": [
    "bank_account",
    "credit_card",
    "wallet"
  ],
  "description": "口座区分 (銀行口座: bank_account, クレジットカード: credit_card, 現金: wallet)"
}

まずは上記が反映されたAPIドキュメントが自動生成され、

image.png

定義した型やenumに反したリクエストを送ると、committeeがRackの層で検知して、↓こんな感じでerror responseを返してくれます。

[ 必須parameter未指定の場合 ]

{
  "status_code": 400,
  "errors": [
    {
      "type": "validation",
      "messages": [
        "walletable_type が指定されていません。"
      ]
    }
  ]
}

[ 指定した型定義やenunの定義から外れたparameterが来た場合 ]

{
  "status_code": 400,
  "errors": [
    {
      "type": "validation",
      "messages": [
        "walletable_type は string で指定してください。",
        "walletable_type は [bank_account, credit_card, walle] のいずれかを指定してください。",
      ]
    }
  ]
}

ただし、committeeがやってくれるのはRackの層で例外を吐いて英語の文字列のエラーを返してくれるだけです。(エラーの種類にかかわらず、raiseするのは単一の例外クラスでmessageが違うだけという、ちょっと不親切な感じ。)

Rack層の例外を拾う仕組みや、英文のエラーをパース・構造化して、意味がわかる形でユーザーに返すロジックは別途実装が必要になりました。

committeeによるResponse Validation

committeeにはリクエストの制御だけでなく、レスポンスの制御も可能です。 具体的な実装としては、RailsのE2E(Requet Spec)で用いる get put 等のメソッドをオーバーライドして、committeeのチェックを噛ませることによって、現在返しているレスポンスがスキーマで定義しているものと相違ないかを確認しています。

現在はこのチェックをCIに組み込んで、APIのレスポンスに影響があるような変更があった場合は検知できるような仕組みにしています。

Swagger, committeeを導入してよかったこと

APIの品質

リクエストを動的に、レスポンスを静的にスキーマと相違ないかチェックできるようにできるようにしたことによって、

  • APIドキュメントと実装の差異
  • APIレスポンスへの意図せぬデグレ

といった冒頭で挙げた問題を自動で防げる仕組みをつくることができました。

image.png 雑なイメージ図

また、スキーマから吐き出したAPIドキュメントを事前にQAチームに共有しておくことで、効率的にQAテストを進めることができるようになりました。

APIの開発スピード

開発スピードの観点から見ても、以下のようなメリットがありました。

  • APIを新規開発する際に、スキーマから記述することで、仕様書としてPMにレビューを依頼できる
  • 今まで個別のendpointごとに記述しなければならなかったvalidationが大幅に減った
  • responseの中身をチェックするテストを手動で書いていく必要がなくなった
    • 今までは expect(json['id']).to eq 1 といった感じ、一つ一つのフィールドの値チェックをするために膨大な量のテストを書いていました。

このように、APIを品質・開発スピードの両面で改善ができたので、Swagger, committeeの導入はやってよかったなと思っています。

新たに生まれた辛み

一方で今の運用に何の不自由も感じていないわけではありません。

50を超えるエンドポイントの詳細を1つのjsonファイルに記述していく大変さはやはりあります。 しみじみと思うのが、jsonはやはり基本的に人間が手書きするのに適した形式ではないということです。

このような問題に対して考えている今後の解決策は、

  • スキーマをyamlで記述していく
    • Swaggerはyamlでも記述できますが、yamlもyamlでネストが深くなると辛みも深くなるので根本的な解決にはならない
  • jsonファイルの分割
    • jsonを書く業から逃れられるわけじゃないので、これも根本的な解決にはならない
  • Protobufでデータ構造を定義して、jsonにシリアライズする
    • protoc-gen-swaggerというプラグインを活用すれば、Swaggerに対応した形式のjsonファイルも吐き出せる

将来的には「Protobufでスキーマを記述してSwagger形式のjsonにシリアライズ」というよりは、REST APIからgRPCに移行して今のSwaggerツール群がやってくれてることをまるっとProtobufに任せるというのもできればいいなという気持ちがあります。 ただgRPCの普及度を見るとさすがに時期尚早感が強いなと思っています。

freee APIの今後について

APIのさらなる拡充をしていくと同時に、APIチームから新プロダクトもリリース予定です。(正式発表はまた後日ということになっているので、お楽しみに。)

その他にも、

  • 多言語対応APIクライアント
  • Webhook API
  • GraphQL対応
  • AWS lambdaによる実行環境の提供

等々、夢のあるバックログがたくさん積まれています。

API開発チームでは、もっと多くの方に快適にAPIを使っていただけるよう、これからも邁進していきます。是非freeeのAPIを試してみてください。

freee Developers Community | freee Developers Community

また、一緒にAPIを開発していってくれるエンジニアも募集中です。ご興味あれば、ご連絡ください。

freee株式会社 採用情報

明日は関西のたこ焼きチームから大きな存在感を出しているyoshiさんの記事です。お楽しみに!

「業務が一瞬で終わるという価値」を追い求めて ー 決算申告チーム・ハミルトンインタビュー

こんにちは、freee採用チームの西木です。

今回は、freeeで働く個性豊かなエンジニアを紹介する企画の第二弾です。 ということで、決算申告チームに所属する新進気鋭のエンジニア、ハミルトンこと高山湧気さんに話を聞いてみました。

(*第一弾、AWS Container Heroに就任したSREエンジニア・九岡の記事はこちら→前編後編

高山湧気さんの写真

ーfreeeに入社したきっかけを教えてください。

前職では大企業向けのBtoBをやっていて、僕は会計とかHRの製品を作っていたんですが、何となく一区切り着いた時に、他の会社ってどうやって開発とかしてるのだろうと気になり転職エージェントに登録したんです。そこでfreeeを紹介され、話を聞いてみると転職したくなりました(笑)

ーよく似た業種だったんですね。前職とfreeeの違いはありますか?

プロダクトの計画を立ててからお客さんに届くまでのスピードですね。入社して衝撃だったのは、何か機能の開発を任されて、1週間ほどで作ってレビューが終わると、気がついたらお客さんが使っていたりとか。freeeのスピード感はすごいですよ(笑)

高山湧気さんの写真

ー簡単に「決算申告チーム」の仕事と、その中でハミルトンが何をしてるか聞かせてください。

チーム全体では、アドバイザー(公認会計士・税理士・社労士など)さん向けのプロダクト開発をしています。その中で僕が担当しているのは、年末調整でアドバイザーさんの申告をサポートする機能(申告freee)と、新しくリリースした顧問先管理freeeの開発です。あとはアドバイザー検索機能など、全てがアドバイザーさんに関する領域ですね。

ーエンドユーザーさん向けとアドバイザーさん向けのプロダクトは、どこが違いますか?

相手が専門領域なので、より高機能なものが求められています。アドバイザーさんにとっても、お客さんに対しての価値をfreeeのプロダクトに依存してる部分があるので、使いやすい上に細かな作業もできるものが好まれますね。 またスモールビジネスをターゲットにしているfreeeにとっても、その間にアドバイザーさんがいることで、さらにfreeeのプロダクトの価値を引き出してくれるので良い関係性を築くためにも良いものを作らないといけません。

高山湧気さんの写真

ーアドバイザーさん向けだからこそ、苦労した部分や面白い部分はある?

わからない言葉やシステムも多く、最初はとっつきにくさはありました。でもチーム内に税理士や公認会計士の資格を持っている人がいるので、聞けば優しく教えてくれました。そうやって前提条件を調べたり聞いたりした上で、教えてもらったことを鵜呑みにすることなく、仮説を立てて検証やアプローチをするようにしています。 そしてプロダクトに新しい機能をうまく反映させ、「この機能、良かったよ」と褒められた時の達成感は半端ないですね。アドバイザーさんから必要とされるものは、身近ではなくレベルも高いのなので、非常にやりがいはあります。

ー仮説立てるのにも、けっこう理解してないといけませんよね? 例えば、新しくチームに来た人はどういう風に勉強しているのでしょうか?  

チーム内のコミュニケーションが多いんです。『とりあえずやってみる→議論する』の流れが徹底されてますね。もっと詳しくいうと、「そもそも何だこれ」→「詳しい人からの説明」→「実際作る」→「コード追う」みたいな作業を、チーム8人で協力しながらやってます(笑)。「わからないことは、聞いてよ」っていう雰囲気があり、それが各々の勉強に繋がってるんだと思います。

ーコミュニケーション取りやすくするための工夫とかありますか?

スクラム開発を取り入れて、フレームワークでやっているところですかね。看板ボードをみて進捗状況を確認しながら、進行中のものは、困っていることがないか聞き合ったりしますね。わざわざ報告しなくても、看板上で見られるのでわからないことが尋ねやすいと思いますよ。

高山湧気さんの写真

ースクラム開発を初めて、コミュ力アップ以外に良かったものはありますか? 

優先順位を決める必要があるので、自分たちのできるキャパシティをわかった上で、削るものを決めることができました。3ヶ月で出来ることも予測がつくので、闇雲に頑張るよりは、必要なものだけに集中できていると思います。 マネージャーがわりと自由にやらせてくれる人なのも大きいですね。スプリントに載せる前に、何を載せるのか考え、プランニングポーカーでみんなでポイント出して……という教科書通りのアジャイル開発をガチでやってるっていうのはチームの特徴ですね。だいぶ時間を投下していますが(笑)。

高山湧気さんの写真

ープロダクト内部の話を聞かせてください。 年末調整の機能開発って、どんなことやってるんですか?

主に役所に申告するの部分の開発ですが、データの集計は「人事労務freee」が自動でやってくれるので、そこはノータッチです。そこから必要なものだけを持ってきて、申告書への自動転記、または電子申告をできるようにしています。あとは「会計freee」の支払調書でも同じように、申告freeeに連携させています。

ーあえてエンドユーザーさん向けのプロダクト(会計freeeや人事労務freee)と分ける理由はなんでしょう?

UIが明確に違っていて、アドバイザーさんって紙提出のフローを長年やってるので、紙ベースの方がいいという方も多いんです。だから紙の形で見せてあげるのは税理士さんのためでもあります。

ー紙の形にするって、freeeの目指す世界と違うのではないですか?

申告をする機能のソフトは世の中にあって、それと同じことができるのというのも大事なんです。「昔からの慣れたやり方でもそのまま出来ますよ」というのは安心感に繋がりますし。紙に書くこともできるし、電子申告することもできるというように幅を持たせるのが大事だと思います。 さらにfreeeのソフトで自動的にできる範囲のことをやった上で、アドバイザーさんしか出来ないような細かな作業もできる設計にしています。

高山湧気さんの写真

ー技術的なことも教えてください。フロントとサーバーどれくらいの割合ですか?

フロント5.5、サーバー4.5くらいですかね。

ーどんな言語やフレームワークで開発されているんですか?

サーバーはRuby on Railsで、フロントはReactですが、あんまり言語に対してのこだわりはなくて。強いていうなら型とかある方がいいですね(笑) 申告freeeはフレームワーク化されてて、一つの帳票を作るってことに対して、本気出せば3時間くらいでA4の紙一枚くらいの機能はできてしまうんです。わりと生産性がいいというか、うまく作れていますね。

ーどうしてうまくいったんですか?

ひとえに初期の設定が上手かったとしか言えないですね。最初から種類を増やすことが容易にできるように作ってあって、汎用性が高いのでありがたいです。僕は設定が完成した後から入社していますが、かなり感謝しています。

ーここは大変というところはあった?

一番大変なのは、様式改定とか、毎年税が変わることに追従したりすることですね。あとはロジックが複雑で、近くに税理士がいても、仮説立てたりとかそういうところには手を抜けない。難しいものを理解しないといけない場面は多いです。 そのほか、顧問先管理freeeでは膨大なやりたいことが出てくるんですけど、どこに絞ってどこに価値を出していくか決めて、実際に検証することですね。

高山湧気さんの写真

ー決算申告チームが目指すものを教えてください。

エンドユーザーに価値をだすことが根本にあるのは確かです。それを目標にしつつアドバイザーに働きかけることを考えると、効率化ですね。つまり「業務が一瞬で終わる」という価値です。 顧問先からデータを集めたりそれをチェックしたりする作業が、まだまだ効率化されていない領域だと思っています。簡単にチェックできたり、大量の書類を封筒に入れたりせずにすむようにしたいですね。 時間を気にすることなくエンドユーザーに向けて価値あるアドバイスができるという状態も、その先にあるのだと思います。アドバイザーさんを通して、スモールビジネスに従事する人を幸せにしたいです。

ー自分の中でもっと良くしたいと思っているところは?      申告の種類とか、対応できる幅をもっともっと広げたいですね。既存の製品と同じことができるのは当たりまえで、そこからもっと追求していきたい。他のクラウド製品、会計freeeや人事労務freeeと繋がっているからこそ広がる世界は、まだまだこんなもんじゃないと思います。

クラウドにあるからこそ確認がしやすかったりとか、一つの申告書を誰かが一斉に申告するとか、顧問先からデータをもらわなくても勝手に会計freeeに入ってるとか、そんな機能を利用して、アドバイザーの仕事を進めやすくするのにもっと貢献したいです。

ーこの先もっとやっていきたいことは?

とりあえず今はfreeeでやりたいことがいっぱいありますね。こんなに新しいことに積極的に挑戦できる場所ってなかなか出会えないので、将来どうなっていくか楽しみなんです。スモールビジネスが効率化してゆくのを、自分の目で見たいですね。

ー最後に、こんな人にfreeeに来て欲しいってありますか?

テクノロジーで世の中をよくすることに、喜びを感じている人がいいですね。

タイムラインを使って、振り返りの材料をうまく集めよう

こんにちは、moaiです。 この記事はfreee Developers Advent Calendar 2018 12/18の記事になります。

今日はタイムラインという振り返りの材料をうまく集める方法を紹介したいと思います。

振り返りするときにこんな悩みはありませんか?

振り返りというのは古今東西どのような組織でも行われていると思います。 そのため、振り返りをやっているうちに、 自分たちの振り返りは本当に振り返りはうまくいっているのだろうかと思うこともあると思います。

例えば、振り返り自体の悩みとしてはこんなものがあるかなと思います。

  • 話題がいつも発散してしまう。
  • うまくメンバーから意見が出てこない。
  • 何か問題がありそうな気もするが対策が良く分からない。
  • 問題は分かるが対策が出てこない。
  • 次にやることがなかなか決まらない。

今回は、『うまくメンバーから意見が出てこない。』、 『何か問題がありそうな気もするが対策が良く分からない。』という悩みに効くタイムラインの紹介です。

そもそもタイムラインって?

ざっくり

タイムラインは振り返りの手法です。 具体的にはホワイトボードに振り返りたいテーマに対して、 あったことや感情を付箋で時系列に沿って貼りだすことを行います。

こんな感じで話し合いを行います。

ホワイトボードに時系列で起こったことを付箋で張り付けながら、それについて話し合う人たちの図
ホワイトボードを使って話し合う人たちの図

大事なポイントはホワイトボードを使うことと、付箋を使うことです。

この手法を用いた振り返りの結果として、こんな成果物が出来上がります。

時系列で起こったことを付箋で張り付けて、ホワイトボード上でGood, Badで分類している様子を図示しているものと、ホワイトボード上で全体的にGood、Badなことを付箋で貼り付け、分類している様子を図示したもの。
タイムラインの成果物

詳しく

事前準備として、付箋を貼れる壁と付箋、付箋に文字を書くためのペンを人数分用意しておきます。

手順は以下のように行われ、特に太字にしたところがタイムラインの特徴的なところです。

  • ファシリテーターが振り返りたいテーマを決めます。
  • 時系列を表す線と、Good、Badの区分けをしておきます。
  • 最初に時系列でもマイルストーンとなるような出来事をいくつかピックアップして書き出しておきます。
  • 参加者にテーマに沿った出来事と思ったことを各自書いてもらい、時系列に沿って貼ってもらいます。
  • 壁に貼りだしたものを使って、良かったこと、悪かったことを分析します。
  • 次にやることを決めます。

この手順にかかる時間は2週間から4週間くらいのプロジェクトでは経験的に30分から1時間くらいでした。

タイムラインの役に立つところは?

振り返りの材料が集まります。

タイムラインを行うことで、振り返りをする際の材料がとてもうまく集まるようになります。

なぜかというと、(振り返り材料を出す)書き出しという行為の心理的な障壁を下げることができるからです。

まず、書き出すという行為と分類する(GoodとBadに貼る)という行為を分けることで、 分類のことはいったん忘れて、書き出す行為に集中できるようになります。 人間はきちんと分類しながら、書き出していくという作業が意外と苦手なのです。

書いている人と分類している人の画像の間に同時にやらないという文字が書かれている図
書くと分けるを同時にやらない

また、付箋を使うことによって、分類や起こった出来事の順番が誤っていたとしても、 すぐに修正できるということが、書き出しや分類する(GoodとBadに貼る)ということに対する 心理的な障壁を下げます。

タイムラインにおいて、付箋を使うことは、書き出す、分類するという行為を分けることでき、 また、すぐに位置を修正できるという非常に重要な意味を持ちます。

こういう小さな工夫が意外と振り返りの材料を出すのを妨げます。

分析のインプットになります

タイムラインを行うことによって、振り返りの良いインプットになります。

なぜかというと、すべての出来事、感情が同じホワイトボードにあることが一覧性が高まり、 それらの関連性が判断しやすくなることが、分析を助けるからです。

タイムラインでは、起こった出来事に対して、どう思ったのかをホワイトボードに貼っているため、 どのように関連しているのかを線でつなげることも、 似ているとおもったら、付箋を近くに持ってくることもできます。

ホワイトボード上でGood, Badで分類している様子を図示しているものに対して、分析した結果、書き込んだ注意書きと注意書きと起こった事象の関連性を線で書き足した箇所を黄色く囲って強調している図
関連性を線で書き足した

人間は二次元的に並べられたものに対して、関連性を見つけたり、違いを見つけることが得意なのです。 箇条書きのように等しく並べられたものに対して、行うよりもずっとうまく行うことができます。

また、この手法は出来事と感情を同じく付箋に書いてもらいます。 そのため、出来事に対して、参加者がどう思ったのかのかも等しく扱うことができます。 これによって、起こったことに対する感情がなぜ起こったのか分析したり、 追加で書き込んだりすることができるため、とてもうまく行えます。

タイムラインにおいて、付箋とホワイトボードを使うことは、すべてのものを二次元的に並べることができるという意味で、 とても重要な意味を持ちます。

タイムラインの役に立たないところは?

タイムラインはあくまで、振り返りの材料をうまく出すということにフォーカスした手法です。

そのため、基本的にはそれ以外のことには効きません。 振り返りの材料は、分析のインプットになるため、分析のために良いインプットを出すという意味はあります。

一方で、『話題がいつも発散してしまう。』や、『次にやることがなかなか決まらない。』といった悩みには効きません。

ホワイトボード上でGood, Badで分類している様子を図示しているものに対して、タイムラインが有効に働かない箇所として、次にやることの箇所を黄色で囲っている図
あまりタイムラインが有効に働かない箇所

これらの悩みはつまり、話し合いのスコープを絞り切れていなかったり、 やることを決める方法が決まっていなかったりすることが原因なので、 タイムラインは、これらの問題の対策としてはうまく作用しないのです。

終わりに

今回は振り返りの手法としてタイムラインを紹介しました。 しかし、振り返りの困りごとは今回のような『うまく意見が出ないなー』ということだけではないと思います。

そんな時でも先人たちは振り返りに対する困りごと毎に、いろいろな対策を考えてきました。 その悩みと対策を紹介した本として、アジャイルレトロスペクティブという本があります。

アジャイルレトロスペクティブズ 強いチームを育てる「ふりかえり」の手引き

アジャイルレトロスペクティブズ 強いチームを育てる「ふりかえり」の手引き

この本を読むと、自分の悩みが振り返りにおいては、どんな意味を持つのか、 また、その悩みにはどんな対策があるのかを知ることができます。 是非参考にしてみてください。

この記事を読んだ、みなさんの振り返りがより実りあるものになると願っています。

明日はShuhei Kotegawaさんによる『APIの話 or プロマネデビューして学んだこと』です。 お楽しみに。

突撃!隣の自作キーボード

こんにちは、SREの id:foostan です。 この記事はfreee Developers Advent Calendar 2018の17日目です。

昨年に引き続きキーボードネタでお送りします。 なお昨年の記事はこちらになります。

developers.freee.co.jp

今年は自作キーボード特集!

皆さんは自作キーボードをご存知でしょうか。 今年は巷では自作キーボード元年と比喩されるほど、国内で「キーボードを自分で作る」ことが流行った年になりました。

キーボードを作る?と思った方に簡単に説明すると、キーボードというものは

  • キースイッチ
  • キーキャップ
  • ケース
  • 基板(PCB)
  • その他電子部品

で構成されていて、自作キーボードとはその名の通り、これらのパーツを買い揃えて組み立てたものです。一見難しそうに思えますが、これらのパーツは「自作キーボードキット」という形ですべて(もしくは主要なパーツ)が揃った状態で販売されています。

2018年は国内でこのようなキットの販売を開始した方々が大勢現れた年であり、キーボード好きがこぞってそれらキットを買い漁った年とも言えます。

社内でもそのブームが起こっていて、2017年には自作キーボードユーザは2人しかいませんでしたが、今年は23人も自作キーボードキットを買うという異常事態でした*1

社内にあふれる自作キーボードキットの数々

こちらは皆が購入したキットについて集計した結果です*2

自作キーボードキットをいくつ持っていますか?のアンケート結果。1位は1個の56.5%、2〜3個が21.7%、10個以上という人もいる
キットの内訳結果。Irisが一番多く、HelixやCorneが続く

キットの所持数は1つだけという人がさすがに多いですが、「ひとつ作ったらまた作りたくなった」と言い、複数個買うケースが多く見られました。 買ったキットをすべて作ったというわけではないですが、2個3個は普通で、中には10個近く買う人もいます。

その内訳を見るとIris*3、Helix*4、Corne*5の順で購入数が多いです。 自作キーボードに興味を持った人は分割キーボードを求めているケースが多く、ErgoDoxじゃ大きすぎるという理由でIrisを購入する人が多くいました。 Helixは人気のキーボードなので弊社でも持っている人が多いです。 CorneについてはIrisを使ってみた結果数字列がいらないな、という理由で購入された人が多い印象です。

次はキースイッチについてです。

スイッチのタイプはタクタイルが1位の56.1%、リニアが26.8%、クリッキーが17.1% その内訳。Gateron Silent Brown、Gateron Red、Gateron Brownが人気。

自作キーボードで使われるスイッチは基本的にはメカニカルスイッチと呼ばれるものですが、そのスイッチには主に3つのタイプがあります。

  • タクタイル: スイッチ感があるもの
  • クリッキー: スイッチ感がありかつカチカチと音を鳴らすもの
  • リニア: スイッチ感がなくスコスコと押せるもの

社内での利用状況を見るとタクタイルが一番多く、その次はリニアでした。さすがに社内でクリッキーを使う人は少ないようです。 またその内訳を見ると、Gateron Silent Brown が一番多く5人でした。ちなみにGateronとはキースイッチを製造している中国の会社で、Silent Brownとはそこで出している静音タイプの茶軸のことです。 よく市販されている茶軸と似たような感触でかつ静音タイプなのでオフィスでも使いやすく、人気が高いようでした。

ちなみに社内でキットの購入を考えている方には以下のようなキースイッチのテスターで実際にいろいろ触ってもらっています。 Gateron Silent Brown、Zealios、Zilentが人気ですが、ZealiosやZilentは値段を聞いて諦めることが多いです。

f:id:foostan:20181214120134j:plain
キースイッチのテスター

社内での活動

コミュニティ

社内SNSのコミュニティ 昨年のアドベントカレンダーの記事を書くにあたり社内にはキーボード好きが多くいることがわかったので、Workplace(社内Facebook)にてキーボードグループを作成し、ライトな話題からディープなやりとりまでざっくばらんに情報交換をしています。

こちらのコミュニティで自作キーボードキットやキースイッチの共同購入の話などもしています。 キースイッチの共同購入の呼び掛け いろいろな部品の共同購入の呼び掛け

自作キーボードキットの共同購入

2018年のはじめ頃はまだ国内で手に入る自作キーボードキットはあまりなかったので、海外で販売されているキットの共同購入の計画を立てたりもしました。 またHelixの販売開始直後は在庫が復活しても1時間足らずで売り切れるほど人気でまとまった数がなかなか手に入らなかったため、公開されているデータ*6から基板の発注やその他パーツを共同購入したりもしました。

共同購入した大量のHelix 共同購入した大量のIris

定期開催されるもくもく会

自作キーボードに興味を持った人が社内に大勢いたので社内の部活動として認定*7してもらい、定期的にもくもく会を開催しています。

細かいはんだ付け
キースイッチをつけて完成間近
ダイオードを刺した状態、これからはんだ付けを行うところ

個人のキーボード紹介

今回キーボードを作成した10人にインタビューをしたのでそれぞれ紹介していきます。

taiyo

社内でユーザが多いIris。白い無刻印にfreeeキーキャップと紫の2Uキーキャップが映える

Q: 自作キーボードキットを購入したきっかけを教えてください

元々HHKBを使っていて、キーボード自体への興味がありました。 セパレートを選んだのは肩を広げて肩こりを減らせると思ったからで、自作しようと思ったのはそういう工作の経験がほとんどなかったのでやってみようと思ったからです。 また個人の特性として周りが持っていないようなオリジナルものを作る、持つ、使うということに悦びを感じるのも理由の一つです。

Q: 製作してみていかがでしたか?

不器用なので最初ははんだ付け自体に困難を感じましたが、はんだ付けし終わって、全部通電した時は気持ちよかったです。 キーキャップやキースイッチ、キーマップまで自分の好きなようにカスタマイズできるので、自分に最適化させたモノを作れるということ自体が楽しいです。

Q: 次にやりたいことはありますか?

キーキャップはデザインにもこだわったものを買って使いたいです。 あとキット購入済みのCorneとHelixを光らせたい!

Q: キーボードについてこだわりポイントがあれば教えてください

キースイッチは納得いったものを使うようにしています。 どちらかというと重めで打鍵感があるものを好んで使用しています。

これぐらい肩を広げられるのはセパレートタイプの醍醐味

budougumi0617

最初はIrisを使っていたが、数字列が不要と感じCorneを使い始めた

Q: 自作キーボードキットを購入したきっかけを教えてください

リーダー(narinari)が沼の人だったためです。

Q: 製作してみていかがでしたか?

はんだ付けしていると時間も溶ける。

Q: 次にやりたいことはありますか?

キー配置を探求したいです。

Q: キーボードについてこだわりポイントがあれば教えてください

なるべくホームポジションを崩さない(崩れない)ようにしたいと思っています。

MacBookのトラックパッドが中央に来るようにキーボードを配置している

narinari

自ら設計した 'Xenon'。すべて1UのColumn Staggered。ロープロファイルを組み合わせているのが特徴的。

Q: 自作キーボードキットを購入したきっかけを教えてください

腱鞘炎になったので手に優しいキーボードを探していました。

Q: 製作してみていかがでしたか?

たくさん作ったので、だんだん組み立てる速度が早くなってきてよりハードルが下がってます。キーマップはホント沼で終りが見えず、仮住まいで満足した気になっています。

Q: 次にやりたいことはありますか?

自分用に設計したPCBを公開できていないので公開したいです。別のキーボードの設計も始めてます。

Q: キーボードについてこだわりポイントがあれば教えてください

作りすぎてあまりこだわりが無くなっている気がします。あえて言うなら、選ぶキーボードは必ず割れていることですかね。

f:id:foostan:20181211201907j:plain
こちらは同僚に貸しているHelix。こちらもロープロファイルを組み合わせている。

noblejasper

Irisは家用とオフィス用で2台制作。撮影用に持ってきてもらったのでデスクに2台置いてあるが、さすがに普段は1台だけとのこと。

Q: 自作キーボードキットを購入したきっかけを教えてください

以前はErgoDoxを使っていましたが、キーが多く不満を感じていたからです。

Q: 製作してみていかがでしたか?

人生初のはんだでしたが、没頭できて楽しかったです。難しかった点は ProMicro を浮いた状態ではんだ付けしてしまって、破壊しながら外した所ですかね。絶望感がすごい。

Q: 次にやりたいことはありますか?

キーキャップを作りたい&PCBを設計してみたいです。

Q: キーボードについてこだわりポイントがあれば教えてください

肩がこらないようにすることです。 来年はPCB販売できる所までやれたら理想的ですね。

freeeではオリジナルのキーキャップをノベルティとしてイベントなどで配っているので見かけた際は是非。

ikesho

Zealiosスイッチをプレートにはめたところ。クリアなハウジングに紫の軸がよく映える

Q: 自作キーボードキットを購入したきっかけを教えてください

2つにわかれたキーボードが欲しく、また面白そうだったためです。

Q: 製作してみていかがでしたか?

電子工作を久しぶりにしたので楽しいです。また自分で作ったぶん、愛着がわきます。

Q: キーボードについてこだわりポイントがあれば教えてください

押しごこちこそが重要だと思っているので、スイッチは遠慮しませんでした。

完成まであと一歩

かず

シンプルな黒の無刻印キーキャップ

Q: 自作キーボードキットを購入したきっかけを教えてください

面白そうだったからです。

Q: 製作してみていかがでしたか?

LEDを付けるのが難しかったです。あとキーマップを考えるのが楽しいです。

Q: 次にやりたいことはありますか?

新しいものを何台か作ってみて、後々はPCBを設計したいです。

Q: キーボードについてこだわりポイントがあれば教えてください

打った感じが、メカニカルの方が好きです(だいたい値段が高めなので最近は買えてない)。

スイッチはGateron Red。LEDをつけるためSMD対応のハウジング。

toofu__

動作確認をしている様子。挙動が不安定なためまだ修正が必要。

Q: 自作キーボードキットを購入したきっかけを教えてください

しばらくHHKBを使っていて、何か新しいのを触りたいなと思ったときに、かわいい見た目の自作キーボードが目に入ってきたためです。

Q: 製作してみていかがでしたか?

2台製作したんですが(IrisとMint60*8)、どちらも完成まで組み立てたところで「一部のキーがうまく動かない」「左右の通信がうまくいかない」といった不具合が発覚し、直すためにはスイッチのはんだをシュッ*9しなければならないというツラい状況になりました。 まだ1台も完成していないので、現状「ただ自作キーボードに数万円費やして何も成していない人」になっています。 もはや他の人に製作外注したほうがいいのかもしれないです。

Q: キーボードについてこだわりポイントがあれば教えてください

かわいいやつ。

修復をしている様子。 キットによっては修復の際にキースイッチやProMicroのはんだ付けをやり直す必要があり、このような専用の工具(はんだシュッ太郎)を使うと効率的。

ララ・チャン

丁寧に仕上げたLily58*10。白い基版に白いキーキャップがよく似合う。
※ 片側のProMicroは修復をした関係で裏表逆についています(本来のキットは同じ向きなので注意)。

Q: 自作キーボードキットを購入したきっかけを教えてください

分割キーボードに憧れたためです。アニメとかで見る多面コンソールっぽいですね。

Q: 製作してみていかがでしたか?

以前、ゼロから作る方法も教えてもらったのですが、難易度が高すぎて「既製品でいいかな〜」と断念しかかってました*11。 今回はワンセットになっているキットが好きなデザインで、一緒に教えてくれる環境があったので、めでたくデビューできました。 安心感半端なく、人に紹介できるくらい楽しかったです。

難しかったところといえば、基礎知識大事だなーと。 はんだ付けの上手い下手がどういうものなのか、ProMicroの設置場所は基板をよく見ないとずれちゃうとかはいい経験値になりました(^^)ゞ

Q: 次にやりたいことはありますか?

キーマップ作成やキーマップに合わせた印字のキーキャップ作成。 あと新しいものも作りたいかも。

Q: キーボードについてこだわりポイントがあれば教えてください

色と配列です。また操作性とデザイン突き詰めたいです。

はんだ付けは中学の授業以来とのことだが、はんだ付けの仕方を動画で学んで制作に挑んだとのこと。久々のハンダ付けとは思えないほど綺麗な仕上がり。

foostan

MacのトラックパッドとCorneの組み合わせ。

Q: 自作キーボードキットを購入したきっかけを教えてください

Let's Splitを見て小さくてかわいいなーと思っていたところに、先に沼に浸かっていた方(narinariさん)が入社してきたのでそこからパーツを集め始めました。

Q: 製作してみていかがでしたか?

始めた当初は久々のはんだ付けだったのでうまくいかないことが多かったです。 それなりに良いはんだごてを買ってからはきれいにできるようになりましたが、HelixのLEDで挫折しかけました。

Q: 次にやりたいことはありますか?

Corneの改良とModulo対応*12は直近でやろうかなと思っています。 あとdactyle-manuform*13のような立体型のキーボードを作ってみたいです。

Q: キーボードについてこだわりポイントがあれば教えてください

キー配置とキースイッチの推し心地にはこだわっていますが、まだ納得していません。

たくさんの数字を打つことがあるので、テンキーは別で用意している(Attack25*14 )。

ymrl

f:id:foostan:20181212155746j:plain
スタンディングデスクにたくさんのキーボードが並んでいる。ちなみにHHKBはPCにつながっていない。

メインで使っているのはErgo42*15。これに特徴的なキーキャップが並んでいる。

Q: 自作キーボードキットを購入したきっかけを教えてください

最初は同僚に誘われたためです。そのあと数字列要らないとか考えるようになって色々と。

Q: 次にやりたいことはありますか?

自分のほしいものものはいろいろ作れたので、ちょっと興味あるくらいの人に勧められる何かとかを考えたいですね。

Q: キーボードについてこだわりポイントがあれば教えてください

スイッチの感触や英字配列、外付けキーボードもノートPC本体のキーボードもMacもWindowsも違和感なく乗り換えられるように、ソフトウェアによるキーリマップを併用したりすることですね。 あとはセミコロンとエンターを入れ替えています。

こちらは馬の毛を使ったキーボード専用のブラシ。以前HHKBミートアップで登壇した際にもらったもの。

f:id:foostan:20181214124008j:plain
キーボードはファッション(KeyPierce*16 )

最後に

いかがでしたでしょうか。

同じ自作キーボードキットでもひとつひとつ個性があり、またキーマップをこだわるなど自分に最適なキーボードを追い求めている人がたくさんいました。皆さんのこだわりの話が聞けてインタビューしていてとても楽しかったです。

freeeでは一緒に仕事をする仲間を募集しているのはもちろんですが、一緒に沼(≒温泉)に入ってくれる仲間を募集しています。

自作キーボードの集合写真

明日は最近DDDにハマっている id:ryamazaki です。お楽しみに!

*1:だたしそのうちメインで使っているのは10人程度です

*2:筆者はCorneの製作者なのでCorneのカウントは省きました

*3: Keeb.ioにて販売されている分離型キーボード。ErgoDoxよりも小型だが数字列があるので初めてでもとっつきやすいです。

*4:遊舎工房にて販売されている左右分離型キーボード。国内初の自作キーボードキットとして登場しブームの火付け役となりました。

*5:筆者が設計/公開している小型の左右分離型キーボード。Irisに似ていますが数字列がありません。

*6:MIT Licenseで公開されています。

*7:公式認定されると部費で工具等を買ってもらえます。

*8:ゆかりキーボードファクトリーで販売されている左右分離型キーボード。自作キーボード初心者にとって組みやすくまた扱いやすくなっています。

*9:はんだシュッ太郎 によってはんだを吸い取る行為

*10:ゆーち氏が設計/販売している左右分離型キーボード(現在は販売終了しているが冬コミで新しい版が販売される予定)。Irisに似ているがキー数が少し多くまた薄型になっています。

*11:部活動の一環としてPCBを一から設計する会を行いました。

*12: Ergo42 Modulo のペンダント対応

*13:3Dデータが公開されているため好みに修正して3Dプリントすることが可能です。

*14:monksoffunk氏が設計/販売している25キーのキーボード。テンキーとして最適です。

*15:Biacco42氏が設計/販売している左右分離型キーボード。レツプリよりも内側に1行多く、カッコを配置するなどプログラマ向けのキーマップがしやすい設計になっています。

*16:tomykaira氏が設計/販売されていた1キーだけのキーボード。PCに接続して使うことができます。