[IIJ Bootcamp] ハンズオン研修2021 開催報告
2021年12月07日 火曜日
CONTENTS
【IIJ 2021 TECHアドベントカレンダー 12/7(火)の記事です】
はじめに
有志で開催しているビギナー向けハンズオン研修、「IIJ Bootcamp」も今年で3年目になりました。もう「毎年開催している」と言っても過言ではないのではないでしょうか。
今年は昨年に引き続き完全リモートでの開催になると共に、カリキュラムの充実に取り組みました。
今回は開催の様子とカリキュラムの差分、そして来年度に向けた取り組みを紹介したいと思います。
ちなみにハンズオン資料の大部分は こちらのGitHub Pages にオープンソースで公開しています。ぜひ眺めると共に、勉強会などでご活用ください。
昨年の開催報告はこちらから: https://eng-blog.iij.ad.jp/archives/7797
IIJ Bootcampが目指すもの
IIJ Bootcampのことをよく「Webに関する技術を薄く広く触ってもらうことを目的としたハンズオン研修」と紹介していますが、最近は「横方向と縦方向の広がり」を意識することが多いです。
「縦方向の広がり」とはインフラ・データベース・サーバアプリなど、カリキュラムのカテゴリに相当する軸です。
この軸の広がりは、自分の専門分野以外の領域にも手で触れることで、全体感を考えた設計や判断ができるようになって欲しいという狙いがあります。
フルスタックエンジニアという言葉が廃れて久しい昨今ですが、専門外の領域でも多少なりとも触った経験があることで得られる勘所というのは大いにあると思います。
続いて「横方向の広がり」とは、サーバアプリというカテゴリ内でJava・Go・Pythonそれぞれの言語に触れたり、JavaScriptの各フレームワークに触れるような軸になります。
こちらは自分やチームが使っている技術がなぜ登場したのか、なぜそれを選択しているのか、他の選択肢の可能性を常に考えていくための広がりです。
IIJ Bootcampはこの縦と横両方の軸をバランス良く意識したカリキュラム設定が求められます。
一方で可能な限り全てのハンズオンに参加して知識を広げてもらいたいという狙いから、イタズラに講義数を増やすわけにはいきません。
また社内の有志で開催している都合上、各カテゴリの専門家を見つけるのは比較的容易でも、各言語・フレームワークの専門家を見つけるのはどうしても難しいという事情もあります。
そういった要素を意識しつつ、IIJ Bootcampは今後も如何に「縦」と「横」両方の広がりを意識して運営していけるかがキモだと考えています。
開催の様子
今年は昨年に引き続き、完全リモートでの開催となりました。
リモートでハンズオン研修を行うノウハウについては 昨年の記事 や 開発者向けオンライン研修を管理・補助するツール「VisualBootcamp」 で紹介していますので、ぜひご覧ください。
今年は良くも悪くも前年のやり方をほぼそのまま踏襲する形となりました。
完全リモート初年である前回の時点で完成度が高かったとも言えますが、課題もほぼそのまま残っています。
反省会では特に「リモート会議での実施にあたって受講者側の様子が掴めない」という、オンラインあるあるな課題が話題に上がりました。
ハンズオンに詰まって手を上げる受講者のフォローは問題なく行えますが、手を挙げるまでもないけど詰まっている受講者との歩調の合わせ方、あるいは単純に講師側が反応の薄さにやりにくさを感じるなど、普遍的かつ解決の難しい課題が残っています。
解決策はまだ掴めていませんが、気軽にチャットを行える雰囲気作りなど、受講者とのコミュニケーションを意識した仕組みを考えていくつもりです。
カリキュラムの変更内容
カリキュラム全体については 2021年度カリキュラム一覧 をご覧ください。
ここでは前年度と比べてどのように変更したのか、その理由と共に記載します。
総じて今年は主に以下のような変更を行いました。
- Overviewによる座学の充実
- 「認証」ハンズオンの追加
- Prometheusハンズオンの追加など、DevOps方面の充実
- 講義数を抑えるためいくつか削除+再編
それぞれの変更について、その理由や考えなどと一緒に紹介します。
CI/CD + 構成管理
- DevOps Overviewを追加
- 昨今のWebサービス開発とは、インフラ設計のみならずデプロイ方法やモニタリング方法まで総合的に設計し、それをコードにも取り入れる必要があります。
- 例えばPrometheusのexporter機能を盛り込んだり、コンテナとして動作することを前提に設計したりなど
- そういった事情を知ってもらうため、「DevOps」という括りでOverviewを追加
- Jenkinsを開発カテゴリから移動
- PrometheusとGrafanaのハンズオンを追加
- 上記の通り今やWebアプリケーションの実装にはPrometheusによるモニタリングが大前提だと考えているため追加
- サーバ側のアプリケーションを実装する際は、prometheusへのexport機能を前提に実装していく必要があります
データベース
- Overviewを追加
- データベースとはなんなのか、Relatinal Model とはなんなのか、ACID特性の話などをしたくて追加
- いわゆる「データベース」について知ってもらう場を提供するのが、MySQLやMongoDBなど個別のハンズオン内では難しかったため
Webサーバ構築
- Overviewを「HTTPを理解する」というタイトルで 山本 和彦 さんに話してもらった
- よりHTTPというプロトコルについて基本的なところから知ってもらう内容に
- QUICの話 なども盛り込んで講師陣にとっても興味深い内容でした
- ApacheとNginxを1講義に合体
- 前述の講義数を減らしたい目的で合体
- Apacheで静的ファイルの配信をし、そのサーバに対してNginxでproxyするような構成を組むハンズオン
- 触りとしては悪くないが、Apacheの動的ホスティングなどやりたい課題が自主課題になってしまって悩みどころ
サーバアプリ
- Django を FastAPI に変更
- 昨今のトレンドを反映
- APIサーバとして実装されることが多くなるとともにマイクロサービス化の風潮が強く、サーバサイドはよりシンプルなフレームワークが採用される傾向にあると思います
- node.jsのハンズオンを削除
- 最近はnode.jsをサーバ側の言語として採用することは減ってきていると思い、削除。
- IIJのサービス開発ではあまりSSRを行う需要がなく、サーバサイドとしてのnode.jsの採用は少ない(と思う)
- ただ非同期I/Oやイベント駆動なアーキテクチャ、event loopの話などはやっぱりしておいた方がいいと感じた
フロントエンド
- 特に変更なし
- 本当はjQueryで枠を1つ取ってDOMについて触ってもらいたいけれど、枠数の都合でOverviewの中で合わせて実施している
セキュリティ
- 「アプリに認証を導入するハンズオン」を追加
- ハンズオンパートはOpenID Connectの導入を実際に手元でやってみる内容
- Webサービスにとって「認証」と「認可」の話は避けては通れなく、様々なやり方がある中でOpenID Connectを例に体験してもらう
- ハンズオンの講義で「認証」と「認可」の話などをしてしまったので、半分座学になってしまったのが少し反省点
- 来年はOverviewの中でやりたい
来年度に向けて
IIJ Bootcampも3年目となり、「継続」に力を入れていく必要がある段階に来ました。
カリキュラムや実施方法などを毎年改善しつつ、できるだけ負担の少ない形で継続していくための取り組みを考えていきたいと思います。
またコロナが落ち着いてきており、来年度は完全リモートである必要は無くなるかもしれません。
とはいえ場所に縛られないリモートでの開催というメリットを捨てるつもりはなく、オンサイトならではのメリットも得られるハイブリッドな形式を考えていくつもりです。
最後になりますが、手伝ってくれた有志の皆様、本当にありがとうございました。
来年度もよろしくお願いします。