自己紹介
はじめまして。新卒2年目のみのちです。 1年目はBtoCサービスであるぐるなびの店舗ページと、BtoBサービスである店舗ページ管理ツール「ぐるなび PRO for 飲食店」の開発・運用の担当の店舗チーム、 2年目はレストラン検索の開発・運用の担当の検索チームに所属しています。 私は8月に店舗チームの部署に配属になり、10月からOJT研修を始めました。 11月に課題をやってみて、1月に勉強会を開きました。
この記事の3行まとめ
- 部署配属のあとにOJT研修課題としてISUCONの過去問に挑戦した
- 環境構築が思うようにいかなくて、まず環境構築で使われていたAnsibleの技術に興味を持った
- 社外のAnsibleもくもく会に参加し、社内ではチームで勉強会をした
研修内容を決める(10月)
毎年新卒で配属された人はOJT研修課題を行っており、前回うちの部署では自動販売機の機能実装などを行っていたようです。 今年は運用タスク割当ツールの需要があったのでそれを作るか検討しましたが、運用タスクの割当は人の判断による部分がおおいのでNGとなりました。 他社の新卒はどんなことをやっているのか?を調べるために他社のエンジニアブログを読んだところ、多くの会社でISUCONをやっていることがわかりました。 自分でやりたい!と思って提案しました。
ISUCONとは
ISUCONとは「いい感じにspeed upコンテスト」の略称です。 8時間という制限時間のなかでWebアプリケーションをチューニングして高速化するコンテストです。 チューニングにはサーバーサイドからインフラまで幅広い知識が求められており、 新卒研修にISUCONを用いる企業が多数存在しています。
ISUCONをするにあたって準備したもの
環境
ISUCONは参加しなくてもあとから観戦できるように、ローカル環境が構築できるリポジトリが公開されています。
ボトルネック発見ツール
alp:アクセスログを整形してくれるツール
netdata:パフォーマンスの監視ツール
参加者の感想ブログ
はじめてのチューニングだったので、ブログを先生がわりにして行いました。
進め方
高速化の定石を知るという目標をたてたので、2年分の過去問を用いて高速化を行いました。 案件との兼ね合いもあり、1ヶ月をISUCON研修にあてました。 他社では本番同様、1日(8時間程度)で行うことが多いようです。
ISUCON結果
結論から書きますと、正直スコアはあまりあがらなかったです。 というのも、高速化というのは限られたリソースの中で、ウェブアプリケーションとして何がどうやって動いているのかを把握するという フロントまわりからインフラまわりまで幅広い知識が問われます。 この範囲を短期間で習得することが難しかったです。
他社の研修の記事などを読んでいるとISUCON経験者がいたり、全社的にISUCONを展開していたりと まったくのゼロの状態からでも苦労せず進めることができる環境がすでに整っているという印象を受けました。 一方で、当時は私がいるチームにISUCONのことを知っている人がいなかったため、ISUCONの趣旨とやり方をきちんと把握するところから始めることにしました。
今回はタスクのスケジュールの立て方なども意識したため、決められた期日まで勉強して実装してを行いました。 他の先輩にとっては業務外のことなので誰にどう聞くのかわからず、1人で悩む時間も多くなりがちでした。 Slackで分報チャンネルを作って自分が悩んでいることなどを共有するようになり、今でもうまく活用しています。
分報チャンネルでは、最近読んだ技術記事の共有を3行にまとめて共有しています。 3行にまとめることで見つけた人は興味を持ちやすいし、自分も長い文章をまとめる力がつくのでおすすめですよ。
環境構築がなかなかできなくて悔しかったこと
もともとISUCONはAWSなどのクラウドサーバーを使って開発するのですが、今回はVagrantでローカルに環境をつくりました。 ウェブアプリケーションの最初の難関である環境構築で、私もはまりました。 環境構築のなかでAnsibleを使っていて、それを理解しないと開発に進めないという境地に立たされ、Ansibleを少し勉強しました。 勉強するなかで、自動化というワードに興味を持ったのでRedHat社が主催しているもくもく会に参加しました。 資料は公開されているので、もくもく会が終わったあともゆっくり復習できます。
チームでansible勉強会を開く
ansible勉強会は、下記のねらいで開催しました。
- ansibleを勉強するきっかけをつくる
- YAMLを書いてみる
- 店舗チームで自動化できるものがないか考えてみる
もくもく会の参加は勉強を始めるきっかけに過ぎなかったけれど、資料に恵まれて自分で勉強する環境が整いました。
Ansibleはmacではコマンド1つでインストールできる特徴があるので、気軽に触れる環境をその場で作ってもらいました。
DEMOとして実際リリースで使えそうなお題を考えて持ってきました。
事前にEC2をさくっと立ち上げておいて、
dryrunモードなら/home/minochi/dryrunディレクトリに、
deployモードなら/home/minochi/deployディレクトリに、
upfile.phpをリモートノードにコピー(scpみたいな感覚)してみました。
実際リリースはAnsibleではなくJenkinsのシェルとリリースシェルで書いていますが、
実際の業務で使っている環境構築はAnsibleで書かれているので、この機会にみんなでAnsibleの知識を共有し、チームの資産にしたいですね。
YAMLを書いたことがないというメンバーもいたので、さっと板書してみました。 ぐるなび内ではあまりメジャーでは有りませんが、店舗チームではSwaggerなどでAPIの仕様書を管理していこうという流れになっています。 Swaggerを書くときもYAMLを書くので、勉強のきっかけになったかなと思います。
店舗チームで自動化できるものを10分程度でブレストしてみました。 Ansibleで環境構築できるコンテンツもあるけど、用意されていないコンテンツもあるので、それをAnsibleで書くと 店舗チームに配属されてスムーズに仕事にとりかかれて業務効率化に繋がりそうという話がでました。
勉強会自体はぐだぐだでしたが、1年目なので許してくださいをして楽しく終わることができました。
学び
ログみたり、環境構築したり、自分の苦手なジャンルだったのですが、1ヶ月向き合ったおかげで苦手意識が薄くなりました。 勉強会当日はsli.doなどを使いインタラクティブな勉強会を目指しました。 質問がとんでくると、「あ、そこは私もわかってなかった!」という気づきがあり、自分の勉強にもなりました。 ウェブアプリケーションの高速化という部分に意識を向けることでUXの向上やサービスの質を考えられるようになりました。
まとめ
ISUCONをチームや全社にも展開するなら導入コストを減らす取り組みが必要そうだと感じました。 今回ISUCONはVagrantで環境をたてましたが、全社的にAWSを活用していこうという流れがあり、次はEC2を使ってやってみたいと思います。 毎年、新卒研修としてやることは変わるので、また来年やるかはわからないですが、来年もやりたい後輩がいたら一緒にがんばりたいです。