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

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

19日から21日までの3日間、慶応大学日吉キャンパス 協生館にてYAPC::Asia Tokyo 2013が開催されます。本日は21日、最終日です。ここでは、2日目の模様を随時レポートしていきます。

※すべてのセッションをレポートするわけではないことにご注意ください。

藤原洋記念ホールに入るところには、スポンサー企業、個人スポンサーの提灯が飾られています。お祭りであることが実感できます。

画像

画像

Yusuke Wadaさん「Mojoliciousでつくる!Webアプリ入門」

このセッションでは、昨年のベストスピーカー賞のyusukebeさんが「初心者がどのようにWebアプリケーションを開発するか」をMojoliciousをベースとして説明しました。

「これからWebアプリケーションを作りたい!」という人をターゲットとし、⁠占いアプリ」をテーマに、他のWAFの紹介やMojoliciousの開発状況、MVCの概念についての説明、大きなアプリになった時の対処方法まで幅広い発表となりました。

「Mojoliciousが軽量」とは、重厚と呼ばれているCatalystと比較してであるため、中立的にどちらが適しているかを考えることが重要だと釘をさしながら、軽量ゆえに「Hello world」サンプルからどのようにアプリを作っていけば良いのかがわかりやすいと述べました。

多くのサンプルコードを示しながら、1) MVCの分離の方法とそのメリットについて、2) MVCすべてを含むRuby on RailsとMVCのうちRouting / ControllerとViewのみを含むMojoliciousのミニマルで良いところの説明、3) 小さいアプリからどのように大きいアプリを作っていくかについて説明しました。

また、MojoliciousはMojolicious::Liteを利用することで小さくはじめて、アプリのコードが大きくなってきた場合にもController/ Viewなどをファイルやモジュールに分割するこで十分利用できるWAFであると述べていました。

このなかで初心者がとるべく指針として「分けることは分かること」を挙げました。その意図として、適切に分割することでわかりやすくなる、分かるから分割できるようになる、これらのことを繰り返し述べていました。またその過程で少しずついろいろなことができるようになったフェイズで「俺ってばすげー体験」を大事にして学ぶことで、様々なWebアプリケーションを作ってもらいたいという思いを感じました。

画像

画像

Yasuhiro Onishiさん「はてなのイマドキの開発フロー」

はてなブログのディレクターである大西さんによる、⁠はてなブログの開発フロー」と題した発表です。

はてなブログは84週連続で新機能をリリースしており、この記録は現在も更新中だそうです。このハイペースな開発を支えているのは、GitHub Enterprise(以下GHE)を中心にした開発フローによるもので、この開発フローでは自動化、効率化、安定化を実現するために様々な取り組みをされているとのことでした。

「自動化できるものは極力自動化し、ミスの再発防止を仕組み化するべき」とした上で、 良い開発プロセスというのは、⁠プロセスをフレームワーク化すること」「チームやサービスにマッチしたものを利用すること」であると話していました。

具体的な事例としては、タスク管理・ワークフロー、テスト・CI、そしてリリース管理をテーマに、はてなブログの開発フローについて説明しました。

発表では、GHE以外のツールを使用せずに タスク管理を実行する方法や、Gitでのブランチの戦略、IssueとPull-Requestの活用法、milestoneとIssueを組み合わせて期限を設定するテクニックや、レビュー、テストの基本やCI、IRC等の外部コミュニケーションツールとの連携など、話題が多岐に渡っており非常に興味深い内容でした。

最後に大西さんは、⁠人はミスをするので仕組み化とサポートするツールの利用を心がけるべき⁠⁠、⁠開発フローの改善にコストをかけることによって、トータルのパフォーマンス、サービスのクオリティは向上する」と締めくくりました。

画像

画像

fujiwaraさん「社内ISUCONのつくりかた」

