Skip to content

巨大なダイスボットファイルの分割 #169

@ochaochaocha3

Description

@ochaochaocha3

ログ・ホライズン(v2.04.00時点で3551行)に代表される、巨大なダイスボットファイルを分割して、処理を探しやすくしたい。

背景

一般に、表が多いダイスボットのファイルは大きくなり、変更時に対象の処理を探しにくい。
対策として、v2.02.73以前のダイスボットについては、extratables ディレクトリを利用して、表のみ別ファイルにされている場合があった。
しかし、「起動時に必ずテーブルを読み出すから処理が重い」などと(処理時間測定なしの)苦情が来たため、v2.02.74(2017年8月)でダイスボット本体にマージせざるを得なくなった。
1ダイスボットにつき1つの(場合によっては巨大な)ファイルとなったことには、このような事情があった。

現在は、以下の理由のため、高速化を目的として無理に「1ダイスボットにつき1ファイル」とする必要性は薄れている。

  • 開発終了に伴い、どどんとふの個別サーバ設置が減っている → どどんとふの起動時間が問題となることが少ない。
  • 表のクラスが作られたため、Rubyのコードで(=追加の構文解析処理なしで)ある程度分かりやすく表を記述できる。
  • そもそも、処理時間測定なしでの苦情だったため、本当に別ファイルの表が原因で遅くなっていたのかが怪しい。

したがって、現在は、大きなダイスボットファイルの分割によって処理が探しやすくなる利点の方が、処理速度低下という欠点より大きいと思われる。

方針案

各項目ともに、採否は未決定。

  • 特殊処理が入るコマンドは今まで通りのファイルに書いて、extratables相当の処理を外だしできるテーブルだけ別ファイルに書く。(@ysakasin 案)
  • 長いテーブルとクラス内クラスを別ファイルに書く。その際、厳密に1個ずつ別ファイルでなくてもよい。各ファイル200〜300行以内を目標にする。(@ochaochaocha3 案)
  • 分割したファイルのパス:diceBot/ゲームシステム名/*.rb@ochaochaocha3 案)
    • 例:diceBot/LogHorizon/MGR.rb
  • テーブルをDSLで書けるようにする(@ysakasin 案)
    • prefixes への登録も自動的に行う。
    • 表がいくつかある程度の普通のダイスボットを、簡潔に書けるようにする。

要決定項目

  • 上の方針案のうち、どれを採用するか?
  • どのダイスボットを分割の対象とするか?
    • ファイル分割によって処理を探しやすくなる具体例がほしい。
  • どのくらいの行数をファイル分割の目安とするか?
    • あまり細かく分けすぎると、逆に処理を見つけにくくなる。

Metadata

Metadata

Assignees

No one assigned

    Labels

    refactoring内部構造の改良要情報さらなる情報が必要

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions