オープンソースプロジェクトの進め方(が難しい、という話)

私は、Jiemamy Projectというオープンソースプロジェクトを運営している。

ある意味、一人で作っている頃は楽だった。Javaにおけるpublicというキーワードの重みも知らず、複数人によるコミュニケーションのオーバーヘッドも気にすることなく、それはそれは勝手気ままにひたすらコードを書くだけだった。

当初、Jiemamyは「そんなに難しいモンじゃないだろw さっさと作って便利にしようぜww」くらいのノリで作っていたのだが、作れば作るほど色々な問題点も浮上し、勉強すればするほど新しい機能も欲しくなった。人の欲とは恐ろしいものだ。一人じゃ、もう作れない、限界がすぐに訪れた。

Jiemamyは、(私の知る限り)今までにあまり無い考え方を打ち出したプロジェクトだ。ただ語られていなかっただけかもしれないが、「私はこうあるべきだと思う」という理想(Jiemamy開発プロセス)を打ち出し、それを実現するためのソフトウェアを作る、というのが当時も今も変わらない、プロジェクトのスタンスだ。

あまり知られていない考え方であるがゆえ、世間に対する地道なプレゼンテーションが必要だった。Jiemamyを説明する時「まぁ一言で言えばアレのもっと良い奴だよ」という説明ができないから。そして、その度重なるプレゼンが実を結び、プロジェクトに興味を持ってくれる人が数人出てきてくれた。

それが、Jiemamyの共同開発のスタートだ。

続きを読む

課題管理システムの勘所(3)

しばらく間が開いてしまったが。いよいよログインアラートのご紹介。

下記のようなJellyスクリプトを用意し、JIRAが動いているサーバの適当なディレクトリ(JIRAのプロセスからアクセスできる所)に配置する。/var/lib/jira/jelly とかで良いんじゃないかな。

ただし、最初の設定の部分は、環境にあわせて適宜修正すること。

続きを読む

課題管理システムの勘所(2)

http://d.hatena.ne.jp/daisuke-m/20091202/1259769481 の続き。

さて、今回はJIRAにおけるJellyの使い方。技術屋としてこっちを書きたかったので、↑のは前振りだw 前述の「最終ログインから一定期間以上経過している人にアラートメールを送る」という機能をJIRAでどのように実現するのか。まず要件をまとめよう。

ログインアラート仕様

  • 最終ログインからA日経過したら、アラートメールを送信する。
  • 最終ログインからB日経過したら、1時間おきに何度もアラートメールを送信し続ける。

という極悪仕様である。

続きを読む

課題追跡システムの勘所(1)

仕事の現場に、新規で課題追跡システム(ITS)を導入する場合、いくつかの障壁があります。これらは主に、システムを使う人の知識と意識の問題ですが、それを列挙して対策をまとめてみます。

ログインしてくれない

まず超根本。「導入しました」「あっそ」でスルーのパターン。課題を投げても気づいてもらえない。ありがちです。

これはまずトップダウンで「見ろゴルァ」と指令を出す必要があります。これが業務の方針だよ、と。その決定が前提。しかしそれでも習慣にならないウチはみんなITSの確認をしません。ならばシステム的な解決を目論む。

「一定期間ログインしないとアラートのメールを飛ばす」という策に出ます。結構強引な策ですが。ひとまずこれで、全員の意識をITSに向けることができるんじゃないかな。(という試みを現在実行中w)

JIRAでは、Jellyスクリプト*1を使って任意のロジックを実行することができます。バッチ処理なんかに向いてますね。特定のレポートを出力したり、今回のようにメールを飛ばしたり。Javaのコードでやりたいことを書いてみてから、それをXMLに変換*2して、JIRA管理画面のformからsubmitすれば、そのロジックを実行できます。以下のようなイメージ。

<core:new className="java.util.Date" var="now"/>
<core:invoke on="${now}" method="toString" var="str"/>
Date now = new Date();
String str = now.toString();

また、単発実行ではなく、一定時間おきにJellyスクリプトを実行する設定もできます。JIRAの「サービス」という機能ですね。これを使えば、上記のアラートメールが実現できます。

このJellyで作った「ログインアラート」スクリプトは次回紹介。初めて書いたので稚拙なスクリプトだと思いますがw

*1:http://commons.apache.org/jelly/

*2:といっても、自分で翻訳するんですがw

続きを読む

Jiemamyの開発を支えるインフラ

普段このブログではJavaや設計のなど、テクニカルな話しか書いてないなー。そして、なんか毎回「講座」のようなエントリが多い。だもんで、今日は徒然的なお話でひとつ。あくまでエッセイなので、結論とか訴えたいこととか、まとまった身のある文章とか、あんま期待しないで読んでくださいw

元々Jiemamyを作り始めたのは、高効率な開発体制っていうものに高い関心があるからです。Jiemamy Projectが「ソフトウェアの提供」ではなく「開発モデルの提供」を目標に掲げているのもこの辺りから。そして、先日 Eclipse について執筆したのも、この分野への関心の高さからですね。

まぁそんな中で、DBの開発状態を適切にSCMで管理する体制をサポートするプロジェクトとしてJiemamy Projectを立ち上げた。これはあちこちで私が公言しているテーマですね。しかし、これとは別に、Jiemamy Projectには個人的な裏テーマがありまして。これが「最先端の開発インフラやOSSをふんだんに使った開発の実践」です。

実務だとフレームワークはこれ使えだ、OSSは使うなだ、それはもうありとあらゆる制約がありうる訳で、そういった制約が一切ないOSSプロジェクトでは、自由に環境を作れるわけです。予算の問題はありますが、近年はOSSでほとんど揃うんですよね。このような環境で開発を推進するノウハウ蓄積*1や、実効性の評価*2、というのが裏テーマです。

