はてなやクックパッドの開発現場で、CIやテストはどう行われているのか?(後編)。CROSS 2014

2014年1月21日

Web技術について横断的に語り合うイベント「CROSS 2014」が1月17日都内で開催されました。「現場に聞く!テスト/CI/DevOps、実際のところどうなの」というセッションでは、フリーランスエンジニアの伊藤直也氏がセッションオーナーとして司会を担当し、クックパッドで開発まわりのエンジニアをしている舘野祐一氏、はてなでアプリケーションエンジニアをしている伏井洋平氏、KAIZEN platform Inc.の石橋利真氏らがスピーカーとして登壇しています。

セッションの前半では、テストの重要性やテストをどのくらい書くべきなのか、といった議論が行われましたが、後半ではどうすれば組織としてCIやテストに取り組めるのか。そして組織内での情報共有などについての意見が交わされました。

(本記事は「はてなやクックパッドの開発現場で、CIやテストはどう行われているのか?(前編)。CROSS 2014」の続きです)

クックパッドには「開発基盤グループ」がある

fig

伊藤 クックパッドには「開発基盤グループ」っていうのがあるらしくて。インフラでもない、アプリケーション開発でもない第三のグループみたいなのがあると。ここがテストの環境整備を作ってるの?

舘野 テストの環境もデプロイ環境もミドルウェアも、エンジニアの開発環境をとことん良くしてユーザーにどういうメリットを出せるのか、というのを考えてやっているのが開発基盤グループですね。

伊藤 例えばどういうことをするの?

舘野 「Chanko」っていうA/Bテストをするためのツールを作ったり、テストの速度を上げられるかっていうのテスト速度の最適化を考えるとか。デプロイでは、Jenkins回した後に自動で本番と同等環境で即座にチェックできるようにしただとか。

開発者がユーザーに対してどんどん価値をだしていけるようにするには、何を解決すればいいか、といったことを考えてやっていくと。

伊藤 これが大事だなと思ったのは、例えばテストを書くというのが業務上どのくらいのコストなのか、とか言っていると、絶対に新機能を作るとか営業からのリクエストを実装する方が優先度が高くなっちゃって、テストを書きたいとかCI環境をセットアップしたいといったことが普通の会社だとなかなかできないので。

だからクックパッドみたいに、そもそもそういうこと(テスト環境やCI環境の整備など)をする優先度の高い組織を作るのが重要だと思うんだけど。

はてなはその辺どうしてるの?

はてなではメインの仕事を横に置いてフロー改善を優先していい

伏井 はてなはチームによってやり方が違うのですけれど、基本的にはエンジニアが「これをやったら開発効率が上がる」と思ったら、そこで勢いよく実装してもよい、ということになっていて。

伊藤 メインのタスクを横に置いて、フロー改善をしてもいい、というルールにしていると。

伏井 例えば最近だと、テストが失敗したらIRCに【悲報】って流れてきて、なんとかテストが落ちましたみたいなのを知らせてくれる、というのを作ったり。

伊藤 それって、メインの業務があるんだけど、それを置いといて、IRCに【悲報】って出す実装をしてもいいと。

伏井 そういうことです。で、それをやった方が、やらずに後回しにするより良いっていうのがあって。実際良くなるんですよ。

伊藤 それってすごくいいなと思うんだけど、やっぱり会社がそもそもそういうカルチャーだから、そういうやり方をしてもおとがめなし、みたいなところがあるよね。

で、例えばさっきみたいに、テストを書くために上司を説得しても、次はCIしたいとか、AWS使いたいというときに、そのたびに上司を説得しなくちゃいけないのは大変で心が折れそうになる。だからクックパッドの開発基盤グループみたいなモデルは1つの正解で、そういう組織を最初に作ってしまえばいいと。

舘野 うちの会社のミッションとして、ユーザーにとって何が大切かを徹底的に考えるというのがあって、そうすると何でもやりやすくなるんですよね。開発だったら「これってユーザーのためになるのだからやらせてください」っていうと通りやすくなるとか。

そういうのが会社のミッションとしてあるって言うのはありがたかったですね。

伊藤 でもテスト書かせてくださいとか考えるたびに「やらせてください」って言うんじゃなくて、最初からそういう組織があるのは面白いなっていう。

開発生産性を高めるための組織がこれからのトレンドか

それから「グーグルのソフトウェア開発」という本に書いてあって面白かったのは、テストを書けってしつこく会社の中で言ってたんだけど、なかなかうまくいかなかったと。で、テストを書くためのチームも作ったんだけど、それでもうまくいかないと。

そこで、テストを書くチームを「デベロッパープロダクティビティ」という名前に変えた。要するに開発者の開発生産性に寄与するチームですってミッションを変えたらいろんなことが改善されていったという話が冒頭に書いてあって。

