2018年6月4日、マイクロソフトがGitHubを75億ドルで買収するとのビッグニュースが飛び込んできました。

「え、、、GitHub(ギットハブ)って何?」という非SEさんでも大丈夫です。GitHubの紹介やgitを使用したサービスの買収事例も取り上げますので、最後までお読みいただけると今回の買収について理解が進むのではないかと思います。

GitHubの公式ブログより

GitHub(ギットハブ)とは?

GitHubを簡単に説明すると、「開発中のソフトウェアをインターネット上に保管するための置き場所を提供するサービス」です。ファイルの変更履歴を管理できるという特徴があります。リポジトリ(ソフトウェアの保管場所のこと)数やユーザー数によって課金される仕組みです。GitHubの有料プランですが、現在はユーザー数による料金体系になっています(参照)。

GitHubは、Chris Wanstrath(クリス・ワントラス)氏らによって開発され、2008年に法人設立されました。以前ご紹介した「Ruby on Rails」や関数型プログラミング言語のErlang(アーラン)などで実装されています。

現在、世界中で2700万人の開発者に利用されており(参照)、プログラミングを行う上で欠かせないサービスになっています。

主な機能としては、リポジトリに自分の作成したオープンソースソフトウェア(OSS)等を公開することができます。GitHubで公開したソフトウェアは、世界中の人が利用できます。また、他のユーザーがソフトウェアの修正や機能追加を提案することもできます。

このようにプログラマーが交流しながらソフトウェアを開発するというSNSのような側面がGitHubにはあります。

GitHubが普及したのはなぜか?

近年のIT業界では、「オープンソースソフトウェア(Open Source Software:通称OSS)」を利用したWebアプリケーション開発が主流となりつつあり、OSSの開発を行う個人や団体、企業などが多数存在しています。

ちなみにOSSとは、複製・修正・再配布などが自由に認められているソフトウェアのことで、無償で利用できます。

例えば、自分でカスタマイズしたブログを開設をしようとする際に、WordPress(ワードプレス)を利用される方も多いと思います。WordPressはOSSであり、WordPressが実装に使用されている言語であるPHPもOSSです。

WordPressで何らかのプラグイン(追加機能プログラム)を利用する場合も、OSSを利用することができます。また、そのようなOSSはGitHubなどで公開されており、誰もが修正・改善のチケットを発行することができ、修正依頼を出すことができます。

OSSのホスティングサービスは複数ありますが、筆者はGitHubで公開されているリポジトリを利用することがほとんどです。

GitHubにはOSSに対して、利用者が修正の提案をできるPull Requestと呼ばれる機能がありますが、2017年5月には、1億回目のPull RequestがOSSの作成者によって取り込まれたそうです(参考)

OSS開発においてGitHubが普及し一般化した理由ですが、筆者は主に以下の3つと考えます。

1.開発者にとってOSSを改変して利用するための機能「Fork」の存在
他のユーザによって公開されているリポジトリを、自分のリポジトリとして複製して利用する機能を「Fork(フォーク)」といいます。Forkの機能を利用することで、OSSに対して自身の要件にあった修正を加えることができるため、便利に使用することができます。また、独自に行った変更が他の利用者にも求められているものであれば、コピー元のリポジトリに対して、修正依頼(IssueやPull Request)を出すことができます。

2.ユーザー同士のコミニュケーションを推進する機能
リポジトリに対して作成者と利用者のコミュニケーションを円滑に行うために、作者への要望や提案を文章やコードで行うことができるIssueやPull Requestと呼ばれる機能があります。自分が作成したOSSにIssueやPull Requestがつくことは、OSSが使われている証拠であり、開発者にとってとても嬉しいことなのです。

3.gitのワークフローがOSSに適している
作業の履歴を管理したり、複数人が同時にコードを編集できるよう、歴史を分岐させて別々の作業ができるような「git(ギット)」と呼ばれるシステムをGitHubでは採用しています。

gitは、不特定多数の開発者がコードを編集するOSSに適していると筆者は考えます。そこで次に、gitとは何なのか、簡単に紹介したいと思います。

GitHubが採用するgitとは

gitは、Linuxの生みの親でもあるLinus Torvalds(リーナス・トーバルズ)氏らによって開発された「ファイルの編集履歴を保持するためのシステム」です。各ローカル環境にダウンロードして開発を行うことができる分散型の管理方法を採用しています。

例えば、過去に作成したテキストファイルに対して変更しようと思った時、バックアップとして日付をファイル名に付与して管理する方は多いかと思います。ファイルが増えると管理が煩雑になり困ったことがあると思いますが、そのような問題をgitは解決してくれます。

ファイルの編集履歴を残すことができる

gitはソースコードを「いつ・だれが・何を変更したのか」といった開発過程を記録できます。バグが生じた際などは、歴史を遡って以前の状態に戻すことが可能です。また、歴史を枝分かれさせて複数管理する(ブランチ管理)こともできますし、歴史を合流させる(マージ)こともできます。

分散型のバージョン管理システムである

gitを自分のPCに環境をダウンロードして、特定の修正ポイントやブランチを指定して作業を行うことができます。そのため、一つのプロジェクトに対して複数人での使用が可能となり、他の人が作業していても影響がありません。そのためチーム開発にも幅広く利用されています。

gitの競合サービス Subversion(サブバージョン)

gitの他に有名なバージョン管理システムを挙げると「Apache Subversion(アパッチサブバージョン)」があります。gitは分散型バージョン管理システム、Subversionは集中型という違いがあります。かつては多くの企業でSubversionが導入されていましたが、現在はgitが主流となっています。筆者も今はgitを利用しています。