GitHubのようなサイトを独自に運用できる「GitLab」や「GitBucket」を使ってみよう

自分の管理するサーバー上でGitHubのようなリポジトリ管理ツールを運用できる「GitLab」や「GitBucket」といったツールが注目されている。今回はこれらツールについて、それぞれの特徴やインストール方法などを紹介するとともに、TracやRedmineといったプロジェクト管理ツールとの違いについても説明する。

GitLabおよびGitBucketの特徴と機能比較

Gitを利用するに当たり、GitHubやBitbucketなどのGitリポジトリホスティングサービスを利用しているユーザーは多い。いっぽうで、公開したくないソースコードを管理している場合などで、自前のサーバー上にGitリポジトリを置きたい、という需要も少なくない。

GitはSSH経由での通信をサポートしているので、単にGitリポジトリを設置するだけであれば、SSHでリモートログインできるサーバーを準備すれば良い。しかし、この場合リポジトリの管理はサーバー上でCUIで行うことになり、手軽さという面ではGitHubやBitbucketに劣ってしまう。そこで注目されているのが、自分の管理するサーバー上でGitHubのようなリポジトリ管理ツールを運用できる「GitLab」や「GitBucket」といったツールだ。

GitHubを参考にしながらも独自の展開をする「GitLab」

GitLabは、GitLab社が開発しているソフトウェア開発支援ソフトウェアだ。GitHub風のインターフェイスを持ち、リポジトリブラウザなどのリポジトリ管理機能に加え、コードレビューやイシュートラッカー、活動履歴機能(activity feed)、Wikiなどの機能を持つ(図1)。LDAPなどの認証機構との統合も可能で、大規模な環境でも利用できる。

図1 GitHub風のUIを持つ「GitLab」のリポジトリブラウザ画面
図1 GitHub風のUIを持つ「GitLab」のリポジトリブラウザ画面

 GitLabはオープンソースで提供されているCommunity Editionと、より高機能でサポート付きの有料版であるEnterprise Editionが提供されている。また、継続的インテグレーション(Continuous Integration、CI)機能を提供するGitLab CIというツールも提供されているほか、GitLab社が管理するサーバー上で稼動するGitLabを提供するGitLab.comというホスティングサービスも用意されている。

GitLabはGitBucketや後述するRedmine、Tracなどと比べてリポジトリ管理関連機能が最も充実しており、リポジトリの作成やユーザーの管理、フォークやプルリクエストといった処理をすべてWebブラウザからの操作で実行できる(図2、3)。

図2 GitLabのコミット履歴ページ
図2 GitLabのコミット履歴ページ

 もちろん、イシュートラッカーやWikiなどの開発支援ツールも提供されている(図3)。

図3 GitLabのイシュートラッカー
図3 GitLabのイシュートラッカー

GitHubとよく似たUIを持つ「GitBucket」

また、GitBucketもGitLabと同様、Webブラウザからリポジトリを管理できるツールだ。Scalaで実装されており、Java仮想マシン上で動作する(図4)。

図4 Scalaで実装された「GitBucket」のプロジェクト画面
図4 Scalaで実装された「GitBucket」のプロジェクト画面

 GitBucketは「GitHubクローン」をうたっており、ユーザーインターフェイスもGitHubにそっくりだ。リポジトリブラウザやフォーク機能、イシュートラッカー、Wikiなど、GitHubの主要機能のほとんどが実装されている(図5)。

図5 BitBucketのイシュートラッカー
図5 BitBucketのイシュートラッカー

 なお、企業によって開発されているGitHubとは異なり、GitBucketは竹添直樹氏という個人が開発していることもあって有償サポートサービスなどは提供されていない。

既存のプロジェクト管理ツールとの違い

GitLabやGitBucketはGitリポジトリを主軸としたツールだが、プロジェクト管理ツールとしてはそのほかにも「Redmine」や「Trac」といったものがよく知られている。これらはバグや進捗、ドキュメントなどの管理機能がメインで、それに付随してGitやSubversionなどに対応するリポジトリブラウザ機能が提供されている。

RedmineはRubyおよびRuby on Railsで実装されているプロジェクト管理ツールで、柔軟かつ多機能なチケットシステムやカレンダー、ガントチャート機能、プラグインによる機能拡張などが特徴である(図6、7)。

図6 Redmineのリポジトリブラウザ
図6 Redmineのリポジトリブラウザ
図7 Redmineのチケット画面
図7 Redmineのチケット画面

 特にチケットシステムについては評価が高く、企業内などでもよく採用されている。その半面、リポジトリ関連機能はGitLabやGitBucketと比べると弱く、リポジトリブラウザなどの閲覧系機能に限定される。リポジトリの作成や管理に関する機能は備えておらず、これらは別途gitコマンドなどで行う必要がある。フォークやプルリクエストなどもサポートされていない。

