エンジニア

ペパボの新卒研修で利用した資料を公開します

エンジニア

2020年はペパボに9人の新卒エンジニアが入社しました。今年も新卒エンジニアを対象に、3ヶ月に及ぶエンジニア研修を開催しました。 本エントリでは、研修の全体像のご紹介や、研修で利用した各資料を公開します。また、領域別に研修担当者より概要の紹介をします。
新卒研修の資料作成を担当している方や、新卒・中途問わず、新しい領域にチャレンジしたいエンジニアの方はぜひご覧ください!

GMO ペパボの研修

GMO インターネットグループでは、毎年 GMO Technology Bootcamp(以下、GTB) と題して、グループ全体のエンジニアとクリエイター(デザイナ)が集まってプロダクトを作っていく上で必要となるベースラインの技術を学ぶ研修を行っています。

GMO ペパボの新卒入社のメンバーは今年から本格的に GTB に参加しました。新卒メンバーが参加するなら、と講義の内容の作成や講師としての参加についても GMO ペパボのエンジニアが従来行ってきた基礎となる技術についてもグループ全体に伝えようと一石二鳥ならぬ一石全鳥を狙いました。まず @hsbt@kurotaky から、幅広い技術を研修で扱う理由と、研修に向き合う心構えとして HRT についての座学を行いました。

GTB と HRT

なお、上記のスライドの前半ははてなの @onk さんのWeb アプリケーションは難しいのインスパイアです。 @onk さんのこのスライドは時間が経った今でも響く素晴らしい内容と思います。是非ご覧ください。 後半はHRTの話をTeam Geek――Googleのギークたちはいかにしてチームを作るのかエンジニアリング組織論への招待~不確実性に向き合う思考と組織のリファクタリングを参考にして、実施しました。Webアプリケーションは1人で作るものではなく、色々なコミュニティの人と作り上げるものなので、そこで必要な考え方やスキルについて解説しました。

続いて、Web アプリケーション、UI デザイン、セキュリティなど幅広い分野にわたって研修を行いました。ペパボのエンジニアやデザイナが担当した研修の一部についてはテックブログで紹介しているので、合わせてご覧ください。

GTB では、GMO インターネットグループに入社した方全体に向けて限られた時間で研修を行うため、1コマが 1 時間であったり、長く取れても1日(=8h)と、技術研修を行うにあたっては講師側が期待するレベルへの到達にどうしても時間が足りません。そこで GMO ペパボでは、GTB で学んだベースラインに加えて、専門領域について深掘りを行う研修の時間を1領域 1-2 週間を用意して研修を実施しました。

以下、実施した専門領域の研修についてご紹介します。

Web アプリケーション研修

GTB では Laravel を用いて Web アプリケーションの開発について学びましたが、GMO ペパボではさらに Ruby on Rails チュートリアル:実例を使って Rails を学ぼう を用いて Rails とテスト駆動による開発について自主学習とメンターによるアウトプットに対するフィードバックの時間を用意しました。この時間の詳細については、自主学習が中心だったため割愛します。

フロントエンド研修

フロントエンド研修の資料を作成した gyugyu (@gyugyu) です。 フロントエンド研修自体は 2019 年時点で 5 日から 10 日程度かけて取り組むドリル形式の研修資料を作成しており、これを解いてメンターがレビューするという形式で行いました。以下で資料の全体を公開しています。

https://github.com/pepabo/frontend-training/

フロントエンド研修実施の背景

前述のとおり、フロントエンド研修の資料自体は 2019 年に作成しており、その際は gyugyu が新卒エンジニアたちのメンターとしてレビューを担当していました。 その後、フロントエンドエンジニアリングに不慣れなデザイナーや基礎の見直しをしたいエンジニアから「ぜひ受けたい」という要望があり、初回実施時につまずきやすかったポイントや細かいミスの修正や補足資料を追加を行い、通年で受けられるものに発展させました。

