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?

デモにあって、業務システムにないもの

0
Posted at

雰囲気を伝えるだけで、数分で動くものが出てくる。あのデモは、素直にすごいと思います。

探索目的でなら自分も使います。何を作るべきかまだ固まっていない段階で、とりあえず形にして眺めてみる。手が動き出すまでの時間が明確に縮むので、あれは便利です。

ただ、業務システムの納品物としてそのまま使ったことは、一度もありません。

食わず嫌いではありません。持ち込もうとするたびに、具体的な場所で手が止まりました。この記事では、その手が止まる場所を5つ、できるだけ技術的な例とあわせて書きます。

デモを否定したいわけではありません。デモと業務システムでは、置かれている条件そのものが違う。その差分を言葉にしておきたい、という話です。

1. 仕様を持っている人が、自分ではない

デモでは、作る人が仕様の所有者を兼ねています。「こういうものが欲しい」が本人の頭の中にある。だから雰囲気を伝えるだけで話が進みます。

業務システムでは、仕様を持っているのは顧客であり、他部署であり、現場の担当者です。厄介なのは、その仕様が、まだ誰の頭の中にも存在しないケースが多いことです。

「一覧画面に検索機能をつけたい」という依頼だけで作らせると、こういう食い違いが起きます。

# 依頼した側の頭の中
「検索」で完全一致のつもりだった(コード番号のような一意な項目のイメージ)

# 出てきたもの
LIKE '%キーワード%' の部分一致検索
(一般的な「検索」の実装としては妥当。だから正しく動いているように見える)

どちらも技術的には正しいコードです。ずれているのは仕様の解釈のほうで、これはコードレビューでは見つかりません。依頼した本人が画面を触って初めて発覚します。

この段階では、正解かどうかを判定する基準がそもそも存在しないので、動くものを出しても評価ができません。

2. 更地ではなく、既存の上に建てる

デモはゼロから作ります。制約のない土地に、好きな工法で建てられます。

業務システムでその状況は、まずありません。既存の上に建てるので、合わせるべきものが山ほどあります。

  • テーブル定義とカラム命名の規則(日付は必ず _ymd で終わる、論理削除フラグの名前が決まっている、など現場ごとの流儀)
  • 例外処理の方針(どの層で捕まえて、どこまで投げるか。ログに残す粒度)
  • トランザクション境界の張り方
  • 社内の共通ライブラリや独自フレームワーク(外部の一般的な書き方が通らない)
  • 認証・認可の既存基盤(自前で書いてはいけない部分)
  • リンタやフォーマッタの設定、レビューで指摘される暗黙のルール

規約を渡さずに作らせると、命名の時点でこうなります。

-- 提案されたカラム名(一般的な命名としては妥当)
created_at
updated_at
is_deleted

-- この現場の規約
created_ymd
updated_ymd
del_flg

どちらも技術者としては違和感のない命名です。ただしその現場の流儀とは無関係な動き方をします。合わせにいくと、結局ほとんど書き直しになります。しかも「一般的には正しいが、ここでは通らない」書き方が混ざるので、レビューで指摘するほうにも手間がかかります。

新規開発なら自由かというと、そうでもありません。二つ目の機能を作る時点で、もう「一つ目に合わせる」が発生します。 更地でいられる期間は、思っているより短いです。

3. 止まったとき、説明する義務がある

デモは落ちても誰も困りません。もう一度やればいい。

業務システムは違います。本番で止まれば、まず調べるところから始まります。手がかりはログです。

2026-08-21 03:12:07 ERROR [OrderService] Unexpected null
    at OrderService.calculate(OrderService.java:88)

これだけでは「なぜnullが来たか」は分かりません。呼び出し元をたどり、どの条件でnullを許容する設計だったのかを追う必要があります。設計の意図が別に残っていれば数分で終わる調査が、コードだけを頼りに逆算すると数時間かかることもあります。

そのうえで、障害報告に書く項目はだいたい決まっています。

  • 発生日時と検知の経緯
  • 影響範囲(どの機能が、何件、どの顧客に)
  • 直接の原因
  • 暫定対応と、復旧の見込み時刻
  • 恒久対応
  • 再発防止策

このうち「直接の原因」から下は、中身を把握していないと一行も書けません。

