[IIJ] 2019年度ハンズオン研修の取り組み [Bootcamp!]
2019年12月10日 火曜日
CONTENTS
Twitterフォロー&条件付きツイートで「バリーくんぬいぐるみ」を抽選で20名にプレゼント!
応募期間は2019/11/29~2019/12/31まで。詳細はこちらをご覧ください。
今すぐツイートするならこちら→ フォローもお忘れなく!
【IIJ 2019 TECHアドベントカレンダー 12/10(火)の記事です】
プロダクト本部の藤本です。今年度から社内の有志によって始められたIIJ Bootcampというハンズオン研修について紹介します。
ちなみにハンズオン資料の大部分は こちらのGitHub Pages にオープンソースで公開しています。ぜひ眺めると共に、勉強会やイベントなどでご活用ください。
IIJ Bootcampの紹介
IIJでは今年度から、有志によるWebアプリケーション開発者向けハンズオン研修の取り組みを始めました。
これは現場で実際にその技術を使っているエンジニアがハンズオンの講師を務め、手を動かしながらトレンドな技術に幅広く触れようというものです。
カリキュラム
ハンズオンのカリキュラムは以下のように設定しました。GitやDockerといった開発で必ず使う基礎知識から、データベースの扱いやフロントエンドフレームワークまで、幅広く取り揃えています。
カテゴリ | 1限目 | 2限目 | 3限目 | 4限目 | 5限目 |
---|---|---|---|---|---|
フロントエンド | フロント界隈 Overview | jQueryを触ってみよう | vueを触ってみよう | reactを触ってみよう | Angularを触ってみよう |
サーバアプリ | サーバアプリ界隈 Overview | RailsでWebアプリを作る | java:springでWebアプリを作る | node.jsでWebアプリを作る | goでWebアプリを作る |
Webサーバ構築 | Webサーバ界隈 Overview | ApacheでWebサーバを立てよう | NginxでWebサーバーを立てよう | 動的アプリのホスティング | Let’s encryptでSSL対応! (資料未公開) |
データベース | mysqlを触ってみる | MongoDBを触ってみよう | Database: Redis 編 | ||
Docker | Dockerを触ってみる | 開発環境をDocker-composeで構築 (資料未公開) |
kubernetesで爆速アプリ構築 (資料未公開) |
||
開発 | Gitの使い方+GitHubを使った開発手法 (資料未公開) |
jenkinsを触ってみる | 社内droneでCIテスト・デプロイを回す (資料未公開) |
各資料は対象の技術を実際の業務で使っているエンジニアが担当して作成しています。それぞれ担当者の癖がとても出ているので、ぜひ眺めてみてください。
取り組みのきっかけと目指すところ
IIJには毎年技術者だけでも50人以上の新卒メンバーが仲間に加わっています。
当然各自のバックグラウンドや得意分野も様々ですし、IIJが扱う技術領域は多岐に渡るため、技術的な研修は各配属先部署のOJTが中心となります。
OJTが中心になること自体は正しいのですが、いくつか課題も感じていました。
具体的には
- 各部署+各OJTでバラバラに新人研修をやっている状態
- 研修で得られる知識が部署で実績があるものに固定されてしまい、部署としても新人としても発展性がない
- 部署で使わないスキルについては自己学習するしかない
- => せっかく社内には実際に使ってる詳しい人がいるのに
といった課題です。
そこで社内の詳しい人たちを集めて幅広い技術を扱うハンズオン研修を行うことで、以下のような状態を目指せるのではないかと考えました。
- 新人
- ハンズオンによって新しい技術に手を出すきっかけになる
- 社内の詳しい人が分かる
- その時々のトレンドな技術に広く触れてもらうことで、配属先の業務に生かせる
- 触った技術を部署に広められるとベスト
- 部署
- 部署の誰も持っていなかった知識(ノウハウ)を持つ新人が入ってくる
- 業務改善や技術力向上などに繋がる
上記のような考えを社内ブログに書いたところたくさんの方に賛同・協力いただけることになり、今回のIIJ Bootcampとなりました。
カリキュラムの構成
前述のカリキュラムは以下の狙いと思いで構成しています。
横断的なカテゴリ
上のカリキュラムにはWebアプリケーションの開発に必要なカテゴリが一通り揃っています。もちろん1人の技術者が全てのカテゴリを網羅していることはありません。
それでも今時の開発でGitやDockerはほぼ必須ですし、何を開発するにしても継続的インテグレーションによる自動テストは欠かせません。そういった意味で「開発」と「Docker」に含まれるのは、開発を行っていく上で必須となる知識とツールについて触れるハンズオンとなっています。
同様にフロントエンドだけを書く技術者であっても、データベースやWebサーバに関する基礎的な知識があると最適な実装ができたり、そちらの技術者と会話がしやすくなるなど多くのメリットがあります。
Bootcampではこのように知識の幅を広げるきっかけとなれるよう、カテゴリを横断的に設定しました。
選択肢に多く触れる
同じサーバアプリケーションを作るにも、Rails, Go, Node.js, Java, Python, PHP, etc… など様々な選択肢があります。
どのレイヤーでも技術選択をする際には
- 何を作るか
- 開発期間
- チームの開発経験
- サポートの有無
- 将来を見越した投資
などを考慮すると思います。何を選ぶかは場合によりけりですが、重要なのはそれぞれの選択肢が解決している問題(技術的な文脈)・得意なこと・不得意なことを知識として持った上で選択をすることです。
そうなれるようなきっかけとして、Bootcampではまず「Overview」で技術が出現した歴史と得意不得意を網羅的に紹介しています。
その上で各フレームワークやプログラミング言語を実際に触ることで、技術の立ち位置や勘所をより深く掴めるようにしました。
また様々な技術に触れる機会を提供することで、新しい技術を習得する心理的なハードルを下げたいという狙いもあります。
開催記録
IIJ Bootcampは全体研修の終わった7月頃に1日2コマずつ開催しました。
内容は基本的に新人向けで参加も任意ですが、「あの技術触ってみたい」や「普段技術はやってないけど、会話ができるように基礎的な部分を知りたい」など様々な理由で多くの方が参加しました。
開催にあたってはハンズオンカリキュラムの他にも、Developer Roadmaps を中心に世の中に存在する技術の紹介や、技術者としてのキャリアについて語る「イントロダクション」も行っています。
また各ハンズオンでは若手中心にTA(会場を回って質問やトラブルへの対応をするアシスタント)を召喚し、トラブルや質問への対応を行いました。
ただ実際にはじめてみるとなかなか質問が上がらずにハンズオンの進み具合が把握しづらい状況が生まれてしまいました。
そこでハンズオンの課題をクリアするとバリーくんの 物理スタンプ をTAからもらえるようにするなど、新しい工夫をどんどん試していきました。
このスタンプラリーはTAとの会話が促進されたりかなり良かったので、来年はもっと導入していきたいです。
また各ハンズオン後にはアンケートを取り、内容への満足度や一言感想などをもらいました。このアンケートは開催後の反省会で振り返りに使います。
バリーくんとは?
IIJが社内で活用している独自開発の障害対応ツール「Barry」から生まれたキャラクターです。
- 障害対応のマスコットキャラ、バリーくん(その生い立ちや、ついにはLINEスタンプにも!)
- IIJ Engineers blog読者プレゼントキャンペーン(バリーくんぬいぐるみプレゼント。2019/11/29~2019/12/31まで)
環境構築
ハンズオンを行う上で避けては通れないのが環境構築の問題です。ハンズオンは参加者が持ち込んだノートPCで行うため、環境が千差万別でとてもサポートしきれません。
当然VagrantやDockerを使ったVM構築を検討(それでもトラブルは続出)するのですが、その辺りをどう建て付け&案内するかが課題でした。
運営側では当初Vagrantを使った環境構築を中心に資料を作成していました。Node.jsやJava、Dockerなど必要な環境が一通り揃ったVagrantfileを配り、それを立ち上げてもらう方式です。
Dockerを全面的に使わなかったのは、開始前は全くの初心者にDockerは難しいと考えていたためです。
しかし実際にやってみるとトラブル続きでした。
- Vagrant on Windows の環境構築手順や動作確認が不足していた
- 運営側はmac or linux使いが多いが、参加者の環境はほぼWindows
- まずVagrantのインストールがそこそこ難しい
- Vagrantから社内VPNに出ていけない事象が発生
- VPNとVirtualBoxのネットワーク周りとの噛み合わせが悪い?
- Docker on Vagrant on Windows になってくるとトラブルのデバッグが辛い
- ブラウザからDockerで立ち上げたアプリにアクセスできない
1hのハンズオンのうち最初の10分間を環境構築に使ってしまったり、参加者のモチベも下がるためどうにかしないといけません。
そこで参加者を観察していると、思ったよりもDocker for Windowsをスムーズに使えていることに気がつきました。
Docker上でコンソールを握って作業するのにも抵抗がなさそうだったため、あるときからハンズオン環境をDocker imageに固めてpullしてもらう形に方針転換しました。
カリキュラムの前半でがっつりDockerハンズオンをやっていたのも功を奏し、切り替えた後は環境に起因する問題もかなり減らすことができました。
反省点
今回が初開催だったこともあって、多くの反省点がありました。挙げ出したらキリがないですが・・・
- 環境構築難しい問題
- Vagrantを使った環境構築が思ったより辛かった
- Vagrant on Windowsにハマりどころが多い
- 環境構築に当日の時間を使ってしまうと非常に勿体ない
WSLはまだあかん- Vagrant on Windowsよりも Docker for Windowsの方がハマりにくい
- 途中でトラブって最後まで追いつけなくなってしまう人がいる。TAに助けを求められないことも多々
- 講師から各参加者の進み具合が見えない + 遅れている人を把握できない
- 一方すんなり終わった人は暇になる
- TAが足りないコマがあった
- 参加者30人に対して最低限 講師1人 + TA3人 は必要
- ただしトラブルが起きると上の体制では足りない
- 1コマ1時間では足りない
- 講師が最低限やりたいことを詰めると、スムーズに進んでも1hでは足りないケースが多い
- 題材とどこまでやるかにもよる
- トラブルや質問時間を考えると 1.5h – 2h 確保した方が良さそう
- 講師の負荷が高い
- 資料作り
- 資料のレビュワーを増やしたり
- 資料の完成度の低さ
- 分かりにくい
- ターゲットのレベルを把握できてない
- 枠に収まらない量
これらは開催後の反省会で出たほんの一部です。
これらの反省を生かして、来年以降もっとスムーズに実施できるようにしていきたいと思います。
今後
IIJではBootcampを含めて、エンジニアによる様々な知識の共有や技術力向上の場が存在します。
その中の一つの取り組みとしてのBootcampは、現役バリバリで技術を使っているエンジニアが生の知識で幅広くハンズオンを行う取り組みであり、その継続にはカリキュラムや資料の更新が不可欠です。
冒頭にも書いた通り、資料は こちら にオープンソースとして公開しています。これは勉強会などで使っていただきたいのもありますが、資料の完成度を継続して上げていくため社外からも知恵をお借りしたいためです。
資料のミスや追記など、IssueやPull Requestは大歓迎です。
運営面においては前述の反省を生かしてよりスムーズにハンズオンが行えるようにしていくのが目標です。特に次回は
- Dockerによる環境構築の全面採用
- 環境構築用の時間を確保する
- TAの確保
- スタンプラリーシステムの導入
などを中心に改善していければいいなーと考えています。