SoRを攻略する
SHARES
SoEからSoRへ
SoEのシステム開発から、完全にSoRのシステム開発に軸足を移した。ウォーターフォールでやっているし、エクセルでテスト管理もしている。いわゆるSIerぽい仕事だ。
世間ではこの仕事の形式を毛嫌いされるが (自分も昔の印象はそうだった)、今はネガティブな意識はない。
「全くない」とは言わないが、この領域に進んで得られたことが多分にあるし、考えもかなり成熟した。スキルや経験値も良い感じに積めている。なによりSIはビジネスとして真っ当なのが大きい。
機会のおかげで軸を変えれたのが8割で、残り2割を埋めるために直近数年は自分にベクトルを向けて研鑽を重ねてきた。全てを語り尽くすのは難しい中で、本などには書いてないが自分が取り組んだ中で得た、”これが大事” という考えをテキストにまとめておく。
SoRとSoEの説明は Naoyaさん が「決定版」と呼べる資料を残してくれているので、そちらを参照。
1. 非同期処理の活用

SoRなシステムはデータの整合性, 可用性, 回復性などが絶対条件として要求される。
この要求に応えるための最善の手段は非同期処理だ。
兎にも角にも非同期処理を徹底して活用する。SoRの中でも「基幹システム」と呼ぶ様な業務支援系である場合、非同期でないシーンの方が少ないはず。
ここでの「非同期処理」とは、Batch Job/Scheduler, Pub/Sub Event, Task Queueなどを指す。
どれも令和時代は主要なクラウドサービスが標準でサポートしており、尚且つ実績も豊富にあるため、迷うことなく使う。
非同期処理にすれば必要な性質が自然と獲得できるわけではない。正確には “獲得するための素地を得られる” ので、そこに乗せる実装自体が単純な構成でも容易に性質獲得できる様になり、結果として問題解決が楽になる。なので、非同期処理を選択すべきだ、という結論に至る。
実装構成は単純化できるが、そのトレードオフとして実装自体が冗長になることは避けられない。
処理1 ⇒ イベント基盤 ⇒ 処理2 ⇒ Job基盤 ⇒ 処理3 etc… といった構成になってしまう。
これは開発者にとって認知負荷が大きい。
負荷が大きいものの、“慣れ” で解決できるところであるため、許容したい。
実体験として、おおよそ6ヶ月程度非同期基盤に触れていれば、思考が慣れてしまう。
運用に乗った後の話としては、運用負荷が極めて小さくなる。
何か問題が起きても非同期基盤で問題を切り分けて調査することができ、また非同期基盤を中心として運用を調整することで “容易にあるべき状態に回復できる” ようになる。
この “運用負荷の低減” は文章で説明することが難しいが、非同期を活用しきれていないシーンと活用しきれているシーンの両方を経験した身としては、「後者が圧倒的に楽である」ということは言い切れる。
SoRは非同期ありき、極論9割非同期で考えるくらいがちょうど良い。
2. 基盤と個別の分離

「基盤 or 個別」というのは、システムの特徴になので一概に全ての開発に当てはまる話ではない。
それでも "共通の機能を異なる顧客に最適化して提供する" といった、昨今で言う「SaaS」の形態を取り、なおかつSoRの性質を強く持つのであれば、「基盤と個別を分離するアプローチを取るべきだ」と考える。
これは「マイクロサービスにする」という話ともちょっと違う。コアシステムとコアシステムを活用するサテライトシステムに分けるというイメージ。
「そんな分け方でいいの?」というコメントが来そうだが、これで良い。むしろこれが良い。
この構成を「良い」と言い切れるのは、先の非同期処理の利活用があるから。
SoRとして求められる性質、その性質を獲得するための非同期処理、非同期処理が是とされる状況でのシステム構成を検討すれば、自ずとサテライト型の構成を肯定することができる。
この「分ける」という開発の意思決定に対して開発投資ができないのなら (= リスクが取れないのなら) 、そもそも「SoRの領域で商売をやるべきではない」と個人的には思っている。ここはあえて強いスタンスを取りたい。
SoRの性質を持つシステムで商売する場合、ほとんどが5年以上を目安にシステム運用することが前提であり、一般的には10年近く開発運用することが一般的だ。
この “長い年月を健全に運用すること” と “短期の開発コストの圧縮” を天秤にかけた場合、間違い無く前者の健全性を取った方が開発投資のリターンが得られる。それも何十倍も。
これを「今しか入れない機会だから」「顧客が求めているから」といった煽りに負けて、目の前の開発投資をおざなりにすると2~3年後には悲惨な状況が生まれる。
顧客の要求に応えることはもちろん大事だが、自分たちの製品構成や品質方針を犠牲にしてまで応えるものではない。時には諦めも必要だと考えるし、諦めないためにも交渉力が必要。
「分ける」という話をすると、どうしても「DBは分離するべきなのか」とか「この責務が〜」といったテクニカルな話になってしまう。
もちろん、そういった各論にも答えを出す必要は出てくるが、もっと大上段の話として、言い換えると “グランドデザイン (地形の利活用)” として、基盤と個別を別物として扱い、基盤の純粋性と汎用性を維持することを目指す。そして、コアシステムを利用するサテライトシステムで顧客の固有の要求を満たすシステム構成を選択することで、SoRでありながらも、”SoEとしても競争力を持ったシステム製品” が出来上がる。
自分はこれが1つのSoRを軸とした製品の勝ち筋ではないかと考える。
もう少しこの ”システム開発におけるグランドデザイン論” みたいなのは言語化されて、ナレッジが世間に共有されて欲しい。
3. 外部接続面の形式化

