『わかばちゃんと学ぶ Git使い方入門』を読んだ

同僚にお借りして読んだ。

わかばちゃんと学ぶ Git使い方入門〈GitHub、Bitbucket、SourceTree〉

全くの初心者向けに、GitやGitHubの使い方を解説した本。
漫画の主人公も、プログラマではなく「Web業界に憧れる大学生」。

コマンドラインではなくGUIで操作していき、写真も豊富で分かりやすい。Gitの説明そのものも分かりやすかった。

「Git入門」を謳った教材は多いが、自分が見たなかでは本書が一番理解しやすかった。
既にある程度知識がある状態で読んだからかもしれないけれど。

最初にGitについて学ぼうとしたとき、ステージという概念がよく分からずイメージできなかったが、本書ではコミットを「その状態を写真に撮る」、ステージングを「撮影台に載せる」と説明してあり、分かりやすかった。

仕事で日常的にGitを使っているから本書の内容は大体知っていたが、初学者向けの本書を読むことでGitの利便性を改めて実感できた。
と同時に、いくら便利なものでもちゃんと理解して使わないと意味がないなと感じた。
それが、本書を読んだ一番の感想。
正しく使わないとせっかくのGitの利点を活かせないわけだけど、今の自分がまさにそういう状態だから。

仕事で使っていると書いたが、Gitを理解している、使いこなしている、とは言い難い。
流れ作業になっており、こういうときはこのコマンド、次にこのコマンド、と機械的に行っている。
だから「いつものコマンド」では出来ないことをやろうとしたとき、困ってしまう。
トラブルが発生した時に、どうすればいいか分からなくなってしまう。
どのコマンドを実行すると何が起こるのか、を正しく理解していないから、こうなる。対応できないし、対応を考えられない。

Gitが完全にブラックボックスになっていて、このコマンドを叩けばこうなる、という、入力と結果しか分かっていない。
中で何が起こっているか分かっておらず、だからトラブルシューティングできない。
あるいは、すごく簡単に出来るであろう作業を、ものすごく手間を掛けて行う羽目になる。

本当はこういう状態はすぐに脱却して、内部的に何が起こっているのか理解して使うべきなんだろう。

本書は入門書だからそこまで踏み込んだ内容ではないけれど、取っ掛かりとしては十分で、普段の業務で使う分にはほとんど問題ないと思う。
少なくとも自分が普段使っているGitの機能は、ほとんど本書に書かれてあった。

メモ

本書で存在を知ったものもいくつかあるので、メモしておく。

チェリーピック

特定のコミットを、今いるブランチの最新のコミットとして取り込む。

$ git cherry-pick <commit>

連続する複数のコミットを取り込むことも出来る。

$ git cherry-pick <始点の一つ前のcommit>..<終点のcommit>

参考資料

スタッシュ

現在の作業内容を、コミットすることなく一時的に保存しておける。

$ git stash

これだけで保存できる。
スタッシュは複数行うことができ、$ git stash listで一覧を確認できる。

復元するにはstash applyを使う。$ git stash applyとすると、直近のスタッシュが復元される。
復元しただけではリストからは削除されないので、$ git stash dropで直近のスタッシュを削除できる。
また、$ git stash popで、復元とリストからの削除を同時に行える。

通常、ステージングしてあるかどうかは復元されない。
applypop--indexオプションをつければ、それも含めて復元できる。

どのブランチにいても復元を行える。

参考資料

スカッシュ

直近の複数のコミットを一つにまとめる。

$ git rebase -i HEAD~<まとめたいコミットの数>

こうするとエディタが開くので、2行目以降のpicksquashに変更する。

pick コミットID コミットメッセージ
pick コミットID コミットメッセージ <- pickをsquashに変更
pick コミットID コミットメッセージ <- pickをsquashに変更

参考資料

Node.jsで任意のサイズの画像を生成するスクリプトを書いた

縦横サイズかバイト数、あるいはその両方を指定できる。

画像を操作するプログラムを書いていて、その検証用の画像を簡単に用意できるようにしたい、というのが作った動機。
既に似たようなツールは存在するのかもしれないが、勉強になりそうだから自分で作った。

Canvasで画像を作成し、それをBufferオブジェクトに変換。そのオブジェクトの末尾に無意味なデータを追加していきバイト数を調整している。