FOSDEMみたいなのを日本でもやりたい!

デブサミで岩切さんにアイディアを売り込んだのですが、もっと多くの人に伝えるためにここにも書きます。


毎年2月、厳寒のベルギーはブリュッセルにて開かれるFree and Open Source Developer's European Meetup (FOSDEM)というカンファレンスがあります。ヨーロッパ最大のオープンソースのカンファレンスです。2008年と今年2012年に行く機会がありました。このカンファレンスは非常にユニークで、4年振りに行ったらさらに独自色が更に濃くなって魅力的になっていました。こういうのを日本でもやりたい、と思うので、紹介します。

その1:OSSのブース

FOSDEMの独自色その1は、展示ブースが全てオープンソースプロジェクトや関連団体の点です。ベンダーのブースは一つもなく、スーツを来たビジネスマンがいるブースもありません。その代わりに、圧倒的な数のギーク達が勢ぞろいし、時には子供連れのおじさんや学生がブースにいる時もあります。Jenkinsブースの隣のIllumOSにも子供がいて、彼が写真を撮ってくれたり「Jenkinsって何?」と質問してくれたりしました。プロジェクトでお揃いのTシャツを着たり、ビール瓶にプロジェクトのステッカーを貼って一本一ユーロで販売したり、お祭りのような雰囲気です。ブースに半田鏝が置いてあるような組み込みLinuxからJenkinsのようなJavaプロジェクト、X.orgMozillaなどあらゆる種類のプロジェクトが来ています。商用製品やサービスの紹介はさせない、というポリシーのようです。しかし、IllumOSにNexantaの人が来ているように、会社勤めでOSSに関わっている人達はたくさんいるようです。

その2:小規模トラック

FOSDEMの独自色その2は、devroomの存在です。FOSDEMは期末試験が終わった週末の大学で開かれるので、100人位収容の小型の教室がたくさんあります。この小型の教室が一つ、テーマ・プロジェクトに割り当てられます。例えば、X.org devroom、open Java devroom、configuration management devroomといった具合です。このdevroomは小さな発表会場ですが、テーマに沿った濃い内容の発表が行われます。このdevroomが10個位同時進行で、日本風にいうなら各コミュニティ勉強会の同時開催のような雰囲気になります。内容も技術的な話だけではなくライセンスの話や、コミュニティに人を呼ぶ工夫、のように多岐に渡っています。

その3:溜まり場

FOSDEMの独自色その3、Delirium Cafe。Cafeという名前ですが、中身はパブです。ベルギーはビールで有名ですが、ここにはベルギービールを初め世界中のビールが勢ぞろいするビール専門店です(日本のものも銀河高原ビールとかが置いてありました)。かなり大きなこのパブが、FOSDEM期間中は事実上FOSDEMの貸切になります。特に前夜祭では、ヨーロッパ中から現地入りするギークが一同に集結し、山手線の満員電車もかくやと思わせる、立錐の余地もない大混雑になります。これが一晩中朝まで続きます。まったくの初心者が行くと壁の花になってしまうかもしれませんが、コミュニティでアクティブな人を何人か知っていれば、その人について廻っているだけで一晩楽しく過ごせます。あまりの喧騒で会話はほぼ無理ですが。Jenkinsプロジェクトでは、ヨーロッパのコミッタが6-8名集まり、なんとかテーブルを占拠してガヤガヤとやりました。JRubyのCharlesが通りかかれば挨拶し、Vagrantの人が通りがかれば挨拶し、という具合です。これがとても楽しい。



FOSDEMにはこれ以外の小道具もたくさんあります。例えば、教室の幾つかにはアジェンダが割り当てられておらず、当日に1時間単位で貸し出され、その場で突発的に発生したミーティングに使われます。Jenkinsもこれを使ってUIに関する議論をし、飛び入りでユーザーの人が参加してくれました。Twitterなどのリアルタイム通信の仕組みが出来てから、こういった即興の集まり毎が簡単になったように思います。


カンファレンス自体も無料で、なんと登録さえ必要ありません!参加者がTシャツを購入してその売上と、スポンサーからの収入によって運営されているようです。スタッフもほとんどは学生のボランティアで(どこからあれだけの数のボランティアを集めてくるのかは謎です)、呼び出しもM/Cもなく、またスポンサーをできるだけ集めなくて済むように、全体を安くあげようというポリシーが感じられます。


今年は4000人規模だったと誰かが言っていたので、その規模が推しはかれるのではないかと思います。


