now.sh 2.0 Introduction
最近注目しているnow.shの2.0のコンセプト・機能について紹介します。
now.shとは
Now – Global Serverless Deployments
アプリケーションをすばやくデプロイするためのプラットフォームサービスです。 ごく小さな設定ファイルを書いて、nowコマンドを実行するだけ(本当にこれだけ!)でデプロイが完了します。 標準でhttpsがサポートされ、CDNも提供されます。 無料プランから始められアクセス数などに応じて従量課金になります。
2.0のコンセプト
2.0以前をあまり知らないのですが、以前はサーバアプリケーション(常時起動のサービス)やBateですがDockerコンテナをサポートしていました。しかし、2.0ではDockerは完全に姿を消し、サーバアプリケーションも以前からの利用者のために一応残したという程度になっています。重厚なサーバアプリケーションをターゲットから外し、フロントエンドアプリケーションとAWS Lambdaのようなファンクションサービスにピボットしたことが伺えます。
2.0の機能
builder
設定ファイルにアプリケーションに合ったbuilderを指定することで、アプリケーションのビルドやランタイムの提供が行われます。例えば、Next.jsのプロジェクトの場合は @now/next
というbuilderが標準であり、これを指定するだけで静的なコンテンツ、フロントエンドアプリケーション、サーバアプリケーションが一気にデプロイされます。builderは自分で作ることもできるので、アプリケーションに合ったbuilderを作ったり、他の人が作ったbuilderを使うこともできます。実行環境はnow.shが提供するランタイムから選択することになります。ランタイムはもう少し数が増えたり新しいバージョンを早くサポートしてくれると良いですね。
Monorepo × Massive build parallelization
1つのプロジェクトに複数のファンクションのエントリーポイントを持つことを、Monorepo(1つのリポジトリでたくさんの機能を管理する)と表現しています。Next.jsの例のように、1つのプロジェクトに実行環境の異なる複数のエントリーポイントを持つことも含まれているかもしれません。Monorepoにすると、エンドポイントごとに並列でビルドが実行されるためビルド時間が早く、実行時にも実行ファイルが小さく、起動時間が早いというメリットがあります。now.shがroutingとdispatchを受け持ってくれる感じですね。こういうMonorepoなFunctionsを作るFrameworkってあったりするんでしょうか。
Universal Cloud
now.shの利用者には見えない部分ですが、ベンダーロックインを避けるため、インフラにはAWSとGCPを両方使えるようにしているようです。
誰が使うといいの?
個人的な所感としては以下で使えるかと思いました。
- フロントエンドアプリケーション
- 規模の小さなファンクションサービス
- プロトタイピング
サーバサイドアプリケーション(Webサーバが起動して待機するタイプ)も一応サポートされていて、プロトタイピングレベルならありかと思います。実際にExpressやNestjsのミニマムのアプリケーションなら動かすことができたんですが、いま自分が作っているアプリケーションがまだ動かない(504が返る)状態なので、もう少し調査をしてみようと思います。