YAPCレポート(4):DeNAが歩んだデプロイ自動化への道 #yapcasia

8月28日から3日間行われた世界最大規模のPerlカンファレンス「YAPC::Asia Tokyo 2014」について、すでに以下の3本のレポートがHRナビに掲載されていますが、本記事は、そのYAPCレポートの第4弾となります。Perlと言えば、実用的なLL言語として多くの会社でサーバーサイド開発に使われており、そのコミュニティの会議たるYAPCもウェブの話ばかりなのかというイメージなのではないでしょうか?

しかし、今年のYAPCで採択されたトークの中には、直接的にPerl言語を扱うもの以外にも、ミドルウェアの深い話やインフラストラクチャの運用の話、さらには他言語の話(!)まで、様々なテーマが飛び交うものとなりました。

本レポートでは、Perl Mongersが培ってきたサーバーサイドの開発フローのセッションを比較に、昨今のトレンドとなってきたネイティブアプリ開発にどう活かしていこうとしているのかをお伝えできればと思います。

「DeNAが歩んだデプロイ自動化への道」

DeNA のサーバーサイドエンジニアの青猫さんの発表です。

このトークでは、安全工学をキーワードに、より品質の高いプロダクトを素早く届けるためのサーバーサイドの開発・リリースプロセスが紹介されました。

元々少数の開発者主導に立ち上がったシステムが、事業の急激な成長に伴って大量のビジネスロジックやリソースが詰め込まれてきたという経緯に触れたうえで、その品質を守るために検証やリリースの手順が複雑になり、さらに開発スピードの足かせとなっていく……。似たような状況は皆さんにも心当たりがあるのではないでしょうか?

こうした状況に対するDeNAでの取り組みの一例として、肥大化したコードを内部APIとして小さなコンポーネント群に切り出したうえで、小さな単位での検証を徹底的に自動で回すという方針を採ったようです。自動化についてはリリースバージョンの管理、環境共通のデプロイスクリプトの用意、JenkinsによるConntinuous Integrationの導入によって実現し、こうした自動化のおかげで手元の小さな修正をどんどんリリースサイクルに載せることが可能となったとのことでした。「サイクルを大量に回すことでプロセス自体の信頼性が上がる」という言葉は、スピード感が重視されるウェブ業界ならではだなと感じます。

一方で、コンポーネントを複数運用することで相互の依存関係に注意する必要がある、UIに関わる部分では人間の目で見なければ分からない部分も残るといった課題も残り、完全に自動化するという状態ではないようです。

「Mobile Application Development for Perl Mongers」

前半はフリマアプリ「Fril」のiOS&Android版を担当されているninjinkun氏、クックパッド社でモバイルアプリ開発を主導したgfx氏による前後編の発表です。また、最後にクライアント/サーバーサイド開発をトピックとして、お二人によるトークセッションもありました(プログラム概要

Perlの会議ながらモバイルアプリケーションのセッションとして目を引き、会場は二階席まで満員となっていました。

前半部では、クライアント開発のデザインプロセスとして、エンジニアがデザインに関わるべきだという話を強調されていました。デザインができなくとも、ペーパープロトタイピング(ワイヤーフレームを紙に書いてUXを考えるもの)を通じてエンジニアもデザインプロセスに関わること、ユーザーのインタビューにもエンジニアがいることで即時にフィードバックを得ることができるということなど、ninjinkun氏自身の経験を元にお話されていました。

後半部では、モバイルアプリケーションのためのライブラリや環境構築のお話が中心です。クックパッド社でウェブサイトを中心に据えたサービス展開から、モバイルアプリ中心に戦略をシフトしていった過程で得た知見をもとに、サーバーサイド開発の経験でうまくいった点、合わなかった点が紹介されました。

例えば、サーバーサイド開発では小さな修正を何度もデプロイするというプラクティスをアプリに適用したところ、一度混入したバグバージョンもロールバッグできずに残り続け、また頻繁なアップデートはユーザーから嫌がられてしまったという結果になり、差分をリリースバージョンに集めて強めに検証する方針に変更したとのことです。また、CIを導入しているものの、UIやアプリケーションの挙動そのものに対するテストは難しいとのことで、人間の目で見ている部分をどう保証すべきかはサーバーサイド/クライアントサイド共通の課題となりそうです。

そして、トークセッション部では OSSについてお二人のご意見を伺うことができました。PerlなどのOSS文化の強い言語では、小さなライブラリが多数共有され、足りないものがあっても気軽にコミットする文化がある一方で、iOSやAndroidの世界はプラットフォーマーが握っている部分が大きく、コミッターとしての参加はまだまだ課題が多いとのことでした。最後は「Perlコミュニティの文化をアプリの世界にも持ち込めたら良いなと思う」という心強い言葉で締められました。

YAPCの二日間を通じて参加したどのトークも、問題の解決のために様々な方法を探り・試していくことを楽しんでいることが伺えるような発表でした。冒頭にて様々なテーマが飛び交うという点に触れましたが、内容も言語も無関係に扱ってしまう姿勢は、手段に囚われないPerlコミュニティの気質が表れているのかもしれません。

レポート/田中達也