0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

#6|「会社ごとにちょっと変えたい」で、設定駆動とバリデーションが殴り合いを始めた 〜柔軟にしたら、「自由に設定させすぎない仕組み」の方が難しくなった〜

0
Last updated at Posted at 2026-09-04

34014D4B-2D20-4DDB-B3E4-6C360AC73334.png

物件マスタまで作ると、今度は、会社ごとの差が目立つようになりました。

私「同じものでもさ。」

A「うん。」

私「『物件』って呼ぶ会社もあれば、『現場』って呼ぶ会社もあるじゃん。」

A「あるね。」

私「予約の時間単位だって違う。」

A「15分とか30分とか。」私「休日の扱いも違うかもしれない。」

A「……だんだん名前の話じゃなくなってきたな(笑)」

最初は、単純に、表示する名前を変えられればいいと思いました。

物件。現場。

会社によって、普段使っている言葉に合わせる。

私「そのたびにコード直す必要ないじゃん。」

A「設定で変える?」

私「そう。だから、会社ごとに表示する言葉を変えられる文言変更モードを作った。」

A「『案件番号』を『工事番号』にするとか?」

私「そう。利用者が普段使ってる言葉に合わせる。」

(文言変更モード)
IMG_2339.jpeg

(黄色部分→変更可能)※全ページ対応
IMG_2336.jpeg

(案件番号→工事番号へ変更)
IMG_2337.jpeg

(変更反映)
IMG_2338.jpeg

A「それなら分かりやすい。」

私「この頃は、まだそう思ってた(笑)」

B「表示する文言を設定として持たせて、コードを書き換えずに切り替える。Configuration-Driven Design、設定駆動ですね。違いをコードへ直接固定せず、設定値によって表示や振る舞いを変える考え方です。」

私「当時は『毎回コード直すの面倒』だけ。」

A「原動力がずっと同じ(笑)」

でも、会社ごとに違うものは、名前だけではありませんでした。

カテゴリ。表示順。アイコン。予約時間単位。休日を含めるか。どの機能を表示するか。

(設定種別)
IMG_2344.jpeg

IMG_2345.jpeg

IMG_2346.jpeg

私「こういうのも会社によって違うじゃん。」

A「ねえ。」

私「何?」

A「『設定にすればいい』って、実装側からすると結構怖い言葉だよ(笑)」

私「いいじゃん、実装するのも自分なんだから。」

A「そういうことじゃない。」

そして、設定できるようにしたら、当然、何でも入れていいわけではありません。

例えば、予約の時間単位。

10分。15分。30分。60分。

ここまでは分かる。

では、0分。-30分。文字。存在しない選択肢。

A「止めるよね?」

私「止める。」

B「そこでバリデーションです。型・範囲・許容値を確認します。」

私「設定で壊れたら意味ないじゃん。」

A「そこは正しい(笑)」

でも、一個ずつの値が正しくても、まだ安心できません。

例えば、ある機能自体は、無効。

なのに、その機能専用の設定だけ、有効。

A「入力値だけ見れば、どっちも正常。」

私「でも組み合わせたら変。」

B「こうした複数項目の関係を見るのが、クロスフィールドバリデーションや整合性制約ですね。」

私「要するに、一個ずつOKでも全体でおかしかったら止める。」

A「設定画面作るだけだったよね?」

私「設定で壊れないようにしただけだよ」

A「その『だけ』をもう信用してない(笑)」

さらに、会社ごとに名称を変えるなら、別の問題もあります。

私「画面では『現場』って出す会社と、『物件』って出す会社があっていい。」

A「うん。」

私「でも、裏側まで別物になったら困る。」

A「確かに。」

例えば、会社Aでは、現場。

会社Bでは、物件。

画面に見える言葉は違う。でも、内部では、同じ種類のデータです。

私「表示名が変わったからって、別の物として保存したくない。」

B「そこで内部値と表示値の分離です。」

A「利用者には会社ごとの言葉。」

私「裏では同じ正式な対象。」

だから、保存や紐付けには、安定した正式IDを使う。

画面では、会社に合った表示名を使う。

私「表示文字そのものを保存の基準にしたら、名前変えたとき怖いじゃん。」

A「『物件』を『現場』に変えたら、紐付けまで変わるとか嫌だね。」

私「そう。」

B「**表示は変えられる。でも識別は変えない。**という分離ですね。」

A「じゃあ設定画面で、『物件』を『現場』に変えました。」

私「うん。」

A「管理画面は変わった。」

私「うん。」

A「一覧画面は?」

私「変わらないとダメ。」

A「予約画面は?」

私「そこも。」

IMG_2390.jpeg
IMG_2391.jpeg
IMG_2392.jpeg
IMG_2393.jpeg
※キャンセル待ちの仕組みや、順番・確定競合をどう守っているかは、第8弾で触れます。

A「検索は?」

私「同じ正式対象を見る。」

A「履歴は?」

私「同じ。」

A「……これ、設定画面だけ作って終わりじゃないじゃん。」

私「そうなんだよ。」

一か所で設定を変えたなら、実際にその設定を使う画面も、全部追従しなければならない。

設定画面だけ「現場」になっている。

でも、一覧には、昔の固定文字で「物件」が残っている。

私「それ、一番嫌なやつ。」

B「設定反映漏れや固定値の残存ですね。」

A「設定駆動にしたなら、固定UIが一個残ってるだけでも中途半端。」

私「後々、そこはかなり気にするようになった。」

A「一回整理しよう。」

私「はい。」

私「会社ごとに名称やカテゴリを変える。」

B「設定駆動。」

私「変な設定値は入れさせない。」

B「バリデーション。」

私「一個ずつ正しくても、成立しない組み合わせは止める。」

B「整合性制約・クロスフィールドバリデーション。」

私「会社ごとに表示名が違っても、内部では同じ対象。」

B「内部値と表示値の分離。」

私「保存や紐付けは正式ID。」

B「正式IDによる参照。」

私「設定を変えたら、実際の利用画面まで追従させる。」

B「設定反映・固定値残存対策。」

A「『会社ごとにちょっと変えたい』から、全画面の話になってる(笑)」

なお、ここでいう設定駆動化は、全画面・全文言から固定値を完全に排除できている、という意味ではありません。

固定実装が残っていないかは、現在も確認を続けています。

私「一回ちゃんと作れば――」

A「好きだねえ、それ(笑)」

私「まだ言い終わってない(笑)」

でも、会社ごとの設定が増えてくると、次に気になったのが、誰がその設定を触っていいのか。

私「ログインできたからって、誰でも会社の設定変えられたらまずいじゃん。」

A「来た。」

私「何が?」

A「設定の次は権限(笑)」

B「次は、『誰であるか』だけではなく、何を許可するかですね。」

次回

「ログインできたからって何でも触れたらまずいじゃん」で、認証より面倒な認可の沼に入った

管理者か一般かでは足りず、「誰が・誰に・何をできるか」まで判定することになった

連載公開分(クリックで開く)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?