新卒研修カリキュラム
非情報学部出身のエンジニア向けに、1年かけて原理から積み上げる研修です。 扱うのはフレームワークの使い方ではなく、なぜこの書き方をするとブラウザに表示されるのかという土台の知識です。
実装をAIエージェントに任せるほど、出力が正しいかを確かめる側に土台が要ります。 コンピュータサイエンスの基礎・ネットワーク・サーバー・仮想化とクラウド・アプリケーション、 そしてセキュリティとAIを、クラウドでもオンプレでも変わらない仕組みとして扱います。
はじめに読む
この研修が何を土台と呼ぶのか、そして1行のHTMLが画面に出るまでに何が起きているのか。順路に入る前に、全体の線を一度端から端まで通します。
実装をエージェントに任せるとき、人は何を確かめる側に回るのか。エージェントの「検証」が観測できる範囲と、生成されたコードで「動く」と「正しい」の差が出る場所を、順路に入る前に押さえます。
<h1>Hello</h1> と書いたファイルを小さなサーバで配り、http://localhost:3000/ を開く。文字列が名前になり、接続になり、バイト列になり、木になり、ピクセルになるまでの継ぎ目を1つずつ追い、深い話は各領域のコースへ送ります。
学習の記録
レッスンの確認問題に答えると、ここに記録が残ります。 「読んだかどうか」ではなく、時間をおいても解けるかどうかを記録します。
全 2066 問(予測・確認問題・理解度チェックの合計)
このカリキュラムの進め方
- 1.読む前に予測します。当てる必要はありません。外した予測ほど記憶に残ります。
- 2.【抽象】原理と【具体】実物を交互に読みます。どちらを読んでいるかはラベルで示します。
- 3.途中に確認問題を挟みます。最後にまとめて解くより、読んだ直後に思い出す方が定着します。
- 4.層の違う具体例を2つ見比べます。1つだけ詳しく学ぶより、2つを比べた方が他の場面に応用が効きます。
- 5.エージェントが出したコードや報告を、人が確かめる場面を置きます。「動いた」と「正しい」の差がどこに出るかを、実物で見ます。
読んだ直後は「分かった」と感じやすいものです。そのため、 このサイトでは「読んだこと」を進捗にせず、時間をおいて解いた問題の正答だけを記録します。
各レッスン末尾の「自分の現場で確かめる」は、Windows / Mac / Linux を切り替えて手順を表示できます。環境によっては確認できない項目もあり、 その場合はその旨を表示します。
領域ごとに積み上げる
下の領域ほど上の領域の語彙で説明されます。週番号の付いたコースは、 1年52週の順路として設計したもので、その順に読むと前の期の語彙だけで次が読めます。
コンピュータサイエンスの基礎
電気のオンとオフから、CPU・メモリ・ストレージ・OSまで。どの層の上に乗っても変わらない「計算する機械」の仕組み。
第1〜13週
電気のオンとオフしか区別できない機械が、なぜ計算でき、なぜプログラムを動かせるのか。2進数から始めて、CPU・メモリ・ストレージ・OSまでを一段ずつ積み上げます。
第13週で「アプリとカーネルの境界」を見ました。今度はその向こう側です。カーネルはどこで動いているのか、頼んでいない割り込みがなぜ入るのか、プロセスはなぜ複製で生まれるのか。そして、同じ値を2人が書くと何が起き、書いたはずのデータがどこにいて、消したファイルがなぜ消えないのか。man-pageとkernel.orgの逐語、そして実機の出力から積み上げます。
なぜこのデータ構造を選ぶのか、なぜ遅いのか、見積もりをどう立てるのか。計算理論としてではなく、実務の判断として扱います。配列と連結リストの違いがキャッシュで決まること、ハッシュの平均O(1)が置いている仮定、木を低くすると読む回数が減る算数、そしてimportの依存解決がグラフの巡回であること。公式文書の計算量保証と実測から積み上げます。
速いアルゴリズムは、問題が持っている構造を1つ使っています。手法の名前を覚える前に、何を前提にしているかを読む。ループ不変式・分割統治・乱択・比較しない整列・ヒープ・動的計画法・貪欲法・Dijkstra・Bellman-Ford・最小全域木・最大フロー・文字列照合・NP 完全を、証明ではなく「前提」と「10行の Python で手で確かめる」で13本。原論文と、実物(CPython・Go・PostgreSQL・RFC・NumPy)の公式文書から積み上げます。『アルゴリズムイントロダクション』(CLRS)を開く前の地図として。
`b = a` は何をコピーするのか。const は何を固定するのか。0.1+0.2 は計算の誤りなのか。文字列の長さは何を数えているのか。例外と戻り値で、エラーの無視はどれだけ目立つのか。GC があればファイルは閉じられるのか。await の前後で何が割り込むのか。同じ1行を Python・JavaScript・Go・Rust・C で書くと、ある言語では止まり、ある言語では黙って別の値になります。違いは文法ではなく、仕様が何を約束し、何を実装に任せたかにあります。各言語の公式仕様と、コンテナで並べて動かした実演から積み上げます。
改善したら数字が動きました。でも、同じページを2つに分けて何も変えずに比べても、数字は動きます。ばらつきは件数の平方根でしか縮まず、差にも差のばらつきがあります。p値は「何も変わっていない世界」でその結果がどれだけ珍しいかであって、効果の大きさでも、仮説が正しい確率でもありません。覗くたびに偶然の勝者が生まれ、最悪だったものは何もしなくても戻ってきます。数学としてではなく「その改善は本当に効いたのか」を判断する道具として、公的な手引き・原論文・大規模な実験基盤の報告と、標準ライブラリだけで手元で回せるシミュレーションから積み上げます。
ネットワーク
信号がフレームになり、パケットが経路を選び、名前がアドレスになる。データが相手に届くまでの因果。
第14〜26週
パケットが宛先に届くまでに、途中の機械は何を見て、何を決めているのか。ルーティング表の1行の読み方から始めて、TCP/IPまでを原理から積み上げます。
GET の意味は HTTP/1.1 でも 2 でも 3 でも同じです。変わったのは運び方だけで、その運び方は、両端が何を共有しているかで決まっています。知らないステータスコードをどう読むか。リダイレクトでなぜ POST が GET に化けるのか。HTTP/2 はなぜ1本の接続で詰まり、HTTP/3 はなぜ UDP に移ったのか。TLS 1.3 はなぜ1往復で済むのか。署名しているのは証明書ではなく何なのか。RFC の逐語と手元の実演から積み上げます。
レコードを1行足すと何が変わり、何が変わらないのか。第25週で名前解決の経路を辿ったあと、今度はその名前を置く側・直す側に立ちます。種別が決めるのは値の読み方だけであること、TTLが予定ではなく上限であること、権威が複数ある理由、偽の応答が通ってしまう理由、そしてDNSSECが何を保証しないか。「変えたのに反映されない」「切り替えたのに繋がらない」の因果を、RFCの逐語から積み上げます。
サーバー
リクエストを受け取って返すまでに、取り次ぎ・振り分け・暗号の終端・保存の各装置が何を見て何を決めているか。
第27〜39週
リクエストがアプリに届くまでに、途中のソフトウェアは何を見て何を決めているのか。取り次ぎ・配り分け・暗号の終端・キャッシュ・検査を、設定ファイルの1行が読める粒度まで降りて扱います。
行に順番はあるのか。索引を足すと答えは変わるのか。COMMIT の前にエラーが出たら何が残るのか。「重複を確かめてから入れる」がなぜ重複を防げないのか。データベースが引き受けるのは、順序も一意性も「全部か無しか」も、宣言された分だけです。『データベースの仕組み』の前に読む入口として、Codd の原論文と PostgreSQL・MySQL の公式文書、そして実機の出力から積み上げます。
消したはずの行がなぜ残り、なぜ掃除が必要になるのか。落ちても壊れない仕組み、同時に触られても平気な仕組み、そして索引が使われない理由を、PostgreSQL と MySQL の公式文書の文言から積み上げます。広く教えられている説明が公式には無い領域でもあります。
2台目を置いた瞬間に何が始まるのか。状態の置き場が問題になり、複製には遅れが出て、相手が落ちたのか遅いだけなのか判定できなくなります。リトライは層が変わると意味が変わり、順序は与えられておらず、決めるには過半数が要る。CAPが「3つから2つ」ではないことも含めて、一次ソースと実測から積み上げます。
その数字は、何を測ったことになっているのか。平均は実在の1回を指さず、使用率は占有率でしかなく、測ること自体に費用がかかります。観測器が現象より粗ければ、起きていることが「無い」ように見える。道具の使い方ではなく、出てきた数字をどう疑うかを、一次ソースと実測から積み上げます。
運用の数字は、すべて誰かが引いた線です。SLA を決めるのは誰か、警報を1本足すと誰の夜が使われるのか、脆弱性の順位は何を根拠に並んでいるのか。AI が実装を担う時代に、決めた代償を引き受ける主体だけは人に残ります。一次ソースが何を言っていて何を言っていないかから積み上げます。
SLI の値は測って出ますが、何を数えるかは決めるものです。同じ 2,000 行のログから、4xx を分母に入れるか外すかで 86% と 97% が出ます。nginx が断った 429 とアプリが断った 429 は状態コードの列では同じ数字で、データが揃っていない事象は 500 にも 200 の縮退応答にもなります。失敗は見た層のログにしか残らず、リトライは試行の数を膨らませ、比を平均すると全体の比から 23 ポイントずれます。SRE Workbook と Art of SLOs の逐語、nginx・Prometheus・PostgreSQL を Docker で動かした生ログから、分母と分子を決める手順を積み上げます。
コードを置くことと、利用者に効かせることは別の操作です。新旧の版は入れ替えの間ずっと同じデータを読み書きし、待っているだけのスキーマ変更が後ろの読み取りを止めます。レプリカは誤った DELETE も複製し、バックアップは戻してみるまで仮説のままです。パスワードを替えても、開いたままの接続は切れません。壊れたときに打てる手は、壊れる前に用意した分しかありません。SRE の公開文書・PostgreSQL の公式文書・NIST の文書と、Docker で手元に立てた実演から積み上げます。
仮想化・クラウド
1台の機械をなぜ分けるのか、コンテナはなぜVMではないのか、借りた機械の物理はどこにあるのか。アプリとDBの下に横たわる層。
借りた機械の正体。1台の機械をなぜ分けるのか、ハイパーバイザは何を捕まえるのか、コンテナはなぜVMではないのか、リージョンとAZの物理はどこにあり、責任の線はどこに引かれるのか。アプリとDBの下に横たわる層を、OSとハードウェアの側から積み上げます。
「望む状態を書けば、あとは道具がそうしてくれる」。半分だけ正しい言い方です。Kubernetes は比べ続け、Terraform は呼ばれたときだけ比べます。apply が返っても動いたとは限りません。状態ファイルは世界の写しで、plan は見積もりです。変えられない属性は作り直しになり、誰かが後から書けば宣言は上書きされます。戻すことさえ、新しい宣言を1つ出すことです。道具の使い方ではなく、宣言と世界のずれがどこで生まれ、誰が埋めるのかを、kubernetes.io と developer.hashicorp.com の逐語と、手元のコンテナで動かす k3s・Terraform の実演から積み上げます。
アプリケーション
書いたコードのどの行がソケットに触り、どの行が文字列を作り、ブラウザはそれをどう画面にするのか。フレームワークが隠している部分。
画面が出るまでに、ブラウザは何をどの順で決めているのか。プロセスの分け方・12段のレンダリング・イベントループ・JITを、公式文書の文言から積み上げます。広く語られている説明の多くが一次ソースに無い領域でもあります。
フレームワークが隠しているもの。書いたコードのどの行がソケットに触り、どの行が文字列を作り、import は何を結び付け、npm run build で何が起きるのか。Webサーバがただのプロセスであるところから、開発サーバと本番の違いまでを積み上げます。
「モジュールを分ける」の実体は何か。境界とは名前が解決される場所のことで、どこに引くかで何が機械的に届かなくなるかが決まります。REST の定義・公開の不可逆性・組織の形が設計に写ること。どれも一次ソースが何を言っていて何を言っていないかから積み上げます。
テスト・履歴・デバッグ・レビュー・CI。名前は別々でも、やっていることは同じ「比較」です。何を基準にして、何と比べているのか。基準を用意するのは人の仕事で、比べる相手を取り違えると、緑のまま壊れます。一次ソースの逐語と、手元で再現した実演から積み上げます。
曖昧な依頼からは、正しい実装が2つ以上作れます。どちらを選ぶかは、書かなければ実装した人か AI が黙って決めます。確かめられる条件にする、条件の外・異常系・入力の端を書く、義務の強さを語で分ける、やらないことと未決定を書き残す。AI への指示も仕様書です。一次ソースの逐語と、手元で再現した実演から積み上げます。
セキュリティとAI
なぜそれが危険なのか、なぜAIはもっともらしく間違えるのか。上の領域の語彙で説明できて初めて分かること。
第40〜52週
なぜそれが危険なのか、そしてAIはなぜもっともらしく間違えるのか。第1〜3期で積み上げた原理を使って、脅威の因果と言語モデルの機構を扱います。52週の終着点です。
Cookie は誰が頼んだかに関係なく付いていきます。ブラウザが止めるのは読むことで、送ることではありません。CSRF・XSS・SameSite・CORS・CSP・セッション・OAuth/OIDC を、ブラウザが何を強制し、何をサーバに任せているかの境目から見直します。攻撃の手順は扱いません。仕様の文言と、手元に立てたサーバの実測から積み上げます。
同じ「Top 10」でも、数えたものが違います。Web 2025 はアプリの割合、API 2023 はチームの合意、LLM 2026 は投票と事故記録、Kubernetes 2025 はデータなし、Proactive Controls は危険ではなく「やること」の一覧。番号を読む前に、何を数えた一覧かを読む。十数本ある OWASP の Top 10 を横断し、それぞれの版・作り方・生死と主要項目の仕組みを、原文の逐語と手元のコンテナで動かす実演から積み上げます。
LLM を呼ぶコードは、呼ぶたびに分布から1つを引いてくる部品を抱えます。温度を0にしても同じ答えは約束されず、スキーマで縛れるのは形までです。評価で1回通っても率は分からず、埋め込みの「近い」は意味の一致ではありません。そしてツールを実行するかどうかは、モデルではなく周りのコードが決めます。確率で答える部品の確かさを、部品の外側のどこに書くのか。ベンダーの公式文書・原論文と、手元で再現できる小さな実験から積み上げます。
AI が書いたコードも文章も、そのまま出荷できる時代です。個人情報保護法・OSS ライセンス・著作権法の本文が何を言っているかを読み、エンジニアが気づいて法務に渡すべき場面を見分けます。法的な判断はしません。