モダンアプリケーション入門
2025/03/10
プログラミングモダンアプリケーションとは
モダンアプリケーションとは、継続的にアプリケーションの設計、構築、管理を見直し、市場やユーザーのニーズの変化に柔軟に対応し、顧客価値を最大化するために進化し続けることのできる開発戦略のこと。モダンアプリケーションの導入によって、例えば次のような恩恵が受けられる。
モダンアプリケーションを実現するための構成要素として、しばしば次のようなものが挙げられる。
クラウドネイティブ
クラウドネイティブとは、AWSなどのクラウドサービスの利用を前提にアプリケーションを設計する開発手法で、サーバーの管理の手間が省きながら、必要な分だけコンピューティングリソースを利用することができるため、モダンアプリケーションの実現が容易になる。
モジュラーアーキテクチャ
モジュールアーキテクチャでは、アプリケーションをモジュールごとに分離するため、他のモジュールに影響を与えることなく、アプリケーションの各モジュールを進化させることが容易になる。これによって、継続的にアプリケーションの設計を見直し、変更に柔軟に対応していくことが可能になる。
代表的なモジュラーアーキテクチャには、モノリシック、モジュラーモノリス、マイクロサービスがある。

サーバーレス技術/コンテナ技術
サーバーレスを利用すると、必要なランタイムやソフトウェアのインストール、継続的なバッチの適用などをクラウドサービス側に任せることができ、運用コストを大幅に削減し、ユーザーはアプリケーション開発に集中できるようになる。その他にも、サーバーレスによって得られる恩恵には次のようなものがある。
サーバーレスを検討する際に、コンテナが比較される場合も多い。コンテナはアプリケーションの実行環境をパッケージ化し、任意の場所に持っていってデプロイ、実行することを可能にした技術。コンテナを利用することで、手元の開発環境から本番環境まで、どこでも一貫した形でアプリケーションを実行できる。さらに、コンテナオーケストレーターを利用することで効率的な運用が可能になり、ユーザーはアプリケーション開発に集中できるようになる。
サーバーレスとコンテナをどのように使い分けるかについての明確な回答は存在しないが、指針の一つとして「どの選択肢がアプリケーション開発により多くの時間を投下できるか」という観点での考え方がある。この考え方に従うと、AWS LambdaとAmazon ECSのどちらでも要件を満たせるのなら、アプリケーションの構築に必要な作業が少なく、よりアプリケーション開発に集中できるAWS Lambdaを採用するということになる。一方で、アプリケーションの実行時間が長く、AWS Lambdaの制限に引っかかってしまう場合は、ECSを採用することになるが、その際コンテナの実行環境の選択(Amazon EC2とAWS Fargateのどちらか)についても、どちらでも要件を満たせるのなら、同様の基準から、よりアプリケーション開発に集中できるAWS Fargateを採用することになる。
データベース技術
モダンアプリケーションでは、データベースも要所要所で要件にあったものを選択する必要がある。データベースを選択する際に検討すべき要件を以下に示す。
一例としてあるアプリケーションのお気に入り機能のデータ要件を以下に示す。
モニタリング
ユーザーのニーズに合わせて、アプリケーションを進化させていくには、ビジネスやアプリケーションの状態を適切にモニタリングして把握しておく必要がある。取得すべきデータは大別して、ビジネスデータ、運用データ、システムデータの3つがある。それぞれのデータの具体例を以下に示す。重要なのは、データを取得できるようにアプリケーションが構築されていることである。各自の状況に応じて、ビジネスやアプリケーションの状態をモニタリングするためにどんなデータが必要で、そのデータを取得するために、どのようにアーキテクチャを構成し、どのようにアプリケーションを実装するか、事前に検討しておくと良い。
ビジネスデータ
運用データ
システムデータ
CI/CD(継続的インテグレーション/継続的デリバリー)
アプリケーションを継続的に進化させていくには、複数のエンジニアのソースコードが継続的に統合され(継続的インテグレーション)、それをトリガーにしてテスト、ビルド、リリースが自動的に実施され、ユーザーのもとに継続的にアプリケーションが提供される(継続的デリバリー)ことが重要である。
CI/CDパイプラインの構築は、それ自体が直接的にユーザーに価値を提供するわけではないので、アプリケーション開発と比較して優先順位が低くなりやすい。だが、CI/CDパイプラインが構築されていないと、面倒でバグの入り込みやすい手動でのデプロイ作業を何度も繰り返すことになり、そのせいでリリースの頻度が1ヵ月に1回、2ヵ月に1回と少なくなってしまうこともある。初めから自動化の恩恵を受けられるように、開発の初期段階でCI/CDパイプラインを構築しておくことが望ましい。