git challenge #8 2018.02.03 に参加しました

株式会社mixiさんが開催している技術イベント "git challenge"に参加させて頂きました.

alpha.mixi.co.jp

「ブログに書くまでがgit challenge」(mixiのエンジニアさん談)との事だったので,参加した感想とか書いていきたいと思います.

git challengeとは

git challengeは、git/GitHubを使う上で起こり得るトラブルに関する問題群を2人1組で制限時間に解き,獲得ポイントを競う形式のイベントです. CTFや競技プログラミングのような競技形式をイメージして頂ければと思います.*1

2015年11月に第1回,それから年2回のペースで開催され,今回が第6回となります.

参加に至るまで

2016年の夏にmixiさんのインターンに応募(落ちたけど)して以来,gitchallengeの案内のメールが届くようになって,興味があったのでgit多少使えるようになったら応募してみてもいいかなーって思ってたので挑戦したって感じです.

レベル高いイベントだったら怖いなーって尻込みしてたんですけど、多分エントリーした時はお酒入って判断力鈍ってたのでお酒は偉大

あと大きな理由の1つは交通費がある程度支給されるって事でしょうか,つくばと渋谷の往復は地味に交通費かかるので助かりました.TX高いですね

前日

前日に過去問*2をちょっと確認しました.これを見たから当日の問題を解くのが楽になった訳ではありませんが,問題の雰囲気はだいぶ掴めるのでこれから参加する方は見ておくと良いと思います.

ちなみに前日の行動に関する一番の後悔は「夜に脂っこいもの食べた上に卒論関係のレポートに追われて睡眠時間を削った事」です,おかげで当日の体調が結構厳しかった記憶があります

当日

当日会場で受付を済ませたのち指定された座席に移動し,そこでチームの相方と対面しました.この手の競技イベントは初めてだった上に結構なコミュ障なのでマトモにコミュニケーション取れるか心配でしたが,相方が穏やかな大変話しやすい方だったので感謝です.

その後,チュートリアルと昼食の後,競技開始となりました.

節分の日だったので昼食では恵方巻きを頂きました.美味しかったです.

f:id:inside-hakumai:20180209022112j:plain

肝心の競技ですが,問題の内容については口外を控えるように,との事だったので詳しいことは述べられませんが,問題の難易度が複数設定されておりgitの初歩的な操作に関する問題からgitの構造に関する深い理解を求められるものまで非常に多様でした. 自分のチームは相方が簡単な難易度の問題から,自分がちょっと難しい難易度の問題を並列で消化していく方針で取り組みました.問題数が存外に多かったので,問題の割り振りの方法はともかく多分どのチームも並列で消化していたのではないかなと思います.

問題への解答はremoteのリポジトリに解答となるブランチをpushすることで行いますが,pushするとremote側で即時採点が行われ,結果が会場正面のスコアボードに反映されるのが面白いというか楽しかったです.競技プログラミング系統のイベントってどれもこんな感じで進行するんでしょうか.

3時間半の競技の後,問題の解説と順位発表が行われました.

1位が同率で3チームという異例の事態でしたが,ありがたいことにその3チーム中のひとつが自分のチームでした. 相方が分からなかった問題を自分が解いたり,逆に自分が分からず後回しにしてた問題を相方が解いてくれたり,うまく連携できたのが良かったのかなって思います.今回は本当に相方に恵まれたと思いました.ありがとう.

4位以下も1,2問差で複数のチームが続くなど,だいぶ接戦だったという印象です. 競技中Webで調べる等の行為は認められていたので,一定の難易度まではなんだかんだ解ける,というのが接戦になった要因だったのではないでしょうか,逆にそれ以上の難易度は調べる云々の前にどうやって調べれば良いのか分からないようなgitへの理解を求められるものだったので,それで上位も一歩先に出るようなチームがなかなか出てこなったんじゃないかなって思います.

