Contents
- はじめに
- Step1: 問題を見つける
- Step2: リポジトリを fork する
- Step3: ソースコードを修正する
- Step4: プルリクエストを提出する
- Step5: コードレビューを受ける
- Step6: プルリクエストが受理される
- Step7: OSS のコントリビュータになる
はじめに
この記事を読み終える頃にはきっと OSS にコントリビュートする勇気が湧いてくると思います.
この記事では, github-csv-tools という OSS にコントリビュートした経験についてお話しします.
OSS へのコントリビュートは今回が初めてでした.
OSS にコントリビュートするまでの流れを全てご紹介しますので, OSS へのコントリビュートに興味がある方はこのまま読み進めていただけると嬉しいです.
それでは参りましょう!
Step1: 問題を見つける
まずは問題を見つけるところからです.
今回の問題は, csv ファイルの列見出しを github-csv-tools が認識してくれない でした.
背景は Gitlab のイシューを github-csv-tools を使って Github にインポートする方法 に書いてあるので詳細は割愛します.
問題を端的に言うと,
title
は ok だけど Title
はダメ
です.
OK ケースと NG ケースを適当に書くとこんな感じです.
OK ケース: 全て小文字
title | description | assigner |
---|---|---|
title 1 | description 1 | assigner 1 |
title 2 | description 2 | assigner 2 |
title 3 | description 3 | assigner 3 |
NG ケース: 先頭大文字
Title | Description | Assigner |
---|---|---|
title 1 | description 1 | assigner 1 |
title 2 | description 2 | assigner 2 |
title 3 | description 3 | assigner 3 |
NG ケース
の csv ファイルをインポートしようとすると次のエラーメッセージが表示されました.
手軽にイシューをインポートできると期待していたのに,エラー吐かれて普通に困りました.
$ githubCsvTools ~/Downloads/example.csv
Title required by GitHub, but not found in CSV.
エラーの原因箇所が github-csv-tools の import.js にあることを特定できたので修正してプルリクエストを出してみようと思い立ちました.
Step2: リポジトリを fork する
プルリクエストを出すためには対象のリポジトリを fork してくる必要があります.
他の人のアクティブなリポジトリを fork してくるのは初めてだったので, 何も副作用がないにも関わらずなんだか緊張しました.
fork するには Github にログインしている状態でページ右上隅の fork
をクリックすれば良いです.
クリックするだけなので楽でいいですねー.
Step3: ソースコードを修正する
自分のアカウントに対象リポジトリを fork したらローカルに git clone
します.
以下は一例です.
$ git clone git@github.com:typememo/github-csv-tools.git
クローンしたら master ブランチからトピックブランチを切ります.
ブランチ名の命名規則が対象リポジトリにあればそのルールに従いましょう.
今回は命名規則はなかったのでイシュー番号と紐つけて
topic-22-import-case-insensitive-matching
と言うブランチを切りました.
$ git checkout -b topic-22-import-case-insensitive-matching
ブランチを切ったらソースコードを修正します.
今回の修正内容は,
- csv ファイルから抽出した列見出しを全て小文字に変換する
- 列見出しの先頭文字が大文字の csv ファイルをテストケースとして追加する
の2つです.
以下に差分を示しておきます.
[#22] Perform case insensitive matching to cols
diff --git a/import.js b/import.js
index 5dffbda..9c4f6b4 100644
--- a/import.js
+++ b/import.js
@@ -16,7 +16,7 @@ const importFile = (octokit, file, values) => {
},
(err, csvRows) => {
if (err) throw err;
- var cols = csvRows[0];
+ var cols = csvRows[0].map(col => col.toLowerCase());
csvRows.shift();
// get indexes of the fields we need
[#22] Add test sample named uppercaseTitle.csv
diff --git a/test/uppercaseTitle.csv b/test/uppercaseTitle.csv
new file mode 100644
index 0000000..159d976
--- /dev/null
+++ b/test/uppercaseTitle.csv
@@ -0,0 +1,3 @@
+Title,Description,Labels
+Test 1, This is the test1 desc, bug
+Test 2, This is the test2 desc, question
\ No newline at end of file
修正したので git push
して fork したリポジトリのリモートブランチを更新します.
$ git push -u origin topic-22-import-case-insensitive-matching
さて,いよいよプルリクエストを提出します.
Step4: プルリクエストを提出する
“よし,これであとはプルリクエストを出すだけだ!” と思うと同時に “fork したリポジトリにプルリクエストってどうやって出すんだろう?” と思いました.
少しググると理解できまして,
fork した自分のアカウントに紐つくリポジトリのリモートブランチ
=> fork 元のリポジトリのマスターブランチ
にプルリクエストを出せば良いようでした.
プルリクエストを提出する時のフォーマットなどが fork 元のリポジトリに書いていればそれに従う予定でしたが, 今回はフォーマットがなかったので困りました.
良い感じのフォーマットはないかなーと思いながら探して見つかった, web.dev の pullrequesttemplate.md を参考にしたフォーマットでプルリクエストを書いて提出しました.
提出したプルリクエストは こちらです (#33).
蛇足ですが, Github はプルリクエストのテンプレートを定義できる ので,OSS の管理者の皆さま,ぜひご活用してくださいまし.
Step5: コードレビューを受ける
一般的にプルリクエストを提出したらコードレビューを受けます.
しかし,今回のプルリクエストは一行修正とテストケースの追加だけなので, ほとんどコードレビューはありませんでした.
Step6: プルリクエストが受理される
コードレビューを経て,github-csv-tools
の管理者から
Looks good, thanks!
というコメントをもらい,プルリクエストが受理されました.
Step7: OSS のコントリビュータになる
この瞬間,筆者は OSS コントリビュータになりました
プルリクエスト (#33) の修正が入った github-csv-tools
は
v2.1.0
としてタグが打たれリリースされました
github-csv-tools
の Github のトップページに筆者が並んでいます.
本当に微力の貢献ですが,コントリビュータとして評価されるのは嬉しいです :)
おわりに
OSS に初めてコントリビュートした経験についてのお話しでした.
たとえ一行修正だけでも,たとえテストケースの追加だけでも,たとえタイポの修正だけでも, 少しでも OSS を改善する行動ならば OSS へのコントリビュートです.
これからも 自分が歩いた道は綺麗にする ことをモットーにして修錬します.
最後までお読みいただきありがとうございました.
愛用品
- Xiser Pro Trainer (ステッパー)
- HHKB Professional 墨 (キーボード)
- HHKB キートップセット 白 (キートップ)
- Apple Magic Mouse 2 (マウス)
- Apple MacMini (PC)
- iiyama Display 27inch FullHD (ディスプレイ)
- KINTO UNITEA 550ml (コップ)