4回に渡ったPlone Conference 2010 のレポートも最終回となりました。最終回の今回は、4日目と5日目に行われたSprintという開発イベントについてレポートします。
Sprintとは
Plone Conferenceの終了後は通常、2日間の「Sprint」が開催されます。Sprintとは、短期集中型の開発イベントの一種で、元々はアジャイルソフトウェア開発手法のスクラム の中にある、ソフトウェア開発の工程を表す用語から来ています。似たようなイベントとしては、Hack-a-thonや開発合宿などがあると思います。つまり、Ploneに関する開発をみんなで集まって2日に渡って行うというものです。
ちなみに、Plone ConferenceのSprintへの参加は無料です。その代わり、朝食や昼食などは出ません。特に入場チェックなどもないため、Sprintだけに参加することも可能です。
Sprintテーマの発表
Sprintの始めに、各テーマを持っている人(ここでは便宜上リーダーと呼ぶことにします)が「私はこういうテーマに取り組むので、是非一緒に開発しましょう」といったような発表タイムから始まります。特にテーマを決めずに参加している人は、この発表を聞いてどのSprintに参加するかを決めることになります。なお、各Sprintのリーダーは前もって、Plone Conference 2010 Sprint topics のページにSprintのタイトルと内容やゴール、メンバーについて前日までに書き込んでおく形になっています。
今回は、Sprint初日の朝にPlone 4のリリースマネージャーでもあるEric Steele氏(@esteele )が司会となり、Sprintの各テーマの発表が始まりました。各リーダーはどんなことを行うかや協力者の募集をしていました。ここで面白いと感じたSprintはVideo Sprintで、おいしいお菓子と飲み物を準備しており参加者は食べ放題だそうです。モノで釣る作戦です。寺田さんもSprintリーダーとなりテーマの発表を行ったそうです[1] 。
今回のSprintでは、以下のようなテーマがありました。カッコ内はリーダー(と思われる人)の名前です。
その後はチームごとテーブルに別れて、もくもくと開発がはじまります。
Sprintの風景
途中休憩
他の人たちは適当に昼食を取りに行ったり開発を進めていたようです。筆者も開発の環境を用意して進めていたのですが、外に散歩にも行きました。
この日はハロウィン(の1日前)のため、Bristol Zombie Walk 2010 という仮装イベントが開催されていました。偶然その列に遭遇し、大量のゾンビを見ることができました。ゾンビさんたちはみなさん楽しそうです。
ゾンビご一行
筆者のSprint「旧プロダクトのPlone 4対応」
今回のSprintでは、Plone 4で現在動作しないプロダクトのPlone 4対応を筆者自身のテーマと位置づけ、開発を行いました。
初期コードの準備
手順としては、まずZopeSkel を使用して雛形となる空のプロダクトのコードを生成します。
$ zopeskel plone Products.NewProduct
その後、既存のコードをコピーしてひと通りのコードが入っている状態にします。
importするパッケージ変更
次に、importするパッケージで変更になったものを適宜書き換えます。Updating add-on products for Plone 4 を参考にしましたが、すべてが網羅されているわけではないため調べながらの修正となりました。
また、implementsの部分をZope 2形式からZope 3形式に変更することも必要です。
Zope 2形式
__implements__ = ( ATCTContent . __implements__ ,
IATDocument ,
HistoryAwareMixin . __implements__ ,
)
Zope 3形式
from zope . interface import implements
implements ( ATCTContent . __implements__ ,
IATDocument ,
HistoryAwareMixin . __implements__ ,
)
ここまでの修正で起動時のエラーは出なくなりましたが、コンテンツが追加できないところで1日目が終了しました。
ここで、日本から参加した寺田さんと堀田さんに、Sprintでどんな開発をしていたのか等を含め、レポートしていただきましたので、紹介させていただきます。
最初に、寺田さん(@terapyon )自身がリーダーを務めたSprintについてレポートです。寺田さんは3回目のPlone ConferenceとSprintの参加で、今回のSprintではじめてテーマをもったそうです。
「Double byte problems Sprint」(寺田さん)
日本語など多バイト文字に関連する問題についてカンファレンスを通じ、ライトニングトークやオープンスペースなどで行い、最後にSprintで締めるということができました。
「Double byte problems Sprint」では、以下のことを行いました。
Sprintの雰囲気
机がたくさん用意されているため、勝手にどこかの机と電源を使っておのおのが作業をするのが基本ですが、方向性について議論をしている人達もいれば、一人で真剣にノートPCに向かっている人などスタイルは様々です。
出入りも自由ですし、昼食時には仲間と連れだって外に食事に行っていました。私たちも数名で近くにあったショッピングモールにあるアジア料理店に食べに行きました。
3日間のカンファレンスの後と言うこともあり、仲良くなっている人達と話をしたりしながら、それでも成果を出していくところが、すごい会だと思います。
日本語のユーザ名での検索確認
前日のOpen Spaceの時に4.0.1から動作していることを確認しましたが、再度動作確認を行いました。問題なく動作していたので、この問題は解消しているため完了としました。
Ploneサイトのタイトルに日本語を使うとSnapshotが取れない
チケット#10962 Can’t create a snapshot in portal_setup でバグ報告済みの問題について、修正する人がいないため、Plone 5リリースマネージャーの予定であり、「 Ploneサイトを作成する」ページを担当している、Hanno Schlichting氏に説明を行いました。
2人で床に座りデモ形式でバグの内容について説明を行いました。保存されているデータにUnicode文字列型と文字列型(string)で、想定している型の違いにより問題が発生している事を説明しました。ここはZope 2上のオブジェクトのタイトルにもなるため、文字列型(string)とするしかないというのが正解らしく、Hanno氏が担当している「Ploneサイトを作成する」ページを修正する方向でまとまりました。
Hanno氏はチケット番号をiPhoneにメモしていましたが、残念ながら今のところ修正はされていないようです。
i18ndudeとCJK文字
i18ndude は開発したコードやテンプレートの中から、i18n用のPOTファイル(翻訳ファイルのひな形)を生成してくれるパッケージです。Ploneのi18nファイルの管理に使用していますが、アドオンプロダクトを作成するる時にも使えるツールです。
このプロダクトを使用する際に、default文字列(翻訳が存在しない場合に表示する文字列)を抽出する仕組みがあります。コード内のデフォルト文字列をCJK文字にすると、生成されたPOTファイル上の表記がおかしくなるという問題がありました。
2日目のレポートで報告済みですが、この問題は、スペインで働いているRok Garbas氏 が実際に中国語を使いたいという要望を持っていて、その方からの要望でした(彼自身は別のSprintを行っていました) 。
この内容がSprintにおけるメインのタスクになりました。当社の永井と一緒に解決策やコードを追いかけ始めました。また、夕方から、アメリカのカリフォルニアに住んでいるDavid Siedband氏(@siebo )がSprintに合流してくれました。彼とはTwitterを通じて2年ほど前からやりとりがありましたが、会うのは今回のカンファレンスがはじめてです。
David氏とSprint中
中国語や日本語の問題なので、Unicode周りの処理であろうと予想をし、テストをしたりコードを追いかけていました。David氏とのやりとりは英語で行ったのですが、うまく意思疎通が出来ず苦労をしてしまいました(英語の勉強は重要ですね) 。
i18ndudeのリポジトリは、Ploneプロダクトを開発するための公開リポジトリ(collective)上にあり、このリポジトリは多くの人がコミット権を自由にもらえる物で、Sprintに参加している方のほとんどが持っていると思われます。そこで、そこに今回の対応用にbranchを作成し、解決したコードをコミットしようという目標にしました。
初日の夜は、20時頃まで頑張りましたが解決せず翌日に持ち越しとなりました。翌日の現地時間早朝、日本にいる清水川さん(@shimizukawa )とSkypeチャットでUnicodeがらみの処理方法の意見を聞いたりし、また永井さんは宿泊場所でコードを追いかけ解決策を探っていたようです。翌朝会場に着き、永井さんと2人で意見交換を行い、無事コードを修正しテストが通る物が作成できました。ただ残念だったのはDavid氏がその日も合流予定だったのですが、前日夜中に私を飲みに誘うメールを出すほど夜遅くまで飲んでいたようで、2日目に会場に現れなかったということです。
実際の問題点は、ファイルの読み込み時に文字コードにlaten-1を暗黙的に使用してUnicode化する箇所にありました。この部分を、読み込む前に正しく文字コードを判断してUnicode化するように変更しました。
この修正をbranch上にコミットし、i18ndudeのリリースマネージャーであり、このSprintに参加しているVincent Fretin氏(@vincentfretin )に問題解決をしたので確認とリリースをお願いしました。すると、1時間もしないうちにコードのマージをしてくれ、無事リリースされました。i18ndude のChangelogを見るとバージョン3.2.1で問題が解決していることがわかります。
同じ会場にいて意見が聞けたり、リリースのお願いなどができるという場は、非常に有益で楽しい物でした。もちろん、この修正を依頼した、Rok Garbas氏解決した旨を伝え、喜んでもらえました。
続いて、堀田さん(@jhotta )が参加したSprintについてのレポートです。
「Deployment Sprint」(堀田さん)
メインで参加したDeployment Sprintや、また時間の合間にDiazo/XDV Sprint、QA Sprint、Enterprise Rhaptos Sprint等で雑談をしていました。
Sprintに参加する意義
Sprintで得られるモノは実際のプログラミング作業によるソースコードの改善や組織のグローバルな運営方針の策定も重要ですが、年に数回しか会うチャンスがない海外の開発者達とface to faceで関わり、日本でのPloneの利用実態や日本のエンジニアを知ってもらえる最高のコミュニケーション機会だと私は思っています。日本固有の使用環境ではバグが発生しているのに、グローバルな世界ではその問題の重要性や因果関係が理解できないため問題意識が低いということは、実際にface to faceで「なんでそんなにその問題が重要なんだ!?」と再三質問されないと気がつかなかったことだったと思います。
カンファレンスの後に開催されるSprintは、バリバリにプログラムのできる人たちだけのモノでは無く、むしろPloneをベースに何かしたいと思っている人達が世界と繋がるためのオープンなスペースだと理解する方が当たっているのではと思っています。実際、2008年のワシントンDCのSprintで知り合ったAndreas Zeidler(andi)氏とは、今回のカンファレンスでは会場のホテルでツインベッドの部屋をシェアするということもありました。ちなみにandi(@witsch )は、plone.app.blob (画像やファイルをZODBの外に置く仕組み)やcollective.solr (コンテンツの検索にsolrを使用するプロダクト)等の半歩先を行っているプロダクトの開発者です。現在Ploneのframeworkチームに所属し、開発者全体から見ても主要メンバーの一人です。なぜ部屋をシェアすることになったかについては、日本チームの宿泊についてのトラブルがあったためなのですが、そのことについては話が長くなるので関係者を捕まえて直接聞いてみてください。
今回も、私は主たるSprintグループに参加しながら適当に自分の興味のあるSprintにゲリラ的に加わって参加者と話しをしていました。といっても身振り手振りでの英会話です。Sprint参加者の多くが英語圏以外の国から来ていることもあり、お互い多少のインチキ英語でも恥ずかしくない状況です(私の場合も、複数単数型、前置詞、時制はボロボロでした) 。
Deployment Sprintの目的
昨今のクラウド環境へのホスティングの流れを考えると、Ploneにおいても手元で開発したプロダクトやサイトをリモートへ簡単にデプロイ(配置)したいという欲求は日々強くなっています。このSprintでの目的は、いろいろな自動デプロイメントの方法を試し、それぞれがどのような特徴が有るかを把握して、利用に向けての方向性を各自が見いだすことです。また、collective.hostout というデプロイ用のプロダクトに関して、今後の改善の方向性を明確にすることも目的としてSprintが行われました。
主なメンバーの簡単な紹介
このSprintの中心メンバーとしては、以下の人が参加していました。
Deployment Sprintの内容
現時点でデプロイについての要求を実現してくれるPlone関連のツールが、Dylan Jay氏が開発しているcollective.hostoutです。スプリント時点ではソースが少々古かったのでgithubにリポジトリを作成してもらい(collective/collective.hostout - GitHub ) 、Sprint参加者がローカル環境にクローンを作成して実際に動かしてみました。
実際に動作させてみると、collective.hostoutは非常に柔軟なツールであることが分かりました。Ploneのunified installer(全部入りインストーラー)などでインストールしたインスタンスのbuildout.cfg(設定ファイル)に数行の記述を追加するだけで、自分がローカルで使っているPlone環境と同じものをリモート環境に再現できました。
しかし、実際に作業を進めていくとエラーに対する処理が不十分で、エラーを表示して止まってしまうため、Dylan氏に隣に座ってもらい、目の前でエラーの内容を見せてコードを修正してもらいました。個人的見解ですが、collecitve.hostoutはソースの安定性とドキュメント整備という観点では、まだまだ熟成の時間が必要なんだと思います。なお、collective.hostoutの詳しい使い方には関してはcollective.hostout のページを参照してください。
その後は、mr.awsome というAmazon EC2インスタンスをセットアップするスクリプトを使用して、Ploneの入っていないAMI(Amazon Machine Image)を使ってEC2のインスタンスを起動した後に、事前に作っておいたシェルスクリプトでPloneを自動でインストールする方法をテストしていました。このEC2起動時にstartup_scriptを駆使するオプションは、debian & Ubuntu系のAMIに多く採用されており(参考:Automate EC2 Instance Setup with user-data Scripts - Alestic.com ) 、ファイルサイズ16kbまでのシェルスクリプトをインスタンスが受け取って実行してくれるというものです。似たようなことは、RightScale などのクラウドゲートウェイのサーバテンプレートによっても実現できます。しかし、クラウドゲートウェイが提供していないAWS(Amazon Web Services)の機能を利用して、AWSへのPloneのデプロイメントを検討をする場合に有効なツールであると感じました。
Sprintの成果
Deployment Sprintの成果として、collective.hostoutには現時点で下記の課題があり、今後Ploneのリモートデプロイメントの観点から、これらの課題解決に取り組んでいく必要があるということになりました。
rsyncを使用した手元にある開発環境とリモートの本番サーバのデータ移動の高速化
OSを判定する機能の追加
fabric というPythonライブラリに類似した、コマンドラインの採用
fabricのhooks/overridesによってcollective.hostoutの挙動制御性の向上
hostout.ploneでのデータベース(Data.fs, blob)の移行への対応
リモートに持って行ったbuildout.cfgにバージョンを付加し、インスタンスのロールバックに対応
hostout.cloud のAmazon EC2 のマイクロインスタンス対応
ドキュメントとテストの充実
Spirntに参加された寺田さんと堀田さんのレポートは以上です。
成果発表
Sprint1日目の最後に成果発表がありました。各チームごとにどのような成果があったかをリーダーが発表していました。興味深い発表内容として以下のようなものがありました。
plone.app.discussion :画面のリロードをせずにコメントを書き込める機能の実装と、Open Spaceでも話題にしていた画面の一番下まで自動的にスクロールする機能を実装を行ったそうです。
documatation :collective.developermanual の修正を行ったそうです。また、新しいバージョンのリストをメールで送ったので、みんなチェックしてねとお願いしていました。
amberjack :スターウォーズのスキン(見た目を変えるテーマ)を作成したそうです。実用性はないですが、面白いです(画像はこちら ) 。
Doublei byte problems :ユーザ検索は4.0.1でできていたことを確認したという報告がありました。また、タイトルに日本語を入れる問題についての報告を行っていました。
IKS FISE Integration :Ploneのコンテンツをセマンティックス に対応させたという報告を行っていました。
Sprint 2日目
Sprint 2日目も基本的に1日目と同じですが、飛行機の時間がある人から三々五々帰るため、時間の許すかぎり参加するという形式です。筆者は借りていたアパートを片付けて、荷物を持って会場に足を運びました[2] 。
Sprint会場に到着したらスーツケースなどを部屋の隅に置いて開発開始です。どうやら会場のホテルに泊まっている人達は、午前3時頃までSprintをやっていたそうです。どこの国もそういうノリは同じですね。会場にビールの残りが置いてありました。
筆者自身はプロダクトのPlone 4対応の続きを行い、XMLの設定を記述することにより、プロダクトのインストールとコンテンツの追加まではできるようになりました。
寺田さんが日本から作って持っていった「プローンのプロ」TシャツをMikko氏が着ていました。お返しにサルミアッキのリキュールをもらったようですが、まだ飲んでいないようです。このお酒を飲んでみたい勇気のある方は(@terapyon )に連絡してみてください。
「プローンのプロ」Tシャツを来たMikko氏
サルミアッキのリキュール
Sprint終了!Legoland Windsorへ
Sprit終了後、近くのカフェで日本からのメンバーと一緒にランチを食べに行きました。寺田さんが言っていたとおり、ホテルのフロントの人の英語が聞き取りにくく、タクシーを呼ぶのにも一苦労でした。
カフェで昼食にブリトーを食べみんなで記念撮影をし、ここで他のメンバーとは一旦お別れ。ホテルに戻って時間通り(すばらしい!)にやって来たタクシーに乗り、Bristol Temple Meads駅へと向かいました。Bristolを後にして、今回の旅行のもう一つの楽しみであるLegoland Windsor へ向かいました。
日本からの参加メンバー
Bristol Temple Meads駅
Legoland Windsorの入り口
Plone Conferenceに参加して
こうして、Plone Conference 2010への参加が終了しました。Spritは、3日目までのConferenceと違ってもくもくと開発するイベントですので、レポート内容も大まかなものになりましたが、いかがでしたでしょうか。
最後に、寺田さんと筆者の感想を通して、今回のレポートのまとめとさせていただきます。
寺田さんの感想
3回目の参加になるConference付属のSprintでしたが、はじめてテーマも持ちましたし、他の方の要望への対応もできましたので非常に満足しています。過去2回も、日本語バグの解決に向けて情報収集から解決策を探ることを行ってきました。今年はどんなテーマにしようかと悩んでいたのですが、心配するまでもなく良いテーマと巡り会えて良かったと思います。Conferenceに参加する重要な目的の一つになっているSprintへの参加ですが、できれば毎回参加したいとさらに思いを深めました。
筆者の感想
2回目となるPlone Conferenceの参加で、前回よりは他の人と話しをする機会もあったかなと感じています。そうは言っても絶対的な英語力が足りていないため、きちんと勉強しないといけないなと強く思いました。また、昨年のConferenceでは、その日のうちにレポートを自分のサイトに掲載していましたが、その内容は箇条書きのメモをそのままアップしたようなものでした。今年は記事として掲載することで、Plone Conferenceで受け取ってきた情報を、きちんと文章としてまとめることができたのは、非常に意味があったと思います(少し時間がかかり過ぎてしまいましたが) 。
海外のカンファレンスに参加することは、旅費や日程の確保、言葉の問題など様々な困難がありますが、それを補って余りある意義があるはずです。世界中で様々な技術系のカンファレンスが開催されていますので、ぜひ自分が興味ある分野のカンファレンスに参加してみてください。
「海外はちょっと」という方には、来年1月29日に筆者もスタッフとして参加する「PyCon mini JP 」が開催されますので、ぜひこちらのイベントの参加を検討してみてください。