ISUCON(いいかんじにスピードアップコンテスト)は2011年8月に第一回が開催され、今年の11月に3回目が開催される予定です。仕様を満たしていればOS設定をいじるのもアプリ自体を書き換えるのもありなどルールの自由度が高く、エンジニアとしての総合力を試されるコンテストです。この発表ではKAYAC社の新卒研修の一環として開催されたISUCONについて、開催する上でのノウハウを紹介しました。

まずは新卒研修の概要を紹介しました。サーバのセットアップから、HTTPプロトコルの基礎、Webアプリケーションフレームワークを使ったアプリの開発などを駆け足で学び、そこで作ったアプリをISUCONの題材として使ったそうです。

続いて本題のISUCONの説明です。まずお題に弱点を残して、改善可能な項目を作っておくのがよいようです。今回はindexのないテーブルや非効率なクエリを仕込んでおいたそうです。実際のコンテストであるような高度な罠系は避けたとのことでした。システム構築面ではParalle::Benchmark、Furl、http_loadを利用してベンチマークツールを作ったり、Plack::Testで作ったテストコードをFurlでの呼出しに変えてチェッカとして流用したり、Ukigumoにパッチをあててスコア表示に利用するといったノウハウを紹介しました。

普段同じ条件のアプリを書くことはほとんどないこともあり、同じ条件で競いはうのは非常に楽しいとのことだと締めくくりました。

画像

画像

Masaaki Goshimaさん「これからのPerlプロダクトのかたち」

mixi たんぽぽ部のGoshimaさんによる、⁠これからのPerlプロダクトのかたち」と題した発表です。

GoshimaさんはYAPC::Asia Tokyo 2012でも発表があったgperlという,自身が開発されているPerl5のC++による独自実装を紹介し、そのプロジェクトがCompiler名前空間を持つ3つのモジュールに分割された事を説明しました。発表では、Compiler::LexerというレキシカルアナライザとCompiler::Parserと呼ばれるトークナイズ結果を抽象構文木に変換するパーザ、そしてComplier::CodeGenerator::LLVMというLLVM IRを作る,あるいはJIT機構を使って実行するモジュールについて解説しました。

また、Perlを用いてiOSやMac OS X向けのアプリケーションを記述できるPerlMotionというプロジェクトについても紹介しました。PerlMothionは先に説明した3つのCompilerモジュールが利用されており、CocoaのPerlバインディングとともにLLVM IRに落とし込むことで実現していると言います。実際にPerlMothionで書かれたアプリケーションをシミュレータで実行するデモでは、アプリケーションが起動した瞬間に拍手が沸き起こるという盛り上がりを見せていました。PerlMotionは現状、大体の機能が揃っている一方で、不足している機能も少なくないのでコントリビュータを募集しているとのことでした。

なお、これらのプロジェクトで得られた知見は最終的には当初の目的であるgperlに還元したいと今後の展望を述べていました。

画像

画像

Yasuhiro Horiuchiさん「Programming AWS with Perl」

AWSでエバンジェリストを務める、Horiuchiさんの発表です。AWSは日本でも20,000アカウント以上の利用者がいて、API経由でプログラムからサーバ資源をコントロールできることが最大の特徴です。ただし、Perlの公式なツールキットは現状では公開されていません。

そこで紹介したのが、awscliというコマンドラインツールです。このツールはPythonで書かれているもので、AWSのほぼすべてのサービスをこのコマンドから制御できるのが特徴です。このコマンドを利用しているのが、AWS::CLIWRAPPERというモジュールです。発表では実際にWebサーバを立ちあげてMovable Typeを起動させるデモを行いました。

画像

画像

Tatsuhiko Miyagawaさん「What's new in Carton & cpanm」

MiyagawaさんはCartonとcpanmの現在の状況と、今後の展望について話しました。

cpanmはcpanコマンドを置き換えるモジュール管理ツールで、最新版ではバージョン指定、gitリポジトリからのインストール、Travis CIとの連携の強化、また、cpanfileへのdevelop指定やrecommends指定の追加などの機能が実装されました。

