初めての自作キーボード:meishi2のビルドログ

はじめに

動いたときの達成感がすごい。
結城智久(@TomohisaYuuki)です。

電子工作ほぼ素人ですが自作キーボード作ってみました。
自作キーボードに挑戦しようと思ってる方には参考になれば、また自作キーボード玄人の方には「初心者ってこんなところで躓くんだ」と温かい目で見守ってもらえれば幸いです。

先にざっくりまとめると

  • 自作キーボード作成初挑戦、完成まで2時間半かかった
  • 公式ビルドガイドには書かれていなくて詰まったところがあった
  • Mac環境で作っていたことによる問題も発生した
  • 自作キーボード楽しいから迷ってるならまずはmeishi2作ってみよう

という感じです。

なんで自作キーボードに手を出したのか

自作キーボードの存在を知ったのは4ヶ月ほど前。それまではHHKBに憧れていたりniz atom66に手を出したりしていましたが、キーのレイアウトや打鍵感が合わなかったりで、結局MacbookやMacbookProのバタフライキーボードなどを使っていました。

ただ今年に入ってから在宅勤務をするようになり、せっかくならできるだけ仕事環境を良くしたいと思っていろいろ調べてみたところ

  • 左右分離キーボードが肩こり解消にいい*1
  • カニカルキーボードは打鍵感がよくて捗る*2

という情報を見つけました。

そこで実際家電量販店でmajestouchを触ってみたら本当に打鍵感が良くて、「メカニカルキーボードいいじゃん!よし買うか!」と、とても乗り気になりました。が、よくよく調べてみるとmajestouchには左右分離キーボードは無いという…そのためmajestouchは断念。どころかいいキーボードを買うことまで断念しかかりました。

でもここまで高まったキーボード欲は抑えきれず…

さらにいろいろ調べてみた結果、以下の記事を見つけ、ついに自作キーボードとの出会いを果たしたのです。
note.com

そこから自作キーボードを調べ始め、自作キーボードなら形状もレイアウトも軸も、さらにはキーマップまで自由だと知り、ついに自作キーボードに手を出すことを決意したのでした。

meishi2を選んだ理由

現時点での自分の要望は以下の通り。

  • 形状
    • 左右分離
    • 小指の負担を減らして親指を活躍させたい
    • カニカルスイッチ
    • 重め、リニアが好み
  • 機能
    • bluetooth接続
    • 複数の接続先を保存しておいて切替可能
    • 仕事用Windowsとプライベート用Macどちらでも使える

この条件に最も合っていそうなのはclaw44+重めの軸+無線化ではないかと思っていますが、公式ビルドガイド*3を読むと初心者には難しそう。
特に不安だったのが「はんだ付けがちゃんとできるか」ということ。はんだ付け箇所もたくさんあるから大変そうだし、失敗したらリカバリーできるかわからないし、キットはそれなりの値段するから失敗したからといって新しく買うのもためらわれるし…

そうやって悩んでいたのですが、ある時ふと「はんだ付けが不安ならはんだ付けが少ないキットで練習すればいいじゃん」とひらめく。さっそく「自作キーボード 入門 おすすめ」で検索して、そこで見つけたのがmeishi2でした。

  • 4キーしか無い(=はんだ付け箇所が少ない)
  • ビルドガイドに書いてある工程が少ない(=簡単そう)
  • 値段が安い(=失敗したときは最悪新しいものを買えばいい)
  • 遊舎工房さんでにスイッチ&キーキャップつきのセットが売られている(=自分で部品を揃える必要はない)

上記の理由からmeishi2を最初の自作キーボードに選びました。

準備したもの

キット

yushakobo.jp
遊舎工房さんで購入。
スイッチ&キーキャップ付き(入っているものはランダム)を購入しましたが、いろんな軸が試せるし、キャップもカラフルでとてもお得なセットだと思います。おすすめ。

工具

以下のサイトを参考に揃えました。
キーボード自作、特に Helix キーボードキットの製作に最低必要な工具のメモ · GitHub
自作キーボードの組み立てに使っている工具 | yfuku docs

はんだごてセット

はんだごて、交換用こて先5種、こて台、はんだ吸い取り器、はんだ、ピンセット2種が入ったお得なセット。
とりあえず買っておくといいと思います。(バラバラに買うと思いの外高くなるので)
初心者はいいはんだごてを使うことを勧められていますが、このセットのものでもどうにかなりました。

