継続的な学習は、僕の中で近年のひとつの大きなテーマとなっています。といっても、どうすれば継続学習ができるのかという話ではなく、世の中には日々の学習を行わない人がいるけど、どうして学習をしないのか、というのがこのテーマの中心課題です。

今回は、そのテーマについて論じる前に、僕が日々実践している学習方法を紹介したいと思ったのでブログに書いておきます。

毎日学習するための方法

僕が実践している毎日学習するための方法はとても簡単で、具体的には次の通りです。

  1. 特定のリポジトリを毎日git pullして、追加されたコミットを見る
  2. 面白い変更があればシェアやメモする

見ての通り、とても簡単です。僕は毎日これを1日の作業開始前に行っています。

毎日リポジトリをチェックすることで得られるメリット

これを続けていることで得られるメリットは色々ありますが、僕が考える代表的なものは次の通りです。

  • そのプロジェクトについて詳しくなれる
  • そのプロジェクトで使われている言語について詳しくなれる
  • 一般的なコミットメッセージの書き方を知ることができる
  • 一般的なコミットの粒度を知ることができる

それでは具体的にそれぞれのメリットについて説明していきます。

なお、ここからは僕が現在ウォッチしているEmacsのリポジトリを題材に話をすすめていきます。

そのプロジェクトについて詳しくなれる

プロジェクトを毎日git pullすると、少しづつ変化を確認できます。大きめなプロジェクトの場合、リリースが行われると大量の変更が入るため、変更をすべて確認するのはとても大変ですが、毎日の変更であればそこまで労力はかかりません。

Emacsプロジェクトのコミット

例えば、この記事を書いているときの最新のコミットは上図のように1行(3文字)だけです。これだけあれば、時間をかけずに読むことが可能です。

Emacsの場合、リリースは平均して1年以上の間隔が空くのですが、コミットはほぼ毎日行われています。そのため、リリース後にすべての変更を確認するのはほぼほぼ困難となりますが、毎日であれば、おおよそ漏らさずに確認が行えるため、普通の人よりもEmacsについて詳しくなれます。

これは、もしそのプロジェクトについての書籍を書くことになるような場合にとても有益です。

そのプロジェクトで使われている言語について詳しくなれる

コードリーディングは、スキルの向上にとても役立ちますが、すでにできあがったプロダクトのコードを一から読むのはとても大変です。ですが、毎日のコミットを読むだけであれば、そこまで時間をかけずに行うことが可能となります。

Emacsの開発に使われている言語の種類

Emacsは、基本的にEmacs LispとCで書かれているプロジェクトです。そのため、毎日コミットを読めば、この2つの言語について少しづつ詳しくなれます。

僕自身はCは書くことがないので、ほぼコミットメッセージだけ読んで流していますが、Emacs Lispについてはコミットされたコードを見て、少しづつ他の人の書き方を学習しています。

お陰で、自分がEmacs Lispコードを書くときには、そこで得た知識を活用してコーディングできるようになります。

一般的なコミットメッセージの書き方を知ることができる

もし、コミットメッセージと関係のない変更が行われているコミットがあれば、変更を見たときに意味を考えてしまいますが、Emacsのリポジトリではそういったコミットは一切ありません。そのため、悩むことなくコミットを読むことが可能となっています。

逆に、コミットを読んでいて、変更の意味が理解できずに悩んでしまうことがあるとすれば、それはコミットメッセージかコミット粒度のどちかが悪い可能性がありますので、自分自身がコミットを行う際に、そのようなことがないように気をつけるポイントとして学習しておく必要があります。

一般的なコミットの粒度を知ることができる

コミットの粒度は、明確な答えがないため、なかなか学習が難しいスキルです。ですが、色々なプロジェクトのコミットを見ていると、一般的に正しいとされているコミットの粒度を知ることができます。

個人的にコミットを見つづけることであらためて最重要と感じたのは、コミットメッセージ以外の変更は行わないという、当たり前のことを当たり前に行っていく姿勢です。

ドキュメントに対する2つのコミット

例えば、上図のドキュメント変更のコミットは、どちらもminibufferに関するコミットですが、それぞれ追加と修正が分けれていて、コミットメッセージと変更が等しくなっています。

更に言えば、ドキュメントのタイポや単純な空白の削除であっても、Emacsのリポジトリではコードの変更と合わせたコミットは行っていません。タイポの修正はタイポ修正として、空白の削除は空白の削除として、コードの変更はコードの変更として、変更内容と一意のコミットメッセージでコミットされています。

そのため、コミットメッセージとコミットに乖離がなく、コミットを読む際に余計な意味を考えずに変更を確認することができます。

こういった適切な粒度でコミットを行うことは、当たり前と思えるかもしれませんが、会社などでは意外とできていなかったりするため、こういったプロジェクトで当たり前に行われていることを噛み締めることで、あらためて肝に命じておくことができます。

毎日コミットを読む方法

僕が毎日コミットを読むために利用しているツールは基本的にはTig だけです。git pullしてTigを起動(lをTigのエイリアスにしています)して、コミットにひとつづつ目を通していきます。

TigでEmacsのコミットを見る

ターミナルに慣れていない人であれば、SourcetreeGitHub Desktopなどのデスクトップクライアントでもまったく問題ありませんので、好きなツールを使うと良いしょう。

おわりに

今回は僕が実践している毎日の学習方法を紹介してみました。本を読むなどの方法ももちろん効果的ですが、こういった方法でもプログラマは自主的に学習できます。

学校や本では学べない、より実践的なエッセンスを学習することができますので、もし、何か気になるプロジェクトがあればぜひ試してみると良いでしょう。