- サーバーサイドエンジニア
- プロダクトマネージャー
- サーバーサイド
- Other occupations (18)
- Development
- Business
2020年4月1日、新卒としてエンジニアとビジネスプランナー含めて15名の新入社員が入社しました。本来であれば、入社式を執り行った後、社内の各プロフェッショナルの講師による対面での研修がスタート……なのですが、今年は新型コロナウイルスの影響で研修内容やスケジュールの予定を大幅に変更。急遽、全ての研修をオンラインで実施することに。講師も人事も「初めての試みで正直不安があった」とのことしたが、オンラインだからこその工夫や取り組みも含めその全容をご紹介します。
※過去の研修内容はこちら
新卒エンジニア研修をのぞいてみた。前編
新卒エンジニア研修をのぞいてみた。後編
※一部オフラインで7月に実施した研修があるため、このタイミングの記事公開となっています。
※本記事はエンジニア向けの研修内容になります
ビジネスプランナー向けはこちら
エンジニアの研修一覧
ミクシィの技術研修は、受講者にとって学びが多いものか、と受講者の気持ちに立って改善できるかの観点から内製で研修を組んでいるケースが多くあります。また、配属部署によって必要な言語・技術が異なるため、共通して必要な技術知見を学んでもらえるように項目を選定・検討しています。
ビジネスプランナーと共通の研修内容も含めると、全部で14の研修項目を実施。エンジニア向けのオリジナル研修は下記。
・Git研修
・DB研修
・TDD研修
・セキュリティ研修
・不具合調査研修
・AI研修
・コンテナとクラウドネイティブ技術について(外部講師)
・GCP研修(外部講師)
これに加えて、最後に「成果発表会」と題したLT大会を一人20分の持ち時間で実施。内定してから入社までに学んできた内容と、入社研修で学んだ内容を各々が発表していくものです。それでは早速研修内容を一つひとつ紹介します。
※「コンテナとクラウドネイティブ技術について」、「GCP研修」は外部の講師のため本記事では割愛いたします。
Git研修
「Git研修」の講師はエンジニアの藤田と松原。実施した内容は、大きく3つ。
・Gitによるチーム開発のいろは
・Gitの内部構造
・GitChallengeに挑戦
こちらの研修内容及び構成にしたのは、事前の新卒エンジニアへのアンケートで、「Gitの内部構造を理解したい」「チームで運用するための機能を知りたい」という要望の声が多かったからだそう。まずは、座学も含めたGitの歴史を簡単に紹介しながら、Gitの特徴である分散型のVCSである点やmergeとcheckoutなどを説明。
次は初歩的なbranch運用であるGit Flowについて解説。masterとdevelopの関係やfeature、hotfixなど体系的に説明しました。ミクシィではリポジトリにGitHubを使用していますが、「できるだけ細かい単位でPRを出すよう心がける」「コミットログは綺麗に」「人間が見るべきポイントにしっかり集中」と当たり前ではあるものの、Pull Requestを出すときの注意点について力説していたのが、印象的でした。
続いて本題であるGitの内部構造についてです。まずは、「commitは親commitとの差分を保存」「resetはcommitをなかったことにするコマンド」といった陥りがちな誤解から説明。ここから具体的な解説が入ります。具体的にCommit ・Tree ・Blob の観点で、コミットオブジェクトのファイルフォーマットを見ながらどのような構造になっているのか、一つひとつ丁寧な説明と解説がありました。
※資料はこちら
前半の講義が終わり、後半はイベント『git challenge』で出題される演習問題を参加者に解いてもらいます。通常は二人一組のペアで参加してもらうのですが、研修では個人戦。過去の参加経験の有無によって多少の解答結果の差があったようですが『git challenge』の解答と解説をもってほぼ一日を通しての『Git研修』は終了しました。
初めて講師を担当した藤田と松原に、今回の研修内容について話を聞いてみたところ、
「例年通り対面での研修を想定していたが、開催前に急遽オンラインで実施することが決まったので、研修の構成を急遽改修。研修で工夫した点は、slackにテキストを打つと、ある動画サービスのように、その打ち込んだテキストメッセージが画面上に流れるような簡易アプリを作って、オンラインでもコミュニケーションが取れるような仕組みをとった。また、受講者に説明中のジェスチャーも見てもらったほうが理解してもらいやすいと考え、PCに資料モニターと自分が映るように設定した。Gitは通常の業務でツールとして利用する頻度が高い。そのため、感覚的な理解もそうだが、基礎や仕組みをしっかり理解してもらうことが、研修の優先事項だった。(藤田)」
「オンラインでの研修開催によって、『git challenge』をこれまでオンライン開催したことがなかった上に、ペアで参加する形式しかやったことがなかったため、未経験者全員へのサポートが必要だった点は正直大変ではあった。(松原)」とのコメント。研修終了後のアンケートには、『Gitへの抵抗がなくなった』『内部構造の完全理解とはいかなかったが、イメージングできるようになり大きな前進につながった』と受講した新卒のメンバーの声もあり、研修で得た学びを感じたようです。
DB研修
DB研修の担当講師は左野。
最初に座学として “Designing Data-Intensive Applications” からデータベースにまつわる話を俯瞰して説明。その次のチュートリアルではBigQueryの公開データセットなどを利用してSQLやPandasを用いたデータ整形などの基本的な操作について説明がありました。そのあとデータエンジニアリング入門編としてApache Sparkやワークフローエンジンの話を行い、最後にWebアプリケーション演習としてISUCONの過去問題を利用してスロークエリなどのボトルネックを特定する技術について触れました。
内容については下記
- Foundations of Data Systems
- Data Model and Query Language
- Storage and Retrieval
- Encoding and Evolution
- Replication
- Batch Processing
例えば、3.Storage and Retrievalについては、OLTP・OLAPなどのストレージエンジンの内部構造に関する知識の必要性や、5. ReplicationでのReplicationの難しさや手法といった、体系的な説明があったおかげで、DBにおける処理や設計思想などの理解につながったかと思います。ちなみに左野のオンライン講義では、1項目ごと説明が終わると、要点を理解してもらうため「リピートアフタミー」とSlackにポストし、受講者とのコミュニケーション及び理解促進に繋げていたのが特徴的でした。
また、「gRPC」「トランザクション」「一貫性」「分散合意」などについて、調べてドキュメントを作る宿題を受講者に課して、さらなる知識の向上を促進していました。
TDD研修
お次はTDD研修、テスト駆動開発です。研修を担当したのは岩名。当日使用した資料ついてコチラに公開されています。前半は言語のパラダイムにおける良い設計の歴史や、コンポーネントの関係性をどう保つか、アーキテクチャなどの座学が中心。
後半は、Ruby on Railsのサンプルアプリケーションに対して、アークテクチャを適用しながら実際にリファクタリングしていく演習です。「PhotobooksController から CreatePhotobookService にロジックを切り出す」「Album , Photobook , PhotobookPage をイニシャライザ引数で外から渡す」などお題が設けられており、テストコードを駆使してリファクタリングする演習を通して、テストコードを書く意味や理解が深まったようであれば、良い研修項目になったはずです。
講師担当の岩名より「ただ漠然と「テストの良い書き方はこれだ」「TDDはこう書く」ということを話す講義にしたくはなく、そもそもなぜテストを書くのか、どうすればテストが書きやすくなるのか、というところから理解して欲しくて今回の講義を構成。配属されてからもリファクタリングする機会は必ずあるので、そういった場面で今回の研修で学んでもらった良い設計についての考え方を軸に、テストを書きながら立ち向かっていってもらいたい」とコメントがありました。
セキュリティ研修
セキュリティ研修はオンラインとオフラインの2Daysに渡って実施。講師はチェと亀山。オンライン研修の前半は機密性・完全性・可用性の確保といった情報セキュリティの基礎から。国内で実際に起きた情報セキュリティに関する事故の事例を解説しながら、「サービスの利用者を守るため、自分たちを守るためにセキュリティの意識は重要」と講師陣が力説。「事故がおきてしまえば、一瞬で企業価値の下落に繋がる可能性もある。とはいえ、対策をどんなに施したとしても、事故が起きることはあるので、迅速かつ冷静に対処していく心構えも必要」とも。続けて、CVE、CVSSなどの脆弱性に関する説明や、SQLインジェクション等の代表的なWebアプリの脆弱性によって想定される被害やその対策方法、セキュアコーディング関連などの座学が続きます。座学の後半はスマートフォンゲームのチート事情についてということで、「モンスターストライク」を事例として説明。巧妙なチートの種類とその対策について、ケーススタディを交えて生々しい話がありました。
オフラインでは、ハンズオンでWebアプリの脆弱性やハッキングについて学んでいきます。攻撃者の観点や手口を学び、攻撃手法を理解することで、開発時にどうすれば脆弱性を発生しにくくするのか、見つかった脆弱性をどう対策するか、実際のプロダクト開発にて意識してもらうことが目的です。演習で用意されたダミーのECサイトで「アカウント情報なしでadminユーザでログイン」「他人のカートを覗き見」「不正購入」など、普段のサービス利用では絶対やってはいけない具体的なハッキング体験を通して、攻撃の手口を体験してもらいました。セキュリティへの意識向上はもちろんのこと、サービスに及ぼす影響についても、身をもって体感できたことだと思います。
「座学ではエンジニアリングが業務で必要なセキュリティの基本知識や、セキュリティ事故の事例紹介やエンジニアとして気を付けるところの共有ができたと思う。ハンズオンでは、OSS等を活用して実施しているが、情報収集からハッキングで情報を抜き取るまでのストーリーを講師が考えて、10個のミッションを設定。順番に1つずつ手を動かしてチャレンジしてもらい、1つずつ答え合わせと解説を交えながらやっていくことで、一般的には低危険度の脆弱性も含めて『何故まずいか』や『攻撃する側の思考』を全員に実感して貰えたと思う。苦労したところは、みんなが積極的に発言できる場の雰囲気づくりが難しかったので、今後の課題として改善していければ。」と、担当したチェと亀山より話がありました。
・・・続きはこちら