その資料を元に、 2020 年バージョンではメンターも gyugyu 以外の先輩エンジニアたちへと引き継ぎ、属人性を排除した形でフロントエンド研修ができるかというチャレンジの側面があります。

フロントエンド研修の目的

研修資料にも記載してありますが、この研修の目的としては最先端のフロントエンド技術を追いかけるのではなく、モダンフロントエンドのやや枯れたスタックを使うことでモダンなフロントエンドの大まかな全体像を把握することを目的としています。特性上 Rails Tutorial と違って個別の要素やツールが目立つという問題点はありますが、 2019 年から 2020 年の間に研修資料の大幅な改訂はなく、継続的に目的を果たしているものと思われます。

Webセキュリティ研修

Webセキュリティ研修を担当した @mrtc0 です。
Webセキュリティ入門の研修を約15時間ほどのボリュームで5日間かけて実施しました。この研修の内容とスライドを簡単にご紹介します。

研修の目的とカリキュラム

ペパボではセキュアコーディング研修を毎年実施しており、開発者のセキュリティ意識や技能の向上を図っています。
そのため、新卒エンジニア研修においてもWebアプリケーションを開発、運用していくうえで必要とされるセキュリティ技術や知識を習得することを目的として、Webセキュリティ研修を実施しています。
防御策だけでなく攻撃手法も学ぶことで攻撃者の視点を持ち、普段の開発やコードレビューで生かす素地を持ってもらえたらと思って研修を実施しました。

研修の教材については既に良質な書籍やWebサイトがありますが、研修期間やペパボで利用している技術スタックを考えて教材を一部自作しています。
まずは、Webセキュリティの基礎を学ぶために脆弱性ごとに座学を行いつつ、PortSwigger 社が提供している Web Security Academy を利用し、攻撃を体験しました。
研修後半では Rails で作った脆弱なアプリケーション「BadApp」に対して実際に攻撃を行い、安全なコードに修正するトレーニングを実施しました。この BadApp には座学で取り扱った脆弱性以外にも、キャッシュ制御不備やSSRFなどの脆弱性も含めており、できるだけ現実のアプリケーションにありそうな形で取り入れています。

本研修のカリキュラムは下記の通りです。

1日目

  • Webセキュリティ研修イントロダクション
    • 自己紹介、アイスブレイク
    • 研修の目的
    • ペパボでのセキュリティ対策や事例
    • 研修を行うにあたってセキュリティ倫理
  • Web セキュリティ基礎
    • ブラウザの仕組み
    • HTTP
    • Same Origin Policy
    • Cookie とセッション
    • セッションハイジャック
    • CSRF
    • Fetch Metadata

2日目

  • XSS
  • SQLインジェクション
  • オープンリダイレクト
  • ディレクトリトラバーサル
  • RCE

3日目

  • CORS
  • 安全なアプリケーションの作りかた
    • 認証、認可
    • ログ
    • 秘匿情報の管理
    • セキュアコーディングについて

4,5日目

  • BadApp によるセキュアコーディングトレーシング

上記のカリキュラムで使用したスライドを公開していますので、是非ご覧ください。

Webセキュリティ研修を振り返って

今回は全員リモートでオンライン実施したこともあり、質問しやすい雰囲気を作ったり、進捗度合いを確認するのにさらなる工夫が必要だったかなと感じています。
研修後に行ったアンケートでは「難しかった」という声もありましたが、全員課題を解くことができ、セキュリティに関する知識の底上げができたと思います。
また、セキュリティを自分ごととして捉えるマインドだけでなく、お気に入りの脆弱性を持った方もいました。

今後は教材としては Web アプリケーションだけでなく、インフラやモバイルなども取り入れることを考えています。
また、研修の成果を継続的に測定していくことも課題の一つです。

コンテナとデプロイ研修

コンテナとデプロイの研修を実施した takutaka (@takutaka1220) です。
以下のリポジトリに研修に利用した座学の資料と演習内容を公開しています。

https://github.com/pepabo/training/tree/master/2020

研修を行った背景

