なうびるどいんぐ

脳みそ常時-3dB

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

      2018/07/17    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

(掲載している画像や情報は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に対応していますが、少々重いかも知れません。(検証しようにも提供されているパッケージが動作しなかった)

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

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

高機能で情報も多いですが、人によっては不必要な機能が多いかも知れません。

非公式ながら日本語で利用可能(参考:GitHubクローン「GitLab」を日本語化して使う方法 - Qiita)、近々多言語対応されるとかいう噂

GitBucket

GitBucket: A Git platform
デモ: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だけの機能もいくつかある。

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

また、リポジトリをディレクトリのように「/」で区切ってグルーピング出来るとか。(他のソフトウェアでも一応「group」や「organization」で似たようなことが出来る)

「/」でグルーピング出来る機能、「group」や「organization」より分かりやすくて良いと思うんですけどね……

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

Gogs

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

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

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

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

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

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

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

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

Gogsから分岐したGiteaもある、どう違うのかは詳しく調べていないが、こっちはLFSも対応してそうな雰囲気。

まとめ

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

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

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

これだとGitLabがアレな感じになってしまうので付け加えておくと、GitLabは機能豊富で開発力が高く新機能への対応も早い(と、思います)

私のGit鯖Raspberry Pi3なのでインストールが楽で比較的軽いGitBucketを入れて使っています。(私はJava慣れしているので)

Apacheをリバースプロキシにして、GitBucket(Jettyで動作)にリクエストを投げています(静的ファイルはApacheから配信)、Tomcatは使っていません。

nginxはバージョン不足でproxy_request_bufferingが使えなかったのと、Gitみたいな物にはApacheの方が向いてるかと思ったのでApacheを使用。

データベースはバックアップの観点からPostgreSQLを使用、本当はMariaDBが良かったけどPiのMariaDBはバージョンが低くて機能不足だったので。

 - サーバー