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

  • TOP
  •   
  • コラム
  •   
  • 【入門編】GitHubを使いこなすた

はじめに

システム開発は規模が大きければ大きいほど大勢のエンジニアが参加して進められるため、効率良く、かつ、大きなトラブルなくプロジェクトを進行するためにPM(プロジェクトマネージャー)やPL(プロジェクトリーダー)といった管理系のポジションの重要性が大きくなります。人の管理と同じくプログラムのソースコードやデータベースの設定内容、設定ファイルといった情報も管理していかなければいけない要素の一つです。しかし、これらを人間の手だけで管理していくには限界があり、厳格で融通の効かない管理下で開発が進められたことで却ってプロジェクトの進行を妨げる原因となる可能性も出てきます。そんな中多くの開発プロジェクトで使用されるようになったのが「バージョン管理システム」です。今回はバージョン管理システムの中の一つである「Git」、そしてGitをベースとした「GitHub」の入門編に当たる基本的な内容を紹介していきます。管理が複雑化して開発がスムーズに進まない、同時進行の作業においてトラブルが発生しがちという状況等で困っている方、GitHubを導入しようとしているので全容を知りたいという方、バージョン管理システムを導入するメリットを知りたいという方はぜひ今回の入門編をご覧ください。

バージョン管理システムで解決できること

システム開発の現場では目的が共有できていない、開発フローが標準化されていない、スケジュールに余裕がなさ過ぎて一切要件変更ができない等の様々な問題が発生します。それらと同様にバージョン管理システムを導入していない現場では、ソースコード等の管理が適切に行えなくなってエンジニア同士の認識相違が発生したり、必要なソースコードの紛失が発生したりという問題が出る可能性があります。バージョン管理システムを利用することで、誰がいつ、どのようにどのファイルを変更したかという履歴を記録して追跡できるようになります。そのため、作業の切り戻しをする必要が出てきた場合も、どの時点の内容に戻すべきかが把握しやすくなります。また、複数人での同時作業がしやすくなる、オフライン環境でも作業が進められるという特徴も持ち合わせています。

初めのうちはプロジェクトにおけるバージョン管理システムの有用性が理解しづらい部分もあるため、改めて個人作業のレベルで考え直してみましょう。例えば、プレゼン資料をパワーポイントで作っていたとします。ほぼ完成しつつある資料でしたが、あるページで使う画像について候補が2つ出てきてしまったので、2パターンの資料を保存しておいて後で別の人に選んでもらうことにしました。この時、一つ目を「20220810_01.pptx」で、二つ目を「20220810_02.pptx」という名称で保存します。しかし、その直後に上司から新規案件を追加したバージョンと追加しないバージョンを見比べたいのでその両方作成して欲しいと言われました。そのため画像候補1を利用し、かつ新規案件を追加したバージョン、追加しないバージョン、画像候補2を利用し、かつ新規案件を追加したバージョン、追加しないバージョンの4ファイルを作成してそれぞれ「20220810_01.pptx」「20220810_02.pptx」「20220810_03.pptx」「20220810_04.pptx」で保存しました。

たった4バージョンのファイルではありますが、すでにどのファイルがどういった変更を加えたて保存したものであるかが、中身を一つ一つ確認しないとわからない状態となりました。すぐに利用する資料であればまだしも、しばらく時間を置いてからこれらのファイルを見たら、何のために4つ作成したのかもわからなくなってしまう可能性さえあります。バージョン管理システムを利用すると、こういった状況を解決できます。

次に、複数人で共有ネットワーク内にある同じファイルを管理・編集する場合を考えてみましょう。例えば、チームごとに実力テストを行い、各チームのリーダーはその結果を共有ネットワーク内にある「results.xlsx」に記録しなければいけないとします。この時リーダーAは共有ネットワーク内のファイルに直接書き込んで最終的に保存しました。しかしリーダーBは、リーダーAの作業前に一旦ローカル環境に「results.xlsx」をダウンロードし、ローカルで編集を行った上でリーダーAが作業して上書き保存し終えた直後に、ローカルの「results.xlsx」を共有ネットワーク内にアップして上書き保存してしまったとします。この順で操作が行われると、当然ながらリーダーAの編集内容は削除されてしまいます。この問題もバージョン管理システムで解決できることの一つとなります。

バージョン管理システムの種類

