投稿者: 沼田 勇作

  • (7月21日通信)要件定義そのものをコードで表現すると、開発費用は大きく圧縮できる

    システム内製化の強み

    システム開発では、最初に要件定義書を作り、次に設計書を作り、それをエンジニアがコードへ変換する方法が一般的です。

    しかし、この方法では同じシステムを異なる形式で何度も表現することになります。

    経営者や現場担当者の言葉

    要件定義書

    設計書

    プログラムコード

    非コーダー向けの操作説明書

    工程が増えるたびに、翻訳作業と確認作業が発生します。

    さらに、仕様を変更した場合には、要件定義書・設計書・コード・説明資料をそれぞれ修正しなければなりません。

    この二重、三重の管理が、システム開発費用を押し上げる大きな原因になっています。

    当社は、AI時代には要件定義そのものをコードで表現し、コードを唯一の原本として管理する方法が広がっていくと考えています。

    「コードを原本にする」とはどういうことか

    コードを原本にするとは、要件を整理せず、いきなりプログラムを書き始めることではありません。

    会社の業務構造と判断ルールを、コード上で直接表現するという意味です。

    • ディレクトリの配置で、会社・部署・業務の境界を表現する
    • クラスで、人・物・取引・出来事を表現する
    • プロパティで、記録すべき情報や状態を表現する
    • メソッドで、実行可能な業務処理を表現する
    • ドックストリングで、設計目的・判断理由・制約・例外を説明する
    • テストコードで、具体的な処理例と期待結果を表現する

    例えば、請求書を発行する条件が、

    「検収が完了していること」

    「金額が100万円以上の場合は代表者の承認を得ていること」

    であれば、次のように表現できます。

    from decimal import Decimal
    
    
    class 請求:
        """
        検収が完了した取引だけを請求対象とする。
    
        金額が100万円以上の場合は、
        代表者の承認を必要とする。
        """
    
        検収済み: bool
        金額: Decimal
        代表者承認済み: bool
    
        def 発行できる(self) -> bool:
            if not self.検収済み:
                return False
    
            if self.金額 >= Decimal("1000000"):
                return self.代表者承認済み
    
            return True
    

    このコードには、請求に必要な情報、判断条件、例外、処理結果が表現されています。

    ドックストリングを読めば、人間もその設計意図を確認できます。AIに読ませれば、経営者や現場担当者向けの説明文へ変換することもできます。

    さらにテストコードを用意すれば、

    • 未検収なら発行できない
    • 50万円なら代表者承認なしでも発行できる
    • 120万円なら代表者承認が必要になる

    という具体例まで、実行可能な要件として残せます。

    要件定義書からコードへの翻訳が不要になる

    従来の開発では、要件定義を行う人とコードを書く人が別になっていることがあります。

    要件定義書を書いた人の意図をエンジニアが読み取り、コードへ翻訳します。認識に違いがあれば、質問、回答、文書修正、再確認が必要になります。

    コード自体を要件定義の原本にすれば、この翻訳工程を大幅に減らせます。

    業務上の概念をクラスとして配置し、必要な情報をプロパティとして定義し、許可された操作をメソッドとして記述します。判断理由や例外は、そのコードに最も近いドックストリングへ残します。

    要件と実装が同じ場所に存在するため、「設計書には書いてあるがコードには反映されていない」という状態も起きにくくなります。

    修正費用も圧縮できる

    業務ルールは、システムを実際に使う中で少しずつ明らかになります。

    現場から、

    「この場合は承認者が違うのではないか」

    「作業完了と請求可能は別の状態ではないか」

    「この取引先だけ例外処理が必要ではないか」

    という気づきが出ることがあります。

    文書とコードを別々に管理している場合は、影響する要件定義書と設計書を探し、文書を修正し、合意を取り直し、その後でコードを変更します。

    コードを原本にしていれば、該当するクラス、プロパティ、メソッド、ドックストリング、テストを確認し、同じ場所で設計と実装を修正できます。

    もちろん、会計・請求・在庫・権限など、会社の資産を変化させる処理は、テストや承認を経てから本番環境へ反映しなければなりません。

    しかし、仕様を修正するたびに複数の原本を更新する必要はなくなります。

    非コーダーにコードを読ませる必要はない

    コードを原本にすると聞くと、「経営者や現場担当者はコードを読めない」という疑問が出てきます。

    しかし、非コーダーが原本を直接読む必要はありません。

    AIを利用すれば、コードから次のような資料を作成できます。

    • 経営者向けのシステム全体説明
    • 現場担当者向けの業務手順
    • 会計専門家向けの処理条件
    • 部署間の業務フロー
    • 権限と承認経路の一覧
    • システム構成図
    • 操作マニュアル

    これらの資料は、それぞれが独立した原本ではありません。コードという一つの原本を、利用者に合わせて見やすく変換したものです。

    コードを変更した場合は、変更後のコードから資料を作り直します。

    これにより、古い設計書や操作マニュアルだけが残り、実際のシステムと内容が食い違う問題を減らせます。

    AI時代には要件定義とプログラミングの境界が薄くなる

    従来は、人間が要件定義書を書き、それを読んだエンジニアがプログラムを書く必要がありました。

    生成AIは、人間が説明した業務ルールから、クラス、プロパティ、メソッド、ドックストリング、テストコードの案を作れます。

    反対に、既存コードを読み取り、非コーダー向けの説明資料を作ることもできます。

    つまり、AIが人間の言葉とコードの間を往復できるようになったことで、要件定義書を独立した原本として維持する必要性が小さくなります。

    今後は、

    人間が業務上の判断を行う
    AIとともにコード上へ構造化する
    動く状態で確認する
    必要な資料をコードから生成する

    という開発方法が日常化していくと当社は考えています。

    有力候補となるプログラミング言語がPythonである

    当社は、コードを要件定義の原本とする時代において、Pythonが有力候補になると考えています。

    Pythonは、クラス、プロパティ、メソッドなどを比較的簡潔な構文で表現できます。

    ドックストリングをコードの近くへ記述できるため、何を処理するのかだけでなく、「なぜその構造にしたのか」という設計意図も残せます。

    Pythonを使う目的は、単に少ない文字数でプログラムを書くことではありません。

    自社の業務を、人間とAIの双方が理解しやすい構造で表現することです。

    会社、部署、業務、担当者、承認者、取引、会計上の出来事をコード上へ配置し、その関係を人間が確認できる状態にします。

    圧縮されるのは、プログラミング費用だけではない

    コードを原本にすることで圧縮できるのは、コードを書く費用だけではありません。

    • 要件定義書を作成する費用
    • 設計書へ変換する費用
    • 要件定義書とコードを照合する費用
    • 仕様変更時に複数の文書を修正する費用
    • 非コーダー向け資料を一から作る費用
    • 古い文書と現在のコードの違いを調査する費用
    • 関係者間の認識違いを修正する費用

    こうした翻訳・確認・二重管理にかかる費用を圧縮できます。

    要件定義そのものをコードで表現するとは、要件定義を省略することではありません。

    要件定義と設計と実装を、同じ原本の上で行うことです。

    AI時代のシステム開発では、コードは完成品だけではありません。

    会社の業務構造、判断基準、設計意図を保存する、最も正確な原本になっていくのです。

  • (7月17日通信)生成AIによるシステム内製化は、会社の許可を待たずに進む

    時代に取り残されるのはDX戦略がない会社

    大企業には「変えられないシステム」があります。

    中小企業には「システムを変えられる人がいない」という問題があります。

    これまで両者は、異なるIT課題として語られてきました。しかし生成AIの登場によって、状況は大きく変わろうとしています。

    生成AIは、プログラミング経験の少ない人でも、業務用の画面やデータ処理を作れるところまで来ています。

    つまり、経営者や情報システム部門が方針を決める前に、現場でシステム内製化が始まる時代です。

    対策はできているでしょうか。

    大企業を苦しめるのは「古いシステム」ではない

    大企業では、長年使い続けてきた基幹システムが経営改革の足かせになることがあります。

    しかし、本当の問題は単に技術が古いことではありません。

    • 誰もシステム全体を説明できない
    • 一部分を変更すると、どこに影響するのか分からない
    • 当時の設計意図が残っていない
    • 業務に合わせてシステムを変えるのではなく、システムに業務を合わせている
    • 改修のたびに高額な費用と長い期間が必要になる

    このような「安全に変更できない状態」こそが、レガシーシステムの本質です。

    どれだけ新しい技術へ置き換えても、会社の業務構造やデータの関係を理解しないまま作り直せば、新しいレガシーシステムが完成するだけです。

    中小企業ではIT人材不足が足かせになる

    一方、中小企業には大規模な基幹システムがない代わりに、ITを担当できる人材が不足しています。

    その結果、情報がExcel、メール、紙、チャット、会計ソフトなどに分散します。

    業務を改善したくても、システム開発会社へ依頼するには費用がかかります。自社で作ろうとしても、プログラミングができる人がいません。

    その隙間を埋め始めたのが生成AIです。

    現場の担当者が生成AIに要望を伝え、表計算の自動処理、簡単なWeb画面、WordPressプラグイン、社内用アプリなどを作ることは、すでに珍しいことではありません。

    これは中小企業にとって大きな機会です。

    同時に、別の問題も生み出します。

    プログラミング教育とシステム設計は別のもの

    現在の小中学校におけるプログラミング教育では、主に論理的思考やアルゴリズムの基礎を学びます。

    条件によって処理を分ける。繰り返す。入力した情報から結果を出す。

    これらは重要な学習です。

    しかし、企業で使う業務システムを設計するには、それだけでは足りません。

    企業のシステムでは、次のような問題を考える必要があります。

    • 誰が情報を登録できるのか
    • 誰が承認するのか
    • 承認後に修正できるのか
    • 修正前の履歴を残すのか
    • 例外が発生した場合に誰が判断するのか
    • 複数の処理をどこまで一体として完了させるのか
    • 在庫、請求、入金、会計へどう連携するのか
    • 間違った操作をどのように取り消すのか
    • 退職者や外部関係者に何を見せるのか

    アルゴリズムが「どのように動かすか」を考えるものだとすれば、システム設計は「誰が、何を、どの責任で動かし、その結果をどこまで波及させるか」を考えるものです。

    学校教育が悪いという話ではありません。小中学校で企業の権限設計や会計処理まで教えないのは当然です。

    問題は、プログラミング教育を受けた人材が、企業システムの設計まで理解していると会社側が思い込んでしまうことです。

    生成AIは「未設計のシステム」も大量生産できる

    生成AIによって、コードを書くハードルは急速に下がりました。

    しかし、コードを書けることと、企業のシステムを設計できることは同じではありません。

    生成AIに「業務報告アプリを作ってください」と依頼すれば、動く画面は作れます。

    ところが、誰が提出し、誰が確認し、差し戻した場合にどの状態へ戻り、承認後の変更をどう記録するのかは、会社側が決めなければなりません。

    生成AIは、人材不足を自動的に解消する魔法ではありません。

    設計原則を持たない会社にとっては、整合性の取れない小さなシステムを大量生産できる道具にもなります。

    現場ごとに作られた便利なツールが増え、やがて請求、在庫、顧客情報、権限、会計にまで接続されていく。

    その段階で止めようとしても、すでに業務が依存しているため簡単には廃止できません。

    これが、生成AI時代の新しいレガシーシステムです。

    最も危険なのは、試作品がそのまま基幹システムになること

    受付フォーム、業務報告、情報共有などは、WordPressや表計算を使って素早く試作してもよいでしょう。

    実際に動くものを見ながら改善することで、本当に必要な機能が見えてきます。

    ただし、次の処理は試作品の延長で作るべきではありません。

    • 会計情報を変化させる処理
    • 請求金額を確定させる処理
    • 在庫数量を変化させる処理
    • 入出金を管理する処理
    • 承認権限を制御する処理
    • 会社の資産や負債を変化させる処理

    これらは、要件、権限、例外、履歴、整合性を整理したうえで、本番用のデータモデルとコードを設計する必要があります。

    「動いたから、そのまま使う」という判断が最も危険です。

    今から準備すべき5つの対策

    1.試作と本番の境界を決める

    どこまでなら現場が自由に作ってよいのか。どの情報や処理に接続する場合は正式な設計が必要なのか。

    この境界を、生成AIの利用が広がる前に決めておく必要があります。

    2.権限と責任を先に設計する

    画面から考え始めるのではなく、担当者、確認者、承認者、管理者、外部専門家が、それぞれ何を見て何を変更できるのかを整理します。

    権限設計は後から付け足す機能ではありません。

    3.会社のルールをコードで表現する

    文章の設計書だけでは、実際のシステムとのズレが生まれます。

    「検収済みの取引だけ請求できる」「一定金額以上は代表者承認を必要とする」といった業務ルールを、データモデルやコードとして明確に表現することが重要です。

    コードそのものを、生成AIと人間の双方が確認できる設計情報にします。

    4.生成AIで作られたツールを把握する

    禁止するだけでは、現場での利用は止まりません。

    何を作り、どのデータを扱い、どの業務に利用しているのかを登録し、重要度に応じて確認する仕組みが必要です。

    5.経営者がシステム設計の原則を知る

    経営者自身がすべてのコードを書く必要はありません。

    しかし、会社のどの情報を正しいものとして扱うのか、誰にどこまで権限を与えるのか、どの処理が会計や会社資産に影響するのかは、経営者が判断すべき問題です。

    システム設計とは、会社の脳と神経を設計することだからです。

    必要なのは「AIを使える人」だけではない

    これから必要とされるのは、生成AIへ上手に指示できる人だけではありません。

    会社の業務を分解し、データの関係を整理し、権限と責任を定義し、変更してよい部分と慎重に扱う部分を判断できる人です。

    大企業は、変更できないレガシーシステムに苦しんでいます。

    中小企業は、IT人材不足によって変化できない状態にあります。

    そこへ、アルゴリズムを学び、生成AIでコードを書ける世代が入ってきます。

    システム内製化は、経営者が決断しなくても勝手に進みます。

    だからこそ、今準備すべきなのはAIツールの導入ではありません。

    自社のシステムを、どの原則で設計するのかを決めることです。

    生成AI時代に差がつくのは、コードを速く作れる会社ではありません。

    作ったシステムを安全に変更し続けられる会社です。

    対策は、できていますか?