また、Tracはチケット管理機能とWikiを中心とするプロジェクト管理ツールだ。Redmineと同様にプラグインで機能を拡張できるが、Tracの場合は本体部分は最小限の機能のみを持ち、プラグインで必要な機能を追加するような設計になっている。Gitリポジトリサポートもプラグインによって実現されている(図8、9)。

図8 Tracのリポジトリブラウザ
図8 Tracのリポジトリブラウザ
図9 Tracのチケット画面
図9 Tracのチケット画面

 TracもRedmineと同様、リポジトリ関連機能としては閲覧のみが可能で、フォークやプルリクエストなどは未サポートだ。

さて、GitLabとGitBucket、Redmine、Tracの4つについて、それぞれが持つ機能を比較できるように簡単にまとめたものが表1だ。

表1 GitLab、GitBucket、Redmine、Tracの機能比較
機能 GitLab GitBucket Redmine Trac
リポジトリブラウザの機能 リポジトリブラウザ
コミットログの表示
diff表示
リポジトリ内ファイルの編集 × ×
Gitのそのほかの機能 リポジトリの新規作成 × ×
プロジェクトのフォーク × ×
プル/マージリクエスト × ×
WebHook × ×
プロジェクト管理機能 イシュートラッカー/チケット
ファイル・ドキュメント管理 × × ×
カレンダー × ×
ガントチャート × ×
Wiki
ユーザー/認証管理機能 ユーザー管理
グループ機能
ユーザー/グループによるリポジトリへのアクセス制限 × ×
SSH公開鍵の管理 × ×
プロジェクトの一般公開
プロジェクトの公開範囲制限

(※3月18日追記:当初「SSH公開鍵の管理機能」において、GitBucketを「×」としていましたが、SSHアクセス機能を機能を有効にすることでSSH公開鍵の管理機能も利用できるとのことで、「○」に修正しました)

GitLabおよびGitBucketと、RedmineおよびTracとの大きな違いとして、フォークやマージ/プルリクエスト機能をサポートしているかどうかがある。これらの機能を利用したいのであれば、GitLabやGitBucketが候補となるだろう。

いっぽう、Redmineはカレンダー機能やガントチャートと言ったプロジェクト管理機能が充実しているのが特徴だ。また、Tracはシンプルなユーザーインターフェイスや、プラグインによるカスタマイズ性の高さがある。フォークやマージ/プルリクエスト機能を利用しないのであれば、プロジェクト管理機能が充実しているRedmineやTracは十分な選択肢となる。

なお、どのツールもGitリポジトリについてはローカルファイルシステム上に直接作成し、それ以外のデータについてはデータベースに保存する。GitLabとRedmineはデータベースとしてMySQLやPostgreSQLを、GitBucketやTracはローカルファイルシステム上にデータベースを作成する形となっている(Tracについては設定によってMySQLやPostgreSQLの利用も可能)。

GitLabのインストールと設定、基本的な使い方

さて、続いてはGitLabやGitBucketのインストール方法や基本的な使い方について説明していこう。なお、以下では原則としてRed Hat Enterprise Linux 7互換のCentOS 7を使って手順を解説している。

GitLabはさまざまなオープンソースソフトウェアを組み合わせて利用しているため、ソースコードからインストールしようとすると多くの作業が必要となる。そのため、現在では必要なソフトウェアを一括インストールできるRPMおよびDEB形式パッケージが提供されており、公式にサポートされているUbuntu 12.04/14.04やDebian 7、Red Hat Enterprise Linux 6/7およびその互換環境では簡単にGitLabをインストールできるようになっている(GitLabのインストール方法解説ページ)。

たとえばCentOS 7では、RPMパッケージをダウンロードし、次のようにインストールするだけでGitLabが利用可能になる。

# rpm -ivh install gitlab-7.5.3_omnibus.5.2.1.ci-1.el6.x86_64
Thank you for installing GitLab!
Configure and start GitLab by running the following command:

sudo gitlab-ctl reconfigure

GitLab should be reachable at localhost
Otherwise configure GitLab for your system by editing /etc/gitlab/gitlab.rb file
And running reconfigure again.

この場合、/opt/gitlabディレクトリ以下にGitLabのインストールや設定、実行に必要なデータベース(PostgreSQLおよびRedis)やWebサーバー(nginx)、Python、Ruby、Chefなどがインストールされる。

そのほか、インストールに関する詳しい情報はドキュメントを参照してほしい。

GitLabの初期設定

