tech.kayac.com

4月になり、新人が入ってくる季節になりました。技術部新卒研修担当の fujiwara です。

これまで弊社技術部では特に技術部としての研修というものを行っていなかったのですが、今年は何かやりたいねということで人事部に7日間確保してもらい、主に acidlemon と2人で新卒8人に研修をすることになりました。

研修の資料などは GitHub でプライベートリポジトリを作って作業しており、それをまとめたものを GitHub上で kayac/newbie-training として公開しています。

どのような内容にするかは事前に昨年度の新卒を含めたエンジニア陣で(社内勉強会でビールを飲みながら)話し合い、

  • 現場で実務に追われてしまうと身につきにくい基礎的な内容
  • コードを書ける人は多いけどLinuxサーバの操作は不慣れな人が多いので、そのあたりを底上げする内容

をメインに構成してみました。また、7日目の最終日には社内 ISUCON (Webアプリケーション高速化コンテスト) を行い、昨年度の新卒を含む先輩エンジニアとガチで戦うイベントも用意しました。


詳細はリポジトリの方を見ていただくとして、ざっと内容を説明します。

1日目 環境構築・インストール作業

手元のマシンに今後使うであろうソフトウェアの環境を整備してもらいます。Macの人は homebrew などを利用して直接、Windowsの人は VirtualBox で Linux VM を立ててそこにインストールという形を取りました。

社内で boxenのようなものがあればいいのですが、ないので手動で設定してもらいましたがこれで時間を使うのももったいないので何とかしたいところですね。

また、研修中の日報は各自、リポジトリに適当なフォーマット(markdownの人が多数)でcommitしてもらうようにしました。

社内にIRCチャンネルも用意し、GitHubにコミットがあった場合に IRC hook で通知するようにも設定してあります。

2日目 severspecとChefによるサーバ構築実習

1人に1台ずつKVMの仮想マシンを配布し、そのサーバをセットアップする実習です。 最近はサーバの構成管理に Chef を利用しているため、慣れてもらうのも目的です。

serverspec を利用し、事前に作成したテストを通るようにセットアップを行ってもらいます。サーバ構築もテストする時代ですね。

  • まず serverspecが通る状態へ手動でセットアップ (メモを取る)
  • 通ったらVMをrollbackして初期状態へ戻す
  • 今度はChefでレシピを書いてserverspecを通す
  • それが通ったらもう一度 rollback
  • まっさらな状態から Chef recipe を適用し、テストを通るかどうか確認

3日目 Perl

自社サービスのサーバサイドアプリケーションは Perl がメインのため、最低限 Perl の読み書きができてもらいたいということで Perl に1日あてました。

テキストには、はてなさんが公開されている Perl によるオブジェクト指向プログラミング を利用させていただきました。大変充実したテキストでありがたかったです。

4日目 HTTP・WebApp

Webに携わるエンジニアとして、HTTPはどのようなものなのかを理解することは大変重要です。 ブラウザやWebサーバを単に扱っているだけでは把握しづらい HTTP の生の通信を扱ってもらいます。

  • 各自構築したサーバ上で ngrep を使用してパケットキャプチャ
    • HTTPで何が流れているのかを見る
  • telnet で手で HTTP を喋って HTTP client になる
  • nc -l で手で応答を返す HTTP サーバになる
  • PSGI を生で使った Web Application を作る
  • それを Amon2::Lite に移植してフレームワークの威力を実感する

5日目 RDBMS・DBを使ったWebApp

データストアとしては最近はいわゆる NoSQL も多いとはいえ、基本的には MySQL を利用しているのでそれの基礎の基礎です。

まず mysql コンソールで操作し、次に Perl + DBI で MySQL を使う演習を行いました。 ここまではセキュリティについて基本的には触れていませんでしたが、外部からの入力を不適切に扱うことでSQL injectionという脆弱性に繋がる話もします。

また、昨日作ってもらった PSGI を直接使う WebApp のコードを見ながら講評をし、実は全員が HTML escape を行わないことによる XSS を作ってしまっていたことにも触れました。

その後、最終日の ISUCON に向けての課題アプリケーション(ログイン機能付きnopaste) の雛形に、実装とテストを追加して仕上げてもらう課題に移ります。

6日目 フレームワークを使ったWebApplicationの作成とテスト

前日に引き続き、Amon2 を使用した nopaste アプリの実装とテスト。

明日の ISUCON にむけて、現在本番で動いているサービスはどのようなサーバ構成になっているのかの講義も行いました。参考 : カヤック流ソーシャルアプリの作り方 インフラ編

7日目 社内ISUCON

いよいよ最終日。

新卒8人を2人ずつで4チーム、先輩エンジニアは技術部長から2012新卒まで10人参加したのでこれも2人ずつで5チーム、計9チームを編成し、昨日までに作成した nopaste アプリケーションを題材にどれだけリクエストを捌けるかのベンチマークで勝敗を競う『社内ISUCON』を開催しました。

ちなみに本家 ISUCON についてはこちらのblogなどをご覧ください

……というところで、次のエントリ「2013年の新卒研修と社内ISUCONやりました - (2) ISUCON死闘編」へ続きます!