ハッカソンは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


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は様々な面でより良いと思っています。 ぜひ触ってみていただけると嬉しいです。