GitHubのissueを活用した個人アプリの開発手順を書いてみた 


# この記事を書いたきっかけ
実務未経験からITエンジニアへの転職を目指しており、Ruby on Rails を用いたWEBアプリケーション（ポートフォリオ）開発をしている。チーム開発を見据え、GitHubでissue管理を用いた開発をしているが、issue の活用が開発において非常にやりやすく、役立っているので記事にしてみた。
以下で開発手順を解説します。

**おかげさまで2020年8月から、エンジニアとして転職して働くことができています**


# 前提として
Git,GitHubの基本的な概念、仕組み、基本的な用語、コマンドについては解説しません。(ローカル/リモート/リポジトリ/コミット/ブランチ/マージ/プルリクエストなど）

Git、GitHub についてあまり理解していない方は最後にリンクで載せている Udemy の教材もおすすめです。

# issueとは？
「issue」直訳すると、〔議論すべき〕重要な話題［問題］、問題点、論点、争点、〔問題の〕核心、急所　などの意味になる。
GitHub での issue は repository ごとに管理ができ、repository を見ることができれば誰でも発言が可能である。
開発チームの運用方針によっても使われ方は異なると思うが、私の場合は主にタスク管理ツールとして使用。

# issueを活用するメリット
- issue に基づいてブランチを切り、作業、コミットすることで自分のやるべきことが明確になり、作業効率UP。
- issue ごとに作業、コミットすることで達成感を得ながら開発ができる。モチベーションUP。
- やるべきことが思い浮かんだ際に issue を作成しておくことで、タスクの備忘録になる。
- issue、コミット、プルリクエスト を関連づけることができるため、後から変更内容を追いやすい。

#開発手順
1. issue を作成
2. ローカルリポジトリでブランチを切る
3. ローカルリポジトリ、ブランチ上でひたすら作業
4. ローカルリポジトリでコミット & リモートリポジトリにプッシュ
5. GitHub（リモートリポジトリ）でプルリクエストを作成して、ブランチをマージ
6. issue を確認してクローズ
7. ローカルリポジトリのマスターブランチをリモートリポジトリと同じ内容にする

以下で詳しく説明↓↓

# 1. issue を作成
<img width="1039" alt="スクリーンショット 2020-06-04 19.28.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621162/dd549cc6-598a-96f8-6e6c-f4050b567a67.png">
まず GitHub の作業リポジトリで issues を開き、New issue をクリック。
<img width="705" alt="スクリーンショット 2020-06-04 19.38.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621162/20452ebc-bdb4-f88e-c244-1099494d8f56.png">
次に
①タイトルを入力（必須）
②内容を入力 （☑︎を押すとチェックボックスが作成されるので便利）
③よければ Submit new issue をクリックして issue を作成

<img width="737" alt="スクリーンショット 2020-06-04 19.53.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621162/aa4adc19-945a-e6f8-bc60-5797758a51fa.png">
こんな形で issue が作成されるので、この issue に基づいてブランチを作成。このとき issue に #番号 が作成される。この #番号 でコミットを紐付ける。

# 2. ローカルリポジトリでブランチを切る


    # ローカルリポジトリ、ターミナルでブランチを作成。
    # ブランチ名に issue の #番号 を入れるとわかりやすい（ブランチは特に関連付けされる訳ではない）。
    $ git checkout -b ブランチ名#番号 (今回だと #2)
    もしくは
    $ git branch ブランチ名#番号
    $ git checkout ブランチ名#番号

# 3. ローカルリポジトリ、ブランチ上でひたすら作業
issue を意識して、脇目も振らず作業に没頭。

※作業中に issue と作業内容がズレるやるべきことが出てきたら、その都度備忘録的に issue を作成しても OK

# 4. ローカルリポジトリでコミット & リモートリポジトリにプッシュ
作業が終わったら、

     変更内容を確認 → ステージに上げる → コミット → リモートにプッシュ

    $ git status
    $ git diff

    $ git add .

    （このとき コミットコメントに issue の #番号 を必ず入れる！）
    $ git commit -m '投稿機能実装 #番号（今回だと#2)'
    
    $ git push origin ブランチ名#番号


# 5. GitHub（リモートリポジトリ）でプルリクエストを作成 → マージ
<img width="746" alt="スクリーンショット 2020-06-05 19.32.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621162/cb893acf-6f12-6f6d-fedf-2bbf8c5925ca.png">
プルリクエスト作成の前に、GitHub に行ったら issue をクリック。コミットが issue と関連付けられていることを確認できたらプルリクエストを作成。
<img width="753" alt="スクリーンショット 2020-06-05 19.45.43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621162/092495c3-b99e-9f0e-357f-bfc54e3f28c2.png">
①タイトルにコミットコメントが自動で入力される（この #番号 により issue とプルリクエスト も関連付けされる）
②適時コメントを入力（チーム開発の場合はレビューをしてもらうため、それを意識してコメントできるとgood。自分は現状あまりできてないかも）
③良ければ Create pull request でプルリクエストを作成
<img width="753" alt="スクリーンショット 2020-06-05 19.55.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621162/4f542650-89cb-71f3-97e9-88cc94a17aa8.png">
Merge pull request でマージを完了する
# 6. issue を確認してクローズ
<img width="773" alt="スクリーンショット 2020-06-05 19.58.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621162/dda703a3-3acf-4e7c-68ed-1384675142a2.png">
<img width="759" alt="スクリーンショット 2020-06-05 20.03.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621162/5cb32c45-5162-761a-57b3-3d9e1081ba5c.png">
Closed と表示されていればOK

# 7. ローカルリポジトリのマスターブランチをリモートリポジトリと同じ状態にする
最後に、ローカル環境でマスターブランチに移動して更新

     $ git checkout master 
     $ git pull origin master(チーム開発では fetch + merge のが無難かも）

1.に戻り繰り返し作業開始！
     
# 補足
-  issue #番号の順番通りに作業する必要はなく前後しても構わない。
- 過去の issue およびコミットに関連付いた内容で修正したい箇所があった場合に新しい issue に関連付けることができる。
<img width="764" alt="スクリーンショット 2020-06-05 20.22.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621162/0a5e435c-65ce-6026-450b-1b286b609364.png">


# 参考記事、教材
- https://qiita.com/fukubaka0825/items/c7710b4e87d478c8ba3b
- https://qiita.com/janus_wel/items/ba47259f107b161c5727
  
↓↓初心者の方にこちらの Udemy 教材めっちゃおすすめです！セールの時にぜひ！
- https://www.udemy.com/share/101WYWCUcScF9bQX4=/

# 最後に
見ていただいてありがとうございます。
Qiita 初投稿めっちゃ疲れました。
ご指摘、補足などなどありましたら是非ともよろしくお願いします！