CartonはRubyのBundlerを参考に作られたプロダクトで、デプロイ時に依存するモジュールのバージョンを固定することを目的に作られています。開発コミュニティの協力で現在Cartonを使えるSaaSは徐々に増えていますが、ユーザからもSaaSに訴えたほうが対応は進みやすいようです。

最後に今後の展望として、cpanmのプラグイン機構の復活や、cpanfileにてgitのURLをサポートする計画などを紹介しました。今では開発者に必須となったツールだけに、今後の開発状況からも目が離せません。

画像

画像

risouさん「Perl 6 オブジェクト指向プログラミング」

この発表についてはスピーカーであるrisouが自らレポートします。

後方互換性を維持しながらオブジェクト指向に対応してきたPerlと異なり、Perl6は言語設計の段階でオブジェクト指向を採用しています。Perl6はPerlでのオブジェクト指向プログラミングとどう違うのかについて、オブジェクト指向の特徴的な要素ごとに説明しました。また、説明をしていく中でPerl6の特徴でもあるTwigil(変数名の先頭に記号が2つつくもの)やPerlでのオブジェクト指向プログラミングにも欠かせないblessについても触れました。

画像

画像

Hideo Kimuraさん「Perl で作るメディアストリーミングサーバー」

DeNAでマネージャーとして働いているKimuraさんは、仕事でコードを書く時間が減っても家ではコードを書いているそうです。発表では最近作っているというストリーミングサーバーについて話しました。

所持している音楽ファイルがスマートフォンに入りきらないことに悩んでいたKimuraさんは、家から音楽ファイルをストリーミング配信することで外出時もスマートフォンで好きな音楽が聴ける環境を作ろうと思いついたとのことです。

ストリーミングに関わる技術のうち特に転送/制御プロトコルについて、それぞれのメリット・デメリットを説明しました。用途に合うものとして今回はHTTP Pseudo-Streamingを採用したとのことです。HTTP Pseudo-Streamingを実現するにあたり、サーバー側では返すデータの開始位置と長さの情報をヘッダーに加える必要があります。しかしこれは、Plack::Middleware::Static::Rangeを使うことで実装できるとのこと。また、クライアント側はjQueryのプラグインであるjPlayerを使用したと述べていました。

まだ認証の仕組みや音楽ファイルの検索の仕組みなど未完成のところもあるそうですが、このようなホビープログラミングは楽しいということを最後に強調しました。

画像

画像

ランチセッション

2日目のランチセッションです。

最初に、LINE株式会社の薮田孝仁さんより、自社でのエンジニアの働き方や福祉厚生を紹介しました。LINEのユーザーが大台に乗ると社員にグッズが配布されるそうです。自分にあった働き方を薦めていました。

画像

画像

次に、1日目に続いてSix Apart社の高山裕司氏によるセッションが行われました。2日目は主にSix Apart社の歴史などについて紹介しました。

画像

画像

「YAPC::Asia Tokyo 2013 特別座談会 「Rubyの良いところ語ってください ~そんなPerlで大丈夫か?~」

Rubyから良い所を盗む、RubyのひとにもPerlに触れてもらおうテーマで、伊藤直也氏司会のもとRuby界の重鎮の方々を招いての座談会でした。

登壇者紹介

  • 卜部氏(@shyouhei) ⁠個人として来ました。Rubyのコアコミッタです。」
  • 舘野氏(@secondlife) ⁠はてなにはいって一週間でRuby使ったといわれましたが、ただしくは一ヶ月後です。」
  • 増井氏(@masuidrive) ⁠風呂の人、IKEAの人です。」
  • 松野氏(@tokuhirom) ⁠Perlは詳しい方だと思います。Amon2などCPANモジュールを多数開発しています。」

言語の比較

まずは言語そのものについての話題からです。なぜRuby(Perl)を始めたかや好き(嫌い)なところ、言語自体の生産性について話し合われました。

─⁠─ はじめたきっかけ

