私が歌川です

@utgwkk が書いている

Go Conference 2024でgomockの話をします #GoCon

Well done! Your session Dive into gomock has been accepted for Go Conference 2024!

ということなので、よろしくお願いします。「Dive into gomock」というタイトルで、gomockの内部実装に深入りする話をします。

gocon.jp

6/8に渋谷で会いましょう。今日の12時から参加登録が始まるので全員来てください。

トークの説明

みなさまは、interfaceに依存するコンポーネントのテストを書いていますか? また、テストで使うinterfaceの実装はどうやって用意していますか? interfaceにメソッドが追加されたらどうしますか? 意図したメソッドが呼び出されていなかったら? メソッドに渡される引数の比較方法を柔軟にしたくなったら?

interfaceのモックを用いたテストを簡単に記述するためのフレームワークの1つに、gomockがあります。
gomockを使ったモック実装を使ってテストすることで、interfaceのメソッド呼び出しが適切に行われていることを検査し、意図しないメソッド呼び出しがあればテストを失敗させることができます。
また、gomockを使ったモック実装を生成するためのツールとしてmockgenが用意されています。mockgenを使うことで、interfaceの定義が変わってもgo generateコマンドで簡単にモック実装を修正することができます。

本セッションでは、gomockがどのようにinterfaceのメソッド呼び出しを検査しているのか解説します。
主に以下のトピックについて取り上げる予定です。

  • mockgenが生成するコードの内容
  • 期待するメソッド呼び出しを記述し、記録する
  • 期待するメソッド呼び出しがなければテストを失敗させる
  • 引数の比較方法をカスタマイズする

このセッションが、Goのinterfaceモックを用いたテストの仕組みへの理解を深める一助となれば幸いです。

選択しなかった技術判断に気を払う

技術選択の場面において、ある技術を選ぶということは選ばれなかった技術があるということである。なぜその選択にしたのか、に目が向きがちだけど、選ばなかった技術についても述べるべきだろう。

今回の企画・要件に対して、この技術はこういう制約が見合わないので採用を見送った、ということを書き残すことで、技術判断の根拠になる。技術選択はその場限りの出来事ではなく積み重ねなのだから、あとから振り返り可能な形になっているべき。逆に、選ばなかった技術がフィットする要件もあるだろう。そういう技術を選ぶ機会を逃さないように注意するべきだろう。

ということを考えたんだけど、だいたいDesign It! に書いてあった。つまり、Design It! を読んだらいいと思います。

ところで、アーキテクチャ俳句ってぜんぜん俳句じゃなくない??

🌸🍜

京都御苑に桜を見にいく。休日の昼だしシーズンだしでまあまあ人が多かった。

これぐらい暖かいと徒歩圏内が広がる。西陣麦酒まで歩いていった。一条戻橋は単に橋なんだけど堀川と組み合わせると魅力が出てくる。

ラーメンを食べて18時ぐらいに帰宅し、眠気に身を任せたのであった……。

ログ

ログ*1、油断すると絶妙に情報量が足りなかったり、欲しいものがdebugレベルでしか出ていなくて本番環境で見れなかったりしがち。ここでこういうログが欲しくなるだろう、という感覚を鍛えるには、実際にログが足りなくて困る経験をするしかないのか、もうちょっと高速道路が整備されているものなのか。

外部APIにリクエストを送る部分はとりあえずリクエスト・レスポンスの内容を (ユーザー個人情報などには気をつけながら) ログ出力しておくと調査に役に立つ、というのはありそう。GoのgRPCクライアントのミドルウェアにはまさにそういうのがあるし、HTTPクライアントにログ出力の仕組みを差し込むのもすぐできる。自分のシステムに閉じていない部分はこういう仕組みが整っていそう。

ほかにはアプリケーションごとに固有の事情に合わせることにもなるだろう。何が重要で、調査をしたくなるか、そしてアプリケーションログではなくもっと永続的なデータとして残したくなるか? ログとログデータの区別はどこに生じるのか?

*1:ここではWebアプリケーションやサブシステムなどのアプリケーションから出力するログを指す

週末

金曜日

定時ダッシュで新幹線に乗り、渋谷へ。

5時までクラブにいるのは初めてなもので、4時ぐらいからだんだん睡魔が勝ってくる。なんとか最後までいることができた (帰る家がないから)。

土曜日

11時ぐらいに目覚めた。意外と元気ですごい。

萩の湯で風呂をキメたあと、川崎に名取さなさんを見にいく。名取さなさん、背が低くて手がちっちゃいな。

lacittadella.co.jp

そして、12時間ぶりに渋谷に向かうのであった……。チケット代として1万円払いました。

終電の新幹線で京都に帰って、気絶。

日曜日

レンタカーでドライブ。免許がないので座ってるだけ。

www.youtube.com

大量の新情報を浴びながら京都に戻ってきたのであった。なんか京都ブームが来ているらしい。

中央・総武線沿いを歩くコーナー

歩くタイプの暇潰しは、融通の効く街ならいくらでもすぐに切り上げられるし、風景をちょっと気にするぐらいでコンテンツを生み出せる。

秋葉原

東京に来てとくに用事がないとき、だいたい秋葉原にいる。今回は御茶ノ水に用事があった。せっかくなので歩いていくことにする。

アーケードゲーム基板ショップみたいなのが気になったけど行かずじまいだった。

御茶ノ水

湯島聖堂で孔子像を見る。Swarmに孔子廟というジャンルがあることを知った。

まだまだ暇なので、いけるところまで歩いてみることにする。

水道橋

東京ドームってこのあたりなのか。なんか人が多かったように思う。

飯田橋

だんだん神田川と外濠の区別がつかなくなる。東京は起伏がすごいので歩くと疲れる。しかし大きな荷物を持っていなければ普通に歩ける距離ではあろう。

市ヶ谷

NFTを捨ててはいけない。わかりましたか?

四ツ谷

外濠が終わったので、このあたりで切り上げて電車に乗ることにする。外堀について高速に学習した。


東京に引っ越すならどこがいいか、というのを考えなくもない。すぐに人を募って飲みに行けるところかな……。