近年、ペパボでは、k8s とコンテナによるアプリケーションのオーケストレーションを積極的に取り入れています。
目的として、エコシステムの活用による運用作業の効率化や、セキュリティレベルの向上などが挙げられます。

もちろん全てのサービスがコンテナ化を達成しているわけではなく、
規模が大きいサービスや歴史のあるサービスなどは、OpenStack を利用した VM へのプロビジョニングを実施しています。
VM へのプロビジョニングであっても多くは Puppet や Chef などを利用して構成管理を行っていますが、
急な需要増によるスケールアウトやレガシー OS 対応、セキュリティ対策の導入などに依然として課題感を抱いています。

ペパボでデファクトスタンダードになっていくであろうコンテナ技術に実際に触れることで、
新卒エンジニアの技術への理解度のボトムラインを引き上げると共に、 新卒エンジニアが VM へのプロビジョニングを実施しているプロジェクトへと配属された際に、
メリデメを考慮した上でコンテナ化するという選択肢を自身で持てるように、今回の研修を行ったという背景があります。

構成

大きく分けて、座学パートと演習パートの二部構成で実施しました。
座学パートでは、コンテナが解決した課題から考える抽象化と標準化の重要性について理解を深め、
また、演習パートで利用する技術についての背景などを解説しました。

演習パートでは、実際にコンテナ技術やデプロイの技術に触れてみる演習や、
docker-compose のネットワーキングなど、システムによって抽象化された事象について自分で構築して動作を確かめたりする演習を用意しました。
最終課題として、k8s や CI/CD など、研修で扱わなかった未知の領域にチャレンジして自分で提案したシステムを構築するという、
未知の課題へのアプローチの方法を学ぶ演習を実施しました。

研修の効果

定量的な効果測定は実施できませんでしたが、定性的な効果として、
コンテナ技術や AWS, CI/CD, Kubernetes などのプラットフォームや技術に関して、
「聞いたこともない」という状態から「自分でやってみたことがある」という状態までリフトアップすることができました。
また、多くの難易度の課題を用意したことで、分野未経験の受講者には技術を触ってみたという経験を得てもらうことができ、
すでに下地がある受講者には、抽象化された仕組みを紐解くなどの構成技術の深いところに潜ってもらう経験を得てもらうことができました。
そして、最終課題では、受講者ごとに三者三様あった課題への取り組み方について、
こうすると良くなるよ、というアドバイスを実施することができました。
受講者にとって、ファーストキャリアでスタートダッシュを決められる助けをできたのではないかと思っております。

実施方法

以下に、この研修を自分で、あるいは自社でやってみたい!と思っていただいた方向けに、研修の進め方について記載します。

独力で実施する場合

座学パートの資料を読んで、演習パートの課題を実施します。
演習パートには、課題を設定した背景や目的を記載してあるので、それらを意識しながら課題に取り組みます。
回答例を用意してあるので、わからない課題があったら回答例を写経して理解を深めてください。
総合演習には回答例を用意していません。
自身で達成するゴールを設定し、独力で課題を達成する力を身に着けてください。

メンターを付けて実施する場合

座学パートの資料を読んで、演習パートの課題を実施します。
メンターはメンティーに対して、課題の背景と目的を伝えます。または、質問を受けた際に背景と目的を意識して回答します。
質問を受けた際には、解法を教えるのではなく、メンティー自身の力でゴールへとたどり着けるようにアシストするように回答してください。
手前味噌ですが、個人ブログで回答のやりかたについて解説しているため、興味があればご一読ください。

機械学習研修

機械学習研修はペパボ研究所の研究員(@monochromegane@zaimy@komei)で担当しました。
研修の位置付け、カリキュラム、スケジュールについては、以下のぺバボ研究所のブログエントリで紹介しています。

また、上記エントリでも紹介していますが、座学の資料も公開していますので合わせてご覧ください。

研修の感想など

上記の研修を受けた新卒エンジニアの皆さんが振り返りを書いてくれていますので、ぜひご覧ください。