typememo.jp

初めて OSS にコントリビュートした経験 – github-csv-tools

2020.11.23

#tech#oss#github
Takeru Yamada

Contents


はじめに

この記事を読み終える頃にはきっと OSS にコントリビュートする勇気が湧いてくると思います.

この記事では, github-csv-tools という OSS にコントリビュートした経験についてお話しします.

OSS へのコントリビュートは今回が初めてでした.

OSS にコントリビュートするまでの流れを全てご紹介しますので, OSS へのコントリビュートに興味がある方はこのまま読み進めていただけると嬉しいです.

それでは参りましょう!

参考: オープンソースにコントリビュートする方法


Step1: 問題を見つける

まずは問題を見つけるところからです.

今回の問題は, csv ファイルの列見出しを github-csv-tools が認識してくれない でした.

背景は Gitlab のイシューを github-csv-tools を使って Github にインポートする方法 に書いてあるので詳細は割愛します.

問題を端的に言うと, title は ok だけど Title はダメ です.

OK ケースと NG ケースを適当に書くとこんな感じです.

OK ケース: 全て小文字

titledescriptionassigner
title 1description 1assigner 1
title 2description 2assigner 2
title 3description 3assigner 3

NG ケース: 先頭大文字

TitleDescriptionAssigner
title 1description 1assigner 1
title 2description 2assigner 2
title 3description 3assigner 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 をクリックすれば良いです. クリックするだけなので楽でいいですねー.

Figure-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 の pull_request_template.md を参考にしたフォーマットでプルリクエストを書いて提出しました.

提出したプルリクエストは こちらです (#33).

蛇足ですが, Github はプルリクエストのテンプレートを定義できる ので,OSS の管理者の皆さま,ぜひご活用してくださいまし.


Step5: コードレビューを受ける

一般的にプルリクエストを提出したらコードレビューを受けます.

しかし,今回のプルリクエストは一行修正とテストケースの追加だけなので, ほとんどコードレビューはありませんでした.


Step6: プルリクエストが受理される

コードレビューを経て,github-csv-tools の管理者から

Looks good, thanks!

というコメントをもらい,プルリクエストが受理されました.


Step7: OSS のコントリビュータになる

この瞬間,筆者は OSS コントリビュータになりました

プルリクエスト (#33) の修正が入った github-csv-toolsv2.1.0 としてタグが打たれリリースされました

github-csv-tools の Github のトップページに筆者が並んでいます. 本当に微力の貢献ですが,コントリビュータとして評価されるのは嬉しいです :)

Figure-oss-contributer


おわりに

OSS に初めてコントリビュートした経験についてのお話しでした.

たとえ一行修正だけでも,たとえテストケースの追加だけでも,たとえタイポの修正だけでも, 少しでも OSS を改善する行動ならば OSS へのコントリビュートです.

これからも 自分が歩いた道は綺麗にする ことをモットーにして修錬します.

最後までお読みいただきありがとうございました.

応援していただけるととても嬉しいです!


愛用品


関連記事