ニッパー

ダイオードの線を切ったりするのに使います。

はんだ

はんだごてセットに入っていますが、別途購入。
鉛入りのほうが融点が低く、初心者には扱いやすいらしいです。
また狭い場所でも作業しやすいように経が細いものを選びました。

マスキングテープ

はんだ付けの際に部品がズレないように固定するために使用。
まとめて買っちゃいましたがこんなに量いらないです…

作業マット

絶縁・断熱なので安心して作業できます。
色がはっきりしているので部品の視認性も上がります。
あと作業途中の写真がいい感じに撮れるというメリットも。

買ったけど使わなかったもの
はんだ吸い取り線

今回は使いませんでした。
はんだごてセットに吸い取り器がついているので、それを使うのでも大丈夫かもしれません。

あったらよかったもの
こて台

白光(HAKKO) こて台 633-01

白光(HAKKO) こて台 633-01

  • メディア: Tools & Hardware
はんだごてセットについているものの作りがあまり良くないので…
余裕があるなら買っておくと作業しやすくなるかもしれません。

作業の経過

基本は公式ビルドガイドに従って作成しました。
biacco42.hatenablog.com

手順は以下の通りです。

  1. ハードウェア組み立て
    1. パーツが全部揃ってるか確認する
    2. ダイオードを取り付ける
    3. タクトスイッチを取り付ける
    4. Pro Microを取り付ける
    5. キースイッチを取り付ける
    6. キーキャップを取り付ける
  2. ファームウェア書き込み
    1. ビルド環境構築
    2. ファームウェアのビルドと書き込み(※ビルドログとの差異あり)
    3. 動作の確認(※ビルドログとの差異あり)

パーツが全部揃ってるか確認する


キットの中に入っているパーツをすべて並べて、ビルドガイドの画像と見比べます。
この時点でわくわく感がすごい。

ダイオードを取り付ける


最初の関門。
ダイオードのリードを変に折り曲げてしまわないか、はんだ付けこれであってるのか不安になりながらはんだ付けしました。
ひとつつけちゃえばあとは簡単なんですが、最初はとても緊張した…あとリード切るのもほんとにやって大丈夫か心配になりましたが、気にせずバシッと切っちゃって大丈夫。

あとになって気づいたはんだ付けのコツは

  • 公式ビルドガイドに書いてあるようにはんだ付けする箇所の金属端子を5秒ぐらいしっかり温める
  • はんだは怖がらずにケチらずに多めに使うように心がける

かなと思います。
途中はんだが少なすぎたのかはんだごての離し方が悪かったのか、はたまた温度が低かったのか、端子の先にはんだでトゲトゲを何度も作ってしまいました…

タクトスイッチを取り付ける


これで合ってました。
部品の名前だけだと分からなかった…公式ビルドガイドにもこの作業の画像はなかったのでヒヤヒヤしながらはんだ付け。



タクトスイッチの裏面の画像手前側、はんだ付けが悪かったのか断面がすごく太くなった…
見た目も良くないし失敗したかな…と思ったけど結局大丈夫でした。

Pro Microを取り付ける


はんだ付けを怖がっている…

ビルドガイドだとコンスルーを固定する向きを示した画像以外はピンヘッダを使用した画像(=はんだ付けしている/されている画像)になっているので少し混乱。
コンスルーなのではんだ付けいらない!と自分に言い聞かせて、向きに注意しながらPro Microにコンスルーを挿し、続けて基盤に差し込みました。
本当にこれで固定できるのか?と半信半疑でしたが、ちゃんとはまるし、少し引っ張ったぐらいでは抜けませんでした。

キースイッチを取り付ける


ハードウェア組み立ての最後の関門。
でもキースイッチをつけると一気にキーボードらしくなるので一番テンション上がる作業でもあります。
基盤を裏返してキースイッチを支えにすると、キースイッチの位置がずれてしまうかもしれないのでマスキングテープで仮止めしながら作業するといいと思います。
結構足の長さがあるので切るべきか迷いましたが、切らないでおきました。今のところ問題なし。

キーキャップを取り付ける


感動の瞬間その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と接続します。


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のタクトスイッチを押します。

[avrdude done. Thank you.]と表示されたら書き込み完了!



動作の確認(※ビルドログとの差異あり)

