gitbucket-monitoring-pluginというGitBucketを立てているインスタンスのリソースなどの情報を表示するプラグインを1年くらい前に作ったのですが、いろいろ思うところがあったので大幅にリファクタしました。

ちなみに、この記事は自分向けの日記でそれ以上のものではありません。

動機


このプラグインはScalaの勉強がてら作ったものなのですが、私はもともとプログラミング・設計がアカンというの相まって控えめ言ってもコードが汚すぎてもはや作った本人ですらメンテ不可能に等しい状態でした。また、少ないとはいえ一応自身のリポジトリの中で最もStarが多く、そのリポジトリのコードがきちゃないのはアカンなぁ…。とずっと思ってました。

なおしたところとか


なんか急に修正しようという気持ちになったので思い切ってガッツリとリファクタしました。

例外・エラー処理

大きく直したのは例外・エラー処理でtry・catchを使って拾った例外をModel~Controller~Viewと全てEithreで放り投げていたのを下記のように変えました。

  • ModelではOptionとTryを使用
  • Controllerでmatchで拾う
  • Viewに投げるときにEitherにする

こんな感じにしました。これで結構すっきりしました。

ログビューワーの廃止

Logback設定とGitBucketログを閲覧できる機能を実装していたのですがgitbucket-logs-pluginという別のプラグインに切り出しました。理由ですが…

  • 他の機能はインスタンスの情報に関するものだがこれだけ役割が違う
  • これが最も汚い部分だった

他の機能と違うというのがちょうどよい理由付けになりまして、ついでなので別に切り出そうかなと。とりあえず、そっくりそのまま、まるまる別リポジトリに分割しました。この機能自体はLogBackをよく知らない時に作ったのですが、ログファイル分かれてる場合に対応できてないといったようないろいろな問題があります。そういったこともあって、分割したついでにいろいろ機能追加と改修する予定です。[1]

その他

後は、謎のユーティリティメソッドをimplictに変えたり、スコープ変えたり、命名変えたりとかとかしました。scalafmtでフォーマットかけるようにしたりとか。

結果


Codacyというコードレビューサービスでpush時に自動レビューを行なうように設定しているのですが、一応Aになりました。ジェネリクスを使ったりするともうちょっと綺麗になりそうな気もするのですが、以前に比べたらだいぶ読み易くなったのでとりあえずこのあたりにしておきたいと思います。


  1. 技術的に挫折しない限り