新春特別企画

GitLabのこれまでとこれから

あけましておめでとうございます。株式会社Ruby開発の佐藤です。

近年、GitHubを利用したソーシャルコーディングが注目を集めています。GitHubを利用するとエンジニア同士の共同作業をスムーズに進められるため、ソフトウェア開発の生産性を向上させる効果が期待できます。そのため、オープンソースソフトウェア開発での利用にとどまらず、通常業務でGitHubを利用する企業が増えています。

そこで本稿では、GitHubの競合として注目が高まっているGitLabについて紹介します。

GitLabとは

GitLabは、GitLab社が開発しているRuby on Rails製のGitホスティングソフトウェアです。GitLabには無料で利用可能なオープンソースソフトウェアのCommunity Edition(以下CE)と、利用にライセンスが必要なプロプライエタリソフトウェアのEnterprise Edition(以下EE)があります。

GitLab EEはGitLab CEのすべての機能に加えて、大規模組織向けの機能が追加されています。GitLab社によるとGitLab EEのみに含める機能は、利用者が100名を超える組織にとって有用かどうかで判断しているとのことですが、一般的な利用範囲ではGitLab CEとGitLab EEに大きな違いありません。

また、GitLab社はGitLabの利用者増加と知名度向上のため、GitLab EEのクラウドサービスであるGitLab.comを無料で提供しています。GitHubでは有料となるプライベートリポジトリの作成も、GitLabでは無料できます。そのため、ソースコードを公開したくない場合でも気軽に試すことができます。さらに、GitLabには継続的インテグレーションとコンテナレジストリの機能が統合されており、GitLab.comではすべてを無料で利用できます。

なお、筆者による「GitHub.com・BitBucket.org・GitLab.comの月額料金比較 + α」という記事で、詳しい月額料金の比較を行っています。興味のある方はそちらもお読みください。

GitHubとの違い

以下ではGitLabとGitHubの相違点について述べますが、筆者の主観的な視点が含まれているので参考程度にしてください。