増井氏「Perlはバージョン4ぐらいのときに使っていました。オブジェクト指向をやりたくてJavaを始めたが、すぐ嫌になってRubyを始めました」

卜部氏「現在は仕事でPerlを使っています。Rubyは2003年頃のブログブームでtDiaryのプラグインを書くところから始めました。コミッタになったのは不満があってパッチを送っていたらなりました。」

舘野氏「tDiaryから。Railsコミュニティのエコシステムがよかった。Rubyは趣味で、自分の考えたことがすんなり表現できるのが気に入っています。」

松野氏「15からRuby/Pythonをやっていました。LLの実行委員をやっていたら誘われて仕事でPerlをつかうようになりました。Blog Hacksが面白かったことや、いろんな言語を触ってみたかったというのもあります。」

─⁠─ 具体的にRubyの好きなところは?

舘野氏「標準ライブラリのセンスの良さがいい。ArrayとかHashとか。Perlでもやろうと思えばできますが、探してこなければいけない分学習コストが高いと感じます。」

卜部氏「Perlは最近はじめました。今日はあえて差分について話しますが、PerlとRubyは似ているところが多く、差分に関してナーバスになる必要はないと思います。Rubyにあるのは未来。Rubyはプログラマに対して押し付けがましい言語です。Hashのキーワード引数は昔からありましたが、これは推奨されるべきものだと思ったのでRuby2.0では文法にしました。Rubyは世界を変えることに積極的で、そのために言語を変更します。後方互換性を重んじるPerlはそういうことはやらないイメージです。」

増井氏「Rubyは肌にあいました。Rubyは処理系の実装が多く、組込み向けにmrubyなどもあります。Perlにはあまり無い?」