バージョン管理システムは、一般的に「集中管理方式」「分散管理方式」の2種類に分けられます。当初は「集中管理方式」が利用されていたものの、2022年現在は「分散管理方式」が主流となっていて、今回紹介する「GitHub」も分散管理方式の一つとなります。CSVやSVN(Subversion)が集中管理方式に分類されるもので、単一のリポジトリでファイル変更の履歴を集中管理することからそう呼ばれています。集中管理の場合、変更内容を反映させたり、変更履歴の確認をしたりするために常時リポジトリがあるサーバーと接続しておく必要があります。対する分散管理方式は、複数のリポジトリに分散してそれぞれのリポジトリで変更を行い、任意のタイミングで本来のリポジトリと同期を取ることが可能です。そのため複数人で開発を行うプロジェクトに適したバージョン管理システムとなります。分散管理方式のバージョン管理システムとしてはGitHubの他に、Mercurial、Bazaar等が有名です。

[入門編]覚えておきたい「リポジトリ」の概念

バージョン管理システムの種類の解説の中で何度も「リポジトリ」という言葉が出てきましたが、以降も頻出するため、知らない方に向けてリポジトリの意味について紹介しておきます。Windowsのパソコンを利用しているとCドライブ、Dドライブといった領域が存在していることを知っている方もいると思いますが、リポジトリはこのWindowsのドライブに似ていて、ファイルやディレクトリを保存する領域のようなものです。ただしリポジトリはファイルやディレクトリを格納しておくことが目的ではなく、リポジトリ内に保存されたファイルやディレクトリの変更履歴を保存して、バージョン管理する場所となります。また、GitHubのような分散管理方式では、メインとなるサーバー上のリポジトリを「リモートリポジトリ」、個々のパソコンで作業するローカルなリポジトリのことを「ローカルリポジトリ」と呼びます。このリポジトリという概念は、GitHubに限らず、他のバージョン管理システムでも共通して出てくる言葉なのでしっかり覚えておきましょう。

[入門編]Git(ギット)・GitHub(ギットハブ)について

GitとGitHubはどちらの名称で呼んだとしても大差はありませんが、厳密に言うと「Git」はLinuxのソースコードを管理するために開発されたバージョン管理システムの種類の一つを指し、「GitHub」は、GitをベースとしてWeb上で利用できるようにしたサービスのことを指します。なお、入門編では詳しくは取り上げませんが、GitHubはバージョン管理だけではなくWikiとしての利用や、掲示板、提案といったコミュニケーションにも活用できるよう機能が備わって多くの企業で導入されているため、エンジニアやプログラマーでなくても利用する可能性があると言えます。また2021年には、OpenAI Codexの技術をベースとしたAIによるコーディング支援機能「GitHub Copilot」がリリースされる等、GitHubは開発をスピーディーに進めるために欠かせないツールとしてさらに進化し続けています。

GitHubを利用するメリットとデメリット

GitHubを利用するメリットはここまでに挙げたバージョン管理システムのメリットとほぼ一致しますが、今一度端的にまとめ直した上でデメリットもあわせて紹介します。一つ目のメリットは効率的に開発を進められるという点です。GitHubは分散型のバージョン管理システムであるため、複数人での同時作業がしやすく開発の効率アップに繋がります。また、効率化によってリリースまでの期間が短くなるため、リリースが頻繁に可能となることもメリットに含まれます。二つ目はオフラインでの作業が可能という点です。インターネット接続が不可な環境、不安定な環境でも問題なく作業が進められ、メインのリポジトリに反映させる時だけオンラインにすることとなります。対するデメリットは、GitHubを利用するための学習が必要になるという点です。今回はGitHubの基本のみ紹介しますが、それでも多めの文章量を要します。GitHub専門の書籍も出ているくらいなので、機能をフル活用しようとするとそれだけの時間が必要となり、簡易的な使い方であっても最初のうちは、各々の作業時間が増えるということも導入時には念頭においた方が良いでしょう。

GitHubを利用するために

入門編として、実際にGitHubを利用するための環境を整えるまでの手順と、リポジトリの作成、コミット等の基本的な利用方法までを紹介していきます。

下準備

GitHubを利用するために必要な作業は、Gitのインストール、GitHubのアカウント登録、SourceTreeのインストールの全部で3工程となります。なお、基本的にGitはコマンド操作が必要となりますが、そうなるとコマンドの学習にも時間を使うことになります。そのため今回は、GitHubをより手軽に利用するために、GitHubをコマンドではなくグラフィカルに操作可能となるソフト「SourceTree」をインストールする方法についても解説します。

Gitは公式ページ「gitforwindows.org」からインストーラーがダウンロード可能なため、ダウンロード後、インストールを進めていきます。いくつか選択項目が表示されますが、全て初期状態のまま進めて問題ありません。最終的に「Install」ボタンをクリックするとインストールが開始されるので完了までそのまま待ちましょう。なお、MacOSの場合はGitが初期状態でインストールされているのでこの作業は不要となります。

