YAPC::Asia Tokyo 2013 スペシャルレポート

YAPC::Asia Tokyo 2013 2日目レポート[更新終了]

この記事を読むのに必要な時間:およそ 12 分

handlenameさん「チャットサービスの運用事例」

handlenameさんによる,Lobiというサービスの開発・運用について紹介するセッションでした。Lobiは元はNakamapという名前のサービスで,スマートフォンでゲームをしながらチャットをすることに特化したサービスです。APIやSDKが公開されているのが特徴で,他の開発者は自分の作るアプリケーションにLobiを組み込んで連携することが可能です。

最初に,開発体制について説明がありました。Lobiの開発はカンバン方式で行なっており,ホワイトボードにタスクを張り出すことで見える化をはかっているそうです。レビューはpull requestベースで行なっていますが,レビューの粒度が大きくなり過ぎたり,一人にレビューが集中しないように調整しているとのことでした。

また,Lobiの開発ではIRCの利用が活発だったそうです。基本的なアナウンスを流すのはもちろん,ボットを作ることでログのgrepなどの操作をIRCから簡単に行えるよう,仕組みを整えていると話していました。

最後の質疑応答では参加者から非常に多くの質問が寄せられ,チャットサービスのようなリアルタイムメッセージング技術への関心の高さをうかがいしることができました。

画像

画像

Rieko Suzukiさん「スマフォアプリ開発を支える認証認可アーキテクチャ」

Rieko Suzukiさんは本日の話の前提知識としてのOAuth2.0の解説とmixiの独自拡張であるOAuth2.0 Grouped Clientの導入に至るまでの経緯として「スマフォアプリ開発を支える認証認可アーキテクチャ」というテーマで話しました。

現在mixiで使われている認証システムの問題点を解説しました。以前はIDとPWでAccessTokenを返すという仕組みで,アプリが増えるとユーザーに取っては非常に手間のかかるものだったため,シングルサインオンを実現したいという流れになりました。実現方法としてID・パスワードの共有とGrouping Refresh Tokenを共有という2つの方法が提案され,双方のリスクをわかりやすく説明し,リスクの低いGrouping Refresh Tokenを共有のほうを選択するという形になったと言うことです。

最後にmixi製のBasSについてちょっとだけ触れれていました。

画像

画像

makamakaさん「同人ゲーム「PM(ぷむ)からの野望」の考案と実践」

