Apple のオープンソースライブラリ ArgumentParser
Swift.org - Announcing ArgumentParser
2月末に Swift.org でアナウンスされた ArgumentParser をいろいろと触ってみたので紹介的なものを書いてみようと思います。
基本的にはわかりやすい英語とサンプルコードで書かれている 本家 Documentation が一次情報なのでそちらを読んでください。リポジトリには 動作するサンプルコード もあるのでそちらを動かすのもおすすめです。
この記事の執筆時点では ver 0.0.2 がリリースされていますが僕が試したのは v0.0.1 なのでご了承ください。
はじめに
3rd Party 製の Command Line Tool 向けの Argument Parser だったりフレームワークのようなものは以前からありました。Apple 自身も Swift Package Manager 内部で使われていた ArgumentParser (名前が同じでややこしい)は存在しており、apple/swift-tools-support-core (以下 TSC)として切り出されていました。今回アナウンスされたものは TSC の ArgumentParser とも別物の単体のオープンソースライブラリとしてリリースされました。
特徴としては Swift 5.1 で追加された Property Wrapper を使ってコマンドのパラメータとプロパティの対応が宣言的に書けるようなライブラリになっています。ある種のフレームワーク的なものとしても捉えられ、仕組みに沿ってコードを書いていけば簡単にコマンドラインツールが書けるようになっています。おかげで本質的な処理部分に時間をかけられるのはうれしいところです。
Apple が作っているいくつかのオープンソースプロダクトは TSC から ArgumentParser に乗り換える方向のようです。(indexstore-db
と swift-format
で PR が出されていてまだマージはされていない)
今回は僕がドキュメントを読んだり少し触った範囲で気になったことを書いていきます。
僕の背景として、公開はしていませんが5個ほど TSC を使ったコマンドラインツールを個人的に書いたことがあります。他の言語だと Go と Node.js で少しコマンドラインツールを使ったことがあります。
できること
- よくあるパターンの引数のパース処理を Property Wrapper を使って簡単に書ける
- フラグ
--verbose
みたいなただのフラグ・スイッチ的なオプションの指定方法
- オプション
swift build --configuration debug
の--configuration debug
のように名前付きの引数みたいなオプションの指定方法
- 引数
ls ~/
みたいに何もつかない引数
- フラグ
- help もデフォで最低限は生成される
-h
--help
がデフォルトで実装される
- エラーメッセージもデフォで最低限を返してくれる
- 型チェックとか必須パラメータの不足など
- ParsableCommand に準拠した型でコマンドを定義する
func run() throws
メソッド内にコマンドの処理を書く
- 実行自体は static メソッド
main
を呼ぶだけで、引数のパースや ParsableCommand の run をよしなに呼んでくれる - オプションのショートネームも定義できる
- Swift で一般的な Lower camel case は自動的に Kebab case に変換されたオプション名になる
@Flag() var printSupportedFile: Bool
は--print-supported-file
@Flag(name: .shortAndLong) var printSupportedFile: Bool
とすれば自動的に頭文字を使ったショートネームが追加されて-p
,--print-supported-file
が使えるようになる@Flag(name: [.customShort("s") .customLong("support-file")]) var printSupportedFile: Bool
とすれば自動生成じゃなく自分で任意のパラメータ名にできる。この場合は-s
,--support-file
が使えるようになる
- Swift で一般的な Lower camel case は自動的に Kebab case に変換されたオプション名になる
- long オプションは基本的に
--
だけどwithSingleDash: true
すれば-
形式にできるけど推奨はされていない - 独自の型もパースできる(してもらえる)
ExpressibleByArgument
に準拠してinit?(argument:)
を実装する- enum も RawRepresentable に対応してるような奴は
ExpressibleByArgument
に準拠してると宣言するだけで済む。 - transform 関数を実装していればパースできたりもする
- フラグの反転も指定できる
@Flag(inversion: .prefixedNo) var index: Bool
だと--index
と--no-index
が定義される@Flag(inversion: .prefixedEnableDisable)
だと--enable-hogehoge
と--disable-hogehoge
- CaseIterable と String の RawRepresentable に対応した enum を使えばフラグをまとめたりとかもできる
- Flag オプションを Int 型に適用すると呼び出された回数が入ってくる
-vvvv
とかしたら verbose プロパティの値は 4 になってるみたいなことができる
- 引数のパース方法は選べるけどほとんどの場合ややこしいことになる
@Option(parsing: . upToNextOption) var file: [String]
のケースだけはちょっと便利かもしれない。毎回 --file hoge ってしなくても連続して --file のオプションを渡せるから。
- サブコマンドの実装ができる
- ツリー上にパースされていく
- コマンド名は基本的に型名が使われるが以下のように明示もできる
swift static var configuration = CommandConfiguration( commandName: "stdev", abstract: "Print the standard deviation of the values.")
- サブコマンドのサブコマンドも作れる
- 共通のオプション(設定)は
ParsableArguments
に準拠した Struct とかを用意して、@OptionGroup() var options: Math.Options
と書くことでまとめられる- ちょっとオプションの多いコマンドを作ったときにはオプションのカテゴライズをしてまとめられてコードが見やすくなるし、排他処理も書きやすくなる
- ヘルプのカスタマイズ
- @Flagとかの help 引数に文字列を明示的にあたえることでコメントを追加できる
- より細かいカスタムは上記で渡していた文字列の代わりに
ArgumentHelp
のインスタンスを渡すことで可能 - コマンドやサブコマンドのヘルプは
static var configuration = CommandConfiguration( XXXX )
でできる - デフォルトの
-h
,--help
のパラメータ名はカスタム可能。Root レベルのコマンドに対する CommandConfiguration で helpName: で指定可能 - ヘルプに出力したくない場合には
@Flag(help: .hidden)
とかすれば、試験的に追加した機能とかをヘルプに出力せずにすませられる
- バリデーション
ParsableCommand
とParsableArguments
にvalidate()
を実装することでバリデーションできる- throw すればそのメッセージが標準エラーに出力されてエラーコードで終了する
- runメソッド内でも実行時エラーを throw できる
- v0.0.2 では
ExitCode
という Error が用意されたので自前でエラーメッセージを出力してthrow ExitCode.failure
することで綺麗にエラーからの終了が実装できるようになった
- v0.0.2 では
- マニュアルでパース
できないこと(提供されてないこと)
- コマンドラインツール的に便利なパスの処理
- 外部のコマンドの呼び出しのサポート
これらはライブラリの名前から連想する対応範囲を超えているように思えるので別のライブラリなどを使った方が良いかもしれないです。僕は個人的にパス周りは Path.swift, パスまわりや外部のコマンド呼び出しは前述の TSC を使ったりしています。
それ以外は特別困っていません。
まとめ
コマンドラインツールはいろんな宗派があると思うので好みが分かれると思います。細かいことを言えば切りがないかも知れません。とはいえ
Swift でコマンドラインツールを書く場合、これらは利点だと思うのでぜひ皆さんも使って見たらいいと思います。
iPhone 11 Pro 購入記録
ちょっと日にちがあいてしまいましたが購入記録を貼り付けておきます。
続きを読むiPhone 11 Pro 予約記録
予約日から数日経ちましたが 2019/09/13(金) の様子を記録として残しておきます。
今回は予約開始が 21:00 からというのが去年と大きく違っています。各キャリアともネット予約に関しては 21:00 から受付ですが、店舗受付に関しては店舗によっては翌日の朝からの対応という情報が流れていました。ヨドバシカメラ梅田は店舗での受け付けも 21:00 から対応してくれるということだったので現地向かいました。
ヨドバシ梅田に到着 pic.twitter.com/mM4MDKQmjS
— stewie (@griffin_stewie) 2019年9月13日
キャリアの店舗外のいつもの歩道でいるけどそれらしき人はいない。 ヨドバシ梅田。
— stewie (@griffin_stewie) 2019年9月13日
ずっと同僚とauの店前で待ってたけど、やっと列を仕切るためのコーンとかを出してきたので店別に分かれた。
— stewie (@griffin_stewie) 2019年9月13日
これがコーンです pic.twitter.com/Gu6fRP2yIR
— stewie (@griffin_stewie) 2019年9月13日
予約のための事前用紙記入done
— stewie (@griffin_stewie) 2019年9月13日
ええ、そうなりますよね。優勝🏆ってことですよね? pic.twitter.com/EYbZUDiamF
— stewie (@griffin_stewie) 2019年9月13日
僕のためのコーン8本
— stewie (@griffin_stewie) 2019年9月13日
「最後尾こちら」を持つお兄さんとツーマンセル組んでますがなにか?
— stewie (@griffin_stewie) 2019年9月13日
僕のためのコーンと仕切り棒なのに通行人が中を通っていくんですけど〜
— stewie (@griffin_stewie) 2019年9月13日
あ、1人増えた!
— stewie (@griffin_stewie) 2019年9月13日
一機アップみたいなもんよね。緑のきのこ取ったんかな。
— stewie (@griffin_stewie) 2019年9月13日
我が軍勢は3に増えました。
— stewie (@griffin_stewie) 2019年9月13日
僕ぐらいになってきたらお店側の人の顔も覚えてきて「あ、あの人去年並んでる時に優しく声をかけてくれた人や」とかなるわけですよ。
— stewie (@griffin_stewie) 2019年9月13日
名刺交換した方がいいかな?って気持ちになるわ
— stewie (@griffin_stewie) 2019年9月13日
中のカウンターで待たせてもらえる様になった
— stewie (@griffin_stewie) 2019年9月13日
椅子に座って待てるのは楽でいい。
— stewie (@griffin_stewie) 2019年9月13日
見積もりとか説明とか事前に受けてる
— stewie (@griffin_stewie) 2019年9月13日
開始してくれてるなう
— stewie (@griffin_stewie) 2019年9月13日
無事終了。帰る。
— stewie (@griffin_stewie) 2019年9月13日
当日持っていったもの
結果として終始Tシャツのままだったし、同僚とずっとしゃべっていたので座ることもなかった。とはいえ備えあれば憂いなし。
来年に向けて
- 予約時には各キャリア前に並ぶで正解では?
- 最近は並ぶ人も少ないので1〜2時間前でも十分かも
- 店内カウンターで待たせてもらえる可能性大
Sketch で Symbol 新規作成時の名前入力で入力補完してくれる Plugin 「SymbolNameAutocomplete」を作ってみた
I released @sketchapp plugin called SymbolNameAutocomplete. This plugin gives you autocompletion of symbol names when creating a symbol. https://t.co/Z6GFbf4tjC #sketchapp #sketchplugin pic.twitter.com/Wxf93RlqVE
— stewie (@griffin_stewie) 2018年12月24日
昨晩、Sketch Plugin 「SymbolNameAutocomplete」を公開しました。
できること
Symbol の新規作成時に Symbol 名を入力する時に入力補完してくれます。
より具体的には以下のような感じに振る舞います。
- 既に存在している Local Symbol を対象とする
/
による階層分け毎にマッチングさせていく- 補完決定時に下位階層がある場合には
/
まで補完 /
の前後に半角スペースなどを入れている場合には<半角スペース>/<半角スペース>
まで補完
/
の前後のスペースを考慮して補完するあたりはこだわりました。候補の選択にカーソルキーが使えるのは当然のこと、Ctrl+N
, Ctrl+P
での移動にもちゃんと対応させています。
背景
- 2018年2月28日 『try! macOS meet-up』で「Symbol 新規作成時の名前入力で Safari のアドレス補完っぽく入力補完したい」と @usagimaru 氏, @dy4_268 氏 に相談するも具体的な方法まで至らず
- その筋の人達でも即答即解決とはいかず
- 2018年3月頃にあるデザイナーが「命名するときに入力補完されたらええのにな!」という。
- 需要を認識
- 2018年7月10日 zeplin/emoji-autocomplete-sketch-plugin: Type “:” followed by the first few letters to autocomplete emojis. 🍒 zeplin が emoji の Autocomplete プラグインをおもむろにリリース
- 大いに参考になるとコードを読んでみる
- 2018年9月29日 ずむ on Twitter: "WWDC 2010 Session 145 "Key Event Handling in Cocoa Applications" を見たら入力フィールドの下に出てくる候補表示の作り方があった! 今のところ Archive のページから入手可能。 https://t.co/rhyw9DnPAE" つぶやき発見
- そのものズバリの情報。
- サンプルコードもある!CustomMenus
- 連休で暇になりトライ
まとめ
これまでも公開していないですがいくつか Sketch Plugin は書いていましたがいずれも CocoaScript で書いたものばかりでしたが、今回はじめて Objective-C で書きました。zeplin の emoji-autocomplete-sketch-plugin のおかげで割とすんなり作れました。今はまだソースコードは公開していませんが時間が取れたら公開したいと思います。
このプラグインを使うことで Symbol の命名規則のブレをある程度抑えることができると思いますので使ってみてください。
ErgoDash を作ってみた
結構前に作ってたんだけどキーキャップの到着が遅かったりしてエントリ書けてなかったので書いてみます。といっても Twitter 貼り付けるだけになってます。
TALP KEYBOARD さんと遊舎工房さんからキースイッチ届いた! Gateron MX White と Aliaz Silent と Kailh Pro Burgundy pic.twitter.com/K7arDcvotR
— stewie (@griffin_stewie) 2018年10月24日
あとは #Ergodash 本体を待つのみ。
— stewie (@griffin_stewie) 2018年10月24日
とはいえ、親指側のキーを多くしたいのでケースを遊舎工房さんで切ってもらおうかなとも思ったり。
— stewie (@griffin_stewie) 2018年10月24日
White は予定通りの軽さで思惑通り小指あたりに最適そう。Aliaz Silent と Burgundy はある程度覚悟してたけどちょっと重いなぁ。
— stewie (@griffin_stewie) 2018年10月24日
#ergodash の親指多いケースってA4じゃ収まらないのね (´・ェ・`)
— stewie (@griffin_stewie) 2018年10月24日
ErgoDash が発送されたらしい!
— stewie (@griffin_stewie) 2018年10月25日
人の完成写真見てると親指キーを多めにしてるのにケースはキット付属のヤツのままの人がちらほら。PCB割れないのかな?僕は遊舎工房さんに発注した。昨日の深夜に投げて今日もう発送された。ほんとありがたい! #ErgoDash
— stewie (@griffin_stewie) 2018年10月26日
#ErgoDash が今日届くらしい。アクリルケースも同じ場所にあるっぽいので今日作れるんじゃね?キーキャップはまだ届いてないけど。Mint60 の時のあまりで片手分はとりあえずいけるな。
— stewie (@griffin_stewie) 2018年10月27日
Dash とアクリル届いたので作るぞ!
— stewie (@griffin_stewie) 2018年10月27日
綺麗で丁寧な梱包 pic.twitter.com/c90oxJHRTn
— stewie (@griffin_stewie) 2018年10月27日
僕のはじめてのイラレ作業です。(図は書いてなくてコピペして配置調整しただけ) pic.twitter.com/OkBCwfYaP9
— stewie (@griffin_stewie) 2018年10月27日
紙をくれるの嬉しい!遊舎工房さんありがとうございました!
— stewie (@griffin_stewie) 2018年10月27日
届いた #ErgoDash pic.twitter.com/wZ8NGAaoyT
— stewie (@griffin_stewie) 2018年10月27日
アクリルは遊舎工房さんで切ってもらった奴があるので今回は使わない。
— stewie (@griffin_stewie) 2018年10月27日
PCB カッコいい pic.twitter.com/QYMAiKEfUg
— stewie (@griffin_stewie) 2018年10月27日
まずは硬化に時間がかかる Moge Micro 対策。過去の経験から上に盛る量は薄くした。 pic.twitter.com/uthBoJdmzb
— stewie (@griffin_stewie) 2018年10月27日
リバーシブルっぽかったので自分で表を設定してマステ貼り付け
— stewie (@griffin_stewie) 2018年10月27日
— stewie (@griffin_stewie) 2018年10月27日
ひたすらダイオードを曲げる。Mint60 よりも曲げ間隔広いので注意 pic.twitter.com/WDeRIs2uRQ
— stewie (@griffin_stewie) 2018年10月27日
割とマメにマステで押さえながらハンダ付け中 pic.twitter.com/XiK6FajUfh
— stewie (@griffin_stewie) 2018年10月27日
片手分のダイオードはハンダ付け完了 pic.twitter.com/km5HXw4ke7
— stewie (@griffin_stewie) 2018年10月27日
反対の手のダイオードも完了 pic.twitter.com/xiE9nDgYQJ
— stewie (@griffin_stewie) 2018年10月27日
TRRSジャックまで付けて一旦終了
— stewie (@griffin_stewie) 2018年10月27日
@omkbd ビルドガイド見ながら組み立ててる最中なのですが質問があります。Backlight なしで Undergrow のみありにしたいのですが、2番の工程だけ飛ばせば大丈夫でしょうか? https://t.co/dsIwfJi8b9
— stewie (@griffin_stewie) 2018年10月27日
ありがとうございます。一瞬抵抗とか買いそろえてなかったので焦ってました。安心しました。
— stewie (@griffin_stewie) 2018年10月27日
Undergrow の LED つけるのめっちゃしんどい。 pic.twitter.com/5bd4fKOlJx
— stewie (@griffin_stewie) 2018年10月27日
左手(マスター側)だけスイッチつけた。LED が不安なので先行で。明日は ProMicro つけて左だけ動作確認する。キーキャップはまだ届いてない… pic.twitter.com/DOKVecubcx
— stewie (@griffin_stewie) 2018年10月27日
今朝ちょっとだけ作業。左手のProMicro をハンダ付けして動作確認。親指側を伸ばした方はキーマップアサインされてないので動くかわからないけど他は大丈夫。どうもWinモードっぽい感じなのでちゃんと右手も動作確認できる程度に組めたらキーマップ調整する
— stewie (@griffin_stewie) 2018年10月28日
不安要素のLEDはまだ確認できてない(できない?)のでケースはまだ組まずに午後に右手を組む予定。
— stewie (@griffin_stewie) 2018年10月28日
TALP さんからキーキャップが今日届くみたい。タイミング的にバッチリ。
— stewie (@griffin_stewie) 2018年10月28日
本命キーキャップがまだAliから届く気配がないんだが…
— stewie (@griffin_stewie) 2018年10月28日
届いた pic.twitter.com/qHF2Lh72hk
— stewie (@griffin_stewie) 2018年10月28日
さて今日の夕方の部を開始する。右手のアンダーグローLED。左手と逆向きらしいがイマイチわからないので感でいく。 #ErgoDash
— stewie (@griffin_stewie) 2018年10月28日
午前中に買ったフラックスとやらでどうやりやすさが変わるか検証
— stewie (@griffin_stewie) 2018年10月28日
LED はフラックスのおかげかわからないままながらコツを掴んですんなり。キースイッチのハンダまで完成。あってるのかどうかはよくわからない pic.twitter.com/c1ruGac99m
— stewie (@griffin_stewie) 2018年10月28日
右手の ProMicro をハンダ付けして、右だけMacに繋いでもProMicroのLEDが光らない。ファームを焼こうにもリセットも反応しない。左手にUSB刺してTRRSケーブルで繋いだら両手とも認識しない。どこが悪いんだ? #ErgoDash
— stewie (@griffin_stewie) 2018年10月28日
ありがとうございます。ProMicro単独の動作検証はしていませんでしたが、ジャンパのところでがショートしていたのが原因でした。Discordで助けていただきました。今はUndergrowのLEDが2つしか点かない問題の対処中です。
— stewie (@griffin_stewie) 2018年10月28日
Discordで泣きついたら親切な方が助けてくれてこの問題は解決。ジャンパのところでショートさせてた。右手の1個のキーが効かない問題が続けて発生したけどこれはダイオードをつけ忘れてた。以前Mint60か何かを作ったときの余っていたダイオードを無理矢理つけて解決。
— stewie (@griffin_stewie) 2018年10月28日
今はUndergrowが2個しか点かない問題(スレイブ側が点かないのはTRSケーブルのせいというのは教えてもらった)
— stewie (@griffin_stewie) 2018年10月28日
ダメな子のすぐ隣のLEDを新品に付け替えたら左手は全部光った!
— stewie (@griffin_stewie) 2018年10月28日
ケース付けるのに干渉するっぽいのでピンヘッダを切る pic.twitter.com/qgKO23mSjD
— stewie (@griffin_stewie) 2018年10月28日
@omkbd ケースを親指を拡張した物を使って作っているのですが、赤丸の部分はどのサイズのスペーサを使うのがあっているのでしょうか?該当サイズのものがKitに同梱されていないのは承知の上でお伺いしています。 pic.twitter.com/0yLuUM9Yfl
— stewie (@griffin_stewie) 2018年10月28日
ケースの組み方はこれであってるかな? #ErgoDash pic.twitter.com/C3Sp3GSaMf
— stewie (@griffin_stewie) 2018年10月28日
@omkbd すみません自己解決しました。M2×6mm スペーサー でいけました。買い足してます。
— stewie (@griffin_stewie) 2018年10月28日
左手完成。キーキャップは本命が届かない&キーマップ固めてないので仮。(次のに使う予定) pic.twitter.com/yCQqo3qxbn
— stewie (@griffin_stewie) 2018年10月28日
明日は右手をやろう
— stewie (@griffin_stewie) 2018年10月28日
TALP さん、サービスでキーキャップ外しとエンターキーくれた。ありがたし! #自作キーボード
— stewie (@griffin_stewie) 2018年10月28日
左手軽く触っただけだけど #ErgoDash もしかして使いやすい⁉︎
— stewie (@griffin_stewie) 2018年10月28日
昨日の続き。TRRSケーブルは持って帰ってきて繋いでみた。右側のLEDは全部ちゃんと動作してた!右側はフラックス使って先にやった左よりも慣れたのでトラブルがなかったみたい。やったね!
— stewie (@griffin_stewie) 2018年10月29日
ここで次の問題はスペーサーとネジが足りない。ホームセンターで探したけどちょうどいいサイズの物は売ってなかったのでネットで注文かな。
— stewie (@griffin_stewie) 2018年10月29日
アクリル板のシートを剥がしてる様子。前回はカッターの峰打ちだったけど今回は分解ツールに付属してたヘラでやってみた。カッターの方がやりやすかった気がする。 pic.twitter.com/HDe90uHTDh
— stewie (@griffin_stewie) 2018年10月29日
#ErgoDash のビルドガイドにあったか定かではないけどケースを組むときに邪魔なピンヘッダのピンを刈っていく。 pic.twitter.com/30kNPRWieX
— stewie (@griffin_stewie) 2018年10月29日
ケースのネジ足りてない(発注済み)さらにキーキャップも届いてないけどひとまず動作するところまで来たので完成とする。Discord の方々の優しさがなければ絶対に完成してなかった。🙇♂️ #ErgoDash pic.twitter.com/SOOXI4iDJw
— stewie (@griffin_stewie) 2018年10月29日
#ErgoDash の内側8キーと外側下5キーが余ってる。キーが多めなのを期待しているのではなく有効活用をどうしようかと。迷うなぁ。
— stewie (@griffin_stewie) 2018年11月3日
MacBook Pro のキーボードがJIS配列だからあえてJIS配列風にしようとは思ってるけど。
— stewie (@griffin_stewie) 2018年11月3日
ErgoDash のビルドログ的なエントリ書こうと思ってるんだけど本命のキーキャップの到着がまだで書けずじまい
— stewie (@griffin_stewie) 2018年11月4日
そのまま遊舎工房さんに投げられるデータを GitHub に挙げようと思ったらもう本家が対応してた。ありがたや。 https://t.co/9CLFPPKovG
— stewie (@griffin_stewie) 2018年11月5日
やっと届いた pic.twitter.com/t917b9rgZT
— stewie (@griffin_stewie) 2018年11月6日
— stewie (@griffin_stewie) 2018年11月6日
— stewie (@griffin_stewie) 2018年11月6日
JIS配列に合わせたキーマップにしてるので合うキーキャップがない部分が多いけどまぁよい。
— stewie (@griffin_stewie) 2018年11月6日
組み立ての感想
今回はこれまでで1番苦戦しました。
- ファームウェアを焼こうと思ったらそもそもリセットスイッチが反応しない
- ジャンパのところでショートさせてた
- 表面実装のLED取り付けに失敗しいくつか点灯しない
- ハンダ不良なのか熱しすぎて壊したのか不明
- あやしそうな箇所を余分に買ってたLEDにひとつ付け替えるだけで解消
- キースイッチが1個だけ反応しない
- ダイオードのつけ忘れ
これらのミスは今回4個目のキーボード作成だったので中途半端な慣れによるところが大半でした。LEDは難しかったですがフラックスを初導入して塗ってみるとかなり作業が図ったのは収穫でした。
今回はじめてケースのデータを遊舎工房さんに依頼して親指キーが多いケースを切ってもらいました。Illustrator を使うのも初めてでしたが元データから切り貼りするだけだったのでなんとかなりました。今は作者のかたがそのまま遊舎工房さんに投げられるようなデータをシェアしてくれているので簡単にケースはゲットできると思います。
自作キーボードで組み立てで便利だったもの
最近、自作キーボード作りにハマっています。これまでに
と作ってきました。ハンダ付け初心者な僕がそれなりに組み立てられるようになったのには道具の力が非常に大きいです。いい大人なので力量は道具に素直に頼っています。これまでつかった便利だったもの、あって良かったものを紹介するというテイのアフィリエイトエントリです。
必須部門
温度調節ハンダゴテ
- 出版社/メーカー: 白光(Hakko)
- 発売日: 2012/01/18
- メディア: Tools & Hardware
- クリック: 1回
- この商品を含むブログを見る
温度調節ができるものじゃないと Helix とかの LED のハンダ付けで部品を壊してしまうらしい。温度が体感で分かるわけがないので絶対に温度調節機能付きのハンダゴテを買いましょう。今のところハンダが原因でパーツは壊したことがないです。
- 出版社/メーカー: 白光(Hakko)
- メディア: Tools & Hardware
- この商品を含むブログを見る
コテ先もこのタイプの物が綺麗にハンダ付けできるようです。母材もちゃんと熱することを意識してからはハンダもちゃんと上がってくるようになった気がします。
ハンダゴテ置き
- 出版社/メーカー: 太洋電機産業(goot)
- メディア: Tools & Hardware
- 購入: 17人 クリック: 33回
- この商品を含むブログ (3件) を見る
子供の頃、親父は大きい灰皿を使っていた記憶がありますが、僕はたばこを吸わないし専用品が良いに決まってるので買いました。スポンジタイプで綺麗にハンダを剥がせないので金だわしっぽいタイプが気になってます。
ハンダ
- 出版社/メーカー: 太洋電機産業(goot)
- メディア: Tools & Hardware
- 購入: 1人 クリック: 1回
- この商品を含むブログを見る
言うまでもないですね。初心者向けの鉛入りを買いましょう。
はんだ吸取り線
- 出版社/メーカー: 太洋電機産業(goot)
- メディア: Tools & Hardware
- 購入: 3人 クリック: 11回
- この商品を含むブログ (1件) を見る
初心者なのでミスります。ミスまでいかなくても気に入らないときもあるのでハンダ吸い取り線は必須です。仕組みを考えれば当たり前ですが、ハンダと同じように線を直接持ったら激熱でした。ちゃんとケース部分を持って使いましょう。
精密プラスドライバ
ベッセル(VESSEL) 精密ドライバーセット +2本 -4本セット TD-56
- 出版社/メーカー: ベッセル
- メディア: Tools & Hardware
- 購入: 9人 クリック: 25回
- この商品を含むブログ (8件) を見る
たいていのケースの組み立てに +00
あたりのドライバーが必要です。間違ったサイズを使うとねじ頭をなめてしまう悲劇に見舞われるのでセット物を買っておくと安心です。100円均一のは粗悪なのでダメ絶対。
つかめるニッパー
ツノダ(Tusnoda) つかめるニッパー TH-150NC 結束バンド・極細線をキャッチ 奥行1.7×高さ16.5×幅10cm 飛散防止パット スペア2セット付き
- 出版社/メーカー: ツノダ(Tusnoda)
- メディア: Tools & Hardware
- この商品を含むブログを見る
ダイオードの足を切ったりするのでニッパーは必須。特にこれのように切り取った足が飛んでいったりしないようなガードが付いているものは部屋を散らからせないで済むのでおすすめ。
あってよかった部門
ラジオペンチ
フジ矢 マイクロラジオペンチ 細かい作業に最適な先細仕様 (バネ付) 150mm MP6-150
- 出版社/メーカー: フジ矢(Fujiya)
- メディア: Tools & Hardware
- この商品を含むブログを見る
コテ先の交換にも使いました。ダイオードの足を曲げるなど用途は多彩。
ダイオード曲げるやつ
サンハヤト リードベンダー RB-5 リード線、部品の簡易折り曲げ器
- 出版社/メーカー: サンハヤト
- メディア: Tools & Hardware
- この商品を含むブログを見る
どうせ組み立てるなら綺麗に組み立てたいのが親御心。ダイオードは適当に曲げることもできますが、このリードベンダーがあると綺麗に曲げられます。使い方を間違わないように下の動画で使い方を把握してから使いましょう。
iPhone 分解工具キットのプラスチック
Zacro 15 in 1携帯修理ツール 開腹/分解/修理/交換用ツールキット スマホ用工具
- 出版社/メーカー: Zacro
- メディア: エレクトロニクス
- この商品を含むブログを見る
このツールをなんで持ってるのかあまり記憶がないですが、このツールキットに入ってるピンセットやプラスチックの棒やピックなんかはパーツを傷つけずに何かできるので便利です。特にピンセットは小さなビスを取って穴にはめるのに重宝しました。
ブレッドボード
- 出版社/メーカー: サンハヤト
- メディア: Tools & Hardware
- この商品を含むブログを見る
ProMicro をハンダ付けするときの固定に使いました。今後電子工作するときにも使えるしあると便利です。
エポキシ系接着剤
セメダイン 5分硬化型エポキシ系接着剤 ハイスーパー5 15gセット箱 CA-184
- 出版社/メーカー: セメダイン(Cemedine)
- メディア: Tools & Hardware
- この商品を含むブログを見る
界隈では有名らしい「Moge Micro」対策で USB 端子周りに盛って補強します。硬化の時間もあるのでキーボード作りを始める最初もしくは前日にあらかじめやった方が良いと思います。盛るときは最終的に Pro Micro がどのようにケースに収まるのか確認し厚みに気を付けましょう。僕は盛りすぎて何度もカッターで余分な量を削り落としました。当然ながら盛りすぎて USB ケーブルが刺せないようにならないように各所に空いている穴に盛りすぎないようにしましょう。
無印良品のコインケース
キットに入っているパーツの管理・整理やビスなどの細かいパーツの整理に便利です。無印良品だけにおしゃれでいいです。
欲しいもの
絶縁テープ
Mint60 を作る時にやらかしたのですが、キットによってはうっかりショートさせてしまうくらいスペースを切り詰めている物があります。あらかじめビルドログには足を短めに切っておきましょうとありますが、このような絶縁テープをさらに貼っておくとより安心なのではと思いました。
耐熱マット
断熱ワーキングマット耐熱300℃高温 絶縁パッド作業用マット無毒35 x 25 cm 25cm目盛り付く 電子製品/モバイル/パーソコン分解修理用ツール (ブルー)
- 出版社/メーカー: Chuangbo
- メディア: その他
- この商品を含むブログを見る
今は OLFA のカッターマットを作業マット代わりに使っているのですが、ハンダがメインなので耐熱マットの方が良いかなと思ってきました。このマットには細かいパーツを整理するためのくぼみもあり1番小さいくぼみにはナンバリングもされているので Helix のように SMD のダイオードを使う場合なんかで便利に使えそうです。
まとめ
このエントリを書きながらもうすでに他のキーボードを作りたくなってきました。次に気になってるのは Helix か ErgoDash です。11月くらいに在庫が復活してたら検討したいですね。
話がそれましたが、今回挙げた道具達のおかげで結構順調に自作キーボード作りが捗っています。是非皆さんも道具を揃えてキーボードを作ってみましょう!
Mint60 を作ってみた
前回 HelixPico 作ってみた というエントリを書いた。そこにも書いたんだけどやっと自作キーボードを作ってみようと思ってみたきっかけになったキット Mint60 が届いたので作ってみました。
購入した Kit
- キースイッチ
- Gateron Silent Red
- 左手左下は付属していた Gateron Blue
- 右手Enter右下には Gateron Clear *1
- Gateron Silent Red
- キーキャップ
- ABS Cubic
- プレート色
- マットクリア
Twitter まとめ
基本的な流れは Twitter に書いたのでそれを貼り付けます。
Mint60 がついに発送された!
— stewie (@griffin_stewie) 2018年10月4日
Mint60 届いたらしい。三連休、台風やし、キーボード作り日和
— stewie (@griffin_stewie) 2018年10月5日
わーい pic.twitter.com/gatqHBFJBL
— stewie (@griffin_stewie) 2018年10月5日
— stewie (@griffin_stewie) 2018年10月5日
全7種類のキースイッチ1つずつとメイン指定のキースイッチが必要数入ってるセット内容 pic.twitter.com/iMS16T8tF7
— stewie (@griffin_stewie) 2018年10月5日
何個か違う種類のを組み込みたいけどどれにしようか迷う。付け直しが大変だしな。Esc を青軸にしようかな。
— stewie (@griffin_stewie) 2018年10月5日
いろんな大きさと角度のキーキャップ。3個ほど謎のがある。
— stewie (@griffin_stewie) 2018年10月5日
設置可能なキーキャップのサイズの兼ね合いで実態と違うキーをはめることになるけどどこにどれをはめるか迷う。 pic.twitter.com/yqKBAC3bOa
今日からちょっとずつ作っていくよ。
— stewie (@griffin_stewie) 2018年10月6日
基板カッコいい pic.twitter.com/cLZTdJ2YHM
— stewie (@griffin_stewie) 2018年10月6日
昨日からちょっとずつ進めてる。左右のダイオード、TRRS、タクトスイッチは完了。あとはキースイッチをハンダ付けして、LED付けて、ガワはめる。LEDは初挑戦だし、他の人もトラブル起こしてるみたいなので慎重にやらないと。
— stewie (@griffin_stewie) 2018年10月7日
LEDつける前だけど、左手の動作確認。問題なく動作してる。
— stewie (@griffin_stewie) 2018年10月7日
アクリルケースの組み立てが1番時間掛かってるんだけど。どれをどう重ねるのかよく分からん #Mint60
— stewie (@griffin_stewie) 2018年10月7日
左手完成!ちゃんとLEDも光ります! pic.twitter.com/Hf5HMkdwr5
— stewie (@griffin_stewie) 2018年10月7日
ハンダを使い切ってしまったので今日は終了。 pic.twitter.com/cxJyLnsgRd
— stewie (@griffin_stewie) 2018年10月7日
急に暇になった。以前勘違いから半田吸い取り線は二つ持ってるんだけど半田自体は二つ持ってなかった。orz
— stewie (@griffin_stewie) 2018年10月7日
アクリル板の保護シートの剥がし方テクってきた。テープ類を貼って一緒に剥がすとかお湯につけるってのはググったけど、自分はマットクリアってのもあって、カッターの峰を押し当てて保護シートをしわ寄らせるワザで済ませてる。結構綺麗に剥がれる。 #Mint60
— stewie (@griffin_stewie) 2018年10月7日
みんな作ってて、人によっては山あり谷ありで楽しそう。明日朝一で半田買ってきて続きやるんだぁ。ケースは先に組み立てたのでキースイッチとProMicroとLED半田づけしたらおしまいの予定。 #Mint60
— stewie (@griffin_stewie) 2018年10月7日
僕もスタビライザーのカチャカチャ音が気になる https://t.co/2f91e8y2Cd
— stewie (@griffin_stewie) 2018年10月8日
ハンダ買ってきたので再開。
— stewie (@griffin_stewie) 2018年10月8日
途中になってた右手のキースイッチと ProMicro をハンダ付けしたので動作確認。無事動作! pic.twitter.com/HDmXPaGSnC
LEDも無事に装着、点灯!
— stewie (@griffin_stewie) 2018年10月8日
エンターキーにキーキャップをはめたら戻りが悪かったので観察してみるとキースイッチが少し斜めについてる気がしたのでケース外そうとしたらバックスペースキーのキャップが外れず苦闘してたらケース割れた orz pic.twitter.com/UWSbzrzVSQ
— stewie (@griffin_stewie) 2018年10月8日
こいつは外さずにやろう
— stewie (@griffin_stewie) 2018年10月8日
エンターキーは解消したけど今度は話題の N 行が死ぬ問題なう。LEDか。
— stewie (@griffin_stewie) 2018年10月8日
両面テープの台紙を挟んで回避。
— stewie (@griffin_stewie) 2018年10月8日
やっと完成! pic.twitter.com/UhE5Ts0rwS
— stewie (@griffin_stewie) 2018年10月8日
作った感想
Mint60 にいたるまでに
と作ってきました。ミニマムなものから徐々にサイズ感を上げてきたというのもあってこれまで失敗というようなものもなく順調に進んできていました。今回本命の Mint60 順調に作れると思っていましたがうぬぼれでした。
- Enter キーの取り付けが斜めだったために押しても帰ってこない問題
- BackSpace 外れない問題
- ケース割れる問題
- 右手
N
行効かない問題
4つも問題に遭遇しました。
Enter キーの取り付けが斜めだったために押しても帰ってこない問題
これがすべての問題の根源です。
不具合自体の原因は キースイッチ自体がケースにたいして並行に綺麗に半田付けされていなくて斜めになっていたためです。これによりスタビライザー側の +
二つとキースイッチ自体の +
が綺麗に並ばずねじれが発生したためです。
これを解消するためには1度キースイッチを外さないといけません。キースイッチを外すためには1度つけたキーキャップ(その時点ではスタビライザー付きのキーを中心に3〜4個だけ)をすべて外しケースを外す必要があります。*2
そこから第2の問題へと発展していきます。
BackSpace 外れない問題
Enter キーを含め比較的順調にキーキャップを取り外していたのですが、ここで難敵 BackSpace キーに出会ったのです。完全にはまり込んでいました。どんなに力を込めようが、キーを取り外す工具で抜こうがなかなか外れません。それまでは多少なりともキースイッチや基板を気にして力を加減していましたがこれでは一向にらちがあかないと思ったので渾身の力を込めた瞬間
「パキッ」
嫌な音がしました。 よく見ると BackSpace キー右下のビスの根元に亀裂走って割れていました。
結局 BackSpace キーを抜くのは諦めて作業を進めることにしました。
しかし、この渾身の力を込めた一撃が新たな問題を引き起こすとはこの時の僕には全く想像できませんでした。
右手 N
行効かない問題
諸悪の根源 Enter キーの半田吸い取りに若干苦戦しながらもキーを取り払い、念のため新しいキーにに交換。取り付け時の向きに気を付けながら半田付けしました。
ケースをまた組み付けてキーキャップをつけると無事に問題は解決しました。途中ケースが割れ、僕の心も割れてしまいましたが完成に向けて再度動作検証をしていると
「むむっ!N が効かない」
すぐに LED がダイオードやらキースイッチの足に接触している時に起こるやつだと思いました。これは先人達が共有してくれていたあるある問題です。さっきまでの動作検証では LED の点灯もキーの動作も問題なかったのになんで?と思いましたが、BackSpace キーキャップを外すときにケースを強く握りしめた際に圧迫されたからだと気付くのにそれほど時間は掛かりませんでした。
表側からはずすのはもうツライので無精して裏側だけを外しました。ショートしていた部分は具体的に見つけることはしませんでしたが、ここでも先人のブログで学んでいた LED に付いていたのシールの台紙を戻す(基板と LED の間に挟む)ことで回避しました。
これでやっと完成です。
苦労しましたが綺麗なキーキャップ、LED そして通常のキーボードからさほど変化のない素直なレイアウトのキーボードはあまり違和感なく使えています。このブログももちろん Mint60 で書いています。とはいえ、これまでずっと MacBook Pro 内蔵キーボードや外付け Apple Keyboard を使っていたので気になる点はあります。
気になるところ
上記ブログでも書かれていましたがスタビライザーをつけているキーは、音、感触ともに気持ちよくありません。僕も Silent Red 軸を使っています。通常のキーは「スコスコ」と小気味よく打鍵できますがスタビライザーの入っている Enter、BackSpace、左手スペース、左手 Shiftキー これらはキーキーギシギシします。このあたり、どうにか感触良い物にする方法があるのな知りたいです。
あとは、このエントリを書いている最中に何度も発生しているのですが右 Shiftキーと Enter はどちらも押し間違えます。これは普段が JIS 配列なので完全に慣れの問題だと思っています。
あと、僕は Apple 信者というのもあって、Windows ベースなキートップの印字は気になります。サイズ感が独特なのもあいまってキーキャップと実体があってないのは揃えたいところですが、Mint60 を買おうと思った決め手の一つであるかわいいキーキャップを外してしまうのもなぁと。
制作時に気になったところ
制作に当たっては HelixPico とは違い同梱された組み立て説明書のようなものはありませんが公式を含めた以下のサイトの情報に助けられました。
特に、アクリルケースの細いパーツの組み立て順が公式では全然分からず syonx さんのブログなしでは無理でした。ケース自体に段があるとは思っていなかったので。
まとめ
フル機能の自作キーボードとしては2個目となった Mint60 、気に入っています。通常のタイピング時のコスコスした打鍵感は心地よいです。まだ、厚みのあるキーボードに慣れていないのと主に右手のキー配列に慣れてないのもあって右手首は結構疲れてますが、肩が開いているのも楽な気がします。
僕のような自作キーボード、分割キーボード初心者にはお勧めのキットだと思うのでみんなも作ってみたらいいと思うよ!