runlot
はじめかた

プロジェクト構成

runlot.json 設定ファイル、ワーカーのエントリーポイント、静的アセットのディレクトリでプロジェクトを構成します。

create-runlot は次のような既定のプロジェクト構成を作成します。

my-app/
  runlot.json      プロジェクト設定
  src/index.ts     ワーカーのエントリーポイント
  public/          静的アセット
    hello.txt
  .gitignore

runlot.json

runlot.json
{
  "name": "my-app",
  "org": "me",
  "main": "src/index.ts",
  "assets": "public"
}

name は必須です。さらに main または assets のいずれか 1 つ以上を指定する必要があります。どちらもない場合、配信するワーカーのコードも静的アセットもありません。すべてのフィールドは runlot.json リファレンス で確認してください。

"database": true"storage": true"auth": true は宣言です。runlot deploy がこの値を読み、まだないリソースを作ります。有効にするコマンドやダッシュボードのボタンは別にはなく、宣言を消してもリソースは残ります。消すのは runlot pg delete のような明示的なコマンドです。

エントリーポイント

export default でエクスポートするオブジェクトに fetch メソッドを実装してください。Cloudflare Workers を使ったことがあれば見慣れた形式です。

src/index.ts
export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    return new Response("hello runlot");
  },
};

ワーカーは env を通じて有効化された機能にアクセスします。env.assets は常に利用でき、追加した機能に応じて env.dbenv.storageenv.auth を利用できます。シークレットは大文字の名前で提供されるため、小文字のバインディング名と衝突しません。

静的アセット

assets が指すディレクトリのすべてのファイルはバンドルに含まれ、ワーカーからは env.assets で提供されます。

if (url.pathname.startsWith("/static/")) {
  return env.assets.fetch(
    new Request(new URL(url.pathname.slice("/static".length), url), request),
  );
}

main を指定せず assets だけを指定すると、静的サイトとしてデプロイします。この場合、すべてのリクエストを静的アセットへ転送するエントリーポイントを自動的に作成します。

バンドルには実在するファイルだけを含めます。シンボリックリンクや、プロジェクトルートの外を指すパスは使用できません。こうしたパスを許可すると、ノード上の意図しないファイルが配信されるおそれがあるためです。

マイグレーションのディレクトリ

runlot pg migrate は既定で migrations/ ディレクトリのファイルを適用します。

my-app/
  migrations/
    0001_init.sql
    0002_posts.sql

詳しくは マイグレーション を参照してください。

このページの目次