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をコンパイルしています。
(この辺結構いろいろ改善点ありそう...)
バックグラウンドタスクを作成する
使い方はわかりやすく、指定したディレクトリにタスクとなるファイルを作成するだけです。
import type { JobHelpers } from 'db-background-job';
import type { CalculateVelocityPayload } from 'domain-interfaces';
module.exports = async function calculateVelocity(
payload: CalculateVelocityPayload,
helpers: JobHelpers
) {
// TODO: バックグラウンドでベロシティを計算する処理
}
タスクを作成したら、以下のようなファイルをnodeで実行してあげれば、ワーカーが起動します。
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にデプロイするについて書きます