東京都 新型コロナウイルス対策サイトへの貢献方法を解説

# 目次
- [はじめに](#はじめに)
- [この記事は](#この記事は)
- [Slackチャンネルへの参加](#slackチャンネルへの参加)
- [環境構築](#環境構築)
    - [GitHubリポジトリをFork](#githubリポジトリをfork)
    - [ローカルにCloneしてくる](#ローカルにcloneしてくる)
    - [yarnによる環境構築](#yarnによる環境構築)
        - [yarnのインストール](#yarnのインストール)
        - [必要なパッケージのインストール](#必要なパッケージのインストール)
        - [サーバー起動](#サーバー起動)
- [GitHubのissueを見てみる](#githubのissueを見てみる)
    - [開けてみる](#開けてみる)
    - [ラベルを見てみる](#ラベルを見てみる)
- [気になったissueを改善してみる](#気になったissueを改善してみる)
- [自分で改善したものをプルリクエストする](#自分で改善したものをプルリクエストする)
    - [ForkしたリポジトリにPush](#forkしたリポジトリにpush)
    - [プルリクエストを送る](#プルリクエストを送る)
        - [テンプレートに沿った文章を書く](#テンプレートに沿った文章を書く)
    - [マージされるの待つ](#マージされるの待つ)
- [その他の注意事項](#その他の注意事項)
- [さいごに](#さいごに)

# はじめに
この記事を見ている人は少なからず[東京都の新型コロナウイルス対策サイト](https://stopcovid19.metro.tokyo.lg.jp/)への貢献に興味を持っているのではないでしょうか。

「ガチガチのプロしか参加しちゃいけないんでしょ？」
「OSSにプルリクなんて敷居高そう...」

そんなことありません！現に私は高校２年生ですが、対策サイトのGitHubのissueには私でもできそうな課題がいっぱいあります。数多くある課題から自分にできそうなものを選び、改善し、更新の依頼（プルリクエスト）を送るだけです。簡単でしょう？

# この記事は
この記事は**OSSプロジェクトに１回も貢献したことがない、初心者向けの内容**になっています。ベテランの人は直接[GitHubのリポジトリ](https://github.com/tokyo-metropolitan-gov/covid19)を見て頂いた方が速いと思います。

# Slackチャンネルへの参加
対策サイトのコントリビューター（貢献者）たちが集まったコミュニケーション用のSlackチャンネルがあります。
分からないことの質問や新たな提案を気軽にすることができるので、参加した方が良いと思います。

参加リンクはこちらから↓
https://cfjslackin.herokuapp.com/
チャンネル名は `#covid19`

# 環境構築
対策サイトのプログラムを修正して、内容を確認したい時にいちいちどこかしらのサーバに上げていたら面倒くさいですよね。そこで、**自分のパソコン内だけでの対策サイトの動かし方**を解説します。

**Gitのインストール、GitHubのアカウント登録は済んでいる前提で進めます。まだの方は以下の記事を参考にしてください。**
[自分用 Git For Windowsのインストール手順](https://qiita.com/toshi-click/items/dcf3dd48fdc74c91b409)
[【2019年1月現在】GitHubアカウント作成方法](https://qiita.com/okumurakengo/items/848f7177765cf25fcde0)
Macの場合最初からGitがインストールされています。

また、ローカルでの構築だけでなく、自分の開発用サーバを本番と同じような環境（Netlify）にデプロイしたいというベテランの方がいれば、以下の記事が参考になると思います。

[東京都新型コロナウイルス感染症対策サイトをforkしてnetlifyでdev環境を立ち上げる手順 ](https://tech.moyashidaisuke.com/entry/covid19-netlify)

## GitHubリポジトリをFork
東京都 新型コロナウイルス対策サイトのGitHubページを開けてください。
https://github.com/tokyo-metropolitan-gov/covid19
こんな画面↓↓が現れると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453437/8848d506-e4b3-fb48-f34b-e252b8fb0051.png)

青色の線で囲ったForkボタンをクリックしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453437/526d1742-dbf0-4f47-0ceb-db5bfb1c11cd.png)

しばらくすると、自分のアカウント上でForkしてきたリポジトリが作られていると思います。

## ローカルにCloneしてくる
Forkしてきたリポジトリの画面に、（下の画像では）青色の線で囲った**Clone or download**というボタンが作られていると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453437/5e3c4f4c-9310-c080-a339-b9f26bd1ee72.png)

押すと何やらURLなどが書かれた小さい画面が出てくると思うので、（下の画像では）青色の線で囲んだところのボタンをクリックして、書かれているURLをコピーしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453437/e1997019-9579-85ea-639b-6722a866324b.png)

次はパソコンのターミナル（Windowsならコマンドプロンプトという名前）を開いてください。そして、Cloneしてきたいディレクトリまでcdコマンドで移動し、以下のコマンドを打ってください。

```
$ git clone コピーしたGitHubのリポジトリのURL
```

そしたら自分のパソコンの中にGitHubにあるフォルダやファイルがすべてコピーされたと思います。

## yarnによる環境構築
新型コロナウイルス対策サイトほどの規模になってくると、たくさんのパッケージを使用します。パッケージとは、ある機能を作るのが簡単にできるようにするために作られたプログラムの集まりみたいなものと思えばよいと思います。

そこで、多くのパッケージを管理してくれるパッケージマネージャがとても活躍します。
東京都新型コロナウイルス対策サイトでは、yarnというパッケージマネージャが使われています。
以下では、yarnを使った環境構築を解説します。
（実はDockerというものを使った方法もありますが、今回は導入がDockerよりも楽なyarnだけ解説します）

### yarnのインストール
yarnの公式サイトを開き、yarnのインストールをしてください。
https://classic.yarnpkg.com/ja/docs/install/#windows-stable
Windowsの方はインストーラーを入れるだけ、MacOSの方はHomebrewを使えばすぐ終わると思います。

### 必要なパッケージのインストール
またターミナルを開きます。
先ほどGitHubからクローンしてきたものがあるディレクトリまで移動して、以下のコマンドを打ってください。

```
$ yarn install
```
そこそこ時間かかると思います。完了すると必要なパッケージがすべてインストールされます。

### サーバー起動
ついにサーバーを起動させます。ターミナルで以下のコマンドを打ってください。

```
$ yarn dev
```
初回はビルドという作業をするのでかなり時間がかかると思います。ビルドが終わったら、以下のリンクにアクセスしてみてください。

http://localhost:3000

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453437/c81b1512-3804-8b47-581e-d692f91cac78.png)

やったー！対策サイトそのまんまが表示されましたね。

ここまでくれば環境構築はほぼ全て終了です。お疲れさまでした。

# GitHubのissueを見てみる
いよいよ対策サイトに貢献する時です。

GitHubにはissueというものがあります。issueは日本語訳で課題です。

対策サイトの「こんな機能がほしい！」「こんなバグがあるから治してくれ！」という課題たちがissueに全て登録されています。

対策サイトのissueを見てみましょう。以下のリンクを開いてください。
https://github.com/tokyo-metropolitan-gov/covid19/issues

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453437/0436d1a5-5e78-7bd5-5398-6309b88dbf16.png)
こんな感じになってると思います。
ここに対策サイトの課題が登録されています。

## 開けてみる
適当なissueを開けてみてください。以下のような画面が出ると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453437/12ed0243-acde-0306-fd31-9024d83098fd.png)

この画面では、そのissueの概要を見たり、そのissueに対して質問できたりします。
**issueに対しての質問や提案は自由に行えます。気になったことがあれば気軽に聞いてみましょう。**

## ラベルを見てみる
issueのタイトルを見てみてください。なにやら様々な色でgood first issueやらhelp wantedやらと書いてあります。これは**ラベル**と言われ、そのissueの種類みたいなものです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453437/3b091c5e-17cb-03ee-c912-e1d16e525ebe.png)

以下に対策サイトのissueにおけるいくつかのラベルを紹介します。
**good first issue**: 初心者にお勧めのissueです。
**help wanted**: 特別な注意が必要。
**bug**: 名前の通り、バグです。
**improve**: 改善提案
good first issueとhelp wantedとbugは優先度が高く、なるべくこれらのラベルがついたissueに対応すると尚良いです。improveは改善提案なので、必ず反映されるかどうかは分かりません。

# 気になったissueを改善してみる
先ほどのissue一覧から自分ができそうなのを選びましょう。

ここで重要なのが、**やりたいissueが見つかったらコメントで「このissue私がやりたいです！」と意思表明をしましょう。**
意思表明をしないと誰もまだこのissueをやってないと認識され、自分が作業している間に他の人がパパッとやってしまうかもしれません。

意思表明をしたら、さっそく実装です。
自分の得意分野を活かして、より良い物を作りましょう。

# 自分で改善したものをプルリクエストする
ついに、自分で改善したものを実際の対策サイトに「こういう変更をしたので更新してくだい」という依頼（プルリクエスト）を送ります。

## ForkしたリポジトリにPush
**自分のアカウントでForkしてきたリポジトリ**のURLをコピーしてきてください。環境構築編の、ForkしたリポジトリをCloneしてくる項目で１度やっているはずです。

そしたら、ターミナルを開いてプロジェクトのディレクトリまで移動し、以下のコマンドを打ちましょう。

```
$ git add .
$ git commit -m "ここは、自分がどのような変更したかを分かりやすく書いてください。"
$ git push コピーしてきたURL development
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453437/fb35fb6b-46f5-5723-9b0a-1a89aadd9961.png)

自分で変更したところが更新されたはずです。

## プルリクエストを送る
Forkしてきた方ではなく、公式の対策サイトのGitHubページを開けてください。
そして、Pull Requestsというボタンをクリックしてください。以下の画像では青色の線で囲ってあるところです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453437/c2af6e0d-4268-c595-7a11-7e2a135fe883.png)

そしたら現在送られているすべてのプルリクエストが表示されたページが開きます。このページのやや右上にあるNew Pull Requestというボタンをクリックしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453437/c1672d7a-a83e-963e-0e4b-48b2568b3e38.png)

以下の画像のようなページが開くので、青色の線で囲ったcompare across forksというところをクリックしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453437/e74ec0ac-85db-8ffd-709b-65d505340265.png)

これで自分のForkしてきたリポジトリを指定できるようになりました。
青色の線で囲ったところをクリックすると、いろいろなリポジトリのリストが表示されます。
ここで、**自分のGitHubのユーザー名/covid19**を選択してください。
下の画像で言うと赤色の線で囲った部分です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453437/86a874ad-7a5b-92fc-2560-1230b5e72557.png)

そしたら緑色のCreate pull qequestというボタンをクリックしてください。
どのような変更をしたのか書くページが開くと思います。

### テンプレートに沿った文章を書く

このプルリクエストは一体どのような変更を加えるのか、という文章を書きますが、対策サイトのGitHubではこれの書き方のテンプレートが用意されています。それは以下のようになっていると思います。


```
## 📝 関連issue / Related Issues
<!--
  ・ 関連するissue 番号を記載してください。 Issue 番号がない PR は受け付けません。
  ・ issueを閉じるとは関係ないものは#{ISSUE_NUMBER}だけでOKです🙆‍♂️

  ・ You can remove this section if there are no related issues
  ・ If the issue is related but doesn't close upon merge, you can just write - #{ISSUE_NUMBER} 🙆‍♂️
-->
<!--
  ・ Please specify related Issue ID. We don't accept PRs which has no issue ID.
  ・ If there's no reason to close the issue, just "#{ISSUE_NUMBER}" is OK🙆‍♂️
-->
- close {ISSUE NUMBER} 

## ⛏ 変更内容 / Details of Changes
<!-- 変更を端的に箇条書きで -->
<!-- List down your changes concisely -->

## 📸 スクリーンショット / Screenshots
<!-- スタイルなどの変更の場合はスクリーンショットがあるとレビューしやすいです -->
<!-- Changes in styles would be easier to review with screenshots! -->

```
**関連issue**: 全てのプルリクエストにおいて、必ずここで元のissueの番号を書く必要があります。
**変更内容**: どのような変更をしたか箇条書きで書いてください。
**スクリーンショット**: UIのスクショを貼ります。

issue番号については、改善したissueページのタイトルの右に#から始まる数字が書いてあると思います。これを#含め書いてください。

既に多くのプルリクエストがあります。他のプルリクエストの書き方を参考にして、より分かりやすく書きましょう。

**書けたら緑色のCreate pull requestボタンをクリックしてください。これでプルリクエストは終わりです。お疲れさまでした。**

## マージされるの待つ
誰かが自分のプルリクエストの内容をコードレビュー（プログラムに何らかの問題がないかレビューすること）をして、マージ（変更内容を取り込むこと）されるのを待ちます。

もし無事マージされれば、これであなたも東京都 新型コロナウイルス対策サイトのコントリビューターの１人となります。

# その他の注意事項
この記事では書ききれなかったけど、対策サイトへの貢献に際して非常に重要なことが公式のドキュメントに書いてあります。
必ず目を通しておいてください。

[貢献の仕方](https://github.com/tokyo-metropolitan-gov/covid19/blob/development/CONTRIBUTING.md)
[行動規範](https://github.com/tokyo-metropolitan-gov/covid19/blob/development/CONTRIBUTING.md)
[Code for Japanの行動規範](https://github.com/codeforjapan/codeofconduct)
[Issue 番号の無いPRは禁止としました。](https://github.com/tokyo-metropolitan-gov/covid19/issues/841)

# さいごに
最後までお読み頂きありがとうございました。
新型コロナウイルスの脅威が高まっている中、みんなで力を合わせて危機を乗り越えましょう。

ところで、これは言い訳ですが、筆者はこの記事を徹夜明けに書いています。つまりなにが言いたいかというと、どこかしらで支離滅裂なことを書いてそうなので、変なところがあればコメントで指摘して頂ければ幸いです。