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

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

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

ランチセッション

DeNAの古川さんはQuizNowの開発や自らが代表を務める日本Node.jsユーザーグループのコンサルタントを手掛けています。今回,古川さんはQuizNowのチーム作りについて話しました。

チーム作りは,その場のノリを大切にし,思いつきを重視すること,また,万人受けするものではなく,特定のユーザーに受けて突き抜けるくらいが大事であると言います。そして,自分のスペシャリティをシェアすることを挙げました。デザイナーがプログラミングを覚えたり,エンジニアがデザインを覚えたりと,完全分業でやるよりもお互いの中間を埋め合うために,シェアすることがチーム感を高めるそうです。

また,会社で勉強会やセミナーを開いたりするそうです。それにより,知識がシェアされ全体に良いサイクルができると述べていました。

画像

Peter Rabbitsonさん「DBIx::Class - what is it and what is it good for?」

DBIx::Class(以下DBIC)のメインメンテナであり,今回のゲストスピーカの一人でもあるPeter RabbitsonさんによるDBICの全体像に関する発表です。

DBICはとくに海外では広く使われているモジュールで,DBIの拡張であり,ORMであり,フレームワークでもあります。まずモジュールの構成として大きく次の4つの抽象化レイヤからなることを紹介しました。

  • データモデルを抽象化したフレームワーク(DBIx::Class::Schemae / DBIx::Class::ResultSource)
  • クエリ操作を抽象化したフレームワーク(DBIx::Class::ResultSet)
  • 検索結果のパーサ(DBIx::Class::Row / DBIx::Class::ResultClass::HashRefInflator)
  • ストレージI/Oの抽象化レイヤ(DBIx::Class::Storage)

続いて,開発方針として後方互換性を重視しておりpublicなAPIを利用している限り安心してバージョンアップできることや,パフォーマンスの改善も積極的に行っていることを説明しました。

その後,ResultSetによるsearchメソッドのchainingやsubqueryの発行,search_relatedを使ったjoin,HashRefInflatorを使った高速化など,DBICのもつ様々な機能を紹介しました。

日本では昨今Tengなど軽量なモジュールが好まれる傾向にありますが,この発表を聞いて改めて今も進化を続けているDBICを使ってみようと思った人も多いのではないでしょうか。

画像

画像

Taiki Kawakamiさん「Perl::Lint - Yet Another Perl Source Code Linter」

moznionこと,Taiki Kawakamiさんは,Perlのコードの問題点を静的に指摘するためのモジュールであるPerl::Lintについて話しました。PerlのLinterとしては,昔からPerl::Criticと呼ばれるモジュールがありますが,これよりも高速なLinterという位置づけになります。

Kawakamiさんは冒頭で,新しいバージョンのPerl::Lintをリリースしようと試みましたが,テストが通らずに断念することになりました。とはいえ,デモでは動作しているところも見えたため,手元で試すことはできるはずです。また,Perl Lint Playgroundというサイトも作っており,こちらではWeb上でPerl::Lintの機能を使えます。このWebサービスを作った目的については,フィードバックを得やすくするためと説明していました。

Perl::Lintはプログラムを構文木に直すのではなく,Compiler::Lexerの出力であるトークン列を直接使ってコードの解析をするそうです。Compiler::Lexerはまだ若干安定していないこともありますが,時間が経つにつれて安定性は上がってきているということでした。Perl::Lint自身も,実はPerl::Lintをかけると問題点がたくさん出るという状況ですが,レビューが簡素化されたり可読性が上がったりと,静的解析をする利点は多くあるため,今後のプロジェクトの状況に注目すると良いでしょう。

Perl::LintはThe Perl Foundationの助成金によって実現されているそうです。まだ募集しているという話なので,我こそはという方は応募してみるのはいかがでしょうか。また,Perl::Lintに関してもまだまだ開発が必要な部分があり,特にドキュメント面を充実させてくれる方を募集しているそうです。

画像

画像

アルパカ大明神さん「作られては消えていく,泡のように儚いクラスタの運用話」

TVと連携するためのサイトやシステムを構築している@toritori0318さんは,24時間365日運用するサービスとの共通点・相違点について紹介しました。

TVの連携システムは案件によって違いはありますが,放送時間がすべてであり一発勝負なので本番は非常に怖いそうです。想定するユーザ数や想定するシナリオで負荷の検証も行っていたそうですが,この恐怖に対する備えをより強固にするために,Punisherというツールを開発し,シナリオを本番環境と限りなく近くすることで,想定した負荷箇所以外の負荷を発見し,解消することができたとのことです。

タイトルにもあるように,本番後はシステムを削除し作りなおすため技術的負債の返済しやすい環境ではあるそうですが,反面,インフラ設定のコストが相対的に高いことが課題となっていたと言います。デプロイの仕組みやスケール管理はスクリプト化はしているものの手順はバラバラであり,これに対してほとんどを@toritori0318さんが見ていたためSPOFとなっていましたが,現在はVagrant + Chef + CloudFormation + AutoScalingを利用することで,運用手順の共通化・インターフェイスの統合などを行い,改善しているそうです。そこで利用している多くのRakeコマンドを多数紹介し,とても参考になるものでした。

システムの構築・運用はやはり案件ごとに異なっており,24時間365日に則したものもあれば,今回のTV案件のように使い捨てのシステムに適したものもあります。銀の弾丸はないとは思いますが,目の前のTV案件への向き合い方とその改善の仕方は共通するものであり,とても勉強になるセッションでした。

