Gitについて

2020年現在、ソースコード管理システムとしてはおそらく最も使われているのはGitです。GitはLinuxの開発者でもあるLinus Benedict Torvalds氏により開発され2005年に登場しました。当時はCVSやSVNやが主流でしたが、開発者個々人が細かな変更履歴も含めて管理(記録・追跡)が行えるバージョン管理システムとしてGitが使われるようになってきました。
その後、Gitのプラットフォーム、特にGitHub.comの登場とオープンソースソフトウェアの開発コミュニティのGitHubへの移行に伴いGitの普及速度がますます伸び、現在ではデファクトのバージョン管理システムであると言っても過言ではない普及率になっているかと思います。
Gitプラットフォームのメリット
2010年頃の日本では公式(標準)のGit を自社のサーバー上で稼働させているケースも多くありました。一方で、Gitサーバーの運用コストも低くはなく、より利便性の高い、クラウドで動作するGitプラットフォームサービス、GitHubやBitBucket、GitLabなどがその後大きく普及し、2020年現在では、Gitサーバー単体の利用や運用ではなく上述のものを利用しているチームが殆どを占めているように思います。
Gitサーバー単体ではソースコードを管理することが出来るのみで、UIなどはなく、コードレビューの機能なども備えていません。コマンドラインからGitサーバーのURLに対してブランチ(メインブランチから派生したトピックブランチ、もしくはメインブランチのソースコード)をPushして保管することが出来るのみです。
Gitサーバーの運用を簡単にするのに加えて、UIなどの様々な機能を追加したものがGitプラットフォームです。
プラットフォームを利用するメリットとして特に次の3つがどのプラットフォームでも共通して言えるものであり、大きいメリットでしょう。
- ソースコードのコラボレーション開発・コードレビュー機能(Pull Request、Merge Request)
- WebUIで様々ながことが行える高いユーザビリティ
- チケット管理機能などの開発に関わる重要な付随機能やそういった機能・サードパティサービスとの連携機能
ソースコードのコラボレーション開発・コードレビュー機能(Pull Request、Merge Request)
Gitではメインブランチとは別にトピックブランチなどで開発をし、メインブランチにPull Request(or Merge Request)を作成、トピックブランチでの開発内容をメインブランチに取り込むことによって、ノンリニア開発(数千の並列ブランチでの開発)を実現します。
それに伴い非常に重要な役割を果たすのがにPull Request(or Merge Request)といった機能で、メインブランチとサブブランチの差分を表示し、また、それについて開発者同士でコメント等によりコミュニケーションを行いマージするかどうかの可否判断をすることができます。
業務でのソフトウェア開発やオープンソースソフトウェアの開発など、あらゆる種類のソフトウェアの開発でこの機能は利用されています。
WebUIで様々ながことが行える高いユーザビリティ
Gitサーバー単体ではすべての操作がコマンドライン経由であり多くの方にとって難しい、利便性が低い、とっつきづらいものでしょう。その点、先述のGitプラットフォームはいずれもソースコードを簡単にに閲覧する事ができる、ファイルや行ごとにいつ誰がどのような理由(コミットメッセージ)でコミットしたか、などを容易に閲覧や検索が出来るなどの強力な機能、ユーザビリティが備わっています。
チケット管理機能などの開発に関わる重要な付随機能やそういった機能・サードパティサービスとの連携機能
GitHub Issues、GitLab Issues、BitBucketであればJIRAなどでタスク管理が行なえ、Pull RequestやMerge Requestと連携が出来るようになっています。
また、GitHub ActionsやGitLab CI、CircleCIやTravisCIなどのCIサービスと連携してユニットテスト等の実行やコードのデプロイなど、継続的インテグレショーションなども容易に行うことができます。
その他にも非常に多くのサービスと連携して便利に使うことができます。通知をSlackに送ることももちろんできますし、Mergeされていない、レビュー待ちであるPull RequestのリマインドをSlackに送るといった機能もあったりします。もちろんSlackに限りません。
テスト以外にも、コードの静的解析(コードレビュー支援サービスのSiderや、コード品質の可視化のCode Climateなど)、ソフトウェアの例外検知サービスのBugsnagやSentryなども連携して、どのバージョンのコミットやリリースタグのコードからバグが発生したのかなどを容易に追うことが可能です。
Gitプラットフォーム大手3種(GitHub、BitBucket、GitLab)
Gitプラットフォームでは次の3つ、GitHub、BitBucket、GitLabが非常によく使われています。それぞれについて概要だけ紹介させていただきます。
GitHub
おそらく利用ユーザ数としてはすべてのプラットフォームの中でずば抜けたユーザ数を誇っているのがGitHubです。特に日本ではクラウドでソースコードを管理するとしたらGitHub一択と言っていいほどのシェアを誇っているでしょう。
そのため、ほとんどのGitについて紹介している書籍や雑誌、またプログラミングスクールや大学などでもGitHubについて言及されている事が多いように思います。
非常に多くのベンダーがGitHubに対応しており、GitHub Marketplaceページで様々なサービスと接続したり、購入したりすることができます。
https://github.com/marketplace
例: SiderのGitHub Marketplaceの紹介ページ https://github.com/marketplace/sider
また、学生向けの支援にも力を入れており、学生や学術機関がGitHubを無料で使えるのはもちろんのこと、GitHub Student Developer PackやGitHub Teacher Toolboxなど、GitHubの連携サービスも無料で利用できるプログラム・特典・連携なども用意されています。
https://education.github.com/pack
最も知名度があり、多くのサービスと連携することが出来るのが1番の強みでしょう。また、Microsoftに買収された経緯もあり、GitHub Actionsなどの強力なCI機能が付いている(Azure DevOpsの流れ)、製品の機能追加のペースが早いと言った点もおすすめできます。
GitHubの歴史やどういった言語がOSSでは人気なのかなどのレポートもGitHubは公開しているので興味がある方は見てみてください。
本記事ではクラウド版について主に言及しましたが、ほぼ同機能でオンプレミス環境で用いることが出来るGitHub Enterprise Serverというものがあります。同じライセンスでクラウド版のGitHubの企業用であるGitHub Enterprise Cloudも使うことができます。
GitHub Enterprise Serverはイントラネット内で完全に社外からのアクセスを阻害して用いる事ができますが、一方で、GitHubの持つ一部の機能(主に最新の機能等)が利用できません。GitHub Enterprise CloudはGitHub.comにあるすべての機能が利用できる上、SAMLやアクセス元IPの制限などを行うことができます。
BitBucket
https://bitbucket.org/product/
タスク管理のJIRA、社内Wikiなどでよく用いられるConfluenceなどのベンダーでもあるAtlassianが提供しているGitプラットフォームがBitBucketです。Atlassianの製品を一つでも導入している企業の場合、BitBucketの利用料もセットの中に含まれているためにすべてをAtlassian製品で統一している企業も多いです。
一方で、OSSコミュニティや学生の利用といった面ではGitHubよりはマイナーでしょう。日本ではAtlassianに完全に統一している、BitBucketを使っている企業はおそらくGitHubに比べて少ないですが、アメリカなどでは非常に多くの企業がBitBucketを用いています。
GitLab
GitHub、BitBucketとの1番の違いはOSSとしても開発、提供されているという点が挙げられるでしょう。GitLabにはGitLab Enterprise Edition(GitLab EE)とGitLab Community Edition(GitLab CE)の2種類があり、CEはプロプライエタリなコードを含まないものがあります。
どちらもオンプレ版の場合利用料ゼロ円から利用できるため特段の理由がなければGitLab EEの方を利用すると良いでしょう。EEの無料プラン(Starter)から上位プランにアップグレードすることは容易ですが、CEからEEの有料プランに切り替えるのは多少の手間を伴います。
GitLab EEの有料プランでは非常に多彩な機能が提供されています。一方で、無料プランでも他のGitプラットフォームでもよく使われている標準的な機能については十分利用が可能です。
GitLabはクラウド版とオンプレミス版の両方がありますが、日本においてはGitLabといえばオンプレミス、といった利用状況であるように思います。
参考:
- Community Edition or Enterprise Edition https://about.gitlab.com/install/ce-or-ee/
まとめ
Gitについて、Gitプラットフォームについて、その中での3種類の大手のプラットフォーマー(サービスプロバイダー)の特徴等について説明を本記事ではさせていただきました。
ご自身のニーズに合わせてお好みのサービスを是非使ってみてください!
また、Gitやコードレビュー関係の記事を今後も書いていきたいと思っていますのでもしご要望やご不明点があればコメントください。