こんにちは!カックこと吉田慶章です。本記事では、「モダンアプリケーション」とは何なのか、何ではないのか、そして、アプリケーションの開発に注力する必要性を紹介します。本記事の読者の皆さんがモダンアプリケーションとは何なのかを理解し、モダンアプリケーションに取り組む第一歩を踏み出すきっかけになれば嬉しく思います。
モダンアプリケーションとは何なのか
まずは、モダンアプリケーションとは何なのか、そしてモダンアプリケーションが求められる背景を紹介します。
変化に迅速に対応できる俊敏性が求められている
近年、どのような業界でも企業にはイノベーションを促進し、変化に迅速に対応できる俊敏性が求められています。また、多くの業界において、小規模だと思っていた競争相手がイノベーションに注力した結果、たった数ヶ月で大きな差を付けられてしまうことさえあります。さらに、直近の例としてはAIの普及もあり、どのようにAIを活用するのか、どのようにビジネスに組み込むのか、といった意思決定が求められていることもあるのではないでしょうか。
ビジネスでインターネットを活用する場合、目指すべき未来(イノベーション)を技術的に実現するためにアプリケーション(Webサービスなども含みます)を開発することが多いはずです。本記事の読者の皆さんは、何かしらのプロジェクトでソフトウェアエンジニアとして働かれていたり、職種さえ違えど、アプリケーション開発の現場で働かれていたりするのではないでしょうか。もちろん、これからソフトウェアエンジニアとして働きたいから本記事に興味を持った、という方もいると思います。
このアプリケーションは、多くの場合で一度作って終わりではなく、ビジネスや市場のニーズの変化によって、何度も何度も変化を積み重ねます。先ほど変化に迅速に対応できる俊敏性が求められている、と書きましたが、言い換えると、ニーズの変化に追随してアプリケーションを常に変化させられることが重要で、これこそがそのアプリケーション、そしてビジネスの強みになり、差別化にもつながります。
なお、「変化」と書きましたが、この言葉には広い意味があります。たとえば、アプリケーションに新機能を追加することも変化ですし、既存機能をより使いやすく改善することも変化です。これらは、アプリケーションを使う「ユーザー向けの」変化と言えるかもしれません。さらに、アプリケーションを稼働させているサーバーにパッチを適用することも変化ですし、機能は変えずに継続的なコスト最適化を実現する取り組みも変化です。また、アプリケーションのアーキテクチャ全体を刷新するようなことも変化です。これらはアプリケーションを運用する「内部向けの」変化と言えるかもしれません。
モダンアプリケーションとは
さて、AWS(Amazon Web Services)では、アプリケーションの設計、構築、管理を継続的に見直し、変化を受け入れ続ける開発戦略のことを、モダンアプリケーションと呼んでいます。モダンアプリケーションという言葉自体は様々なところで使われていると思うので、ここではAWSにおけるモダンアプリケーション、という前提で話を進めたいと思います。
「モダンアプリケーション - ユースケース別クラウドソリューション」の「よくある質問」に載っている表現を引用すると、モダンアプリケーションによって「チーム全体の価値実現の速度、頻度、整合性、安全性を高めることができます。」と書かれています。「価値実現の速度、頻度」という表現は「変化に迅速に対応できる俊敏性」と似たことを意味しています。さらに、このドキュメントには、モダンアプリケーションを構築するべき理由、モダンアプリケーションの構築に使えるAWSサービス、モダンアプリケーションをより深く学ぶためのリソース、など多くの情報がまとまっています。
モダンアプリケーションとは何ではないのか
既に紹介した通り、モダンアプリケーションとは変化を受け入れ続ける開発戦略のことであり、必ずしも「モダンな」技術を使うことではありません。言い換えると、モダンな技術(モダンな技術とは?という疑問もあると思いますが、いったん置いておきましょう)を使っていても、リリース頻度が低く、運用作業に追われて、アプリケーションがボトルネックになっているのであれば、定義上のモダンアプリケーションとは言いにくいでしょうし、逆に昔ながらの枯れた技術(ネガティブな意味ではなく広く使われてきた、という意味です)を使っていても、常にニーズに変化に追随できるアプリケーションになっていて、アプリケーションが価値を出し続けていれば、それはモダンアプリケーションと言えるでしょう。
なお、AWS Summit Online 2021で発表されていた「コンテナ・サーバーレスを使えばモダンアプリケーションになりますか?」は素晴らしい内容でした。本記事と合わせて見ていただくと良いと思います。
それでも、この「モダンアプリケーション」という言葉を聞くと、誰しも「最先端の技術(=モダン)」や「最近流行っている技術(=モダン)」を使うんだな、というニュアンスを感じるのではないでしょうか。筆者自身も言葉だけを見ればそういう意味合いを感じます。
さらに、先ほど紹介した「モダンアプリケーション - ユースケース別クラウドソリューション」の「よくある質問」に「モダンアプリケーションとはどのようなものですか?」という質問があり、その回答として、以下が載っています。
モダンアプリケーションは、最新のテクノロジー、アーキテクチャ、ソフトウェア配信プラクティス、運用プロセスを組み合わせたアプリケーションです。チーム全体の価値実現の速度、頻度、整合性、安全性を高めることができます。通常、モダンアプリケーションでは疎結合化された分散型テクノロジーを活用して、イベント駆動型のサーバーレスコンポーネントを重視することで面倒な単純作業を削減できるので、チームがより多くの時間を顧客のための価値創造に充てられるようになります。また、運用とセキュリティのツールを活用することで、高いデプロイ信頼性と一貫性が実現されています。そのため、1日に何度も安全にデプロイすることが可能です。モダンアプリケーションのインフラストラクチャ、セキュリティ、デプロイなどの機能は自動化されているため、手動プロセスや大規模な管理体制での運用よりもスピーディです。
「最新のテクノロジー」や「疎結合化された分散型テクノロジー」、「イベント駆動型のサーバーレスコンポーネントを重視する」など、やはりモダンな技術やアーキテクチャが推奨されているじゃないか!と思うのではないでしょうか。
アプリケーションの開発に注力する
モダンな技術という表現が適切かどうかはわかりませんが、サーバーレスやコンテナという技術は比較的新しい世代のもので、モダンアプリケーションでも推奨されています。これはなぜなのでしょうか。
まず、サーバーレスでは、アプリケーションを稼働させているインフラストラクチャを基本的には意識することなく、アプリケーションの開発(実現したいこと)に集中できます。さらに、アクセスが集中したような場合でも、スケーリングの仕組みがサービス側に組み込まれています。よって、シンプルにアプリケーションを開発できる選択肢の一つとなります。
そして、コンテナでは、ミドルウェアやコードをパッケージングし、あらゆる環境で稼働できる可搬性や移植性に優れています。さらに、コンテナオーケストレーションと呼ばれるコンテナのスケジューリングやスケーリングなどを行う多機能な仕組みを活用することで、大規模なアプリケーションでも効率的な運用を実現できます。
他にも、サーバーレスやコンテナを選択することのメリットはありますが、このようにアプリケーションの開発により集中できる仕組みがあり、その結果、変化に迅速に対応できる俊敏性につながるからこそ、モダンアプリケーションの構成要素として取り上げられていると言えます。
まとめ
いかがでしょうか。本記事では、モダンアプリケーションとは何なのか、何ではないのか、そして、アプリケーションの開発に注力する必要性を紹介しました。読者の皆さんが、モダンアプリケーションに取り組む第一歩を踏み出すきっかけになれば嬉しく思います。
なお、本記事の中で、モダンアプリケーションは必ずしも「モダンな」技術を使うことではありません、と書きました。それでも、ソフトウェアエンジニアとして、モダンな技術に対するアンテナを張り、積極的に試し、チャンスがあればプロダクション環境でも使いたい、という気持ちもあるのではないでしょうか。
本記事で紹介したポイントを意識していただき、もし「なぜこの技術を採用したの?」と聞かれたときに何かしら説明できる理由を考えておくことは重要だと思いますが、最終的には「正直使ってみたかったから(モダンな技術を使いたい駆動)」でも良いのかもしれないなと思っています。本記事の読者の皆さんは、技術選定という点において、どのように考えますか?