RSpecによるテストコードを足す部活動をはじめたら社内のテスト意識が高まった話

この記事は [ビビッドガーデン Advent Calendar 2021](https://qiita.com/advent-calendar/2021/vivid-garden) の 6 日目です。

どうも muryoimpl です。

一人で勝手にテストコードを足していたら他のメンバーを巻きこんで進めることになり、結果カバレッジもカイゼン意識も高まったので、その中で意識していたことや、実際にやったことを紹介したいと思います。

## 要約

- テストカバレッジが低いと思ったので、勝手にテストを足しはじめた。課題を感じたらまず自分がやってみる。
- 課題と、具体的に何に対応すればいいのかを示すと、手を貸してくれる人があらわれやすい。
- 現在の状況と成果をわかりやすい数字で示すと意識が上がる。一過性で終わってしまわないように努力する。

## テストをとりまく環境

ビビッドガーデンの運営する食べチョクのバックエンドは Ruby on Rails で構築されており、Ruby のコードに対するテストは主に [RSpec](https://rspec.info/) で書かれています。

私が参画した時点では、ユニットテストは不足気味で、カバレッジもそこそこ、手を付けるところにテストがないということも多い印象でした。

## テストを足そうと思ったきっかけ

最初に担当した作業で変更したコードに元々テストコードがなかったため、これにテストコードを足したいと思って勝手に足したことがきっかけでした。

入社してすぐは仕事に慣れるためのオンボーディングプログラムがあり、アプリを動かしたりコードを読んだりする時間を確保してもらっているのですが、コードの理解と生存戦略的な意味も含め、テストコードを足していこうと行動し始めました。

## テストコードを足しているときに感じた課題

テストを足していて思ったのは、**テストコードが全く無いところに新たにテストを足す気にはなりにくい**ということでした。

限られた期間内に機能を実装するためのスピードを求められる中、今回の変更も含め 0 から全てをカバーするテストを書こうとすると時間が足りない、テストは二の次、最低限という意識がどうしても出てきてしまうんだろう、と思いました。

また、**テストの追加が疎かになると書かない言い訳ができてしまう、テストを書くテクニックやパターンに触れる機会が減るため経験値が上がらない、**という負のスパイラルに陥る要因が増えてしまうな、という危機感もありました。

## 課題の解決に向けた取り組み

改善活動については、時間があればいつやってもいいということだったので、勝手にテストコードを足していきました。

オンボーディングのメンターに「やっていい？」との相談はしたものの、このときは完全に勝手に個人の活動としてやってました。どこから来たかもわからんやつに、いきなり「テストを足しましょう」って言われても説得力がさすがに足りないので、まずは自分から、ということです。

作業対象は [SimpleCov](https://github.com/simplecov-ruby/simplecov) で出力した coverage/index.html ファイルにあるカバレッジ 0% のファイルのコードで、これらのファイルに対し優先的にテストコードを足していくことに決めました。

## 課題がわかりやすく見えるようにする

### テスト追加対象のコード一覧を公開する

いくつか PR を出したところで、同僚から「テスト追加する対象の一覧があると誰でも手をつけられるのでは？」という提案を受けて、テスト追加対象のファイル一覧を社内の [esa](https://esa.io/) に書き出して公開しました。

嬉しいことにテストコードの追加に協力してくれるメンバーが現れてくれたため、テスト追加する人は `Ctrl + i` で自分のアイコンをつけて保存し、テストの追加作業が衝突しないようにしてもらいました。
![スクリーンショット 2021-12-05 22.21.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2180788/de981fea-2564-1b6b-c6d1-a6708615486e.png)


テストの記述パターンが少ないところや簡単にテストが足せそうなところは、先んじて~~パクって~~参考にしてもらえそうなテストコードを足しておきました。

### 進み具合や成果が見えるようにする、継続してアピールする

また、週次のふりかえりのときに [SimpleCov](https://github.com/simplecov-ruby/simplecov) で出したカバレッジを発表し、前週との差分とこれまでの実績をグラフにしてみえるようにしています。やった分の成果がわかりやすいほうが活動の継続によい影響を与えます。

こういう活動は一部の誰かがガッとテストを作ってしまうのもよいのですが、少しずつでもよいので**継続的になるべく多くのメンバーの手で改善していける体質になることのほうが重要**だと思うので、活動が風化してしまわないように毎週声に出して報告するようにしています。

情報出して「やってね、お願いします」、だけだと決して定着せず、適度に声をあげたり、相談にのったり、指摘をする人がいたほうが定着すると思うので、今はその役割を担っているつもりでやっています。

## やってみた効果

今も継続的にテストカバレッジは上昇しています。部活動開始してカバレッジ計測し始めてから 16 回計測を実施して 15 勝 1 敗(1 回だけカバレッジが下がりました:cry:) で、右肩上がりになっています。継続的にカバレッジが上がっているのは、私だけでなく他のメンバーも積極的にテストを足してくれている証であり、テストに対する意識が高まってきているあらわれだと考えています。
![スクリーンショット 2021-12-06 16.00.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2180788/696b8e14-5b75-22ac-af47-a18bb11013f7.png)
![スクリーンショット 2021-12-05 23.18.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2180788/d40dfdb2-16eb-af22-6b38-becc96ca1c90.png)

一人で勝手に始めた部活動ですが、社内の改善意識に火がついたのか、JavaScript コードのテストについて考える場ができたり、コードの改善活動が活発になったりと、各所を刺激する副次的な効果も出ています。
![スクリーンショット 2021-12-06 15.43.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2180788/09e35e4b-eba5-afd9-eeda-3dd1f9793940.png)
![スクリーンショット 2021-12-06 15.35.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2180788/56155b11-f690-65b5-89d1-e9564024fb57.png)

## さいごに

やっていることは大きなことではないのですが、テストを足し始める作業を勝手に部活動といって始めたら、周りが協力してくれるようになり、テストカバレッジと意識が高まった話でした。
小さなことでも少しずつやると気がつけば大きな成果になって、効果は抜群だ！、となります。よいと思ったことはやってみましょう。

実は、部活動が正式な会社の活動として昇格し戦略的に取り組むことになったため、もう少しやり方を整備して進めていくことになりました。
カバレッジは継続して上がっているので、このまましばらく上げて次の段階であるリファクタリングに軸を移せていければと考えています。

もし興味がありましたら、食べチョクやビビッドガーデンにアクセスしてみてください。

https://www.tabechoku.com/