僕は今年デブサミに初めて参加して、あちこちのコミュニティのブースが出展されているのにいたく感動しました。また、FOSDEMにはない、企業の展示とオープンソースを混在させているのもユニークで素晴らしいです。あの感じを失わずに、ここに挙げたFOSDEMのいいアイディアを取り込んでいけたら物凄い事になると思うので、よろしくお願いします>関係者の方。

100人のプロが選んだソフトウェア開発の名著

デブサミ10周年の記念企画として、「100人のプロが選んだソフトウェア開発の名著」に参加しました。100人がそれぞれに一冊の本を推薦するという内容です。

100人のプロが選んだソフトウェア開発の名著 君のために選んだ1冊

100人のプロが選んだソフトウェア開発の名著 君のために選んだ1冊

僕自身、昔はコーディングに関わる本やAPIのリファレンスなどを買った記憶がありますが、インターネットのせいか、ここ数年はそういう紙の技術書からは遠ざかっていました。この本でお薦めされている本も、そういう時代背景を反映してか、テクノロジーの本だけでなくて、自分の思想や思いを伝えるための象徴としての一冊をあげている人が多いように思いました。(中国語や英語を勉強する本を挙げて、「世界で通用する為には...」みたいな話とか、僕自身のデブサミでのLTでのテーマと同じ意図ですよね。)


そういう意味で、ここに挙がった100人の問題意識や思いの原点が垣間見えて、そういう読み方が面白いです。(翔泳社さんの狙いは勿論ここで挙がった本を買ってもらうことだと思うのにごめんなさい)


だが、しかし!闘うプログラマを誰も薦めていないというのだけは納得できない!

闘うプログラマー[新装版]

闘うプログラマー[新装版]

もっとも、今の人達にとってのWindows NTは僕にとってのMSXみたいな感じで、個人的な思い入れのない歴史の1ページに過ぎないので、読んでも面白くないのかな...。

来週から日本に行きます

2/15から日本へ行きます。例によって色々な用事や発表がてんこ盛りです。

  • 2/16にはデブサミで「あの人の自分戦略を聞きたい!」というLT大会に参加します。自分戦略なんていう大したものはありませんが、おっさんぽく若者に小言を垂れろ、という意味だと理解したので、普段から思っている情報発信について話そうと思います。関連の事は以前にも書きました。
  • 2/17には同じくデブサミで「Continuous DeliveryとJenkins」という内容で話をします。トラックの調整をなさっている和田さんと相談させていただいて、Jenkinsの使い方とか機能みたいな具体的だけど細かい話をするのではなくて、理論というかテーマというか、風呂敷を広げた大きな話をしたほうがよいという事になったからです。これは以前のJJUGでの発表の発展版です。
  • 2/21は楽天さんでJenkins勉強会です。今回はJenkins-as-a-ServiceであるCloudBeesのDEV@cloudについて、宣伝にはならないようにその実装や工夫を紹介したいと思います。いつも運営を一手に仕切ってくださっているikikkoさんには本当に頭が上がりません。現在のところもう満員ですが、第三次募集があるという噂も...?
  • 2/22には豆蔵さんと一緒に、豆ナイトでJenkinsのイベントがあります。僕の中では、Jenkins勉強会では既に使っておられるビルド職人さん向けの高度な話を、豆ナイトでは初めての方向けの導入・入門の話をしようという風に棲み分けています。
  • 2/23は同じく豆蔵さんにて、Jenkins トレーニングをやります。まだ満席ではないので、引き続き参加者を募集しています。
  • 2/24は丸山先生にお誘い頂いた、JJUGクラウド研究会のイベントである第三回「エンタープライズ・クラウドの現在」CloudBees Platformについてしゃべります。これはJenkinsだけの話というよりも、むしろPaaS関係の話がメインになります。


FOSDEMSCALE10xで好評だったステッカーをいっぱい持っていくので、ぜひステッカー目当てに参加してください。この他にも、あちらこちらに個人的にお伺いすることになっていますが、「うちにも遊びにきてよ」という方がおられればできるだけなんとかしたいと思っています。


そういうわけで、皆様、よろしくお願いします!

英語コミュニティに発信しよう

今日、San FranciscoでJenkinsコミュニティの人達と飲んでいて、ふと日本語コミュニティの話になりました。聞いていて「全くその通りだ!」と思ったのでその場で急いでtweetしたのがこれです。でも帰ってきてみて、これだけだと多分伝わらないと思ったので改めてブログにすることにしました。



