なぜGitHubでチーム開発をするのか
Herokuの話に入る前に、GitHubについてご説明します。GitHubはGitリポジトリを提供するサービスです。Gitリポジトリは、ソースコード自体はもちろん、更新した履歴内容のすべてを記録しておく場所です。GitHubは、このGitリポジトリをインターネット上に公開するだけの仕組みにもかかわらず、プログラマへ多くの恩恵を与え続けています。ただのソースコードのリポジトリに一体何が起きたのか。GitHubでは、ソースコードをただ保持するだけではなく、チーム開発に必要な多くの要素を組み合わせたことで、オープンソースソフトウェア開発の産業革命とも言える、新しいプログラミング体験をもたらすことに成功しました。
GitHubでは、チーム開発に必要なコラボレーション機能や、課題を管理するためのIssues機能の仕組みなど、最小限の機能を使いやすく実装しています。ただ、GitHubが他と異なっていたのは、作業内容をソースコードの管理者へ通知するためのプルリクエスト機能を簡単に使えるようにしたことです。これにより、誰もが、いつでも、どこでも、オープンソースソフトェアへ容易に貢献する方法が提示されたのです。
GitHubでのチーム開発は何が良いのか
このように、GitHubはチーム開発の方法そのものを変えることに成功しました。
かつて、チームによるプログラムの開発といえば、定期的に顔をあわせてミーティングを行い、その都度、開発するソースコードを分担しながら開発を進めていました。プログラマごとに担当のソースコード、それはサブモジュール単位であったり、オブジェクト単位であったり、大規模なケースではメソッド単位のようなケースもあったかもしれません。これらは、進捗の度合いや担当者のレベルによって振り分けられ、調整をしながら開発を進めてきました。
その後、ネットワークが整備され、インターネットが普及した頃には、チームのメンバーが同じ地域、同じ国にいないことも当たり前になってきました。日本でも「オフショア開発」と言って、開発者の豊富な中国やインドの開発者と一緒に、開発を行うこともあります。また、一つの場所に集まって会話し、役割分担するには、関わる人数も多くなり、会議で分担をするのは現実的ではなくなりました。そこで、バグトラッキングシステムやチケット駆動開発などの仕組みにより、ネットワーク上で一元化された仕組みを使って、チームの生産性を向上させる方法を考えてきました。
業務として開発を行うにあたって、これらの方法は適当ではありますが、ことオープンソースの開発に関しては、これらの方法での実現はなかなか難しかったといえます。なぜならオープンソース開発は、開発者にどのように参加してもらうかが困難であったからです。インターネット上には数多くの開発者がいますが、ある一つの開発に携わるためには、その開発者の集うコミュニティへ参加し、ユーザアカウントを準備して、その開発コミュニティの流儀に従う必要があります。ほんの数行の修正を提出したいだけでも、コミュニティへ参入する障壁は高いことでしょう。
そこでGitHubでは、誰でもソフトウェア開発に貢献できる仕組みを準備しました。それが、先ほどご紹介したプルリクエストです。GitHub上に公開されたGitリポジトリでは、GitHubのアカウントさえあれば、誰もがこのプルリクエストを送ることができます。プルリクエストとは、次の2つの仕組みを持ちます。
- ソースコードの修正箇所と修正者を明確にする
- 修正箇所をレビューしてから、本体へ修正した内容を統合(マージ)できる
プルリクエスト機能を提供したことで、勝手にソースコードを改変できない仕組みと、誰もがソフトウェアの修正に貢献する方法が両立できるようになったのです。プルリクエストを利用することによって、「誰が」「どのような修正を」「いつ」提供したかが明確になり、このリクエストの内容をレビューし、受け入れて、本体のソースコードへ「誰が」「いつ」マージしたのかもトラッキングできるようになり、プログラム開発の透明化に寄与しました。
このようにGitHubは、チーム開発の概念を「知っている誰か」から、「修正する能力のあるインターネット上の誰か」へ広げ、チーム開発の概念自体を変更し、より洗練されたものへと「革命」を起こしたのです。