📝
小さなOSSをリファクタリングしていった手順について発表しました #jasstnano
皆さんはテストコードを書かれていますか。私は書いています。
今回は次のリポジトリで公開しているOSSについて、元のリポジトリのコードを元にリファクタリングをした手順について発表しました。
以下は発表資料です。
発表の概要
- このOSSの元となるリポジトリはパブリックアーカイブとなっていて、更新することができませんでした
- そのため、新たにリポジトリを作成し、以下のようなステップで改良をしていきました
- Step1: 現状を把握する
- 元のリポジトリはテストがあるものの、もう動かない状態でした
- また、テストは機能の一部しかカバーしていない状態であり、ソースコードも思ったより複雑な構造になっていました
- Step2: メインとなる機能のテストを追加する
- まずは仕様の把握と更新版のパッケージを公開する準備のためにテストを追加しました
- この時点ではカバレッジは60%程度でした
- Step3: 一旦パッケージを公開する
- [レポート]OSSエンジニアのBetter than Nothingという生き方 〜 全力で5%を目指せ! #AWSDevDay | DevelopersIO での資料に感銘を受けて、まずは最低限でも公開することを目指しました
- 結果的に「あぁ。とりあえず最低限のことはできた」と心が楽になったのでよかったです
- Step4: リファクタリングのためにテストを追加
- 「動作を変えずに内部の構造を改良する」ということのために、テストで「動作を変えずに」を自信を持って行えるようにしました
- この時点でカバレッジは80%程度になり、仕様に関してもより明確になりました
- Step5: リファクタリングを実施
- いよいよ関数の分割やクラスの分割を行いました
- イメージは資料をご覧ください
- Step1: 現状を把握する
まとめ
- リファクタリングはわりと王道な手順で進めて行きました
- テストをしやすくするようにプロダクションコードを変えたくなりましたが我慢しました
- そのおかげでテストを先に追加でき、リファクタリングをしながら自信を持って進めることができました
- 今後はこのOSSをさらに改良していきたいと思います
- なお、今回で JaSST nano に1年連続で登壇させていただき、運用の皆様にとても感謝しています
個人的にはやってみてとても楽しかったです。特にJavaScript のコードであるため、型がないコードに対するテストコードを書くことが具体的なイメージの手助けになりました。
皆さんもぜひOSSにテストコードを追加するなど、体験してみてください。
以上、最後までお読みいただきありがとうございました。
Discussion