じゃんけんゲーム開発演習の流れ
本節ではじゃんけんゲームを主開発者及び共同開発者が協力して開発するという想定のもと,Github Flowにもとづいてどのように開発するかを図を用いて説明する.Github Flowにもとづいた開発をすすめるためには各種Gitクライアントの利用が必要となるが,Gitクライアントごとの操作方法は次節以降で詳述する.
なお,以降ではまず演習実施に必要な準備(Gitクライアントの種別に依存しないもの)を記述する.その後,Gitクライアントによって作業内容が異なる開発の流れのうち,正常系(開発者の意図した一連の流れのみで構成された手続き群)のものを紹介する.その後,正常系における一連の手続き終了後の状態を例に,異常系(開発者の当初の意図に無い事象が発生した際に行うべき手続き群)の手続きについて説明する.
演習においては,まず正常系を実施し,その後正常系の開発の流れで作成したリポジトリ及びじゃんけんゲームを対象として異常系の流れを実施すること.
準備
- じゃんけんゲーム演習を実施する主開発者(自分)以外にもう一人共同開発者を決める.全員が主開発者及び共同開発者の両方を体験すること.
- 共同開発者のGithubアカウントを確認する(演習で作成するじゃんけんリポジトリに共同開発者として登録するため).
以下に主開発者として自分のGithubアカウントを,共同開発者としてチーム内の誰かのGithubアカウントを記述すること.なお,チーム全体として全員が主開発者及び共同開発者両方の役割を1度ずつ実施するようにすること.
主開発者 | 共同開発者 | |
---|---|---|
学生番号 | ||
氏名 | ||
Githubアカウント |
開発の流れ(正常系)
以下に正常系を想定した開発の流れを示す.正常系におけるじゃんけんゲームの開発はS0~S3,D1~D8の11の手続きで構成される.書く手続きで行うべき作業はGitクライアントによって異なるため,ここではクライアントに依存しない内容のみ説明する.
この図ではリポジトリは3箇所に存在する.1つがサーバ,すなわちGithub上に存在するリポジトリ(originと呼ばれる)で,後の2つは主開発者と共同開発者(レビュアー)のリポジトリである. 今回の演習では,主開発者は自分のPC(ローカルと呼ぶ)上でじゃんけんゲームのリポジトリの作成や開発を行い,それをサーバ上にPushする.主開発者による開発が完了した後に,共同開発者はサーバからじゃんけんリポジトリをダウンロード(Clone, Fetch)し,動作の確認を行うことになる.
具体的な12の手続きは下記のとおり.以下の手続きのうち,アンダーラインが引かれているものがGitクライアントによるGitリポジトリの操作が必要なものとなっている.
- S0. Gitクライアントの起動
- S1. 主開発者によるリポジトリの作成
- S2. 主開発者がリポジトリをGithubにPushする
- S3. 主開発者によるCollaborator(共同開発者)の追加
- D1. 主開発者によるProcessingファイルの作成
- D2. 主開発者による初期実装
- D3. 主開発者による初期Commit及びPush
- D4. 主開発者によるブランチの作成とPush
- D5.主開発者による「
add_janken_display
」ブランチでの開発及びCommit,Push - D6.主開発者によるPull Requestの作成
- D7.共同開発者によるレビュー(リポジトリのClone)
- D8.共同開発者によるPull RequestのMerge
次節以降では各Gitクライアントについて,S0~D8までの各手続きについて,じゃんけんゲームを題材に詳述する.
開発の流れ(異常系)
ここでは異常系として,複数の開発者が同時に同じ箇所を修正してしまうことを想定して演習を行う.なお,以降の手続きは正常系のD8が終わった後実施するものとする.
- E1. 共同開発者によるブランチの作成とPush
- E2. 共同開発者による
add_game_result_display
ブランチでの開発及びCommit,Push - E3. 共同開発者によるPull Requestの作成
- E4. 主開発者によるブランチの作成とPush
- E5. 主開発者による
add_total_score
ブランチでの開発及びCommit,Push - E6. 主開発者によるPull Requestの作成
- E7. 主開発者による共同開発者のブランチのレビュー(リモートリポジトリからの
add_game_result_display
ブランチのFetch) - E8.主開発者による(共同開発者の作成した)Pull Requestの
master
ブランチへのMerge - E9. 共同開発者によるレビュー(GithubによるConflictの検知)
- E10. 主開発者によるConflictの解消
- E11. 共同開発者による(主開発者が作成し,Conflictを解消した)Pull Requestのレビュー
- E12. 共同開発者による(主開発者の作成した)Pull RequestのmasterブランチへのMerge
この事例では,主開発者がadd_total_score
ブランチを,共同開発者がadd_game_result_display
ブランチを並行して開発する.これらの2つのブランチは,開発する箇所が同じであるため,両者が開発した内容が被ってしまい,結果として意図しない状態が発生する.
E9以降の下線は正常系ではなかった意図しない状態が発生する手続きとその対処に関連する手続きを示す.今回の場合,E9の共同開発者によるレビューにおいて,主開発者が「add_total_score
」ブランチを開発し,Pull Requestを登録している間に,master
ブランチの内容が共同開発者によって更新されていることが発覚した(異常状態1).そのため,レビュアーである共同開発者が,主開発者に対してmaster
ブランチの最新の内容を取り込むようにコメントを残している.
異常状態1の結果,主開発者はE10,E11でmaster
ブランチの最新内容をadd_total_score
ブランチに取り込むことになる.この演習では,add_total_score
ブランチでの修正内容がmaster
の最新内容と同じ所を修正しており,Conflictが発生する(異常状態2).異常状態2を解決するためには,E12においてConflictを解消する手続きを行う必要がある.
以上のような異常系シナリオを想定した演習を正常系シナリオの後で実施する.
Gitクライアントの種類
今回はGithubによって公開されているWindows向けGitクライアント「Github Desktop」を紹介する.使い慣れているクライアントがある場合はそれを利用しても構わないが,じゃんけんゲームを対象とした上記正常系・異常系の開発の流れを具体的にどのように実施すればよいかについてはGithub Desktopをベースに説明を行う.