GitHubはGitを用いたリポジトリを提供するサービスである。リポジトリとはシステムの開発プロジェクトに関連するデータの一元的な貯蔵庫を意味する。Gitはリポジトリにあるファイルの更新履歴を管理するためのシステムで、バージョン管理システムの一つである。
この記事では、GitHubを本格的に利用する前にバージョン管理システムとリポジトリについて整理する。
バージョン管理システム
バージョン管理システムは、当初ソフトウェアのソースファイル変更履歴を管理するのを目的に開発された。例えば開発中のソフトウェアが修正によって他の部分に不具合が生じてしまうことが珍しくない。そのとき以前のバージョンに戻すことができると原因究明に役立つ。このようにソースファイルの変更履歴は、ソフトウェアの品質を保つには欠かせない。現在ではバージョン管理システムはソースファイルに限らず様々な用途のファイルを管理するのに使われている。バイナリファイルも対象にできる。Gitの他にはRCSやSVN(Subversion)が有名である。
Gitの限界
Gitの対象はファイルとディレクトリおよびシンボリックリンクである。それ以外のファイルの属性であるオーナーやグループ、アクセス権は管理しない。データベーススキーマなど、直接ファイルで管理しないものは対象外なので注意が必要である。データベースに関するバージョン管理には、必要に応じて別途にマイグレーションツールを用意する。他にも細かい制限だが空ディレクトリを対象にしない。空ディレクトリにはダミーファイル.gitkeepを設置し維持する。
また、簡単には更新を完全に取り消せない点にも注意してほしい。例えば、ある版に誤ってパスワードが混入してしまったら、それを削除した新しい版を作成しても、以前の版は自由に取り出すことができてしまう。新しい版には削除したという記録が残っているのだ。完全に取り消すには特別な操作が必要になる。予めGitを使う場合は、パスワードなど機密性が高いものは環境変数に持つようにするなどの運用上の対策が必要である。これらの対策は追って紹介していきたい。誤ってAWSの認証情報をGitHubでインターネット上に大公開してしまい仮想通貨のマイニングに利用され莫大な金額が請求された記事も見かける。今日、計算能力を現金化するのは容易である。
リポジトリ
Gitのリポジトリは、貯蔵庫であると同時に作業スペースでもある。この概念は柔軟だが理解しにくい部分もある。簡単に説明する。
リモート・リポジトリとローカル・リポジトリ
複数ユーザーで共有するリモート・リポジトリと、実際に各々が作業PC上のスペースにあるローカル・リポジトリに分けられる。GitHubが提供しているのは、リモート・リポジトリである。GitHub=リモート・リポジトリ
で作業PC=ローカル・リポジトリ
と考えてほしい。また、単にリポジトリ
と呼ぶ場合は、リモート・リポジトリを指す場合が多いが、ローカル・リポジトリを指す場合もあるので、文脈で判断する必要がある。
GitHubを使った開発では、GitHubのファイルを主とし作業PCのファイルを従と考えて運用することが多い。複数のリモート・リポジトリを連携させることもできるようだが、著者は使用したことがない。GitHubを使った基本的な作業の流れを以下に示す。
- GitHubのリモート・リポジトリを作業PCのローカル・リポジトリに複製する。(git clone)
- 作業PCで作業を行う。(テキストエディタ等)
- 対象とするファイルが追加された場合には追加する。(git add)
- 作業PCのローカル・リポジトリに反映させる。(git commit)
- GitHubに作業変更を反映させる(git push)
修正した内容は、直接GitHubに反映させることはできない。必ず作業PCのローカル・リポジトリに対して反映させることが必要である。リポジトリに反映させることをコミットと呼ぶ。ローカル・リポジトリもバージョン管理されているので、履歴を管理することができる。
パブリック・リポジトリとプライベート・リポジトリ
GitHubが提供しているリモート・リポジトリは、公開範囲から2種類に分けられる。無制限に公開されるパブリック・リポジトリと限られたメンバー間だけに共有されるプライベート・リポジトリである。無制限に公開されるパブリック・リポジトリは無料で利用できる。扱い易いが、何がどこまで公開されるのかは常に意識する必要がある。
おわりに
この記事では、GitHubやGitが対象にしている範囲とリポジトリの基本的な概念を紹介した。便利だが巨大なツールではあるので、対象範囲を把握する必要がある。次回は具体的な利用方法について解説していく。