5月20日(金)にNTTソフトウェア様の会場をお借りして、6名の発表者と80名超の参加者と共に「第3回Jenkins勉強会」を開催いたしました。本稿では、今回の勉強会の模様をレポートします。
今回のテーマは「LL言語プロジェクトにおけるJenkinsの運用について」です。Python, PHP, Rubyなど現在運用中の方々による事例報告やお役立ちプラグイン活用術などを発表していただき、発表中やその後の懇親会で活発な意見交換が行われました。
なお、当日のUstreamをはじめ、各発表者の発表資料や参加者の感想ブログはJenkins Wikiにまとめられています。本レポートの補足としてご参照ください。
Jenkinsプロジェクトの現状報告
当初の発表スケジュールには含めていなかったのですが、前回の勉強会以降でJenkinsを取り巻く状況が変わっていたため、Jenkinsプロジェクトをリードする川口氏にJenkinsプロジェクトの現状を報告をしていただきました。
プロジェクトの状況
数ヶ月前にHudsonからフォークされたJenkinsですが、フォーク後もますます活発に開発が行われています。これは、コミット件数や1リリースあたりの解決チケット数からも統計的に裏付けされています。また、開発者の大多数がJenkinsに移動しており、使用頻度が高いトップ25のプラグインもそのほとんどがJenkinsに移動してアップデートが加えられています。
ユーザ側の動向を見ても、ユーザMLのトラフィック数やダウンロード数はHudson側のそれと比較して数倍となっています。また、ApacheやJRuby、Scalaといった著名なプロジェクトもHudsonからJenkinsに移行しています。
Oracle、HudsonをEclipseへ
上記のように、Jenkinsプロジェクトは想定以上の成功を収めていると言えます。この状況を踏まえて、OracleはHudsonをEclipseへ移管することを発表しました。ここで、議論の対象として上がってくるのは、「HudsonとJenkinsは再度合流するのか?」という点です。
同種のプロジェクトが複数ある場合の問題点は、開発リソースや情報の分散です。上述したように開発者の大多数はJenkins側に移っているため、開発リソースの分散という点は率直なところそれほどの問題とはなっていないという認識があります。ただし、ユーザ側からすると複数プロジェクトがあるとどちらを使ってよいかを悩むため、合流を望む声が多いのも事実です。
プロジェクトを合流することが目的でHudsonをEclipseへ移管したわけではないとOracle側は明言しており、今までの経緯も踏まえるとただちに合流することは困難でしょう。ただ、Hudson/Jenkinsを利用しているユーザのことも考慮した上で、Eclipseの下でプロジェクトの合流を果たすための条件や、Apacheへの移管も含めたその他の選択肢を現在探っているところです。
RubyによるJenkinsプラグイン開発
Jenkinsプロジェクトの現状報告に引き続き、RubyによってJenkinsプラグインを開発できるようにする取り組みについて、川口氏から発表を行っていただきました。
もともとこのプロジェクトはCharles Lowell氏が推進しているもので、その意図としてはRuby開発者がJavaを意識することなくRubyの知識だけでJenkinsを拡張できるようにしたいというところからきているそうです。発表内でデモが行われ、Rubyで記述されたコードが実際に動作している様子を見ることができました。技術的に困難な箇所は大体解決できており、今後は実用化に向けて必要な実装や調整を加えていく段階だということです。
このプロジェクトが実用化されればRubyのユーザ層をJenkinsの開発者層に取り込むことができ、そこからRuby開発に便利なプラグインが作成されて、Rubyユーザにとってより一層魅力的な環境が整うことになります。さらに推し進めていくと、Pythonなど他のスクリプト言語でも同様に拡張できるでしょう。Java開発だけでなく、あらゆるプロジェクトにおいてJenkinsが効果的に活用されることが期待されます。
Jenkinsと一緒にTracプラグイン開発 - UT/IT自動化のコツ -
NTTデータの和田氏からは、Jenkinsを利用してTracプラグイン開発のタスク自動化を推進している事例が紹介されました。
和田氏が業務で携わっているTracプラグインの開発では、機能はないがリリースできる状態から始める”ゼロ機能リリース”を念頭に置いて開発を進めているとのことです。ゼロ機能リリースを実現するために、ソースコードやSeleniumでの検証を含めたテストコード一式を雛形として用意しておき、その雛形をコピーすることによって即座に動くものがリリースできるようになります。合わせて、その状態で実行できるJenkinsのジョブを用意しておけば、テスト実行からデプロイまで自動化できるという説明がされました。
ゼロ機能リリースを実現できればプロジェクトの初期から動くものを提供できるため、開発者・ユーザ双方に安心感を与えることができます。ただし、動いているソースコードに対する変更は避けられないため、変更による影響を早期に検知するためにCIが必須となります。ゼロ機能リリースにJenkinsを組み合わせることにより、ユーザにとってより価値が高いものを提供できるようになるでしょう。
「これで君のインテグレーションは――始まりも、終わりもなくなった」~ RailsプロジェクトでふつうにJenkins ~
高橋氏と柴田氏からは、所属している永和システムマネジメントでのCIへの取り組みについて、Ruby on Rails3時代のJenkins利用事例を通じて発表していただきました。
永和システムマネジメントでは数年前から複数のCIツールを使用してきましたが、現在はJenkinsとRails3製のBigTunaを併用しているとのことです。実際の開発では、IRCやGitリポジトリ、Rubyアプリケーションのクラウドプラットフォームであるherokuと連携して、テストの実施やステージング環境へのアプリケーションのデプロイをJenkinsで行っているということが紹介されました。高橋氏たちがJenkinsを使用した感想は、BigTunaと比較して動作が安定しているもののCI環境を整えることが大変だと感じているようです。
発表の最後に、CIに取り組むに当たってスローテスト問題とブラウザが絡むテストの環境構築について悩んでいるので知恵を貸してほしいという旨の問いかけがありました。これらは、CIを推し進めていくと直面する問題です。引き続きJenkins勉強会の題材として取り上げ、ノウハウの共有を図っていきたいと考えています。
PHP開発でのJenkins
株式会社ドワンゴ所属の山城氏からは、"モテるJenkins女子力を磨くための4つのプラグイン"と題して、PHP開発に関する静的コード解析系プラグインの紹介を氏独特の語り口で行っていただきました。
山城氏が参画したPHPプロジェクトでは1ヶ月半ほど前からJenkinsを導入しており、その際に以下の4つのプラグインを導入したそうです。それぞれ、重複コードを検出するPHPCPD、コードの問題点を検出するPHPMD、ユニットテスト/カバレッジ測定ツールのPHPUnit/Cloverです。上記を含んだJenkinsジョブ設定のテンプレートは、次のサイトで公開されているものを参考にしたとのことでした。
Template for Jenkins Jobs for PHP Projects
こういった解析ツールは早期から継続的に実行することによって、プロジェクトの状態を把握して健全な状態に保つことができます。残念ながら来場した参加者のほとんどがPHPでJenkinsを使ったことがないため、PHP開発のノウハウを参加者と共有したいという山城氏の望みは叶いませんでしたが、これからPHPでJenkinsを利用していこうという方には最初の一歩として有用な発表となったかと思います。
Rubyで簡単にremote access apiを実行する
今回唯一のLT発表では、第1回Hudson勉強会でも発表していただいた牧氏からRemote Access APIについて発表していただきました。
Jenkinsでは、REST形式でHTTPリクエストを受け付けるRemote Access APIを提供しており、APIを用いてジョブの作成/コピーやビルドの実行などが行えます。さらに、Remote Access APIをRubyから扱いやすいようにライブラリ化したものがhudson-remote-apiとして提供されており、発表内でこのライブラリを用いてデモが行われました。また、APIの応用例として、GithubクローンであるGitoriousと連携してマージリクエストを自動で処理する例が紹介されました。
発表のまとめでも述べられていたように、Remote Access APIを用いると定型化された処理を自動化することができます。手動で行っていた操作を自動化することによって作業ミスを無くせると同時に、うまくAPIを活用することによって開発フローの効率化を従来より一層推し進めることができるでしょう。
最後に
今回の勉強会を通じて、筆者が感じたことが1つあります。それは「情報は発信している者のところに集まる」ということです。
「こういった勉強会で、自分は発表できるレベルではない」と考えている方も多いでしょう。ただ、当然のことながら発表者も完璧ではありません。特に、内部挙動を把握したり拡張したりしてJenkinsを使いこなすためにはJavaをある程度理解しておく必要がありますが、今回のテーマであるLL言語をメインとしてる方々にとっては難しいこともあるでしょう。実際、今回の発表者の方々も多かれ少なかれ相談したいことを抱えており、発表中で相談事に対しての助言を求めていました。
不安に思ったことでも、その旨を発表して情報発信すると識者の方からアドバイスをもらえます。ましてや、Jenkins勉強会のように、リードコミッタから直接アドバイスをもらえる機会はそうそうあることではないでしょう。通常発表は敷居が高いと思う方は、5分間のLT発表から始めてもいいかと思います。
Jenkins勉強会では、参加者と共に熱意ある発表者を求めています。相談事を持ち込むといった感覚で構いませんので、発表したいという方はメーリングリスト等からコンタクトを取っていただければ幸いです。