次に、GitHubのアカウント登録ですが、GitHubの公式ページ「github.com」にアクセスして任意のメールアドレス、パスワード、ユーザー名を入力し、最後に簡単な設問に回答して「Create account」をクリックしたら完了となるので簡単です。なお、メールでの認証が必要となる場合があるので、登録したメールアドレスにて認証するためのメールを確認し、認証を行いましょう。「Welcome to GitHub」の画面でさらなる設問に回答したら、「Free(無料プラン)」か「GitHub Pro(有料プラン)」かを選択します。今回は無料プランを選択し、プラン選択後にGitHubの作業画面が表示されることを確認したらGitHubのアカウント登録作業は完了となります。

SourceTreeも公式ページ「sourcetreeapp.com」からインストーラーをダウンロードし、WindowsやMacOSのパソコン内でインストールを実施します。SourceTreeの場合も選択項目等が表示されますが、後からも変更可能なので初期状態のまま進んで問題ありません。なお、途中であらかじめ作成したGitHubのアカウント・パスワードを入力する必要があります。

[入門編]バージョン管理の流れ

GitHubでバージョン管理を行う基本的な流れは、リポジトリを作成する→修正作業をする→コミット→プッシュとなります。

リポジトリは実際にバージョン管理する場所となりますが、大きくローカルリポジトリとリモートレポジトリの2種類に分けられます。ローカルリポジトリは各作業者のパソコン内に作成するリポジトリで、リモートレポジトリは共同で作業した内容を最終的に反映させるサーバー内のリポジトリとなります。

パソコン内での修正作業は「ワークツリー」という場所で行います。ワークツリーでの作業が完了したら、通常のファイルを保存するのと同じく、修正内容を保存しなければなりません。その際に実施するのが「コミット」ですが、コミットを行うことで変更者、変更日時、変更内容がリポジトリに記録されます。また、ワークツリーからリポジトリにコミットする際には「インデックス」と呼ばれる、修正したファイルに関する一部の情報を持ったデータを介して行われます。

続いてリモートリポジトリに修正内容を反映させたい場合は、コミットした内容をローカルレポジトリからリモートリポジトリに向けて「プッシュ」します。リモートリポジトリはプロジェクトメンバー全員が共通で利用しているリポジトリとなるので、プッシュは慎重に行いましょう。逆に自分以外の作業者が先にプッシュしてリモートリポジトリの内容を変更し、変更後の内容を自分が取り入れたいとなった場合は、ローカルリポジトリに対して「プル」という操作を行います。

ブランチとマージについて

「[入門編]バージョン管理の流れ」では、リモートレポジトリの一部を複数の作業者が作業する場合について解説しましたが、リモートレポジトリ全体を各作業者が別々に保持して作業したい場合は、「ブランチを切る」という操作をします。マスターとなるリポジトリ(マスターブランチ)を作業者ごとに、次々と枝分かれさせて並行作業できることから「ブランチ」と呼ばれています。作業するブランチを切り替える場合は「チェックアウト」という操作が行われ、最終的にメインのブランチに合流したい場合は「merge(マージ)」または「rebase(リベース)」という操作が行われます。概念としてややイメージしづらい応用編の内容とはなりますが、ブランチとマージもGitHubで良く利用される機能なので、あわせて覚えておくことをおすすめします。

まとめ

GitHubは使い慣れるまでの学習コストや時間が多く必要となる可能性がありますが、一度慣れると手放せないサービスとなり、結果的に作業の効率化が図れる可能性があります。それはエンジニアやプログラマーだけではなく事務職等においても同じです。すでにGitHubはソースコードの管理以外にIssues、Pull Request、watch、コメントといった機能によってSNSとしても利用可能ですが、今後機能が拡張することによって、さらに別の用途でも活用できる可能性もあります。さらに以前はGitHubの有料プランでしか作成できなかったプライベートなリポジトリが、2022年時点では無料プランでも利用できるようになる等、より気軽に利用できるサービスへと進化しています。まずは今回の入門編となる記事をきっかけに個人での利用を試してみて、現場でバージョン管理システムの導入を検討している場合は、GitHubも候補に入れてみてはいかがでしょうか。また、入門編では情報量が膨大となるため省略しましたが、SourceTreeの具体的な操作方法についてはインターネット上に動画を含めたくさんの情報があるため、それらを参考にして実践し、着実に知識を身に付けていただけると幸いです。