純規の暇人趣味ブログ

首を突っ込んで足を洗う

OSSのGitサーバ4種類を主観的に比較する

      2017/03/09    HimaJyun

人に見せなくないソースコードというのは星の数ほどあります。(例えばパスワードを含むサーバの設定ファイルをGitで管理している、とか)

こういう時に非公開のGitサーバがあれば良いのですが、サービスとして提供されている物ではprivateリポジトリが作れなかったりしますし、そもそも他人が管理しているサーバなので100%の信用は出来ません。

もっと自由に使えて、信用できる、すなわち自分の管理しているサーバにインストール出来るOSSのGitサーバをいくつか比較してみます。

Gitサーバ、どれが良い?

世の中にはGitHubなんてものがありましてね……WebからGitをポチポチ出来る。

これが案外便利でして、Webだけでリポジトリが作成出来る。

前まではGitoliteとRedmineを組み合わせていたのですが、このWebからの……が出来なくて面倒になってしまい思ったほど使いこなせていません。

というわけでWebからポチポチ出来るGitサーバがあれば良いなぁ、と思ったのが事の発端

(お金のある人はBitBucketとかGitHub Enterpriseでも使ってればいいと思います)

前提条件

「Gitサーバ」というと種類が多いので、私が求める前提条件から絞り込んでみましょうか。

  • オープンソース
  • Linux上で動作する
  • Webベースの操作(リポジトリ作成やファイル編集)が出来る
  • Smart HTTPでアクセス出来る
  • プルリクエスト(もしくはそれに類似した機能)を持つ
  • ユーザ管理機能を持つ(最低限リポジトリ別のアクセス許可)
  • git-lfsをサポートしている(もしくは近いうちにサポートされそう)
  • 現在(2017/03/07)でも活動がアクティブ

結構わがままですね……ロクデナシとか言わないで

比較

先ほどの前提条件から、以下のようなソフトウェアがマッチします。(他にもあれば教えてね♡)

  1. GitLab
  2. GitBucket
  3. Gitblit
  4. Gogs

GiteaはGogsのforkで大した違いもなさそうだったので除外しました、そのうち大きな違いとかが出てきたら加えるかも……

gitlyなんてのがあるらしいが、現時点ではまだリリースされていないので……

(掲載している画像や情報は2017/03/07での情報です、未来の読者の方にとっては情報が古いかも知れません)

GitLab

Code, test, and deploy together with GitLab open source git repo management software | GitLab

この手の話題になると必ず出てくるのがGitHubクローンとして有名なGitLab。

Ruby on Railsで開発されており、とてもリッチな機能を備えています。

リッチな機能を備えているが故に要求されるスペックも高く、重量系です、メモリは割と容赦なく食われます。

Raspberry Piに対応していますが、swapを利用しての無理矢理対応に近いので少々重いかも知れません。(検証しようにも提供されているパッケージが動作しない)

また、リッチかつRailsで出来ているが故にパッケージをインストールすると環境はめちゃくちゃにされます。

並以上のスペックなサーバでDockerなどを利用する使い方が一番綺麗だと思います。

人によっては不必要な機能が多いかも知れません。

非公式ながら日本語で利用可能(参考:GitHubクローン「GitLab」を日本語化して使う方法 - Qiita)

GitBucket

gitbucket/gitbucket: A Git platform powered by Scala with easy installation, high extensibility & github API compatibility
デモ:http://gitbucket.herokuapp.com/

書籍なども出されている日本人の方(竹添直樹氏)が個人で開発しているGitHubクローンです。

Scalaで開発されており、Javaの実行環境であるJVMで動作します。

JVMで動作するので割り当てメモリは起動オプションで調整できます。(割り当てメモリが256Mや512Mでも割と動く)

動作はかなり軽く、Raspberry Piでも案外サクサクと使えます。

インストールが超簡単で、warをダウンロードしてきて実行するだけで動作します。(warなのでTomcatに入れてもOK、いわゆるExecutable war)

また、JGitという100%Javaで実装されたGitライブラリを使用しているので、サーバ側にGitをインストールする必要がありません。

GitBucket単体という最小構成から、GitBucket+Tomcat+DB+Webサーバという良くある構成まで柔軟に調整出来ます。

日本語非対応だがインターフェースは直感的で分かりやすい。

Gitblit

Gitblit

同じくJVMで動く系、ただしこちらはScalaではなく純Java

Gitblitの特徴的な点は「GitHubクローンではない」という事

他のソフトウェアがGitHubクローンを目指しているのに対し、Gitblitはオリジナルで、Gitblitだけの機能もいくつかある。

例えばリポジトリをディレクトリのように「/」で区切ってグルーピング出来るとか。

プルリクエストに相当する機能も他とはやり方が違う。(それが良いか悪いかは別として)

私は名前空間とかが大好きなので、この「/」でグルーピング出来るのは良いと思うんですけどね。

どうして他のソフトウェア(GitHub含む)も導入しないんだろ……?

中途半端ながら日本語化されている。(日本語化はファイルで行われているが、ファイルがtempディレクトリ(終了時に削除される)にあるので改変は無理っぽい)

Gogs

Gogs
デモ:https://try.gogs.io/

こちらはGo言語で開発されているもの。

(GitLab以外の)他のソフトウェアと同じく、ダウンロードしてきて実行すれば動く(環境を汚さない)

Piでも問題なく動作する軽量さながら一通りの機能は揃っているのでGitLabキラーっぽい感じがする。

GitLabが環境を汚すとか、重いとかで気に入らない方には良いんじゃないかと思う。

今のところはまだgit-lfsには対応していないみたい、マイルストーンを見る限りそろそろだとは思う

インターフェースがGitHubそっくりなんだが、これ他のGitHubクローンと同じ末路を辿るんじゃ……

日本語化もされている、フォントが中華フォントだけど……翻訳文自体は比較的綺麗。

まとめ

簡単に表にすると以下のような感じ。

GitLab GitBucket Gitblit Gogs
開発言語 Ruby on Rails Scala Java Go
インストール パッケージ有、ただし環境が汚れる 簡単
操作感 十分なスペックがあれば快適 快適
消費メモリ ギガオーバー JVMパラメータによる(少なくても動作可) 数十メガ~
使いやすさ 少し慣れが必要 直感的 少し慣れが必要 ほぼGitHub
SSH 対応
日本語 非公式対応 非対応 中途半端に対応 対応

この中から自分の求めるものにマッチするソフトウェアを選べば良いかと……(こうやって表にするとGogsが無双してますね)

私のGit鯖はインストールが楽で比較的動作も軽いGitBucketをRaspberry Pi3に入れて使っています。

開発者が日本人ということで安心も出来ますし、私はJava慣れしているので。

余談ですが、Raspberry Piで入るJVMはOpenJDK(Zero VM)とOracleJDKがあります、OracleJDKの方が軽いです。

 - サーバ運営