DevOps インタビュー: 第 5 回 Yahoo! JAPAN さん ~Dev エースを Ops へ強制移動というレッドピル~

本日の DevOps インタビューは Yahoo! JAPAN さんです。今年20周年を迎え、IT 企業の中では長い歴史を持つ大きな企業の Yahoo! JAPAN さんならではの特色、チームの熱さが溢れる普段なかなか聞けない DevOps Journey インタビューになりました。お楽しみください!

今日の DevOps な人々

左から 後藤 拓郎 さん (Takurou Gotou) 山口 寛 さん (Hiroshi Yamaguchi) 塚 穣 さん (Minoru Tsuka) 光野 達朗 さん (Tatsuro Mitsuno) 山口 鉄平 さん (Teppei Yamaguchi)

 牛尾 剛 マイクロソフト シニア テクニカル エバンジェリスト

※以下敬称略

牛尾: みなさんこんにちは、本日はよろしくお願いいたします!

皆様: よろしくお願いいたします。

牛尾: ところで、 Yahoo! JAPAN さんはどういう人数構成になっていますか?

皆様: 全社員で 5,500 人程度、そのうちエンジニアは 2,000 人以上で、月間 630 億以上の PV を支えています。決して多くはないので、今も積極的にエンジニアの採用を行っています!

牛尾: とても多いですね! ちなみに、今 Yahoo! JAPAN さんの DevOps はどのような状況ですか?

光野: 効率を良くしたいが、同時に品質も確保したいので、「まずはCI だよね」という話をしています。弊社は進んでいるチームはものすごく進んでいるのですが、会社全体としては、内部のチーム間でレベル差があります。まずはそこからやっていこうという話になっています。

牛尾: なるほど。面白いですね! ちなみにばらつきという話がでていましたが、どんなばらつきがありますか?

一同: こんな感じかな (と言いつつ全員でディスカッションして、下図を描く)

牛尾: ちなみに、なぜ、天国と地獄の間の水平線が、Jenkins なのですか?

光野: 弊社にも、古いものから新しいものまで幾つかのCDを実現する超便利な自作ツールがあるのです。新しい物はテストを実行してカバレッジが低いとデプロイを止めてくれたりと、今風な作りになっています。

山口 (寛): 昔からあるものはテストこそしてくれませんが、パッケージ作成、プロビジョニング、デプロイとなんでもできるツールになっています。その為、まずは Jenkins まで到達すれば幸せになれます。テストの自動化など足りない部分を補えば良いということです。

牛尾: いかついですね。本来継続的デプロイメントは難易度が高いのですが、自動テストを書いて、CIさえ作っておけば、「秘伝のタレ」ツールが簡単に本番デプロイしてくれるのですね。だから、"自動テストと CI がクリアできているか?" ということが、技術イケメンチームとそうでないチームの違いになってくるんですね。

塚: はい。ただ、こういった社製ツールを使っている怖さもあります。

牛尾: といいますと?

塚: 新しいツールがどんどん出てくる中で、世間の流れに取り残されてしまうのではと感じることもあります。こればっかり使っていたら便利すぎて進歩や成長が止まってしまうのではないか、思考停止してしまうのではないかと思うのです。

牛尾: 他に自社でつくっているツールはありますか?

山口 (鉄): CI ツールを自社作成しています。

牛尾: なんでわざわざ自社作成をしたのですか?

光野: 我々には、いろんな既存ツールがあります。これらと連携可能にしようとすると、Jenkins などをいじくると楽になったのですね。そのうち、下手に修正するよりも、作った方がいいんじゃないか? と思うようになりました。

牛尾: おー、なるほど、これは大きな企業さんならではの展開ですね。ちなみに、レベル差という話をしておられましたが、どういう差があるのですか?

塚: そうですね、光野さんのチームは小さなチームで、子会社になって素早く動けるので、例えば Docker をイミュータブルなテスト環境に使っていたりもします。もちろんアジャイル開発を採用しています。

牛尾: Infrastructure as Code はどうですか?

光野: 先ほどの図にもある通り、プロジェクトによって Ansible など様々なツールの利活用はしています。

牛尾: では、一方そうでないチームはどんな感じですか?

塚: 超弩級ウォータフォールみたいなところもあります。

