本文へ移動
runlot

プロジェクト構成

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

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

my-app/
  runlot.json      project config
  src/index.ts     worker entry point
  public/          static assets
    hello.txt
  .gitignore

runlot.json

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

name は必須です。また、main または assets のいずれかを設定する必要があります。どちらもない場合、提供する worker コードや静的アセットが存在しません。フィールドの全一覧は runlot.json リファレンス を参照してください。

すべてのプロジェクトにはデータベース、ログイン、ファイルストレージ、メール、AI が含まれているので、runlot.json には書きません。オフにするのは runlot storage delete のような明示的なコマンドで、runlot storage on で再びオンにします。

エントリーポイント

export default でエクスポートするオブジェクトに fetch メソッドを実装してください。リクエストと環境を受け取り、Response を返します。

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

ワーカーは env を通じて有効化された機能にアクセスします。env.assets は常に利用でき、追加した機能に応じて env.db、env.storage、env.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

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

このページの目次