2
0

More than 1 year has passed since last update.

Next.js + サーバーサイドTypeScript + 関数フレーバーでクリーンなアプリを作ったので実装意図とか書く Advent Calendar 2022
22日目株式会社mofmofに生息しているshwldです。

前日はNext.js+URQL環境でPostgreSQLのPub/Subを使ったGraphQL Subscriptionについて書きました

Next.jsでGraphQL Subscription環境を構築する

プロジェクトでは、 /apps/worker 配下にワーカーを配置しています。
graphile-workerを選択した理由は、Redisを使わずに使えるというところです。
ただこちらも、前日書いた、pg-pubsubと同様、Redisを使ったほうが使いやすいライブラリが多いような気がします。

graphile-workerも特に使いづらいというわけではないのですが、turbopackの中ではbundleができなかったので、別途rollupでTypeScriptをコンパイルしています。
(この辺結構いろいろ改善点ありそう...)

バックグラウンドタスクを作成する

使い方はわかりやすく、指定したディレクトリにタスクとなるファイルを作成するだけです。

tasks/calculateVelocity.ts
import type { JobHelpers } from 'db-background-job';
import type { CalculateVelocityPayload } from 'domain-interfaces';

module.exports = async function calculateVelocity(
  payload: CalculateVelocityPayload,
  helpers: JobHelpers
) {
  // TODO: バックグラウンドでベロシティを計算する処理
}

タスクを作成したら、以下のようなファイルをnodeで実行してあげれば、ワーカーが起動します。

index.ts
import { startWorker } from 'db-background-job';

startWorker().catch(err => {
  console.error(err);
  process.exit(1);
});

タスクを指定してキューに入れる

quickAddJob を叩いてあげるとキューに入り、バックグラウンド処理が実行されます。

import { quickAddJob } from 'graphile-worker';

quickAddJob(
  // makeWorkerUtils options
  { connectionString: process.env.DATABASE_URL },

  // Task identifier
  taskId: 'calculateVelocity',

  // Payload
  payload
);

次回予告

明日はNext.jsとgraphile-workerをRailwayにデプロイするについて書きます

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0