勉強会に無関心だった僕が自動テストの社内勉強会を開くまで
はじめに
はじめまして!くふう AI スタジオの 110 です。
普段はサーバーサイドエンジニアとして、
主にトクバイ のtoB向けコンテンツの開発を担当しています。新卒採用や新卒研修にも関わらせていただいたりもしています。
タイトルにあるように、僕はこれまで『勉強会』と呼ばれるような会には開催も参加もほとんど関心がありませんでした。
そんな僕が今、自動テストに関する社内勉強会を開催しているのですが、そこまでに至った経緯やどんなことをしているのか?について書いていこうと思います。
自動テストに初めて取り組もうとしている方
自動テストに関する研修を任された方
自動テストの勉強会をしようかなと思い始めている方
そんな方々に少しでも参考になれば幸いです。
これまでの自分と自動テスト勉強会開催への歩み
冒頭でくふう AI スタジオの〜と自己紹介しているのですが、僕はコンピュータ系の学部を卒業後、2019年にアールキューブ(現くふうウェディング)に新卒入社しました。そして、入社して2ヶ月後には、みんなのウェディング(現くふうウェディング)の新卒研修を一緒に受けることになり、そこで初めて自動テストに触れることになりました。
働き始める前までもプログラミング自体には触れていたのですが、『自動テスト』なんて言葉は知らず、
「コードのテスト?なにそれ、おいしいの...?」
とすら思っていました。そして研修が始まると、
「自動テスト...おいしくない...」
と思いながら、
いざテストを研修外で書こうとするも、
「自動テスト...わからん...」
そんな状態でした。
そんなこんなで自動テストと向き合う研修・OJTの日々が続き、2020年の1月にはみんなのウェディングへ転籍するのですが、この辺りでは
「テストが無いコードに変更加えるの怖すぎ...」
とすら思うように。
成長ですね。
でも自動テストと出会い、触れるサービスが大きくなればなるほど、
「自動テストがないところに手を加えるのしんどいな...」
の気持ちが積み重なるのです...。
そして更にそこから数ヶ月経つ2020年の5月ごろにDa Vinci Studio(現くふう AI スタジオ)に転籍しているのですが、当時の上司から2019年卒メンバーに向けて
「2020年に新卒入社するエンジニアに向けて研修をしてほしい。」
というお願いがありました。
いくつか研修項目がある中で、僕はなんとなーくどれも自信がない中で自動テストの研修をすることに。
自分が受けた研修も自分の上の代の先輩が実施してくれたもので、それをベースに転籍先のDa Vinci Studioに合わせた内容にアップデートし、更に伝えたいことを加えた研修にしました。研修内容検討段階から当時の上長からのFBもいただきながらなんとか4日間に及ぶ研修をやりきった記憶があります。
そして、しばらく月日は経ち、2023年の7月に会社が生まれ変わり『くふう AI スタジオ』に。
一度も転職活動をしてないのですが既に4社目になってしまっている不思議な状態です。
くふう AI スタジオ所属になってからは、くふうカンパニーに入ってきた2024年卒のエンジニアに向けてサーバーサイドの研修をやったり、チームでの研修をやったりとしている中で、
「特にサーバーサイドのエンジニアだと自動テストは絶対書くことになるし、最初自分はわけわかんなかったし何か伝えられることは伝えたいなぁ」
と思い、自分の上長と別部署の協力してくれるメンバーの上長に相談し、主にトクバイの開発に関わるメンバーでの勉強会として小さく開催することになりました。
『小さく開催した』
のが、僕の勉強会に対するハードルを下げてくれたのもあるなと思っています。
勉強会の内容
そもそも目的として、
『自動テストについて知り(復習し)つつ、業務で使える自動テストを書けるようになろうぜ!』
というものを掲げながら、今回は大きく分けて3つのコンテンツを実施することにしました。
『初めての自動テスト』の輪読
『使えるRSpec入門』のその1〜3(Qiita記事)を輪読しつつ実践
『Everyday Rails - RSpecによるRailsテスト入門』を輪読しつつ実践
ところで、ちょっと話は逸れるのですが、昨年あたりから GitHub Copilot が当グループの社員では申請すると会社負担で利用可能になっており、
実際かなり便利だなと僕自身も思いながら使っているのですが、今回の勉強会の中での実践パートではあえて GitHub Copilot の機能は『オフ』にして、自分でタイピングしてもらうようにしました。(コピペも基本的に無し)
なぜかというと、
『自動テストを書けるようになろうぜ!』
という目的が主な理由です。GitHub Copilot の補完機能が便利な分、曖昧なまま進むことができてしまうのはちょっと危険だなと思っています。
もう一つの理由として、歴史のあるサービス開発に関わる時やチームで開発する時には誰かのコードを読むことが発生すると思うのですが、その時に
『基本的な機能はコードを実行したりデバッグをしなくてもある程度イメージできるようになってほしい』
と思っているからです。
例えば、他の人のコードを読む時や自分で書いたコードでもデバッグする時点では何がどうなっているのか?がわからないと思います。
そんな時は実際にテストコードを読み、何が書かれているのか?ということに向き合うことになります。
そうした時に GitHub Copilot に書いてもらったり、ただコピペしているだけだと自動テストで必要になる基本的な機能などを調べたり、AI に回答させたりする頻度が増えると思います。
それはちょっとタイムロスだと僕は考えているので、ちょっと時間はかかりますがこの勉強会においては
『自分で繰り返し打ち込んで少しでも記憶に残るようにしてもらう』
ことにしました。
さて、先程挙げた3つのコンテンツについて、それぞれもう少し詳しく触れてみます。
『初めての自動テスト』の輪読
まず最初に、
『自動テストってそもそもなんなん?』
というところを知るために、『初めての自動テスト』という書籍の輪読をすることにしました。(図書館で貸出しているところもあるそうです)
こちらは自分が新卒研修を受けている際にも課題図書として設定されていた書籍で、2017年に出版されているため少し古くなってきているかもしれませんが、自動テストについてざっくり知るためには良いと思っているので採用しました。
今回の輪読パートの参加者は自分を含めて7名で、2024卒のエンジニア以外にも僕の同期やエンジニア歴が数年ある方でぜひ参加したいと言ってくださった方、2023卒のエンジニア、QAエンジニアの方も参加いただきました。
この書籍では実際にコードで自動テストを書くエンジニアもそうですが、QAエンジニア目線での見方も取り上げていただいているので、もし読者の周りにQAエンジニアの方がいれば巻き込んでみるのも良さそうです。
輪読と言っても色々な形があるそうで、どのように進めるか迷ったのですが、勉強会の時間で一緒に読み進めることにしました。
それぞれで読んできてください!とすることもできると思いますし、更に内容をそれぞれまとめてきてください!というのもできるのですが、それだと自分がやらないな。と思ってやりませんでした!笑
一緒に読み進めることで
『確実にこなす』
という点でも良いなと思っているのですが、
個人的には一緒に読み進めることで、
「実務だとこうしているよ!」
を伝えつつ理解を深められるので良かったかなと思っています。
そしてありがたいことに今回はQAエンジニアの方にも参加いただけて、
「自動テストに関して現在だとこんな背景でこんな考え方もありますよ」
という補足もしていただけたのもすごく良かったなと思います。
(本当にありがたい...。)
『使えるRSpec入門』のその1〜3(Qiita記事)
自動テストとは?をざっくりインプットしたところで、当グループでは Ruby on Rails を使った Web アプリケーションに触れることが割とあるので、RSpec というテスティングフレームワークを使って自動テストの実践を行うことにしました。
次に紹介する『Everyday Rails - RSpecによるRailsテスト入門』にいきなり取り組むのも良いとは思うのですが、今回は
『自動テストを書けるようにする!』
というところを目指し、
まずは基本的な RSpec の書き方を抑えている
という僕と同じ伊藤さんという方がまとめてくださっている記事を元に、輪読しながら RSpec の書き方に慣れるところからはじめました。
個人的にこの記事は RSpec を書き始めて、
「あれ、この時はどんな書き方すればいいんだっけ?」
をサッと振り返るのにとても重宝していたのもあり、逆引き的に1年くらいは参照しに行っていた記憶です。笑
参加者は主にトクバイの開発に関わるメンバーのみということもあり、実際のトクバイのローカル環境を使って実践したのですが、ここで『トクバイのローカル環境を使う』ことで、特に24卒として配属されて間もないメンバーも
『実務に入ってもテスト環境が使える』
という状態を作れたので、
実務に入ってから悩む可能性があるポイントを一つ潰せておけたのは良かったと思っています。
更に、トクバイの開発環境ならではの設定があるという発見もあり、実務にも活きる実践になりました。(想定外でしたが。笑)
記事の内容の詳細は書かないのですが、順番に1、 2、 3と進めていきました。
4については逆引きのような使い方の記事なので今回は触れずに、そのあたりは次のコンテンツで触れることにしました。
輪読形式で一緒に読み進めていたので、自分の主観でテストってこんな感じだよということを言葉で伝えるよりも、実際のコードはこうなっているを見せている方が個人的には納得感を持って進められるのではないか?という考えの元、
「トクバイや他のグループ内サービスでも使っているね!」
「これはあんまり見かけないかもしれない」
などを実際のコードを見て、メンバー間で補足し合いながら進めてみました。
Qiita 記事の3つ目では、 Twitter(X) の API を使ったモックの書き方を取り扱っているのですが、勉強会の主催側や他のメンバーも確認しやすい Slack の API を用いた特定チャンネルへの通知を行う機能を使って、そのコードをモックするというアレンジを加えてモックを使ったテストの練習をすることにしました。
特定チャンネルへの通知の機能については、既にトクバイのアプリケーションに一部利用されている実装を借りて、
「実際にこんな書き方で通知が試せるのでやってみましょ〜!」
という感じでそれぞれ実装をして、テストを書いてもらいました。
個人的に自動テストをやり始めた時にモックが一番わけがわからなかったので、
『全員が納得感がある状態』
をできるだけ目指しました。
実は現在リモートワークと出社のハイブリッド型での働き方になっており、モックのターンでもリモートの会が有ったのですが、Ovice という仮想オフィスアプリと Google Meet を利用し、それぞれのコードの画面を Google Meet に、会話は Ovice で距離を取ることで声が被らないようにするという方法を取りました。
ちょっと複雑さはあるんですが、やってみると割と出社してそれぞれの画面を見ながら説明するのと何ら変わりないなという気持ちになりました。
また、記事のその3の中に取り上げられている receive_message_chain メソッドをあえて使って書き直してみたり、どういう処理をモックで実現しているのか?を言語化してもらうようにしました。
実際に言語化してもらうことで、なんとなく書けてしまっているテストについての理解が深まっていたように思います。
『Everyday Rails - RSpecによるRailsテスト入門』を輪読しつつ実践
最後に、先程の Qiita 記事の著者である伊藤さんが日本語翻訳を行っている『Everyday Rails - RSpecによるRailsテスト入門』を一旦7章までを範囲とし輪読しつつ、Rails のテストを書きながら理解を深めていくことにしました。
丁寧に説明をしていただけている教材なので、基本的に読み進めていけば変なことにはならないとは思っているのですが、なんだかんだ詰まることもあり、そんな時は手元の環境を画面共有などで確認して、問題なく進めば Google Meet に『1』とコメントを、何かエラーに遭遇していたら画面共有をしつつ解決をしていくというやり方で行いました。
画面共有をしてもらうことの利点として、開発効率を上げるためのエディタのおすすめの拡張機能や設定などを伝えやすいというのも一つあるなと思いました。既存メンバーからすると普通になっていること(do ~ end の補完が自動で行われるみたいなもの)も、これから新しく開発をやっていくぞ!というメンバーにとっては知らないことだったりするのです。
また、先に Qiita 記事の方で RSpec の書き方を学んでいることもあり、Everyday Rails に載っている書き方も合っているものの、こんな時は実務ではこんな書き方の方がよく見かけるかも!という内容に関しては、自分の手元で書き換えた結果をライブコーディングしながら口頭で説明もするようにしていました。
ここでも意識しているのは、
『実務ではどうなのか?』
という観点で、伝えられることがあれば都度補足するように心がけていました。
まとめ
ここまで読んでいただきありがとうございます。
少し長くなってしまったような気がしているのですが、新卒入社して数年経っても勉強会をやる自分なんて全く想像もしていなかった僕が、自動テストの社内勉強会を開くまでをご紹介させていただきました。
ここまで書いておきながら、
「今、勉強会に関心がありますか?」
と改めて聞かれたとしても
「そんなことはない」
というお気持ちです。笑
ただ、こういった機会を与えてもらえるのはとてもありがたいなと感じています。
そして、この記事を読んでくださった読者の方からすると、もしかするともっといいやり方があるかもしれません。
僕自身、これが正解だ!とも思っていません。
でも、どこかの誰かに何かしら参考になると嬉しいなぁ…
というところで、今回はここまでで終わりにしようと思います。
くふうAIスタジオでは、採用活動を行っています。
当社は「AX で 暮らしに ひらめきを」をビジョンに、2023年7月に設立されました。
(AX=AI eXperience(UI/UX における AI/AX)とAI Transformation(DX におけるAX)の意味を持つ当社が唱えた造語)
くふうカンパニーグループのサービスの企画開発運用を主な事業とし、非エンジニアさえも当たり前にAIを使いこなせるよう、積極的なAI利活用を推進しています。
(サービスの一例:累計DL数1,000万以上の家計簿アプリ「Zaim」、月間利用者数1,600万人のチラシアプリ「トクバイ」等)
AXを活用した未来を一緒に作っていく仲間を募集中です。
ご興味がございましたら、以下からカジュアル面談のお申込みやご応募等お気軽にお問合せください。
https://open.talentio.com/r/1/c/kufu-ai-studio/homes/3849