けけずんセルフハッキング

エンジニアっぽい雰囲気を醸しだしているかのようなブログです!

「レガシーコード改革!UT/CIでWebサービスの技術的負債を解消する取り組み」に登壇しました

※会社のブログが移行中で記事作成できないので、一時的にこちらに書いてます

株式会社リビルドの嘉数です!

8/7(火)にランサーズ、BASE、リビルドの三社で「レガシーコード改革!UT/CIでWebサービスの技術的負債を解消する取り組み」というイベントを実施し、リビルド枠として嘉数は「Laravel5.5的継続的インテグレーション」というタイトルで登壇させて頂きました。

【好評につき増枠!】レガシーコード改革!UT/CIでWebサービスの技術的負債を解消する取り組み - connpass

というわけで各セッションについて非常にざっくりとした感じで書いていきたいと思います!

「決済リプレイスとPHPバージョンアップを支えたユニットテスト

スピーカーはBASE株式会社の東口和暉さん。ユニットテストについてお話して頂きました。

  • テストをしやすくするためにコードを疎結合にしてMockを差し込めるようにする、テストしにくい部分は破壊的だがrunkitを使用してコード内部の処理を変更する
  • テストを書く人・書かない人に分かれないよう全員がテストを書きやすい環境を整える
  • 溜まってきたテストの知見を活用して「破綻しやすいテスト」を書いていないか確認する

手探りで何が最適なのかを探しながらテストコードを書いている自分としては、非常に共感が得られる内容でした!

「レジェンドコードと向き合いレガシーからモダンへ変革する」

スピーカーはランサーズ株式会社の永田真也さん。ランサーズがこれまで行ってきた開発の歴史、もっと言えばテストの歴史についてお話して頂きました。

  • アプリ自体はPHPで実装しているが、E2EテストはRSpec+Capybaraのように疎結合に導入できるものを使用した
  • 技術的負債を解決するために多くの失敗を重ねるが、その失敗と向き合い改善を続けて前に進み続ける、徐々にコードを進化させていくことを意識する

起業から11年経った会社のテストに対する取り組みの変化は非常に面白かったです!

弊社の発表!「Laravel5.5的 継続的インテグレーション

発表!

そしてこちら弊社のプレゼン資料、タイトルで「〜的〜的」と的が連続しているのが気になります。

こちら発表風景になります。

f:id:kkznch:20190404093230j:plain
20180807_レガシーコード改革01

f:id:kkznch:20190404093314j:plain
20180807_レガシーコード改革02

質疑応答!

弊社の発表後にいくつか質問を頂いたのですが、質問内容が興味深いものでした。以下はその時の質問と回答の内容になります。

  • Q:「LaravelのPHPUnitでテストを書く際、どこからどこまでがユニットテスト結合テストの範囲なのか?」
  • A:「現在の開発であれば、結合テストには"機能の一連の手続き"と"コントローラ内のアクション"についてのテストを記述している。ユニットテストには"他に依存しない独立されたサービスクラス"のテストを記述している。ここらへんの配分って難しい、分かりみ。」

Webアプリだとユニットテスト結合テストの境目がどこからやねーんってなりますよね。皆も同じように思ってるんだなぁと感動しました(笑)。

  • Q:「GitLab CIでコンテナを使用してテストをしているようだが、最終的なデプロイ先もコンテナなのか?そうでない場合は冪等性が保証できないが、環境のテストも行っているのか?」
  • A:「今回はデプロイ先はEC2を想定していたので、コンテナは使用していない。また、環境のテストは行っていない。」

この「環境のテスト」という考えがとても面白いなと思いました。テストをする環境とデプロイ先の環境が全く同じであれば環境のテストは必要ないかもしれませんが、これらの環境が異なる場合は何が異なっていてどういった影響があるかなど確認しておく方が良さそうですね。かなり勉強になりました。

おわりに

今回のイベントでは、テストについて自分だけでなく皆が四苦八苦しながら取り組んでいるのだなと感じました。共感を得られて且つ知見の共有にもなる、とても良いイベントでした。イベントを主催してくれた方々、スタッフの方々、参加してくれた方々、皆さん本当にありがとうございました。そして懇親会のお肉が最高だったことは忘れません、ありがとう。