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

YAPC::Asia Tokyo 2012, 1日目レポート[更新終了]

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

しんぺい@猫型技研さん「リアルタイム通知システムの舞台裏」

新潟でフリーのエンジニアとして活動しているしんぺい@猫型技研さん。現在開発運用しているスマートフォン向けチャットアプリを例に,リアルタイムなpush通知システムの改善事例を発表しました。

スマートフォン向けのpush通知を実装するにあたり,当初はクライアントから通知サーバに常時コネクションを張る仕様で運用していたのですが,サーバーパンク時のフォローができないという問題点を抱えていました。その後通知サーバを増やし,アプリケーションサーバ側でユーザーごとに通知サーバを割り当てる方式に移行したものの,今度はアクティブなユーザーの多い通知サーバに負荷が集中してしまうという問題が発生。通知サーバをひとかたまりのクラスタにして抽象化することで疎結合なシステムが作れないかと考えました。

そこで導入したのが,Erlangで書かれたメッセージングサーバ「RabbitMQ」⁠フェイルオーバーができて,かつ「pub/sub」⁠特定条件のユーザーにむけてまとめてメッセージを通知する機能)にも対応しているという利点があります。

現在はクライアントからのリクエストを受けたアプリサーバからRabbitMQにリクエストを送信し,RabbitMQが通知サーバを一元管理してユーザーにpush通知を送信する仕様となり,システムの疎結合を実現。サーバの柔軟な増減や,突発的なアクセスへの備えができるようになったと語りました。

画像

画像

りーお@DeNAさん「Perl初心者が作ったサーバ運用ツール」

DeNAで運用エンジニアを務めるりーおさんは,日々の運用作業における手作業ミスを軽減する手段としてサーバーセットアップを抽象化させて管理するフレームワーク「Touryo(棟梁)⁠を発表しました。

実行コマンドをDSLとして指定したうえで一連の処理をプロシージャとして定義し,書き出し先の設定ファイルをText::Xslateによってテンプレート化。サーバをロール単位に区切って個別に処理を定義することができるなど,抽象的かつメンテナンス性の高いセットアップが行えるようになったと語りました。

画像

画像

KOMORI Kazukiさん「Perl Ocean - XMPP based realtime communication framework suite」

mixiのエンジニア,@lapis25さんことKOMORI Kazukiさん。XMPPプロトコルを中心とするリアルタイムコミュニケーションフレームワークスイート「Perl Ocean」について発表しました。かつてはJabberと呼ばれた拡張可能なメッセージとプレゼンスのプロトコル「XMPP」に準拠し,一般的なメッセンジャやグループチャットの機能を実現しています。今後はイベントプッシュ通知やHTTP Bindingのサポート,オーディオ/ビデオチャットの機能も追加予定とのことです。

同時接続数リミットやプロセスブロックといった問題はポーリング型プロトコルの悩みの種ですが,これを解決する方法としてPerl Oceanではgearmandをベースとしたメッセージブローカを実装。フロントノードから送られてきたリクエストをデリバリーサーバに割り振り,Webサービスとのやり取りやフロントへのレスポンスを担わせることでフロントエンドと実際の処理を担うサーバを分離。バックグラウンドで再起動などが可能なように工夫しているそうです。

Perl OceanはPerl 5.8以上で動作します。Artistic Licenceに基づいたオープンソースとなっており,GitHub上で誰でも自由にソースコードへアクセス可能です。また現在mixiにて,このPerl Oceanを利用したサービス「mixiの友人とチャット」がトライアル公開中です。詳しくはmixiのサイトをご覧ください。

画像

画像

motemenさん「Perlでファントムする!改め Wight - Phtantom's new friend」

はてなのエンジニア,motemenさんの発表です。Ariya Hidayat氏開発の「PhantomJS」⁠JavaScript API経由でWebKitを操作するツールキット)をPerlから操作するラッパー「Wight」を紹介しました。

