境界が価値を生む: 価格のズレと型の制約が教える、よいシステムの作り方

Ryusei Nakamura

Hatched by Ryusei Nakamura

Jul 28, 2026

1 min read

73%

0

いちばん難しいのは、自由ではなく「境界」を設計すること

買いたい瞬間に買えず、売りたい瞬間に売れない。たった数円、数十円の差で約定を逃し、あとから見れば「あのとき成行にしておけばよかった」「いや、指値にしなければよかった」と悔やむ。取引の世界では、こうした後悔はほとんど日常です。だが、その悔しさの正体は、単なる運の悪さではありません。市場に対して、どの程度の自由を与え、どの程度の制約を課すかという設計の問題です。

一方で、ソフトウェアのルーティングにもよく似た構造があります。URLの一部をただの文字列として受け取るのではなく、あらかじめ定義された Enum の値に一致したときだけ次へ進ませる。つまり、リクエストに自由に見える入口を与えながら、実際には意味のある値だけを通す境界を置く。

この二つは一見まったく別の話です。片や株式注文、片やWebフレームワーク。しかし深く見ると、どちらも同じ問いに答えようとしています。

自由に見える選択肢を、そのまま自由に扱うと失敗する。では、どこに制約を置けば、結果としてより良い意思決定になるのか。

この記事の中心的な主張はシンプルです。よいシステムとは、最適化のために自由を増やすシステムではなく、失敗の仕方を賢く限定するシステムである。取引でもコードでも、価値を生むのは「何でもできること」ではなく、「間違い方を減らすこと」です。


成行と指値、そしてルーティングの共通点は「入口のデザイン」

成行注文は、最速で約定する代わりに、価格を市場に委ねます。指値注文は、価格を守る代わりに、約定そのものを逃すことがあります。ここにはよくある二択が潜んでいます。確実性か、コントロールか。どちらが正しいかではなく、何を守りたいかで選択が変わる。

この構造は、ルーティングの型制約と驚くほど似ています。たとえば、/posts/draft/posts/published のような経路があるとき、それを自由な文字列として受け入れてしまうと、存在しない状態や意図しない状態が平気で入り込みます。逆に Enum で draftpublished しか通さないようにすると、入力の自由度は下がるが、システム全体の意味論は強くなる

ここで重要なのは、どちらも単なる「制限」ではないということです。制限はしばしばネガティブに語られますが、実際には意思決定を前倒しする仕組みです。成行は価格の判断を市場に先送りする。指値は価格の許容範囲をあらかじめ決めておく。Enum バインディングは、受け入れる状態をあらかじめ決めておく。

つまり、入口で決めるべきなのは「自由」ではありません。後で取り返しのつかない曖昧さを、どこで固定するかです。

たとえば、あなたがオンラインショップの管理画面を作っているとします。注文ステータスが文字列のままなら、shippedshipedShipping が混ざっても気づきにくい。ユーザーには単なる入力ミスでも、システムにとっては別の世界です。Enum を使えば、その世界の境界は明確になります。市場でいえば、指値が「ここより悪い価格では売らない」という境界を引くのと同じです。


失敗はゼロにはできない。だから、失敗の質を設計する

多くの人は、よいシステムを「失敗しないシステム」だと考えます。しかし現実には、失敗は避けられません。マーケットは動くし、要求は変わるし、ユーザーは予想外の入力をする。だから問うべきなのは、失敗を消すことではなく、失敗の形を制御することです。

成行注文の失敗は、価格が想定より悪くなることです。指値注文の失敗は、約定しないことです。どちらも失敗ですが、性質が異なる。前者は「確実に成立するが、条件が崩れる」。後者は「条件は守るが、成立しない」。この違いは、実はソフトウェア設計でも本質的です。

たとえば、ルーティングで型を付けない設計は、広い意味で成行に近いです。とにかくリクエストを受け、後段で何とかする。これは柔軟ですが、想定外の値が通ると、より深い層でエラーが起きます。逆に厳格な Enum バインディングは指値に近い。条件に合わないものは入口で止めるので、奥で壊れにくいが、余計な入力は通らない。

この対比から見えてくるのは、失敗をどこで受けるかが品質を決めるという事実です。入口で失敗する設計は、局所的には不便でも、全体としては安全です。出口で失敗する設計は、短期的には通りやすくても、後で高くつく。

この考え方を、私は「失敗の先払い」と呼びたいです。よい設計とは、将来の不整合を今の段階で支払っておくことです。注文なら価格の不確実性を、コードなら意味の不確実性を、入口で明示する。そうすると、後段の処理はずっと単純になります。

優れた境界は、何を通すかを決めるだけでなく、何を後ろに押し込まないかを決める。


本当に強いシステムは、自由度ではなく「意味の密度」が高い

自由度が高いことは、しばしば良いことのように語られます。だが自由度が高いだけのシステムは、実は人間にとってあまり優しくありません。なぜなら、自由度が高いほど、選択の意味が薄まり、間違いのコストが見えにくくなるからです。

