dsls-bounded-context

5 posts

環境間で `.env` ファイルをコピーすることは設定戦略ではない

インフラストラクチャチームが、環境間の差異を明示的かつ型安全にする文脈単位のDSLを使って、dev、staging、production間の設定を管理する方法。

staging環境は動作している。production環境は動作していない。両者のファイルの差分は400行で、その半数はもう誰も信じていないコメントだ。先月、誰かがstagingにを追加した。productionには誰も追加しなかった。アプリケーションはそれでも起動し、ハードコードされたデフォルト値を使用して、今や機能…

文法制約付きデコーディング: すべてのトークンでLLMに有効な構文を出力させる

LLMはトークンを確率的にサンプリングするため、構文を幻覚させる。文法制約付きデコーディングは各ステップで語彙をフィルタリングし、構文的妥当性を保つトークンのみを出力する。

LLMにJSONオブジェクトの生成を依頼すると、最終的に末尾カンマ、文字列内のエスケープされていない改行、あるいはquoted keyがあるべき場所にbare wordが出現する。これはモデルのバグではない。autoregressive…

英語からテーマへの翻訳は簡単だ。決定論的にすることが本当の課題だ。

英語の平易な記述からデザイントークンを生成できるが、その記述をスキーマ契約とスナップショットテストを伴う限界付きコンテキストDSLとして扱う場合に限る。

はい、英語でテーマを記述し、動作するデザインシステムを得ることはできる。ただし、その英語の記述はプロンプトではない。ソースファイルなのだ。そしてあらゆるソースファイルと同様、コンパイラ、型システム、テストが必要だ。…

Grammarファイルは捨てろ:DSLパーサーを普通のTypeScriptで書く

Bounded Context向けの小さなDSLに、パーサージェネレータは大げさすぎる。パーサーコンビネータなら、アプリケーションと同じ言語で動作するパーサーを、生成コードもビルドステップもなしに構築できる。

Yaccのgrammarファイルを開いて、なぜ言語を作るのに第二の言語を学ぶ必要があるのかと思ったことがあるなら、あなただけではない。パーサージェネレータは強力だが、bounded contextの中で自然に生まれる小さなDSLには、ほとんどの場合大げさすぎる。…

ランタイムの設定エラーは、あなたが許容した本番環境の障害である

スキーマ検証とビルド時チェックを用いて、アプリケーションがトラフィックを処理し始める前に設定ミスを捕捉する方法。

金曜日の夜、3時間経った頃、アプリケーションが を投げた。スタックトレースは設定オブジェクトの深くネストされたプロパティを指している。値は だ。誰かが の変更を本番環境にプッシュし、検証ロジックを更新しなかった。…