mrubyのdeb Packageを作ってみた

今でこそUbuntuを使っていますが、それまではずっとRedHat系のディストリビューションを使っていたので、RPMを作ったことはあったけどdeb Packageを作ったことはありませんでした。
そんなところ、つい先日、mrubyがGitHubに登録されました。
まだ日が浅く、deb Packageも存在していなさそうだったので、ここを参照しながら試しに作ってみました。

$ git clone https://github.com/mruby/mruby.git
$ mv mruby mruby-1.0.0
$ cd mruby-1.0.0
$ cat $PATCH
diff --git a/Makefile b/Makefile
index 5598868..b6f1ec1 100644
--- a/Makefile
+++ b/Makefile
@@ -58,6 +58,10 @@ endif
 ALL_CFLAGS = -Wall -Werror-implicit-function-declaration $(CFLAGS)
 MAKE_FLAGS = --no-print-directory CC=$(CC) LL=$(LL)

+# installer
+BINDIR = $(DESTDIR)/usr/bin
+INSTALL = /usr/bin/install
+
 ##############################
 # generic build targets, rules

@@ -109,6 +113,11 @@ $(EXTS) : $(EXTRB)
 $(OBJM) : $(MSRC)
        $(CC) $(ALL_CFLAGS) -MMD $(INCLUDES) -c $(MSRC) -o $(OBJM)

+# install
+install :
+       [ -d $(BINDIR) ] || mkdir -p $(BINDIR)
+       $(INSTALL) -m 0755 bin/mruby bin/mrbc $(BINDIR)
+
 # clean up
 .PHONY : clean
 clean :
$ patch -p1 < $PATCH
$ dh_make -e [メールアドレス] -p mruby_1.0.0 -s --createorig
$ rm debian/*.ex debian/*.EX
$ dh_installdirs
$ dh_installdocs
$ dh_installinfo
$ debuild

結構簡単にできるんでびっくり。

自分流工数の求め方

  1. 機能要件を決める。この時は必要最低限の機能に絞る。
  2. 正常系と高頻度の異常系の実装にかかる時間を決める。異常系でも運用回避できるものは除外。このとき発揮していい実装力は30%〜50%程度。全力はダメ。素朴なアルゴリズムで、最適化しないのを前提に。
  3. 2.で求めた時間から日数を求める。但し作業時間は最大でも8時間/日。残業、休出は想定外事象の対処に充てるため、考慮に入れてはいけない
  4. 3.の日数を2〜3倍し、これを納期とする。

ここまでを、必ず前倒しで完了する。遅くとも納期までの半分の日数で。そして期日まで次の工程をぐるぐる回す

  1. デプロイし他と結合、フィードバックを得る。
  2. フィードバックを取り入れ、リファクタリングし、対応できる異常系を拡大し、保守性を高める。
  3. バージョン管理システムを使って、正常に動作する状態でコミット。

要は、機能実装を工期の前半に集中させ、必ず納期を守る&後半はどこで開発が止まってもリリースできるようにしておく、ということ。

今のところこれでうまくいってます。もっとも、幸いにも今のプロジェクトマネージャが結構スケジュールに余裕をとってくれる&開発スコープを絞ってくれる人で、常に余裕をもったスケジュールになっている事も大きいと思いますが。残業も多い月で40時間程度、休日出勤は4半期に1回あるかどうか。