今さら聞けないクラウドネイティブとは（クラウドリフト、クラウドファーストとの違いも）

# はじめに
みなさんが大好きなクラウド（クラウドコンピューティング）ですが、実は導入するにあたって下記のレベルがあります。

| レベル | 概念 |
|:---|:---|
|  レベル0 | オンプレミス（On-Premises）  |
|  レベル1 | クラウドリフト（Cloud-Lift） |
|  レベル2 | クラウドファースト（Cloud-First）  |
|  レベル3 | クラウドネイティブ（Cloud-Native）  |

今回はそれぞれの特徴を説明していきたいと思います。

:::note warn
クラウドファーストと近しい概念で「**クラウド・バイ・デフォルト**」というものがありますが、ややこしくなるだけなので今回は割愛します。
:::

# レベル0：オンプレミス（On-Premises）
クラウドを語る前にまずはオンプレミスの説明をします。

オンプレミスとは、サーバーなどの物理的な機器をデータセンターやサーバールームなど、開発者（開発会社）が管理できる施設に設置して運用することを指します。

もともとシステム構築はオンプレミスが主流だったので「オンプレミス」とは呼ばれていませんでした。
しかし、クラウドという運用形態が登場したことで、クラウドと明確に区別する為に「オンプレミス」という呼び方をされるようになりました。

オンプレミスでは、ハードウェアやネットワークの管理、保守、セキュリティ対策などすべてを開発者（開発会社）で行う必要があります。

* メリット
  * 完全な管理と制御が可能で、セキュリティやプライバシーの要件に柔軟に対応できる。
  * クラウドって本当に安全なの？と疑ってくるクライアントを納得させられる。
* デメリット
  * ハードウェアやソフトウェアの購入・設定・保守が必要で、運用コストが高い。
  * スケーラビリティや柔軟性に限界があり、急激な需要変動に対応しにくい。
  * リソースの効率的な利用が難しく、余裕を持った容量計算が必要。

:::note info
**つまり・・・**
セキュリティやプライバシーの面では柔軟性があって優秀です。
しかし、スケーラビリティの点でクラウドに劣ります。

例えばおもちゃのオンラインストアをオンプレミスで構築する場合、突出して利用の多いクリスマス時期に合わせてスペックを合わせなくてはいけません。
1月～10月の間はオーバースペックです。
:::

# レベル1：クラウドリフト（Cloud-Lift）
クラウドリフトは、オンプレミス環境で実行されているアプリケーションをそのままクラウド上に移行することを指します。
クラウドリフトでは、既存のアプリケーションをクラウド環境に移行することで、ハードウェアの管理や保守の負担を軽減し、スケーラビリティや可用性の向上を実現します。

物理的なサーバーなどの機器を用意する必要はなくなりますが、クラウド上のサーバーを使用するため、オンプレミス同様サーバーの設定などは必要になります。

* メリット
  * 既存のアプリケーションを比較的迅速にクラウド環境に移行できる。
  * クラウドの柔軟性やスケーラビリティの恩恵を受けながら、アプリケーションの変更を最小限に抑えられる。
  * とりあえずクラウド化することで、「よくわからんが今の時代はクラウドだ！」という謎の勢力を納得させられる。
* デメリット
  * クラウドの特性や機能を最大限に活用することはできず、オンプレミスと同様の制約が残ることがある。
  * クラウドの柔軟性によるコスト削減効果は限定的。ランニングコストはオンプレミスよりもかかる。

:::note info
**つまり・・・**
とりあえず「今動いているアプリケーションを最小限の変更でクラウドで動かしたい」ときに選択します。
基本的に移行対象のアプリケーションはオンプレミスに最適化して設計されているので、クラウドの恩恵は受けにくいです。
:::

# レベル2：クラウドファースト（Cloud-First）
クラウドファーストは、新しいアプリケーションを開発する際に、クラウドを最初の選択肢として採用することを指します。
クラウドのサーバーをただ使用するのではなく、クラウド上で提供されるサービスやツールを活用し、アプリケーションを構築・運用します。
すべてをクラウド上で行うのではなく、運用上の都合に応じて、クラウド以外のサービスも利用します。

