今回は、モブプロ支援ツールの「mob」について紹介していきたいと思います!
モブプロとは?
モブプログラミング(モブプロ)とは、複数人の開発メンバー(モブ)がコミュニケーションを取りながら実装を進め、実際にコードを書く「タイピスト(ドライバー)」と、「その他のモブ(ナビゲーター)」に分かれて行うソフトウェア開発手法です。また、タイピストは一定時間で交代することが良いとされています。
モブプロのメリットとしては以下のようなものが挙げられます。
- 一人で考え込まず、参加者と知識を共有し合うことで、素早く問題を解決できる
- 複数人で確認し合いながら作業を進めるため、レビューの時間を短縮できる
- 個人でそれぞれ持つ知見を他の参加者に共有でき、全員が共通認識を持って作業することができる。誰か一人がプロジェクトを抜けてしまっても、他の人がカバーすることができる
- コミュニケーションが促進される
反対に、デメリットは以下です。
- 大勢でのモブプロの場合、発言する回数が少なくなり集中が続かない
- 全員で一つのタスクについて作業をするため、リソース効率は落ちる
- 全員の予定を合わせるのが難しい
モブプロの概要やメリット・デメリットを踏まえた上で、モブプロ支援ツールである「mob」について触れていきたいと思います。
mobとは?
リポジトリ → https://github.com/remotemobprogramming/mob
mobとはモブプロをリモートで実施する上で便利に使えるツールです。
実装されているコマンド群を使って、以下のようなことができます!
- タイマーを使った時間管理
- Git経由で次の人へソースコードを渡すことができる(Git Handover)
- モブプロ用にブランチを作成し、そこにcommitしていくので、ブランチをクリーンに保つことができる
なお、mobはGitHub上でOSSになっており、Go言語で実装されているようです。
インストール
基本的には以下のコマンドを使うことでインストールできます。
1 2 |
# works for macOS, linux, and even on windows in git bash curl -sL install.mob.sh | sh |
macOSの場合はHomebrewを使ってもインストールできます。
1 |
brew install remotemobprogramming/brew/mob |
実際に使ってみる
必要なコマンドはmob start
、mob next
、mob done
のみです!
mob start
まず、mob start
でモブプログラミングを開始します。mob-programming-test
というリポジトリのmain
ブランチでモブプロすることを想定します。
1 2 3 4 5 6 7 8 |
mob-programming-test (main)$ mob start git fetch origin --prune git merge FETCH_HEAD --ff-only > starting new session from origin/main git checkout -B mob/main origin/main git push --no-verify --set-upstream origin mob/main > you are on wip branch 'mob/main' (base branch 'main') > It's now 19:12. Happy collaborating! :) |
git branch
コマンドを見てみます。すると、main
ブランチからmob/main
というブランチが新たに作成され、checkout
していることがわかります。モブプロ中はこちらで作業していきます。
1 |
mob-programming-test (mob/main)$ git branch main* mob/main |
ちなみに、mob start
はタイマーを設定することができます。以下のコマンドでは10
と設定しました。現在時刻が19:57なので、20:07までの10分間のタイマーが設定されました。
1 2 3 4 5 6 7 8 |
mob-programming-test (main)$ mob start 10 git fetch origin --prune git merge FETCH_HEAD --ff-only > starting new session from origin/main git checkout -B mob/main origin/main git push --no-verify --set-upstream origin mob/main > you are on wip branch 'mob/main' (base branch 'main') > It's now 19:57. 10 min timer ends at approx. 20:07. Happy collaborating! :) |
10分経過すると、Macの場合はAppleScript (osascript
)を使って通知されるようになっています。さらにsay
コマンドを使って mob next
と読み上げてくれます。
mob next
mob next
は、タイピストが実施した全ての作業をコミットにまとめてリモートブランチにpush
し、次のタイピストへGitを経由してソースコードを渡します。
作業の例としてsample.txt
を生成します。
1 |
mob-programming-test (mob/main)$ echo 'Hello, World' > sample.txt |
その後mob next
でタイピストを交代します。
1 2 3 4 5 6 7 8 |
mob-programming-test (mob/main)$ mob next git add --all git commit --message mob next [ci-skip] [ci skip] [skip ci] lastFile:sample.txt --no-verify sample.txt | 1 + 1 file changed, 1 insertion(+) dd58204b0377d5fc732183df97d4c16a82c51c2b git push --no-verify origin mob/main |
次の人はモブプロが始まったブランチ(この場合はmainブランチ)でmob start
を実行します。mob/main
ブランチにcheckout
し、前のタイピストが実施したところまでのコミットをローカルに反映します。
1 2 3 4 5 6 7 8 |
mob-programming-test (main)$ mob start git fetch origin --prune git merge FETCH_HEAD --ff-only > joining existing session from origin/mob/main git checkout -B mob/main origin/mob/main git branch --set-upstream-to=origin/mob/main mob/main > you are on wip branch 'mob/main' (base branch 'main')dd58204 9 minutes ago <k0825> > It's now 19:34. Happy collaborating! :) |
mob done
何度かmob start
、mob next
を駆使し、モブプロで実装する機能が完成したとします。mob done
コマンドを実行し、派生元のブランチにマージしていきます!
ここではmain
ブランチへマージします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
mob-programming-test (mob/main)$ mob done git fetch origin --prune git add --all git commit --message mob next [ci-skip] [ci skip] [skip ci] lastFile:fizz.txt --no-verify fizz.txt | 1 + 1 file changed, 1 insertion(+) 2df8c40f6badd01c6813d7f44d63bc01758d8f0c git push --no-verify origin mob/main git checkout main git merge origin/main --ff-only git merge --squash --ff mob/main git merge --squash --ff mob/main git branch -D mob/main git push --no-verify origin --delete mob/main fizz.txt | 1 + sample.txt | 1 + 2 files changed, 2 insertions(+)👉 To finish, use git commit |
あとはgit commit
し、リモートブランチへpush
するだけです!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
mob-programming-test (main)$ git commit [main b292073] Squashed commit of the following: 2 files changed, 2 insertions(+) create mode 100644 fizz.txt create mode 100644 sample.txt mob-programming-test (main)$ git push origin HEAD Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 8 threads Compressing objects: 100% (2/2), done. Writing objects: 100% (4/4), 497 bytes | 497.00 KiB/s, done. Total 4 (delta 0), reused 0 (delta 0), pack-reused 0 To <https://github.com/k0825/mob-programming-test.git> 9e30517..b292073 HEAD -> main |
まとめ
- mobコマンドはリモートでモブプロをするときに便利!
- それぞれのコマンドはGit Handoverで実現されているのでソースコードの受け渡しが簡単にできる!
mob start
: モブプロを開始するmob next
: タイピストの交代mob done
: モブプロを終了する
リモートでモブプロを実施するときに使ってみてください!