カレーを作りながらGitHubの使い方を考えた話

発端

  • ちょっと前にgit rebaseの話をする機会があった
  • 僕がカレーを作った

    つまりどういうことか


    カレーを作る際の流れは、GitHubで開発するときの流れのExampleとして機能するのではないかと思った、ただそれだけのこと。

    諸注意


    雰囲気で楽しんでるだけなので野暮な突込みとかしないように

    前提


    curryリポジトリを作成し、以下の2ブランチが存在しているとする

  • master(食卓)
  • develop(キッチン)

    ここから調理開始

  • キッチンでカレールーを作り始める

    キッチン(developブランチ)でカレールー(ブランチ)を作ろう

    git checkout -b curryroux

  • 鍋にオイルを塗り、玉ねぎを炒める

    issue #1 として起票したのち、 オイル、玉ねぎに相当するファイルを追加

    git commit -m 'add oil and onion. close #1'

  • その他の野菜、肉を加え、水を入れ、煮込む

    issue #2 として起票。
    ISSUEをもとにファイルを追加、あるいは修正

    git commit -m 'add carrots, pork, beans and some corns, then add water. close #2'

  • 煮込んだらルーを溶かす

    issue #3 として起票。
    勝手なイメージ的にはテスト書いたり、リファクタリングする

    git commit -m 'add roux and seasoning. close #3'

  • キッチンに皿を用意する

    つまりキッチン(developブランチ)に皿(dishブランチ)を追加

    git checkout develop && git checkout -b dish

  • 皿にご飯を盛る

    issue #4 として起票。
    別ブランチでフィルタークラスとかその辺を準備してるのをイメージするといいかもね

    git commit -m 'add rice to dish. close #4'

  • ご飯を持った皿をキッチンに用意

    ここでキッチン(developブランチ)にご飯をもった皿を置く

    git checkout develop && git merge dish

    もしかしたら、お手伝いさんがいるかもしれない、そういう場合はご飯を入れた皿をキッチンまで運んでもらうお願い(プルリクエスト)を出すかもしれない。
    とにかく最後にはキッチンのしかるべきところに皿は置かれる(マージされる)。

  • 煮込まれたカレーをご飯にかける・・・前に

    リアル世界での料理では、すでにご飯は皿に盛られた上にキッチンのしかるべきところに用意されている。しかしGitの世界では、この段階ではカレーポットで作業している履歴上はご飯のセッティングが存在していないことになっているため、このままキッチンに対してカレーをかけようとしても、もしかしたらシンクに流れて行ってしまうかもしれないし、あるいはご飯ではなくパンにかかってしまうかもしれない。ご飯の上にかけることを確認しよう。

    git checkout curryroux && git rebase develop

    不要かもしれないが、食卓に出す際はカレーの工程など関係ないかもしれない、鍋の中で重要なことはカレールーが作られたという事実だ。やったことを一つにまとめるのもいいかもしれない。ただし、この作業はまとめすぎるとあとで「どうやって作ったの?」と聞かれたときに困るので注意だ。

    git rebase -i HEAD~3
    (こうして、最初の工程(コミット)のメッセージを「カレールーを作った」に変更し、その後の工程を最初の工程にsquashまたはfixupしよう。)


  • カレーをキッチンにセッティングされたご飯にかける

    最後の仕上げである。カレーをかけよう

    git checkout develop && git merge curryroux

    ご飯にニンジンや肉が入っていれば、もしかしたらconflict, つまり「豚がダブってしまった・・・」という状況になるかもしれないし、誰かがルーを見て「ジャガイモがない!」などといういかもしれない、不平不満は適宜吸収しよう。
    ちなみに私はカレーにじゃがいもは入れないほうがおいしいと思う派閥だ。

  • カレーを食卓に運ぶ

    キッチンにあっても誰も食べられない。完成した料理は速やかに食卓に提供しよう。

    git checkout master && git merge develop


    これでこのカレーは食卓におかれる状態になった、CI、あるいは優しいジェンキンスおじさんが家族にデプロイしてくれれば、皆がカレーを食べに集まるだろう。


    終わりに


    僕は結構楽しんで書いた。君がどうかはともかくね。


    お勧め書籍



このブログの人気の投稿

2016年にgoを使ったのでまとめ

採用とは何か

エンジニアの妻になってしまった我が妻には感謝している