Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Cron Jobs with Remix
Search
MIZOGUCHI Coji
June 02, 2023
Technology
1
850
Cron Jobs with Remix
Remix でも Cron Job 的なのやりたいですよね!
MIZOGUCHI Coji
June 02, 2023
Tweet
Share
Other Decks in Technology
See All in Technology
Findy Team+ QAチーム これからのチャレンジ!
findy_eventslides
0
300
20251014_Pythonを実務で徹底的に使いこなした話
ippei0923
0
200
能登半島地震で見えた災害対応の課題と組織変革の重要性
ditccsugii
0
980
能登半島地震において デジタルができたこと・できなかったこと
ditccsugii
0
220
フレームワークを意識させないワークショップづくり
keigosuda
0
200
WEBサービスを成り立たせるAWSサービス
takano0131
1
170
プロポーザルのコツ ~ Kaigi on Rails 2025 初参加で3名の登壇を実現 ~
naro143
1
250
アイテムレビュー機能導入からの学びと改善
zozotech
PRO
0
170
Claude Codeを駆使した初めてのiOSアプリ開発 ~ゼロから3週間でグローバルハッカソンで入賞するまで~
oikon48
10
4.3k
生成AI時代のセキュアコーディングとDevSecOps
yuriemori
0
110
"プロポーザルってなんか怖そう"という境界を超えてみた@TSUDOI by giftee Tech #1
shilo113
0
200
HR Force における DWH の併用事例 ~ サービス基盤としての BigQuery / 分析基盤としての Snowflake ~@Cross Data Platforms Meetup #2「BigQueryと愉快な仲間たち」
ryo_suzuki
0
220
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
411
23k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.7k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Docker and Python
trallard
46
3.6k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
980
4 Signs Your Business is Dying
shpigford
185
22k
Navigating Team Friction
lara
190
15k
Git: the NoSQL Database
bkeepers
PRO
431
66k
The Cult of Friendly URLs
andyhume
79
6.6k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.6k
Building a Modern Day E-commerce SEO Strategy
aleyda
44
7.8k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
Transcript
Cron Jobs with Remix COJI Remix Casual Meetup Jun. 1th
2023
Coji Mizoguchi coji techtalkjp coji プログラマー
Remix のアプリで Cron Job したい。 メール送信とかの非同期ジョブ ランキングとか集計とかのバッチジョブ crawler などなど Remix
でも Cron Job 的なのやりたいですよね!
Remix のアプリで Cron Job: どうやって? OS の cron を使う remix
上の一部のコードを共有した別アプリを cron から nodejs で起動? remix 上で api 作って、そこに HTTP で呼ぶ処理を別プロセスで cron から nodejs で起動? これでやるにしても、サーバレスだと OS の cron 使えないの多いし。 微妙! クラウドプラットフォームのジョブスケジューラを使ってAPI をコールさせる サーバレスだと実行時間制限が厳しいですね。 OpenAI とかの処理に時間がかかるようなのをジョブで動かそうとすると厳しい 微妙! remix はモノリシックにできるのが良いのに。 Rails と同じつらみ? なるべく最初は構成もシンプルにしたいですよね
Remix が動いてるのは Nodejs 同一プロセス内で非同期ジョブスケジューラを動かせばいいのでは? サーバ環境は fly.io ( 推し) Remix はカスタムサーバで
シンプルな node-schedule を利用 それぞれ続きのスライドで説明します。 Nodejs は非同期処理が得意。
Remix をカスタムサーバで server.ts express に createRequestHandler でマウントしつつ、同じプロセス内でジョブスケジューラを動かしておく。 import path from
'path' import express from 'express' import { createRequestHandler } from '@remix-run/express' import { createJobSchedular } from 'batch/job-schedular' // ジョブスケジューラ const BUILD_DIR = path.join(process.cwd(), 'build') const port = process.env.PORT || 3000 // express サーバに remix をマウントして起動 const app = express() app.all('*', createRequestHandler({ build: require(BUILD_DIR) })) app.listen(port, () => { require(BUILD_DIR) console.log(`Express server listening on port ${port}`) }) // ジョブスケジューラ。ずっと動かしておく const { start } = createJobSchedular() start()
シンプルな node-schedule を利用 めちゃくちゃシンプルに cron と同じ書き方ができるジョブスケジューラです。 import schedule from 'node-schedule'
import { runTask } from './task' export const createJobSchedular = () => { const start = () => schedule.scheduleJob('10 * * * *', async () => runTask()) // 10 分ごとに起動 return { start } }
その結果 ずっとサーバ代無料で安定してうごいてます!メンテも簡単!
結論 fly.io は良い!( 推し)