今週の技術界隈で注目すべき動きがいくつかありました。散在していたソフトウェア工学の法則を検索可能な形にまとめたプロジェクト、CRDTをベースにしたTypeScript製のグラフデータベース、そして「LLMに型付きのコードを生成させる方法を、私たちは間違ったやり方でやっていたのではないか」という真剣な考察です。

56のソフトウェア工学法則

Laws of Software Engineeringは、ソフトウェア工学の領域で有名な「法則」を56枚のカードにまとめた新しいプロジェクトです。Conway’s LawからHyrum’s Law、Brooks’s LawからHofstadter’s Lawまで、それぞれの法則には簡潔な定義と分類タグが付けられています。

このプロジェクトの価値は新しい発見があるわけではなく、体系化にあります。様々な書籍や論文、ブログに散在していた経験則を、Architecture、Teams、Planning、Quality、Design、Decisions、Scaleなどの観点で分類整理しています。「なぜこの機能は来週には完成しないのか」「最適化のために最適化すべきでない理由は何か」をチームに説明する必要があるエンジニアにとって、これは便利な引用ツールとなるでしょう。

個人的に何度も見返したい法則をいくつか挙げます:

  • Hofstadter’s Law:Hofstadterの法則を考慮したとしても、実際にかかる時間は予想より長くなる
  • Gall’s Law:動作する複雑なシステムは、必ず動作する単純なシステムから進化したものである
  • Price’s Law:参加者の平方根が、50%の仕事をこなす

@codemix/graph:グラフDBをCRDTに組み込む

codemix/graphは興味深い実験的プロジェクトです——型安全でリアルタイム協調をサポートするグラフデータベースで、YjsのCRDTをベースに実装されています。

そのコアデザインは明確です:

  • Zod/Valibot/ArkTypeでスキーマを定義し、型がすべてのクエリとトラバーサルを貫通する
  • GremlinスタイルのグラフトラバーサルAPIをサポート
  • Cypherライクなクエリ構文をサポート(LLM向け)
  • ストレージレイヤーはプラガブルで、Yjsによるオフライン優先・リアルタイム同期を内包

このプロジェクトはまだalpha段階ですが、ブラウザで動作しています。デモページには「自分を関係図に追加する」機能があり、このページを開いているすべてのユーザーが互いに追加したノードや接続を見ることができます——これがCRDTの能力です。

クライアント側で複雑な関係データを管理する必要があるシーン(マインドマップ、フローエディタ、ソーシャルネットワークのプロトタイプなど)では、「状態同期を自前で実装する」よりもずっと信頼できるソリューションです。

型システムとニューラルネットワーク:コード生成の方法を間違えていたのか?

Bruno Gavranovićの新しい記事Types and Neural Networksは、鋭い問いを投げかけます。現在のLLMによるコード生成は、まずToken列をトレーニングし、それから型チェッカーで検証します。このプロセスは事後検証であり、型駆動生成ではありません。

記事はいくつかの重要な問題を考察しています:

  1. 現在のアプローチ(生成後にコンパイルし、エラーがあればリトライ)は、本質的に型チェッカーをフィルターとして使っているだけで、生成を指導しているわけではない
  2. LLMを根本から再設計し、トレーニング段階で型制約を学習させ、型正しいコードを直接生成することは可能なのか?

この問題は、Idris、Lean、Agdaのような依存型言語でのコード生成シーンで特に重要です——これらの言語では型制約自体がプログラムロジックの一部であり、事後修正のコストは極めて高いからです。

記事は完全な答えを出していませんが、注目に値する方向性を示唆しています。もしニューラルネットワークの出力型自体が構造化された型(Tokenリストではなく)であるならば、「生まれながらに型検査ができる」モデルをトレーニングすることは可能なのか?

まとめ

今週のトピックはある意味、同じテーマを巡るものでした。複雑性をどう管理するか。ソフトウェア工学の法則は複雑性の表れ方を教えてくれ、CRDTベースのグラフデータベースは協調状態でのデータ整合性を提供し、型駆動のニューラルネットワークはAI時代のコード生成の正しいアプローチを模索しています。

この記事はgumi.inkに掲載されています