だから開発者の生産性向上というミッションのチームってこれからのトレンドになるかもと思って、そういう面でクックパッドは先進的だなと。

舘野 テストの導入って言う面だと、僕が入る前の2009年に1人のエンジニアが「このままだと開発が遅くなっていくので、1カ月時間をください」と言って、最初に数千個のテストを1人で書いてっていうのがあったんです。

1人が責任を持って短期間でやると言うので、経営側もやらせてみようか、というのと、ほかのエンジニアも最初はテストって大事さが分からないんだけど、啓蒙していくと徐々に良さに気がつき始めて。そこがターニングポイントでした。

伊藤 クックパッドって今でこそエンジニアリングカンパニーみたいに思われているけど、それはここ3年くらいの話なんだよね。

いろんな会社の人が「テストなんか無理っすよ」って言うんだけど、そもそもそういうのってここ2、3年なんだよね、こういうのをやり始めたのって。だからやればできない話じゃないんだと。

昔はまだ道具が揃ってなかったというのがあったけれど、最近はGitHubとかJenkinsとかが出てきていて、敷居が下がったのは大きいと思う。

エンジニアの組織の透明性みたいなものが大事

伊藤 あと5分くらいなので、最後に情報共有をどうしてますかっていう話をしておきたいんだけど。

はてなには「はてなグループ」があって、これを使ってブログを書きながら仕事をするんですよ。エンジニアに限らず社長も含めてブログを書いていて、メールでやりとりすることはほとんどない。この人は何をやっているのかとか、あの作業をしているときにどうやったとか、検索すれば全部出てくる。

舘野 クックパッドに入ったときにはWikiがあった程度で全然情報共有をやってなくて、エンジニアがブログを通してコミュニケーションするのはすごく重要だと、はてなで開発した人はみんな感じてるんだよね。

伊藤 そうそう。はてな出身者にはそういうコンテキストがすごくあって、結局、この人はクックパッドに入社してから「グルーパッド」っていう、はてなグループそのまんまみたいなのを作ったと。

舘野 めっちゃ使われてます。最初は「本当にそんなツール必要なの? ツールが増えることによってコミュニケーションが増えちゃうから良くないんじゃないの?」、とか言われてたんですが、特にインフラチームが活用してくれて、そこからどんどん広がっていったというか。

伊藤 こういうのがないと、今日話したような(コードレビューとかテストとか)を一生懸命やりたくても、組織の中で伝えるタイミングがないんだよね。テストをもうちょっとこう書こうよとか、オレこんなかっこいいコード書いたぜって言いたくても、「こんなかっこいいコード書きました」っていうメールを全員に送るわけにもいかないし。だからブログでのコミュニケーションとかってすごく重要だと思うんだけど、まだまだ浸透してない。

伏井 はてなの人は、これがないとやっていけない感じで。

伊藤 僕がGreeに入ったときも、やっぱりこういうのはなくて、Wikiはあったんです。でもWikiの最大の問題点は、いつどんな更新があったかという情報がこっちにこない。気付くとドキュメントが増えているみたいな。

はてなグループだとアンテナみたいなのが付いているので、あの人はかっこいいコード書いたんだ、とか分かる。

伏井 隣のチームではJenkinsを導入したらしいぜ、とか。

伊藤 そうそう。それがないと、月に1回の勉強会で「Jenkins入れました」っていう報告を聞いて、ざわっとする、みたいな。1カ月遅れで。

石橋 うちはHipChatみたいなチャットツールで情報共有していたんだけど、あれは流れていっちゃうからね。

伏井 こういうのがあると、社内で承認しあえるみたいなのがあって、おれはめっちゃいいコード書いたんだ、とか書くと、はてなスターみたいなのがついて、ああ、おれはいい仕事したんだみたいな承認欲求が満たされる。

伊藤 星がたくさん付くと、トップページに「注目の記事」みたいなのを出す機能もあって。

舘野 それグルーパッドにもありますよ(笑)

伊藤 それが大事で、やっぱり人が増えてくると読めなくなるんだよね。だから例えば会社の偉い人がちょっとエモーショナルなことを書いたりすると、星がばーっと付いてちゃんと従業員に伝わるとか。

僕は「CIやるぞ」とか「テスト書くぞ」っていうのはいいんだけど、それはそもそもこういうエンジニアの組織の透明性みたいなのが前提にないと、いくらやっても局所最適におわっちゃうから、まずはこういうことを始めたらって思っていて、ちょっと最後にこういう話をしておきたかったと。

じゃあ本日はありがとうございました。

あわせて読みたい

アジャイル開発 プログラミング言語




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本