PyCon JP 2015の作り方
こんにちは。メディアチームの今津です。
PyCon JP 2015では、現在「プログラム」「事務局」「会場」「メディア」の4つのチームに分かれて様々な準備を行っています。この連載では、各チームがどのようにPyCon JP 2015を作っていっているのかを、それぞれの目線でご紹介していこうと思います。
第1回は、同じメディアチームの担当であるWebサイトについてご紹介します。
PyCon JP Webサイト開発について
PyCon JP 2015 Web担当の小松です。2015年度版Webサイト開発の裏側について、PyCon JPの作り方ということで紹介していきたいと思います。
Symposionを使用したサイト開発
PyCon JPのWebサイトでは、2014年よりSymposionをforkしたUS PyCon 2014のWebサイトのコードをさらにforkして使用しています。
Symposionは、Djangoを使用して開発されたCMS(コンテンツ管理システム)です。プロポーザル応募などの機能が付いていて、プロポーザルの内容の編集を応募者が行うことができ、レビュワーによるレビュー、採択から掲載までが行えるなど、カンファレンス向けとなっています。
PyCon JPのスタッフは、Pythonに関心が高い人が集まっていることもあり、Django製のこのCMSは打って付けだったと思います。私たちはこのSymposionをさらに改良を加えて運用しており、そのソースコードはBitbucketで公開しています。
2014年の段階で、いくつかの改良が加えられていましたが、今年はさらに来年以降も使い回しが効くようにハードコードを無くす方針で作業に取りかかりました。
機能要望のリストを作る
PyCon JPは前述のとおり4つのチームに分れており、PyCon JPのWebサイトを開発するにあたって、各チームからの要望を集めました。
機能要望は優先度と大まかな期限を一緒にGoogleスプレッドシートで受け付け、それをWebチームでJIRAにチケットとして登録していきました。一度運用されているシステムだけに、改善案も「ここがもっとこうだったら良いのに」といった内容がよく集まっていたように思えます。特に多かったのはやはりプログラムチームからのプロポーザル関連でしょうか。システム的な改修としてはさほど大きくはないものの、プロポーザル応募フォームの項目の整理などは昨年の運用からの意見だったのがうかがえます。
大きな改修としては、次の3点が挙げられます。
- 言語ごとのパーマリンクを作る
- プロポーザルが提出された段階で公開され、レビュー中のプロポーザルにソーシャルボタンで「いいね」などが出来るようにする
- Facebook、Twitterでもログイン出来るようにする
現在これらの機能は改修済みで公開しています。
受けた要望について、開発中の進捗管理、関係各所とのやり取りも基本的にJIRAで行い、必要に応じてSlackで相談したり、毎月一度の作業日に聞いたりという形で進めました。また、Slackや口頭で話した内容については必ずJIRAのチケットにメモを取るようにして、あとで「どうしてこうなったんだっけ?」と言うときに参照するようにしています。
一部の人を除いて、全員ボランティアで、プライベートな時間を使って作業を行っているので極力無駄な時間を取らないための対策でもありますね。
開発フローについて
前述のとおり、PyCon JPのWebサイトはBitbucket上でGitを使ってソースコード管理をしています。そして、JIRAとBitbucketを連携させて、ブランチ名をJIRAのチケット番号にすると該当チケットがひも付くようにしてあります。
開発の基本的なイテレーション
開発する人たちと相談のうえ、git-flowに載せて開発しようということになり、その上で、チケット駆動開発になるようにどういったイテレーションで開発するのかをチームで共有しました。
- 要望をJIRAでチケット化。担当が明確であればその人に、無ければチームリーダーの小松に回す。
- 自分が担当のチケットを受け取ったときに進行中に変更する。
- 自分のリポジトリでfeature branchを切って、作業開始する。
- ブランチ名はチケット番号(HTJ-XXX)にしてJIRAとの連携させる。
- 作業が終わったらdevelop branchへマージする。
- 本家リポジトリにpull reqを行い、チケットを解決にして小松へ返す。
- 解決されているチケットがあったら、小松が確認のうえ、pull reqをマージしてチケットを閉じる。
- もし、問題があったり、関係各所への確認が必要であれば、担当者をその人に回してチケットを再オープンし、解決されるまで 1.~5.を繰り返す。
当初、6.の確認する人をリーダーに一本化したほうが良いのかは少し悩みましたが、確認できる人が回して行くというふわっとした形にすると混乱するのではないか、ということで今の形に落ち着きました。なぜ悩んだかは後述します。
チケットテンプレート
仕様の認識の齟齬をなるべくなくして、開発した機能について「コレジャナイ」といった事が起きないようにPythonプロフェッショナルプログラミング第2版の5章P.116にあるテンプレートを採用しました。テンプレートの中身は以下のようになっています。
3月初旬から4月初旬の短期決戦
機能要望が集まり、さぁ要望を整理しようと言ったのが2月23日のスタッフ作業日で、当初のサイト公開予定は3月中でした。そこから、上述の開発フローが決まったのが3月9日でしたので、かなりの短期決戦となりました。挙がっていた要望の多くは機能改修いうよりは文言修正で済むものが多かったとは言え、次に挙げるようなコアに関わる改修案件もあったので、週一でコアな開発メンバーで集まったりとなかなか濃密な1ヶ月になりました。
- 年度のハードコードを外す
- 内部的にはDB名を決める部分など、システム的に中核な部分もあった。
- CONFERENCE_IDを指定することで、何年度として動いているのかを設定出来るようにした。
- 言語ごとのパーマリンク
- プロポーザルが提出されたら公開機能
- 当初は提出されたら、一度レビュワーが公開しないと公開されないようにしていた。
- 公開の手順が、レビュー通過と紛らわしかったので、提出されたら即公開するよう変更した。
- 新たにレビュー中プロポーザルリストのページを作成した。
さらには年度末/新年度ということで、残念ながらちょうどこの期間中に作業できないメンバーが居たのですが、一般社団法人PyCon JPから1ヶ月間フルタイムで作業依頼されていた、株式会社シリアルゲームズの橋本さん(@yellow844)にはお世話になりました。上述の課題もほとんど彼が開発しています。
かくいう筆者はと言うと、年度末とは関係なかったのですが仕事で抱えてるプロジェクトのリリースが被っていたので、pull reqの確認とマージ、各所との連絡係という点では、ボトルネックになっていたのは言うまでもありません。これがpull reqの確認係一本化についての懸念でしたが、期日についてはSlackのボットに突かれつつ、可能そうな期日に再設定をして乗り越えました。(PyCon JPのSlackには、チケット期限切れを通知するbotが居ます。)
関係各所と言えば、Web公開にあたって機能と同様に重要なのがWebデザインです。デザインについてはデザインチームに依頼しており、何とも助かったのはDjangoのテンプレートを理解した方(@uniqさん)に直接コミットしてもらえたのは大きかったです。
今年のテーマはPossibilities of Pythonということで、「Pythonの可能性」を感じられるWebデザインになっているかと思います。
無事公開!
当初は4月上旬公開の予定でしたが、機能開発、デザインの組み込みを終え、コンテンツの入れ込みを行って、プログラムチームや事務局チームなど他のチームと確認を行い、4月27日にWebサイト公開しました!
これから、このWebサイトを使って、2015年のPyCon JPについて発信、そしてプロポーザルの募集を行って行けたらと思います。今年のPyCon JPもぜひ皆さんで盛り上げていっていただければ幸いです!
まとめ
メディアチームの今津です。このようにしてPyCon JP 2015のWebサイトが完成し、先日無事公開できました。今後もいろいろな情報を発信して行きたいと考えています。
次回は、事務局チームの準備を担当者に紹介してもらう予定です。それでは、次回の更新をお楽しみに!