支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡

  • TOP
  •   
  • コラム
  •   
  • GitHubを使いこなすために必要な

はじめに

システム開発を行う中で、ソースコードや設定ファイル等のデータの変更履歴を管理できる「バージョン管理システム」はとても有用です。バージョン管理システムを利用することで、いつ、誰が、どのようにデータの更新を行ったかが確認しやすくなり、大規模システムで複数人での開発を進める場合にも、過去の更新状況が履歴として残ることで混乱が生じ辛く、作業内容を過去の時点に切り戻したい場合も、どの時点に切り戻すべきかが把握しやすくなり、結果として効率的に作業を進められるようになるためです。

そんなバージョン管理システムの一つである「GitHub(ギットハブ)」は、有料プランだけではなく無料での利用も可能で、バージョン管理をするだけではなくWikiをはじめとしたSNSのような役目が果たせる機能も備わっているため、IT関連のエンジニアやプログラマー、デザイナーの他、様々な事務職の業務において採用している企業も出てきています。

今回は、pushを含めたGitHubでバージョン管理を行う際の基本的な流れを紹介していきます。GitHub等のバージョン管理システムに少しでも触れたことがある場合は、リポジトリやコミット(commit)、プッシュ(push)、プル(pull)といった専門用語を多少なりとも聞いていることでしょう。しかし、全く初めて利用する場合は、それら概念の理解や操作方法を習得するためにある程度の学習が必要となります。現在の開発現場でデータの管理がうまくいっていない方、今後GitHubの導入を検討している方、GitHubを初めて使おうとしている方は、ぜひ今回の記事を参考にしていただけると幸いです。

GitHubについて

GitHubはGitというバージョン管理システムをベースとして、Web上でGitの機能を利用できるようにしたプラットフォームです。2008年にアメリカのGitHub社(2018年にMicrosoft社が買収)によって、主にRuby on Rails等を使って開発され、2022年時点も引き続き運用・保守をしています。名称の「Hub」は日本語で「拠点、集まり」であり、Gitの集合を表していますが、その名の通りGitHub上に公開したソースコードはプロジェクトや企業内だけではなく世界中のエンジニア・プログラマーと共有することができるので、ナレッジの集合体と捉えることもできます。なお、全体公開ではなく企業内でのみ共有したい場合にはプライベート公開の設定も可能です。

分散型バージョン管理システムのGit

バージョン管理システムには分散型と集中型の2種類があります。かつてはCSVやSNV(Subversion)といった集中型が利用されていましたが、近年は今回取り上げたGitやMercurialといった分散型が主流となっています。この2つはリポジトリが一つか複数かという点で大きく異なっており、集中型はメインとなるリポジトリを1つサーバーに置き、各作業者はネットワークを介してそのサーバーに接続しながら作業を行います。対する分散型は、それぞれ作業者のパソコンにもリポジトリを置くため、ネットワークの接続状況にかかわらず作業ができて任意のタイミングでメインのリポジトリと同期を取ることが可能です。

GitHubを利用するためには、まずGit自体をインストールする必要があります。MacOSの場合はGitが初めからインストールされているため、Windows等のGitが入っていないOSを利用している場合はGitの公式サイト「gitforwindows.org」からインストーラーをダウンロードして実施します。GitHubに関しては、公式サイト「github.co.jp」から無料のアカウント登録を行うことで利用が可能です。アカウント登録をしたらGitHubの操作画面が表示され、実際に利用できる状態となります。なお、今回はコマンド操作での紹介となるため詳細は省きますが、GUI(グラフィカルユーザインターフェース)での操作を希望する場合はこの時点で専用のソフトもインストールしましょう。

GitHubの基本的な利用方法

それではpushを含めたGitHubの具体的な操作の流れについて紹介していきます。GitHubでは「リモートリポジトリ」と呼ばれるメインのリポジトリから作業者が個別の環境で作業するための「ローカルリポジトリ」を別に作成し、ブランチを切ってリモートリポジトリのクローンを作成します。その後は編集作業を行ってコミットやプッシュ、プルリクエストをし、最終的にリモートリポジトリに編集内容を反映させるという流れで作業します。以上数行の説明だけでは実際に何が行われるか全くイメージが付かないと思われるので、具体的にどういったことが行われる操作なのかを、改めて各操作ごとに分けて紹介していきます。また、コマンドについても合わせて紹介します。現時点では全くイメージが湧かない方も、各工程を理解した後に再度操作の流れを読み直すと問題なく理解できるようになることでしょう。

リポジトリ

ソースコード等の変更履歴を管理する領域です。GitHubのような分散型の場合は、前述したリモートリポジトリとローカルリポジトリがあり、リモートリポジトリは作業者全員で共有する領域、ローカルリポジトリは個別の領域となります。また、実際に編集作業を行う場所は「ワークツリー」と呼ばれます。

リポジトリを作成する際のコマンドは「git init」ですが、リポジトリにファイルを追加する場合は「git add」コマンドを実行する必要があります。その後に「git commit -m "message"」というコミットのコマンドを実行する必要もあります。「git add .」と「.(ピリオド)」を付けることで全ファイルの追加が可能です。コミット時の「””」はメッセージ入力部分なので、特に何を入力しても問題ありません。

ブランチ(branch)

