Cross 2014メモ(1) 現場に聞くパネル

2014/01/17にベルサール新宿グランド行われた、Cross 2014に行ってきました。当日取ったメモを公開します。間違いや発言意図と違うなどありましたらご指摘お願いします。

現場に聞く!テスト/CI/DevOps、実際のところどうなの

参加者
  • 直也さん @naoya_ito
  • 石橋さん @iandeth
    • KAIZENプラットフォーム 調整さんを作った人
    • 調整さん知名度高い
  • 舘野さん @hotchpotch
  • 伏井さん @hakobe
    • はてな アプリケーションエンジニア
テーマ
Github, プルリク
  • 直也さん: github+プルリク開発のブログ記事を書いたときは、決して「最新の」とは言わなかったが、いろんな反論があった。「そんなツールあるのか」「そんなのあたりまえ」など
  • 舘野さん: コードレビューはツールも使っていたが、ツールの生産性が低く、コードレビューのコストが高すぎた。2012年頭くらいからgithubを使った業務フローを考えてみた。プルリク→マージ→CIをやってみようという感じ
  • 舘野さん: 入社して1年くらいはgithubがなく、review boardを使ったりしていたが、コストが高かったのであまりやっていなかった。テストはあった
  • 伏井さん: はてな入社当時、テストはあったがあまり定着していなかった
    • 直也さん: はてなダイヤリーではじめてテストを書いたが、それはちょっと変えるとこわれるからという。はてなダイアリーの大規模改修のときにがんばって書いたが、手元で流すだけで20分かかって大変だった
    • 舘野さん: buildbotなどのCIツールはあったが自分達でやるメリットがあまりわからなかった。書いて2分後にデプロイしたり。あまりバグることもなく、テストの重要性・メリットがわからなかった
    • 伏井さん: はてなブックマークの機能が増えてきたときに、t/以下にテストを全部持っていったり。あんちぽさんが整備してテストやるようになった。ある時期CIがもり上がったときにテストも書こうということになった
    • 直也さん: Webアプリだと「ビルド」という概念がなかったので、「夜間にビルドがこわれないか保証する」という当時のCIの解説はひびかなかった。自分達と関係ないことだと思っていた
    • 石橋さん: コンソールに緑のラインが出ないとテストした気にならないから、Jenkinsとかだとテストしてる気にならなかった
  • 石橋さん: 開発が1人から2〜3人になったときに自動化した。開発チームがさらに大きくなるとCIとかなしではやっていられなくなった
  • 直也さん: CIがあたりまえと思う人と、やらない人のギャップが大きくなっている気がする
    • 舘野さん: やってみないとわからない面がある。文章で読んでもメリットがわからない。
  • 直也さん: 講演会でgithubは21世紀の革命だと言ってもポカーンってなることもあった
    • 伏井さん: gheができがよくてあれ使ってはじめて役に立つ、みたいな感じ
テスト考2014 by えじまさん
  • 直也さん: テスト考2014について。テストを書きすぎると自分の足を撃ってるようなこともあるよね、という話。ユニットテスト書きすぎるとリファクタしにくい、テストが必要というのはいいコードでないなどの指摘
    • 直也さん: yoshioriさんは自分のためのテストと守りのためのテストは違うよねというようなことを言っていた
    • 伏井さん: ひとでくんの意見: DHHがあまりテストを書きすぎるのは意味がないよと言っている → テストは書かなくていいんだという言い訳を与えるのはよくない
    • 伏井さん: はてなではコードの寿命がすごく長い。10年とか。その間に担当の人も移りかわっていったりする。自分の意図が伝わるように、他の人がこわさないようにテストを書いておくという文化
    • 直也さん: ひとでくんは執拗にテストを書くくらいでいい、と言っている。はてな座談会ではテストをテキトーに書いてレビューに出すとひとでくんがおこると言われている
    • 伏井さん: C0カバレージ(すべての行を過去することを保証)くらいはちゃんとしようという基準にしている。本当に問題のあるコードはリリースしたくない。C0は自動で調べるツールがあるので1日に一度くらい流している
    • 石橋さん: C0を100%にするのとテストをたくさん書くのでどれくらい大変になるの? 伏井さん: C0はそんなに大変ではない 直也さん:入力をモックとか使ってやらないといけないよね、それも大変ではない? 伏井さん: やればいい
    • 伏井さん: C0を重視というわけではないが、C0くらいはカンタンだからやろうよねと 舘野さん: C0は重視していなくても、テストがちゃんと意図したテストをしているかどうか判断するのにC0は役立つ
    • 舘野さん: 社の基準としてはテストを書きましょうとしていて、C0全部とは言っていない。コードレビューとテストで言うと、C0はちっとも本質ではない。実装に対して適切なテストを書いているかどうかの方が大事。テストのリファクタリング、テストの構造化はテストが伝えやすいかわかりやすいかをレビューで見るようにしている
  • 伏井さん: はてなでは開発チームごとにツールも違ったりしている。テストをどれくらい書きましょうという考え方もチームごとに違う。C0も一つの基準としてありますよねという程度。このくらいがいいという雰囲気を都度判断している
  • 石橋さん: KAIZENはテストの基準はない。モデル、コントローラも書いてる
    • 舘野さん: webだとend-to-endのテストがカンタンになっているので、それとビジネスロジックユニットテストを書いている 石橋さん: 同意。end-to-endが重要
    • 伏井さん: はてなブログではcasper.jsを使っている
    • 直也さん: end-to-endテストって昔のseleniumの印象があって、すぐこわれる。すごい大変。いまはカンタンに書けるしheadlessになっているしすごくよくなった
    • 舘野さん: Rubyではcapybaraで抽象化されていて、バックエンドは切りかえられるようになっている
    • 石橋さん: 宣言的に書けるのがいい
    • 伏井さん: casper.jsだとボタンクリックの後の変化をsleepで待つなどを明示する必要がない
  • 直也さん: コントローラとかどうすんの?
    • 伏井さん: JSとかあまり関係ないところはPerlで。編集画面などはcasper.jsを使ってなどという感じ
  • 石橋さん: end-to-endはなかなかできていない。KAIZENの特殊なのは、いろんな環境でこのJS貼ってくださいということがあって、クロスブラウザもやっつけられていない
    • 直也さん: browser stackなどもあっていろいろできる
  • 直也さん: テストはみなさんやっていると。ところがstack overflowは面白いこと書いてて、テストはほとんどしないがユーザーが報告してくれる、と言っている。このアプローチもなかなかいいよね
    • 伏井さん: そのへんはバランス。テストでそこそこやって、条件が特殊な部分は組み合わせ爆発とかあるからやらないとか
  • 直也さん: えじまさんの議論は立場が違うところで話している面もある。開発チームが2〜3人のところと20人以上でレガシーもあるようなところだと大変。自社サービスかお客さんからお金をもらっているかによっても違う
    • 直也さん: テスト書きすぎ問題もいろんな反論が来て「3か月で終わりのプロジェクトでそんなにテスト書いても仕様ないだがう」というのもあった。話のコンテキストが違う
  • 石橋さん: マネージメントから倍のコストかかったじゃないか、テストなんかやめろと言われ、戦ったとき、数字で勝ったことはない。頭を下げてやったところ、メンテコストが倍まで行かなくてもよくなって認められた例はあった
