eyecatch thumbnail

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

Profile picture
ルッチ / Lucci
2020.11.23

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 ケース: 全て小文字

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 をクリックすれば良いです. クリックするだけなので楽でいいですねー.

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 の pullrequesttemplate.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 へのコントリビュートです.

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

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

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


愛用品


関連記事


大学生へのお知らせ

ここまで記事を読んでくれて本当に嬉しいです、ありがとうございます。

プログラミングを始めたばかりの頃って「やるぞ!」という気持ちは強めですが、 実際に取り組み始めると「何からどうやってどこまでやればいんだ?」 という感じで羅針盤を失うことが多いような気がします。(実体験)

そんな勉強熱心で向上心高めなんだけど目指す姿が曖昧な大学生の方に感謝の意も込めて、就職活動までサポートするプログラミングスクール「レバテックカレッジ」を紹介します。↓

Levtech-college

「自走力」のあるエンジニアを最短3ヶ月で目指せるカリキュラムが月額30,000円で用意されていて、 現段階の「目指す姿が曖昧で何から手をつければいいかわからない状態」から脱却できます。

自分は実際にIT企業で働いていますが、「自走力」のあるエンジニアの方にはいつも助けられています。

なので、目指す姿が曖昧な人はとりあえずレバテックカレッジが導いてくれる 「自走力のあるエンジニア」を目指してみるのはスタートダッシュとしてはアリです。

レベルアップしてからジョブチェンするのはRPGでも常套手段ですし、 レバテックカレッジで一通りのスキルを習得してから自分の目指す姿を再定義するといいかもです。

「自走力のあるエンジニア」って実際どんなエンジニアなの? 何から手をつければいいかわからないから教えて欲しい、 という人は上のテキストリンク/画像リンクから「無料相談会」への申し込みをお願いします。

よきエンジニアライフを!