DevOps インタビュー : 第 1 回 楽天さんの DevOps について聞いてみた ~前編: 継続的システムテストの実力~


このコーナーでは、Microsoft Corporation DevOps エバンジェリストの牛尾が Microsoft/non-Microsoft にかかわらず DevOps について面白いことを実施している会社・個人の皆様にインタビューして、英語と日本語の両方でブログ公開してみようという企画です。毎回違う角度から DevOps に取り組む人々にお話をお伺いしてそれを皆さんと共有したいと思います。

お楽しみに!

第 1 回 楽天さんの DevOps について聞いてみた
~前編: 継続的システム テストの実力~

今回の DevOps インタビューは、楽天株式会社様です。日本で有数の規模の EC サイトを展開しておられ、ほかにも最近はクレジット カードのビジネスも絶好調。中にいる技術者の人も高スキルな人が目立ち、大手企業ですが、ベンチャーの気質を持っておられます。さらに、社内公用語を英語にして、グローバルな人材確保や、グローバルビジネスの展開でも成果を上げてきた日本有数の企業様です。

今回のインタビューでは、最も難易度が高い継続的システム テストのお話しそして、大手企業が DevOps に今取り組む必要がある理由などをお話しいただけました。

本日の DevOps な皆さま

荻野さん: 楽天の開発サポート グループで 20 個ぐらいのプロジェクトの自動化を担当しているテストと自動化のプロフェッショナル

高橋さん: 荻野さんと一緒に自動化の支援をしている。スペインで仕事をしていた

川口さん: 楽天のアジャイル コーチ。日本でのアジャイルの第一人者の一人。

家永さん: 永和システムマネジメントのアジャイル コーチかつ、TDD 等のテスト技術のプロフェッショナル

(以下敬称略)

Tsuyoshi: 米マイクロソフト所属 シニア テクニカル エバンジェリスト - DevOps

インタビュー

 牛尾: 皆さまお集まりいただきありがとうございます。まず、荻野さん、高橋さんのお仕事を教えてください。
 荻野: はい、私は楽天のデベロップメントサポートグループで 20 個ぐらいのプロジェクトの自動化を担当しています。テストやデプロイ、オペレーションの自動化のためのプラットフォームを作っています。
 高橋: 私は楽天の方針で、スペインに数か月いました。楽天は海外のグループ会社が多くあり、日本のエンジニアが英語でグローバルに仕事ができるようになるための短期派遣制度があります。それに立候補して行ってきました。その後、荻野さんと一緒に自動化をお手伝いしています。
 牛尾: 海外の仕事はどうでしたか? 進んでました?
 高橋: エンジニアリングの文化が日本とスペインでだいぶ違います。
 牛尾: 具体的には?
 高橋: 僕が今まで所属していたところがたまたまかもしれませんが、日本は個人の仕事の範囲が決まっていてその範囲で頑張って成果を上げる。スペインでは仕事の範囲の境界がそれほどはっきりしていなくて、チームで成果を上げる文化がありました。
 牛尾: じゃあ、早速ですが、DevOps の要素を大きく分けると、People, Process, Product という 3 つがあります。People はマインド セットや考え方、Process はプロセス、Product は、技術面のお話です。自動化を担当されておられるので、まず Product つまり、技術要素について教えてください。
 荻野: 自動化をするにあたっては、バリューストリーム (※) を常に考えています。例えばテストだからといってテスト工程に閉じこもらずに、要求分析からリリースの流れの中で考えています。

※バリューストリームマップのこと。メアリー・ポッペンディークが『リーンソフトウエア開発~アジャイル開発を実践する22の方法~』で紹介したプロセス分析手法。トヨタが源流。要望が発生してから、実際にリリースされるまでに行われる作業と手待ち時間を分析し、より効率的に進めるための改善ポイントを探す。

情報システム用語辞典: バリューストリーム・マップ
http://www.itmedia.co.jp/im/articles/0803/24/news136.html