mixiの方も3チーム同率1位は想定していなかったようで,1位の副賞が2人分しか用意されておらずその場でじゃんけんによる争奪戦に.この日は相当ツキが回ってきていたのか,こちらも勝ててしまったのでありがたく副賞を頂戴しました. オクトキャットのフィギュアです.名前始めて知った.

f:id:inside-hakumai:20180209030152j:plain

ところでこれひげの部分どうやって取り付けるんでしょうか,それっぽい穴はあるんですがどうにも小さい.接着剤とかで無理矢理固定するのかな. ご存知の方いましたら教えて頂けると幸いです.

f:id:inside-hakumai:20180209030252j:plain

競技終了後

競技終了後はmixiの方々との懇親会がありました. 本場のエンジニアさんの開発に関する話を聞けたりしてとても楽しかったです.ただやっぱり当日の体調がお察しだったので,ほろよい1缶で嫌な酔い方してあんまり料理を戴けなかったのが後悔ですね.体調管理気をつけましょう.

f:id:inside-hakumai:20180209030929j:plain

所感

GUIクライアントによる可視化が便利

やっぱりgitのGUIクライアントが使えると便利ですね,コミット間の依存関係やブランチが切られた位置などが見やすく可視化されるのでそれぞれの関係を把握する上でだいぶ助かりましたし,競技中の時間の削減になりました.

と言ってもCUIを全く使ってないかと言われるとそうではなくgit remote addgit pushgit cloneなどはコマンド叩いた方が早かったのでCUIを使用していましたし,問題の一部はCUIのコマンドに関する知見を前提とするようなものでした.

因みに競技中のルール上GUIクライアント使って良いかという話ですが,そこは特に制限されていないようです(競技開始前の説明の中でちょっとだけGUIの使用に言及されてましたし,過去の記事*3では過去の優勝者がSourceTreeを使っていた旨の記述があります)し,この競技の趣旨はgitを扱う上での問題解決に関する知見を得ることだと認識しているので,GUIクライアントを使ってもその趣旨から逸脱することにはならないでしょう,多分

ちなみに自分が使ってるgitクライアントはGitKraken*4です.

gitに関わる様々なケースの問題を体験できた

単純なpush時のrejectやコンフリクト解決の場面から,もっと複雑なケースまで様々な問題を体験できました.

gitの内部構造に関する知見を得られた

gitを普通に使っているだけでは触れる機会の少ないgit内部の構造の話に触れることができました.と言ってもちょっと話を聞けただけで体系的に理解できた訳ではありませんが.

ちなみにmixiのエンジニアさんが紹介していたgitの内部構造に関する解説のページはこちら*5です.

参加の敷居が高くない

出題された問題は,一番難しいものではそれこそgitの内部構造に関する理解を求められるものでしたが,簡単なものではgitの初歩的な使い方に関するものもあり,問題の難易度が非常に幅広いという印象を受けました.さらに競技中は資料の参照なりGoogle先生に頼るなりも認められていたので,競技の敷居がある程度低く設定されていて参加しやすいと思いました.

と言っても競技中に調べるにしても「躓いた問題に対して,どういう検索ワードで調べれば解決に繋がる情報が出てきそうか」が分からないとどうにもならないので,その程度の理解は求められると思いますが.

おわりに

そもそも技術系のイベントに参加するの自体始めてだったので一時はどうなることかと思いましたが,参加してみると得るものの大きいイベントだったと感じています.

mixiの方々には当日大変お世話になりました.大変有意義なイベントでした.ありがとうございました.

ちなみに競技中一番「知っててよかった」って思ったコマンドはgit cherry-pickでした.ありがとうcherry-pick.

参考文献(2018.02.08 閲覧)

http://alpha.mixi.co.jp/entry/2015/11/24/083300 https://matome.naver.jp/odai/2145498307629534701 https://mixi-recruit.snar.jp/jobboard/detail.aspx?id=QSmdeVlbclE http://alpha.mixi.co.jp/entry/2017/08/03/113000 http://alpha.mixi.co.jp/entry/2017/07/27/113000