オフトゥン大好き。

惰眠系プログラマの作業ログで( ˘ω˘ ) スヤァ…

ミクシィChallengeがひとつできるまで - Bug Shooting Challenge #1 を終えて

f:id:nukosuke:20181119182300j:plain

こちらの記事はミクシィグループ Advent Calendar 2018に寄稿しています。
さて、トップバッターのmatsubara0507に続き、2日目を担当します株式会社ミクシィ CRE*1id:nukosukeです。

少し前の話になってしまいますが、11月17日にBug Shooting Challenge (以下、BSC) というイベントを開催いたしました。これはミクシィが毎年数回、エンジニア学生を対象に開催している技術ワークショップ (通称Challengeシリーズ) のひとつです。BSCはサービスの不具合調査をテーマとしたイベントで、今回が記念すべき第1回開催でした。

この記事ではBSCの内容ではなくイベントを開催するまでの経緯や準備に焦点をあてて書きたいと思います。イベント当日の様子を知りたい方は、参加者の学生さんが参加レポートを書いてくださったのでこちらをぜひご覧ください。 (たくさん記事を執筆いただきありがとうございます!)

発端

弊社の人事は、もともとプロダクトの開発に携わっていたエンジニアが所属しているほどエンジニアフレンドリーな文化をもっています。特に新卒エンジニアは採用を通じて人事と仲良くなるためコミュニケーションをとる機会が多く、ChallengeシリーズのルーツともいうべきGit Challengeや、それに続くTDD Challengeもそのような企業風土の中で生まれてきました。

私はGit Challengeの運営に過去2回携わっていましたが、CREチームが'18新卒エンジニアに行った不具合調査研修の好評を受けて人事部からある構想について打診されました。

「この研修を学生向けのイベントとして開催すれば面白いんじゃないかな?」

業界全体にもっとCREを広めたいという想いを以前から抱いていた私にとってこの企画はまたとないチャンスでした。しかし、初めてのイベントをたった1人で形にするのは無理があり、XFLAGスタジオでSRE*2を務める@jtwp470と同スタジオでデータ分析を手がける解析チームのid:sh19910711に協力を仰ぎました。両名はGit Challengeの現役運営メンバーでもあったため半ば強引に引き抜くような形となりましたが、二つ返事でOKしてくれました。さらにプロジェクトマネジメントをCREのグループマネージャーである@otoyo0122に引き受けてもらい、6月中旬にひっそりとBSC運営チームが発足しました。

楽しんでもらうための工夫

研修プログラムを学生向けイベントにしたいといっても、そのまま研修の内容をなぞるだけでは面白みに欠けるのではないかと考えていました。研修というと堅苦しいイメージを持たれてしまう恐れがあったので、ゲーム感覚で参加できるような工夫が必要でした。

また、研修では弊社の人気タイトルのサーバコードに手を加えて教材として使用しましたが、外部の学生さんを招いてのイベントでプロダクトのコードを流用するわけにはいきません。

そこで、茨の道とは知りつつも運営チームで弊社タイトルのクローンを開発することにしました。

この擬似サービスの機能は、

  • ユーザ登録/ログイン
  • ゲーム内通貨の購入
  • ガチャ
  • キャラクター売却

だけのシンプルなものです。

擬似サービスにわざとバグを仕込んでおき、参加者にはあらかじめ用意したログをもとに該当箇所を発見して修正してもらう。

この流れがBSCの大枠として決定しました。

また、イベントの最中はCREになりきって取り組んでもらおうと、ちょっとリアリティのあるシナリオを用意したり、問題文をユーザからの問い合わせメールを模した文面にしたり工夫を凝らしました。

BSCで活きたGit Challengeの運営経験

前述のように、私を含め運営チーム3人にはGit Challengeの運営に携わった経験があったため、ある程度イベントに必要とされるリソースや起こりうる問題を把握していました。BSCではこの経験が活き、必要作業の洗い出しや工数の見積もりをスムーズに行うことができました。

当日のタイムスケジュールはGit Challengeを参考にしており、BSCのために調整を加えていきました。異なるイベント間でも知見が共有され、いわばイベント開催のフレームワークが存在したことが大きな助けとなりました。

本気の環境

学生さんの中には遠方からイベントのために来られる方もいます。貴重な時間を割いてせっかく参加してもらうからには普段触れることのない技術スタックに触れて欲しいと思い、CREチームが実業務で使用しているhadoop + hive環境を使ってログ抽出をしてもらうことにしました。