山口 (寛): 例えば Hadoop を扱っているチームはプラットフォームとして止められないこともあり、慎重に取り扱わないといけない部分もあります。1クラスタで 3000 台を超えるサーバがあって、この部分の自動化や並列化などは進めています。 ところが、パッケージを取得するだけでも、3000 台のサーバがたった2−3台のパッケージサーバーにアクセスにいくので、その 2~ 3台が社内 DOS 攻撃をうけているような状態になります (笑) そういうところだとかなり慎重にならざるを得ません。

牛尾: Excel 駆動開発的な

皆様: はい (笑)

一同: (笑)

牛尾: 凄い差ですね。なんか、一方は北海道の大地を開墾しているのに、一方は未来みたいな。

皆様: (笑) そうですね。というか、パーティションひとつ隔てたらそこは未来みたいな (笑)まぁ、3 人のチームから 300 人のチームがありますから。

牛尾: ツールは統一されておられますか?

塚: いいえ。

牛尾: そうですねー。アジャイルの文脈で考えると技術の意思決定はチームですからね。

塚: :例えば先ほどの Infrastructure as Code のツールだと、みんな様々なツールを使っています。

塚: でもやっぱり、権限移譲された小さいチームからイケてるチームが生まれます。光野さんのところとか。

光野: 子会社である、うちのチームで少人数チームでやったノウハウを、Yahoo! JAPAN にも展開しようと草の根活動をしています。

牛尾: 素晴らしい! ちなみに、どういう経緯で DevOps 化してきましたか?

塚: 社長交代・新執行体制への移行が 2012 年にあって、新 COO がプロダクション改革をするぞと言い出しました。今のものづくりはいけてないぞと。

牛尾: なるほど

塚: しかし、それは、あまり進まなかったのです。

牛尾: そしてどうなったのですか?

塚: 「じゃあ、それを伝道する人がいればいいやん。」という発想のもと、「塚さん、DevOps のエバンジェリストをやりませんか」と言う話がでてきました。私は気が付いたら DevOps エバンジェリストになっていました。現在 DevOps エバンジェリスト 4 名、アジャイル・リーンのエバンジェリスト 10 名、他にも 30 ~ 40 名のエバンジェリストがいます。

牛尾: 草の根活動ですか?

塚: そうです。権威はありません。趣味です。ゲリラです。でも、ぼっちでやるより心強いかなと。やっぱりコミュニティの必要性を感じたし、イベントも連携しやすいなと

牛尾: それはいつ始めました?

塚: 草の根活動は 2014 年頃かな

牛尾: 効果はありましたか?

塚: 2014/3 に出来た "DevOps 部屋" というチャットルームがありますが、2014/3 に 62 人だったのが、今は、512 人になりました。

牛尾: おー! ちなみに、布教がうまくいった原因は何ですか?

塚: 勉強会を 2 ヶ月に 1 回実施しています。Fabric とか Ansible とか、Testingについてとか。次回は事例紹介付きで、ChatOps をやろうと言っています。社内に事例があるので。

光野: 他にはチャットルームでは、”今日はここまで技術的にできました”みたいなことは常に流すようにしています。

牛尾: ちなみに、DevOps にお約束の、サイロの話が出てきませんでしたが、無いのですか?

塚: 最初は運用と開発で、覇権争いがあって、事故とかバグが発生した時しか会わない感じだったのが、今では、例えば元 DevのOps がいるので、普段会わない部署の人とも話しやすくなりました。前は、「リリースはいつですか? 」「今日です。」「え! 」みたいなこともよくありました。

牛尾: 何をしたんですか?

塚: 開発のバリバリのエースエンジニアを説得し、納得ずくの高いモチベーションとともに Ops の部門に異動してもらいました。

牛尾: えーー! だいたいエースって 10 人力ですよね?

塚: 10 人力ですね。だから思い切りました。2014/4 のことです。

牛尾: やったきっかけはどんなことですか?

塚: 部長と話していて、もっとシナジーをださないといけない。そのためにはもっと人の行き来をさせないといけないという話になりました。で、言い出しっぺの開発としては開発の人を出すしかないとなった時に、どうせならとサービスを中心にまわしていたエースを送り込みました。

牛尾: いなくなって大丈夫だったのですか?

光野: 離れたといっても、距離的に 10 メートルぐらいだったので、すぐに元エースに聞けました。メッセンジャーでも聞けました。

