あけましておめでとうございます。京都産業大の玉田です。旧年中は、GitHubに大変お世話になりました。みなさまの中にもそのような人が多いのではないでしょうか。
日本でもGitHub を利用する企業が増えてきており、昨年6月に、GitHub Japan が設立されました。一方で、GitHubは未来の開発者の育成についても意欲的に行っています。例えば、GitHub Patchwork という初心者向けのイベントを世界各国で実施したり、GitHub Education という制度が整備されていたりします。
本稿では、このうちのGitHub Educationに着目し、GitHub Educationとは何か、GitHubやGitHub Educationを大学という教育現場で、どのように利用しているのかの一事例を紹介します。
GitHub Educationとは何か
GitHub Educationとは、GitHubの学生・教育期間向けの制度で、いわゆるアカデミックライセンスのことです。対象は、教育機関に所属する学生、生徒、職員などの個人と教育機関の各種団体です。この制度を利用すると、通常は有償のプライベートリポジトリが、無料で作成できるようになります。
GitHub EducationのWebページ
GitHubのアカウントは、団体アカウント(Organizationアカウント)と個人アカウント(Personalアカウント)の2種類に分類できます。GitHub Educationはその両方で申請できます。団体アカウントでは、クラブ活動単位での申請や、授業単位での申請、大学のゼミや研究室単位での申請が可能です。例えば、私の運営する研究室でもGitHub Educationを申請しており、研究室のプロジェクトや研究室のWebページ などに利用しています。また、クラブ活動では、KMC(京大マイコンクラブ) が取得しているのがよく知られています。
一方、個人アカウントはさらに学生、教職員の2種類に分けられます。両者ともに申請するとプライベートリポジトリが利用できるのは変わらないのですが、学生アカウントはStudent Developer Pack という特典がさらについてきます。Student Developer PackはAmazon Web Service(AWS) やVisual Studio、Travis CI など、通常有償のサービスやソフトウェアが無料で利用できるものです。ただし、個人アカウントは、利用できる期限が2年と決まっています。申請後2年経過すると失効し、それ以降プライベートリポジトリが作成できなくなります。とはいえ、まだ学生であれば、再申請できますし、今までに作成したプライベートリポジトリもそのまま利用でき、勝手にパブリックになることはありません。
次の図にGitHubのアカウントの種別をまとめました。標準的には、GitHub EducationはMicroプラン(5つのプライベートリポジトリ)のクーポンが2年間付与されます。しかし、団体アカウントであれば、申し込み時にプライベートリポジトリの利用予定数を申請できます。私の周りの実績を聞く限りでは、ほぼその数が認められるようです。申請が認められると、申請した数のプライベートリポジトリが持てるようになります。なお、団体アカウントの場合は期限はありません。
GitHubのアカウントの種別
GitHub Educationの活用事例
研究室での活用
大学で得られた成果は基本的に公開されます。しかし、成果としてまとめる前であったり、企業との共同研究、特許に関連するプロジェクトなど、一定期間秘密にすべき研究も存在します。
そこで、私の研究室では、GitHub Educationという制度を活用し、プライベートリポジトリを利用しています。もちろん、大学内でGitlab やGitbucket などのサーバで運営する選択肢もあります。しかし、サーバ管理はしたくないという私のサボり癖 サーバ管理に人的コストは掛けないという研究室の方針のため、その選択肢は採用していません。
私の研究室に所属する学生は、配属時にGitHub Educationを申請するよう指示されます。そして、その学生の研究の成果(卒論や学生が筆頭著者の原稿、その研究のために開発するツールなど)は学生個人のプライベートリポジトリとして作成・管理されることになります。
指導教員である私は、その学生のリポジトリの共同開発者(コラボレータ)という形で参加します。そして、学生が書いたプログラムに対する私のコメントや、原稿の添削・修正はすべてプルリクエスト経由で行います。学生個人のプライベートリポジトリですから、Student Development Packを利用できます。そのため、Travis CIを使った継続的インテグレーションも可能です。
一方、研究室全体で管理すべきプロジェクトも時には存在します。研究室のホームページや研究室内のチームで開発するシステムなどです。そのようなプロジェクトには、研究室で取得した団体アカウントを使って、プロジェクトを運営しています。
授業での活用
次に、授業でのGitHubならびにGitHub Educationの活用事例を2つ紹介します。
教員間の情報共有での活用
一つは、教員間の情報共有のための利用です。複数の教員が一つの講義を持つ場合があります。その時に問題となるのが、課題やその解答例、教材の共有です。メールでの共有やDropboxを使った共有もできますが、やはりバージョン管理が望まれます。そして、教材などの成果物に対してオンラインでコメントしたり、議論する場があるほうが頻繁に集まることもなく気軽に更新が可能になります。さらに、それらの情報が一箇所に集約されることも見逃せない重要な点です。
一方で、課題の解答例は、学生には秘密にしておくほうが望ましいと言えます。そこで、授業用の団体アカウントをGitHub Educationで申請して利用しています。授業用のアカウントでは、学生向けのプロジェクトは公開プロジェクトとして、教員の情報共有のためのプロジェクトはプライベートプロジェクトとして運用しています。
学生の教育への活用
もう一つは、学生の教育における活用です。
今日、一般的な開発では、GitやSubversionなどのバージョン管理システム(VCS)の利用が当たり前になっています。そしてこれからは、分散型バージョンコントロールシステム(DVCS)を使ったプル型ソフトウェア開発が中心になってくるでしょう。そのため、バージョン管理の概念やプル型開発の方法の教育も必要になってきています。
やはり、実際に行ってもらうのが良いということで、授業の課題として、GitHubを利用してプル型ソフトウェア開発を、チームを組んで行ってもらいました。こちらでサーバを用意する必要がなく、成果も公開されるため、採点も可能です。公開されたくない学生には、GitHub Educationを申請したプライベートリポジトリを使うのも良いでしょう。
具体的には、公開プロジェクト(FileFinder )をあらかじめ用意しておき、そのプロジェクトでイシューを登録しています。学生は、メンバを集めてチームを組み、代表者がプロジェクトをGitHubに作成します。さらに、代表者は作成したプロジェクトにチームのメンバを共同開発者として登録します。ここからは、作成したプロジェクト上で、メンバ全員で次の作業を行います。その際、全員がすべての作業を少なくとも一度は実行せよ、という要件を設けています。
自分たちのプロジェクトへのイシュー登録(元プロジェクトのイシューをコピーする) 、
イシューの実施、
プルリクエスト発行、
プルリクエストの検証、
プルリクエストの承認
Classroom for GitHub という制度もあり、上記の取り組みは、この制度を利用したほうが良いのかもしれません。この時は、調査時間が足りなかったため、利用しませんでした。
この取り組みですが、残念ながら学生からの評判は芳しいものではありませんでした。バージョン管理システムやプル型ソフトウェア開発の必要性が十分に伝えられていなかったのが原因であると思います。ここでの反省を踏まえて、次回の改善を目指したいと思っています。
GitHub/GitHub Educationの活用の上での注意点
ここでは、GitHubやGitHub Educationを利用する上で困ったことや、心掛けていることを挙げます。
まず、授業で利用したとき、60名中、数名の学生がbot認定され、何も操作できなくなりました。その学生は、いろいろな対策を個人的に行い、最終的に多くの時間と労力をその対応に費やしましたが、独力では解決できませんでした。結局、私まで相談に来て、解決策(GitHubのサポートページから解除のメールを送る)を実施し、解決しました。学生自身に問題があるわけではないのですが、このような問題がある可能性を伝えていれば、もっと早く解決できたのではないかと思います。
また、GitHubのメッセージは基本的に英語です。それだけで読もうという姿勢すら見せない学生も一定数います。英語のメッセージに対する補足も授業で必要になるでしょう。
学生の中には自分の操作方法が悪いと思い、何度も講義資料にある操作を繰り返す者もいます。本来は、それぞれの操作の意味を理解した上で行うことが望まれるのですが、なかなか全員が理想通りに動くわけではありません。そして、学生が起こし得るすべてのエラーを、あらかじめ教員が網羅できるわけでもありません。対症療法的に一つずつ地道に対応していく他ないのかなと思っています。
次に、私が学生とともにGitHubを数年使い続けていることを踏まえて、心掛けている方針を紹介します。それは、何を行いたいのかの区別をしっかりとつけることが重要であるということです。例えば、講義などの課題では、Gitの使い方や、GitHub Flowの一連の流れをしっかりと実践することが重要です。そのため、ブランチの切り方やプルリクエストの方法を細かく指導する必要があります。
一方で、卒論や研究室での開発では、開発や原稿の成果が重要であり、GitHubを利用するのは成果を共有するためであると割り切っています。そのため、GitHub Flowなどの流れは、実践できれば儲けもの程度の意識を持って学生に接しています。ただし、興味を持った学生にはGitやGitHub Flow、プル型開発を少しずつ教えています。そして、学生の間で広がっていくのを期待しています。数年に一度くらいは学生の間で広まっていきます。残念ながら引き継がれていかないのが目下の悩み事ですが……。
まとめ
私のGitHub/GitHub Educationの活用例を紹介しましたが、いかがでしょうか。GitなどのDVCSやGitHub Flowなどのプル型開発は、慣れるまでのハードルが非常に高いと思います。しかし、実践しなければいつまでも身につきません。とにかくやってみるという姿勢が重要です。
そして、GitHubは、学生に対してStudent Packという豊富な特典をつけています。インターネット環境があれば、プル型開発やクラウド環境、CI環境などを実践できるようになるのです。これらを活用することで、より高度でより面白い開発に携われるようになっていきます。そして、GitHub Flowのようなプル型開発に慣れることで、世の中のOSSへの貢献の道が、そして、GitHubが謳うソーシャルコーディングへの道が拓けるのです。
今年もGitHubにお世話になる年になりそうです。今年もよろしくお願いします。