よく、サーバーを自社内からクラウドへ移行する際や、コンテナ技術の採用を示す際に「モダンアプリケーション」という言葉が使われているケースを見かけます。しかし、それらの技術を使っていることがすなわちモダンアプリケーション、という認識で正しいのでしょうか?
その答えは「NO」です。
AWS Summit Online 2021で行われたセッション「コンテナ・サーバーレスを使えばモダンアプリケーションになりますか?」では、コンテナ化やサーバーレス化はモダンアプリケーションを構成する一要素に過ぎないと結論付けられています。
では、モダンアプリケーションがモダンアプリケーションたる所以はなんなのでしょうか? この記事では、「モダンアプリケーション」とは一体なんなのか、どのような要件を満たせば、「これはモダンアプリケーションです」と言えるのか、そのメリットとは何か、技術にあまり詳しくない人でも分かるように解説しました。
目次
モダンアプリケーションの定義とは
モダンアプリケーションの定義とは、変化に柔軟に対応し、継続的に進化する能力を持つことです。
冒頭で取り上げた資料「コンテナ・サーバーレスを使えばモダンアプリケーションになりますか?」でも、「モダンアプリケーションとは素早いイノベーションによって競争的差別化を作り出す⼿段となるもの」と結論付けているほか、AWS、Azureによるモダンアプリケーションの説明を確認すると、「迅速なイノベーションを実現するもの」であることが分かります。
▼AWSによるモダンアプリケーションの定義
モダンアプリケーション開発(現代的なアプリケーション開発)は、迅速なイノベーションのサイクルを通じて、アプリケーションを設計、構築、管理するアプローチです。このアプローチにより、チームの機動性が向上し、アプリケーションの信頼性、安全性、およびスケーラビリティが向上します。
※日本語サイトはまだ開設されていないようですので、英語をそのまま日本語に訳しています。
出典:Modern application development on AWS(Amazon AWS)
▼Azureによるモダンアプリケーションの定義
最新のアプリケーション開発とは、疎結合のマイクロサービス、マネージド データベース、AI、DevOps のサポート、組み込みの監視機能を備えたクラウドネイティブ アーキテクチャを使用することで、迅速なイノベーションを可能にするアプローチのことです。
出典:モダン アプリケーション開発(Microsoft Azure)
まとめると、
- ビジネスや市場のニーズの変化に素早く対応できるか
- 一度作って終わりではなく常に進化し続けるアプリであるか
- それを実現するため、インフラやセキュリティ、デプロイなどを自動化し手作業を減らしているか
- 独立したサービスを組み合わせた柔軟な設計としているか
- 技術よりも顧客の価値を優先しているか
といった要素を満たしていることが「モダンアプリケーション」と言えるでしょう。
最新技術を使っていても、変化に対応できず、改善を怠り、顧客価値を忘れてしまうようでは、本当の意味でのモダンアプリケーションとは言えないのです。
モダンアプリケーションを構成する要素の例
ただし、デジタル庁の資料では、「モダン技術によって構築されているアプリケーション」とも定義されています。
モダン技術によって構築されているアプリケーション。令和 4 年現在であれば、マイクロサービスアーキテクチャ、API、クラウドネイティブ、マネージドサービスのみによる構成等が特徴。
出典:デジタル社会推進標準ガイドラインDS-310
政府情報システムにおけるクラウドサービスの適切な利用に係る基本方針
その「モダン技術」が何かの明確な決まりはありませんが、2024年現在、以下のような技術や特徴を持つものがモダンアプリケーションと呼ばれる傾向があります。特によく言及される要素については太字で強調しました。
- アーキテクチャ(アプリの動かし方)
- クラウドネイティブ
- マイクロサービス
- APIファースト
- 開発プロセス
- DevSecOpsとCI/CD
- Infrastructure as Code (IaC)
- 技術スタック
- コンテナ技術
- サーバーレス技術
- データベース技術
- フロントエンド技術
- 運用とモニタリング
- オートスケーリング
- モニタリングとロギング
- セキュリティとコンプライアンス
- ゼロトラストセキュリティ
- 自動セキュリティスキャン
- エンドユーザー体験
- モバイルファースト/レスポンシブデザイン
- リアルタイムデータ更新
- オフラインファースト
上記で挙げた各要素について、下記に詳細をまとめてみました。
自社のアプリケーションをモダンアプリケーションと言っていいか悩んでいる方は、これらの要素がいくつ当てはまるかチェックしてみるといいかもしれません(ただし、変化に柔軟に対応し、継続的に進化する能力を持つアプリであることが最重要であることを忘れずに)。
※上記のリストで太字にした項目には【要】を付けたので、要点だけ掴みたい人は【要】の項目だけ読むことをおすすめします。時間のない方は以下構成要素の説明は飛ばして読み進めていただいて構いません。
構成要素1. クラウドネイティブ【要】
クラウドネイティブとは、アプリケーションをインターネット上のクラウドサービス(AWSやGoogle Cloudなど)を使って動かす設計方法です。これにより、自分たちでサーバーを管理する手間がなくなり、必要な分だけ柔軟に使える仕組みが実現します。サーバーを直接触るのではなく、自動的に処理してくれる仕組み(例: AWS Lambda)や、プログラムを効率よく管理・実行するシステム(例: Kubernetes)を利用します。
構成要素2. マイクロサービス【要】
大きなアプリを、小さな部品に分けて作る方法です。それぞれの部品は独立して動くため、壊れても他の部品には影響しません。また、それぞれを個別に修正・改善できるため、効率的で柔軟な運用が可能です。部品同士は決まったルール(API)でやり取りします。
構成要素3. APIファースト
API(Application Programming Interface)は、アプリケーションが「言葉」や「約束事」を使ってやり取りを行うようなものです。APIファーストの設計では、この「やり取りのルール(API)」を最初にしっかり決めます。
たとえば、配達アプリが地図情報を取得する場合を考えてみましょう。
- アプリ:「この住所の配達先までの最短ルートを教えて!」(APIリクエスト)
- Google Maps:「最短ルートはこれです!」(APIレスポンス)
これにより、アプリの見た目(フロントエンド)と裏側(バックエンド)を分けて開発できるため、効率よく作業が進められます。
構成要素4. DevSecOpsとCI/CD【要】
「DevSecOps」は、開発チーム、運用チーム、そしてセキュリティチームが連携して、セキュリティを組み込みながらアプリを素早く改善する考え方です。この実現のために、プログラムのテストや本番環境への反映を自動化する「CI/CD」に加え、セキュリティスキャンや脆弱性チェックなどのプロセスも自動化して統合します。これにより、人手によるミスが減るだけでなく、セキュリティリスクを早期に発見して迅速に対応できます。
構成要素5. Infrastructure as Code (IaC)
サーバーやネットワークの設定を手作業で行うのではなく、プログラム(コード)として管理する方法です。これにより、同じ環境を何度でも簡単に作ることができ、設定ミスを減らせます。
構成要素6. コンテナ技術【要】
コンテナとは、アプリケーションを動かす小さな箱のようなものです。これを使うと、どこでも同じ環境でアプリを動かせるため、トラブルが起きにくくなります。さらに、多くのコンテナを効率よく動かすシステム(Kubernetesなど)を使うことで、大規模なシステムも簡単に管理できます。
構成要素7. サーバーレス技術【要】
「サーバーレス」は、アプリを動かすためのサーバーを意識せずに使える仕組みです。必要なときだけ処理を実行し、自動で拡張したり縮小したりしてくれるため、無駄を省きつつ便利に使えます。
構成要素8. データベース技術
- NoSQL(MongoDB、DynamoDB、Cassandra): 柔軟なデータの管理ができる仕組みで、素早くデータを処理できます。
- 分散型データベース(CockroachDB、FaunaDB): 世界中に分散されたデータを効率よく管理できるため、大量のデータを扱うアプリに向いています。
構成要素9. フロントエンド技術
最新のウェブ技術(ReactやVue.jsなど)を使うことで、使いやすく魅力的な画面を作ります。また、インターネットが遅い環境でも快適に動作する仕組み(PWA)を取り入れることで、誰にとってもストレスの少ない体験を提供します。
構成要素10. オートスケーリング
アクセスが増えると自動的に必要なリソースを増やし、アクセスが減れば減らす仕組みです。これにより、費用を最適化しつつ、利用者が快適にサービスを使えます。
構成要素11. モニタリングとロギング【要】
アプリの動きや問題点をリアルタイムで監視する仕組みです。これにより、問題が起きたときにすぐに対処できるため、利用者に悪影響を与えることが減ります。
構成要素12. ゼロトラストセキュリティ
「全てのアクセスを疑う」という考え方で、安全性を高めます。特定の人だけが必要な情報にアクセスできる仕組みを徹底しています。
構成要素13. 自動セキュリティスキャン
プログラムを作る早い段階で、セキュリティの問題がないかをチェックする仕組みです。これにより、リリース前に問題を解消できるため、安全なアプリを提供できます。
構成要素14. モバイルファースト/レスポンシブデザイン
スマホやタブレット、パソコンなど、どのデバイスでも見やすく、使いやすいデザインを作ります。
構成要素15. リアルタイムデータ更新
例えば、チャットや株価の表示など、最新情報がすぐに画面に反映される仕組みです。
構成要素16. オフラインファースト
インターネットがつながらない場所でも、一部の機能が使えるように設計されています。旅行中や地下鉄でも安心です。
AWSの使用はモダンアプリケーションに必須?
モダンアプリケーションの特徴として、よく例に挙げられるのがAWSです。
その理由は、モダンアプリケーションの特徴の要である、マイクロサービスアーキテクチャ、自動化、サーバーレス、そして強固なセキュリティを含む新しい設計・実装・運用管理モデルにとって、AWSが重要な役割を果たしているから。とはいえ、これらの要素は、AWSに限らず、他のクラウドプロバイダーでも提供されています。
それなのになぜ、AWSがモダンアプリケーションの特徴としてここまで重視されているのでしょうか? その理由は以下の4点です。
- 早くからクラウドサービスを提供し、モダンアプリケーション開発のためのツールと環境を積極的に開発してきたから
- Amazon ECS、AWS Lambda(サーバーレス)、Amazon EKS(Kubernetes)など、モダンアプリケーション開発に必要な幅広いサービスを提供しているから
- 多くのパートナー企業と協力し、モダンアプリケーション開発のためのソリューションを提供しているから
- クラウド市場で大きなシェアを持ち多くの企業がAWSを利用しているので、AWSに関する情報やノウハウが豊富に蓄積されているから
AWSはモダンアプリケーションの定義や基準を専有するものではありませんが、その普及と発展に大きく貢献してきました。他のクラウドプロバイダー、特にMicrosoft AzureやGoogle Cloud Platform(GCP)も同様のサービスを提供しているので、自社ともっとも相性のいいサービスを見つけて利用するのがいいでしょう。
モダンアプリケーションのメリット
モダンアプリケーションを定義する、
- ビジネスや市場のニーズの変化に素早く対応できるか
- 一度作って終わりではなく常に進化し続けるアプリであるか
- それを実現するため、インフラやセキュリティ、デプロイなどを自動化し手作業を減らしているか
- 独立したサービスを組み合わせた柔軟な設計としているか
- 技術よりも顧客の価値を優先しているか
といった要素は、すべてメリットに直結します。下記に、作り手や開発企業、利用者にとっての具体的なメリットの例をまとめてみました。
1. 使う人の増加に柔軟に対応できる
たとえば、ショッピングアプリや動画配信サービスで利用者が急増しても、モダンアプリケーションならスムーズに対応できます。必要に応じてシステムを自動的に拡張する仕組みがあるため、アプリが動かなくなる心配が少なくなります。これにより、利用者はいつでも快適にサービスを利用でき、企業にとっても信頼性の向上につながります。
2. 新しい機能をスピーディーに提供
「モダンアプリケーション」は、アプリの改良や新しい機能の追加を効率よく行えるよう設計されています。従来のアプリでは更新作業に数週間から数カ月かかることもありましたが、モダンアプリケーションではこれを大幅に短縮できます。たとえば、スマホアプリに便利な機能が追加される頻度が高まることで、利用者にとって魅力的なサービスがより早く提供されます。
3. トラブルに強く、安心して使える
モダンアプリケーションはトラブルの影響を最小限に抑える仕組みが組み込まれています。たとえば、一部の機能で不具合が起きても、他の部分には影響を与えない設計がされています。また、最新のセキュリティ技術を取り入れているため、データの漏洩や不正アクセスのリスクも大幅に低減されています。
4. コストを抑えながら高いパフォーマンスを提供
クラウド技術を活用しているモダンアプリケーションは、必要な時だけシステムの規模を大きくしたり小さくしたりすることができます。そのため、無駄なコストを削減しながら、必要な性能を維持できます。企業にとっては運用コストの削減につながり、その分、サービス向上に投資する余裕が生まれます。
まとめ
モダンアプリケーションを定義するのは、「変化に柔軟に対応し、継続的に進化する能力を有すること」。これにより、市場の需要やユーザーのニーズの変化に迅速に対応でき、新機能の追加や改善がスムーズに行えます。
しかし、その多くの利点ゆえに開発は複雑で高度なスキルを必要とします。例えば、マイクロサービスアーキテクチャやコンテナ技術の導入は、アプリケーションの管理やセキュリティに新たな課題を生みます。また、複数チームの緊密な連携や、最新技術への迅速な対応が求められるため、従来の開発手法では対応が難しい場合もあります。モダンアプリケーション開発にはこれらの複雑性を克服する体制と経験が不可欠です。
アイスリーデザインではこうした課題を解決するため、専門の知識を活かしてモダンアプリケーション開発の支援を行っております。
UI/UXを重視したプロダクト開発手法を採用し、クラウドネイティブ技術とアジャイル開発で柔軟かつスケーラブルなアプリケーションを提供します。SwiftやKotlinなどの最新技術やAIを活用し、多様なニーズにも対応可能。グローバルリソースを活かしたラボ型開発で、高品質なモダンアプリケーションを提供しています。
最新の技術を活用し、顧客ニーズにあったアプリケーション、サービスを構築したいと考えていらっしゃる方は、ぜひお問い合わせください。