Movatterモバイル変換


[0]ホーム

URL:


await wakeUp();

トップ>プログラミング>TypeScriptのコードをそのままデプロイできてOpenAIのAPIもSQLiteもCronもメール送受信も使える高機能なPaaSの「Val Town」

TypeScriptのコードをそのままデプロイできてOpenAIのAPIもSQLiteもCronもメール送受信も使える高機能なPaaSの「Val Town」

はじめに

先日MastodonのTLを眺めていたところ、Val TownというPaaSを紹介している投稿*1を見かけました。
調べてみたところ、TypeScriptのコードをそのままデプロイでき、HTTPリクエストに加えてCronやメールによるトリガー実行、OpenAIのAPISQLite、Blob Storageの利用もできるすごそうなPaaSだったので、さっそく使ってみました。
ちなみに、Val Townの裏側はDenoのようです。
docs.val.town

サンプル用アプリの開発

今回は、以下のようなアプリケーションを作って、Val Townの機能を試してみました。

  • Cronをトリガーに定期実行
  • WebページのHTMLを取得
  • 取得したHTMLの内容をOpenAIのAPIを使って要約
  • 要約した結果をメールで送信
  • 実行ログをSQLiteに保存

このアプリケーションのコードは以下のようになりました。

import{ email}from"https://esm.town/v/std/email";import{ OpenAI}from"https://esm.town/v/std/openai";import{ sqlite}from"https://esm.town/v/std/sqlite";import{ randomUUID}from"node:crypto";const openai =new OpenAI();exportdefaultasyncfunction(interval:Interval){const response =awaitfetch("https://example.com");const body =await response.text();const completion =await openai.chat.completions.create({messages:[{role:"user",content:`please summarize the following html:${body}`,},],model:"gpt-4o-mini",max_tokens:50,});await email({subject:"Web Page Summary",text:`${completion.choices[0].message.content}`});await sqlite.execute(`create table if not exists cron_logs(    key text unique,    timestamp integer,    value text  )`);await sqlite.execute({sql:`insert into cron_logs(key, timestamp, value) values (:key, :timestamp, :value)`,args:{key: randomUUID(),timestamp:Date.now(),value: completion.choices[0].message.content},});}

30行ちょっとで実装できてしまいました。
コードを書く際はエディタ上でAIによる補完が使えるので、完成までの時間は10分程度でした。

SQLiteのデータベースは、一つのアカウント内で共通のものが使われるため、以下のようなスクリプトを別途作れば内容を確認できます。

import{ sqlite}from"https://esm.town/v/std/sqlite";console.log(await sqlite.execute(`select * from cron_logs`));

メールの送信先は無料版では自分自身に制限されています。
今回は自分への通知の用途にしか利用していないので問題ないですが、複数のアドレスにメールを送信したい場合は有料版に切り替えるかメール送信用のSaaSと組み合わせる必要があります。

Val Townのすごいポイント

Val Townがすごいのは、今回紹介した機能は全て無料で使える点です。
特に、OpenAIのAPIAPIキーの取得なしですぐに使える点はとても良かったです。
OpenAIのAPI呼び出しにはレートリミットなどの制限がありますが、自分でAPIキーを取得して使う方法も案内されているので、制限を超える使い方をしたい場合も安心です。
docs.val.town

また、オンラインエディタ上でAIによる補完が効く点もとても開発体験が良かったです。
Val Townの設定画面を見てみると、AIによる補完にはCodeiumというサービスが使われているようです。

その他の機能

今回は利用しませんでしたが、Val Townでは他にも以下のような機能が使えます。

Email

docs.val.town

今回利用したメール送信ではなく、メールの受信をトリガーとして処理を実行する機能です。
Emailをトリガーとして設定すると、Val Town側でユニークなメールアドレスを払い出してくれます。
払い出されたメールアドレスに対してメールが送られると、そのメールの情報を引数とした関数が呼び出されます。
添付ファイルも取得できるので、ファイルのデータを後述するBlob Storageに保存したりできます。

Blob Storage

docs.val.town

オブジェクトストレージの機能です。
画像などのメディアを読み書きできます。
裏側にはCloudflare R2が使われているようです。

HTTP

docs.val.town

HTTPリクエストをトリガーとして処理を実行する機能です。
サーバーサイドレンダリングの機能もあり、HTMLだけでなくJSXでUIを書いてレスポンスとして返せます。
また、Honoなどのライブラリを用いたルーティングの機能も使えます。

Townie

docs.val.town

AIによる開発支援の機能です。
Val Townでは、エディタにもAIによる補完機能がありますが、Townieは対話式のUIでAI ChatBotとやりとりをしながらアプリケーションの開発ができます。

Val Townのドキュメントには、上記の4つの機能以外にもさまざまな機能の説明があり、実装できるアプリケーションの例なども紹介されています。
docs.val.town

おわりに

これまではちょっとしたアプリケーションのデプロイ先にはFly.ioやRender、Cloudflare Workersなどを利用していましたが、Val Townはシュッとコードを書いてデプロイする先としてかなり体験が良いなと感じました。
印象としては、超高機能なGoogle Apps Scriptといった感じです。

AIの補完による開発体験の良さに加えて、標準で提供されているライブラリやnpmのライブラリを簡単に利用できるので、面倒な設定なしに気軽にコードを書けるのがとても良かったです。
簡単なスクリプトのデプロイ先として、Val Townはかなりおすすめしたいです。

検索
注目記事

引用をストックしました

引用するにはまずログインしてください

引用をストックできませんでした。再度お試しください

限定公開記事のため引用できません。

読者です読者をやめる読者になる読者になる

[8]ページ先頭

©2009-2025 Movatter.jp