Skip to content

v0.1.2

Choose a tag to compare

@tomoemon tomoemon released this 04 Sep 16:08
· 8 commits to main since this release
1de4830

flow ツールの修正。図に出ていなかった分岐条件を出るようにし、判断をノードにする出力形式を足した。

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

遷移ラベルの条件が正確になった

条件が乗らない箇所が 4 つあり、排他な遷移が並列に見えていた。

変更前
n0 -- "article.Status != StatusDraft" --> n1
n0 -- "article.Body == #quot;#quot;" --> n2      ← 下書きであることが乗っていない
n0 -- "それ以外" --> n3

変更後
n0 -- "article.Status != StatusDraft" --> n1
n0 -- "article.Status == StatusDraft かつ article.Body == #quot;#quot;" --> n2
n0 -- "article.Status == StatusDraft かつ article.Body != #quot;#quot;" --> n3

乗っていなかったのは次の 4 つ。いずれも「書き方を変えると同じ判断が違う図になる」形で出ていた。

  • early return のあとに続く文(else を書いた場合は元から乗っていた)
  • タグなし switch の先行 case の否定
  • default を持たない switch を抜けた先
  • 型 switch を抜けた先

あわせて、脱出判定を Go 仕様の terminating statement に寄せた。break を脱出と数えていたため、case の中で break した経路が図から消えていた。条件の否定も AST を見て作るようにした。文字列操作では !(x == 1) || (y == 2) の括弧を誤って剥がし、構文として壊れたラベルが出ていた。

判断をノードにする -shape=decision

条件を正確にした結果、ラベルが「かつ」で連なって図が横に広がる。これは状態だけをノードにする形式の性質で、経路上の条件を辺に詰め込む以上避けられない。

分岐そのものをひし形のノードにする形式を足した。辺のラベルは枝の名前だけになり、同じ分岐は 1 ノードにまとまる。サンプルで幅 1975px が 911px になった。

go tool decision-pattern flow -shape=decision ./domain/...

ヘルパー関数の中の判断に複数の経路から入る形が、合流として描ける。-shape=state(既定)の出力は変わらない。

詳細は #3 に書いた。

取り込み方

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

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

版を固定しない取り込みは 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 で取りたい場合に使える。