以前のGitLabは「貧者のGHE(GitHub Enterprise⁠⁠」と呼ばれていたように、GitHubと比較するとかなり見劣りしていました。しかし、2014年にGitLabが法人化され、フルタイムでエンジニアを雇って開発が行われるようになり、現在では機能的にはGitHubと遜色のないレベルまで到達していると思います。

一方、クラウドサービスであるGitLab.comのパフォーマンスや安定性はGitHubと比べて大きく見劣りしています。特にGitLabのパフォーマンスは、GitHubと比較して全体的にもっさりしている感じがあります。さらにGitLab.comでは、ソフトウェアアップデートやシステム障害による、サイトのダウンも比較的頻繁に発生しています。サイトのダウンは長くても一時間程度で復旧する印象ですが、実際の業務で利用するのは厳しいというのが筆者の感想です。この点については、GitLab社としても問題を認識していて、高い優先度で改善に取り組んでいるようです。そのため着実に改善されてきてはいますが、複雑な問題であるため、解決にはしばらく時間がかかりそうです。

それでは、GitLabを実際の業務で使用するには自前でサーバーを用意して、運用する以外に方法がないのでしょうか? GitLabには公式のOmnibus packageが用意されて、比較的簡単にインストールとアップデートができるようになっています。それでも自前でサーバーを運用するにはある程度の知識と経験が必要であり、できればサーバー運用は外部に任せたいというニーズも少なからずあるはずです。

そのような場合は、GitLab社の提供するGitHost.ioが候補になります。GitHost.ioでは専有型のプライベートなGitLabサーバーを提供していて、GitLabのインストールやアップデートはGitLab社が行ってくれます。そのため、面倒なサーバーの運用はGitLab社に任せて、GitLabを快適に利用できます。

なお、GitHost.ioを利用した場合とGitHubのOrganizationプランを利用した場合で月額料金を比較すると、利用者数が増えるほどGitHost.ioの方がコストを低く抑えることができます

GitLab自体の開発のされ方

先述したように、GitLabはオープンソースソフトウェアのGitLab CEとプロプライエタリソフトウェアのGitLab EEに分かれており、そのどちらもGitLab社によって開発が進められています。GitLabの開発はGitLab.comのプロジェクトとして公開して進められており、バグ報告や機能追加の要望は以下のプロジェクトのIssueで受け付けています。

このIssueにはユーザーからのバグ報告や機能追加の要望以外に、GitLabのリリース計画など開発に関連するタスクがすべて登録されています。そのため、Issueを調べることでGitLabに追加される予定の機能をある程度は知ることができます。

また、各リリースに含めるバグフィックスや機能追加はプロジェクトのMilestoneで管理されています。GitLabは毎月22日にメジャーアップデートをリリースするというサイクルが決まっています。そのため、Milestoneで管理するのは主に次回リリース予定のIssueに絞って運用されています。これは1ヶ月以上先の計画はブレる場合が多く、より正確な計画をユーザーに提示するためのようです。なお、1ヶ月以上先にリリース予定のIssueは、MilestoneにBacklogという項目を作成して管理されています。以下がGitLab CEとGitLab EEのMilestoneです。

GitLabはコミュニティーからのコントリビュートを非常に重視しており、コミュニティーからのマージリクエスト(GitHubでいうプルリクエスト)には、必ずGitLab社の社員が対応する体制を取っています。マージリクエストを投稿すると、GitLab社の社員がコードレビューでマージに必要な修正事項を指摘してくれるため、その指摘事項にしたがってコードを修正することで多くの場合はマージされるようです。

筆者自身もGitLabにコントリビュートしており、この2ヶ月あまりで6件のマージリクエストを投稿していますが、リジェクトされたのは1件のみで残りの5件は無事にマージされました。ちなみに、昨年の12月22日にリリースされたGitLab 8.15には、コニュニティーからのマージリクエストが68件もマージされており、コニュニティーからのコントリビュートがGitLabの改善に大きな役割を果たしていると言えます。

最近の動向

GitLab社は最近、Conversational Development(以下ConvDev)という 新しいソフトウェア開発スタイルを提案しています。ソフトウェア開発にConvDevを適用することで、アイディアを製品にするまでの開発サイクルをより短くできると、GitLab社は説明しています。GitLabとConvDevの関係に興味がある方は、masakuraさんが説明している記事GitLab社が作成したデモ動画も参照してください。

GitLabは、このConvDevを一つの統合されたインターフェースで提供することを目標に開発が進められています。例えば、昨年の12月22日にリリースされたGitLab 8.15で追加された ⁠Auto Deploy」「Web Terminal」はConvDevをサポートするための機能です。

「Auto Deploy」は、GitLabに統合されている継続的インテグレーションと継続的デリバリーのパイプライン機構を利用して、コンテナスケジューラへ自動デプロイします。コンテナスケジューラの環境を事前に準備する必要があるので簡単に試せる機能ではありませんが、環境さえあれば比較的簡単に、GitLabからコンテナスケジューラへの自動デプロイが可能になります。さらに「Auto Deploy」を有効にすることで、Review Appsの機能も有効になるため、マージリクエストのマージ前に、一時的なコンテナを起動してアプリをレビューすることもできます。

「Web Terminal」は、コンテナスケジューラへデプロイしたコンテナに、ブラウザから簡単にターミナル接続する機能で、コンテナ内での調査やデバッグ作業などを効率的に行うことができます。

現在、⁠Auto Deploy」がサポートするコンテナスケジューラはOpenShiftのみですが、今後、他のコンテナスケジューラやクラウドプラットフォームもサポートされる予定です。

今後の方向性

GitLabの今後の方向性についてはDirectionページに記載されていますが、GitLabの計画は非常に流動的なため、あくまでも参考程度に見たほうがよいでしょう。

実装されるかは分かりませんが、Directionページの中で筆者が注目している機能を一つだけ紹介します。それは、コードレビューの「View and add comments on previous commits in image file view」機能です。この機能を簡単に説明すると、マージリクエストでコードの指摘箇所にコメントできるのと同じように、画像の指摘箇所にもコメントできるようにする機能です。この機能が実装されることで、プログラマーだけでなくデザイナーにとっても、GitLabが非常に有用なツールなるのではないかと期待しています。

また、今年の4月には、約1年半振りにメジャーバージョンを繰り上げる、GitLab 9.0のリリースが予定されています。GitLab 9.0では、APIの破壊的な変更やGroupの階層機能の追加など、大規模な変更が入る予定であり、計画通りにリリースされるか注目したいと思います。

まとめ

GitLabはここ1年で大きく進歩しており、以前と比較して格段に使い勝手が良くなっています。また、Omnibus Packageの登場により、以前は大変だったインストールやアップデートの作業もかなり楽になっています。数年前にGitLabに挑戦して挫折したような方は、是非、もう一度GitLabを試してみてください。きっと、GitLabのあまりの変化に驚くことでしょう。

本稿ではあまり触れませんでしたが、GitLabの継続的インテグレーション機能はコンテナとの親和性が非常に高く、運用も比較的容易です。そのため、オンプレミスのCIサーバーとして現在主流のJenkinsに取って代わるポテンシャルを感じさせます。この継続的インテグレーション機能を利用するためだけでも、GitLabを使用する価値はあると思います。

今年もGitLabの進歩から目を離せない1年となりそうです。それでは、今年もよろしくお願いします。

おすすめ記事

記事・ニュース一覧