エンジニアにとって、必須スキルとして知られるソースコードのバージョン管理システムであるGitや、Gitで使われる有名ツールであるGithubの使い方をステップバイステップ形式で紹介します。
このガイドは、バージョン管理と共同コーディングの基本を把握するために初心者向けとして書かれています。
中級者〜上級者向けではなく、これからGitを使い始める入門者向けですのでご注意ください。
プログラミングの世界に足を踏み入れたとき、バージョン管理を理解・実践することは非常に重要な第一歩となります。
GitとGitHubを使いこなすことで、作業効率が上がるだけでなく共同作業の機会も大きく広がります。
このチュートリアルは、GitとGitHubの基礎からリポジトリやブランチの操作までを理解する足がかりとなるような内容になっています。
Gitは非常に強力なツールであり、数え切れないほどのプロジェクトのバックボーンとして機能しています。
Gitを使えば、変更点を追跡したり異なるバージョンのコードを作成したりすることによってコード履歴を簡単に操作できます。
一方、GitHubはGitの力を利用してコラボレーションとコード共有のための空間を提供するプラットフォームです。GitHubでGitリポジトリをホストすることで、単にコードを保存するだけでなく、世界中の開発者からコラボレーション、フィードバック、改善の機会を得ることができます。
Gitのようなバージョ管理システムを使えば、手作業でファイルをコピーしたり、コードの改変を恐れたりすることがなくなります。
Gitはタイムマシンのようなもので、プロジェクトの異なるバージョンを行き来でき、実験のためのセーフティネットを提供します。
また、GitHubと組み合わせることでシームレスな同時開発が可能になります。
ここから、GitとGithubについて細かく紹介していきます。
Gitはファイルの変更内容を記録する分散型バージョン管理システムです。
Gitは作業を保存するたびにファイルのスナップショットを作成し、このスナップショットへの参照を保存します。ファイルに変更がなければ、Gitはそのファイルを保存することはなく、すでに保存されている以前の同じファイルへのリンクだけを保存します。
この効率的なアプローチにより、Gitはファイル群(特にソースコード)の変更を管理・追跡するための非常に有能で柔軟なツールとなっています。
GitHubはファイルの変更を追跡し、複数の人々の間で作業を調整するためにGitの機能を使用するオンラインプラットフォームです。
Gitリポジトリのハブ(中心や中核の意)であり、開発者がプロジェクトで共同作業したり、他の人に貢献したりできます。
Gitがコマンドラインツールであるのに対し、GitHubはWebベースのインターフェースを提供しています。
Gitの機能を拡張し、アクセス制御、タスク管理、他のサービスとの統合などの機能を追加されているため、多くの企業やプロジェクトで利用されています。
GitとGitHubを使い始める際にはいくつかの重要な用語に慣れておく必要があります。
Gitを使い始めるにはコンピュータにインストールする必要があります。
OSに関係なく公式WebサイトからGitをダウンロードできます。Gitのインストールに成功したら、ターミナル(Windowsではコマンドプロンプト)を開き、gitと入力してインストールが成功したことを確認します。
Gitの一般的なコマンドのリストが表示され、セットアップが成功したことを示すはずです。
Gitは様々なOSにインストールできます。
Windowsユーザーの場合はGitの公式WebサイトからGitをダウンロードし、インストールウィザードに従うことができます。
MacOSユーザーはHomebrew(brew install git
)を、Linuxユーザーはパッケージ管理システムを使ってGitをインストールできます。(例えばUbuntuユーザーはターミナルにsudo apt-get install git
と入力します)
Gitをインストールしたら、すべてのローカルリポジトリで使用するユーザー情報を設定することが重要です。
ターミナルを開き、以下のコマンドでユーザー名とメールアドレスを設定します。
Your Name
とemail@example.com
を実際の名前とメールアドレスに置き換えることを忘れないでください。これらの情報は、あなたが行うすべてのコミットに関連付けられます。
これにより個人情報が設定されます。設定した内容はgit config --list
でGitの設定を表示することで確認できます。
Gitをインストールしてセットアップした後の最初のステップはリポジトリを作成することです。
これは今から学ぶGitプロジェクトの中心となります。
リポジトリ(略してrepoとも呼ばれます)とは、コードファイルを保存・管理・追跡するためのディレクトリやストレージスペースのことです。新しいリポジトリを作成するにはターミナルを使ってプロジェクトのディレクトリに移動し、git init
コマンドで新しいGitリポジトリを初期化します。
これにより、新しいリポジトリに必要なすべてのメタデータを含む.git
という名前のサブディレクトリが作成されます。このメタデータには、オブジェクト、ref/heads
、ref/tags
、テンプレートファイル用のサブディレクトリが含まれています。
Gitの基本的なサイクルには、変更を加え、コミットすることが含まれます。
まず、作業ディレクトリにあるファイルへ変更を加えます。
変更の保存を準備する(「ステージする」とも言います)ために、git add
コマンドを使います。これは、次のコミットで最新の変更を取り込みたいことをGitに伝えるものです。そして、git commit
でステージされた変更を保存します。
プッシュとはコミットした変更をGitHubなどのリモートリポジトリに送信することを指します。これには、git push
コマンドを使用します。
以下のコマンドで可能ですが、ここではリモートリポジトリを設定していないためエラーが出ます。
コミットを利用していると、しばしば"HEAD"という言葉が出てきます。
Gitにおいて、HEAD
は現在チェックアウトされているブランチの最後のコミットへの参照となります。基本的にプロジェクトの最新のスナップショットへの参照を意味するものであり、最後のコミット以降にあなたが行った変更をGitに知らせる機能があります。
コミットを実行すると、"HEAD"はその新しいコミットに移動します。
ほとんどの場合、"HEAD"は現在のブランチの先端 (最新のコミット) を指しています。
しかし、前のコミットをチェックアウトすることで"HEAD"は最新のコミットではなく、チェックアウト先のコミットを指すように移動できます。
さらに、"HEAD"は「切り離された状態」になることもあります。
これはブランチの最新コミットでないコミットをチェックアウトしたときに起こります。HEADが切り離された状態では、HEADはチェックアウトしたブランチの最新コミットを指しているのではなく、コミットを直接指している状態です。
"HEAD"が切り離された状態でコミットを行うと、Gitは新しい識別子を持つ新しいコミットを作成し、それを指すブランチを残しません。この時点で別のブランチをチェックアウトすると、そのコミットは参照がなくなるため消えてしまいます。
Gitのライフサイクルは4つのステージで構成されています。
Untracked
, Modified
, Staged
, Committed
です。
未追跡(Untracked
)のファイルとはGitがまだ認識したことのない新しいファイルのことです。ファイルを編集すると、Gitはそれを修正されたもの(Modified
)として認識します。
そして、git add
コマンドを使用してこれらの変更をステージします(Staged
)。
最後に、変更のスナップショットをプロジェクト履歴へ保存するために、git commit
を使って変更をコミットします(Committed
)。
このライフサイクルを理解することはGitでバージョン管理を効果的に行うために不可欠です。
GitHubはGitのバージョン管理機能を強化し、開発者がGitリポジトリをホストして他の人と共同作業できるWebベースのプラットフォームを提供しています。
さらに、GitHubを使えばオープンソースプロジェクトに簡単に貢献できますし、どこにいてもチームと一緒に作業できます。また、バグ追跡、機能リクエスト、タスク管理、Wikiなどの機能があるチーム開発に欠かせないツールです。
GitHubでは、アカウントを作成、またはリポジトリを作成・参加することから始めます。
GitHubの一般的なワークフローは、ブランチに変更をコミットし、議論のためにプルリクエストを開き、全員が変更に同意したらプルリクエストをマージするという流れです。
GitHubのリポジトリはプロジェクトの作業をホストし、コラボレーションとバージョン管理を可能にします。
GitHubで新しいリポジトリを作成するには、どのページでも右上にある「+」アイコンをクリックし"New repository"を選択します。リポジトリの名前、簡単な説明、公開または非公開を選択し、必要であればREADMEファイルを作成して初期化します。
以下は例です。
そして"Create repository"をクリックすれば完了です。
先ほど、push
の際にリモートリポジトリが登録されていないためエラーが出ましたが、自身のリポジトリを作成したタイミングで登録しておきましょう。
以下のコマンドでリモートリポジトリを登録できます。
GitHubのコラボレーションは、clone
, folk
, pull request
の作成という3つの主要なアクションで成り立っています。
リポジトリのクローンを作成すると自分のマシンにローカルコピーが作成され、オリジナルに影響を与えることなくプロジェクトに取り組むことができるようになります。
一方、folk
はGitHubのアカウントにリポジトリのコピーを作成します。
これにより、元のプロジェクトに影響を与えることなく、自由に変更点を試すことができます。変更を加え、それを共有する準備ができたらプルリクエストを作成します。元のリポジトリの所有者にあなたの変更が通知され、所有者は変更を確認し、承認されればマージできます。
folk
はGithubの画面右上のほうにある以下のボタンから可能です。
folkの例
変更をプッシュした後、元のリポジトリに移動しNew pull request
をクリックすることでpull request(通称PR)を作成できます。
ブランチはGitの中核的な機能で、メインのプロジェクトに影響を与えることなくリポジトリの異なるバージョンを同時に作業できます。
git branch branch-name
でブランチを作成し、git checkout branch-name
でそのブランチに切り替えます。ブランチで変更を加えた後、それをメインブランチにマージできます。
マージはあるブランチの変更を別のブランチに統合することです。
その機能の作業が終わったら、機能ブランチの変更をメインブランチにマージするのが一般的なやり方です。
ここまで、GitとGithubの基礎を紹介しました。
この基本の流れはエンジニアを続ける限り、頻繁に利用するのでぜひしっかり身につけてください。
Gitを使い続けていると「こういうときどうしたらいいの?」という事態にしばしば遭遇します。
そういった際のテクニックを次回のコンテンツでまとめているので、慣れてきたら参照してみてください。