

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 最新のアプリケーションの開発
<a name="modern-apps"></a>

**適切に設計したクラウドネイティブアプリケーションを構築します。**

クラウドネイティブなアプリケーションを組織で適切に設計、構築し、競争力を維持するには、[モダンアプリケーション](https://aws.amazon.com/modern-apps/)の開発プラクティスがきわめて重要です*。*[コンテナ](https://aws.amazon.com/containers/)や[サーバーレス](https://aws.amazon.com/serverless/)コンピューティングといったクラウドネイティブな技術を使用すると、スケーラブルでアジャイルなアプリケーションを構築し、変化し続ける市場需要に適応できます。こうした技術により、リソース使用率の最適化、コスト削減、アプリケーションパフォーマンスの向上などが可能になります。

モダンアプリケーションの設計時には、運用と開発に配慮したアジャイルソリューションを開発します。モダンアプリケーションを実現するには、顧客の需要の変化に自動的に反応し、障害から回復する機能を持たせるとともに、変更の迅速な開発およびデプロイや、アプリケーションパフォーマンスのモニタリングを行えるようにします。また、自己修復に加え、トラフィックが少量でも大量でもスケーリングできる機能を取り入れ、必要であれば、トラフィックがない場合はコストをまったく生じさせない機能も追加します。

クラウドネイティブアプリケーションを適切に設計し、構築するには、基盤技術とそのベストプラクティスを深く理解する必要があります。また、マイクロサービスアーキテクチャを導入して、モジュール式かつ疎結合となるようアプリケーションを設計することで、独立したデプロイとスケーラビリティを実現しなければなりません。こうしたアプローチを取ると、アプリケーションを小規模で管理しやすいコンポーネントに分割し、これらを迅速かつ個別に開発、テスト、デプロイできます。

## Start
<a name="modern-apps-start"></a>

### 最新のアプローチを調査し考察する
<a name="modern-apps-approaches"></a>

最初に、マイクロサービスの開発を可能にするコンテナやサーバーレス技術などのアプローチを調査します。[マイクロサービス](https://aws.amazon.com/microservices/)は、リソースの効率向上、セキュリティの強化、インフラストラクチャコストの最小化などを可能にします。また、既存の差別化アプリケーションとエンタープライズアプリケーションを[モダナイズ](https://docs.aws.amazon.com/prescriptive-guidance/latest/strategy-modernizing-applications/welcome.html)することで、効率を高め、既存投資の価値を最大化できるようにします。さらに、[リプラットフォーム](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-replatforming-cots-applications/welcome.html) (セルフマネージドのコンテナ、データベース、メッセージブローカーをマネージドクラウドサービスに移行する) と[リファクタリング](https://docs.aws.amazon.com/prescriptive-guidance/latest/modernization-decomposing-monoliths/welcome.html) (アプリケーションを再構築してクラウドネイティブアーキテクチャを導入する) を、価値主導の意思決定に基づいて考察します。 

既存のクラウドベースのアプリケーションを効果的なアプローチで更新するには、[Strangler Fig パターン](https://aws.amazon.com/blogs/architecture/seamlessly-migrate-on-premises-legacy-workloads-using-a-strangler-pattern/)を使用して、アーキテクチャを徐々にマイクロサービスに分解する必要があります。この手順は、現代的なアプリケーション方法論の導入に役立つため、そうした技術固有の利点を享受し、組織全体にその価値を示すことができます。必要であれば、[イベント駆動型アーキテクチャ](https://aws.amazon.com/event-driven-architecture/)を活用する個別のマイクロサービスとしてアプリケーションを構築することを検討してください。また、ワークロードのパフォーマンスや信頼性に影響を与えないよう、変更不可能なサービスクォータや物理リソースがアーキテクチャで考慮されていることを確認します。[https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/manage-service-quotas-and-constraints.html](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/manage-service-quotas-and-constraints.html) 

### クラウドネイティブコンピューティング機能を導入する
<a name="modern-apps-compute"></a>

クラウドネイティブコンピューティング機能は、モダンアプリケーション開発のカギとなるものです。このアプローチを取るには、コンピューティングユニットのホスト方法を検討し、各ユースケースやサービスに最適な選択肢を特定する必要があります。例えば、[AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) は、アプリケーションコードを実行するためのサーバーレスメカニズムを備え、イベント駆動型アーキテクチャで重要な役割を果たします。Lambda 関数は、オンデマンドで起動して、定義した最大同時実行数まで並行して実行できるため、スケールしてさまざまなタスクを実行することが可能です。   

### コンテナ化を使用する
<a name="modern-apps-containers"></a>

最新のソフトウェア開発では、アプリケーションとその依存関係の管理がますます複雑になっており、こうした状況は、さまざまな環境においてどの程度の一貫性が必要かを検討しているときに顕著に表れます。このような課題への対処として、Docker などのコンテナ化技術が、アプリケーションとその依存関係をパッケージ化する効果的なソリューションとして新たに注目されています。コンテナを使用すると、アプリケーションのランタイム環境に関係なく、デプロイの一貫性と再現性が確保されるため、ローカル環境での開発をクラウド環境の本番開発と同じ方法で行えます。このアプローチなら、環境内やその設定の不一致によって生じかねないエラーも軽減できます。 

### 最新のデータベースを使用する
<a name="modern-apps-dbs"></a>

最新のデータベースを使用すると、アプリケーション内の各マイクロサービスで要件に沿う適切な目的別データベースを使用できるため、俊敏性とパフォーマンスが向上し、コストも減少します。例えば、あるマイクロサービスで、セッションデータの保存時に NoSQL データベースを使用して高スループットを実現し、別のマイクロサービスで、リレーショナルデータベースを使用して複雑なテーブル結合を実行し、さらに別のマイクロサービスで、量子台帳データベースを使用してブロックチェーンの変更を追跡するなどが考えられるでしょう。 

最新のデータベースは、スケーラビリティと柔軟性を備えており、従来のデータベースよりも、セキュリティ、コンプライアンス、信頼性に優れています。これにより、データの保存および管理が以前よりも効率化され、アプリケーションが適切なデータに適切なタイミングでアクセスでき、パフォーマンスとユーザーエクスペリエンスも向上します。 

モダンアプリケーション開発では、最新のデータベースへの移行がきわめて重要です。適切なデータストレージソリューションを使用すると、データ管理機能を最適化して、効率と信頼性に優れたアプリケーションを提供できます。また、各マイクロサービスを独立させ、それらに適した技術を選択すると、データ機能がさらに最適化されるため、最大限の効率およびスケーラビリティと、最小コストを実現できます。 

## 高度化
<a name="modern-apps-advance"></a>

### 最新のアーキテクチャを最適化する
<a name="modern-apps-arch"></a>

さらなる最適化を実現するには、サーバーレス技術の実装を高度化し、[Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) や [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) などの AWS サービスを利用して、個別にスケーリングおよびデプロイ可能なアーキテクチャを開発します。また、[Amazon Route 53 ](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html)と [AWS Cloud Map](https://docs.aws.amazon.com/cloud-map/latest/dg/what-is-cloud-map.html) を使用してサービス検出の機能を実装し、コンポーネント間でシームレスな通信を確保します。

API バージョニング、キャッシュ、レート制限の導入によって、さまざまなアプリケーションバージョン間で互換性とパフォーマンスを維持するとともに、[AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) とリソースポリシーを使用して、セキュリティを強化します。これにより、インフラストラクチャを保護し、承認済みエンティティにのみアクセスを許可します。

可能であれば、サーバーレスサービスを利用して、基盤インフラストラクチャを管理することなくコンテナを実行します。これにより、コアアプリケーション開発に集中すると同時に、リソース管理とパフォーマンスを向上させることができ、スケーラビリティ、柔軟性、コスト効率の利点も最大活用しやすくなります。

サーバーレスアーキテクチャの複雑さを詳細に把握した上で、こうした高度なプラクティスを取り入れると、改善とファインチューニングの機会を発見でき、ひいては、クラウドネイティブアプリケーションの可能性が最大化します。そのように取り組むことで、より高度なアプリケーションパターンを導入しやすくなるため、全体的なユーザーエクスペリエンスがさらに向上し、ソフトウェア開発プロセスの俊敏性と効率も高まります。

### サービスメッシュ技術を使用する
<a name="modern-apps-mesh"></a>

アプリケーションの構築とデプロイにマイクロサービスアーキテクチャの導入が増えると、こうしたサービス間の複雑さ、セキュリティ、通信を管理することが重要になります。そこで、マイクロサービスのセキュリティ、オブザーバビリティ、信頼性を確保するために重要な役割を果たすのが、Istio、Linkerd、Consul といったサービスメッシュ技術です。

### 可視性とトレーサビリティを確保する
<a name="modern-apps-visibility"></a>

最新のプラクティスを実装すると、開発プロセスの可視性とトレーサビリティが向上するとともに、業界標準とベストプラクティスに容易に準拠できます。また、モダンアプリケーション開発には、可視性とモニタリングが不可欠です。モニタリングおよびログ記録ソリューションを実装し、アプリケーションパフォーマンスに関する貴重なインサイトを提供することで、改善すべき分野を特定し、アプリケーションを最適化できます。さらに、プラットフォームエンジニアリングチームと協力して、アプリケーションエラー、パフォーマンス、コンプライアンスをエンドツーエンドで可視化およびモニタリング可能なツールを利用できるようにすると良いでしょう。これが、問題の迅速な検出、診断、解決につながります。 

## Excel
<a name="modern-apps-excel"></a>

### マイクロサービスを採用する
<a name="modern-apps-microservices"></a>

多くの組織にとって、モダンアプリケーション開発の実現は、ビジネスの成功を意味します。こうした変革の中心となるのは、マイクロサービスであり、こうした強力なアーキテクチャパターンの採用は組織にメリットをもたらします。

マイクロサービスを導入すると、スケーラビリティ、耐障害性、俊敏性に優れたアプリケーションアーキテクチャが実現します。アプリケーションを独立してデプロイできる小規模サービスに分割することで、アプリケーションの他の部分に影響を与えずに、特定のコンポーネントを迅速にイテレーションすることもできます。*サーキットブレーカー*や*バルクヘッド*などの高度な耐障害性パターンは、こうしたアプリケーションの高可用性を確保する上で重要な役割を果たします

[サーキットブレーカー](https://docs.aws.amazon.com/prescriptive-guidance/latest/cloud-design-patterns/circuit-breaker.html)は、安全上の仕組みで、これにより、異常なサービスからの通信を一時的に停止または変更して連鎖的な障害を防ぎ、復旧を行えます。[バルクヘッド](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_fault_isolation_use_bulkhead.html)を使用すると、リソースを分離し、起こり得る障害の影響範囲を狭められます。こうしたパターンの組み合わせにより、予期しない障害や問題に耐え、最適なパフォーマンスが維持される堅牢なアーキテクチャを構築できます。

マイクロサービスの実装で、もう 1 つ重要なのは、ドメイン駆動型設計 (DDD) の原則の導入です。DDD では、ビジネスドメインの理解を共有し、適切に構造化したソフトウェア設計に反映させることに重点が置かれています。このアプローチによって、よりまとまりのある保守可能なマイクロサービスが実現し、組織のニーズに合わせたアプリケーションの進歩が可能になります。

サービス間通信の最適化は、マイクロサービスベースのアプリケーションでもきわめて重要です。gRPC や GraphQL などの高度なプロトコルを実装すると、サービス間の通信効率が大幅に向上します。また、こうしたプロトコルにより、型の安全性、低レイテンシー、柔軟性などを実現する機能を得られるため、アプリケーションの全体的なパフォーマンスおよび保守性を改善しやすくなります。

マイクロサービスを導入した組織では、イノベーション、俊敏性、コラボレーションを促進する環境が実現します。ビジネス能力を中心に開発チームが編成されることが多く、こうしたチームは、継続的インテグレーションと継続的デリバリー (CI/CD) のプラクティスに重点を置きます。意思決定、実験、迅速なイテレーションを行う権限を持ち、責務と説明責任を共有する文化を受け入れています。