ITの業界にいると情報発信が盛んなので、みんなの勉強の成果がどんどん飛び込んでくる。それを見るたびに 自分もいつかやりたいな、やらないといけないな と思っていた。
特に本やハンズオンにもよく取り上げられる
- OS自作
- TCP/IPスタックの自作
- 独自言語
- コンパイラ自作
- インタプリタ自作
- RDBMS自作
- エミュレーター
などは頻繁に見るけどそのハードルの高さと基礎知識のなさ、また即効性の無さからつねに後回しにしてきた。(キャリアのスタートが文系大学だったのでCSを学んでいないのも大きい)
なので、これらを見かけるたびに徐々に自分の中に「やらないとなあ」とか「自分ってダメだなあ」という枷を背負ってきた気がする。
実際にやった人に話を聞けば「ほとんど覚えていない」「実務で全く役に立たない」と言われるので(きっと何かの形で役に立っているが意識できないレベルなんだろう)、酸っぱい葡萄のように自分を納得させていた。
転機が訪れる
Vibe Coding と100日チャレンジだ。
プログラミングをしたことがない大学生が ChatGPT を使って100日間、毎日一つアプリを作っていくこの本は自分にとっていいきっかけだった。著者の時の比べ自律的な AI Agent が登場し、大きく補助をしてもらえるこの環境なら色々と学べるかもしれないとそう思った。
ということで AI を利用してコーディングを初めてみた。人力の作業は可能な限り0とし、すべてAIにつくってもらう開発だ。(#LLMでバックエンド100日チャレンジ - Search / X)
初日は散々だった。ToDoアプリすらまともに作れない結果に絶望した。
すでにきつい。自分で作った方が早い...https://t.co/PSOPyqE2NO#LLMでバックエンド100日チャレンジ pic.twitter.com/OlwDxXJWlA
— riddle@MIXI (@riddle_tec) 2025年4月14日
徐々に勘所を掴む
翌日は Go から Next.js にかえプロンプトもめちゃくちゃシンプルにした。その結果驚くほど簡単に成果が出た。これがAI Agentか。
Day2 ECサイト
— riddle@MIXI (@riddle_tec) 2025年4月15日
Go → Next.js にしたら驚くほど上手くできるようになったhttps://t.co/e8DktHSIms
#LLMでバックエンド100日チャレンジ pic.twitter.com/QOzmmW8OPe
だんだん慣れていき自分の知らない概念を理解するためのツールを作ったりもしてみた。
【Day13】Raft の勉強がしたかったので、Raft アルゴリズムをシミュレーションするアプリを作った。アニメーションはサクッと作ってくれたけど、ログをいい感じに出す方の調整に苦労した。やっぱりグラフィカルに見ると一気に理解が進むな〜。
— riddle@MIXI (@riddle_tec) 2025年4月26日
#LLMでバックエンド100日チャレンジ pic.twitter.com/CbEQeuClKy
ついに対決へ
徐々に感覚を掴み Day31 では TCP/IP スタックに挑戦した。1日2時間程度という目標を立てていたが、数日はしっかりかかった。
IP/TCPはすんなりできたが、TLSとHTTP/2に苦しめられた。しかし最後にはなんとか形になり、独自プロトコルで通信に成功した。
【Day32】ユーザー空間で動作する独自の IP/TCP/TLS/ HTTP/1.1 / HTTP/2 プロトコルを実装した。IP・TCPまではすぐにできたけど、TLS1.2の実装(AES/RSAはライブラリ利用) にめちゃくちゃ苦労した。これでTCP/IPスタックの実装の実績を解除した#LLMでバックエンド100日チャレンジ#100DaysOfCode pic.twitter.com/DQZT13KiHN
— riddle@MIXI (@riddle_tec) 2025年5月15日
感無量だった。自分が棚に上げ続けてきたことがはじめて形になった瞬間だった。
おそらく、AIがなければ将来暇になったとしてもきっとTCP/IPを作ることはなかったということを考えると、この経験は大きい。
もちろん作るにあたってなんとなーーーくしか実装を把握していないのでなんら定着はないだろうが「Goでこうやって作るのか」とか「AIで作るとこれぐらいのクオリティのものがこれぐらいの時間でできるのか」と分かったのは大きい。
なにより「胸の支えが1つ取り除けた」というのが最高に大きい。この調子でどんどん心残りを消化したい。
RDBMSを作る
勢いにのって RDBMS を作ることもできた。これも数日かかった。あとから永続化させようとしたら B+tree を保存する処理の実装がめちゃくちゃ大変(そう)だった。
またTransactionの実装は永久にエラーが解決せず放置した。
【Day34】RDBMSとB+Treeシミュレーターを作った。トランザクションはずっとAIがエラーを解決できず断念した。自分の知識不足を痛感。 B+Treeの理解も深めたかったので、RDBMSをつくる横でシミュレーターもつくってもらった。わかりやすい!#LLMでバックエンド100日チャレンジ#100DaysOfCode pic.twitter.com/WRAf51tiAC
— riddle@MIXI (@riddle_tec) 2025年5月17日
しかし RDBMS が作れた。既存のDBの凄さを肌で少しだけ感じつつ、また荷物を一つ下ろすことができた。
とにかく作ってみる
その後は Claude Sonnet 4.0 の強力な後押しのおかげもあり、いままで触ってきた様々なシステムや基礎技術を実装していった。どれも自分の理解としては5%にも満たないとは思うが、すべて 「(AIをつかって)実装したことがある」 という状態になれた。
- 100日チャレンジ day36 (FUSE+SQLiteの独自ファイルシステム)
- 100日チャレンジ day37 (CHIP-8を使ったゲームエミュレータ)
- 100日チャレンジ day38 (CPUビジュアライザー)
- 100日チャレンジ day43 (型推論エンジン)
- 100日チャレンジ day49 (ミニブラウザ)
- 100日チャレンジ day51 (Mokey言語と自作コンパイラ)
- 100日チャレンジ day60(独自OS、スケジューラー、仮想メモリ管理、自作シェル、デーモン管理)
他の人から見たら「自分で実装もせず身にもなっていないこの行為に何の意味があるのか?」と言われることだろうが、自分にとっては何らかの形であったとしてもずっと心残りになっていたこれらのものを 「一度作った」 という事実があることが非常に嬉しい。
心が軽くなるだけでなく「次は何の挑戦をしようか?」と頭をクリアにできたことが何よりも嬉しい。
まとめ
#LLMでバックエンド100日チャレンジはまだ道半ばであるが、最初に思ったよりも大きな効果を自分にもたらしてくれている。
大きく言えば 「世の中でよく使われるIT技術(ソフトウェア分野)の大半の技術を作った」 ので、新しいことが出てきても 「作ってみて軽く理解しよう」 というマインドになれたし、「各技術を専門でやっている人・コミュニティの凄さ」を再確認できた。
もし何か胸につっかえているものがあり、それがAIによって簡単にできるなら一歩踏みだすことをお勧めします。