Entertainer Engineering

人を楽しませられる技術者を目指すあおかびんのブログ

GitHub駆動学習のススメ

こんばんは、aokabinです。かびです。

今日は琉大情報工のAdvent Calendarがあるということで
CODE BASEの忘年会でもちょっと話したGitHub駆動学習についてお話しようと思います!
(めっちゃ初心者向けです!)

まず、GitHubとは何か?

GitHub
プログラムやサービスなどを作る際に必要なソースコードのバージョン管理や
開発を支援するための機能を持った、IT技術者のためのプラットフォームサービスです。
僕が世の中で一番好きなサービスがGitHubです!

バージョン管理

もしかすると、バージョン管理がいまいちピンときてない人もいるかもしれませんが
ざっくり説明すると
「今の動くソースコードを保存しておいて、後で機能を追加・削除して動かなくなっても、今の状態に戻れれば動く」
というように、「さっきのソースコードの状態に戻る」みたいな機能を、バージョン管理と理解しておけば一旦大丈夫です 🙆

そして、「今の動くソースコード」を念のため自分のパソコン以外にも保存しておけば、
もしパソコンが動かなくなっても、ソースコードは無事だよね、ということを実現してくれるのがGitHubというサービスです。
(他にも、「他の人とソースコードを共有して、同時並行で開発ができる」とか「プロジェクト管理ができる」とかありますが、今回は割愛します)

開発支援機能

また、GitHubは開発を支援するための機能をたくさん有しています。
その中でももっともベーシックな機能として、issueというタスク管理のような機能があります。

このissueは、一般的なタスク管理ツールのように、あるタスクに対してコメントをつけたりすることができます。
また、GitHubのコメントではMarkdownを使うことができ、さらにソースコードを記述した際にシンタックスハイライトすることもできるため
非常に簡単にみやすいコメントを書くことが可能となっています。

GitHub駆動学習では、これら2つの機能を主に使っていきます。

GitHub駆動学習

さて、じゃあGitHub駆動学習ってなんぞや?というお話ですが
技術的な勉強は全部GitHubでまとめてやってしまおう!という学習方法になります。

GitHubを使って開発をするメリット

というのも、GitHubは上記のバージョン管理機能と開発を支援するための機能を提供しているため
オープンソース(公開された)のプログラムの開発にも一役買っています。
そしてオープンソースのプログラムに自分が書いたソースコードが取り込まれると
「この人はこのプログラムの開発に貢献しています」というのが、外からも見れるようになります。
この情報が公開されていることによってその人自身の技術力がある程度把握できるようになっています。

また、それ以外にも、1日にどれくらいプログラムを書いたか(厳密にはcommit量を計っていますが)
ということも公開されるようになっているため、GitHubで開発をすることによって
その人が「どういうコードを書くのか」また「どれくらいコードを書くのか」ということが外部から見れるようになっています。

この情報は、就職活動を行う際にとても有用で
GitHubのMyPage情報を共有することで、ある程度その人の技術力を測る指針にできるわけです。

つまり、自分で勉強する場合も、このGitHubを使って学習を進めておくと
「どういうコードを書くのか」
「どれくらいコードを書くのか」
ということを公開できる状態が作れるため、就活をする際に結構便利だったりするわけです!

具体的な手法

ここからは具体的な手法を説明します。
今回は実際にあり得る例として、やりたいことに対して、Web上のサイトの情報を元に勉強を進めていくことを考えます。
流れとしては以下のような感じ

  1. 学習に関するリポジトリを作る
  2. 関連するissueを作る
  3. 学習をしながら、学んだことをコメントしていく
  4. 学習を進めていくうち、細かく勉強したいものが出てきたらまたissueを作る

今回は最近僕が実際にやったこととして、Kubernetesというツールの勉強をしたので、そのステップを書きます。

github.com
(上記、普通に参考になると思うのでよかったら是非見てみてください)

1. 学習に関するリポジトリを作る

まずは学習に関するリポジトリを作ります。
リポジトリというのは、ソースコードが保存される、ディレクトリとかフォルダみたいなものです。

f:id:aokabin:20181224235706p:plain
リポジトリの作成

2. 関連するissueを作る

学習内容に関するissueを作ります。

f:id:aokabin:20181224235934p:plain
issueの作成

今回は、あるサイトを参考に作業を進めていこうと考えたので、サイトの情報を説明のところに書いていきました。

3. 学習をしながら、学んだことをコメントしていく

あとは、具体的な作業内容を学んだことを書いていきましょう。

f:id:aokabin:20181225000457p:plain
コメントの残し方

書くときにオススメなのは

  1. どういう状態になって
  2. どういうことを考えて
  3. どういうことを調べて
  4. どういう情報を得て
  5. 何を実行した結果
  6. どうなった
  7. その理由

あたりを書いていくのがいいと思います。

このissueは、他の人にみてもらうのと同時に、過去の自分がやった作業ログの役割を持つので
何を考えてどう調べてそうしたのか、という情報を出来るだけ細かく書いている方が、読み返すときにもいいですし
他の人が見たときに、自分の考え方のクセも見ることができるので、伝える情報量が増えていいと考えています。

4. 学習を進めていくうち、細かく勉強したいものが出てきたらまたissueを作る

学習を進めていくと、issueのタイトルから脱線することもあります。
今回例に挙げたissueの場合、途中でnb_filterというものに遭遇しました。

nb _filterに関しては、別のissueを立てて、そちらでまた別途学習を進めるようにして
新しいissueを立てました。

f:id:aokabin:20181225001553p:plain
脱線したissue

GitHubのissueを使うと、issueのタイムライン上にissue同士の関連情報が表示されてくれるのも
学習事項同士を関連させて効率化させられるいい機能だと思います。

f:id:aokabin:20181225001615p:plain
issueの関連情報

と、このような形で作業を進めていくと、
この自分の学習ログとして残す際に有用なだけではなく、他の人が同じ内容で学習をする際のサポートにもなりますし
就活の際に思考のクセや考え方、技術レベルなどが見えたりするため、GitHubでの学習自体はとても有用だと僕は考えています。

まとめ

長々と語りましたが、大まかにいうと「学びの過程すらGitHubに残してしまおう」というお話でした。
この方法は、僕がお世話になっているYassLab社で最初のアルバイトの際に活用されている方法で、
それを個人の学習にも応用しようというのがこの方法をオススメしたきっかけでした。

プログラムを学び始めの人も、そうでない人も、是非こういった方法で学習過程の共有をしていきましょう!

それでは良いクリスマスを!

P.S.

本当はこの方法も書きたかったのだけど、リポジトリが増えて管理が面倒なので
そういう場合はghq+pecoを使ってソースコードの管理自体も簡単にやってしまうことをオススメします!
詳しくは以下の参考サイトをご覧ください!

qiita.com