SoRは情報を正しく「記録」するためのシステム。
“情報” は何らかの手段でシステムに登録されるが、その手段はシステムそのものが入力フォームとして受けるか、外のシステムから連携を受けるか、の2択しかない。
さらに、外部システムの連携は ファイルの送受信 (一部界隈では「IF」と呼称) か、Web APIの送受信 (Web API Call or Webhook) の2択しかない。
また、ファイルはファイル形式定義と送受信タイミングと運用方針、APIはスキーマ定義と呼び出し元と呼び出し先の振る舞いと責務でおおよその開発が進められる。
この様に、外部接続は限られた選択肢と要件定義のフォーマットが定まっている “不確実性の低い開発領域” だ。
「内部に閉じているから不確実性が低い、外部と繋がるから不確実性が高い」と言われたり、直感的に不確実性が高い印象を持つこと (昔の自分がそう) は否定しないが、実際問題として、外部接続は形式的であり、話の要点さえ掴めば何ら難しくない。
もちろん、オープン or クローズド (プライベート) であるかどうかで大きく変わるが、令和のWeb技術は相当成熟しているため、オープンであろうと標準から外れたことはかなり少なくなっている。
ここまでの整理を踏まえて言いたいことは「外部接続面の実装はほぼ形式化 (パターン化) できる」ということ。
“形式化できる” ということは、”開発負荷を落とせる” ということであり。それはつまり、実装者側の能力や思考や知識のレベルに依存することなく、ジュニアでもシニアでも関係なく、”一定水準の安定した成果を出すことができる” ということである。
そして、この "形式化" を目指すべきだと考える。なぜなら、 SoRシステム製品のスケーラビリティを格段に上げることができるから。
「形式化できる」という側面は、AIが急激な進化を見せている昨今では極めて重要な特徴である
この外部接続面の開発は完璧にAIが代替できる。完璧に。
なんなら自分が今見ている世界では8割ほど代替されてしまっている。これは見方によっては人の仕事を奪っている様にも見えるが、それはネガティブな見方であり、ポジティブポジティブに見れば1人が開発できる量と範囲を格段に増やしているとも言える。
SoRシステムを活かすための外部接続は形式化でき、AIの進化によってスケーラビリティを獲得することができる。

余談. 先を読む
SoRシステムが再評価される時代が来る。
2020年代前半はSaaSの時代だった。
巨大な基幹システムがアンバンドリングされて、個々のSaaSが領域最適を進めてきた。
2020年代後半はSaaSの大統合時代に入る。
「大統合」とは “まとまる” という意味もあれば、 “つながる” という意味もある。
それらを進めるピースが揃い始めている。
“つながる” に対しての過去の仮説は iPaaS という切り口で何らかのSaaSが台頭することだった。
が、実際に盤面を変えるピースとなったのは生成AIによる開発支援だった。
生成AIが形式化できる外部接続面の開発を担えることで、接続の実装負荷が格段に落ちた結果、システム統合が容易にできる様になり、結果として統合容易性が生む価値が業務を劇的に変える様になる。
「業務を劇的に変える」を表面的にわかりやすく捉えているのが “AIエージェント” だが、その裏側にあるのは従来から変わらず存在するシステム間連携であり、そこの中心に居座るのはSoRなシステム (= 基幹システム) であるのは他ならない。
そう考えると、「いかにAI基盤を活用したAIエージェントを作るか」という問いではなく、「将来的に “AI基盤やAIエージェントが活用したい” と思える様な基幹システムの立ち位置に入り込めるか、もしくは自分たちが成りきれるか」が時代を捉えた問いではないか。
端的に言い換えると「アプリケーションからインフラに成りきれるか?」だ。
だからこそ、SoRの性質を活かしきれているシステムを持つところは強くなるし、そういったところは2020年代後半も生き残っていくと考える。
「大きなところがより大きくなる」と言われる所以はここにある。
AIの発達によって今以上にシステムが滑らかに接続する世界に進むだろうし、爆発的に増えたSaaSの大統合が始まる。水面下ではもう始まっている。
先を読む感覚がある人は気づいており、2年前に自分が立てた仮説もほぼその通りに進んでいる。