$30 off During Our Annual Pro Sale. View Details »

Rubyのコード削除したい時 僕がやること

Hazumi Ichijo
October 31, 2023
39

Rubyのコード削除したい時 僕がやること

Hazumi Ichijo

October 31, 2023
Tweet

Transcript

  1. © 2023 Wantedly, Inc.
    Rubyのコード削除したい時
    僕がやること
    Omotesando.rb #90
    Oct. 5 2023 - Hazumi Ichijo

    View Slide

  2. 自己紹介
    © 2023 Wantedly, Inc.
    一條 端澄 @hazumirr/@rerost
    略歴:
    2018~ : ウォンテッドリー株式会社
    趣味: テトリス・旅行
    Omotesando.rb: 2回目

    View Slide

  3. 消せると何が嬉しいか
    1. 考慮することが減る
    ● 機能追加・変更時
    ● リファクタリング時
    ● gem update
    ● …
    2. 利用するリソースが減らせる
    ● CPU/メモリ
    ● CIでのテストにかかる時間
    ● …
    © 2023 Wantedly, Inc.

    View Slide

  4. デッドコードだけ削除すれば良い
    んでしょ?
    © 2023 Wantedly, Inc.

    View Slide

  5. © 2023 Wantedly, Inc.
    https://docs.wantedly.dev/fields/dev-tools/code-coverage

    View Slide

  6. oneshot coverage 便利!以上!
    © 2023 Wantedly, Inc.

    View Slide


  7. © 2023 Wantedly, Inc.

    View Slide

  8. 削除したいコード
    1. 実行されていないコード
    2. 実行されているが消せるコード
    ● 利用されない関数を生成するコード
    ○ メタプロのコード自体は実行されているので検知が難
    しい
    ● 利用されないデータを書き込む
    © 2023 Wantedly, Inc.

    View Slide

  9. 削除したいコード
    1. 実行されていないコード
    2. 実行されているが消せるコード
    ● 利用されない関数を生成するコード
    ○ メタプロのコード自体は実行されているので検知が難
    しい
    ● 利用されないデータを書き込む
    © 2023 Wantedly, Inc.

    View Slide

  10. © 2023 Wantedly, Inc.
    class Hoge < ActiveRecord::Base
    as_enum :category CATEGORY, prefix: true
    CATEGORY = {
    category_a: 0,
    category_b: 1,
    ...
    }
    end
    利用されない関数を生成するコード
    https://github.com/lwe/simple_enum

    View Slide

  11. © 2023 Wantedly, Inc.
    class Hoge < ActiveRecord::Base
    as_enum :category CATEGORY, prefix: true
    CATEGORY = {
    category_a: 0,
    category_b: 1,
    ...
    }
    end
    利用されない関数を生成するコード
    要件が変わって、Categoryの一覧をDBで定義したいが...

    View Slide

  12. © 2023 Wantedly, Inc.
    class Hoge < ActiveRecord::Base
    as_enum :category CATEGORY, prefix: true
    CATEGORY = {
    category_a: 0,
    category_b: 1,
    ...
    }
    end
    利用されない関数を生成するコード
    # 生えてくるメソッド例
    hoge.category_was? # dirty
    hoge.category_a? # attribute
    Hoge.category_as # scope
    =>

    View Slide

  13. 利用されない関数を生成するコード
    1. 何が生成されているかを把握
    2. 利用箇所の把握
    ● ひたすらgrep
    ● ログを仕込む
    © 2023 Wantedly, Inc.

    View Slide

  14. 利用されない関数を生成するコード
    1. 何が生成されているかを把握
    2. 利用箇所の把握
    ● ひたすらgrep
    ● 早いが、確実とはいえない
    ● 考慮漏れが無いか不安
    © 2023 Wantedly, Inc.

    View Slide

  15. 利用されない関数を生成するコード
    1. 何が生成されているかを把握
    2. 利用箇所の把握
    ● 関数が呼ばれた際にログを投げる
    ● ほぼ確実だが、集まるまで待ち時間が発生
    ● 呼ばれたかどうか
    ○ TracePoint, prepend, …
    ● ログの投げ先
    ○ 標準出力, BigQuery, TreasureData, …
    © 2023 Wantedly, Inc.

    View Slide

  16. 削除したいコード
    1. 実行されていないコード
    2. 実行されているが消せるコード
    ● 利用されない関数を生成するコード
    ○ メタプロのコード自体は実行されているので検知が難
    しい
    ● 利用されないデータを書き込む
    © 2023 Wantedly, Inc.

    View Slide

  17. 利用されないデータを書き込む
    1. BigQuery
    2. PostgreSQL
    3. Elasticsearch
    4. …
    © 2023 Wantedly, Inc.

    View Slide

  18. 利用されないデータを書き込む
    1. BigQuery
    2. PostgreSQL
    3. Elasticsearch
    4. …
    © 2023 Wantedly, Inc.

    View Slide

  19. 利用されないデータを書き込む
    BigQueryの監査ログが便利
    誰がいつデータを参照したかがわかる
    © 2023 Wantedly, Inc.
    BigQuery編
    https://marketplace.looker.com/marketplace/detail/bigquery-information-schema を利用

    View Slide

  20. © 2023 Wantedly, Inc.

    View Slide