OSS未経験「なにから始めたらいいかわからない…」←これを一気に解決する神リポジトリ

## はじめに
こんにちは。WEBエンジニアのmasakichiです。

OSSを始めたいと思いながらも「なにから始めたらいいかわからない…」と悩んでいませんか？

そんなOSS未経験者に[Good First Issue](https://github.com/deepsourcelabs/good-first-issue)というリポジトリをお勧めしたく記事にしました。


##この記事で書いてあること
この記事には以下の2つが書いてあります。

- Good First Issueについて
- Good First Issueからコントリビュートするまでの流れ（経験談）

## Good First Issueとは
![sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1006362/f22b77a6-981b-157b-5e97-6ed7d94b736c.png)

OSSにコントリビュートしたことのない開発者でもすぐに始められる人気プロジェクトをピックアップしたキュレーションサイトです。

プロジェクトのリンク先はgithubリポジトリで管理されています。

リポジトリは[こちら](https://github.com/deepsourcelabs/good-first-issue)
キュレーションサイトは[こちら](https://goodfirstissue.dev/)

Good First Issueでは下記の基準を満たしたプロジェクトがピックアップされています。
そのため、OSS未経験者でも取り組むことのできそうなissueを簡単に見つけることができます。

**Good First Issueのピックアップ基準**

- `good first issue`のラベルが付いたissueが3つ以上あること。[^1]
- 10人以上のコントリビューターがいる。
- プロジェクトの詳細な説明が記されている。
- `CONTRIBUTING.md`があること。[^2]
- 積極的にメンテナンスを行っている。


個人的に`CONTRIBUTING.md`が必須条件となっていることが素晴らしいなと思います。
github上で良さげなプロジェクトを見つけても、どんなコントリビュートをしたらいいのかわからないということが多々あるので、`CONTRIBUTING.md`のようなドキュメントは未経験者の大きな助けになると思うからです。

##実際にコントリビュート先を探して、プルリクがマージされるまでの流れ
実際にわたしがGood First Issueからコントリビュート先を探して、プルリクがマージされるまでの流れを紹介します。

これから、OSS活動を始めようと思っている同志のご参考に少しでもなれたら嬉しく思います。

なお、プルリクの送り方など細かな操作方法は割愛しています。
そちらについては、Qiitaにわかりやすい記事がたくさんありますのでご参考にしていただくのが良いと思います。

- [OSS初心者がRailsにプルリクエストを送ってマージされるまでの一部始終](https://qiita.com/fuqda/items/a3e5270ff9cb4fbf31e2)
- [【超図解】OSSにPull Requestを出す時の備忘録](https://qiita.com/y-vectorfield/items/b955617712f3b66359f2)

### サイトからコントリビュート先を探す
まず[キュレーションサイト](https://goodfirstissue.dev/)の方から、コントリビュート先を探します。
自分が得意な言語でフィルタリングすることもできるので、活用してみてください。

![図1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1006362/fd006d67-66b1-a5d3-49b9-c136bf39d5da.jpeg)


それぞれ、プロジェクト名・概要・issueのタイトルなどが表記されているので、取り組めそうなものを選びます。
プロジェクト名のところをクリックすると、実際のリポジトリにリンクすることができます。

:::note info
ここに記載されているのは簡単な概要のみなので、もしざっくり見てピンと来なくても、とりあえずリポジトリを覗いてみることをお勧めします。
:::

わたしの場合は最終的に[awesome-resources](https://github.com/shahednasser/awesome-resources)というプロジェクトを選びました。

![dist.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1006362/b2ef0b59-f094-c821-cd2a-a2b175876a8d.png)

### README.mdとCONTRIBUTING.mdを読む
リンク先のプロジェクトでは、まずREADMEとCONTRIBUTINGに目を通します。

一般的にREADMEにはプロジェクトの概要などが記載されていて、CONTRIBUTINGにはどういった種類のコントリビュートが必要とされていて、どうやって参加するのかが説明されているからです。

わたしの選んだ[awesome-resources](https://github.com/shahednasser/awesome-resources)にはそれぞれ下記のように記載されていました。

```text:README.mdの抜粋
List of helpful resources added by the community for the community!

日本語訳
コミュニティがコミュニティのために追加した有用なリソースのリスト!
```

```text:CONTRIBUTING.mdの抜粋
Adding Resources
You can contribute to this repository very easily!
1.Get the resource you want to add ready.
2.Go to the README.
3.Click on the edit icon at the top right corner.

日本語訳
リソースの追加
1.追加したいリソースを準備します
2.READMEを開きましょう
3.右上の編集ボタンをクリックして編集します
```

どうやら、わたしが選んだリポジトリでは有用なリソースがREADMEにまとめられていて、そのリストに自分がお勧めしたいリソースを追加することでコントリビュートができるようでした。

なので、早速コントリビュートに挑戦してみます。

### リポジトリをフォークする
まず右上のボタンからForkします。

![dist.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1006362/8cafe887-f69c-d1a6-fb95-1201bcbb36df.jpeg)


Forkすることで自分のgithubアカウントにリポジトリのコピーが生成されます。
READMEの編集はこちらのコピーリポジトリで行います。

### ブランチを作る
編集を始める前に、ブランチを切っておきます。
オリジナルのプルリクをみると、他の人が`patch-○○○`というブランチにしている人が多かったので、一応準じておきます。


### READMEの編集 / リソースの追加
わたしは 20+ Web Projects With Vanilla JavaScript というサイトのリンク先を追加することにしました。
書式や記述方法は既存のものを参考にしました。
READMEを編集したら、変更を保存します。

### プルリクエストを送る
ここまで来たら、いよいよプルリクを送ります。
フォークした自分のリポジトリ上で、プルリクを作って送ります。
コメントなどは他の人のプルリクを参考にするといいと思います。

![dist.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1006362/2ac876e6-38bc-532e-3443-a6acccb1cba7.jpeg)


### マージされるまで待つ
プルリクを送った後は、プロジェクト管理者がチェックしてくれるのを待ちます。
何か問題があればコメントで指摘される場合もありますが、問題なければマージされるはずです。

わたしの場合は、`Thank you`のコメントと一緒に無事１発でマージされました。

![sample01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1006362/fa86ebb3-3bb9-172b-241e-661b5d7dd703.jpeg)


コントリビュート達成です。

##所感
OSS活動というと、一流エンジニアたちがすごい会話をしながら行っている敷居の高いものというイメージがありましたが、実際はわたしのような経験の浅いエンジニアでも気軽に参加できるものだと感じました。

コントリビュートの方法もプログラミングを書くことだけでなく、リソースの追加や誤字の訂正（タイポ）、翻訳作業など多岐にわたります。

ゆくゆくはプログラミング言語を提案できるようなコントリビュートもしてみたいですが、最初の１歩目としては今回わたしが行ったような方法で感覚を掴んでみることはOSS未経験者にとって大変有効だなと思います。


## リンク先
- [オープンソースガイドライン](https://opensource.guide/ja/)
- [Github Docs "Managing labels"](https://docs.github.com/en/issues/using-labels-and-milestones-to-track-work/managing-labels)
- [awesome-resources](https://github.com/shahednasser/awesome-resources)


[^1]: Githubにデフォルトで定められているラベル。初めてコントリビュートする人にとって良いissueであることを示します。
[^2]: CONTRIBUTINGドキュメントにはどういった種類のコントリビュートが必要とされていて、そのプロセスがどうなっているかの説明が記載されています。すべてのプロジェクトがCONTRIBUTINGファイルを持つわけではないですが、そのファイルがあることによって、そのプロジェクトがコントリビュートを歓迎していることの印になります。