2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GitHubのマージ可否を制御するChrome拡張機能を作った

Posted at

Merge controller for GitHub

screenshot2.png

何ができるの?

Pull Requestのタイトルに含まれる文字や、リポジトリ・ブランチ名でマージボタンを非活性にできます
タイトルにWIPを含む場合はマージさせない
タイトルにReleaseを含む場合にのみマージさせる
masterブランチのマージはstagingブランチからしか許可しない
のようなルールを自由に設定可能です。

スクリーンショット 2017-04-29 16.30.14.png

作った経緯

開発用ブランチへPull Request作成後にすぐマージしているクセで、WIP Pull Requestも作成後に誤ってマージすることがあったので、これを防ぎたかった。
同様の機能を持つChrome拡張機能は既にあったが、現場がGitHub Enterpriseを使っておりGitHubドメインと違うのでそもそも対応してない。
公開ソースをゴニョゴニョして使うという手もあったけど、Chromeウェブストアに公開せずにデベロッパーモードとして使うことになり、Chrome起動時に毎回警告が出るので嫌
Chrome拡張機能がJavaScriptで作れるとのことで、ならば自分でも作れるのではと思って作ってみました。

ソース

こちらへ公開してます。
https://github.com/casmb200/merge-controller-for-github
(英語はGoogle翻訳頼りなんで、かなり怪しめ)

どうやって開発するの?

Content Scriptで最低限の構成ならば、 manifest.json と ページ表示時に実行されるJavaScriptファイル1つだけでOKです。
manifest.json へはアプリ情報・権限設定・実行するスクリプトなどを定義します。JavaScriptファイルは普段ウェブページを作成する時に用意するものと同じように作るだけです。
今回作ったプログラムでは、オプション画面用のHTML/JS/CSS、アイコン画像、多言語対応用のlocaleファイルを加えてます。

監視方法

マージ可否判定について、画面ロード時の判定のみだと、 タイトル修正時Pull RequestのReOpen時 に判定できないので、 MutationObserver を使ったDOM監視をしています。

MutationObserver
https://developer.mozilla.org/ja/docs/Web/API/MutationObserver

var observer = new MutationObserver(function(mutations) {
                   mutations.forEach(function(mutation) {
                       // マージ可否判定
                       control_merge();
                    });
               });

// 対象の子ノードを監視する設定
var config = { childList: true };

// 対象のDOM監視開始
observer.observe($('.js-discussion')[0], config);

configの部分を attributes: true にすると対象の属性を監視、 childList: true, subtree: true にすると対象の子ノード及び孫ノードを監視することができます。

今回作ったプログラムでは、タイムラインの箇所とマージボタンの箇所を監視・変更があればマージ可否判定するようにしています。

アプリの公開

デベロッパーダッシュボードより$5でデベロッパー登録、圧縮したファイルをアップロードすれば公開できます。
海外で使ってもらう為、説明文やスクリーンショットを言語ごとに設定することも可能です。
限定公開にしておけば、URLを教えた人にのみ公開することも可能です。

Chrome拡張機能開発のすすめ

前述の通り、Chrome拡張機能はJavaScriptで作ることができ、デベロッパーモードで使うだけならばかなり敷居は低いかと思います。
DOM操作もできますし、テスト用に使うツールなどのオレオレツールを作るには最適なんじゃないかと思いました。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?