書き込みが完了したらちゃんと動作するか確認します。
meishi2のデフォルトのキーマップは左から順に(今回作ったものの場合キーキャップがピンクから黄色に向かって)「ctrl+z」「ctrl+x」「ctrl+c」「ctrl+v」が割り当てられています。
適当にメモ帳などを開いてテキストのコピペがうまくいくか試してみましょう。

感動の瞬間その2!
…かと思いきや。

原因を考える

正直がっくり来ました…が、落ち込んでいてもしょうがないので原因を考えます。
ファームウェアの書き込みはうまく行っている(はず)なので、別の原因を考えます。

最初はキースイッチのはんだ付けがうまく行ってなくてキーをクリックしても認識されないのかと思いました。が、よく考えてみると、左3つは認識されているようなので、これは違いそう。(一番右側だけははんだ付け失敗している可能性が残っている)
とすると、スイッチを押したときにMacが受け取れない命令が出ているのではないか?だとすると…

そこで調べてみるとQMKfirmwareのキーコードは次のようになっていることがわかりました。

Keycode 意味 備考
LCTL(kc) 左Ctrl+kc デフォルトのキーマップで使用(=Windows向け)
LGUI(kc) GUI(Cmd/Win)+kc Mac向け

ここまで分かったので、キーマップを変更して再ビルド&書き込み。

これでやっと完成!
緊張しながら調べながら詰まりながらでしたが、2時間半かけてmeishi2を完成させることができました。



感想

自分で作ったものが動くのはとても嬉しい体験ですね。作るのに苦労したのならなおさら。meishi2にはとても愛着が湧きそうです。
初めての自作キーボードにmeishi2を選んで正解でした。はんだ付けの練習にもなるし、ファームウェアのビルド・書き込みもしっかり勉強できます。なによりあまり時間をかけずに完成までを一通り経験できるので、一気に経験値が稼げます。
初めての自作キーボードにmeishi2おすすめです。
たのしい人生様、とても素敵なキットを作成いただきありがとうございます!

これから始めようか迷ってる方に向けて。

  1. 電子工作初心者でも大丈夫
    • 僕は中学生の頃に授業でテスターを作って以来、約20年ぶりのはんだ付けでした
  2. ファームウェアの書き込みはそんなに難しくない
    • 黒い画面を使わない方法もあるそうです*4
  3. 作るのは楽しい、動いたときはすごく嬉しい、使っていて愛着が湧く
    • 自作キーボードはとても楽しいのでまずはmeishi2を作ってみましょう!!

おわりに

以上、長々書きましたが初めての自作キーボードのビルドログでした。
次はいよいよclaw44に挑戦!…と思っていましたが、その前にもう少しオーソドックスなキーボードを作るところからやっていこうかと思います。
こうしてキーボード沼にハマっていくんだなぁ…

MacのVirtual BoxにコマンドでVM作成(+CentOSインストール)

はじめに

結城智久(@TomohisaYuuki)です。
Virtual Boxを使えば簡単に仮想環境を構築することができます。
Virtual BoxはGUI操作ができますが、コマンド操作でVMが作成できないか気になったので調べて手順をまとめました。

(後半では作成したVMCentOSをインストールしていますが、こちらはGUI操作で行っています)

環境

  • ホストOS:macOS 10.15.6
  • パッケージ管理:Homebrew 2.5.1
  • 仮想化:Virtual Box 6.1.14r140239
  • インストールするゲストOS:CentOS 8.2.2004-x86_64

手順

  1. Virtual Boxをインストール
  2. CentOSのディスクイメージを取得
  3. Virtual BoxにVM作成
  4. VMCentOSをインストール

Virtual Boxのインストール

以下のコマンドをTerminalに打ってHomebrew経由でインストールできます。

brew cask install virtualbox

CentOSのディスクイメージを取得

CentOS公式サイトから取得します。
www.centos.org

CentOS Linux」の「V(yyyy)」タブの「ISO」カラムから「x86-64」をクリック。

f:id:TomohisaYuuki:20201007110944p:plain


以下からいずれかのリンクを選択。

f:id:TomohisaYuuki:20201007111041p:plain


必要なイメージファイルを選択してダウンロード。

f:id:TomohisaYuuki:20201007111105p:plain

