AWSの裏側を再現する、ゼロ依存基盤構築の挑戦

ある開発者が最近楽しんだサイドプロジェクトとして挙げたのは、AWSの根幹を支えるであろう「サービスとして提供されていない基盤」の再構築です。AWSが200以上のサービスを提供している一方で、その下にはEC2、Lambda、S3、DynamoDB、KMS、IAMといった約10のコアサービスが存在します。

さらにその奥には、他のどのサービスにも依存しない形で実装されているべき基盤サービス群がある、という着想がプロジェクトの出発点となっています。(出典)

このプロジェクトの肝は、「循環参照を避けるために、何も依存しない方法で実装すること」です。ルートキーや証明書の管理、デプロイされたインフラをマッピングする設定ストア、ID管理などを、可能な限り薄い依存関係ツリーで構築する点が非常に興味深いと感じます。

GCPユーザーの私から見ても、Cloud IAMやSecret Managerのさらに根本にあるような仕組みを、自力で構築するというのは、非常に高い技術的探求心と設計能力が求められるのではないでしょうか。また、「大規模展開を全く意識しない」という点も重要で、単一ノードで十分な負荷を処理できるようなシンプルさを追求しているとのことです。

循環参照を避けるために、何も依存しない方法で実装すること。

既存のクラウドサービスを使いこなすのも楽しいですが、その裏側の仕組みを自作してみるというのは、深い学びにつながるはずです。特に、セキュリティの要となる鍵管理やアイデンティティ管理を、最小限の依存で構築するというのは、原理原則を理解する上で非常に価値のある経験だと感じます。

40年前のコードを現代化—オープンソースゲームへの貢献

もう一つの注目すべきサイドプロジェクトは、1980年代から続くレトロなローグライクゲーム「Sil-Q」の現代化です。Sil-Qは「Angband」からフォークされたゲームで、以下のような特徴を持っています。

  • J.R.R.トールキンの世界観への忠実さ
  • 戦術的なゲームプレイと高度な戦闘・ステルスシステム
  • 短く集中的なゲーム体験

この開発者は、長年開発が停滞していたSil-Qプロジェクトに貢献することを決意しました。元々10年間開発を続けていたオリジナルの開発者Quirk氏や、ゲームのタイルセットアーティストMicroChasm氏と協力し、コードベースの現代化、バグ修正、Windows/Mac/Linux向けの実行可能ファイルの生成、そしていくつかのゲームプレイ機能とUXの改善を行いました。(出典)

項目 現代化前(一部) 現代化後
コードベース 40年前のコード、未テスト、腐敗したコード 現代化、バグ修正、テストの追加
対応プラットフォーム Amiga, NeXT, SGI, Dec ALPHA, RISC OSなど Win/Mac/Linux向けダウンロード提供
ゲームプレイ - 新機能、UX改善、新マニュアル、ウェブサイト作成

このプロジェクトで特筆すべきは、Sil-QがAmiga、NeXT、SGI、Dec ALPHA、RISC OSといった、もはや過去の遺物ともいえるプラットフォーム向けの40年近く前のコードを含んでいた点です。ほとんどがテストされておらず、文字通り「腐ったコード」だったと表現されています。

これをクリーンアップし、0だったテストコードをいくつか追加したというのは、途方もない作業だったことでしょう。まるでモリアの坑道に入り込み、踏み慣らされた道から外れてしまったかのようだ、という表現も、その大変さを物語っています。

ほとんどがテストされておらず、文字通り「腐ったコード」だったと表現されています。

オープンソースプロジェクトへの貢献は、単なるコーディングスキルだけでなく、古いコードの読解力、デバッグ能力、そしてコミュニケーション能力を総合的に高める非常に良い機会です。特に、多くのエンジニアが「vibe-coded slop」(雰囲気で書かれた雑なコード)と感じる現代の状況において、長年の歴史を持つプロジェクトに携わることは、一種の心の安らぎにもなったと語られています。

これは、私の普段のTypeScriptやPythonを使った開発とはまた異なる、奥深いエンジニアリングの世界だと感じます。私も個人プロダクトで使っているライブラリにコントリビュートしてみたいという気持ちが湧いてきました。

サイドプロジェクトがもたらす「楽しさ」と「学び」

上記の二つのサイドプロジェクトに共通するのは、開発者が純粋な「楽しさ」と「学び」を追求している点です。AWSの基盤再構築は、現代のクラウド技術の深層を理解しようとする知的な好奇心から生まれています。一方、Sil-Qの現代化は、オープンソースの精神と、歴史あるコードを未来へつなぐという情熱に突き動かされています。

これらのプロジェクトは、必ずしもビジネス的な成功や大規模なユーザーベースを目的としているわけではありません。しかし、その過程で得られる深い技術的知識、問題解決能力、そして共同作業の経験は、エンジニアとしてのキャリアを豊かにする貴重な財産となるでしょう。

例えば、Lobstersでは「今週末は何をする?」という投稿で、プロモーション獲得の成功談や、読書、ワークアウト、料理などの個人の過ごし方が共有されており、開発者コミュニティでは仕事以外の活動も重要視されていることが伺えます。(出典)

サイドプロジェクトを通じて、開発者は純粋な「楽しさ」と「学び」を追求しています。

私自身も、自宅でStable DiffusionやローカルLLMを動かす個人プロジェクトを楽しんでいます。これらのプロジェクトは、普段の業務ではなかなか触れる機会のないGPUプログラミングや低レイヤーでの最適化、そして最新のAI技術の動向を肌で感じるための貴重な場となっています。

為替の変動でGPUやSSDの価格が変動するのをチェックしながら、次の自作PCパーツの選定に思いを馳せるのも、また一つの楽しみです。業務の延長線上ではない、純粋な興味から生まれるプロジェクトこそ、エンジニアとしての幅を広げる鍵となるのではないでしょうか。

読者へのヒント:あなたの「楽しい」を見つけよう

サイドプロジェクトは、必ずしも壮大なものである必要はありません。ほんの小さな好奇心から始まるものかもしれません。重要なのは、「これをやっていて楽しいか?」「何か新しいことを学べるか?」という問いかけです。

  • 既存技術の深掘り: 普段使っているフレームワークやサービスの、さらに一段深いレイヤーを自作してみる。APIの裏側はどうなっているのか?
  • レガシーコードとの対峙: 古いオープンソースプロジェクトに貢献し、現代的な技術を導入してみる。歴史的なコードに触れることで、過去の設計思想から学ぶ。
  • 全く新しい技術への挑戦: AI、ブロックチェーン、Web3など、興味はあるが業務で触れていない分野に個人的に挑戦してみる。

これらの活動は、開発者としてのスキルアップはもちろん、精神的なリフレッシュにもつながるはずです。また、Lobstersの記事ではケーキ作りもサイドプロジェクトとして挙げられており、エンジニアリング以外の趣味もバランス良く楽しむことの重要性を示唆していると感じます。私もバスクケーキのレシピをぜひ試してみたいです。