画像

画像

QuizNow!

発表はランチセッションに引き続きにDeNAの古川さんが,QuizNowを開発した際に苦労した点や工夫した点について発表しました。

QuizNowとはクイズとコミュニティの総合サイトであり,クイズで競いながら好きなものを思う存分語る場を提供するサービスです。

開発にあたり,苦労した点はエンジニアとデザイナーお互いのイメージが異なり,イメージの共有化ができていなかったことだと言います。それを解決するために工夫した点は,イメージを静止画ではなく動画にしてエンジニアとデザイナーのコミュニケーションミスを無くしたとことでした。他に工夫した点として,WebのSingle Page Aplicationにしつつ高速化を行うことでネイティブアプリとWebの遜色をなくし,HTTPをPOSTする際のコネクションを繋ぎ直すミリ秒をかせぐたにめにWebSocketでクイズの早押し要素をサポートしたと述べていました。

画像

画像

hakobeさん「Scala In Perl Company : Hatena」

Scala in Perl Companyというタイトルでhakobeさんが発表しました。

まず,はてなではこれまでほぼすべてのプロダクトをPerlで実装してきたことを挙げ,なぜ会社がPerlを選択したのかについて,naoyaさんのブログを紹介しつつ,少ない記述で多くのことができること,CPANライブラリの存在が大きいこと等があって採用したことを説明しました。それから現在10年の歳月が流れ,その間にWeb技術の進化等で取り巻く状況が変わってきた中で,プロダクトの追加機能やパフォーマンス改善,リニューアルなど,価値を生み出し続けるためには継続的なソフトウェア進化が必要です。そのために,テストやレビュー,段階的リリースなど安全にコードの追加や変更をするための工夫を行ってきたそうです。その一方,Perlで開発していると思ってもみない原因のエラーやテストのカバレッジへのコストなど,エラー検知の努力の限界も見えてきていて継続的なソフトウェア進化が難しいという部分も見えてきたと言います。

そのような中で,はてなの新サービスのmackerelが立ち上がりました。スケジュール管理しやすい等の理由で新言語を投入する機会となり,表現力の高い静的型システムのある言語を投入することになったそうです。そして,記述の柔軟さ(フィボナッチ数の例にとってでPerlとScalaで比較してそこまで記述量が変わらないことを紹介),豊富なライブラリ(Javaで実績のある特にDB向け等のライブラリ),社内にかける人が割といるなどの理由でScalaを採択したと紹介しました。

実際にScalaを使用してみて,コンパイル時に様々なエラーを検出できること,レビューする側が変更機能に集中してレビューできること等の良い点と,コンパイル時間が長いこと,学習コストがそれなりに高いこと等の悪い点を挙げていました。セッションではPlay2による開発の紹介を予定していましたが,時間の都合で駆け足で省略となりました。

はてなの規模の会社が実際に別の言語を選択する時の理由や投入してみての知見などが得られる発表でした。

画像

画像

motemenさん「Git を使ったツール開発」

これまでにGitを使ったツールとして,ghqやgit-browse-remote,git-pr-releaseなどを開発してきたmotemenさんは今回,ツール開発にGitを活用する話ではなく,Gitを使ったツールの開発を発表しました。「.git以下を見ない」「libgit2を使わない」でツールを開発していく上で,Gitに用意されているgit-*コマンドを活用しているそうです。

具体例として,ツールを作る際に注意すべきこととして引数の扱いについて取り上げました。引数がない場合の挙動は,ユーザが想定する最も標準的なものにすることや,引数を解釈する際にはGitにあわせて様々な方法で引数を記述できることが大事だとし,Gitにおける様々なリビジョンの指定方法を紹介しました。

その他,git rev-parseを用いてリポジトリのトップディレクトリの絶対パスを取得する方法や,git configをより有効に活用する方法などを解説しました。

画像

画像

著者プロフィール

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

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

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


日下部雄也(くさかべゆうや)

仕事はニフティクラウドのネットワーク関連の機能の企画・開発・運用で,運用自動化のためのプログラムを書いていることが多い。言語は,Perl,Python,Ruby,C,Goなど。最近,Vyatta CoreからフォークされたVyOSという仮想ルーターのユーザー会を設立し,第1回目のミーティングを主催した。

Twitter:@higebu
Web:http://www.higebu.com


滝沢玲美(たきざわれみ)

千葉県在住。仕事はITとは全く無縁な事務職だが,プログラミングに以前から興味があり。今回,Perl入学式にてプログラミングを初めて学ぶ。

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

神奈川県在住。仕事でソフトウェア開発をしつつ,余暇にも友人たちとソフトウェア開発をする日々。長くPerlを愛用している他,ここ数年はPerl 6にも挑戦している。

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


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

北海道苫小牧市出身のプログラマー。好みの言語はPerlやPython, Haskell, Scala, OCamlなど。在学中は数学を専攻しており,今でも余暇を利用して数学を嗜む。現在はFreakOutに在籍し,自社システムの開発に力を入れている。 共訳書に「実用Git」(オライリー・ジャパン),共著書に「FFmpegで作る動画共有サイト」(毎日コミュニケーションズ)がある。

Twitter:@hiratara
Web:http://hiratara.github.io/


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

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

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


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

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

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

コメント

コメントの記入