初めての自作キーボード:meishi2のビルドログ
はじめに
動いたときの達成感がすごい。
結城智久(@TomohisaYuuki)です。
電子工作ほぼ素人ですが自作キーボード作ってみました。
自作キーボードに挑戦しようと思ってる方には参考になれば、また自作キーボード玄人の方には「初心者ってこんなところで躓くんだ」と温かい目で見守ってもらえれば幸いです。
先にざっくりまとめると
- 自作キーボード作成初挑戦、完成まで2時間半かかった
- 公式ビルドガイドには書かれていなくて詰まったところがあった
- Mac環境で作っていたことによる問題も発生した
- 自作キーボード楽しいから迷ってるならまずはmeishi2作ってみよう
という感じです。
なんで自作キーボードに手を出したのか
自作キーボードの存在を知ったのは4ヶ月ほど前。それまではHHKBに憧れていたりniz atom66に手を出したりしていましたが、キーのレイアウトや打鍵感が合わなかったりで、結局MacbookやMacbookProのバタフライキーボードなどを使っていました。
ただ今年に入ってから在宅勤務をするようになり、せっかくならできるだけ仕事環境を良くしたいと思っていろいろ調べてみたところ
という情報を見つけました。
そこで実際家電量販店でmajestouchを触ってみたら本当に打鍵感が良くて、「メカニカルキーボードいいじゃん!よし買うか!」と、とても乗り気になりました。が、よくよく調べてみるとmajestouchには左右分離キーボードは無いという…そのためmajestouchは断念。どころかいいキーボードを買うことまで断念しかかりました。
でもここまで高まったキーボード欲は抑えきれず…
さらにいろいろ調べてみた結果、以下の記事を見つけ、ついに自作キーボードとの出会いを果たしたのです。
note.com
そこから自作キーボードを調べ始め、自作キーボードなら形状もレイアウトも軸も、さらにはキーマップまで自由だと知り、ついに自作キーボードに手を出すことを決意したのでした。
meishi2を選んだ理由
現時点での自分の要望は以下の通り。
- 形状
- 左右分離
- 小指の負担を減らして親指を活躍させたい
- 軸
- メカニカルスイッチ
- 重め、リニアが好み
- 機能
この条件に最も合っていそうなのはclaw44+重めの軸+無線化ではないかと思っていますが、公式ビルドガイド*3を読むと初心者には難しそう。
特に不安だったのが「はんだ付けがちゃんとできるか」ということ。はんだ付け箇所もたくさんあるから大変そうだし、失敗したらリカバリーできるかわからないし、キットはそれなりの値段するから失敗したからといって新しく買うのもためらわれるし…
そうやって悩んでいたのですが、ある時ふと「はんだ付けが不安ならはんだ付けが少ないキットで練習すればいいじゃん」とひらめく。さっそく「自作キーボード 入門 おすすめ」で検索して、そこで見つけたのがmeishi2でした。
- 4キーしか無い(=はんだ付け箇所が少ない)
- ビルドガイドに書いてある工程が少ない(=簡単そう)
- 値段が安い(=失敗したときは最悪新しいものを買えばいい)
- 遊舎工房さんでにスイッチ&キーキャップつきのセットが売られている(=自分で部品を揃える必要はない)
上記の理由からmeishi2を最初の自作キーボードに選びました。
準備したもの
キット
yushakobo.jp
遊舎工房さんで購入。
スイッチ&キーキャップ付き(入っているものはランダム)を購入しましたが、いろんな軸が試せるし、キャップもカラフルでとてもお得なセットだと思います。おすすめ。
工具
以下のサイトを参考に揃えました。
キーボード自作、特に Helix キーボードキットの製作に最低必要な工具のメモ · GitHub
自作キーボードの組み立てに使っている工具 | yfuku docs
はんだごてセット
はんだごて、交換用こて先5種、こて台、はんだ吸い取り器、はんだ、ピンセット2種が入ったお得なセット。とりあえず買っておくといいと思います。(バラバラに買うと思いの外高くなるので)
初心者はいいはんだごてを使うことを勧められていますが、このセットのものでもどうにかなりました。
はんだ
goot(グット) 高密度集積基板用 鉛入りはんだ Φ0.6mm スズ60%/鉛40% ヤニ入り SD-60
- メディア: Tools & Hardware
鉛入りのほうが融点が低く、初心者には扱いやすいらしいです。
また狭い場所でも作業しやすいように経が細いものを選びました。
マスキングテープ
3M マスキングテープ 343 12mm×18M 10巻パック 343 12
- メディア: Tools & Hardware
まとめて買っちゃいましたがこんなに量いらないです…
作業マット
絶縁・断熱なので安心して作業できます。色がはっきりしているので部品の視認性も上がります。
あと作業途中の写真がいい感じに撮れるというメリットも。
買ったけど使わなかったもの
はんだ吸い取り線
goot(グット) はんだ吸取り線 3mm幅 1.5m巻き CP-3015 日本製
- メディア: Tools & Hardware
はんだごてセットに吸い取り器がついているので、それを使うのでも大丈夫かもしれません。
あったらよかったもの
作業の経過
基本は公式ビルドガイドに従って作成しました。
biacco42.hatenablog.com
手順は以下の通りです。
- ハードウェア組み立て
- パーツが全部揃ってるか確認する
- ダイオードを取り付ける
- タクトスイッチを取り付ける
- Pro Microを取り付ける
- キースイッチを取り付ける
- キーキャップを取り付ける
- ファームウェア書き込み
- ビルド環境構築
- ファームウェアのビルドと書き込み(※ビルドログとの差異あり)
- 動作の確認(※ビルドログとの差異あり)
パーツが全部揃ってるか確認する
突然ですが、作ります。 #自作キーボード #自キ #meishi2 pic.twitter.com/QsBTmYuy20
— 結城知久 (@TomohisaYuuki) 2020年10月11日
キットの中に入っているパーツをすべて並べて、ビルドガイドの画像と見比べます。
この時点でわくわく感がすごい。
ダイオードを取り付ける
ダイオードのリード曲げるだけで緊張した… pic.twitter.com/rqNH8Nxh2a
— 結城知久 (@TomohisaYuuki) 2020年10月11日
はんだ付けすごく緊張したー。ちゃんとできてるかな。ひとつだけなんか曲がった感じになったのと、はんだごてが当たっちゃって基盤に少し焦げあと?がついちゃったのが失敗。 pic.twitter.com/kD7odQCXft
— 結城知久 (@TomohisaYuuki) 2020年10月11日
最初の関門。
ダイオードのリードを変に折り曲げてしまわないか、はんだ付けこれであってるのか不安になりながらはんだ付けしました。
ひとつつけちゃえばあとは簡単なんですが、最初はとても緊張した…あとリード切るのもほんとにやって大丈夫か心配になりましたが、気にせずバシッと切っちゃって大丈夫。
あとになって気づいたはんだ付けのコツは
- 公式ビルドガイドに書いてあるようにはんだ付けする箇所の金属端子を5秒ぐらいしっかり温める
- はんだは怖がらずにケチらずに多めに使うように心がける
かなと思います。
途中はんだが少なすぎたのかはんだごての離し方が悪かったのか、はたまた温度が低かったのか、端子の先にはんだでトゲトゲを何度も作ってしまいました…
タクトスイッチを取り付ける
タクトスイッチってこれのこと?? pic.twitter.com/9aDhQb9M7K
— 結城知久 (@TomohisaYuuki) 2020年10月11日
これで合ってました。
部品の名前だけだと分からなかった…公式ビルドガイドにもこの作業の画像はなかったのでヒヤヒヤしながらはんだ付け。
すっごい失敗した…これ大丈夫…? pic.twitter.com/1Wn2wX97wc
— 結城知久 (@TomohisaYuuki) 2020年10月11日
タクトスイッチの裏面の画像手前側、はんだ付けが悪かったのか断面がすごく太くなった…
見た目も良くないし失敗したかな…と思ったけど結局大丈夫でした。
Pro Microを取り付ける
Pro Microはコンスルー差し込むだけでいいんだよね。はんだ付けいらないんだよね。 pic.twitter.com/Hvqmn3UVBg
— 結城知久 (@TomohisaYuuki) 2020年10月11日
はんだ付けを怖がっている…
ビルドガイドだとコンスルーを固定する向きを示した画像以外はピンヘッダを使用した画像(=はんだ付けしている/されている画像)になっているので少し混乱。
コンスルーなのではんだ付けいらない!と自分に言い聞かせて、向きに注意しながらPro Microにコンスルーを挿し、続けて基盤に差し込みました。
本当にこれで固定できるのか?と半信半疑でしたが、ちゃんとはまるし、少し引っ張ったぐらいでは抜けませんでした。
キースイッチを取り付ける
キースイッチ付けた。キースイッチは足切らなくていいのか…? pic.twitter.com/m35fueWYi6
— 結城知久 (@TomohisaYuuki) 2020年10月11日
ハードウェア組み立ての最後の関門。
でもキースイッチをつけると一気にキーボードらしくなるので一番テンション上がる作業でもあります。
基盤を裏返してキースイッチを支えにすると、キースイッチの位置がずれてしまうかもしれないのでマスキングテープで仮止めしながら作業するといいと思います。
結構足の長さがあるので切るべきか迷いましたが、切らないでおきました。今のところ問題なし。
キーキャップを取り付ける
ハードは完成!横から見ると結構高さあるんだなー。 pic.twitter.com/dHGCXKU7vb
— 結城知久 (@TomohisaYuuki) 2020年10月11日
感動の瞬間その1。
やっとここまできた…ここまで1時間10分ほど。
キーキャップは少し強めに押し込む必要があるので注意。
あと基盤裏の四隅にラバーシールの貼り付けもしています。
ちなみに、ラバーシールよりもキースイッチやコンスルーの足のほうが長くて机に接しているようにも見えました。今のところ問題ないけど
これでいいんだろうか…?
ビルド環境構築
続けてファームウェアの書き込み作業に進みます。
実施した環境は以下のとおりです。
OS : MacOS Catalina 10.15.7
git : 2.24.3
まずはターミナルを開いて任意のディレクトリに移動して以下のコマンドを実行。
# QMKfirmwareをクローン $ git clone https://github.com/qmk/qmk_firmware.git # ビルドに必要な依存の解決 $ cd qmk_firmware #以下すべて~/qmk_firmware配下で実行 $ ./util/qmk_install.sh
自分の環境では一つエラーが出力されたため以下の通り対応しました。
# 以下のエラーが出力されたため、pipをupgrade # WARNING: You are using pip version 19.2.3, however version 20.2.3 is available. # You should consider upgrading via the 'pip install --upgrade pip' command. $ pip install --upgrade pip
ファームウェアのビルドと書き込み(※ビルドログとの差異あり)
いよいよファームウェアの書き込みをします。
まずmeishi2をUSBでPCと接続します。
USB挿したら光った! pic.twitter.com/EeHI2CaxxG
— 結城知久 (@TomohisaYuuki) 2020年10月11日
Macの場合ここで「キーボード設定アシスタント」が表示されるかもしれませんが、無視しました。
その後、以下のコマンドを実行。
$ make meishi2:default:avrdude
これでファームウェアのビルドと書き込みがまとめて実行される!
…はずだったのですが、以下のエラーが発生。
QMK Firmware 0.10.33 WARNING: Some git submodules are out of date or modified. Please consider running make git-submodule. Making meishi2 with keymap default and target avrdude tmk_core/protocol/lufa.mk:14: lib/lufa/LUFA/makefile: No such file or directory make[1]: *** No rule to make target `lib/lufa/LUFA/makefile'. Stop. make: *** [meishi2:default:avrdude] Error 1 Make finished with errors
よくわからないけど「Please consider runnning make git-submodule」とあるので実行。
$ make git-submodule
その後もう一度[make meishi2:default:avrdude]を実行することで処理が進みました。
以下の表示になったらmeishi2のタクトスイッチを押します。
「make git-submodule」してから「make meishi2:default:acrdude」したらうまく行った!
— 結城知久 (@TomohisaYuuki) 2020年10月11日
「Detecting USB port, reset your controller now...」ってめっちゃ待たれてるのでリセットボタンを押して見る。 pic.twitter.com/dQgTDgBQuG
[avrdude done. Thank you.]と表示されたら書き込み完了!
多分できた! pic.twitter.com/N2jYMYsXtX
— 結城知久 (@TomohisaYuuki) 2020年10月11日
動作の確認(※ビルドログとの差異あり)
書き込みが完了したらちゃんと動作するか確認します。
meishi2のデフォルトのキーマップは左から順に(今回作ったものの場合キーキャップがピンクから黄色に向かって)「ctrl+z」「ctrl+x」「ctrl+c」「ctrl+v」が割り当てられています。
適当にメモ帳などを開いてテキストのコピペがうまくいくか試してみましょう。
感動の瞬間その2!
…かと思いきや。
できたと思って試してみてるけど動作しない…?左3つはMac側で何かが押された認識はしているようでキー入力時に音はするけど、一番右側は押しても音すらしない。それぞれデフォルトで割り当てられてるctrl-zとかctrl-cの動きもしてくれない。何が原因だろう。
— 結城知久 (@TomohisaYuuki) 2020年10月11日
原因を考える
正直がっくり来ました…が、落ち込んでいてもしょうがないので原因を考えます。
ファームウェアの書き込みはうまく行っている(はず)なので、別の原因を考えます。
最初はキースイッチのはんだ付けがうまく行ってなくてキーをクリックしても認識されないのかと思いました。が、よく考えてみると、左3つは認識されているようなので、これは違いそう。(一番右側だけははんだ付け失敗している可能性が残っている)
とすると、スイッチを押したときにMacが受け取れない命令が出ているのではないか?だとすると…
もしかしてqmk_firmwareのctrlってmacのcommandキーとは違う??
— 結城知久 (@TomohisaYuuki) 2020年10月11日
そこで調べてみるとQMKfirmwareのキーコードは次のようになっていることがわかりました。
Keycode | 意味 | 備考 |
LCTL(kc) | 左Ctrl+kc | デフォルトのキーマップで使用(=Windows向け) |
LGUI(kc) | 左GUI(Cmd/Win)+kc | Mac向け |
ここまで分かったので、キーマップを変更して再ビルド&書き込み。
予想合ってた!
— 結城知久 (@TomohisaYuuki) 2020年10月11日
キーマップの設定でLCTL(KC)となっているところをLGUI(KC)に変えてファームウェアを再ビルドしたら動いた! pic.twitter.com/VJ7Y306c0L
これでやっと完成!
緊張しながら調べながら詰まりながらでしたが、2時間半かけてmeishi2を完成させることができました。
初めての自作キーボード作成で、はんだ付けなんて中学か高校の頃にちょっとやって以来だったし、qmk firmwareのこともよくわからない状態でやったけど、どうにか完成させられてよかった。動作したときの嬉しさたるや。楽しかったー! #自キ #自作キーボード #meishi2 pic.twitter.com/HtPYD6faiM
— 結城知久 (@TomohisaYuuki) 2020年10月11日
感想
自分で作ったものが動くのはとても嬉しい体験ですね。作るのに苦労したのならなおさら。meishi2にはとても愛着が湧きそうです。
初めての自作キーボードにmeishi2を選んで正解でした。はんだ付けの練習にもなるし、ファームウェアのビルド・書き込みもしっかり勉強できます。なによりあまり時間をかけずに完成までを一通り経験できるので、一気に経験値が稼げます。
初めての自作キーボードにmeishi2おすすめです。
たのしい人生様、とても素敵なキットを作成いただきありがとうございます!
これから始めようか迷ってる方に向けて。
おわりに
以上、長々書きましたが初めての自作キーボードのビルドログでした。
次はいよいよclaw44に挑戦!…と思っていましたが、その前にもう少しオーソドックスなキーボードを作るところからやっていこうかと思います。
こうしてキーボード沼にハマっていくんだなぁ…
MacのVirtual BoxにコマンドでVM作成(+CentOSインストール)
はじめに
結城智久(@TomohisaYuuki)です。
Virtual Boxを使えば簡単に仮想環境を構築することができます。
Virtual BoxはGUI操作ができますが、コマンド操作でVMが作成できないか気になったので調べて手順をまとめました。
環境
Virtual Boxのインストール
以下のコマンドをTerminalに打ってHomebrew経由でインストールできます。
brew cask install virtualbox
CentOSのディスクイメージを取得
CentOS公式サイトから取得します。
www.centos.org
「CentOS Linux」の「V(yyyy)」タブの「ISO」カラムから「x86-64」をクリック。
以下からいずれかのリンクを選択。
必要なイメージファイルを選択してダウンロード。
ファイルの種類は以下の通りです。
- 〜dvd1.iso:インストールに必要なパッケージが全部入ったISOイメージ。
- 〜boot.iso:インストールに必要なパッケージをネットからダウンロードしてインストールするためのISOイメージ。
- 〜minimal.iso:必要最低限のパッケージだけが含まれているISOイメージ。インストール後にyumコマンド等であとから自分で必要なパッケージを揃える必要がある。
VM作成+CentOSインストール
流れは以下のとおりです。
- VirtualBox上にVMを作成
- メモリ割り当て
- ハードディスクの作成と割り当て
- 光学ドライブの割り当てとディスクイメージのマウント
- その他の設定
- VM起動・CentOSインストール
1.Virtual Box上にVMを作成
最初にVirtualBoxでVMを作成します。
ついでに作成したVMをVirtual BoxのGUIからも確認できるように設定しておきます。
VBoxManage createvm --name CentOS-8.2.2004-x86_64 --groups /Linux --ostype RedHat_64 --register
コマンド | オプション | 意味 |
createvm | 新しいVMの設定ファイルを作成。 | |
--name | VMの名称を設定。 | |
--groups | OSのグループを設定。CentOSの場合はLinux。 | |
--ostype | OSの種類を設定。CentOSの場合はRedHat_64。 | |
--register | VM設定ファイルの内容をVirtual Boxに登録してGUIでも見られるようにする。 |
2.メモリ割り当て
VMを作成しただけでは動作させることができないので、リソースを割り当てていきます。
まずは仮想メモリを割り当てます。今回は1GB(1024MB)にしますが、以下2点に注意してください。
- 端末のメモリ容量より大きな値を指定しない
- VM起動中はVMと端末でリソースを分け合うため、端末OS分のメモリ容量を考えた値を指定する(端末のメモリが16GBでVMに1GB割り当てた場合、端末OSが使用できるメモリ容量は残りの15GB分のみ)
VBoxManage modifyvm CentOS-8.2.2004-x86_64 --memory 1024
コマンド | オプション | 意味 |
modifyvm | 作成済みVMのプロパティを変更する。変更対象はオプションで指定。 | |
—memory | 割り当てメモリサイズをMB単位で指定。 |
3.ハードディスクの作成と割り当て
続いてハードディスクを割り当てます。
ハードディスクはVMに追加したストレージコントローラーに作成した仮想HDを接続することで割り当てます。
今回はVirtual Boxが提供しているvdi形式で容量20GBの仮想HDを作成し、VMに追加したSATA形式のストレージコントローラーに接続することで割り当てました。
# 仮想HDの作成 VBoxManage createvdi --filename CentOS-8.2.2004-x86_64.vdi --size 20000 # ストレージコントローラの追加 VBoxManage storagectl CentOS-8.2.2004-x86_64 --name SATA --add sata --portcount 4 --bootable on # 仮想ハードディスクの割り当て VBoxManage storageattach CentOS-8.2.2004-x86_64 --storagectl SATA --port 1 --type hdd --medium CentOS-8.2.2004-x86_64.vdi
コマンド | オプション | 意味 |
createvdi | 仮想HDをvdi形式で作成する。 | |
--filename | 仮想HDのファイル名を指定する。 | |
--size | 仮想HDのサイズをMB単位で指定する。 | |
storagectl | ストレージコントローラの操作を行う。操作対象はオプションで指定。 | |
--name | ストレージコントローラの名称を指定。 | |
--add | ストレージコントローラが接続するシステムバスの形式を指定。 | |
--portcount | ストレージコントローラがサポートするポート数を指定。 | |
--bootable | ブート可能か指定。 | |
storageattach | 作成済みのストレージコントローラに仮想HDを接続する。 | |
--stiragectl | 接続するストレージコントローラを指定。 | |
--port | 接続するストレージコントローラのポート番号を指定。 | |
--type | 接続する仮想HDの形式を指定。 | |
--medium | 接続する仮想HDの名称を指定。 |
4. 光学ドライブの割り当てとディスクイメージのマウント
インストールメディアを読み込む必要があるため、光学ドライブも割り当てます。
「3.ハードディスクの作成と割り当て」で追加したSATA形式のストレージコントローラーの空きポートに仮想光学ドライブを接続します。
ついでにインストールメディアのマウントも行っておきます。
VBoxManage storageattach CentOS-8.2.2004-x86_64 --storagectl SATA --port 2 --type dvddrive --medium ~/CentOS-8.2.2004-x86_64-dvd1.iso
5.その他の設定
念の為以下の内容を設定しておきます。
VMのブート順は設定必須です。
グラフィックコントローラーはデフォルト値「vboxvga」だと表示がおかしくなったため「vmsvga」を設定しています。
VBoxManage modifyvm CentOS-8.2.2004-x86_64 --vram 16 --graphicscontroller vmsvga --cpus 1 --boot1 dvd --boot2 disk --acpi on --ioapic on
コマンド | オプション | 意味 |
modifyvm | 作成済みVMのプロパティを変更する。変更対象はオプションで指定。 | |
--vram | 割り当てるビデオメモリーサイズをMB単位で指定。 | |
--cpus | 割り当てる仮想CPU数を指定。 | |
--graphicscontroller | VMのグラフィックコントローラーを指定。指定できるのはnone/vboxvga/vmsvga/vboxsvga | |
--boot1〜4 | VMのブート順を指定。指定できるのはnone/floppy/dvd/disk/net | |
--acpi | ACPIをサポートするか指定。 | |
--ioapic | IOAPICをサポートするか指定。 |
6.VMの起動・CentOSインストール
以下のコマンドを打つとVMが起動します。
VBoxManage startvm CentOS-8.2.2004-x86_64
コマンド | オプション | 意味 |
startvm | 指定したVMを起動する。 |
VMの画面が表示され、インストールメディアが読み込まれて以下の画面が表示されます。
「Install CentOS Linux 8」を選択します。
インストール言語を選択します。
「日本語」を選択して「続行」をクリック。
インストール概要では以下を設定します。
- ネットワークとホスト名:Ethernet (enp0s3) をオンにする
- 時刻と日付:「アジア」から「東京」を選択する
- ソフトウェアの選択:「サーバー(GUI 使用)」を選択する
- インストール先:既に選択されているので、「完了」をクリック
全ての設定を完了したら、「インストールの開始」をクリック。
インストールが開始されます。
インストールされているうちに「rootパスワード」と「ユーザの作成」を行っておきます。
完了したら「再起動」はクリックせず、以下のコマンドを実行してから再起動します。
# VMをシャットダウン VBoxManage controlvm CentOS-8.2.2004-x86_64 poweroff # 光学ドライブを空に VBoxManage storageattach CentOS-8.2.2004-x86_64 --storagectl SATA --port 2 --type dvddrive --medium emptydrive # ブート順変更 VBoxManage modifyvm CentOS-8.2.2004-x86_64 --boot1 disk --boot2 dvd # VM起動 VBoxManage startvm CentOS-8.2.2004-x86_64
再起動すると以下の画面が表示されるので、クリックしてライセンスに同意します。
(場合によってはVMを起動してもエラーで落ちることがあるので、正常に起動するまでVMの再起動や、Mac本体の再起動を行ってください)
ログイン画面が表示されます。
これでインストール完了です。
MacでHomebrewを使ったパッケージ管理覚書
はじめに
結城智久(@TomohisaYuuki)です。
Macで開発環境を構築しようとして調べていると、homebrewを使ってインストールするのがデファクトスタンダードなように見受けられます。
ですが、どうしてHomebrewを使うのか?パッケージ管理システムってどういうものなのか?正直よく分かっていませんでした。
この記事ではパッケージ管理システムについて基本的な事柄を整理し、Homebrewの使い方をまとめます。
パッケージ管理とは
配布形式との関係
パッケージの配布には大きく分けて以下の2つの配布形式があります。
1. バイナリ形式
コンパイル済みのファイルを配布する。
- 配布者:様々な環境に合わせたファイルの作成・動作確認を行う必要があり、膨大な労力がかかる。
- 利用者:配布されたファイルをインストールするのみ。知識や技術が不要で労力もかからない。
2. ソースコード形式
未コンパイルのソースコードを配布する。
上記の通り、配布形式がバイナリ形式の場合はあまり問題はありませんが、ソースコード形式の場合は利用者がある程度自分で作業しなくてはなりません。これらの形式を自動で判別し、必要であればコンパイル・ビルドを自動で行ってくれる仕組みがパッケージ管理システムの機能の一つです。
インストール時の問題解決
ソフトウェアをインストールするとき、以下の事象が発生することがあります。
- ソフトウェアAを利用するにはソフトウェアBが必要(ソフトウェアの依存関係)
- ソフトウェアCによってインストールされるファイルDが、すでにソフトウェアEによってインストールされている(ソフトウェアの競合関係)
少数のソフトウェアであれば一つ一つ対処すればいいですが、多くのソフトウェアの依存・競合関係を手動で管理するのはかなりの手間がかかります。
これらを自動で管理する仕組みがパッケージ管理の機能の一つです。
まとめるとパッケージ管理とは、ソフトウェアのインストール・アンインストール・更新やこれらに伴う煩雑なソフトウェアの管理作業のことで、このような仕組みを提供しているツールをパッケージ管理システムと言います。
パッケージ管理の仕組み
とてもざっくりした説明
そもそもパッケージとは以下をひとまとめにしたファイルです。
- アプリケーションの実行プログラム/ソースの本体orURL
- 設定ファイル
- 共有ライブラリ
- ソフトウェアを構築するのに必要な開発用ファイル
- ドキュメント
- メタデータ
パッケージに含まれるメタデータの中には以下が含まれています。
Homebrewの仕組み
インストールの仕組み
以下のサイトの「仕組み」の項で[brew install」を行ったときの処理の流れが解説されています。
blog.mothule.com
各種用語と詳しい仕組み
パッケージの取得先や配置先、各種用語や詳しい仕組みは以下のサイトがとてもわかり易かったです。
blog.ottijp.com
Macにおけるパッケージ管理システム
Macのパッケージ管理システムとして有名なものにHomebrewとMacportsがあります。
いろいろな方が言っている両者の違いについての情報をまとめたのが以下の表です。
比較項目 | Homebrew | Macports |
配布形式 | ソースコード | バイナリ(バイナリが無い場合はソースコードをビルド) |
既存のソフトウェアの利用 | なるべく既存を利用 | 新たにインストール |
インストールにかかる時間 | 短 | 長 |
システムへの最適化度合い | 高 | 低 |
公式リポジトリのパッケージ数 | 少 | 多 |
インストール可能なユーザ | 一般ユーザ | スーパーユーザ(管理者権限sudoが必要) |
パッケージのインストール先 | /usr/local | /opt/local |
コンパイラ | clang | clang |
インストールの所要時間の比較
MacPortsはビルド済みのバイナリファイルを配布するため個々のパッケージのインストール所要時間は短く済むのですが、Macに導入済みのソフトウェアを無視して対象パッケージが依存するソフトウェアを新規インストールします。
一方Homebrewはソースコードからのビルドが基本なので個々のパッケージのインストール所要時間は長くなりますが、極力Macに導入済みのソフトウェアを利用する作りです。
そのため、総合的にはHomebrewのほうがパッケージのインストール所要時間が短く済む傾向にあるようです。またビルドを行うことで自分の環境に最適化されるメリットもあります。
扱えるパッケージ数の比較
扱えるパッケージ数はMacportsに比べてHomebrewは少ないようです。しかし、これはMacportsとHomebrewの公式リポジトリを比較した場合。
Homebrewのリポジトリは公式のGithubリポジトリだけでなく、ユーザーが自分のGithubリポジトリをシェアする仕組みになっています。
つまり、gitコマンドがアクセスできるところならどこでもリポジトリとして扱えます。
また、GUIアプリの管理ができる拡張機能Homebrew-caskもあり、公式リポジトリしか存在しないMacportsより広い範囲のパッケージを管理することができます。
上記のメリットから、MacportsよりもHomebrewが選ばれているようです。
Homebrewの使い方
HomebrewとHomebrew-cask
Homebrewと似た名前のHomebrew-caskなるものがあるのですが、それぞれの特徴を以下に示します。
Homebrew
Homebrew-cask
基本的なコマンド
分類 | 処理 | Homebrewコマンド | Homebrew-caskコマンド |
パッケージの操作 | パッケージを探す | brew search [検索ワード] | brew search —cask [検索ワード] |
パッケージをインストール | brew install [パッケージ名] | brew cask install [パッケージ名] | |
パッケージをアンインストール | brew uninstall [パッケージ名] | brew cask uninstall [パッケージ名] | |
Homebrewでインストール済みのファイルを表示 | brew list | brew list —cask | |
インストール済みパッケージのサマリーを表示 | brew info [パッケージ名] | brew cask info [パッケージ名] | |
パッケージを有効化 | brew link [パッケージ名] | - | |
パッケージを無効化 | brew unlink [パッケージ名] | - | |
更新のあるパッケージを確認 | brew outdated | brew outdated —cask | |
更新があるパッケージを再ビルド | brew upgrade [パッケージ名] | brew upgrade —cask [パッケージ名] | |
Homebrew本体の操作 | バージョン確認 | brew -v | - |
Homebrewの更新 | brew update | brew update —cask | |
設定を見る | brew —config | - | |
問題がないかチェック | brew doctor | brew doctor --verbose | |
コマンドのヘルプを表示 | brew help [コマンド名] | brew cask help [コマンド名] |
おわりに
パッケージ管理とHomebrewについてだいぶ理解が深まりました。
パッケージ管理に限りませんが、指示されたとおりにコマンドを叩くだけで便利な機能を使うことができてしまいます。
その背後でどのような仕組みで動作しているのか、コマンド一つ一つの意味や類似ソフトウェアに対する優位性もちゃんと理解しながら使っていくようにしたいものです。
2週間で統計検定3級に受かったので諸々まとめ
はじめに
先日統計検定3級を受験し、無事合格してきました。結城智久(@TomohisaYuuki)です。
どのような勉強をしたのかなどまとめておきます。参考になれば幸いです。
受験の動機
2019/5〜2020/3の約1年間、勤務先のデータ分析専門部署に異動してデータ分析の実務研修を受けていました。
今月から元のSE部署に戻ったのですが、しばらく業務ではデータ分析に携わる機会が無いとのこと…なので、せっかく学んだことを忘れないためにpythonやデータ分析の勉強は趣味がてら個人的に継続していくことに。
その勉強の一環としてわかりやすく資格を取ろうと思い、データ分析に関連する資格を調べると以下のものが見つかりました。
- 情報処理関連:基本情報処理技術者、応用情報処理技術者
- DB関連:データベーススペシャリスト、OSS-DB技術者認定試験
- Python関連:Python 3 エンジニア認定基礎試験
- 統計関連:統計検定
- AI関連:ディープラーニング検定(G検定、E資格)
この中で基本情報・応用情報・データベーススペシャリストは取得済み。
残ったものの中で
- すぐに受験できる
- そこまで費用がかからなさそう
- 社内資格取得の際の加点対象資格に指定されている
ということから、統計検定を受験することにしました。
かなり無謀ですが、上期中に準1級を取ることを目標に以下のスケジュールで受験を進めていこうと考えています。準1級は毎年6月しか受験機会がないので、それまでにCBTで3級、2級を取る流れです。
受験日 | 受験級 | 受験形式 | 勉強期間 |
2020/4頭 | 3級 | CBT | 0.5ヶ月 |
2020/5頭 | 2級 | CBT | 1ヶ月 |
2020/6/21*1 | 準1級 | 紙媒体 | 1ヶ月 |
2020/11/22 | 1級 | 紙媒体 | 5ヶ月 |
僕のスペック
- 数学・統計:苦手だけどなんとなく知ってるようなことは多い
中学から数学は苦手で、高校はやんごとなき事情により理系コースを選択するも成績は壊滅。
大学は経済学部に通うも2年次必修の統計学を落とし続け、4年次に試験直前に公式を丸暗記してやっと取れた程度。
- データ分析:1年弱実務実務を経験、ただし高度な前処理やモデル構築は未経験
社会人7年目。SIerでSEやってます。
システム開発のPMチームで3年→上流提案チームで2年→データ分析実務を1年程度経験。データ分析では高度な手法は使っておらず、四分位範囲・回帰分析・相関分析と決定木を組み合わせた異常値検知モデルを作成した程度。
というように「まるっきり何も知らない」というわけではない状態からのスタートでした。
公式テキストの目次を眺めてみたら「確率」「確率変数と確率分布」「統計的な推測」あたりは難しそうだけど、それ以外はどうにかなりそうだ、という感触です。
勉強方法
勉強は以下の通り行いました。トータル約14日・40時間弱費やしたようです。
- 公式テキスト「統計検定3級対応 データの分析」を読む【約6日:12時間】
- 公式テキストで躓いたあたり(6章:確率のあたり)で「完全独習 統計学入門」にシフトして読み終える【約4日:12時間】
- 公式テキストに戻って読み終える【約2日:6時間】
- 過去問「日本統計学会公式認定 統計検定 3級・4級 公式問題集(2017〜2019)」を解いて間違えたところを復習する【約1日:6時間/3回分】
- 過去問に含まれていない範囲を公式テキストの章末問題で復習する【約1日:3時間】
公式テキストについて
公式テキストは説明が長くてわかりづらく、また淡々としているので読み進めるのはなかなか苦痛です。
僕の場合、想定通り「確率」「確率変数と確率分布」で理解が追いつかなくなり、章末問題が全く解けなくなりました…
(あと眠気に襲われて読み進められなくなりました)
なので、もっとわかりやすく楽しく読める本はないかと探し、評判が良さそうだった「完全独習 統計学入門」を読むことにしました。
最初からこちらを読んでいればよかった…と思えるほど分かりやすくて、一気に理解が深まりました。語り口が軽快で図解も多く、おすすめです。
過去問について
過去問は直近のものから3回分やりました、が、2020/4から統計検定3級の試験範囲が変わっています!(出題範囲に「相関と回帰」「確率分布」「統計的な推測」が加わっているそうです。*2)
最新の過去問(2017〜2019)には新出題範囲が含まれていないので、その部分だけ公式テキストの章末問題を再度解き直して復習しました。
(試験前日に気づいて死ぬかと思った。道理で過去問簡単に感じたわけだ。)
受験結果
87 / 100 (合格評価得点:65)で合格しました。
全30問で、正解率の内訳は以下の通りです。
- データの種類・標本調査・実験・統計グラフ:100%
- データの代表値・散らばり・回帰:100%
- 確率・確率分布・統計的な推測:52%
やっぱり苦手だったうえに過去問がなくて対策が不十分だった確率・確率分布・統計的な推測の正答率が低かったです。
この範囲は上の級を取得するのに必須な知識のはずなので、改めて勉強しないと…
おわりに
とりあえず合格するだけなら2週間程度(2〜3時間/日)の勉強でどうにかなりました。(勉強時間は通勤片道1.5時間を活用)
ちゃんと理解して演習も十分やるためには、余裕を持って1ヶ月ぐらい時間があったほうがいいのかな、と思います。
あと確率・確率分布・統計的な推測など自分で計算する問題はどれだけ事前に演習問題を解いておけるかが大事です。現状だと公式テキストの章末問題を解くしか方法がないので、なにか良い教材があれば追記します。
*1:新型インフルエンザ等対策特別措置法に基づく緊急事態宣言の発令に伴い、試験中止。受験スケジュールは再考します。
*2:統計検定 3級|統計検定:Japan Statistical Society Certificate
「新出題範囲対応教材・例題集」を参照
はじまりにある言葉
はじめに
ブログ始めます。結城智久(@TomohisaYuuki)です。
無駄に張り切ってはてなブログProと独自ドメインに課金してしまったのでいきなり追い詰められています。
ともかくなにか書かないことには始まらないので、まずは自己紹介とブログを始めた理由を書いてみようと思います。
自己紹介
まずは基本情報
- 結城智久(Tomohisa Yuuki)
- 1989年10月生まれの30歳、社会人6年目(2020年現在)
- 横浜生まれの神奈川県民
- 既婚(2017.10〜)
- 黒髪メガネ男子
ざっくり経歴
- 小学校時代:中学受験勉強(算数がまったくできなかった)
- 中学時代:遊んで過ごす
- 高校時代:中高大一貫校で大学受験がないのをいいことに演劇部の活動に明け暮れる
- 大学時代:経済学を学びつつ演劇やったりアニメ見たり芸術論を学んだり
- 大学院時代:開校したての情報系?っぽいところに勢いで入りお情けで修了
- 社会人時代:某大手SIerに入社してSE
おおまかに仕事について
- 某役所のシステム開発に携わってます。
- 業務プログラム開発のプロマネ(3年半)→休職(2ヶ月+リハビリ2ヶ月)→将来システム提案(2年)→データ分析の実務研修中(1年)
- SEですが技術力は無いです。(応用情報とDBスペシャリストぐらい。使える言語無し)
- 現在は上司からの指示を受け、社内のデータ分析専門部隊の部署にて1年間実務研修中(2019年度末まで)
趣味とか好きなこと
-
観劇
小劇場系から商業系、ストレートからミュージカルまで幅広く。
高校から演劇部に入って役者をやっていたこともあって特に小劇場系が好き。数年前から当時付き合っていた妻の影響でミュージカルも観るようになりました。
-
料理
高校時代にモテたくてスイーツ男子を志したのがきっかけで料理好きに。
今も家では僕がメインで料理してます。レパートリー増やしたい。平日も毎日作りたいけど帰りが遅くてできてない。
-
その他
読書、文具、ガジェット、海釣り、カメラ、プラモなどなど幅広く。
ブログを始めた理由
成長したいけどうまくいかない日々
今仕事の実務研修でデータ分析を学んでいますが、Pythonの知識が無くて処理を書くのに悪戦苦闘したり、分析方法の引き出しが無くて指示されたことをただやるだけになってしまって「自分の頭で考える」ということができていません。
そこで仕事以外に自主勉強もしていますが、本を読んでも読みっぱなし、オンライン教育を受講しても続かない、となかなか知識が身に付かない状態が続いています。
成長したいけどうまくいかないというもやもやを抱えたまま、気づいたら実務研修も残すところ3ヶ月を切るところまで来てしまいました…
「上達のコツ=書くこと」という言葉
文章やプログラミングはとにかく書いて読んでもらう(動かす)事が上達のコツで、文面やコード上での自分のキャラって自分で鍛えないとわかんないので、とにかく書きましょう。
たまたま読んだnoteで上記の文章を見つけたのですが、「なるほど、たしかに書く経験を積まないと上達しないよな」と納得したのです。
1月ほど前に社内のデータ分析ハッカソンに参加したときに「制限時間内にとにかく結果を出す(≒完成させる)」ことが自分の成長につながる、と実感していたので、それに重なるところがあったのだと思います。ハッカソン参加していてよかった。
という訳で、このnoteに感化されてブログを始めることにしました。
道具はなるべく良いものを使う
これは自分のポリシーなのですが、何かを始めるときはなるべく良い道具や環境を揃えるべきだと思っています。
安くて粗悪な道具を使うと手間がかかったり成果がなかなか出ずに「つまらない」と感じてやめてしまうかもしれません。良い道具を使えば初心者でも成果が出やすかったり利便性の高さから行動を起こすコストが低かったりして、楽しみながらどんどん経験を積むことができるでしょう。
そんなわけで、はてなProと独自ドメインに課金しました。(言い訳終了)
今後の目標
とりあえず質はともかく、自分の備忘録を兼ねて量を書いていけたらな、と思ってます。
内容は現時点ではデータ分析やPythonについて学んだことを書いていくつもりですが、やっていくうちにもっと幅広くなっていくかも。自分が楽しめるようにやっていけたらいいですね。
おわりに
というわけでベタに自己紹介とブログを始めた理由でした。
これからお付き合いのほど、よろしくお願いします。