ramenjunitiメモ

自分なりに調べたものをまとめたり、文章を書く練習したり

JS修正してGoにコントリビュートした

Treasure Advent Calendar 2019 の22日目の記事です。

adventar.org

先日、Treasureでもお世話になったGoへコントリビュートしました!

この記事では、初のOSSへコントリビュート成功ということで、その経緯を書いていこうと思います

ある日

Go Conference 2019 Autumnに参加した影響か、Goへの思いが高まりGoへコントリビュートしたいなーと思いながらGithubでGoのコードを覗いてました

気になるものを見つける

どうやらGoにはgophertoolというChrome拡張機能があるらしい

粗探しをする

中身を覗いてみると5~9年前で更新が止まってるっぽい

f:id:ramenjuniti:20191219162621p:plain
コントリビュートする前

なんか怪しそう!

過去にChrome拡張を作ったことがあり雰囲気でコードは読むことができたので、何かミスってるとこないかなーと粗探しをしてみることに

お!?

Chrome拡張のAPIドキュメントを見ながら、gophertool/background.jsを粗探ししてると

chrome.omnibox.onInputEntered.addListener(function(t) {
  var url = urlForInput(t);
  if (url) {
    chrome.tabs.getSelected(null, function(tab) { // <-- お?
      if (!tab) return;
      chrome.tabs.update(tab.id, { "url": url, "selected": true });
    });
  }
});

chrome.tabs.getSelectedを使ってるんか、ドキュメント見てみるか」

f:id:ramenjuniti:20191219171948p:plain

「ん?」

f:id:ramenjuniti:20191219174346p:plain

「うおー!Deprecatedやんけー!」

興奮しました

「修正も難しくなさそうだし、プルリク作ったらマージしてもらえそう!」

興奮しました

プルリクを投げる

修正できそうなコードを見つけることができたので、実際にプルリクを投げてみることに

Goにはコントリビュートの手順に関するドキュメントが用意されています golang.org

ドキュメントに従い、issueを作り github.com

GoではレビューシステムにGerritというシステムを利用しているので、Gerrit上でコードを以下のように修正してプルリクを投げました

chrome.omnibox.onInputEntered.addListener(function(t) {
  var url = urlForInput(t);
  if (url) {
    chrome.tabs.query({ "active": true, "currentWindow": true }, function(tab) { // <- 修正箇所
      if (!tab) return;
      chrome.tabs.update(tab.id, { "url": url, "selected": true });
    });
  }
});

色々と面倒くさいのかなと思ってましたが、ドキュメントに書かれた手順に従っていくだけなので、プルリク自体はすぐ作ることができました

あとはレビューを待つだけ!

そしてマージへ

マージされた!

わーい!🎉 f:id:ramenjuniti:20191219185718p:plain

プルリクを作って約4時間後にレビューされ、特に問題がなかったようでそのままマージされました

このコードはGo1.13.5から反映されてるようです

おわりに

以上のような経緯でコントリビュートしました

正直今回修正した箇所は小さく(しかもJS)、ラッキーコントリビューションではあるんですが、普段お世話になっているGoへコントリビューションだったので、純粋に嬉しいです

今回が初のOSS貢献で、修正できそうなコードを見つけた時やプルリクがマージされた時、脳汁ドバドバサイコー!を体験して味を占めたので、これからも継続してやっていきたいです笑 OSS楽しい!