Encore freefordevシリーズ1
お金がない!! ということでfreefordevを見て試していくシリーズを書く。 第一弾は Paas のEncore。
Encore とは
ホームページには
Encore is the Development Platform for building event-driven and distributed systems. Move faster with purpose-built local dev tools and DevOps automation for AWS/GCP.
と書いてある。訳すとこんな感じ。
Encore はイベント駆動な分散システムを開発するためのプラットフォームです。専用のローカルな開発ツールと AWS/GCP のための DevOps 自動化でもっと速く
その下には
iwr https://encore.dev/install.ps1 | iex
とある。
試す
Quick startに沿って進めたい。 上のワンライナーを Powershell で実行する。
そのあと
encore app create
を実行する。そうするとアカウントを作るか聞かれて、そのあと Go か TS かを選ばされる。 Go は全く使えないのに対し、TS は殆ど使えないので TS で進める。
正直、この時点で刺さらないことは結構確定しているので終ってもいいが、Encore の日本語情報が無いので続ける
テンプレートは Typescript の Hello world(Simple REST API という名前になっていた)を選んだ。
hello/hello.ts
を見る。コメントを除くと以下のようになっている。
import { api } from "encore.dev/api";
export const get = api(
{ expose: true, method: "GET", path: "/hello/:name" },
async ({ name }: { name: string }): Promise<Response> => {
const msg = `Hello ${name}!`;
return { message: msg };
}
);
interface Response {
message: string;
}
比較的分かりやすい。get
というパブリックな関数を定義している。
非同期の無名関数と API の情報を Encore の SDK の api 関数に投げると API を登録できるようだ。
実行するには
encore run
を実行する。そうすると開発ツールと API のエンドポイントがローカルで立ちあがる。
開発ツールからも API を呼べる。
このあと Quick start ではデプロイを始めているが、この記事では試しにもう一個 API を書いてみる。ちなみにencore run
はホットリロードにも対応している。
こんな感じになった。/cat/world3
とするとMeow world! Meow world! Meow world!
が帰ってくる。log
は比較的使いやすかった。
import log from "encore.dev/log";
export const cat = api(
{ expose: true, method: "GET", path: "/cat/:param" },
async ({ param }: { param: string }): Promise<Response> => {
log.info(`${param}`, { is_subscriber: true });
const num: number = Number(param.match(/\d+$/));
if (Number.isNaN(num)) {
throw new Error("The last letter is not a number.");
}
const name = param.split(/\d+$/)[0];
const msg = Array(num).fill(`Meow ${name}!`).join(" ");
return { message: msg };
}
);
デプロイ
本来なら専用のGithubリポジトリとリンクしてmainにpushした時に自動でデプロイしてくれるようだ。しかし、開始時に「なんかリポジトリできてる、消すか」と思って消してsandbox内にある。しかも見た感じrootにないとダメそう。ビルドプロセス自体はencore.app
というファイルを作ることでカスタマイズできる。結局いろいろ見ていたがダメそうなので諦めた。
値段
無料プランでは以下の通り。(ここから。変わっている可能性あり)
アプリケーション毎 | |
---|---|
リクエスト | 100,000 / 日 |
データベース容量 | 1 GB |
PubSubメッセージ | 100,000 / 日 |
Cron | 1時間に一回 |
結構安い。安すぎるくらいだと思う。(この表ダサいからそのうち変えたい)
所感
所感は以下の通り。
- 嬉しいところ
- 開発体験がいい
- ダッシュボードがサーバー側とクライアント側を両方いじれて使いやすい
- SDKで比較的シンプルにAPIがかける
- 開発体験がいい
- つらいところ
- 使える言語が少ない
- これは人による
- RustとかならWASMで頑張れば勝手に使えるようにできそう
- SDK
- Encoreが倒れたり、他のPaaSにAPIを移行しようとなったときに大変
- 使える言語が少ない
そこまで大きいプロジェクトではなく、GoかTypescriptを採用できるなら刺さると思う。自分はどちらの言語もほとんどかけない(上のcatでも20分くらい調べながら作った)からめっちゃ刺さったというわけではない。今回のソースコードはGithubのsatler-git/sandboxの中で見れる。