牛尾: 効果はどうでした?

塚: ありました。元々はエンジニアのためのエンジニアリングが進んでいませんでした。ところが、エースを移動させたら、運用の人が "デプロイ ツールつくろうぜ!" とか、"配布ツールをつくろうぜ" とか、いう話になりました。 後藤:他のチームでも、最初から運用兼務者を開発に入れるのを義務付けしていました。自分でデプロイして、アラートがあがったら自分で見るとか。運用チームが、開発のプルリクエストを投げるようになったり、C のビルドを開発チームができないというから見てみたりとか

牛尾: ガチですね? スプリントに Ops を混ぜた感じですかね。

塚: 他にもサービス毎にチャットルームを作って、開発と運用両方がいる部屋をつくったりして、情報共有をしていました。こんな感じで、劇薬 (エース移動) のチームも、スプリントに Ops を混ぜたチームも、両方うまくいきました。やっぱりトップダウンと草の根活動は両方重要ですね。

牛尾: ちなみに、最新のチームではない、普通のチームはどんな感じですか?

皆様: DevOps をやりたいけど、そこに工数を割けないという感じです。

塚: Yahoo! JAPAN 作成のデプロイツールは、パッケージ、サービスイン、アウト、インフラ構築など全部やってくれます。便利すぎるので、使っていくうちに思考停止し、依存していきます。だから、便利な分だけ、他のツールへの移行コストがかかります。

牛尾: 海外の DevOps Enterprise 2015 というイベントに出席したのですが、多くの企業が、ユニット テストの導入と、レガシーコードに関する報告をしていました。その辺りの難しさはありましたか?

塚: 新しいやり方を何かしないといけないのはわかっているけど、どうしてもやらない理由を述べる人がおおい。リソースがたりないとか、テストが書けないとか、いろいろ言われるのでそういう人の啓蒙をしています。開発プロセスも学び始めて、効率の悪さに気づき始めたところもあります。

光野: テスティングに関しては、「地上」以上と、以下の違いは、CI でテストがちゃんと動いているのかが大きな違いですね。

牛尾: テストはいつも問題ですね。US でもちゃんと正しく書いているのは40%ぐらいらしいですね。私は、アジャイル コンサルタントだった頃、テスト駆動開発をやってもらうために、まず OOP を短い時間教えていました。カードをつかった方法です。 オブジェクトゲームというのですけど、これを使うと、4 時間ぐらいでオブジェクト指向がわかったつもりになります。 そうすると、「俺、オブジェクト指向わかるわ! 」と思えるようになって、その後のテスト駆動もすんなりいきます。そしたら、スプリント回すのはすごく楽ですね。これは、Agile2011 で発表した資料です。 (参考 Agile 2011 – Agile Education by Object Game)

塚: わかったつもりになるのが重要ですね。ちなみに、テストに関しては、粗粒度の受入テストを手元でやっていただいて、最初は手動、その後自動化してもっています。

牛尾: どうやって、テストを書いてもらえるようにしたのですか?

塚: 今は、事故やトラブルの原因が仕様漏れ・考慮漏れ・テスト不足・スキル不足だった場合、事故再発防止策としてテストコードを書くことを前提として実施、原則的には例外を認めない感じでやってもらっています!

牛尾: レガシー システムの課題や対策はありますか?

塚: 単体テストは高望みなので、諦めて IN / OUT のテストのみにしています。肥大化したコードが読めなかったりするので、テストだけ見てリファクタリングできるようにしたいなと思っています。

牛尾: 課題はどんなことですか?

塚: まず、できないと思っている人が多いです。最初の導入だけでもできると思ってもらうことが重要ですね。CI までさえいければ、あとは楽です。

牛尾: では、これから DevOps の草の根活動チームとしてやっていきたいことはどんなことですか?

山口 (鉄): あたりまえになって我々がいらなくなるのがゴールです。本来エバンジェリストは社内で使う用語ではありません。技術トレンドを追っている人が、自然と自分たちで話したり、トレンドを作っていたりする姿が理想です

牛尾: じゃあ、最後に、これから DevOps に取り組まれる皆さんに向けてメッセージを

"頑張らないため" に頑張ろう。そして、寝て起きたら自動的に終わっているのは最高ですよ!