「Dev のスピードアップ」と「運用のリライアビリティの向上」を目指しています。
アジャイル テストの 4 象限でいう左側の「開発者の価値」と右側の「ユーザーや運用者の価値」の両立を目指しています。

 牛尾: 何か課題はありますか?
 荻野: そうですね。開発をする Dev 系のグループと、運用をする Ops 系のグループに分かれているので、昔は開発チームがサーバーが必要なときに、運用をするグループにお願いするので、結構時間がかかっていました。
 牛尾: どんなシステムが対象になっていますか?
 荻野: Java や PHP や Ruby 等でできた Web/API Server 系のアプリケーションです。
 牛尾: どのようなテクノロジーを使ってそれらの仕組みを実現していますか?
 荻野: まず、Ops 系のグループが、サーバーをプロビジョニングします。Chef や Docker をはじめとして、OpenStack 等も活用しています。アプリケーションは、デプロイ ツールの Capistrano や Fabric を使っています。あとユニット テストは JUnit 等をつかって使ってやっています。
 牛尾: 一般によく発生すると思うのですが、現場の開発者の皆さんはユニット テストを書いてくれますか?
 荻野: ここは難しいポイントですが、単体テストは開発チームの皆さんが好きにやるほうがいいので個別のチームの皆さんにお任せしています。
 牛尾: じゃあ、ユニット テスト以上のテストについて教えてください。
 荻野: 私は、テスト自動化の文脈で、「継続的システム テスト」というコンセプトを打ち出しています。
 牛尾: それはどういうことですか?
 荻野: 継続的インテグレーションのコンセプトは、結合やテスティングを継続的に自動で実施するという考えですが、それをシステム テストの世界にも適用して自動化し、継続的に実施します。
 牛尾: はっきりいって、ユニット テスト以上の自動化は DevOps 系の技術の中でも一番難易度が高いですよね。
 荻野: そうですね。
 牛尾: ちなみにどういう効果がありましたか?
 荻野: 今までは、システム テストのサイクルは、テストでバグを出し切って、手動デプロイするのに 5 日ぐらいかかっていました。自動化後は、毎日システム テストを実施しています。夜中に動くので次の日には結果がわかりますので、問題が発生しても 2 日でなんとかなります。
 牛尾: ちなみに、自動テストはどの程度の時間で実行されますか?
 荻野: 2 時間ですね。普通にやると 50 時間かかるのですが、20 ~ 30 並列でJenkinsを使って流しているので 2 時間で終わります。
 牛尾: 凄いですね。DevOps の一般的な事例だと、よく一日 10 回以上デプロイの事例とかありますが、結構この分野はあきらめていて、おかしくなったら、「すぐ戻せるので大丈夫だよねー」というノリでさっさと本番にデプロイしちゃってるケースが多いと思うのですがガチでシステム テストの自動化してはるんですね。
 荻野: はい。 Jenkins の Master/Slave 構成で、Slave は 100 台程度あります。
 一同: おー!
 牛尾: メアリー・ポッペンディークの有名な質問ですが、1 行のコードを変えた時にどの程度の時間でアプリを本番にデプロイできますか?
 荻野: 1 行に対するテスト コードの量にかかわると思います。
 家永: それって不吉なコードのにおいがします。何かおかしくないですか?
 荻野: いえいえ。楽天の場合は、例えばサーチ エンジンとかあるので、検索精度向上のためにソース コードを 1 行変えたら、検索精度のテスト コードを 1 万行変えないといけないというケースもあるんです。
 牛尾: なるほど。これは相当特殊ケースですね。ちなみにそうでないケースならどうですか?
 荻野: 普通のテスト ケースなら 3 時間でデプロイできます。
 牛尾: エンタープライズ系でこれを実現しているのはすごいですね!ところで、ここでいう「システム テスト」は何を指していますか?
 荻野: エンド ツー エンドの機能テスト、そして非機能テストです。パフォーマンス、データの一貫性、可用性、サーチの精度、冗長性分散環境でのインデックスのテストですね。
 牛尾: 非機能テストでいうと、システム テストでやっていた、障害テストとかも含むんですね。
 荻野: はい。リカバリ テストとか含みます。他では運用テストも実施しています。
 牛尾: がっつりやってますね! ちなみに、具体的なツールはどのようなものをつかっていますか?
 荻野: 受入テストでいうと、Jenkins が中心にあります。Web ベースのテストは、Selenium を使っていて、JUnit/Selenium/CucumberJVM で実現しています。
 牛尾: ちなみに受入テストの自動テストを書くのはどのタイミングでやっていますか?
 荻野: アジャイルでやっているチームは、スプリントの中で実施しています。そうでないところは、後追いで書くケースもあります。
 牛尾: Azure は活用されていますか?
 荻野: 実は今後グローバルなテストが必要になってきます。Azure はグローバル展開されていて、その部分が使いやすいので、リージョンをまたいだパフォーマンステストを Azure 上で実現しようとしています。
 牛尾: システム テストの自動化は?
 荻野: 受入れテストと同じツールセットです。JUnit / Selenium / CucumberJVM + Jenkins ですね。
 牛尾: あ、ところで醤油どこ?
 川口: I will show you. これは、英語、日本語の両方が理解できないとわからない高度なダジャレだ。

あとがき & 次回予告

さて、前半戦いかがでしたでしょうか? 継続的システム テストというコンセプトを考えて、システム テストの自動化を本当に実施して成果をあげておられます。

 様々なシステム テストをがっつり自動化して、それを Jenkins で分散させて 2 時間で終わらせているのも衝撃的でした。ここまでじっくりと品質を保ちつつも、リリース サイクルのスピードアップをしているのはとてもいい意味で日本的な素晴らしさだと思いました。

楽天の荻野さんは先日 JaSST (ソフトウェアテストシンポジウム) で継続的システム テストについてご講演されています。よかったら是非こちらをご参照ください。

次回は、DevOps がどうして大手企業にとって重要なのかという熱いディスカッションが繰り広げられた中盤戦がスタートします。

今までは沈黙を守り、ダジャレ程度しか貢献しなかった、川口さんが火を噴きます。

Comments (0)

Skip to main content