2011年にParumon,2012年にはやっぱしぃ YAPCを考案し,新春初笑いperlすごろくとして完成させたmakamakaさんのセッションです。今回も新たな同人ゲーム「PMレボリューション」を考案されました(ゲーム名は本日変更されたそうです⁠⁠。

内容は,プレイヤーが地域PMの主催者となり,聴衆を集めて人気PMを目指すというもの。キャパシティや開催条件のある会場カード,聴衆の属性と人数を表す人気カード,そして「Perl入学式開催(初学者を総取り⁠⁠」や「モバイルガジェット発売(聴衆がいなくなる⁠⁠」など様々な効果のある特殊カードを用意したとのことです。

JPA理事である牧さんの「肉料理ばかりだと飽きるのでサラダが必要」という言葉を信じて,頑なにトークを続けているというmakamakaさんですが,ParumonやAcme大全の再販の要望が上がるなど,その活動は着実に実を結んでいるようです。

画像

画像

Yusuke Yanbeさん「PhantomJSによる多岐にわたる広告枠の確実な表示テスト」

現在はてなでディレクターをされているというYusuke Yanbeさんですが,その前まではエンジニアをされていたそうで,その時の成果発表とのことでした。

まずはWeb広告表示方法の変遷について説明がありました。昔は同期的に広告を表示するのが主流だったため普通にLWPなどでテスト可能でしたが,最近はJavaScriptで非同期に取得するのが主流のため,そのままではテストを書くことができません。Webkitを搭載したGUIのないブラウザであるPhantomJSを使うことで,そういった場合にもテストを書くことが可能になります。

実際にPerlからPhantomJSを使うにはTest::TCPでPhantomJSのプロセスを起動し,Selenium::Remote::Driverを使ってテストを実行するとよいそうです。ただここまで作ってもワークフローに組み込まないと形骸化してしまうので,Jenkinsを使ってgitの特定のブランチにコミットされたタイミングでテストを自動実行するようにしたと話していました。TAP(Test Anything Protocol)のお陰でJenkinsとの統合も簡単に行えたと述べていました。

画像

画像

Tatsuro Hisamoriさん「フルテストも50msで終わらせたい ~ FreakOutの取り組み ~」

「さすがに50msでおわらせるのは無理です」と会場の笑いを誘うところからスタートしたTatsuro Hisamoriさんの発表は,テストの実行を高速化した取り組みの紹介でした。

FreakOut社では現状800以上の.tファイルが存在し,単独で実行すると30分以上時間がかかるようになっていました。こうなるとリリース前にフルテストを待っていて失敗したときのやる気ダウンや,それを避けるためにフルテストをしなくなり結果品質が低下してしまうなどの懸念があったため,テストの高速化に着手されたそうです。

方針としては既存のテストを書き換えないこと,既に動いているUkigumoによるCIサーバをそのまま使うこと,スケールすることを重視し,その結果分散実行させる手法をとったそうです。テストをピックアップしてシャッフルし,各ノードにテストを割り当てて並列実行します。分散処理をするとネットワークの問題などテスト起因以外でFailする場合もあるため,そういった時のために特定のノードだけ容易に再実行する仕組みも実装したそうです。分散処理の実装はFile::Find, List::MoreUtils,Parallell::ForkManager, Net::OpenSSHなどPerlの一般的なCPANモジュールで実装でき,Parallell::ForkManagerのrun_on_finishが便利だったとのことです。またテストをシャッフルして実行すると気づかずに他のテストに依存するコードを書いていた場合の検出ができてオススメの手法と述べていました。

高速化の結果30分以上かかっていた全テストが3分程度で済むようになったそうです。この結果の嬉しい誤算として,とりあえずpushしてフルテストする文化が生まれ,チームのツッコミビリティも向上したそうです。この実例から ⁠高速なテストは開発文化を変える⁠という非常に印象的な言葉で締めくくりました。

発表は淡々とした口調ながらもわかりやすい内容で,ベストスピーカー投票では2位に選出されるなど,多くの参加者にとって有意義な発表となったようです。

画像

画像

aerealさん「Vagrant と Chef でプログラマブルな開発環境をつくる」

aerealさんは「Vagrant と Chef でプログラマブルな開発環境を作る」というタイトルで発表しました。

aereal さんは基本的なシステムの構成を紹介した上で,複雑な依存を解決しなければならないことや本番環境と開発環境の乖離といった問題点を指摘し,構成管理の必要性を主張しました。

具体的な例として,新しいプロジェクトに参加したときに実行するcpanm --isntalldeps .が高い確率で失敗する事例に対する処方箋として「とりあえずドキュメントを書く」という方法や「プログラマブルなセットアップ環境を整える」という方法を挙げます。ドキュメントが陳腐化していることを検証するのは難しいが,プログラムが陳腐化していると壊れて動かなくなるケースが多いため,状況を認識しやすいという点で後者の方が便利であるそうです。

構成管理の手法としてはVagrantとChefを用いて行っており,MySQL等のミドルウェアやCPANモジュールのインストールに関しては Cookbook を利用しているそうです。こうして簡単に開発環境を整えられるようにする事により,丹精込めて作って大事に大事に保管されたVMイメージとの決別が図れると同時に,属人化を避けることができるので良いと述べていました。

しかし,VagrantやChefというような複雑なツールを利用する場合は,その複雑さに対して代償を支払う必要があり,さもなければ禍根が残ってしまうし,VagrantとChefを組み合わせたとしてもそれは銀の弾丸ではない,というツールの持つ負の側面についても言及し,締めくくりました。

画像

画像

Reini Urbanさん「p2」

特徴的なビデオの再生から始まったのはアメリカから来日したReini Urbanさんの発表です。Reiniさんの発表タイトルは「P2 - A PERL 11 PROJECT」です。

Perl 11というのは「Perl5 + 6 = 11」を表しており,これはつまりPerl5とPerl6が2つとも動作する処理系のことを指しています。p2はそのPerl 11の実装の1つで,本トークではそのp2の紹介及び実装戦略を解説しました。

Reiniさんは言語処理系が実装すべき要素として,パーザとコンパイラそしてVMを挙げ,それぞれに関する実装戦略について説明しました。設計方針は,計算や関数呼出しといった「頻繁なケース」と,新しいメソッドの生成やEvalといった「頻繁ではないケース」に分け,それに適したテクノロジの選択や最適化手法を採ったそうです。そのことを,パーサの実装方法や,バイトコードを実行するかあるいはJITを実行するかといったコンパイラの実現方法の例を交え解説しました。

また,方法を選択する際には「良いものから学ぶ」というのが重要だとして,良いVMはレジスタベースで適切なGCを持っており,3番地コードに変換するなどといったアプローチを採用していることや,またLISPの処理系について紹介し,p2の実装にもこれら良いもののエッセンスは取り入れているとのことでした。

p2をはじめとする,近頃盛んなオルタネイティブなPerl処理系の実装界隈のホットさが伝わってくるトークでした。今後の動向も見逃せません。

画像

画像

Perl入学式 in YAPC::Asia

多目的教室2では,サイドイベントとして「Perl入学式 in YAPC::Asia」が開催されました。Perl入学式は,大阪と東京で開催されている,Perl初心者向けのワークショップです。

まず,Perl入学式の主催である__papix__氏による開会の挨拶に始まり,サポートスタッフの紹介が行われました。

今回の講義は「応用編」となっており,CPANモジュール入門,スクリプト起動時の引数の動作,そしてYoutube Data APIを使った応用事例を,それぞれ実際に参加者がスクリプトを書いて実行するというものです。

まずcpanmを使ってAcme::Nyaaを導入し,猫がしゃべっているような文章を出力するスクリプトに挑戦。その後,引数を使って動的に文章を入れ替えるという要件が追加され,参加者が各々要件に合わせてスクリプトを改造していました。また,fizzbuzz問題にも挑戦していました。

続いて,Youtube Data APIとWebService::Simpleを使ったスクリプトに挑戦。はじめは単純にXMLをダウンロードして表示するだけだったスクリプトが,サポートスタッフの助力もあり,最終的には,検索キーワードに応じた動画のタイトル,URL,カテゴリーを一覧表示するスクリプトに変貌していました。

途中,dankogaiさんやyusukebeさん,hanekomuさんなどの有名ハッカーが見学に来ていました。初心者とハッカーが自然に交流していて,とてもよい雰囲気のワークショップでした。

画像

画像

画像

著者プロフィール

東聡志(あずまさとし)

北海道函館市出身。都内大手IT企業でプログラマーとして勤務。Perl Beginnersという勉強会を主催。 最近では,麻疹にかかったようにWAFのようなものを書いている。

Twitter:@ytnobody
Web:http://ytnobody.net/


臼井洋文(うすいひろふみ)

京都府京都市出身のプログラマ。仕事ではPerlでサーバサイドを書きつつ,Objective-CでiOSアプリの開発をしている。週末はボルダリングに勤しむ日々。

Twitter:@usuihiro
Web:http://d.hatena.ne.jp/usuihiro1978/


川上大喜(かわかみたいき)

北海道函館市出身,Hachioji.pm所属。大学院在籍の傍らアルバイトとしてソフトウェア開発に従事。ここ最近の趣味はVimプラグイン開発とChrome拡張開発。今年から始まる就活のことを考えると胸が締めつけられる。

Twitter:@moznion
Web:http://moznion.hatenadiary.com/


藤沢理聡(ふじさわまさあき)

神奈川県在住。本業はプログラマーではないが,心はプログラマー。仕事でもプライベートでもプログラミングをする日々。 長くPerlを愛用している他,ここ数年はPerl 6にも挑戦している。

Twitter:@risou
Web:http://www.risouf.net/


本間雅洋(ほんままさひろ)

北海道苫小牧市出身のプログラマー。好みの言語はPerlやPython, Haskell, Scala, Objective-Cなど。在学中は数学を専攻しており,今でも余暇を利用して数学を嗜む。現在はFreakOutに在籍し,自社システムの開発に力を入れている。

共訳書に「実用Git」(オライリー・ジャパン),共著書に「FFmpegで作る動画共有サイト」(毎日コミュニケーションズ)がある。

Twitter:@hiratara
Web:http://d.hatena.ne.jp/hiratara/


森藤大地(もりふじだいち)

ISP勤務。卒研でPerlのプログラムを組んで以来, Perlを利用している。 CROSSというエンジニアイベントを主催していたりする。 d3の翻訳やひとりアドカレなど,解析・可視化業務を行っている。

Twitter:@muddydixon
Web:http://muddydixon.hatenablog.com


山中裕之(やまなかひろゆき)

ドラゴンズファン。某会社のプログラマとして活動中。好きな言語はPerl, Ruby, C, C++, Haskelなど。武術が好きで休日はいそしんでいる。

Twitter:@hiroyukim
Web: http://hiroyukim.hatenablog.com