今日のエンタープライズチームは、より頻繁に、より多くのコードを送信します。 — GitHub CopilotやAmazon QなどのAI駆動型のコードツールによって部分的に推進されています。 以前より しかし、問題がある。 AIはエンタープライズチームがより多く、より速く、彼らが相続した遺産システムを配送するのに役立つ一方で、何年か、あるいは何十年もの建築債務とともに、 複雑さが上昇するにつれて、多くの組織は近代化に向き合っています - コントロールするだけでなく、クラウド移行がそれを要求しているためです。 悪化している 現実は、AIコーディングの興奮の多くはグリーンフィールドプロジェクトや新しく構築されたアプリケーションに焦点を当てているが、 most developers spend their time maintaining and modernizing legacy systems that are filled with outdated code, old frameworks, and accumulated . 建築債務 建築債務 チームには近代化のためのこの任務が与えられているが、AIツールが既存のソフトウェアアーキテクチャ(または建築債務)の文脈をほとんど持たないことから、緊密な接続、混乱した依存性、および建築ドリフなどの問題が悪化している。 . It's Making It Worse なぜなら、近代化はコードを迅速に書き直すことだけではないからだ。 そして、AIを使用するための正しいアプローチで、これらの目標は達成することができます。 reshaping software architecture to support scalability, faster delivery, and cloud-native goals この記事では、どのようにしてそれを可能にするかについて説明します。 ほとんどの記事は、AIを使用してコードすることに焦点を当てているが、AIがどのように機能するかについて具体的な例を見る。 なぜなら、適切なツールと適切な文脈で、AIは、チームの努力を妨げるのではなく、役立つ一貫した、そして正しい建築的提案を提供できるからです。 AI-assisted software architecture modernization actively help modernize software architecture あなたがモノリッチな遺産システムと戦っているか、継承されたマイクロサービスの複雑さを移動しているかに関係なく、AIは効果的で強力な共同建築家です。 AIとソフトウェアアーキテクチャの問題 ほとんどの開発者は、これらのAIエージェントをスマートで経験豊富で疲れがたいコーディングアシスタントとして使用し、日々の仕事でAIコーディングアシスタントに頼っています。 問題は、この日常的な使用において、AIは建築にも影響を及ぼしているということです。 開発者がコードを書くとき、彼らは常に質問し、答えを考慮し、以下のような質問をします。 私のクラスはどのように組織するべきでしょうか。 どのようにキャッシュを扱うべきでしょうか。 このビジネス論理をどこに置くべきか。 外部依存症とは? これは、私たちのソフトウェアアーキテクチャ全体にどのように適合しますか。 And more 開発者がそれを認識しているか否かに関係なく、AIエージェントはこれらの質問を問う - 暗示的にアーキテクチャの決定を - 生成されたコードのすべての行で。 そして、これらの決定と共に、 あなたのスマートで経験豊富で疲れるコードアシスタントは、表面上は正しいように見える未知の決定を下していますが、ソフトウェアアーキテクチャの文脈から見ると、より多くの借金、より多くの問題、より多くのデバッグ時間を追加しています。 risk そして、あなたの問題を悪化させるために、これらのエラーは通常すぐに明らかではありません。 古いシステムでは、コードのカバーはしばしば理想よりも低いです。 それでも、ソフトウェアアーキテクチャは通常、その崩壊を大声で発表しません。 緊密な接続やスケーラブルなモジュールのような問題は、しばしばモニタリングやテストツールには見えません。 ソフトウェアアーキテクチャ Drift (構造化され、制御された建築から遠く離れたゆっくりとほとんど見えない侵害)は、特に潜在的です。 それはよく知られているストーリーです:システムの複雑さは圧倒的でした、内部の近代化の試みは何年もかかり、努力は隠された建築の落とし穴のために繰り返し停滞しました。 Architecture drift Fortune 100 銀行 最近の調査では、 企業は、実装されたアーキテクチャと文書化された基準の間の誤りによる負のビジネス結果を経験し、これらのギャップのコストを無視することは不可能である。 回答者の93% アーキテクチャの問題は、コードのバグよりもはるかに目立たないかもしれませんが、それらはより困難です。 AIが実際にソフトウェアアーキテクチャを近代化するのに役立つ方法 しかし、それはこのようにする必要はありません。 AIはあなたのアーキテクチャの決定を理解し、フォローするだけでなく、それらを改善するのに役立ちます。 静的図表や部族の知識が不足し、開発者や建築家が暗闇に残されているところ、AIは単なるアシスタントではありません。 brownfield modernization efforts AI ツールがコードレベルでの改善を検出し、推奨できるように、AI はランタイム分析に基づくアーキテクチャコンテキストで供給された場合、近代化努力中に建築上の問題を検出し、修復することができます。 適切に使用され、ランタイムの文脈と初期のドメイン駆動の構造分析により、AIは: 批判的になる前に建築的反パターンを検出し、修正する 正確な再構築戦略を提案 何を修正するかを優先することで、エンジニアリングチームの限られた時間を節約します(暗号化アシスタントは、小規模な問題を直ちに修正するのに役立ちます)。 複雑な依存症の解消 建築ドライブの修理を自動化し、システムを効果的に自癒させる 成功した近代化のための効果的な推進 したがって、我々はAIがシステムの近代化において我々の親友であることを知っているが、どうやって始めるのか。 ソフトウェアアーキテクチャでAIを効果的に使用するための最初のステップは、効果的なプロンプトングです. あなたが得る結果は、あなたのプロンプトの品質に直接関連しています. そしてあなたのプロンプトの品質は、通常、AIの文脈を与え、具体的であることの結果です。 あなたが何らかの方法であなたのプロンプトに曖昧である場合、結果は非常に間違っている可能性があります。 では、効果的なスピードはどう見えるのでしょうか。 1. Be specific. 「REST API を構築してオーダーを管理する」をクリックしないでください。 この緊急事態は、たぶん誇張的に悪いものの、アーキテクチャとデザインの両方でAI解釈のための重要なスペースを残します。 むしろ、具体的に建築の方向性で早めに: 「Flask と SQLAlchemy を使用してオーダーを管理するための Python REST API を構築します。 HTTP リクエストを処理するためのコントローラー レイヤー (Flask routes) ビジネスロジックのためのサービスレイヤー、 and a repository layer for data access using the SQLAlchemy ORM.” 2. Be thorough. コードの論理だけを言及するのではなく、非機能的な要件も含む。 「Python Flask REST API を拡張して、オペレーティングの強度とメンテナビリティをサポートします。 各入力 HTTP リクエストとその応答状態をログします。Python の内蔵のログアップモジュールを使用して各リクエストの実行時間をログします。 コントローラー レイヤーの Pydantic モデルを使用して、すべての入力リクエストのパイロードを検証します。Validation errors return standardized JSON error responses with clear messages and appropriate HTTP status codes. 検証エラーは、明確なメッセージと適切な HTTP ステータスコードで返します。 レポジトリ レイアウト レイアウト レイアウト レイアウト レイアウト レイアウトレイアウトレイアウトレイアウトレイアウトレイアウトレイアウトレイアウトレイアウトレイアウトレイアウトレイアウトレイアウトレイアウトレイアウトレイアウトレイアウトレイアウトレイアウトレイアウトレイアウトレイアウトレイアウトレイアウトレイアウトレイアウトレイアウトレイアウトレイアウトレイアウトレイアウトレイアウトレ すべてのエラー 応答が、エラー コード、メッセージ、デバッグのオプションの詳細を含む一貫した JSON スケジュールに従うことを確認します。 3. Always be an architect. あなたのアーキテクチャの設計と目標、そしてそれらがシステムにどのように組み込まれるべきかを伝える。 「オーダーシステムのためにモジュール型の電子メール配信システムを開発し、水平にスケールするように設計され、後で独自のマイクロサービスに分離することができる。 Clear Separation of Concerns - クリーンな層にコードベースを構成する: コントローラー レイヤー(Flask Routes):メール送信リクエストを受け入れ、検証します。 Service Layer: Rate limiting、content templating、retriesなどのビジネスルールを扱います。 Repository Layer: SQLAlchemy を使用して、メール送信試行、ステータス、および配信ログの持続性を管理します。 2.国籍: 通話間のセッションまたはリクエスト特定の状態を維持しないでください。 すべての文脈(送信者ID、メールコンテンツ、ヘッダーなど)は、各リクエストに含まれる必要があります。 状態のないコンピューティングノードを維持するために、外部ストア(データベース、キャッシュ、または列)のすべての状態を維持します。 スケーラビリティとマイクロサービスの準備: 各主要な関心事(たとえば、配列の送信、メールのレンダリング、ステータストラッキング)を、後に独立したサービスになることができる内部モジュールとして設計します。 ハードコードの実装を避ける - インターフェイスは各主要コンポーネント(EmailProvider、EmailQueue、TemplateEngineなど)のために定義する必要があります。 すべてのサービスおよびリポジトリ依存を構築者または単純なDIコンテナを通じて注入します。 非機能的な要件: 抵抗性: バックコフ戦略を使用してSMTPエラーと再処理エラーを優雅に処理します。 観察性:リクエストIDと配信メタデータですべての電子メールアクティビティをログします。 拡張性:インタフェース抽象化の背後に複数のプロバイダー(例えば、SendGrid、SES)を簡単にサポートできます。 覚えておいてください:ポンプトは効果的にあなたのアーキテクチャです. 具体的で、文脈を追加し、徹底的に、常に。 Add architectural context to your prompts(あなたのプロンプトに建築的文脈を追加する) 適切な読者は、最後の文に「コンテキストを追加する」が含まれていることに気づきますが、我々はまだその必要性に取り組んでいません。 プロンプトに建築的文脈を追加するには、いくつかの助けが必要です。 アプリケーションアーキテクチャを分析し、GenAIアシスタントにリファクタリングのための構造的なガイドラインを提供するツールで、データサイエンスと組み合わせた静的およびダイナミックな分析を使用して、アプリケーションの論理的なドメインを理解し、これらのドメインの最適な境界を特定します。 vFUNCTION 循環依存 反パターン 建築技術債務 ドメイン制限違反 死のコード さらに あなたはその情報をあなたのエージェントに送り、AIエージェントにあなたが望むコードを書くために必要な情報を与えます。 Step-by-Step 例 上記のステップを通して、コードアシスタントにどのようにアーキテクチャーコンテキストを提供するかを見ていきましょう。 Analyze your app. まずは、アプリケーションから静的およびダイナミックなデータを収集することから始めます. vFunction を使用して、アプリケーション内の潜在的な論理的ドメインとその境界を特定します. このベースラインにより、ツールは、サブオプティマルドメイン境界、ドメイン間クラス依存、リソース依存、高負債クラス、循環依存、およびドメイン間の共有コードなどの関連するアーキテクチャの問題を特定できます。 中規模のアプリケーションとその混ざったビジネスドメイン(球体で表される)とそれに伴う技術的負債の分析。 **Review the architectural TODOs \ Next generate a list of prioritized architectural TODOs, each with a contextual explanation and an AI-ready prompt you can use in tools like Amazon Q or GitHub Copilot. **Use the prompt in your AI assistant. \ Send the generated prompt into your IDE or code assistant. It will understand the context and help you break up god classes, resolve domain pollution, or implement suggested changes to increase the modularity of your code. For example, in the screen shot above we see suggestions for refactoring a circular flow dependency. **Validate and repeat. \ Rerun the analysis after applying changes. It will show you whether modularity improved, which TODOs were resolved, which weren’t, and suggest the next step in the refactoring process. この洞察をあなたのLLMと組み合わせることにより、あなたは構築し、再構築の厳しい仕事をする準備ができている強力な、文脈意識のアシスタントを作成します。 AI is Your Partner in Software Architecture AIはソフトウェアアーキテクチャにおけるあなたのパートナーです AI駆動のコーディングは物語の一部にすぎない。 The real value comes from using those same AI assistants not just to generate code but as a partner to help you modernize and improve your existing software architecture. アーキテクチャに注意を払い、ランタイムベースのコンテキストを使用して効果的で一貫性があり、正確なプロンプトを生成することにより、AIは、古いアーキテクチャの負債を克服し、コードをモジュラー化し、スケーラブルでクラウドネイティブで近代化されたシステムを導入するのに役立ちます。 本当に素晴らしい一日を!