勉強でGitHubを有効活用したい
GitHubにて勉強で作成したコードを公開し始めたということを、前回の記事では報告した。とりあえず使ってみた所感だったりをまとめておこうと思う。とはいえ使い始めて一週間足らずなので悪しからず。
記事としては②、③……と増やしていくつもりだ。そのたびに新しい発見や使い方等が見いだせれば良いのだが、そこは未来の自分に期待しよう。
とりあえずGitを勉強で使ってみての良いところ……まぁ、VCSの良いところ、といえるかもしれないがを列挙してみた。
- 復帰しやすい
- 原因解明が楽
そもそもの前提知識
VCSとはVersion Control Systemの略である。複数人でソフトウェア開発を行う際に出てくる問題の一つ、ソースコードのバージョン管理問題への一つの解答である。
膨大な行数になるソースコードは、複数人で編集が行われていく。もしも同時に複数人が同じファイルを編集しようとした場合、競合という「誰か一人の編集のみが反映され、他の人の編集は反映されていない」という状態になりうる。これでは編集が反映されなかった他の人の作業が無駄になってしまう。
しかしながらそういった複数人の成果物を組み合わせるという作業は、いずれはしなければならない。この面倒をサポートすることもVCSにできる機能の一つだ。
他にもソースコードを少し前の状態に戻す作業や、今の状態と少し前の状態との差分比較する作業においても、VCSは大いに役に立つ。
VCSの基礎的な操作として最低限、覚えて欲しい用語がある。参考にしたサイト。
- ブランチ
- コミット
- プッシュ
「ブランチ」とは作業履歴を管理する機能のことを指し、ブランチに追加/削除/変更の履歴を登録をしていくことで、後から履歴を参照して状態を戻したり、差分を比較して競合を解消するといったことができるようになる。
そんなブランチの履歴を登録する処理に「コミット」と「プッシュ」の2種類がある。それぞれの違いについて説明するには、「ブランチ」にはローカルとリモートの2種類があることを理解してもらわなければならない。
- ローカルブランチ…自分が更新するPC上のブランチ
- リモートブランチ…全員が更新するネットワーク上のブランチ
上記に示す通り、ローカルブランチは自分のみがアクセスでき、リモートブランチは関係者が誰でもアクセスできる。「コミット」は自分の作業状況をローカルブランチに登録することで、「プッシュ」は自分が管理しているローカルブランチの履歴をリモートブランチに登録することを指す。履歴の更新されていく流れとしては下記の通り。
自分⇒(コミット)⇒ローカルブランチ⇒(プッシュ)⇒リモートブランチ
他にもチェックアウトとかマージとかあるが、取り急ぎ上記の流れと用語が理解できれば何とかなると思う。
では本題、勉強で役に立つVCSの良いところを説明していきたい。
①復帰しやすい
1個目「復帰しやすい」について。
プログラム学習は色々とコードを書き換えて、コンパイルエラーを起こしてみたり、Exceptionを発生させたりと試してみることで理解が深まっていく。とはいえ最終的には動くプログラムを完成させることが目標となる。そのため「さっきの状態に戻したい」と思うことも珍しくない。
しかし、ここでいうところの ”さっき” が、一分前とか一時間前であれば問題ない。記憶を辿れば何とかなるかもしれないからだ。しかし、この "さっき" が昨日、いや、一週間前ということだってありえる。そういった場合、VCSで状態を保持しておけば復帰は楽だ。
複数人で同じソースコード群を触ることとなる業務において、この恩恵を受けた者は多いはずだ。勉学においても例外ではない。
ただVCSで状態を戻しやすいように、こまめにコミットしておく必要がある。動かせる状態に戻しやすくするため、エラーを出さない一段落ついた状態になったらひとまずコミットしておこう。
②原因解明が楽
バグの原因というのは変更した箇所に潜んでいるものだ。プログラムをとにかく書いて動かしている最中、「さっきまで動いていたのに動かなくなった」という時、どうやって原因を究明するか?
動いていた状態と、動かなくなった状態の差分を比較する。その差分の中に必ず動かなくなった原因が存在するはずである。そのため、こまめにコミットするというのは大事なのだ。
またコミット時にはコメントを付けることもできる。それにより比較すべき状態はいつか探しやすくなるし、久しぶりにコードを触ることになったとしても、自分の進捗を思い出す助けになるのが良い。
まとめ
勉強における一番の敵は、「忘れること」だと思う。何をしていたか忘れる、覚えたはずのことを忘れる、次にするべきことを忘れる……これが他の人も関わってくる仕事であれば、他の誰かが最悪覚えてくれている(褒められることではないが)。他の人に迷惑が関わっているという緊張感も記憶の定着には影響するだろう。
ただ個人的な学習において、覚えていたはずのことを忘れていても指摘してくれる人はいない。そのこれまでの進捗の履歴をVCSで管理しておけば、「そこを見れば思い出せる」というものがオンライン上にあるということになる。
GitHubにはISSUEという機能もチェックリストなどを通じて、自分がすべきことを管理することも可能だ(実際に使ってみたが、自分にはブログがあるので今後は使わないかもしれない)。
GitHubは開発だけにしか使えないと思われているが、個人の勉強においても非常に使い勝手が良く、今後個人開発をするに当たっての足がかりにもなる。是非ともGitHubを使うことをオススメしたい。