Jenkins日本語コミュニティの活発さと規模は常々こちらでも宣伝しているのですが、やっぱりヨーロッパ・アメリカ圏のコミュニティの人達には言葉の壁があってどうしても見えない存在になってしまっています。それでいいと思えばそれでもいいのですが、他方で、プロジェクトミーティングがヨーロッパ・アメリカ時間になってしまったり、Jenkins User Conferenceをどこでやろうかという時に東京は候補に上がらなかったり、色々損することが多いのも事実です。


そこで@jenkinsciの中の人Tylerが言っていたのが、じゃあ誰か日本語コミュニティの人にその活動を英語圏の人に紹介してもらってよ、と。今までは、僕も本家のニュースを日本語に翻訳して公開、みたいなのは考えていたのですが、その逆は考えたことが無かったので目から鱗でした。そう言われてみれば、じつはもうすでに発信できるコンテンツも沢山あるじゃないかと。Advent Calendarを週一で英語にするだけでも半年間いけますよね。Jenkins本の売れ行きの紹介とか、O'Reilly カエル本の翻訳の予定の紹介とかもできるし、勉強会の報告もできるし。


全部翻訳するのは面倒くさいならば、2〜3のハイライトを見繕って翻訳して、残りはGoogle Translateへのリンクを集めるとか、色々かけられる手間にあわせた方法があると思います。技術系Adcent Calendarはわりと日本独自のものだし、そういう日本の技術者文化に関する発信とかもできそうだし、これって色々と面白いんじゃないかと夢が広がりました。



既に池田さんが立候補してくださいましたが、そういうわけで、こういうのに協力しても良いという方をぜひもう何人か募集します。http://jenkins-ci.org/ にアカウントを作って本家のニュースとしてポストできるようにするあたりから始めるのがいいかなと思っていますが、展開次第では次回のJenkins User Conferenceで日本のコミュニティの活動報告をしたり(訪米もよし、ビデオもよし)、色々ありえると思います。英語が多少できて、IRCで英語で会話するのが苦にならなければなお素晴らしいです!

Jenkins X'mas プラグインを改善しました

@kiy0takaさんがバイナリの実用性とソースコードの実用性が素晴らしく乖離したJenkins X'masプラグインを書いてくれました。


このプラグインは非常に簡潔に書かれていながら幾つかのあまり使われない拡張ポイントを使っていて、プラグイン開発者には非常に参考になる逸品に仕上がっています。そこで、Jenkinsコミュニティの互助精神と他人の褌プログラミングの心を紹介するために、またクリスマスにいつもLEGOをリクエストしても嫁さんが買ってくれない僕も、早速pull requestを送って新しい機能を追加してみました。


この変更によって、以下のように、「爆発しろ」のテキストに加えてクリスマス中止のお知らせが表示されます。また、「爆発しろ」はとあるYouTubeビデオへのリンクになります。

このように、最近のバージョンのJenkinsではコンソール出力にマークアップを利用して多くの情報を付加することが可能です。活用してみてください。また、このようにJenkinsプロジェクトではお互いのプラグインをよってたかって改善しあう文化があります。皆さんもぜひ他人の始めたプラグインを改良してみてください。

プラグインを再起動無しでインストールする

今日からJenkins アドベントカレンダー企画が始まります。今日から25日間、コミュニティの皆さんで一日一人一つの記事を順番に書いていくという企画です。そのトップバッターになるこの記事では、今週末登場予定のJenkins 1.442での新機能、「再起動しないでプラグインをインストール」を紹介しようと思います。


後述するように内部的には色々大変なことがあるのですが、ユーザーの方には簡単に使えます。まず、今まで通りにプラグインの管理から一覧を表示し、インストールするプラグインを選びます。画面最下部にスクロールすると「Install without restart」ボタンと「Download now and install after restart」ボタンの2つが出ます。前者が再起動無しでインストールするモードで、後者が今までのように再起動後にインストールをするモードです。暫くしたら後者のボタンは削ってしまってもいいかなと思っています。





左のボタンをクリックするとダウンロード&インストールが始まります。





インストールが完了すると、今までなら再起動するところなのですが、今回からは「Go back to the top page」をクリックしてさっさとトップページに戻ってしまって構いません。インストールしたばかりのプラグインがもう使えるようになっているはずです。簡単でしたね。

アップデートは?

残念ながら、内部的な設計の制約上、この方式を使って既にインストールされたプラグインをアップデートするのは難しいと思います。詳細は内部的な話のところで説明します。