ここで重要な概念が意味の密度です。意味の密度とは、入力や状態がどれだけ明確な意図を持っているか、どれだけ曖昧さを排除しているか、ということです。成行注文は意味の密度が低い。価格の具体的条件を捨てて、市場に委ねているからです。指値注文は意味の密度が高い。少なくとも「この価格帯でなければ嫌だ」という意図が明示されている。

Enum バインディングも同じです。文字列を何でも受けるより、draftpublished かをはっきりさせるほうが、状態の意味が濃くなります。型は単なるコンピュータ向けのルールではありません。人間の意図を、機械が誤読しない形に圧縮する仕組みです。

この視点から見ると、設計の優劣は機能の多さでは測れません。むしろ、次の問いで測るべきです。

  1. この入口は、曖昧さをどれだけ減らしているか。
  2. この制約は、後で高くつく不整合をどれだけ防いでいるか。
  3. この自由度は、本当に必要な自由か、それともただの逃げ道か。

たとえば、社内ツールで「状態」を表す項目を自由記述にすると、最初は楽です。しかし数か月後には、pending waiting hold on hold paused が混ざり、集計や通知が壊れます。ここで本当に欲しかったのは柔軟さではなく、状態の意味を固定することだったはずです。

市場でも同じです。値動きに対してなんとなく反応するだけでは、実は情報の密度が低い。だからこそ、VWAP のような基準は重要になります。個々の瞬間の値段に振り回されるのではなく、時間全体の文脈の中で取引の妥当性を考える。短期のノイズではなく、意味のある平均に接続する。これもまた、意味の密度を高める設計です。


では、何を境界にすべきか。三つの実践フレーム

抽象論だけでは役に立たないので、実践に落とします。境界設計を考えるときは、次の三つの問いが有効です。

1. これは「速度」を守るための自由か、「正しさ」を守るための制約か

成行注文を選ぶ理由は、価格よりも約定の確実性や迅速性を優先したいからです。つまり、何を守るかが先にある。ソフトウェアでも同じで、型を緩めるときは「今は変化が激しいから」だけでなく、「ここでは多少の曖昧さを許しても、後段で必ず正規化できる」と言えるときに限定すべきです。

2. 失敗はどこで起こると最も安いか

失敗を後ろに送るほど、修正コストは上がります。指値は約定しないかもしれませんが、少なくとも価格事故は防ぐ。Enum は 404 や 500 の前に無効値を弾く。安い失敗を早く起こすことは、実は最高の保険です。

3. その境界は、将来の変更に耐えられるか

制約は硬すぎると進化を妨げます。Enum を使うにしても、値の追加や移行があるなら、拡張戦略が必要です。注文でも、指値に固執しすぎると市場機会を逃すことがある。つまり、よい境界は絶対的な壁ではなく、意図を守るための可変の柵であるべきです。

この三つを使うと、設計議論がかなりクリアになります。単に「厳しくするか、緩くするか」ではなく、「何をどこで確定させるか」を議論できるからです。

たとえば、API のステータス変更エンドポイントを考えます。status=anything のような設計は一見便利ですが、運用が進むほど壊れやすい。status を Enum にし、遷移可能な状態だけを許可すれば、業務ルールがコードに埋め込まれる。すると、ユーザーは少し窮屈に感じるかもしれませんが、システムは圧倒的に理解しやすくなります。取引で言えば、指値を置くことで、自分の許容できる世界を宣言するようなものです。


Key Takeaways

  • 自由度を増やす前に、どこで曖昧さを固定するかを決める。 入口で意味を確定すると、後段の複雑さが減る。
  • 失敗をなくすのではなく、安い場所で失敗させる。 成行と指値の違いは、失敗の質を選ぶことにある。
  • 型や制約は敵ではなく、意図を圧縮する道具。 Enum のような境界は、入力を狭める代わりに、システムの意味を濃くする。
  • 「柔軟さ」が本当に必要かを疑う。 ただ何でも通す設計は、あとで高くつくことが多い。
  • 境界は壁ではなく、変更に耐える柵として設計する。 今の正しさと将来の拡張性の両方を意識する。

結論: 価値は、自由の最大化ではなく、境界の明確化から生まれる

私たちはつい、よいシステムとは選択肢が多いものだと思いがちです。だが実際には、選択肢が多すぎると、何を守るべきかがぼやけます。市場の注文でも、コードのルーティングでも、本当に強いのは「全部できる」ことではなく、壊れ方が予測できることです。

成行は市場に価格を預ける。指値は自分の条件を守る。Enum は入力の意味を固定する。これらは別々の話ではなく、すべて同じ哲学に属しています。よい設計とは、世界を完全にコントロールしようとすることではなく、コントロール不能なものと、固定すべきものを賢く分けることです。

もし次にあなたが機能追加や設計変更をするときは、こう問いかけてみてください。これは自由を増やしているのか、それとも失敗の仕方を悪くしているのか。そこで答えが見えたとき、初めて本当に意味のある設計が始まります。

Sources

← Back to Library

Hatch New Ideas with Glasp AI 🐣

Glasp AI allows you to hatch new ideas based on your curated content. Let's curate and create with Glasp AI :)

Start Hatching 🐣