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
Last updated at Posted at 2026-06-26

まえがき

自社開発のWebアプリケーションと、社内だけで運用している業務システムを連携する機能を設計・開発する機会がありました。

今回の要件は、Webアプリケーション上で請求書や見積書のステータスが変更されたときに、その情報を社内運用システムへ連携するというものです。

最初に設計したときは、かなり具体的な業務要件に寄せて考えていました。

たとえば、請求書や見積書のステータスが変更されたタイミングで、そのまま社内運用システムに必要なデータを送信する、という設計です。

この設計でも、現在の要件だけを見ると問題なく動きます。
実装範囲も分かりやすく、処理の流れもシンプルです。

しかし、設計レビューを受けた際に、

特定の用途だけに閉じた機能ではなく、もう少し汎用的な仕組みとして考えたほうがよい

という指摘を受けました。

この指摘を受けて、単に「請求書・見積書のステータス変更時にデータを送る処理」を作るのではなく、「特定のイベントが発生したときに、必要なデータを連携できる仕組み」として設計することが重要だと感じました。

この記事では、そのときの実例をもとに、特定用途に寄せた連携処理と、イベントを意識した連携設計について整理します。

実例

今回の要件では、自社Webアプリケーション上で請求書や見積書のステータスが変更された際に、社内運用システムへデータを送る必要がありました。

当初は、以下のような流れを想定していました。

  1. 請求書、または見積書のステータスが変更される
  2. 特定のステータスになった場合のみ処理を実行する
  3. 社内運用システムに必要なデータを送信する

この設計は、対象業務だけを見ると分かりやすいです。

「請求書・見積書のステータス変更をトリガーに、社内運用システムへデータを送る」という要件に対して、直接的に対応できます。

ただし、この設計には注意点もあります。

業務処理の中に、社内運用システムへの連携処理を直接書いてしまうと、後から送信条件や送信内容を変更したい場合に、業務処理側のコードにも影響が出やすくなります。

たとえば、ステータス変更の処理とデータ送信の処理が密結合になっていると、以下のような状態になりやすいです。

  • ステータス変更の処理を読むだけで、外部連携の処理まで追う必要がある
  • 送信条件を変えるために、業務ロジック側を修正する必要がある
  • 請求書と見積書で似たような連携処理が増えやすい
  • どのタイミングで社内システムにデータが送られるのか把握しづらくなる

レビューで指摘されたのは、この部分でした。

今回必要だったのは、「請求書・見積書専用の送信処理」を個別に作ることではなく、「ステータス変更というイベントが発生したときに、必要な連携処理を実行する仕組み」として考えることでした。

たとえば、請求書のステータスが変更された場合、業務処理側では「ステータスが変更された」という事実を扱います。

その後、連携処理側で「このステータス変更が発生した場合は、社内運用システムにデータを送る」と判断します。

つまり、以下のように責務を分けるイメージです。

業務処理
  - 請求書のステータスを変更する
  - 見積書のステータスを変更する

イベント発火
  - ステータスが変更されたことを通知する

連携処理
  - 通知された内容をもとに、社内運用システムへデータを送信する

このように分けておくことで、業務処理と連携処理の責務を分離できます。

業務処理側は、ステータス変更という本来の責務に集中できます。
一方で、社内運用システムへ何を送るか、どの条件で送るかは、連携処理側で管理できます。

ただ、設計の考え方として、特定の処理の中に連携処理を直接埋め込むのではなく、「何かが起きたこと」をきっかけに別の処理を動かす形にしておくと、後から変更しやすくなります。

  • ステータスを変更する処理
  • ステータス変更が発生したことを扱う処理
  • 社内運用システムへデータを送る処理

この分離ができていないと、ステータス変更のたびに連携処理が直接実行される形になり、業務ロジックと連携ロジックの境界が曖昧なると感じました。

一方で、イベントを意識して設計しておくと、ステータス変更処理そのものはシンプルに保ちつつ、連携処理の追加や変更にも対応しやすくなります。

まとめ

今回の設計を通じて、単に要件を満たす実装と、今後の変更を見据えた設計には違いがあると感じました。

請求書・見積書のステータス変更時に社内運用システムへデータを送るだけであれば、個別の送信処理でも実現できます。
しかし、ステータス変更の処理の中に送信処理まで直接書いてしまうと、後から送信条件や送信内容を変えたいときに、ステータス変更処理そのものにも手を入れる必要があります。

そのため、ステータス変更の処理と、社内運用システムへデータを送る処理は分けて考える必要があると感じました。

処理を分けておくことで、後から送信条件や送信内容が変わった場合でも、連携部分だけを修正しやすくなります。

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?