ハッカソンはDenoを使うのがいいと思う話
Denoって何
JavaScript/TypeScriptのランタイムです。 普通にJSとかTSのコードを動かすことができます。
推している点
良い点はたくさんありますが、普段開発する上で自分が推しているのは以下の部分です
- TypeScriptが標準でサポートされてる
- formatter, linterがビルトインで備えられている
便利!パッと動くの最高!
特にハッカソンで推したい点
ことハッカソンにおいて推したいのは以下の点です
- 環境構築の簡単さ
- 開発体験の良さ
- Deno Deployの存在
環境構築の簡単さ
まず環境構築の簡単さ
ですが、macだったら
curl -fsSL https://deno.land/x/install/install.sh | sh
これで終わり!早い!
ref: https://deno-ja.vercel.app/[email protected]/getting_started/installation
開発体験の良さ
推している点で話しましたがちゃんとした作業環境に入るまでがTypeScriptサポートされていたり,formatter,linterが備え付きでついていたりすることで早い! この辺りが開発体験の良さにつながっているなーと個人的に思います。
Deno Deployの存在
これが一番大きいです。 ハッカソンにおいて一番の障壁になりやすいデプロイですが、Deno Deployを使えば簡単です。 Denoを使っているプロジェクトをGitHubにあげていたらそれを紐付けるだけで簡単にデプロイできます。
さらにそれだけではなく、さまざまな機能を提供してくれています。
ただ、これから紹介する機能は現在(2024/2)はunstable
なので注意して扱ってください。
Deno KV
- Deno KVはDenoに組み込まれているキー・バリューストアで、簡単に使用することができます。
- https://docs.deno.com/deploy/kv/manual
const kv = await Deno.openKv();
const id = crypto.randamUUID();
const user = { name: 'miso' gender:'male'};
const result = await kv.set(['user', id], user);
Deno Cron
- Deno CronはDenoに組み込まれたcronタスクスケジューラーで、これも非常に簡単に使えます。
Deno.cron("Log a message", "* * * * *", () => {
console.log("This will print once a minute.");
});
Deno.cron(
"Retry example",
"* * * * *",
{
backoffSchedule: [1000, 5000, 10000],
},
() => {
throw new Error("Deno.cron will retry this three times, to no avail!");
},
);
ref: https://examples.deno.land/cron
Queues
- メッセージのキューイングもDenoではサポートされていて「何時間後にメールを配信したい!」みたいなことがこれを使えばできます
const kv = await Deno.openKv();
const message = { title: "sample title", content: "you got mail!!" };
const delay = 1000 * 60 * 3;
await kv.enqueue(message, { delay });
kv.listenQueue((msg: unknown) => sendMail(msg));
ref: https://docs.deno.com/deploy/kv/manual/queue_overview#enqueue-a-message
最後に
自分は好きで普段から使っていますが、ハッカソンという短期間(ハッカソンによるかも)で一定のパフォーマンスを出さないと評価されない場合にDenoは様々な面でより良いと思っています。 ぜひ触ってみていただけると嬉しいです。