00:00:00プロジェクトを作るよりもイライラすることを知っていますか?それは、何を作るべきか分からないことです。
00:00:04エンジニアとしての道のりのどこかで、誰もがこの奇妙なフェーズに突き当たります。
00:00:08JavaScriptフレームワークでまたCRUDアプリを作るのは退屈に感じ、
00:00:11かといって、オペレーティングシステムを一から作るのは不可能に感じる。その中間に立ち往生してしまうのです。
00:00:16簡単なものは望んでいない。不可能なことも望んでいない。ただ、意味のあるものを作りたいだけなのです。
00:00:21途中で投げ出さない程度に、自分をレベルアップさせてくれるほどよい挑戦。
00:00:26私自身も経験があります。そこでこの動画では、本当に素晴らしいプロジェクトのアイデアをいくつか紹介します。
00:00:32これらを3つのレベルに分けました。レベル1は「基礎の構築」。レベル2は「ストレージ、
00:00:38データベース、データシステム」。そしてレベル3は「高度なシステムと内部構造」です。
00:00:44これらのプロジェクトを完成させれば、ただコードが上手くなるだけでなく、エンジニアとしての思考が身に付きます。
00:00:49ではレベル1から始めましょう。最初のプロジェクトは、独自のHTTPサーバーを一から作ることです。
00:00:55この動画を見ているなら、HTTPサーバーが何かはおそらくご存知でしょう。
00:01:01ウェブサイトを開いたりAPIを叩いたりするたび、舞台裏ではリクエストとレスポンスが行われています。
00:01:06しかし、これまではExpressのようなフレームワークを通じてしか触れてこなかったはずです。
00:01:12独自のミニHTTPサーバーを作ると、水面下で何が起きているのかを理解せざるを得なくなります。
00:01:19TCPソケットがデータを送受信する方法、リクエストの解析、レスポンスの整形、並行処理などを学べます。
00:01:25こうしたプロジェクトにどう取り組めばいいか、すでに圧倒されている方もご安心ください。
00:01:30動画の最後で解決策をお教えしますので、見逃さないでくださいね。では2つ目のプロジェクトへ行きましょう。
00:01:35「自作シェル」です。皆さんはcd、ls、pwdといったコマンドを何百回と使ってきましたよね。
00:01:40でも、それらのコマンドを実際に処理しているものが何なのか、考えたことはありますか?
00:01:46自分専用のシェルを作ることで、そのシステム自体を創造することになります。
00:01:52ユーザー入力の読み取りと解析、プロセスの実行、システムコールの処理、
00:01:58そしてプロセスやコマンドといったOSレベルの概念を学べます。シェルを一から作ることで、
00:02:04コンピューターを深いレベルで理解できるようになります。さて、ここからが面白くなってきます。
00:02:09レベル2のプロジェクトを見ていきましょう。最初のプロジェクトは「自作Redis」です。
00:02:15Redisはキャッシュやデータベースとして使われるインメモリデータストアで、驚異的な速さを誇ります。
00:02:21しかし、自分で作るまでは、なぜそれが速いのか本当の意味で理解することはできません。
00:02:26Redisクローンを実装することで、インメモリデータ構造の仕組みを学び、基本的なコマンドを実装し、
00:02:32Redisプロトコルを理解し、イベントループを使って複数の接続を効率的に管理する方法を学びます。
00:02:38これらはほんの一部です。開発を始めれば、さらに多くの学びがあるはずです。
00:02:43ソフトウェア工学が単なるCRUDアプリ作り以上のものであることに気づくでしょう。
00:02:48次のプロジェクトは「自作Git」です。毎日使うGitですが、仕組みを本当に知っていますか?
00:02:54簡略化されたバージョン管理システムを自作すると、すべてが腑に落ちます。
00:03:00コミットが内部でどう保存されるかを理解し、ハッシュ化やコンテンツ指向ストレージを実装します。
00:03:05ファイルのスナップショットをコミットツリーに整理するなど、やるべきことは山積みです。
00:03:11一から作る醍醐味は、自分の思い通りに動作をカスタマイズできることです。
00:03:16最後、3つ目のプロジェクトは「自作SQLite」です。SQLiteは、
00:03:22すべてを単一ファイルに保存するサーバーレスのデータベースエンジンです。MySQLなどとは違い、
00:03:29独立したサーバープロセスを持ちません。軽量ながら非常に強力です。自作することで、
00:03:34Bツリーなどの構造を使ったデータ整理術を学べます。クエリを解析して実行し、
00:03:39高速な検索のためのインデックスも実装します。開発者にとってデータベースは避けて通れません。
00:03:45その内部を理解すれば、あなたは一握りのエリートエンジニアの仲間入りです。
00:03:52レベル3では、さらに深く掘り下げます。最初のプロジェクトは「ミニプログラミング言語の作成」です。
00:03:58そう、自分自身の言語です。コードを読み取り、理解し、命令を実行する仕組みを作ります。
00:04:04難しそうに聞こえますが、これほど達成感のあるプロジェクトは他にありません。
00:04:10レキサー、パーサー、抽象構文木(AST)などを実装します。何より重要なのは、
00:04:17インタプリタやコンパイラが実際にどう動くか分かることです。コンピューターとの対話方法が
00:04:22ついに理解できる素晴らしいプロジェクトです。自分の言語に好きな名前をつけて自慢もできますよ。
00:04:27さて、2つ目のプロジェクトは「自作BitTorrentクライアント」です。分散システムの出番です。
00:04:32BitTorrentはP2Pファイル共有システムで、単一サーバーではなく、
00:04:38複数のピアからファイルの断片をダウンロードする仕組みです。
00:04:44これを作るには、ピアの発見、ノード間の接続管理、ファイルの分割、
00:04:50整合性の確保、分散通信の処理などが必要です。決して簡単なプロジェクトではありません。
00:04:57今の説明が半分も分からなかったかもしれませんが、大規模な分散システムの仕組みを学べます。
00:05:02そして最後、レベル3の最終プロジェクトは「自作コーディングアシスタント」です。
00:05:08Claude Codeのようなツールですね。最新のAIツールは魔法のようですが、その正体は
00:05:14大規模言語モデル(LLM)と従来のソフトウェア設計を統合したシステムです。自作することで、
00:05:20LLM APIをアプリに組み込み、プロジェクトファイルを解析・インデックス化してコンテキストを提供し、
00:05:27プロンプトを管理してレスポンスを制御する方法を学びます。AIとエンジニアリングの原則を
00:05:32融合させたシステムを設計するのです。これに取り組めば、人気のAIツールの裏側が理解できます。
00:05:38それだけでなく、AIがこれほど注目されている今、この挑戦的なプロジェクトは
00:05:44あなたを際立たせる大きな武器になるでしょう。正直に言いましょう。これらはどれも困難です。
00:05:50RedisやGit、BitTorrentクライアントを作るのは、週末にふらっと終わるような作業ではありません。
00:05:55行き詰まり、自分を疑うこともあるでしょう。正しく実装できているか不安になることもあるはずです。
00:06:01そして、たいていの人はそこで諦めてしまいます。
00:06:05そんな時のために「CodeCrafters」というプラットフォームがあります。これは
00:06:11RedisやSQLite、DNS、HTTPサーバーなどをステップバイステップで再構築する学習サイトです。
00:06:19答えを教えるのではなく、テストと構造化されたマイルストーンを提供し、
00:06:23すべて自分で実装させます。私もこれらのプロジェクトに取り組む際に使いましたが、
00:06:29この道標があったおかげで、挫折せずに完遂できました。本格的に挑戦したいけれど
00:06:34ガイドが欲しいという方は、概要欄のリンクをチェックしてください。自力でやるにせよ、
00:06:39プラットフォームを使うにせよ、大切なのは「実際に自分で作ること」です。もしあなたが
00:06:45ネットで次なる制作ネタを探し回っていたなら、この記事が道標になれば幸いです。
00:06:51最初は怖く感じるかもしれませんが、水は飛び込んでみるまで温かくなりません。この動画が
00:06:57気に入ったら、高評価とチャンネル登録をお願いします。どのプロジェクトから始めるか教えてくださいね。
00:07:02では、また次回の動画でお会いしましょう。