ファイルの種類は以下の通りです。

  • 〜dvd1.iso:インストールに必要なパッケージが全部入ったISOイメージ。
  • 〜boot.iso:インストールに必要なパッケージをネットからダウンロードしてインストールするためのISOイメージ。
  • 〜minimal.iso:必要最低限のパッケージだけが含まれているISOイメージ。インストール後にyumコマンド等であとから自分で必要なパッケージを揃える必要がある。

VM作成+CentOSインストール

流れは以下のとおりです。

  1. VirtualBox上にVMを作成
  2. メモリ割り当て
  3. ハードディスクの作成と割り当て
  4. 光学ドライブの割り当てとディスクイメージのマウント
  5. その他の設定
  6. VM起動・CentOSインストール

1.Virtual Box上にVMを作成

最初にVirtualBoxVMを作成します。
ついでに作成した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点に注意してください。

  1. 端末のメモリ容量より大きな値を指定しない
  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」を選択します。

f:id:TomohisaYuuki:20201007112737p:plain


インストール言語を選択します。
「日本語」を選択して「続行」をクリック。

f:id:TomohisaYuuki:20201007112821p:plain


インストール概要では以下を設定します。

  • ネットワークとホスト名:Ethernet (enp0s3) をオンにする
  • 時刻と日付:「アジア」から「東京」を選択する
  • ソフトウェアの選択:「サーバー(GUI 使用)」を選択する
  • インストール先:既に選択されているので、「完了」をクリック

全ての設定を完了したら、「インストールの開始」をクリック。

f:id:TomohisaYuuki:20201007112853p:plain


インストールが開始されます。
インストールされているうちに「rootパスワード」と「ユーザの作成」を行っておきます。

f:id:TomohisaYuuki:20201007113111p:plain

完了したら「再起動」はクリックせず、以下のコマンドを実行してから再起動します。

f:id:TomohisaYuuki:20201007113029p:plain
# 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本体の再起動を行ってください)

f:id:TomohisaYuuki:20201007113204p:plain
f:id:TomohisaYuuki:20201007113234p:plain


ログイン画面が表示されます。
これでインストール完了です。

f:id:TomohisaYuuki:20201007113257p:plain

おわりに

VM起動してからのインストール作業はGUI操作になっていますが、VMの作成自体はコマンドラインを使うことで楽にできるようになりました。コマンドラインからの操作って難しい印象がありましたが、GUI操作よりも便利かもしれません。
VMへのインストール作業やVM上のOS自体の操作もコマンドラインからできたらいいですね。調べてみようと思います。

MacでHomebrewを使ったパッケージ管理覚書

はじめに

結城智久(@TomohisaYuuki)です。
Macで開発環境を構築しようとして調べていると、homebrewを使ってインストールするのがデファクトスタンダードなように見受けられます。
ですが、どうしてHomebrewを使うのか?パッケージ管理システムってどういうものなのか?正直よく分かっていませんでした。
この記事ではパッケージ管理システムについて基本的な事柄を整理し、Homebrewの使い方をまとめます。

パッケージ管理とは

配布形式との関係

パッケージの配布には大きく分けて以下の2つの配布形式があります。

1. バイナリ形式
コンパイル済みのファイルを配布する。

  • 配布者:様々な環境に合わせたファイルの作成・動作確認を行う必要があり、膨大な労力がかかる。
  • 利用者:配布されたファイルをインストールするのみ。知識や技術が不要で労力もかからない。

2. ソースコード形式
コンパイルソースコードを配布する。

上記の通り、配布形式がバイナリ形式の場合はあまり問題はありませんが、ソースコード形式の場合は利用者がある程度自分で作業しなくてはなりません。これらの形式を自動で判別し、必要であればコンパイル・ビルドを自動で行ってくれる仕組みがパッケージ管理システムの機能の一つです。

インストール時の問題解決

ソフトウェアをインストールするとき、以下の事象が発生することがあります。

  1. ソフトウェアAを利用するにはソフトウェアBが必要(ソフトウェアの依存関係)
  2. ソフトウェア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

  • 公式説明:「アップルが提供していないあなたの必要なものをインストールできます」
  • つまり:CUIアプリ(開発ツールなど)をコマンドライン操作でインストール可能にする。

Homebrew-cask

インストール方法

Homebrewのインストール
brew.sh

  1. 公式サイトのトップに貼ってあるスクリプトをコピー
  2. Macでターミナルを起動
  3. ターミナルにスクリプトをペーストして実行