しかし、そのためにはgrepで検索できるレベルのログでは全く物足りません。そこで、擬似サービスのAPIサーバが完成した後、自動プレイクライアントを作成し、これをEC2上で1週間以上マルチプロセス稼働させることで最終的に12GBのアプリケーションログと8.5GBのリクエストログを生成しました。このクライアントが稼働している傍、私が手動でエンドポイントにリクエストを送り、解答の手がかりになるログを差し込んでいきました。ログ生成の終了予定日に自動プレイクライアントを止め忘れてログファイルがディスクを埋め尽くすという事件が発生したりもしました。

実際のプロダクトではこの比ではないくらい膨大なログがあるのですが、それでもgrepをハングアップさせるには十分なサイズを用意できたため、学生さんにはログ解析における分散処理の必要性を実感してもらえたのではないかと感じています。 (EMRでログ全期間で検索を行うクエリを投げると完了まで1分ほどかかりました)

ログ周りの準備はid:sh19910711がS3バケットに配置したログデータをHadoopファイルシステム(HDFS)用にパーティショニングしたり、そのデータをAWSマネージド分散処理環境であるEMRから参照できるようにしたりして、ログの解析環境を本番さながらに整備してくれました。

当日作業の自動化

当日は打ち合わせや会場の準備などで何かと慌ただしくなることはあらかじめ想定していました。そのため当日行うEMRインスタンスの起動やGitHubリポジトリの作成作業は前日までに自動化しておくことにしました。このあたりの下準備を@jtwp470がTerraformを使って整えてくれたおかげで、当日はプルリクエストをマージするだけで環境を構築することができました。

彼がTerraformと奮闘した記録は後日記事にまとめてくれますので公開されましたらまたこちらで紹介したいと思います。

βテスト: 幻の第0回BSC

一通りの準備が完了すると我々運営チームは完全に油断していましたが、イベント開催日が近づくに連れて「何かやり残した作業はないか」「想定漏れはないか」など誰からとなく不安の声が上がりはじめました。

このような不備を洗い出すためには極力参加者のバックグラウンドに近い人に対してリハーサルを行うことが効果的だと思い、当日チューターとして協力してくれる入社1年目メンバーに対してβテストを行うことにしました。

すると、なんということでしょう・・・

もはや想定通りに進んだことの方が少ないという有様で、具体的には以下のような問題が起こりました。

  • Dockerで用意していたサーバコンテナの起動が失敗する
  • ローカルのHiveコンテナが激重
  • 問題文の説明不足・誤植

これらは不備というより不注意でしかないのですが、フィードバックの中で最も衝撃的だったのは予想以上に問題が難しかったということです。APIサーバやゲームクライアントを設計・開発した当人の「簡単」は全くあてにならず、チュートリアルですら難しすぎるというレベル感でした。

このβテストでは初めてコードに触れる人の立場から意見をもらえたため、その後資料の改善やタイムスケジュールの調整をする上で大いに役立ちました。忙しい中βテストに時間を割いてくれたチューターメンバーには本当に感謝しています。

BSCにかける想い

業務領域の異なる運営メンバー3人がイベントの核となるテーマを模索する中で、共通していたのは「開発者視点だけでなく、ユーザ視点を持ってサービスの運用を考えられるようになってほしい」という想いです。ですから、このイベントを通じて私たちはバグの発見・修正方法だけでなく、その後の対応についても言及しました。

実際に、不具合がおきた時は修正だけで済むケースは少なく、その後に影響範囲を調べ、必要であればユーザに対して補填を行い、原因の説明責任を果たす必要があります。技術イベントだからと単に不具合の修正方法に終始するのではなく「自分だったらどうするだろう」と考えてもらい、マインド面でも何か気づきを得てもらえるように心がけました。

第1回開催を終えて - BSCの今後

まだまだ改善すべきところはたくさんありますが、今回参加してくださった学生さんから楽しかったと言う声が聞けて本当に嬉しい限りです。

BSCは早くも次回開催の話が上がっており、今回見つかった課題や学生さんからのフィードバックをもとにブラッシュアップしていきたいと思います。

Git Challengeの方は第10回を数えるまでの人気イベントとなりました。BSCもこれに続けるよう運営チームともども精進してまいりますので引き続きBug Shooting Challengeをよろしくお願いします。

PR

明日、3日目はcgetcがSpread Sheetを使ったボット開発について何か書いてくれるようです。それでは、引き続きミクシィアドベントカレンダーをお楽しみください!

qiita.com

関連記事

*1:Customer Reliability Engineer: 顧客信頼性エンジニア

*2:Site Reliability Engineer