はじめに
1週間〜1ヶ月規模のハッカソンにおけるGithubの運用を仲間内で共有するために書いています。Githubの環境が整えられる人材がいて、メンバーに共有する想定であるため、詳しい解説は省いています。
GitHubとは
Wikipediaには
GitHubは、ソフトウェア開発のプラットフォームであり、ソースコードをホスティングする。コードのバージョン管理システムにはGitを使用する。
とあります。簡単に説明すると、チームみんなで書いたコードを一つの場所で管理してくれるサービスです。
Gitとの違い
メンバーそれぞれの環境にコードのバージョン管理システムであるGit
をインストールし、それをインターネット上で管理するのがGitHub
です。
では使い方を目的ごとに説明していきます。
※Gitのインストールや、GitHubのアカウント作成については説明を省略します。
以下の記事を参考に導入してください。
チームで開発する(Organizations)
OrganizationsとはGitHub上で作れるチームのことです。
以下のような画面で構成されます。
タスク管理
タスクを作る
Projectsを選択すると、Todo
・InProgress
・Done
の順に並んでいます。
Todoがタスクを追加していく場所です。「たぶん必要かな?」くらいの軽い気持ちで追加して良いと思います。以下のようにAdd item
でタスクを追加します。
追加されたタスクはDraft
という下書きです。Draftの右にあるメニューからConvert to issue
を選択すると、下書きから実装するタスク(issue
)へと変化します。
タスクを始める
Todo
にあるissueをドラッグ&ドロップでIn Progress
に移動します。In Progressは進行中という状態です。
誰が進行しているのか設定する必要があります。
タスク名をクリックし、右側の項目のAdd Assignees...
から自分のアカウントを選択します。
閉じると画面のような状態になります。これで誰がどのタスクをしているのか管理することができます。
次にここで作ったタスクを元にブランチを切ることで開発を進めていきます。
分担して作業する(branch)
branchとはWikipediaによると
ブランチ(branch)とは、バージョン管理システムの管理下にあるオブジェクト(ソースコードファイル、ディレクトリツリーなど)を複製し、それぞれ同時並行して変更が行えるようにしたものである。
まさに枝
のイメージで、分岐したブランチは他のブランチの影響を受けないため、同じリポジトリ中で複数の変更を同時に進めていくことができます。
※ブランチを作ることをブランチを切る、ブランチを合体させることをmergeと呼びます。
今回の構成
main ー ー develop ー ー ー feature/#1
|
ー ー feature/#2
|
ー ー feature/#3
main
本番用のブランチです。ユーザーが触る環境であるため、エラーやバグがある状態にしてはいけません。動作確認を終えたらdevelopブランチをmergeします。
develop
開発用のブランチです。開発メンバーがそれぞれfeature/#[issue番号]ブランチをmergeしていきます。
feature/#[issue番号]
機能ごとに切るブランチです。該当するissueについている番号を入れて名前を一意にします。最終的にはdevelopにmergeします。
※この場合feature/#1
操作
メンバーのコードを自分の環境に反映する
新しくブランチを切って作業する前に、自分の環境を最新にしなくてはいけません。
この作業を怠ってしまうとGitHub上に同じファイルの変更が衝突してしまうconflict
を起こしやすくなります。今回の構成ではdevelopブランチにメンバーの変更がマージされていくため、developで以下のコマンドを叩きます。
git pull
ブランチを切って移動する
現在いるブランチから新しいブランチを切り、そのブランチに移動します。
git checkout -b "[ブランチ名]"
ブランチを移動する
ブランチを移動します。
git checkout "[ブランチ名]"
ブランチを合体させる
今いるブランチに別のブランチを指定して合体させます。
git merge "[ブランチ名]"
最低限この三つがわかっていれば大丈夫です。他にもたくさん操作がありますので、困ったらその都度調べましょう。
書いたコードをGitHubに反映する
自分が書いたコードをGitHubに反映します。載せているのは最小限のコマンドなので詳しくは調べてみてください。
反映するファイルを選ぶ
この操作をするとステージ状態になり、commitできるようになります。
この操作はVSCodeのGUIのほうが早いかもしれません。
全てのファイル
git add -A
指定したファイル
git add [ファイルパス]
変更内容を記録する(自分の環境のみ)
先ほどステージされたファイルを記録します。
変更の内容は提唱されているフォーマットがあるのでそれに従うべきですが、
ハッカソンにおいては事細かく書かなくても十分な場合が多いです。
git commit -m "[変更の内容]"
変更内容をGitHubに送る
以下のコマンドを実行するとGitHubでPull Requestを作成できます。
git push origin [ブランチ名]
Pull Request
Pull Requestとは
Gitのホスティングサービスが提供する機能の一つで、作業者が他者にソースコードの差分のレビューと開発用・公開用ブランチへのマージを依頼する機能のことです。
つまり、自分の変更をGithubに反映させたいというリクエストです。許可制にすることでエラーが出てないかチェックしたり、ソースコードの衝突を検知できます。
pushすると以下のような表示が出ます。ここからPull Requestを作れます。
変更内容を合体する
※この作業は通常、上司が内容をレビューし、上司が行います。ハッカソンにおいては人のコードを確認する時間がない場合が多いため、自分で行っています。
Pull Requestを確認してmergeします。以下のように特にエラーが見当たらず、no conflictsであればMerge pull request
を押します。もし、エラーやconflictsとあれば環境を整えてくれた人に相談しましょう。
ここで次のようにclose: #[issue番号]
と打ってmergeすればissueを閉じることができます。
このように終わったissueは閉じられてDone
に入ります。
追記
branchをissue番号で切るやり方をしていますが、番号ではこのブランチが何をしているかわからないという状況になりがちなので、feature/login(機能名)
のように切るといいと思います!
まとめ
この流れを後は繰り返していきます。上から順番にもう一度整理すると、
Projectsでissueを立てる
↓
developブランチでpullした後、issueに合ったbranchを切る
↓
作業が完了したらgit add, git commit, git push の順で変更をGitHubに送る
↓
GitHubでプルリクを作り、問題がなければ自分でmergeする
↓
初めに戻る
以上です、お疲れ様でした。
わかりにくいところや間違った認識がございましたらコメントいただけると嬉しいです。