Skip to content

v0.1.3

Choose a tag to compare

@tomoemon tomoemon released this 05 Sep 01:11
· 3 commits to main since this release
45b4d7a

flow ツールの変更。図の既定を判断ノード形式にし、条件が出ない箇所を直した。

規約の本文(rule/decision-pattern.md)は変えていない。規約バージョンは v0.1.1 のままなので、本文だけを取り込んでいる場合はこの版で取り込み直す必要はない。

図の既定が判断ノード形式になった

-shape を省いたときの描き方が state から decision に変わる。

go tool decision-pattern flow ./domain/...              # 判断もノードにする(既定)
go tool decision-pattern flow -shape=state ./domain/... # 従来の、状態だけをノードにする図

state は経路の条件を辺のラベルに畳むので、分岐が深いほどラベルが「かつ」で連なって伸びる。同じ判断に複数の経路から入る形も経路ごとに複製されるため、合流として読めない。どちらも形式の性質で、実装では縮まらない。判断をノードにすればラベルは枝の名前 1 つで済み、同じ判断は 1 ノードにまとまる。

これまでの既定 (state)
n0 -- "article.Status == StatusDraft かつ article.Body == #quot;#quot;" --> n2

これからの既定 (decision)
q0 -- "no" --> q1
q1 -- "yes" --> n2

状態と状態の関係だけを俯瞰したいときは -shape=state で従来の図が出る。それぞれの出力そのものは変えていない。

switch を素通りする case の条件が出るようになった

case が 1 つでも脱出しないと、switch を抜けた先の条件を丸ごと捨てていた。本体が空の case、break だけの case、return せずに処理だけする case がこれに当たる。

switch k {
case kindA:
case kindB:
	return B{}
}
return C{}
これまで                          これから
start0 -- "k == kindB" --> n0     start0 -- "k == kindB" --> n0
start0 -- "それ以外"   --> n1     start0 -- "k != kindB" --> n1

抜けた先に着くのは「脱出する case のどれにも当たらなかった」とき。枝が値で排他なら、素通りする case の否定を積まず、脱出する case の否定だけを積めばそれが正確な条件になる。

既定が判断ノード形式になったことで、この修正の効果が大きい。条件が付かない遷移はひし形を通らない裸の線になるので、開始点から無条件の行き先が 2 つ生えているように見えていた。

条件を出さない形もある。連言では表せないためで、internal/flow/README.md の制約に書いた。

  • fallthrough(次の case へ行くので switch の先へは進まない)、panic、抜けない for、goto
  • case の中で一部だけ return する形
  • case 式が定数でないタグ付き switch。実行時に重なりうるので上から順の評価になる
  • タグなし switch と if 連鎖。枝が順序を持つ

Go 1.27 が要る

go.mod の go ディレクティブを 1.27 に上げた。1.24.0 は依存が要求する下限を go mod tidy が書いたもので、パッチまで含むため CI のツールチェインがそのパッチに固定されていた。

規約の本文だけを取り込んでいる場合は関係ない。ツールを go get -tool で入れている場合は Go 1.27 以上が要る。

取り込み方

規約の本文は変わっていないので、ツールを使っている場合だけ上げればよい。

go get -tool github.com/tomoemon/go-decision-pattern/cmd/decision-pattern@v0.1.3

版を固定しない取り込みは main から取る。

curl -o .claude/rules/decision-pattern.md \
  https://raw.githubusercontent.com/tomoemon/go-decision-pattern/main/rule/decision-pattern.md

この版の本文もこのリリースに添付してある(v0.1.1 と同じ内容)。タグ時点の内容を 1 つの URL で取りたい場合に使える。