nikkie-ftnextの日記

イベントレポートや読書メモを発信

メンテナ記:SpeechRecognition 3.10.1をリリースしました🎉

簡易版でお送りします。タイトルが全てです!
Python 3.11をサポートした新バージョンをリリースしています。

目次

前回のSpeechRecognition

音声認識ツールキットライブラリのメンテナをしています(なかなか時間を作れていませんが🙏)

Python 3.11はサポートしないの?というissue

それは突然やってきました。

GitHub Actionsで流しているテストにPython 3.11での実行も加えて通るか確認すればいいよな」とやる気になったnikkie氏。
3.11も追加して流してみると...

テスト失敗🙀

原因は、Google音声認識APIの返り値の変化でした(モデルが変わったのかな?)

モックを使ったテストコードに変更していく

既存のテストコードは、外部の音声認識APIを呼び出しています。
今回は外部のAPIの返り値が変わったために、期待値と一致せずにテストが失敗しました。

ここはモックの使い所だと思うので、導入していきました。
外部APIとの通信をテストコードではモックに置き換えることで、外部のAPIの変更でテストが落ちることはなくなります。
PyCon APAC 2023でもお話ししました。

モックを当てる上でやや難易度が高かったのは、既存実装が長大な関数だったこと。
モックを使ったテストがなかったので、まずはテストを書きます(テストも長くなります)。
その後リファクタリングとして、処理を分割していきました。

  1. APIへのリクエストの組み立て
  2. APIとの通信
  3. APIからのレスポンスの解析

1と3はそれぞれ担当するクラスを定義し、クラスの小さなメソッドを組み合わせる形で実装しました。
最終的に小さいテストが何個もある状態に分割できました。

終わりに

結果として、3.11対応というよりは、外部APIの変更でテストが落ちないようにするのに時間を使いました。
新しいバージョンのSpeechRecognitionをお楽しみください!

今回対応したような小さなissueを他にも見つけており、引き続きコードで価値を届けていく所存です。
スターやスポンサーで支えていただけるととっても嬉しいです!

P.S.リリースにあたり参照したエントリメモ

buildとtwineの使い方