Homebrew-caskのインストール
Homebrew-caskはHomebrewに含まれるため、インストール作業は不要です。

基本的なコマンド

分類 処理 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やデータ分析の勉強は趣味がてら個人的に継続していくことに。

その勉強の一環としてわかりやすく資格を取ろうと思い、データ分析に関連する資格を調べると以下のものが見つかりました。

この中で基本情報・応用情報・データベーススペシャリストは取得済み。

残ったものの中で

  • すぐに受験できる
  • そこまで費用がかからなさそう
  • 社内資格取得の際の加点対象資格に指定されている

ということから、統計検定を受験することにしました。

かなり無謀ですが、上期中に準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時間弱費やしたようです。

  1. 公式テキスト「統計検定3級対応 データの分析」を読む【約6日:12時間】
  2. 公式テキストで躓いたあたり(6章:確率のあたり)で「完全独習 統計学入門」にシフトして読み終える【約4日:12時間】
  3. 公式テキストに戻って読み終える【約2日:6時間】
  4. 過去問「日本統計学会公式認定 統計検定 3級・4級 公式問題集(2017〜2019)」を解いて間違えたところを復習する【約1日:6時間/3回分】
  5. 過去問に含まれていない範囲を公式テキストの章末問題で復習する【約1日:3時間】

公式テキストについて

公式テキストは説明が長くてわかりづらく、また淡々としているので読み進めるのはなかなか苦痛です。
僕の場合、想定通り「確率」「確率変数と確率分布」で理解が追いつかなくなり、章末問題が全く解けなくなりました…
(あと眠気に襲われて読み進められなくなりました)

なので、もっとわかりやすく楽しく読める本はないかと探し、評判が良さそうだった「完全独習 統計学入門」を読むことにしました。
最初からこちらを読んでいればよかった…と思えるほど分かりやすくて、一気に理解が深まりました。語り口が軽快で図解も多く、おすすめです。

過去問について

過去問は直近のものから3回分やりました、が、2020/4から統計検定3級の試験範囲が変わっています!(出題範囲に「相関と回帰」「確率分布」「統計的な推測」が加わっているそうです。*2)

最新の過去問(2017〜2019)には新出題範囲が含まれていないので、その部分だけ公式テキストの章末問題を再度解き直して復習しました。

(試験前日に気づいて死ぬかと思った。道理で過去問簡単に感じたわけだ。)

受験結果

87 / 100 (合格評価得点:65)で合格しました。

全30問で、正解率の内訳は以下の通りです。

  1. データの種類・標本調査・実験・統計グラフ:100%
  2. データの代表値・散らばり・回帰:100%
  3. 確率・確率分布・統計的な推測: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.com

文章やプログラミングはとにかく書いて読んでもらう(動かす)事が上達のコツで、文面やコード上での自分のキャラって自分で鍛えないとわかんないので、とにかく書きましょう。

たまたま読んだnoteで上記の文章を見つけたのですが、「なるほど、たしかに書く経験を積まないと上達しないよな」と納得したのです。

1月ほど前に社内のデータ分析ハッカソンに参加したときに「制限時間内にとにかく結果を出す(≒完成させる)」ことが自分の成長につながる、と実感していたので、それに重なるところがあったのだと思います。ハッカソン参加していてよかった。

という訳で、このnoteに感化されてブログを始めることにしました。

 

道具はなるべく良いものを使う

これは自分のポリシーなのですが、何かを始めるときはなるべく良い道具や環境を揃えるべきだと思っています。

安くて粗悪な道具を使うと手間がかかったり成果がなかなか出ずに「つまらない」と感じてやめてしまうかもしれません。良い道具を使えば初心者でも成果が出やすかったり利便性の高さから行動を起こすコストが低かったりして、楽しみながらどんどん経験を積むことができるでしょう。

そんなわけで、はてなProと独自ドメインに課金しました。(言い訳終了)

 

今後の目標

とりあえず質はともかく、自分の備忘録を兼ねて量を書いていけたらな、と思ってます。

内容は現時点ではデータ分析やPythonについて学んだことを書いていくつもりですが、やっていくうちにもっと幅広くなっていくかも。自分が楽しめるようにやっていけたらいいですね。 

 

おわりに

というわけでベタに自己紹介とブログを始めた理由でした。

これからお付き合いのほど、よろしくお願いします。