GitLabの設定や管理は、「gitlab-ctl」コマンドで行う。インストール後に「gitlab-ctl reconfigure」コマンドを実行することで初期設定を実行できる。

# gitlab-ctl reconfigure

なお、GitLabを稼動させるサーバーにはホスト名としてFQDN(ドメイン名を省略していないドメイン名)が指定されている必要がある。もしFQDNが設定されていない場合、次の「gitlab-ctl」コマンドを実行して設定を行う前に、/etc/hostnameファイルなどを編集してFQDNを指定しておく必要がある。もしFQDNの設定前にgitlab-ctlコマンドを実行してしまった場合エラーとなるので、この場合はいったん/etc/gitディレクトリをそこに含まれるファイルごと削除し、ホスト名の設定を行ってから再度gitlab-ctlコマンドを実行すれば良い。

また、GitLabはユーザーの作成時などに、登録したメールアドレス宛に確認メールを送信する。そのため、事前にインストールするサーバーからメールを送信できるよう設定をおこなっておこう。

「gitlab-ctl reconfigure」コマンドが正常終了したら、これでgitlabが稼動した状態になる。インストールしたサーバーの80番ポートにWebブラウザでアクセスすれば、ログイン画面が表示されるはずだ(図10)。

図10 GitLabのログイン画面
図10 GitLabのログイン画面

 初期設定では「root」というユーザー名と「5iveL!fe」というパスワードでログインが可能だ。ログイン後、パスワードの再設定画面が表示されるので、適切なパスワードに変更しておこう(図11)。

図11 GitLabのパスワード変更画面
図11 GitLabのパスワード変更画面

 また、GitLabサービスの停止や再起動などもgitlab-ctlコマンドで行える。サービスを停止されるには、次のように「stop」サブコマンドを実行する。

# gitlab-ctl stop

また、再起動は「restart」サブコマンドで実行できる。

# gitlab-ctl restart

サブコマンド一覧は「help」サブコマンドで確認可能だ。

# gitlab-ctl help

なお、RHEL 7系の環境では、「gitlab-runsvdir」という名称でサービスが登録される。たとえばシステムの起動時に自動的にGitLabを実行させるには、以下のようにsystemctlコマンドでこのサービスを有効にしておけば良い。

# systemctl enable gitlab-runsvdir

GitLabを使う

GitLabにログインすると、図12のようなダッシュボードが表示される。

図12 GitLabのダッシュボード画面
図12 GitLabのダッシュボード画面

 インストール直後は管理権限のあるrootユーザーのみが用意されているが、通常の作業は別のユーザーを作成して行うほうが良いだろう。ユーザーの作成は、画面上部に表示されるツールバーの「Admin Area」をクリックして表示される「Admin area」画面で行える(図13)。

図13 GitLabの「Admin area」画面
図13 GitLabの「Admin area」画面

 また、ユーザーの各種設定はログイン後の「Profile settings」画面で行える。ここではプロフィールの設定のほか、メールアドレスの登録やパスワードの再設定、通知設定、SSH公開鍵の登録、デザインの設定などが可能だ(図14)。SSH経由でGitLab上のリポジトリにアクセスするには、ここでSSH公開鍵をあらかじめ登録しておく必要がある。

図14 GitLabの「Profile settings」画面
図14 GitLabの「Profile settings」画面

 GitLabでは、プロジェクト単位でリポジトリが作成される。プロジェクトの作成は、Dashboard画面から行える(図15)。

図15 プロジェクトの作成はDashboard画面から行える
図15 プロジェクトの作成はDashboard画面から行える

 GitLabでは、プロジェクトの公開レベルとして「Private」(閲覧権限を与えたユーザーのみ閲覧可能)と「Internal」(ログインユーザーのみ閲覧可能)、「Public」(認証なしにすべてのユーザーが閲覧可能)の3段階が用意されている(図16)。「Public」に設定した場合、サーバーにアクセスできる誰もがリポジトリを閲覧できる点には注意したい。

図16 プロジェクトの作成時に公開レベルを指定できる
図16 プロジェクトの作成時に公開レベルを指定できる

 GitLabのプロジェクト画面はGitHubに似ており、「Files」タブで表示されるリポジトリブラウザではREADMEファイルとともにリポジトリ内のファイル一覧が表示される(図17)。リポジトリブラウザでは個別ファイルの閲覧やWebブラウザ上での編集も可能だ。

図17 GitLabのリポジトリブラウザ
図17 GitLabのリポジトリブラウザ

 また、イシュートラッカー(Issue Tracker)はGitHubと同様、登録したIssueに担当者を割り当てたり、コメントを付けることが可能だ(図18)。