そして、「AIが書いたので分かりません」は報告書に書けません。相手は顧客だったり、上司だったり、品質保証の部署だったりします。説明を求められるのは障害のときだけでもありません。レビュー、監査、引き継ぎ、どの場面でも**「なぜこの実装なのか」**は聞かれます。

自分で書いたコードなら、少なくともどこを見ればいいかの見当がつきます。中身を把握していないものを抱えたまま、時間に追われながら障害対応をする状況は、あまり経験したくないものです。動いているうちは、問題になりません。問題は、動かなくなったときに説明する立場に自分がいることです。

4. 半年後、別の人が触る

デモは、作った本人がその場で動かして終わります。

業務システムで作ったものは残ります。半年も経てば、たいてい別の人が触っています。異動もあれば、案件を離れることもあります。

このとき、git blame で分かるのは「誰が」「いつ」書いたかまでです。「なぜ」は出てきません。コミットメッセージが fixupdate の一言だけだと、なおさらです。

  • なぜこの条件が入っているのか
  • なぜ別の方式を選ばなかったのか
  • どこまでが仕様で、どこからが実装の都合か

これらがどこにも残っていないと、受け取った側はコードから仕様を逆算するしかありません。変数名やコメントの断片から意図を推測し、たいてい元の意図とはずれます。

雰囲気で作ったものからは、雰囲気しか受け取れません。作った本人の頭の中にあったはずのものが、コミット履歴にもコードにも書き出されていないからです。自分が引き継ぐ側だったときのことを思い出すと、これは他人事ではありません。

5. 必ず、変更が来る

そして、これが一番効いてきます。

デモは一度動けば終わりです。業務システムは、三ヶ月後に「この条件を追加してほしい」が来ます。来ないことは、まずありません。

そのとき効いてくるのが、最初に何を決めたのかが残っているかです。

例えば「ステータスは3種類」という前提で作ったものに、4つ目のステータスを追加してほしいと言われたとします。判定ロジックが if (status == A) { ... } else { ... } のような二分岐で散らばっていた場合、追加箇所を洗い出すだけで一苦労です。なぜ二分岐で足りると判断したのかが残っていれば、影響範囲はすぐ絞り込めます。残っていなければ、コードを一行ずつ読み解いて意図を推測するところから始まります。

一度作って終わりなら、中身が多少分からなくても構いません。ただ業務システムは、作った後のほうが圧倒的に長いです。初速で稼いだ時間は、二回目の変更でだいたい返済することになります。

これは、遅れているという話ではない

5つ並べてみると、共通点がはっきりします。

どれも、新しい技術についていけるかどうかとは無関係です。

仕様が固まっていないのも、既存システムがあるのも、説明を求められるのも、引き継がれるのも、変更が来るのも、AIが登場するずっと前から業務システムに付いていた条件です。

デモの世界には、この5つが最初から存在しません。だからあの速度が出ます。速くて当然です。乗れないのは、能力の差ではなく、置かれている条件が違うだけです。

では、どうしているか

AIを避けているわけではありません。設計もコードもテストも、かなりの部分でAIの手を借りています。

違うのは、渡すタイミングです。上の5つは、どれも後から効いてくるものでした。仕様、既存の流儀、説明責任、引き継ぎ、変更。これらが表面化するのは、たいてい作り始めてからずっと後です。

先に片付けてからAIに渡すと、出てくるものが変わります。現場の流儀を無視したコードは出てきませんし、半年後に誰も読めないコードも出てきません。

最初の一歩は速くありません。数分で動くものは出てこない。そこは正直に書いておきます。ただ、二回目の変更まで含めた合計では、こちらのほうが短く済んでいます。

補足しておくと、このやり方には新しい技術が一つも出てきません。 目新しいフレームワークも、話題のツールも、凝った構成も使っていません。人に話しても、たいてい拍子抜けされます。地味です。

それでも、この地味なやり方で案件をさばいてきましたし、バイブコーディングに乗れないことで困ったことは一度もありません。


この記事は「なぜ止まるのか」までの話です。実際に何をどの順番でやっているのかは、書き出したら長くなったので、note に4回のシリーズとして別にまとめてあります。興味のある方はどうぞ。

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?