アンインストールは?

同様に、正確な意味でのアンインストールを実現するのも難しいと思います。ですが、ある種の限定的なものなら不可能ではないかもしれないと思っています。既にプラグインが使われているジョブの設定には再起動まで影響を及ぼさないけれども、設定画面には表示されなくなる、みたいな感じで。

内部的な話

歴史を遡ること約400リリース前、1.44でプラグインがサポートされた時からずっと、Jenkinsではプラグインのインストール後には再起動が必要でした。Jenkinsはスタートアップ時にプラグインに対して色々な計算をして、プラグインに関するimmutableなデータ構造を作っていくわけです。このあたりの処理がそもそもは逐次的に書かれていたので、これを動的に実行できるようにするのは結構面倒くさい仕事でした。アップデートセンターを書くとか他にプライオリティの高い作業があって、動的インストールまではなかなか手が回らなかったわけです。


その後Jenkinsの起動速度の改善のために、Jenkinsの初期化を細かいタスクに分解し、その依存関係をトポロジカルソートして並列に実行...みたいな機能が入ってから、追加の初期化タスクを実行するのが現実的になってきました。その時実装しておけばよかったのですが、その後、Guiceを使って内部的にコンポーネントを結線するようになると、動的にコンポーネントを追加するのがまた難しくなってしまったのです。現在のバージョンでは、Guiceのchild injectorを使って追加されたプラグインから貢献された実装をホストするようにしています。これでほとんどのプラグインはごまかされてくれています。


では、なぜアップデートは難しいのでしょうか?Jenkinsの設計では、通常のデータベースアプリケーションとは異なり、モデルオブジェクトはメモリ内に長期間とどまるように設計されているからです。このデザイン自体は自分は気に入っているのですが、欠点の一つとして、動的に定義を変更するのが難しいことになってしまうというわけです。Javaではメモリ上のインスタンスをリロードすることはできないので。なので、これはHAみたいな方向で解決するのがいいのかなと思っています。

まとめ

そんなわけで、内部的には結構頑張ったので、ぜひこれを使って、どんどんプラグインを試してやってください。

プラグインをコミュニティにホストするには

オフラインで質問を受けたのでここに書きます。


公開されているJenkinsのプラグインhttp://github.com/jenkinsci/ にできるだけ集めてメンテしたいと思っています。 これによって、オリジナルの開発者が去っても他の人が開発を継続できますし、コミュニティの他の人が開発に参加するのが容易になるからです。では、どうやってリポジトリを作ったらよいでしょうか。


一つ二つしかプラグインを書く予定がない場合には、メーリングリストGitHub IDとプラグインの名前を言って、既存の開発者に必要な操作をやってもらってください。これが一番簡単です。


他人任せではなく自分で作れるようにするためには、もうちょっと面倒な操作手順を踏む必要があります。でも、これをやってくれる人が一定数以上いないと新しい開発者が困ってしまうので、われこそはと思う人はよろしくお願いします。


GitHubの仕組みでは、リポジトリを作成するには管理者権限が必要なのですが、Jenkinsプロジェクトの「コミュニティに参加する敷居を下げる」のモットーに沿って、誰でもリポジトリを作れるように、JenkinsプロジェクトではIRC上のボットを利用しています。

  • プラグイン開発者はIRCチャンネル #jenkinsにたむろしています。これに参加してください。常駐する必要はありませんが、英語が苦でないならば、常駐していると楽しいと思います。コミュニティに参加する取っ掛かりがより増えます。
  • IRCに参加したら、ニックネームを登録してください。これが認証に使われます。
  • #jenkinsチャンネルで、「I'm a plugin committer and I'd like to have voice to be able to talk to jenkis-admin」とか何とか言って、「ボイス」フラグをもらってください。kohsukeがいればkohsuke宛に送ってもらえればすぐやります。
  • ボイスフラグがつくと、jenkins-adminボットに命令が出来るようになります。コマンド一覧を参照してください。このボット経由で既存のリポジトリをjenkinsci上にフォークしたり、新規のリポジトリを作成できます。


以上で完成です。


ボットを使っている理由は、リポジトリに対する操作がみんなに見えるようにすることでabuseを避けるためなのですが、よく考えると、OAuthかなんかでGitHubと認証すればウェブアプリとしてもできそうですよね。「誰かがあれこれこういう操作をしているよ」という記録がリアルタイムにIRCに送られれば透明性も確保できそうだし。時間があれば書いてみたい気がします。