* メリット
  * クラウドを最初の選択肢とすることで、クラウドのメリットを比較的享受できる。
* デメリット
  * クラウドリフトに比べて、クラウドの設計に専門的な知識やスキルが必要であり、学習コストがかかる。
  * ここら辺からクラウドアレルギーの人が出始める。

:::note info
**つまり・・・**
クラウドを第一優先で考えて設計するため、クラウドリフトよりもクラウドのメリットを享受できます。
クラウドの様々なサービスを知る必要があるため、相応の勉強が必要です。
:::

# レベル3：クラウドネイティブ（Cloud-Native）
クラウドネイティブは、クラウド環境に特化したアプリケーションの設計・開発・運用を指します。
クラウドネイティブなアプリケーションは、クラウドの特性を最大限に活用するために、マイクロサービス、コンテナ化、オートスケーリングなどのアーキテクチャを採用します。

クラウドネイティブでは、アジャイル開発やスクラム開発、DevOpsの原則に基づく文化の浸透が重要です。
既存の組織体系では、従来のウォーターフォール開発やシステム運用の文化が根付いている場合があるため、組織として変わる必要が出てきます。

ここまでの説明でクラウドネイティブはウォーターフォール開発では取り入れられないと思われるかもしれませんが、それは誤りです。
あくまでも「**クラウドの特性を最大限に活用するため**」にはアジャイル開発などの柔軟な開発手法が適していますが、ウォーターフォール開発であったとしてもスケーラビリティのメリットやモジュール化による保守性の向上は見込めます。
既存の組織を変化させるには様々な制約があるため、組織体制を変えずにクラウドネイティブに近づけることも検討すべきかもしれません。

* メリット
  * クラウド上動くことを前提に設計・構築されたアプリケーションであり、クラウドの特性を最大限に活用できる。
  * スケーラビリティ、自動化、マイクロサービスなど、クラウドネイティブなアーキテクチャの恩恵を享受できる。
* デメリット
  * クラウドネイティブな開発や運用には専門的な知識やスキルが必要であり、学習コストがかかる。
  * 従来のウォーターフォール開発の文化が根付いている場合、組織として変わる必要がある。

:::note info
**クラウドネイティブを代表する技術**
Google Cloud、Microsoft Azure、AWS、ORACLEなど、大手企業がメンバーとして参画してクラウドネイティブを推進している団体「[CNCF](https://www.cncf.io/)」（[Cloud Native Computing Foundation](https://www.cncf.io/)）では、クラウドネイティブを代表する技術について、以下の5つを挙げています。

* コンテナ
* マイクロサービス
* サービスメッシュ
* 宣言型API
* イミュータブルインフラストラクチャ

**CNCFには日本企業も多く参加**
CNCFはNTTデータ、富士通、NEC、日立製作所といった日本のITを代表する大企業もメンバーになっています。
つまり、今後日本でもクラウドネイティブの考え方が当たり前になっていくと考えられます。
:::

:::note info
**つまり・・・**
クラウドファーストと近しい概念に聞こえますが、クラウドファーストは新しいアプリケーションの開発においてクラウドを最初に選択することを重視し、クラウドネイティブはクラウド上で設計・構築されたアプリケーションでクラウドの特性を最大限に活用することを重視します。
コンテナやマイクロサービスが前提となっている点もクラウドファーストとは異なります。
:::

# さいごに
クラウドファーストの概念である「クラウドで構築することを優先的に考える」ことをクラウドネイティブのことだと思っている人も実は多いと思います。
その人たちに今回の記事が少しでもお役に立てれば幸いです。

:::note info
**最近よく聞くけど今さら聞けない技術用語**について、いくつか記事を書いています。
良かったらそちらもご覧ください。
:::

https://qiita.com/shinkai_/items/0fd5d72b6a584c16a8ec

https://qiita.com/shinkai_/items/79e539b614ac52e48ca4

https://qiita.com/shinkai_/items/4dcd8742cc524ceaa3a2

https://qiita.com/shinkai_/items/13e76a5641d9ec9a41d2

https://qiita.com/shinkai_/items/486f8b75d5904752842e