Alan Zeichick |シニア・ライター| 2025年10月8日
クラウドネイティブ・コンピューティングとは、クラウド・プラットフォームの機能を最大限に活用したアプリケーションの設計、作成、導入、実行の方法です。従来のソフトウェア(モノリシック・ソフトウェアと呼ばれることもあります)はデータセンターでもパブリック・クラウドでも実行できますが、そのようなソフトウェアではクラウド環境のスケーラビリティとコスト効率を活用することはできません。
そこで登場するのが、クラウドネイティブ・コンピューティングです。. クラウドネイティブ・ソフトウェアは、サーバーにインストールされる単一のアプリケーションとして作成されるのではなく、何十、何百、あるいは何千もの小さなソフトウェアから構成されます。マイクロサービスと呼ばれるこれらの断片は、クラウド・サーバーにインストールされるコンテナに格納されます。そして、マイクロサービスは高速でセキュアなネットワークを介して通信し、連携してビジネス上の問題を解決します。
このモジュール式アプローチの利点は何でしょうか。数多くあるので、探っていきましょう。ここでは最も大きなメリットを4つ紹介します。
それでは、クラウドネイティブ・コンピューティングの概念をより深く理解し、その詳細を説明するために使用される用語を紹介しましょう。
「クラウドネイティブ」という用語は、クラウドにある分散コンピューティングを利用する方法でアプリケーションを設計、構築、導入、実行および管理するという概念を指します。クラウドネイティブ・アプリケーションは、クラウドが提供するスケール、弾力性、回復力、柔軟性を活用するように設計されています。
クラウドネイティブを実現するオープン・スタンダードの多くを管理する独立組織、Cloud Native Computing Foundation (CNCF)は、このコンセプトを次のように定義しています。
クラウドネイティブ・テクノロジーは、パブリック・クラウド、プライベート・クラウド、ハイブリッド・クラウドなど、最新の動的環境でスケーラブルなアプリケーションを構築し、実行できるようにします。コンテナ、サービス・メッシュ、マイクロサービス、不変インフラストラクチャ、宣言的APIは、このアプローチの一例です。
これらの手法により、回復性を備え、管理可能で監視可能な疎結合システムが実現します。堅牢なオートメーションと組み合わせることで、エンジニアは最小限の労力で、大きな影響を与える変更を頻繁かつ予測可能に行うことができます。
この定義の解明には時間をかける価値があります。
スケーラブルなアプリケーションとは、ソフトウェアの書き換えや再設計の必要なく、ワークロードの増加に対応できるアプリケーションです。この定義における動的環境とは、Oracle Cloud Infrastructure (OCI)などのクラウド・コンピューティング・プラットフォームのほか、あらゆる主要サービスプロバイダーのパブリック・クラウド、プライベート・クラウド、ハイブリッド・クラウドを指します。
この定義におけるテクノロジーとは、個々のマイクロサービスを格納するコンテナと、セキュリティ、観測可能性、ポリシー実施、サービス・ディスカバリーをサポートする高速ネットワークを介してそれらのコンテナを結びつけるサービス・メッシュ・インフラストラクチャです。不変インフラストラクチャとは、一度導入されたコンテナは決して変更されず、代わりに注意深く制御された方法で置き換えられることを意味します。これにより、分散アプリケーションは予測可能かつ複製可能なものになるため、コンテナやマイクロサービスのすべてのコピーがまったく同じものになります。
最後の非常に重要なコンセプトは、「疎結合」です。これは、マイクロサービスが他のマイクロサービスと連携するときに、宣言的APIと呼ばれる、マイクロサービスが行うこと、マイクロサービスが必要とするデータ、マイクロサービスがその作業を完了した後に返すデータを丹念に記述した、明確に定義されたプロトコルによって通信する方法を認識してることを意味します。マイクロサービスの内部構造は非表示で、アプリケーションの他の部分に影響を与えることなくいつでも変更できるため、アプリケーション全体が弾力的でスケーラブルになり、更新が容易になります。
クラウドネイティブ・アプリケーションは、パブリック、プライベート、ハイブリッド、マルチクラウドなど、あらゆるクラウド・アーキテクチャで実行できます。パブリック・クラウドとは、クラウド・アプリケーションとエンド・ユーザーまたは企業のデータセンターとの間でインターネットを介してデータが伝送されるクラウドです。プライベート・クラウドでは、データセンター内に設置されたクラウド・サービスのように、データがすべて安全なネットワーク内で転送されます。ハイブリッド・クラウドは、パブリック・クラウド、プライベート・クラウド、企業のデータセンターを組み合わせて使用します。さらに、マルチクラウドの導入は複数の商用クラウドプロバイダーにおよび、アプリケーションの一部はOCIで、別の一部はMicrosoft Azureなどで実行されることがあります。
主なポイント
クラウドネイティブ・アプリケーションは、軽量で自己完結型のコンテナにパッケージ化された、独立したマイクロサービスとして設計されています。これらのコンテナは移植性が高く、需要に応じて迅速にスケールアップまたはスケールダウンできます。マイクロサービスをコンテナにカプセル化することで、クラウドネイティブは、データセンターや商用クラウド サービスを含む広範なオペレーティング環境へのシームレスな導入を実現し、Linux や Windows などの異なる種類のサーバー上で実行することができます。
最も一般的なクラウドネイティブの設計では、アプリケーションはその機能を数十、数百、あるいは数千のマイクロサービスに分割し、それぞれが特定の仕事をするように設計されます。いったん記述されると、各マイクロサービスはコンテナ・イメージ、つまりサービスにロードして実行できる配信ビークルにインストールされます。コンテナの最も一般的な標準は Docker であり、ほぼすべてのクラウド・プロバイダーによってサポートされているCNCFのオープンソース形式です。
完成したエンタープライズ・アプリケーションには、何千ものDockerコンテナが存在する可能性があります。これらすべてのコンテナをクラウド・サービスに導入し、適切なセキュリティと高速ネットワークで配線し、1つのマイクロサービスからのメッセージが適切な受信者にルーティングされるようにし、スケーラビリティと時折発生するサービス障害に対処する方法とはどのようなものでしょうか。そこで、オープンソースのKubernetesプラットフォームが登場します。Dockerと同様に、KubernetesはCNCFによってサポートされており、業界標準となっています。詳細は省きますが、Kubernetesは大規模なクラウドネイティブ・アプリケーションの実行、管理、スケーリングに必要な複雑な配管をすべて処理および自動化します。
Dockerコンテナ内のマイクロサービスと、Kubernetesによってクラウドサービス上に導入されたDockerコンテナにより、完全でスケーラブルかつ弾力性のあるクラウドネイティブ・アプリケーションが実現します。
クラウドネイティブ・アプリケーションの対極にあるのは、従来型アプリケーションまたはモノリシック ・アプリケーションと呼ばれるもので、通常は単一の開発チームによって単一のコードベースとして設計されます。ソフトウェアは開発チームによって記述およびテストされた後、運用チームに渡され、サーバーに導入されます。ソフトウェアに欠陥がある場合、開発チームは問題を発見し、ソフトウェアを修正し、新しいバージョンを運用チームに渡します。その後、運用チームは元のソフトウェアを停止し、置き換え版をインストールして再起動します。新しい機能を追加する場合も同じプロセスを踏んで、アプリケーション全体を置き換えて再インストールする必要があります。
一方、クラウドネイティブ・アプリケーションは、多数のマイクロサービスの集合体として記述され、各マイクロサービスはそれぞれ別個のソフトウェアです。これらのソフトウェアの一部は、アプリケーションの残りの部分に影響を与えることなく、独立して設計、コーディング、テスト、導入されるため、変更プロセスが高速化し、更新がスムーズになります。開発者は、プログラミング言語を含め、構築する特定のマイクロサービスに最適なツールを選択することができます。
例を挙げてみましょう。仮に自宅のゲスト用バスルームの蛇口から水漏れが始まったとします。それを直すには、ハウス4.1から引っ越し、水漏れのないハウス4.2に取り替えてから、再び入居する必要があります。シングルシンクからダブルシンクへの交換はご希望ですか。引っ越してハウス4.3をインストールします。それがモノリシック、つまり従来のソフトウェア・モデルです。そんなことをしますか? もちろん、そんなことはしません。配管工が蛇口を取り替えたり、請負業者がゲスト用バスルームを改造するだけで、家の他の部分には影響を与えません。それがクラウドネイティブ・モデルです。
クラウドネイティブ・コンピューティングの導入により、このモデルの利点を理解する上で重要な新しい概念や用語も数多く登場しました。主な事項は以下の通りです。
Kubernetesは高可用性(HA)を目的として設計されています。故障したコンテナを自動的に修復する機能は、クラウドネイティブのバックボーンです。これらの軽量で自己完結型のパッケージは、多くの場合 Dockerで作成され、異なるコンピューティング環境にまたがる一貫したアプリケーションの実行に必要なすべての依存関係を含みます。コンテナ化により、アプリケーションの移植性が向上し、迅速な導入が可能になります。
コンテナは標準化され、分離された環境を提供するため、アプリケーションは独立して実行でき、依存関係間の競合のリスクを低減します。この分離により、潜在的な脆弱性が個々のコンテナに限定されるため、セキュリティが強化されます。また、コンテナの軽量性はリソースの効率的な利用にも貢献します。
マイクロサービスでは、複雑なアプリケーションをより小さく独立したサービスに分解します。各サービスは特定の機能に特化し、異なるサービスでの並列作業を通じてより迅速な開発を可能にします。
マイクロサービス・アーキテクチャはアジリティと柔軟性を促進します。各マイクロサービスは独立して開発、導入、拡張できるため、迅速なアップデートや新機能のリリースが可能です。このモジュール性により、障害分離も改善され、1つのサービスにおける問題がアプリケーション全体に影響することはありません。
不変インフラストラクチャとは、導入されたリソースが直接変更されることがないという原則です。変更は、更新された構成で新しいインスタンスを作成することで実装されるため、一貫性が保たれ、ロールバック手順が簡素化されます。Infrastructure-as-Code(IaC)ツールはインフラストラクチャのプロビジョニングを自動化し、効率性と再現性を高めます。
IaCでは、インフラストラクチャをコードとして定義することで、より優れたバージョン管理、自動テスト、環境間での一貫した導入を実現します。このアプローチでは、インフラストラクチャをアプリケーションの重要な要素として扱い、コードベースと同様に厳しい管理と制御を行います。
自動化はクラウドネイティブの重要な側面であり、手動では管理が困難な大規模導入を可能にすることを目的としています。Kubernetesなどのコンテナ・オーケストレーション・ツールは、コンテナ化されたアプリケーションの管理と導入を自動化します。これらのツールは、高可用性、効率的なリソース割り当て、簡素化されたスケーリングを提供し、複雑な分散システムをより管理しやすくします。
自動化とオーケストレーションは、クラウドネイティブ・システムを特徴づけるスケーラビリティ、フォルト・トレランス、自己修復機能を実現するために不可欠です。Kubernetesクラウド・サービスは動的なリソース割り当てを可能にするため、アプリケーションは需要に応じて拡張でき、障害からの自動復旧が促進されます。
クラウドネイティブ・アプリケーションは、観測可能性を念頭に置いて設計されいるため、開発者はシステムの内部動作をよりよく理解することができます。これには、パフォーマンス、リソースの利用状況、起こりうる問題に対するインサイトを得るためのメトリクス、ログ、トレースの収集と分析が含まれます。
高度なモニタリング・ツールは、アプリケーションの健全性とパフォーマンスに対するリアルタイムの可視性を提供します。これらのツールは、先行的な問題解決を可能にし、問題がユーザーに影響を与える前に、開発者が問題を特定して解決できるようにします。観測可能性と管理サービスは、アプリケーション・パフォーマンスとリソース割り当てを最適化するうえで不可欠です。
回復力は、障害からの回復と安定性の維持を支援するクラウドネイティブ・システムの重要な特性です。レプリケーション、ロード・バランサ、自動リカバリ・メカニズムなどの戦略がこれを実現します。自己修復機能と呼ばれるこの機能は、手動による介入なしに問題を検出して修正し、高可用性を維持します。
クラウドネイティブ・アプリケーションは、障害を適切に処理し、ダウンタイムを最小限に抑えるように設計されています。自己修復メカニズムが自動的に問題を検出して解決し、アプリケーションのスムーズな実行を維持します。この回復力は、重要な事業運営に不可欠であり、信頼性の高いユーザー・エクスペリエンスを実現します。
クラウドネイティブ・アプローチは、従来のモノリシック・アプリケーションを実行するよりも多大なメリットを組織にもたらす可能性があります。これらのメリットには、次のようなものがあります。
クラウドネイティブ・コンピューティングの主な機能とメリットをいくつか紹介します。
| 特徴 | メリット |
|---|---|
| マイクロサービス・アーキテクチャ | エンタープライズ・アプリケーションを、それぞれが異なるビジネス・機能を実行する小さなコードの断片、いわゆるマイクロサービスとして記述すると、アプリケーションの構築はより速く、管理はより簡単になり、拡張性、耐障害性が向上し、アップグレードや拡張もはるかに容易になります。 |
| コンテナとコンテナ化 | マイクロサービスはコンテナにまとめられることが多く、そのコンテナはクラウド・サーバーに簡単に導入できます。コンテナは慎重に構築され定義されているため、クラウド・サービス上の互換性のあるサーバーであればどれでも実行することができます。必要であれば、大量のワークロードを処理するためにコンテナのコピーを多数導入できますし、アプリケーションの残りの部分に影響を与えることなく、古いコンテナをアップグレードされたバージョンと単純に入れ替えることもできます。 |
| 継続的インテグレーションと継続的デリバリー(CI/CD) | CI/CDとは、開発チームがパイプライン・アプローチを使用してマイクロサービスを設計、構築、テスト、コンテナに導入し、それらのコンテナをクラウド・サーバーに導入するプロセスです。CI/CDにより、リリース・サイクルが短縮され、開発者の生産性が向上し、ワークフローが自動化されるため、ソフトウェアの迅速な導入が実現します。 |
| 不変インフラストラクチャ | コンテナのような不変のコンポーネントは、導入後に変更されることはありません。変更があった場合は、コンテナを置き換えます。そのメリットは、ソフトウェアの整合性、ロールアウトの簡素化、新しいクラウド・データセンターやクラウド・サービス・プロバイダーにアプリケーションを簡単にレプリケーションできる機能です。 |
| DevOpsの取り組み | DevOpsとは、従来の開発チームと運用チームを1つのユニットに統合することを指します。DevOpsチームはソフトウェアの記述、ソフトウェアのテスト、そしてソフトウェアの導入と導入後の管理を行います。CI/CDや自動化と組み合わせることで、新しいソフトウェアを迅速に導入でき、責任の所在を明確にする必要がないため、問題を迅速に解決できます。 |
| 観測可能性と監視 | 可観測性は、DevOpsチームが実行中のアプリケーション内部で起きていることを理解できるよう支援します。モニタリングとは、ログファイルを見たり、パフォーマンス・メトリクスを調査することを指します。これらが一体となることで、チームが問題を迅速に検出して修正し、パフォーマンスを調整し、サービスレベル要件を満たして、約束されたアプリケーションの可用性と応答性を実現できるよう支援します。 |
| クラウド・プラットフォーム | OCIなどのクラウド・プラットフォームは通常、Docker コンテナをホスティングできるサーバー、セキュアな高速ネットワーク、事前にインストールされた Kubernetes エンジン、可観測性とモニタリングを促すツールなど、クラウド ネイティブなアプリケーションの実行に必要なすべてを提供します。クラウドネイティブ・アプリケーションのスケーラビリティは、クラウドネイティブ・ソフトウェアの効率の向上と運用コストの削減を支援します。 |
クラウドネイティブ・コンピューティングは複雑なものとみなされることがあります。特に、何年も、あるいは何十年もかけて従来のモノリシックなソフトウェア環境を構築してきた、クラウドを初めて導入する企業にとってはそうです。以下に、組織が初めてクラウドネイティブ・コンピューティングに取り組む際に直面する課題をいくつか紹介します。
クラウドネイティブ・コンピューティングへの道筋は、組織によって異なります。ただし、ほとんどの企業は以下の7つのベストプラクティスを念頭においていることがわかります。
オラクルは、ツール、サービス、自動化など、クラウドネイティブ・アプリケーションの構築とデプロイに必要なすべてを提供するため、開発チームは運用タスクの数を減らしながら迅速に構築できます。
Oracle Cloud Nativeサービス はOCIで実行され、他のクラウドプロバイダと比較して高性能で低コストの標準ベース・プラットフォームを提供します。OCIでオープンソースとオープン標準に基づくサービスを利用することにより、開発者はリファクタリングなしで、任意のクラウドまたはオンプレミス環境でアプリケーションを実行できます。こうした柔軟性により、強力な生成AIやデフォルトのAI/MLサービスを用いて、既存アプリケーションに新しい機能や知能を吹き込むなど、構築とイノベーションに集中できるようになります。
クラウドネイティブ・アプリケーションの開発では、従来開発されてきたアプリよりはるかに優れたアプリを本当に提供できるでしょうか。はい。メリットは明らかです。クラウド・ネイティブ・アプリケーションは、その機能がマイクロサービスに分割されており、個別の管理が可能であるため、拡張することができます。また、クラウドネイティブ・アプリケーションは高度に分散して実行できるため、独立性を維持し、アプリケーションのニーズに応じてリソースを割り当てることができます。
クラウドネイティブ・アプリケーションは、 プライベート、パブリック、およびハイブリッド・クラウド間で一貫したエクスペリエンスを提供できるため、ビジネス戦略と価値の向上に役立てることができます。これにより、応答性と信頼性に優れたスケーラブルなアプリケーションを実行し、クラウド・コンピューティングを最大限に活用できます。
クラウドネイティブ・アーキテクチャをさらに詳しくご覧になることをご希望の場合は、無料のeBookをダウンロードして、あらゆる組織が今すぐクラウドネイティブ開発戦略を導入できることをご確認ください。
クラウドネイティブ・アーキテクチャと従来のアプリケーション・アーキテクチャの違いを教えてください。
クラウドネイティブ・アーキテクチャは、大規模で複雑なビジネス・アプリケーションを多数のマイクロサービスに分割し、それぞれがビジネス機能を実行します。アプリケーションは、これらのマイクロサービスが高速ネットワークを介して互いに通信し、タスクでコラボレーションすることで機能します。各マイクロサービスは個別に定義、設計、構築、テスト、導入、管理、アップグレードされるため、導入が迅速化され、スケーラビリティが大幅に向上します。たとえば、マイクロサービスの作業負荷が高い場合、クラウドネイティブ・アプリケーションは自動的にそのマイクロサービスのコピーを別のサーバーに作成し、作業負荷をそのサーバー間で分割することができます。一方、従来のアプリケーション・アーキテクチャは、設計、構築、テスト、導入が1つのユニットとして行われる単一のソフトウェア・コードベース(モノリス)で構成されています。バグ修正やアップグレードはモノリスに変化をもたらすため、モノリスを再導入する必要があります。このため、ソフトウェアのロールアウトには時間がかかります。スケーラビリティは課題であり、多くの場合、ソフトウェアを再設計(および書き直し)するか、より高速で高価なサーバーにインストールする必要があります。
既存のアプリケーションをクラウドネイティブに効果的に移行する方法を教えてください。
既存のモノリシック・アプリケーションをクラウドネイティブ・アプリケーションに再設計することができます。そのプロセスは、マイクロサービスに分割できるコードの部分を特定することであり、多くの場合、分離が最も簡単、またはパフォーマンスのボトルネックの原因となっているコードのセクションから着手します。これらのセクションを1つずつ処理することで、モノリシック・アプリケーションはクラウドネイティブ・アプローチのメリットの多くを実現することができます。
CNCFについて教えてください。
Cloud Native Computing Foundation(CNCF)は、Linux Foundationが主催するベンダー中立のオープンソース組織です。CNCFの目標はクラウドネイティブ・テクノロジーを推進することであり、Dockerコンテナ・フォーマットやKubernetesコンテナ自動化およびオーケストレーション・プラットフォームなど、多くのプロジェクトおよび業界標準に不可欠なサポートを提供しています。オラクルを含む多くのクラウド・サービスプロバイダーがCNCFの活動に貢献し、クラウド・エコシステム間の相互運用性を促進するためにCNCFの標準を採用しています。
クラウドとクラウドネイティブの違いを教えてください。
クラウドとは、オラクルなどの商用 サービスプロバイダーによってホストされるコンピューティング・サービスを指します。これらのコンピューティング・サービスには、さまざまな種類のサーバー、高速ネットワーク、ストレージ・システム、高度なコンピューティング機能のライブラリ(AIやセキュリティなど)、さらにはビジネス・アプリケーションが含まれます。WebブラウザからアクセスするほぼすべてのWebサイトやアプリケーションは、その全部または一部がクラウド上にあり、それ以外は企業のデータセンターにあります。携帯電話アプリの多くも、基本的な機能を提供するためにクラウドを利用しています。
クラウドネイティブは、ビジネス・アプリケーションを構築するためのアプローチで、アプリケーションを数十から数百のマイクロサービスに分割します。各マイクロサービスはビジネス機能の重要な部分をカプセル化します。アプリケーションは、各マイクロサービスがそれぞれのワークロードを実行することで、セキュアな高速ネットワークを介してマイクロサービス同士が連携し、ビジネス上の問題を解決します。クラウドネイティブ・アプリケーションは、クラウド・サービスプロバイダーのリソースを活用して、アプリケーションをスケーラブルで効率的かつ耐障害性に優れたものにします。