GitHubとはどういうサービスか、例を交えて解説しています。
GitHubとは
GitHubとは、ソースコードの管理ができる開発プラットフォームです。オープンソースプロジェクトやビジネス用途まで使えます。現在、マイクロソフト傘下にあります。
関連)GitHub公式サイト
GitHubでは公開されているリポジトリのソースコードは自由にローカル環境に複製できます。商用利用してよいかどうかは、個別のソースコードのライセンスによります。たとえばMITライセンスは、目的によらず自由に扱うことができ配布も可能。改変後のソースコードの公開義務もなく、著作権表示のみ必要です。
また、自社で開発中のソースコードをプライベートリポジトリ(許可したメンバーのみアクセス可能)に保管し、Gitによる分散バージョン管理をおこないながら開発を進めることができます。GitHubを起点に、自動ビルド、自動テスト、自動デプロイなどのCI/CD(継続的インテグレーション、継続的デプロイメント)が可能です。
関連)継続的インテグレーションについて – GitHub Docs
例えば、検索エンジンの大手・GoogleもGitHubを活用してオープンソースソフトウェアのコード管理をおこなっています。2021年6月時点で、2.0k(2,000)以上のリポジトリ(ソースコードの管理場所)が存在しています。
Googleのリポジトリで一番人気は、material-design-iconsというリポジトリでした。管理対象はフォントとアイコン画像。ソースコードとしてsvg形式のベクターデータを管理しています。README.mdには更新履歴が記録されています。
Material design icons Material design icons is the official icon set from Google. They can be browsed at https://fonts.google.com/icons. The icons are designed under the material design guidelines. 4.0.0 Update Restructured repository, updated assets. 3.0.1 Update Changed license in package.json. Added missing device symbol sprites. : :
このデータは、GitHubの一括でパソコンや開発機にダウンロードが可能です。リポジトリのCodeボタンをクリックするとクローン、GitHub Desktop(Windowsパソコン用のGitHubユーティリティ)、ZIP形式でダウンロードが選べます。
GitHubで公開されているリポジトリの例
開発機にgitというツールをインストールしておくと、コマンド一発でリポジトリ上の最新ソースコードをダウンロードできます。gitはWindows、Mac、Linuxに用意されていて、無料で利用できます。以下は、git cloneコマンドで開発機に直接、githubのソースコードを取り込んでいる例です。
$ git clone https://github.com/google/material-design-icons.git Cloning into 'material-design-icons'... remote: Enumerating objects: 873844, done. remote: Counting objects: 100% (2/2), done. remote: Compressing objects: 100% (2/2), done. remote: Total 873844 (delta 0), reused 0 (delta 0), pack-reused 873842 Receiving objects: 100% (873844/873844), 188.45 MiB | 3.03 MiB/s, done. Resolving deltas: 100% (108092/108092), done. Checking out files: 100% (506152/506152), done.
ソースを取り込んだあとのファイル構造です。fontにはフォント、android、iosにはアイコン画像が入っていました。
$ cd material-design-icons/ $ ls LICENSE README.md android font ios png src update $ cd font $ ls MaterialIcons-Regular.codepoints MaterialIcons-Regular.ttf MaterialIconsOutlined-Regular.codepoints MaterialIconsOutlined-Regular.otf MaterialIconsRound-Regular.codepoints MaterialIconsRound-Regular.otf MaterialIconsSharp-Regular.codepoints MaterialIconsSharp-Regular.otf MaterialIconsTwoTone-Regular.codepoints MaterialIconsTwoTone-Regular.otf README.md
Githubの機能
ソースコードのリポジトリ管理
ソースコードはリポジトリと呼ばれる形式で管理されます。リポジトリにはローカルリポジトリとリモートリポジトリがあり、ソースコードの修正や単体テストは開発用マシン上にローカルリポジトリを作ってバージョン管理します。ローカルリポジトリは開発メンバーの数だけ存在することになります。メンバーが修正したソースコードを一括管理するのがリモートリポジトリ。各メンバーのローカルリポジトリからリモートリポジトリにソースコードを反映させます。
Git FlowやGitHub Flowといったブランチの使い方が可能で、同時進行する新機能の追加やバグフィックスなどの異なる変更を効率的にリリースしていくことが可能です。
【関連記事】
▶GitHub flowは、GitHub創設時にも使われたワークフローで、シンプルなブランチモデル
リモートリポジトリに矛盾なく複数のメンバーのソースコードを反映するために、プルリクエストという機能があります。コードの変更をレビュワーに通知して、リモートリポジトリへのソースコードのマージを依頼するんですね。プルリクエストを受けたレビュワーは、コードをレビューしてバグや記述ミスなどを指摘したり、問題なければリモートリポジトリへのマージを行ったりすることができます。プルリクエストにより、半ば強制的にメンバーの記述したコードを第三者のレビュワーが目視チェックすることになりコードの品質向上が期待できます。
バージョンやタスクの管理機能
GitHubにはIssueという機能があり、ToDoや仕様のバグ報告、リリース作業や結合テスト、個人的に気になっていることなどを記述できます。Issueにはタグ付けが可能で、必要、不要、優先度などを整理して必要な作業を洗い出すことができるんですね。また、Issueにはチェックリストを作ることができ、Issueごとのチェックリスト状況を一覧画面でインジケーター表示するため進捗が把握しやすくなります。
【関連記事】
▶GitHubのissueでリポジトリの課題管理 Assignee、Label、Project機能あり
GitHubにはプロジェクト管理機能があり、テンプレートによりTo Do、進行中、作業完了といったカラムが作成されます。これらはIssueをProjectに追加すると自動的にToDoに追加され、クローズすると作業完了に移動します。プロジェクト管理画面で、すべてのToDoの進捗状況を確認することができるんですね。
メンバーへの仕事配分などリソース管理に関する機能はありませんが、小規模な開発ならGitHubのプロジェクト管理だけで十分なケースもあります。
GitHubにはブランチという機能があります。システムのバージョンは単純にバージョン番号があがるだけではなく、バージョン1とバージョン2というリリースバージョンが同時に存在し、それぞれのバージョンのバグフィックスや機能追加が同時進行するケースがあるんですね。このような場合、併行して管理するバージョンをブランチ機能で枝分かれ(ブランチ)させて管理することが可能です。
本番バージョンと開発バージョンのブランチを作り、開発バージョンのテストが十分に済んだら本番反映のためにブランチをマージするという方法も良く使われます。
コードのビルド&デプロイ
マイクロソフトのAzure、Alibaba CloudACK、AmazonECS、GKE(Google)、IBM Cloud KubernetesService、OpenShiftなどのクラウドと連携して、ビルドしたコードをデプロイする機能があります。
連携には、GitHub Actionsという独自コードで記述できるジョブ管理の仕組みを利用します。
【関連記事】
▶GitHubのActionsは、ビルドやデプロイ、単体テストを自動化 独自開発可能
デプロイ先として、dockerなどのコンテナイメージレジストリを指定することができ、ビルド&デプロイ時に自動的にdockerコンテナの公開も可能です。
【関連記事】
▶GitHubからdockerコンテナイメージをビルド時に公開 複数イメージの同時公開も可能
まとめ
- GitHubとは、ソースコードの管理ができる開発プラットフォーム
- gitツールで、公開されているリポジトリ内のコードをコマンド一発で取得できる
- GitHubでは、ソースのリポジトリ管理(バージョン、タスク管理、ビルドやデプロイ)が可能