Block Rockin’ Codes

back with another one of those block rockin' codes

Fossilを使ってみた。

[追記 10/28]
コメントで、途中で紹介する翻訳サイトのURLを変更されたとの連絡を頂いたので、修正しました。


Zed ShawがFossilを使う理由 - karasuyamatenguの日記を読んで気になったので、
Fossilを入れてみました。


自分はバージョン管理は主にMercurialを使っていて、ホスティングはbitbucketを借りています。
bitbucketにはチケットやWikiといった機能もついていて便利ですが、
こういった機能は例えばローカルやプライベートなサーバに構築しようとすると、
TracRedmineといったツールを導入することが多いかと思います。


自分はTracしか使ったことはありませんが、これらは機能も豊富で拡張性も高く、プロジェクトを管理する上で必要なものは
大体揃えることが出来るのですが、逆に個人や少人数でちょっとしたプロジェクトを管理したいと言った時、
TracRedmineは少し「大きい」と思うことも有るんじゃないでしょうか?導入もそれなりのコストがかかるかと思います。


そんな時、上記に上げたこちらの記事を読んだところ、
Fossilを以下の様に紹介していました。

fossilを一言で言うと「誰でも簡単にホスティングできるプロジェクト管理ソリューション」だろう。
githubやbitbucketのようなSCMのフルサービスが提供している重要な機能を、第三者に頼ることなく自前で提供できる。

テングの理解するところのその機能は:
    * バージョンコントロール
    * バグ管理
    * wiki
    * 分散型: 上記のデータをノード間でシェア
    * 組込まれたHTTPによるネットワークサポート
    * CGIにより上記にアプリケーションを簡単に公開できる
    * これらの全ての機能がたった一つのコマンドで実現される (さすがNewman氏!)
mercurialやgitはバージョンコントロール・エンジンだけで、
プロジェクト管理に必要なその他のツールは外部サービスに頼らなくてはいけないのをfossilは一つのコマンドでこなす。


Fossilはsqlite作者のD. Richard Hipp氏が開発したソフトで、現在sqliteのいくつかのブランチはFossilで管理されているそうです。
プロジェクト管理とSCMが一体となって、手軽に環境を構築することができるという点で、先ほどいったような小規模・個人のプロジェクトには向いているかもしれないと思い、早速試しに導入してみることにしました。


ちなみに、翻訳サイトもありました。ありがたい。
Fossil: Documentation


ということで以下備忘録。

Fossilの導入

導入には二つの方法が有ります。

  • ソースから自分でビルド
  • プリコンパイル済みバイナリを使う

Fossilは全てCによる実装なので、ビルドする場合はgcc等で行います。

バイナリは以下が用意されています。

今回はLinux x86のバイナリからインストールしました。

まずバイナリを持って来て
/usr/local/binに入れてunzip


これでもう使えます。


早速プロジェクトを作ってみます。

/home/jxck# fossil new fossiltest

project-id: 2928706aa9c9386d302a17b4232xxxxxxxxxxxx

server-id: d2862f9a4cfaaed2df72c20f8e34xxxxxxxxxxxx

admin-user: root (initial password is "xxxxxx")

こんな感じでコマンド一発でプロジェクトが出来ました。

すでにfossilコマンドでscmとして使うことが出来ます。
コマンドリストはこちら


まず最初に思うのは"fossil"コマンド長い。。
"hg"になれた自分としては、果てしない長さですね。エイリアス張るとすれば"fos"とかかな。


まだほとんど使っていませんが、一覧を見る限り必要な機能は一通り揃っています。


また、"fossil wiki"や"fossil setting","fossil user"等のコマンドは、オプションが色々あり、
ジョブを組んだり、何かと連携させる時便利そうです。


このままでも使えますが、apacheに載せてCGIで稼働させてみます。

サーバセットアップ

サーバのセットアップはこちらに書かれています。
Fossil: How To Configure A Fossil Server

翻訳だとこちら。
404 Not Found

/usr/local/apache2/cgi-bin に fossilという名前のファイルを作り以下を記述

#!/usr/local/bin/fossil
repository: /home/jxck/fossiltest


これをcgiエイリアスに登録します

/etc/apache2/httpd.conf に以下を記述

ScriptAlias /jxck/ "/usr/local/apache2/cgi-bin/"


すると以下でアクセスできる。
http://localhost/jxck/fossil/


と思ったら怒られる。


作成したsqliteがread-onlyらしいので
適当に権限を加えてみる。

:/home/jxck# chmod a+w jxck
:/home/jxck# fossil all rebuild
:/home/jxck# /etc/init.d/apache2 restart

これでもだめ

色々調べたら、ファイルだけじゃなくディレクトリ自体にも権限が必要。
そうか、ということで付ける。

:/home# chmod a+r jxck
:/home# chmod a+w jxck
:/home# fossil all rebuild
:/home# /etc/init.d/apache2 restart


http://localhost/jxck/fossil/

無事アクセスできました。

感想

まだ、入れたばかりなので、本質的な部分はあまり評価できません。
しかし、上記の通り導入は楽で、動作も特に問題なくサクサク動いています。


GUIFossilのサイトと同じです、というかこのサイト自体がFossilでしょう。
個人的には割と好きです。
ロゴになってる化石(fossil)?のアイコンも割と可愛いと思うんですがどうでしょう?


機能については、wiki・チケット・リポジトリブラウザ等一通り揃っているし、scmとしてのコマンドは、基本的にはhgと方向性が同じようなので特に問題はありません。


しかし、一つ不安に思うのは、拡張性です。ざっと見たところプラグインの匂いが全くしない。
Fossil自体は実態がCで書かれたsqliteの拡張のような形らしいです。
つまり拡張を書くとすればもちろんCで書くんでしょうね。導入も含めてその敷居は高そうな気がします。


その辺については、こちらにも一部言及が有りました。
steps to phantasien t(2008-02-13)


おそらく、素のままで使うことが前提なんじゃないかと思います。
まあ、bitbucketも機能拡張はできないですし、ここにあるものだけで間に合う場合には、なんの問題もありません。
しかし、TracRedmineに慣れてると、色々機能が欲しくなってちょっと物足りなさを感じるかもしれませんね。


手軽さだけは間違いないので、これまで使ってたTracと並行で、小さいところで少し使ってみたいと思います。


あと、"Fossil"というブランドが有るので、検索しにくい、というのも付け加えておきます。