以前、コミッタにヒアリングをしたところ、Jiemamyに関わっているモチベーションの一つに、このハイスペックなインフラの元で開発ができる、というものもありました。同じようなことを考えているんですね。個人的にはまだ活用し切れているとは思えていませんが、みんなそこそこ満足しているようですw

さて、そんな開発を支えるインフラには具体的には様々なものがあり、Jiemamyの開発では Eclipse(IDE), Subversion(SCM), Maven(ビルドツール), Hudson(CI), Wiki(GoogleSite*3 ), GoogleGroup(メーリングリスト), Skype(IM), Tugboat.GTD(タスク管理), JIRA(ITS), FishEye(リポジトリビューア), Crucible(コードレビューア) 等*4を利用しています。

JIRA, FishEye, Crucibleについては商用製品になりますが、OSSプロジェクトに対しては無償のライセンスを提供してくれています。というわけで、お金はかかっていません。アトラシアン社には感謝してもしきれない感じです。ありがとうございますw まぁ、Javaアプリケーションサーバを用意しなきゃいけない敷居の高さはありますが。ASPサービスとかしてくれればいいのになーw

余談ですが、先日より私が所属する会社にJIRAが導入されました。キャンペーンなのか何なのか、10ユーザライセンスが1000円だったんすよ。1000円ってw そりゃ買うわ。今まで、ITSとしては Sourceforge付属のもの, Redmine, Trac, JIRA を使ってきましたが、さすが人気の商用製品。使いやすさはダントツです。こんな事言ったらTracRedmine好きな人に申し訳ない気もするけど(汗 まぁ好みは色々です。あくまで個人的な評価ってことでご容赦をw

で、そこに惚れ込んで、開発インフラをアトラシアンシリーズでほぼ固めている地豆ですw が、CIツール(アトラシアンにはBambooってのがあります)だけはHudson使ってます。まぁ、Hudsonのコミッタ id:cactusman が直接サポートしてくれるってんなら、そのメリットは大きいでしょう。ということで。この活用方法は、id:cactusman のブログでちょいちょい掲載されていますので、そちらにお任せ。ちなみに、彼が勉強会等で話す事例として地豆がよくとりあげられていますw

課題管理とタスク管理、つまりJIRAとTugboat.GTDですが。利用形態がカブるインフラに見えると思います。が、Tugboat.GTDのコミッタに聞いたところ、この2つは対立するインフラではなく、共存して相互補完する関係にある、とのことでした。なんとなくは分かるんですが、上手く活用し切れてはいない気がします、自分。タスクの粒度の話を以前聞いたのですが、その辺り上手く説明できないので、Tugboat.GTDのコミッタである id:kacchi123 や @yousukehara*5さんの解説に期待しておきますw

という恵まれた環境でOSS開発できています。いぇーい。という話でした。

*1:ただインフラを用意するだけで活用できる訳ではない。

*2:最先端のインフラだからといって効率が良いかどうかは分からない。

*3:wikiとはちょっと違うけども。

*4:上に挙げた以外にも、GoogleDocs, GoogleWave, RememberTheMilkなど、使ったら便利そうなインフラは色々ありますね。

*5:http://yosuke-perspective.blogspot.com/

はてなパーカー欲しい!

はてなパーカー欲しい! ぜひとも。ネイビーのLで。

だが、すごい競争率だなーw はてブ栞・ボールペン・メモ帳セット前もらったんだが、あそこで運を使い果たしてるのではなかろーかw

ソフトウェアエンジニアリング業界の魅力

ブログ読者の方から、メールで質問を頂いた。

メールで返そうと思ったのだが、どうもメアドが消えてしまっているようだ。3度送ったが、返ってきてしまうw 1往復目は届いたのに…。原君、どこ行ってもうたんや…

というわけで、返答はブログに書いてしまう。心当たりの原君(仮名)は、再度ご連絡頂ければ…w (yahooメールって、問題あったりするのかな? gmailオススメっすよ)

この業界の魅力って何ですか?

そうですね〜。ありがちですが、私も「ものづくり(creation)」が出来る業界で働きたかったのでこの世界に入って来ました。

しかし、エンジニア業界にいれば自動的にcreationの仕事が出来るのかと言えば、そんなことはない。漫然と過ごすだけでは、指示された設計を黙々とプログラムに翻訳(translation)するだけの仕事になってしまう可能性も高い。他の人と同じことをやっているだけでは、自分の思い描く仕事はなかなかできないと思ってます。

というわけで、あーだこーだ考えて頑張っている次第。試行錯誤の毎日です。


あと、この業界のもう一つの魅力。それは、異常なほど個人活動の敷居が低いこと。

例えば、医療分野の研究を個人でやろうとなったら、クリーンベンチ等の高価な機器を購入し、バイオハザードや危険物取り扱い関係の申請を役所に出し、1μgにつき数万円する試薬を使って、昼夜問わず活動することになる(自分の専攻であった、生化学系の研究をベースに考えていますが)。つまりまぁ、個人で頑張ることはほぼ不可能な業界だ。

対するソフトウェアエンジニア業界ってのは、PCという安価な設備と、少々の書籍代程度で、全て何とかなる。多くの場合、言語を使うのにも金はいらないし、IDEオープンソースで提供されている。OSまでオープンソースで手に入る世界ですからね〜w

つまり、個人のやる気が「金がない…」という要因に阻害されない。これは凄い事だと思う。ほかの業界で、これほど参入障壁の低いものって少ないんじゃないかな。芸術業界くらいですかね。ソフトウェアエンジニアリングも、ある一面としては芸術なのかもしれないですけどねw