👥

チーム開発におけるGitHubの使い方

2023/03/29に公開

はじめに

先日CODEGYM Academyのチーム開発に参加し、全員チーム開発初心者ながらPERSOL賞とGMO賞を獲得することができました!
フィードバックでチームでのGitHubの使い方が評価されました。
GitHubの使い方を忘れないうちに自分の備忘録も兼ねて記事を書きます。

GitHubのルール

mainブランチを保護する

mainブランチの直接変更を禁止し、いついかなる時も正しく動作する状態に保ちます。
変更を加えるためには、mainブランチから新しく作業ブランチを作成し、変更を加えた後、プルリクエストを作成してレビューを行い、承認されたらmainブランチにマージします。

mainブランチを保護するメリットは主に2つあります。

  • コードの品質を保証することができる
    mainブランチに変更を加えるには、レビューが必要になります。これにより、チーム全員がコードの品質を保証し、問題を事前に検出することができます。

  • チーム開発の進捗をコードベースで追跡することができる
    コードレビューの通知をしておけば、メンバーのどの機能がどの段階にあるかを追跡することができます。

設定方法

GitHubのリポジトリの「Settings」 -> 「branches」 -> 「Branch protection rules」 -> 「Edit」から設定することができます。

4箇所にチェックを入れてください。

  • 保護されているmainブランチにはプルリクエストを要求する
  • マージする前にレビューを要求する
  • 複雑なマージコミットを禁止し結合履歴を管理しやすくする
  • 管理者であっても上記のルールを適用する

GitHubの大まかな流れ

  1. issueを立てる
  2. 作業ブランチの作成
  3. コードを作成・編集
  4. プルリクエストを投げる
  5. レビューしてもらう
  6. mainにマージ
  7. 作業ブランチを削除

コマンドなどの細かい流れ

  1. 現在のbranchを確認:git branch
  2. もし作業ブランチにいる場合はmainに移動:git switch main
    mainブランチを最新状態に更新:git pull
  3. 作業ブランチがなければ、作成し移動:git switch -c <作成したいブランチ名>
  4. 作業ブランチでコードの作成・編集を行う.
    機能ごとにaddcommitの流れを繰り返す(git statusで必ず確認)
    git add . && git commit -m 'コメント'
  5. pushする前に最新のmainを取り込むgit switch main &&git pull
    作業ブランチに戻る:git switch <作業ブランチ>
  6. もしリモートリポジトリからmainに変更があれば作業ブランチにmergeする:git merge main
  7. githubに送る:git push origin HEAD
  8. (githubに移動)githubのサイト上で「Compare & pull request」を押す。issueがあれば紐付けしてから、右下の緑ボタン「Create pull request」を押すとプルリクエストができる。
  9. レビュワーは「Files changed」を押しレビューした後に、「Review changes」からコメント書いて「approve」する。その後「Merge pull requet」を押して「Confirm merge」を押すことでmainブランチにマージされる。最後に「Delete branch」を押してリモートの作業ブランチを削除する。
  10. ターミナルのmainブランチに戻りpushした人はローカルのブランチも削除しておく:git branch -D <作業していたブランチ名>
  11. 最初に戻る

commitコメントの書き方

一目で何をしたのかわかるようにprefixをつけましょう。

例)

git commit -m 'add: XXXの機能を持つxxx.pyファイルを追加'
  • 機能追加 add:
  • 機能修正 update:
  • バグ修正 fix:
  • 削除 remove:
  • 仕様の変更 change:
  • 整理 clean:

おわりに

GitHubにルールを設けることでチーム開発では混乱せずにスムーズな開発を行うことができました。
PMの役割をしたことで個人開発では得られない貴重な体験をすることができました。
一緒に開発していただいた御三方、ありがとうございました!

Discussion