ホーム/ 自作で学ぶ(Build Your Own)

自作で学ぶ

自作で学ぶ(Build Your Own)

HTTPサーバー・シェル・データベース・git・正規表現エンジン… 使う道具を最小実装で自作し、原理を芯から理解する。

解説記事

自作ハンズオン

何を作るか→最小実装の全体像→段階を追って作る→本物との違い。動く最小実装で、原理を芯から。

3つの要点応用

gitを自作する

gitの中身がただのファイルシステムだと腑に落ちる。blob・tree・commitの3種をハッシュして圧縮保存するだけの最小実装を手を動かして作り、内容アドレス方式や差分の正体まで一気に理解できる。

3つの要点応用

HTTPサーバーを自作する

TCPソケットをlistenして生のHTTPを手でパースする最小サーバーを作れば、リクエスト行・ヘッダ・Content-Length・keep-aliveの正体が腑に落ち、フレームワークが何を肩代わりしているかが一目で分かる。

3つの要点応用

JSONパーサを自作する

既製ライブラリに頼らずJSONパーサを200行強で自作し、字句解析と再帰下降という言語処理の基本骨格を手を動かして理解でき、エラー位置報告や数値・エスケープ処理の勘所まで掴める。

3つの要点応用

コンテナを自作する

Dockerに頼らずnamespaceとchrootとcgroupを直に組み、プロセスを隔離する最小コンテナを数十行で作れる。なぜコンテナがVMより軽いのかを、カーネル機能の実物から腹落ちさせる。

3つの要点応用

シェルを自作する

bashが毎回やっている「入力を読んでコマンドを起動する」正体を、200行のREPLループで自分の手で再現し、fork/exec・パイプ・cdがなぜあの挙動になるのかを腹落ちで理解できる。

3つの要点応用

ロードバランサを自作する

TCP接続をバックエンドへ振り分けるL4ロードバランサを100行規模で自作し、ラウンドロビン・ヘルスチェック・least-connまでを手を動かして理解でき、NginxやHAProxyの中身が読めるようになる。

3つの要点応用

簡易データベースを自作する

追記専用ログと索引だけでkey-value DBを自作。永続化・クラッシュ回復・コンパクション・fsyncが腑に落ち、B木やLSMの狙いまで見通せる。

3つの要点応用

正規表現エンジンを自作する

壊れた正規表現がなぜサーバーを固めるのか、そのReDoSの正体を手を動かして理解できる。ThompsonのNFA構成で入力長に線形なマッチャを自作し、バックトラッキングとの決定的な違いを掴む記事。