メインの開発履歴とは別に開発を進める場所を作り、メインに影響を与えないようにする仕組みです。新たにブランチを作成することを「ブランチを切る」と表現し、ブランチを切った後に、そのブランチへ切り替えを行って作業を進めることとなります。

ブランチを切る際のコマンドは「git branch [ブランチ名]」で、git checkout [切り替え先のブランチ名]」を実行することでメインのブランチから新たに作成したブランチへ遷移できます。

クローン(clone)

リモートリポジトリの内容をそっくりそのままコピー(複製)してローカルに持っていきたい場合に行う操作です。クローンを実施した時点のデータをコピーして、リモートリポジトリに影響を与えることなくローカルで編集等の作業が行えるようになります。クローンを使うことで、プロジェクト内や企業内のソースコードをコピーするだけではなく、世界中の開発者が公開リポジトリに置いているソースコードをコピーして利用することも可能です。

単純に「git clone [複製したいリポジトリ]」というコマンドでコピーできますが、「git clone [複製したいリポジトリ] [ディレクトリ名]」とすることでディレクトリの指定も可能です。

フォーク(fork)

リポートリポジトリではなく、他人が作業しているリポジトリを自分のリポジトリにコピーすることを指します。フォークに関しては特にコマンドがなく、GitHubのメイン画面内にある「fork」ボタンから操作を行います。ボタンをクリックするとフォークが開始され、完了すると新たなディレクトリ構成ができ、READMEファイルが表示される状態となります。なお、フォークしたリポジトリをローカル環境に持っていく場合はさらに「git clone」を実行します。

コミット(commit)

ローカルリポジトリをリモートリポジトリに反映させる前の段階で、変更履歴を自分のリポジトリに反映させる操作です。なお、コミットの際はインデックスと呼ばれる別のファイルを介して行われますが、インデックスがあることでリポジトリには不要となるファイルを反映させずに済み、一部のみ編集した場合もその部分のみがインデックスを介してコミットされるようになります。すでに前述していますが、コミット時のコマンドは「git commit」で「-m」等の様々なオプションを付けて実行します。

プッシュ(push)

コミット後にリモートリポジトリへ反映させる操作がpushです。ただしすぐにpushすることはできず、事前に「git remote add origin [追加したいリモートリポジトリのURL]」というコマンドで、どこのリポジトリに反映させるかという指定をする必要があります。なお、「origin」というのは初期状態で設定されているリモートリポジトリ名であり、「get remote」というコマンドを実行することで確認可能です。上記コマンドを実行後に「git push -u origin master」が実行可能となります。

ただし、pushを行うことでメインとなるリモートリポジトリの内容が変更されてしまうため、不用意なpush操作は防がなければなりません。そのためpushを行う際にはGitHubのアカウント・パスワードの入力、あるいは公開鍵・秘密鍵を生成して鍵認証を行うことが求められます。鍵認証を一度設定してしまえば今後アカウント・パスワードの入力が不要となるので、公開鍵・秘密鍵を作成して登録する方法をおすすめします。公開鍵・秘密鍵の作成方法については今回省略しますが、流れとしては、MacのターミナルやWindowsにGit Bashをインストールしてコマンド操作で公開鍵・秘密鍵の両方を作成し、公開鍵をGitHubの画面上から登録することとなります。公開鍵の登録まで完了したら、改めてpushを試してみましょう。GitHubの画面を更新して、pushしたファイルが表示されれば成功です。

プルリクエスト(Pull request)

自分が行った編集内容をメインのリポジトリに反映させる際に、他の開発者に通知するGitHubオリジナルの機能です。通知することで他の開発者や責任者等にレビューしてもらった上でpushすることとなり、結果としてバグが発生しづらくなります。多忙を理由にレビューを省いてしまうような現場では、レビューを根付かせるために有効な手段となる可能性があります。

プル(pull)

プルリクエストに「プル(pull)」が含まれているのでややこしいですが、「pull」は全く別の操作であり、リモートレポジトリの最新のコミット状態を取得した上で、ローカルリポジトリに反映してくれる操作となります。挙動はcloneと似ていますが、pullの場合は最新のコミット内容をチェックした上でその最新状態がローカルへコピーされます。なお、pullする際のコマンドは「git pull origin main」となります。

pullは「git merge」と「git fetch」というコマンドを合わせたコマンドとも言われています。「git fetch」が最新の状態への更新を行う操作であり、「git merge」は別のリポジトリへ変更内容を反映させる操作であるためです。しかし「git merge」はローカルリポジトリをリモートリポジトリへ反映させる際に利用されるコマンドとして説明されていることが多く、さらにコミットされていないデータを「git merge」しようとするとエラーになることには注意が必要です。

まとめ

今回はGitHubの基本的なバージョン管理の流れとなるリポジトリの作成やcommit、push、pullの方法について紹介していきましたが、これらの操作は専用のソフトを利用することでコマンド操作ではなく画面上からグラフィカルにマウス操作する(GUI)ことも可能となります。有名なソフトとしてはGit GUI、Sourcetree、GitKrakenがあり、これらをインストールすることで学習コストを削減してGitHubで初めて管理を行う際のハードルを下げることができます。GitHub等のバージョン管理システムはシステム開発やデザイン、事務作業と様々な場面で活用できる一方で、スムーズに利用するまでに学習が必要となる面も持ち合わせているので、各現場の状況に合わせて本末転倒な状況とならないように調整し、少しずつ導入を進めてみてはいかがでしょうか。