図18 GitLabのイシュートラッカー
図18 GitLabのイシュートラッカー

 そのほか、GitHubと同様のFork機能や、Merge Requestといった機能も利用可能になっている。

GitBucketのインストールと設定、基本的な使い方

GitBucketはScalaで実装されており、Javaサーブレットとして動作する。サーブレットコンテナがない環境でも動作するようになっているが、今回はJavaアプリケーションサーバーであるApache Tomcatと組み合わせて利用する方法を紹介しよう。

GitBucketのソースコードはGitHubから入手できるが、同時にJavaアプリケーションサーバーで動作させるためのWARファイルも公開されているので、通常はそちらを利用することをおすすめする。

まず、yumコマンドなどでJava実行環境およびTomcatをインストールし、続いてsystemctlコマンドなどでtomcatサービスを起動させておく。

# yum install java tomcat
# systemctl start tomcat

続いてGitBucketのリリースページからGitBucketのWARファイルをダウンロードし、Tomcatのwebappsディレクトリ(通常は「/var/lib/tomcat/webapps」ディレクトリ)にこれをコピーする。

# cp gitbucket.war /var/lib/tomcat/webapps/

以上でインストールは完了だ。以下のURLにWebブラウザでアクセスすれば、GitBucketのトップページが表示される(図19)。

http://<Tomcatが稼働しているホスト>:8080/gitbucket/
図19 GitBucketのトップページ
図19 GitBucketのトップページ

GitBucketの初期設定と基本的な使い方

初期設定では、「root」ユーザーが用意されており、「root」というパスワードでログインが可能となっている。ログイン後は画面右上のユーザーアイコンをクリックし、パスワードを変更しておこう。

また、新規ユーザーやグループの作成は画面右上の工具アイコンをクリックして表示される「User Management」画面で行える。ここで「New User」ボタンをクリックするとユーザーを、「New Group」ボタンをクリックするとグループを新規作成できる(図20)。

図20 「User Management」画面
図20 「User Management」画面

 また、リポジトリの作成はログイン直後にも表示される「Activity」画面内にある「New repositoty」ボタンで行える(図21)。

図21 「Activity」画面からリポジトリを作成できる
図21 「Activity」画面からリポジトリを作成できる

 リポジトリの作成画面では、リポジトリ名やその説明に加え、公開範囲の設定が可能だ(図22)。なお、ここで「Public」を指定すると、そのホストにアクセスできるすべてのユーザーがリポジトリにアクセス可能になるので注意したい。

図22 リポジトリの新規作成画面
図22 リポジトリの新規作成画面

 リポジトリを作成すると、リポジトリにファイルを追加する手順の紹介画面が表示される(図23)。

図23 空のリポジトリにはファイルの追加手順が表示される
図23 空のリポジトリにはファイルの追加手順が表示される

 また、ファイルをコミットするとリポジトリブラウザが表示される(図24)。

図24 GitBucketのリポジトリブラウザ
図24 GitBucketのリポジトリブラウザ

 画面右のサイドバー内にあるメニューからはイシュートラッカーやプルリクエスト、Wikiなどの機能にアクセスできる。これらもGitHubの各機能に似たユーザーインターフェイスなので、GitHubを使ったことがあれば同じ感覚で利用できるだろう(図25)。

図25 GitBucketのイシュートラッカー
図25 GitBucketのイシュートラッカー

なお、GitBucketでは「System Settings」でSSHアクセスを有効にすることでSSH経由でのアクセスが可能になり、またSSH公開鍵の管理機能も利用できるようになる。

(※3月18日追記:当初、「GitBucketではいまのところSSH公開鍵の管理機能は用意されておらず、リポジトリへのアクセス時はユーザー名/パスワードによる認証のみがサポートされている」としていましたが、こちらは誤りでしたので修正しています。ご指摘ありがとうございました)

「クローン」ながら実用度は高いGitLabやGitBucket

GitLabやGitBucketは当初はGitHubクローンとして開発がスタートしたソフトウェアだが、どちらも機能的には十分なものを備えており、実際のソフトウェア開発プロジェクトに十分導入できるだろう。ユーザーインターフェイスの完成度についてはGitLabのほうがやや高いが、GitHubとはやや異なる部分もある。GitBucketはGitHubに酷似しているため、GitHubに慣れているユーザーであればGitBucketのほうが親しみやすいかもしれない。

GitHub自体も、プライベートリポジトリを作成できる有償サービスや、自分のサーバーで利用できる「GitHub Enterprise」といったサービスを提供している。実際に開発プロジェクトで導入する際は、これらも含め実際に試してみて使い勝手の良いものを選ぶと良いだろう。