PhantomJSは「Headless(視覚的なインターフェースを持たない)⁠というコンセプトのツールキットで,アクセスしたWebページに対して,そのページとは別のコンテキストのもと,ページの要素へアクセスしたり,キーイベントを発生させることができるという優れもの。これをPerlアプリケーション上から自由に操作できるようにすることで,Coroによる並列化やLWPによる高機能なアクセスなど,CPANモジュールの恩恵を受けながらリッチなアプリケーションが書いたり,Proveによる効率的なテストを行えるようになるそうです。

今回のセッションでは,実際にこのWightを用いたアプリケーションでtumblrにアクセスし,ブラウザでの画面スクロールをエミュレートしながら,tumblrの追加読み込み機能を利用してreblogされた画像を取得し続けるデモを披露しました。

Wightの実装にあたっては,RubyとPhantomJSで通信するライブラリ「Poltergeist」を参考にしたというmotemenさん。Perl側からWightを経由してWebページ上のJavaScriptを実行してその値を取得したり,またWebページ上のプロンプトをPerlから動的に操作することも可能とのことです。jQueryのクエリビルダも用意しており,jQueryクエリを用いてWebページを操作することもできると語りました。

今後はWWW::Mechanizeとの連携や,フレームを用いたページへの対応を検討しているとのこと。WightはmotemenさんのGitHubにて入手可能です。

画像

画像

まつけん@yokoninaritaiさん「GitHubを使った開発とデプロイ」

まつけん@yokoninaritaiさんのセッションは,開発体制をgithub中心にした際の経験果断でした。最初にツールとgithubの紹介の後,移行の経緯について話しました。最初はsvnで開発していたのですが,人数が増えてきてマージなどが大変になり,移行を決意したとのことです。

移行に際しては,必要な時に上司に相談して社内的な了解を得ながら進め,操作の取得は社内勉強会をおこなって乗り切ったそうです。

開発とデプロイの体制をプルリクエスト中心にすることで,大幅な省力化も果たせたとし,効果が大きかったことが伺えました。

画像

画像

著者プロフィール

天谷窓大(あまやそうた)

SNS運営会社に勤務の傍ら,フリーのライターとして活動。大好きなラジオの世界をPerlでハックし尽くすのが夢。

twitter:@amayan


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

北海道函館市出身。高専卒業後,大学に編入。現在,大学院生業務をこなしつつ某企業でパートタイムエンジニアとして活動中。ソフトウェアのテストやCIといった,ソフトウェアの品質担保に関する話題に強い興味を持っている。

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


中村文子(なかむらあやこ)/Ya-ko

大学卒業後大手ISPのコールセンター業務・ネット企業の企画職・広告代理店プロデューサーなどを経て, 現在「cyclo-PR」の屋号でフリーランスのソーシャルメディアプランナーとして活動。Web業界や広告業界の境目をさまよいながらさまざまな企業のマーケティングやPR,執筆活動を行う。

Twitter:http://twitter.com/ya_k0

LinkedIn:http://jp.linkedin.com/in/ayak0


萩原崇之(はぎわらたかゆき)

自宅警備の傍らコードを書く毎日。最近は電子工作にも心が傾いている。夢は誰もが宇宙旅行に行く世界。

twitter:takayuki_h
blog:http://d.hatena.ne.jp/kagigotonet
google+:https://plus.google.com/115287053726902051396/


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

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

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

twitter:@hiratara
blog:http://d.hatena.ne.jp/hiratara/


東聡志(あずまさとし)

北海道函館市出身。都内大手IT企業でプログラマーとして勤務。Perl Beginnersという勉強会を主催。

休日には,PerlやForthなどでのコーディング以外にも,板につかないロシア語の学習やバイクでのプチツーリング,バドミントン,Arduinoを使った電子工作等など,だいぶカオスな時間の使い方をしている。

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