みずぴー日記

人間の再起動ボタンはハワイのビーチにある

📚Prpr設計判断

🍮 Prpr: bot for github pull requestに、こういう設計にした理由について書くのを忘れていた。

f:id:mzp:20150915222350j:plain

gemプラグイン

gemで動作を追加できるようにするのは当初から計画していた。ただ、まずは一つのgemとして作って後から分割するか、最初から複数のgemとして作るのかは迷った。

結局、最初から複数のgemとして作ることにしたが

  • gemspecを大量に書くのが面倒だった。
  • どこでからがプラグインかが明確になって、クラス設計等がしやくなった。
  • 外部のAPIを叩く部分をすべてプラグインにしたので、本体のspecでモックが不要になった。

といった効果があったので、よい選択だったと思う。

設定ファイル

prpr-checklistなどでは、投稿する文書を設定できるようにする必要があった。ただ、環境変数で設定するようにすると、設定を変更できるのが一部のユーザのみになってしまう。

そこで投稿する内容はレポジトリ内にあるファイルで設定できるようにした。(標準では CONTRIBUTING.md の内容が投稿される。)

一番最初のアイデアではWikiを使うつもりだったが、内容を取得するAPIが見あたらなかったので断念した。

Github限定

プラグインでやりたいことがかなりGithubに依存しそうだったので、対象をGithubに限定した。 レポジトリを操作する抽象レイヤーなどは作らず、プラグインにはOctokitのインタフェースを直接露出している。

対照的にprpr-review_labelの通知先は、特定のサービスに限定していない。これはできることを「テキストの通知」に限定したので、抽象レイヤーを容易に作れたためである。