Slide 1

Slide 1 text

歴史あるRuby on Railsで デッドコードを⾒つけ、 消す⽅法 2024.11.28 リブセンス アルバイト事業部 望⽉歩 Copyright © Livesense Inc.

Slide 2

Slide 2 text

株式会社リブセンス  アルバイト事業部開発グループ 2018年新卒で⼊社 マッハバイトの開発をしています 望⽉ 歩(ayumu838) Copyright © Livesense Inc.

Slide 3

Slide 3 text

● 2006年にジョブセンスとしてリリース ● 2017年にマッハバイトと改名 ● リリース当時はPHPだったが ● 2014年からRuby on Railsにリプレイスを開始 ● 2022年に完了 について Copyright © Livesense Inc.

Slide 4

Slide 4 text

● 2006年にジョブセンスとしてリリース ● 2017年にマッハバイトと改名 ● リリース当時はPHPだったが ● 2014年からRuby on Railsにリプレイスを開始 ● 2022年に完了 について Copyright © Livesense Inc.

Slide 5

Slide 5 text

● 2006年にジョブセンスとしてリリース ● 2017年にマッハバイトと改名 ● リリース当時はPHPだったが ● 2014年からRuby on Railsにリプレイスを開始 ● 2022年に完了 リプレイス開始から10年 について Copyright © Livesense Inc.

Slide 6

Slide 6 text

不要なコードを削除したい Copyright © Livesense Inc.

Slide 7

Slide 7 text

● 不要なコードを検知する ● 検知したコードを継続的に消していけるようにする 何をしたらいいのか Copyright © Livesense Inc.

Slide 8

Slide 8 text

● 不要なコードを検知する ● 検知したコードを継続的に消していけるようにする←こっちが本題 何をしたらいいのか Copyright © Livesense Inc.

Slide 9

Slide 9 text

不要なコードを検知する Copyright © Livesense Inc. ● oneshot coverageで動的に検知 ● coverbandを導⼊することにしました ● いい感じに保存や可視化をしてくれるツール https://github.com/danmayer/coverband/tree/main

Slide 10

Slide 10 text

不要なコードを検知する Copyright © Livesense Inc. ● 実⾏されていない⾏

Slide 11

Slide 11 text

不要なコードを検知する Copyright © Livesense Inc. ● 描画されていないView

Slide 12

Slide 12 text

不要なコードを検知する Copyright © Livesense Inc. ● 使われていないRoute

Slide 13

Slide 13 text

検知はできるようになった  あとは関連したコードをどう継続して消せるようにするか Copyright © Livesense Inc.

Slide 14

Slide 14 text

仕組み作って、CI化しよう Copyright © Livesense Inc.

Slide 15

Slide 15 text

消したい対象 ● routesにあるが、存在しないcontroller ● routesにあるが、存在しないaction ● controllerはあるが、存在しないroutes 検知したコードに関連するものも消すことを継続させる Copyright © Livesense Inc.

Slide 16

Slide 16 text

消したい対象 ● routesにあるが、存在しないcontroller ● routesにあるが、存在しないaction ● controllerはあるが、存在しないroutes 検知したコードに関連するものも消すことを継続させる Copyright © Livesense Inc.

Slide 17

Slide 17 text

理想はRouting ErrorのController#Actionを取得したい routesを取得したい Copyright © Livesense Inc.

Slide 18

Slide 18 text

Rails.application.routes.routesとすると ActionDispatch::Journey::Routesとなって Rails.application.routes.routes.frist.defaultsでcontrollerとactionが取れる routesを取得したい Copyright © Livesense Inc.

Slide 19

Slide 19 text

消したい対象 ● routesにあるが、存在しないcontroller ● routesにあるが、存在しないaction ● controllerはあるが、存在しないroutes 検知したコードに関連するものも消すことを継続させる Copyright © Livesense Inc.

Slide 20

Slide 20 text

先ほど取得した結果のcontrollerを app/controllers/{controller}_controller.rbにしてファイル検索ができる controllerやactionを取得したい Copyright © Livesense Inc.

Slide 21

Slide 21 text

先ほど取得した結果のcontrollerを app/controllers/{controller}_controller.rbにしてファイル検索ができる actionも def {action}がファイルにあるかどうかで判断できる controllerやactionを取得したい Copyright © Livesense Inc.

Slide 22

Slide 22 text

消したい対象 ● routesにあるが、存在しないcontroller ● routesにあるが、存在しないaction ● controllerはあるが、存在しないroutes 検知したコードに関連するものも消すことを継続させる Copyright © Livesense Inc.

Slide 23

Slide 23 text

先ほど取得した結果のcontrollerを app/controllers/{controller}_controller.rbにしてファイル検索ができる ↓ app/controllers/**/*.rb から app/controllers/ _controller.rb を消したものがcontrollerになる controllerだけあるものを取得したい Copyright © Livesense Inc.

Slide 24

Slide 24 text

仕組み作って、CI化しよう Copyright © Livesense Inc.

Slide 25

Slide 25 text

● GitHub Actions上で動かす ● GitHub Actionsの形式に沿ったエラーメッセージを出す 検知したコードに関連するものも消すことを継続させる Copyright © Livesense Inc.

Slide 26

Slide 26 text

● GitHub Actions上で動かす ● GitHub Actionsの形式に沿ったエラーメッセージを出す 検知したコードに関連するものも消すことを継続させる Copyright © Livesense Inc.

Slide 27

Slide 27 text

● 不要なコードを検知し、消す ● controllerやaction,routesを消せばCIが落ちるように仕組み化 まとめ Copyright © Livesense Inc.

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

詳しくはアドベントカレンダーに書きます! 12/1予定です Copyright © Livesense Inc.

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

No content