Val Town: ブラウザで動作するサーバーレスJavaScript
Webhookエンドポイント、スケジュールされたデータ取得、軽量なAPIが必要になったとき、サーバーを立ち上げたり、IAMロールを設定したり、デプロイパイプラインに触れたりしたくない——Val Townはまさにそのような状況のために作られました。
Val Townは、サーバーレスJavaScriptとTypeScriptを記述・デプロイするためのブラウザベースのプラットフォームです。ブラウザでコードを記述すると、クラウド上のマネージドDenoランタイムで実行されます。コードはエンドユーザーのブラウザでは実行されません——これは重要な違いです。ブラウザは単なるエディタであり、実行はVal Townが完全に管理するサンドボックス化されたDeno環境でサーバーサイドで行われます。
重要なポイント
- Val Townは、マネージドDenoランタイム上でサーバーレスJavaScript/TypeScriptを記述・デプロイするためのブラウザベースプラットフォーム
- コードはvalsとして整理される——HTTPリクエスト、cronスケジュール、または受信メールによってトリガーされる、バージョン管理された即座にデプロイ可能な単位
- SQLite、Blobストレージ、メール、OpenAIクライアントなどの組み込みサービスにより、小規模プロジェクトでの外部インフラストラクチャが不要
- Val Townは軽量API、Webhook、スケジュールジョブ、グルーコードに最適だが、長時間実行や計算負荷の高いワークロードには不向き
Valとは?Val TownサーバーレスJavaScriptの中核単位
Val Townのすべてはvalsを中心に構成されています——バージョン管理された、デプロイ可能なコードの単位です。valは小さな自己完結型の関数またはサービスと考えてください。各valは保存され、バージョン管理され、保存した瞬間に即座にデプロイされます。
Valsは3つのトリガータイプをサポートしています:
- HTTP: Webリクエストに応答します。valは
Requestオブジェクトを受け取り、Responseを返します——標準的なFetch APIのセマンティクスで、Cloudflare Workersを使用したことがある人には馴染み深いものです。 - Cron: cron構文またはシンプルなインターバルベースのスケジュールで実行されます。レポート送信やデータ同期などの定期的なタスクに便利です。
- Email: Val Townアドレスでメールを受信したときにトリガーされます。軽量なメール駆動型の自動化を構築するのに適しています。
Val Town Denoランタイム: 実際に何の上で動作しているのか
Val TownはランタイムとしてNode.jsではなくDenoを使用しています。これは実用的に重要です。package.jsonを使用するのではなく、URLまたはnpm:指定子からモジュールをインポートします。多くのNode.js固有のAPI(fs、path)は動作が異なるか、利用できません。
利点: Denoのパーミッションモデルとモジュールシステムは、サンドボックス化されたマルチテナント環境に適しています。トレードオフ: Node内部に依存する一部のnpmパッケージは、調整なしでは動作しません。
軽量バックエンド開発のための組み込み機能
Val Townには、一般的なニーズに対して外部インフラストラクチャを配線する必要がないように、ホストされたサービスの標準ライブラリが含まれています:
- SQLite — val毎の永続的な構造化データストレージ。小規模データセット、カウンター、状態管理に適しています。
- Blobストレージ — 任意のデータを保存・取得: JSONファイル、画像、テキスト。
- Email — 単一の関数呼び出しでvalから直接メールを送信。
- OpenAI — コード内でAPIキーを管理することなく、すぐに使用できる事前設定済みのOpenAIクライアント。
パターンを説明するための最小限のHTTP valの例:
export default async function handler(req: Request): Promise<Response> {
const data = { message: "Hello from Val Town", timestamp: Date.now() }
return new Response(JSON.stringify(data), {
headers: { "Content-Type": "application/json" },
})
}
保存すれば、即座に公開URLで利用可能になります。ビルドステップもデプロイコマンドも不要です。
Discover how at OpenReplay.com.
Val Townを使用すべき場合——使用すべきでない場合
Val Townは以下のような場合に適しています:
- インフラストラクチャのセットアップなしで迅速なサーバーレスAPIまたはWebhookレシーバーが必要な場合
- cronスケジュールで実行されるスケジュールジョブ
- サードパーティサービスを接続するグルーコード
- バックエンドロジックの迅速なプロトタイピング
以下のような場合には適していません:
- 長時間実行プロセス(実行時間制限が適用されます)
- 計算負荷の高いワークロード
- ネイティブバインディングを持つNode.js固有のパッケージを必要とするアプリケーション
- フルプラットフォーム(AWS、GCP)の方が適している複雑なマルチサービスアーキテクチャ
ローカル開発とツール
ブラウザベースの開発は便利ですが、Val Townはローカルワークフローもサポートしています。Val Town CLIを使用すると、ターミナルからvalsを編集・デプロイできます。LLM支援開発のためのMCPガイドや、REST API経由でプログラマティックにアクセスするためのJavaScript SDKもあります。
まとめ
Val Townは特定の有用なニッチを占めています: 小規模サービス、自動化、APIのためのブラウザベースのサーバーレス開発です。フロントエンド開発者が定期的に必要とする軽量なバックエンドタスクのために、ほぼすべてのデプロイの摩擦を取り除きます。ユースケースが実行モデルとDenoランタイムに適合する場合、アイデアから実行エンドポイントまでの最速の方法の1つです。
よくある質問
はい、ただし注意点があります。Val TownはDeno上で動作するため、package.jsonを介してインストールするのではなく、npm:指定子構文を使用してnpmパッケージをインポートします。ほとんどの純粋なJavaScript npmパッケージは問題なく動作します。ただし、Node.js内部やネイティブC++バインディングに依存するパッケージは、サンドボックス化されたDeno環境では正しく機能しない可能性があります。
Val Townは実行回数と機能に制限のある無料ティアを提供しています。たとえば、外部受信者へのメール送信や高い使用制限は有料プランに限定されています。有料プランでは、制限の増加、実行時間の延長、プライベートvalsなどの追加機能が利用できます。プラン制限とコストの最新情報については、Val Townの料金ページをご確認ください。
Val Townは、APIキーや機密値を保存できる組み込みのシークレットマネージャーを提供しています。これらのシークレットは、Deno.env.getまたはprocess.envを通じて環境変数としてvals内でアクセス可能で、ソースコードから認証情報を除外できます。シークレットはアカウントにスコープされており、他のユーザーには表示されません。
Val Townはプランによって異なる実行時間制限を課しています。無料ティアのvalsは通常、タイムアウトウィンドウが短く、有料プランでは実行時間が延長されます。これらの制限により、Val Townは長時間実行のバックグラウンドプロセスには不向きですが、APIハンドラー、スケジュールタスク、迅速な自動化には完全に適しています。
Gain Debugging Superpowers
Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers. Check our GitHub repo and join the thousands of developers in our community.