テストの環境整備
  • 舘野さん: クックパッドには開発基盤グループがあってテスト環境の整備などをやっている 石橋さん: それいいよね
    • 舘野さん: テストがどんどんやれることによってユーザーに価値を届けることができる。テストそのものでなく速度を上げるとか、Jenkins回ったあとにステージングに自動で上げて本番環境同等のテストができるとか
  • 直也さん: 普通の会社だと顧客要望に応えるのが優先でCIサーバー立てたりという作業がどうしても後回しになってしまう。クックパッドのように組織だってやっているのいうのはひとつのやり方
  • 伏井さん: はてなでは、これはぜったいイイと思ったら実装していいという文化がある
    • 伏井さん: CIでテストが落ちるとIRCで「【悲報】○○ブランチのテストが落ちました」が来たりする。そういうものがイイと思ったら作っていいという文化
  • 直也さん: テストを書かせてくださいと説得してしまうと、次にCIやりたいと思うとまた説得しなくちゃいけない。クックパッドのアプローチはいいと思う 舘野さん: 会社のミッションから立てているのでやりやすい
  • 直也さん: 「テストから見えてくるグーグルのソフトウェア開発」という本に、developer productivityと書いたらテストが定着したという話があった。開発者生産性向上という言葉で考えるといいと思う
    • 舘野さん: 最初にこのままではダメになると思って1人で一気に書いたりしたこともあった。そこから開発者の間にもテストっていいんだということが啓蒙できたと思う
    • 直也さん: 「うちの会議テストやってなくて無理っすよ」という会社もあるけど、ここらへんの会社でもここ2〜3年のことだと思うと、できないことではないんだと思う
    • 直也さん: 最近はツールがよくなっている。ぼくらはコードレビューとか10年前からやっていてもなかなか定着しなかった面がある。いまはいいツールもあるのでやりやすくなっているはず
情報共有
  • 直也さん: 情報共有どうしてますか? はてなはてなグループってのがあって、業務中にブログ書きながら仕事する。社長も書いてる。メールでやりとりすることはほとんどない。誰が何をやっているか検索するとすぐわかる
  • 舘野さん: クックパット入社時はそういうものがなかった。wikiはあったけどこういう風には書いていなかった 直也さん: それでgrouppadってのを作ったんだよね 舘野さん: めっちゃ使われてますよ
  • 舘野さん: WEB+DB vol77に書いている。コミュニケーションが増えちゃってよくないんじゃないのという声が最初はあったが、すごくよくなった
  • 直也さん: こういうのはすごく大事だと思う。wikiにみんな書くんだけど、いつ誰が何を書いたのか伝わってこない。ブログだとアンテナみたいのがついている。社内勉強会で月に1回だと「あそこはJenkins入れたみたいだぞ」が1か月遅れちゃう
  • 直也さん: gree groupも作った
  • 石橋さん: 日報ブームがある。ひとりが書き始めるとみんながやりはじめる 伏井さん: こういうのがあると社内で認められて承認欲求も満たされる。社内ホッテントリもいい 舘野さん・直也さん: うちにもあるよ!
  • 直也さん: CIやるぞテスト書くぞでもいいんだけど、エンジニア間の透明性が十分ないと、局所最適になってしまう