松野氏「PerlでもgoccyさんのPerlMotionのような動きはあります。Perl6の実装はバリエーションはありますがどれも…(会場笑⁠⁠。Perlの文法が複雑なのが問題なのかもしれません」

増井氏「Rubyも昔は他の処理系がでないと思われていましたが今は増えてきています」

─⁠─ 言語を変えて生産性はかわるか?

増井氏「変わると思います。一つに集中している間はいいですが、スイッチすると効率が落ちます。個人的にはPHPは引数の順番など覚えることが多くて辛いです。肌に会うのが一番だと思います。ただRuby検定は落ちました(笑⁠⁠」

卜部氏「適材適所だと思います。場合によってはcapistranoにコマンドを並べるよりシェルスクリプトの方が簡単だと思うなど。生産性を考えるのであれば最適な言語を選ぶことが重要です。」

─⁠─ Webアプリで比べた場合は?

卜部氏「わかりませんが、ツールによる差よりもプログラマのスキル差の方が大きいと思います。」

舘野氏「Webアプリを作れと言われた場合、Rubyの場合はツールがそろっているので大多数の人には生産性が高いと思います。ハッカーでなんでも自分で作ってしまう人は違うかもしれません。」

松野氏「言語レベルでいうと生産性の違いはたいして無いと思います。ライブラリの充実度、たとえば行列計算ならPythonなどそういった点が大きい。Perlでは自分がほしい機能はたいてい自分でつくってしまっています。」

フレームワークやライブラリ

─⁠─ Rubyの良いツール・ライブラリは?

舘野氏「Rails、capistorano、bundler。githubが登場してからWebでのコミュニティが発達してきて、使う側としては非常に探しやすいです。」

卜部氏「自分自身はあまり感じたことは無いですが、周りに聞くとRails以前から使っている人が多いです。Rubyにはスレッドがあると言っていた人がいます。」

増井氏「Rails以前から使っていましたが、本格的に仕事で使い始めたのはRails以降。HerokuやNew Relicなどビジネスになってきたのが大きいと思います。SAASなどはRubyが最初にサポートされるものが多いです。」

─⁠─ Perlとビジネスの現状は

松野氏「Heroku、DotCloudぐらいしか使えるところがなく、サポートの流れがよくないです。」

増井氏「もともとRubyの人がビジネスを始めている印象です。」

Perlの場合はコミュニティが先導して切り開いているが、Rubyの場合ははじめからビジネスとして動いている印象とのことでした。

エコシステム

─⁠─ CPAN vs rubygems

舘野氏「github以前はイマイチでしたが、githubができてからエコシステムがまわりまじめました」

卜部氏「RailsはSVNでしたがgithubに移行しました。新しいモノ好きが多き気がします。その分旧いバグチケットが放置されていたりもしますが…。」

松野氏「CPANにRTとかありますが、最近はgithubにモジュールを置いている人も多いです。」

増井氏「githubによりコードとコミュニケーションの距離が近づきました。コードにコメントが書けたり。それがライブラリの開発速度を高めていると思います。」

松野氏「その点PerlはCPANがよくできていたのでgithubに移行する必要性が低かったのはあるかもしれません。」

─⁠─ 使おうとしているツールがRubyばっかりだったりするのですが、DevOpsとの関わりは?

舘野氏「仕事として使う人が増えてきたのでツールがRubyになっているのでは。」

増井氏「一昔前まではRubyをサーバに入れるというと嫌がられましたが、Perlはどこでも入っているので5年前にDevOpsツールがつくられていたらPerlばかりになていたように思います。」

コミュニティについて

卜部氏「コミッタのコミュニティはPerlにはないですね。Rubyは比較的簡単にコミット権をもらえます。開発者コミュニティ・地域コミュニティにふらっとコミッタがあらわれたりします。」

増井氏「Seattle.rbは日本人にやさしいです。matzさんを中心にしたコミュニティがアプリ開発者側にもあるように感じます。」

松野氏「Perlには日本人のコミッタはほとんどいないし、言語コミッタを優遇する文化もあまりないですが、CPAN authorに感謝する文化があります。」

卜部氏「コミュニティというのはふわっとしているもので、Ruby会議にきているYAPC参加者もたくさんいると思います。所属しているコミュニティを自分で思うのは自由ですが、他を排斥すべきではないと思います。」

Perlリスク論について

最後のテーマはすこし前にブログで話題になったPerlリスク論について、それぞれどう思うか、その上で何を学ぶべきかというテーマでした。

卜部氏「Rubyは今は盛り上がっていますが、10年後20年後は衰退していくであろうと思っています。Rubyにこだわるのはよくないです。ゴールはプログラミングを良くすること。Perlが衰退しているとかはどうでもいいです。」

舘野氏「これから先もRuby/Railsを使い続けるのかと聞かれますが、それは現在生産性が高いと判断して使っているだけです。5年後10年後によりよいものがでてきたときに移る決断ができるか。Perlコミュニティは他のものから学ぶ文化が強くて、宮川さんがRubyのbundlerを参考にしてcartonを作っているとか、そういったところが重要です。そういう人はどこにいっても活躍できると思います。」

松野氏「自分が始めた7、8年前からいわれていることで今更感があります。プログラミング言語は仕事をする上での一要素でしかないので、そこを取り替えられたぐらいで役に立たないエンジニアにならないことです。」

Perlリスク論に対してPerlでもできるよといって反論するのもひとつのやり方ですが、他の世界をみて学び続けていきましょうと締めくくりました。

質疑応答

Q. Perlは性能が良くて楽でしたがRubyは遅いイメージがあります。性能面での苦労はないですか?

A. 舘野氏「一般的なWebアプリだとI/Oが支配的なのでRubyとPerlでは差がでないです。数十台程度のサーバ数差ならコスト的な負担も小さいです。Ruby2.0でかなり速度もあがりました。」

A. 卜部氏「GCの速度を速くしてくれというのは言われています。チューニングができないのが課題です。」

A. 増井氏「そういった点もあるので実装が多数生まれている面もあるかと思います。」

Q. FreeBSDのRubyバージョンを1.9にあげたらいろいろ壊れて困ったのですが、バージョンを上げるとここが壊れるとかのチェックはしてないのでしょうか?

A. 卜部氏「なにもしていません。いろいろなものが壊れるのはわかってやっています。これから書くことを楽しくすることを重視しています。」

A. 舘野氏「Ruby1.9.3から2.0は簡単にあげられました。最近はバージョンアップしやすくなっています。コストを払っても将来の新しいものを取り込めたほうがトータルでプラスになると判断しています。」

画像

画像

画像

画像

Daisuke Muraseさん「Emacs実践入門 Perl編」

Daisuke Muraseさんは「Emacsの実践入門」をテーマに話しました。

最初は、Emacsのインストール方法とサンプルのダウンロードの紹介から始まり、インストール方法、キーバインドの説明、設定ファイルの場所からel-get, exec-path, heml, perl-completion, flymake,quickrun, heml-projectといったおすすめの詳細設定を解説しました。特にキーバインド周りは面と向かってテンポ良く説明があり、とてもわかりやすかったので、Emacsの入門を考えられている方におすすめのセッションでした。

画像

画像

Toshinori Satoさん「Perlでレコメンデーション」

Toshinori Satoさんは「Perlでレコメンデーション」をテーマに話しました。

前半は初心者向けに、レコメンデーションを「ユーザーが価値を感じそうな情報を提供すること」と説明し、その実現方法や必要な道具、実例などを紹介しました。

後半は、ユーザーの価値観にどう近づくのかという話しを行い、⁠バイヤーの作るリスト」を例に出されて説明したり、ルールベース、コンテンツベース、協調フィルタリングといった様々手法や実際にPerlで処理をするために用いることのできるモジュールの紹介、Jubatusというツールを説明しました。

最後に手法は様々あるがユーザーに取って価値がある情報を提供できることが重要であるとまとめていました。

画像

画像

Daisuke Makiさん「本当にあったレガシーな話」

Daisuke Makiさんは10周年を迎えたlivedoor blogをレガシーな環境から環境改善させていく「本当にあったレガシーな話」というテーマで話しました。

最初にperlのバージョンを上げる、パッケージングをcartonにする、mod_perlから脱却する、将来の変更を妨げになりそうなものを排除すると行った目標をかかげたと言います。そして、現状の分析とどの作業から手をつけるのかという話からはじまり、実際に修正していく過程で、ログの重要性の説明と追加、特定の環境(mod_perl)への依存性の排除、perlのバージョンアップとcartonの導入、SledgePSGIなどを話しました。

また、実際に本番へ投入される際に起こった問題点などにも言及し、レガシーコードとの戦いの困難さが感じ取れました。

最後に自分たちの望むスタート地点に立てたことのメリットと、大規模なクラスタリングや完全自動テストなど将来への展望を述べていました。

画像

画像

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さんなどの有名ハッカーが見学に来ていました。初心者とハッカーが自然に交流していて、とてもよい雰囲気のワークショップでした。

画像

画像

画像

Lightning Talks Day 2

2日目のライトニングトークです。

はじめに、櫛井さんがドラ娘を紹介しました。

画像

kanさん「目指せ、テストカバレッジ100%⁠

coveralls.ioというカバレッジを保管するサービスをPerlから利用するという内容でした。このサービスはPerlに対応していませんが、Devel::Cover::Report::Coverallsというモジュールを作ってAPIを叩くことで理由できるようにしたそうです。

画像

画像

walf443さん「DBIx::RecordFactory」

DBIx::RecordFactoryというモジュールの紹介でした。このモジュールはRubyのFactoryGirlのようなもので、TengのSchmeから関連性のあるデータを自動生成することができるそうです。

画像

画像

maka2_donzokoさん「今年のPerl同人活動報告」

ページ数370ページ、重量も500gとなったAcme大全2013や、新春初笑いPerlすごろくなど、maka2_donzokoさんの今年度の活動を報告するというものでした。毎年作成されるシールの没案も紹介し、艦これにインスパイアを受けた弾これの各種シールは、dankogaiさん本人にも大変好評な様子でした。

画像

画像

azumakuniyukiさん「JSONでメール送信」

JSON API経由でメールの送信が可能なHainekoについての話でした。ドメインによって経路を変えたりと、細かなチューンアップの可能だそうです。

画像

画像

barimiさん「初めてのPerl ?つぶやいてないでコードかけ?」

@dntawscというTwitterのbotをPerl歴5日のbarimiさんが作ったという話でした。短期間でプロダクトを仕上げるコツとして、初心者向けの勉強会に出たり、自分に締め切りを設けるなどの項目を挙げましたが、中でも知人のPerl Hackerに書いてもらったコードをコピーするというノウハウが一番有効だったようです。

画像

画像

papixさん「Perl入学式2013年度中間報告」

papixさんはPerl入学式という初学者向けの勉強会を主催しており、九州、大阪、東京などで開催を続けているそうです。今後は沖縄や北海道での開催や、Perl6の入学式も開催したいと考えているとのことでした。

画像

画像

kamipoさん「mysql-buildでQ4Mやmroongaもビルドしたい」

mysql-buildは様々なバージョンのMySQLを簡単にインストールするためのツールですが、kamipoさんはこのツールにQ4Mやmroongaも簡単にインストールできる機能を追加したそうです。これを機にQ4Mやmroongaのユーザも増えてほしいと話していました。

画像

画像

n.tomitaさん「ねたモジュールについて」

Perlのねたモジュールがもっとたくさん存在してもいいのではないかと問題提起をするLTでした。後でやると書かれたコマンドに「今でしょ!」と指摘してくれるモジュールや、整数値をすべて倍にしてくれるuse hanzawaなどを提案していました。

ねたモジュールの実験場としてnetacpan.orgというサービスを始めたそうなので、興味のある方は参加してみてはいかがでしょうか。

画像

画像

kamadangoさん「5文字以内のレスを推奨する節」

kamadangoさんは自信の経験に基づき、スモールチームでの開発を成功させるためのマイクロコミュニケーションの方法を解説しました。短文を使うことで生産性を挙げ、⁠!」を使うことでテンションを保つことがコツだそうです。

画像

画像

tokuhiromさん「Test::Power」

ok $x == 3と書いたテストが失敗した時に、$xがどういう値だったためにテストが失敗したかを表示させるTest::Powerについて紹介しました。さらに前日のLTでYappoさんがリクエストしたHTTP::Body::Builderを早速実装したそうで、Yappoさんよりビールを受け取っていました。

画像

takusさん「若者が Velocity Conferenceに参加して感じたPerlの現実⁠

takusさんは、オライリー社主催の海外カンファレンスであるVelocity Conferenceに参加したそうです。よい経験ができたということですが、Perlの存在感がないことが気になっており、マイノリティにならないようにもっとアピールをしていくことが必要だと話していました。

画像

画像

cubicdaiyaさん「mruby_nginx_module」

cubicdaiyaさんの職場ではnginx.confが6,000行超えているそうで、それを解決するために開発しているmruby_nginx_moduleというnginxのモジュールについての話でした。正規表現やノンブロッキングソケットのサポートなど、今後も開発を続けていくそうです。

画像

画像

nekokakさん「DeNA common tech Trial」

チームに分かれて仕事をしていると各チーム内で同じような問題を個々で対応してしまいがちですが、nekokakさんはそのような問題を効率よく対処するために横連携できるチームを立ち上げたそうです。Baran(バラン。お弁当等に使うの緑色の仕切り)というネームスペースで成果物を開発しているそうです。

画像

画像

pjfさん「Staying sane with Method::Signatures」

サブルーチンを@_を使わずに記述するための、Method::Signaturesの紹介でした。subの代わりにmethodと書くことで、このモジュールを使ったサブルーチンを定義することができます。興味のある方は試してみてはいかがでしょうか。

画像

画像

takesakoさん「Perl○×クイズ大会」

トリを務めるtakesakoさんのLTは、本当にタイトルの通りに会場の全員で○×クイズ大会を開催して優勝者に賞品を手渡すというものでした。perl -E'say($] < 6)'は真か偽か、といったような特殊変数にまつわる超難問の数々に、名だたるPerl Hacker達も早々に撃沈されていきました。

画像

画像

Tomohiro Ikebeさん「management and Perl culture」

キーノートです。Ikebeさんはこれまでの仕事での経験を元に、開発におけるチームの重要性とマネージャーが注力すべきことについて話しました。

よく知らない人からは優れたエンジニアによる個人技のイメージを持たれやすいというソフトウェア開発は、実際にはたくさんの人間がかかわっているためチームの開発をとりまく環境が大切であると主張しました。マネージャーはチームの環境をよりよくするための存在とのこと。中高生の頃の部活のマネージャーのように選手(エンジニア)が集中して取り組めるようにサポートすることが本質であると語りました。

次に、チームをマネジメントしていく上でIkebeさん自身が大切だと考えることを話しました。エンジニアのライフワークバランスを整えることの重要性や、自分より優秀な人を採用することを恐れないこと、人の特性に応じた仕事を依頼することなど、様々な方向からエンジニアが働きやすい環境を作る必要があるとのことでした。

仕事を依頼する際には、その仕事がどのようなもので何のためにやるのかということをエンジニアにも理解してもらえるよう伝えていくことも重要だと述べていました。また、エンジニアの仕事は周囲にはわかりづらいので、自分たちのチームの成果を積極的にアピールしていくこともマネージャーの大切な仕事とのことでした。

最後にIkebeさんのチームがどのような規模なのか、なぜPerlを使っているのかという点について話しました。Perlを使っているのは入社した時に既に使われていたことが大きいとしつつも、サービスとしての差がプログラミング言語によってつくことはほとんどないため、Perlであることが重要ではないと述べました。その上で、Perlの文化は素晴らしいもので、自分たちのチームはその文化にのっとって仕事をしていると締めくくりました。

画像

画像

クロージング

牧さんによるクロージングです。

8回目となるYAPCですが、今回、スタッフやスピーカーを含め参加者は1,131名になったそうです。まず、参加者に感謝の意を表しました。

画像

そして今回のベストトーク賞を発表しました。上位3位の順位は次のとおりです。なんと昨年に続き、和田さんが1位となりました。

  • 1位:Yusuke Wadaさん「Mojoliciousでつくる!Webアプリ入門」
  • 2位:Tatsuro Hisamoriさん「フルテストも50msで終わらせたい ~ FreakOutの取り組み ~」
  • 2位タイ:Daisuke Makiさん「本当にあったレガシーな話 ⁠⁠運営側なので参考値)
  • 3位:Masahiro Naganoさん「PSGI/Plack・Monocerosで学ぶハイパフォーマンスWebアプリケーションサーバの作り方」
  • 3位タイ:特別座談会 ⁠Rubyの良いところ語ってください ~そんなPerlで大丈夫か?~」⁠座談会なので参考値)

画像

そして、牧さんと櫛井さんが運営に関わるYAPCは今年で最後とすることを発表しました。技術にしろコミュニティにしろ新しい要素がどんどん出てきているとし、新しい人達がイベントを作っていってほしいと述べていました。なお、来年のYAPCを計画したい人がいれば、年内に連絡してくれれば協力したいと言及していました。

画像

画像

最後に、会場ネットワークを担当したJANOG+LLNOCネットワークチームと、当日スタッフがそれぞれ壇上に上がり、参加者の皆さんが拍手でたたえ、今年のYAPCは幕を閉じました。

画像

画像

以上でレポートは終了です。最後までお読みいただきまして、ありがとうございました。

おすすめ記事

記事・ニュース一覧