
エンジニアが開発に集中するために、手間がかからない仕組みが重要
窪野安彦氏がYahoo! JAPANに入社した2004年、コンピューターは現在よりもかなり高価で貴重だった。当時の開発エンジニアに求められた思想は「人が頑張って、できるだけ有効に使おう、コンピューターが働きやすいプログラムを書こう」というものだった。
しかし今は、ハードウェアの価格が大きく下がり、クラウドの普及によりリソースの柔軟な運用が可能となっている。開発面でもスクリプト言語が多くなり、ツールも格段に進化した。開発効率も大きく向上したはずだ。
しかし窪野氏は、「使う道具は変わったが、『コンピューターをなるべく効率よく動かす』思想は進化していない、もっと人が楽をしてもいい」と語る。
窪野氏はYahoo! JAPANのサービスで用いられている一般的なシステムでの事例を挙げる。情報の提供元から、Yahoo! JAPANのサーバーに対してデータが入稿されてくる。そのデータをバッチ処理で整形し、問題がなければそのままYahoo! JAPANのデータベースに登録する。さらにアクセス数などの関係でパフォーマンスが追いつかない場合は、データベースからキャッシュファイルを作成し、多くのサーバーにコピーを送る。
ここでの問題は、バッチ処理は自動実行するcronに仕込まれているため、cronにトラブルがあるとバッチ処理が止まってしまうことだ。また、キャッシュファイル作成工程でも、キャッシュファイルのコピーに失敗してしまう可能性を抱えている。
そこで窪野氏のチームは、「使う道具が新しくなっているのだし、もっと手間がかからないようにできないか?」と考えた。
導き出された手法は、cronをやめてMessage QueueingやFaaS(Function as a Service)にする、というものだ。これで夜間にバッチ処理が止まることがなくなる。さらにキャッシュファイルを使用せず、KVSを立てて対応した。
現場が抱えている課題は他にもある。例えば「バージョンアップやセキュリティ対応が多い」こと。Yahoo! JAPANは物理・仮想サーバーを10万台以上抱えており、その上お客さまのデータを預かっているため、脆弱性はこまめに対応する必要がある。
プロジェクトにおけるエンジニアの主な仕事はサービスの開発だが、並行してバージョンアップやセキュリティ対応も行う必要がある。エンジニアが少人数だと、多くのサーバーに対してパッチを当てる作業だけでも人的リソースが厳しくなる。また、作業量は安定せず、例えば突発的なセキュリティ対応などで増える可能性もある。だからと言って、プロモーションなどの兼ね合いもあるため、開発スケジュールを後ろ倒しにすることは現実的ではない。結果としてエンジニアにしわ寄せがきてしまい、機能追加や改修、新たなセキュリティ対応もできなくなる、悪循環に陥ってしまうのだ。
そこで窪野氏は、担当を分けることを考えた。例えばバージョンアップ・セキュリティ対応の専任者がいれば分業ができるので、プロジェクトのエンジニアは、本来やりたかった開発に集中できる。
しかし社内の全てのチームで、このような運用を行うことは難しい。Yahoo! JAPANには多種多様な100を超えるサービスがあり、対応すべき案件が一気に集中することもある。専任者が全チームのサポートを行うことが望ましいが、プラットフォームがそれぞれ異なるため現実的ではない。人的リソースをなるべく使うことなく、まとめて面倒を見る仕組みを考えているうちに、窪野氏は「社内PaaS」という答えにたどり着いた。
デモを交え、Yahoo! JAPANの現場で使われているPaaSを紹介
ではYahoo! JAPANは、PaaSをどのように活用しているのか。
Yahoo! JAPANが使っているのは、オープンソースベースのPaaSプラットフォームである「Cloud Foundry」。オンプレミスのOpenStack上で動作している。
Cloud Foundryは多くのベンダーで採用されており、他プラットフォームのノウハウも参考にできる。また、動作環境を選ばないという特徴もあり、OpenStackなどの複数のIaaSや仮想化基盤を利用可能だ。さらに、拡張性が高いので開発言語やデータベースなどの追加や拡張が容易、といったメリットもある。
Cloud Foundryを使うと、ソースコードと設定ファイルをCloud Foundryにプッシュするだけで、自動的にサーバーが立ち上がる。プッシュされたCloud Foundry内では、必要なアプリケーション、ランタイム、エクステンションをまとめたDropletが作成され、設定された数のコンテナが立ち上がる。また、設定ファイルに書かれたURLに、ドメインを自動的に立ち上げる。

例えばPHPのバージョンを変える場合、通常はソースコードを書きなおさなければならない。しかしCloud Foundryでは、設定ファイルの該当部分を修正してプッシュすると、新バージョンのデプロイが自動的に行われる。
ここで、CTO室SWATチームに所属する田口雅浩氏も登壇し、Cloud Foundryを使ったデプロイとPHPのバージョン変更のデモを行った。
田口氏はCI/CDのデモも続けて披露。Yahoo! JAPANでは「Concourse」というパイプラインベースのツールを採用している。ConcourseはパイプラインがGUIで見える化されており、さらにYAMLでパイプラインを書くことができる。
パイプラインは、「Tasks」「Resources」「Jobs」の3要素で構成されている。Resourcesとして入力されたものをJobがTaskとして処理、新たなResourcesとして出力する。Jobを繋げてパイプラインを構成し、最終的にはCloud Foundryにアプリケーションをプッシュする。
実際のデモは、Yahoo! JAPANのGitHubにエンジニアがコミットをプッシュ、それをConcourseがチェックし、テストが実行されてデプロイが完了、するとアプリケーションがCloud FoundryにResourceとしてプッシュされる、という内容。コマンドライン上で設定された内容を確認する模様や、テスト完了の通知などを見ることができた。

Yahoo! JAPANにConcourseを導入したのは田口氏本人だ。窪野氏の「Concourseを入れてみて良かった点、悪かった点は?」という問いに対し、田口氏は「良いところは、YAMLファイル1つでパイプラインが作れること。DockerでConcourse自体が提供されているので、Dockerを簡単に使い始めることができる。ただ、開発途中の製品なので欲しい機能が全てそろっているわけではなく、最新版の情報を追っていくことが必要」と答えた。
デモを終え、窪野氏は社内PaaSについて今後の展望を語る。「PaaSは誰でもすぐに使えるものではない」と、窪野氏。今はいくつかのサービスで先行して導入している、いわばチャレンジの段階だ。その後、全社的に本格導入してさらに活用していく。
しかし、Yahoo! JAPANには100以上のサービスがあり、1つのアーキテクチャで全てのチームをカバーするのは難しい。そこで、窪野氏は組織ごとに対応を柔軟に変えられる仕組みを作った。
それぞれの組織内にPaaSの導入推進に興味を持った有志がおり、組織・サービスに合った対応で広めていく。現在、有志は非公式で20人ほどいる。
「PaaSはあくまで道具」と、窪野氏は語る。最も重要なのは“使い方”だ。PaaSを使うのであればウォーターフォールよりもアジャイルで開発したほうが、多くのメリットを享受することができる。そして、「サービス開発(スピード)を10倍にしたとタイトルにした。これはイテレーション、環境構築のスピードが10倍になったこともあるが、それだけではない。お客さまに付加価値を届けるスピードまで10倍にしていきたいと思っている」と付け加え、セッションを締めくくった。
お問い合わせ
ヤフー株式会社