見出し画像

真昼の集中を守るために夜間へ逃がした

Cron / Queue で回す個人開発のバッチ処理見直し

ターミナルに、また同じコマンドを打っていた。

npm run backup
npm run weekly:stats

真昼のカーテンは閉じている。
内向きの仕事の時間なのに、個人開発の「ついで」が割り込んでくる(笑)

処理そのものは悪いことじゃない。
悪いのは、人が起きている時間帯に人が手で回していることでした。

夏に向けて、僕はバッチ処理の置き場所を見直しました。
定時は Cron
重い・再試行が要るものは Queue

どちらも、原則は夜間——
または「今じゃなくていいとき」——へ逃がす。

真昼の集中を守るための、技術側の設計記録です。


バッチは便利なのに日中の敵にもなる

みなさんは、個人開発のメンテ作業を「今ちょっとだけ」と真昼に回して、そのまま集中が戻らなくなった経験はありますか。

僕には、それが何度もありました。

真昼を避けてリズムを戻した話では、真昼を内向きの仕事——執筆・思索・静かな実装——に使うと書きました。

光の強さに、仕事の向きを合わせる。

それでも、個人開発のリポジトリを開くと別の声が来る。

「バックアップ、今日まだだ」
「週次の集計、忘れそう」
「このレポート、先に出しておこう」

全部、真面目に聞こえる。
だから厄介です(汗)

触らない一本で、リファクタは週の札にした。

バッチは、リファクタじゃない顔をして割り込んでくる。
掃除でも改修でもなく、運用の雑務。
雑務ほど、真昼の集中を静かに削る。

問題はバッチ処理そのものではない。
いつ、誰が回すかが設計されていなかったのです。

夏の個人開発は、機能の追加より先に、運用の雑音を減らす季節でもある。
真昼にカーテンを閉じても、ターミナルが騒げば部屋の静けさは戻らない。
だから今回の主題は、新しいフレームワークではない。
既存のメンテを人の手元から夜間へ移すことです。

手動実行が真昼の集中を削っていた

かつての僕の個人開発運用は、だいたいこうでした。

👇️ Markdown 形式
| 作業 | やり方 | 起きていたこと |
|:---|:---|:---|
| バックアップ | 思い出したときに手動 | 忘れる/真昼に思い出す |
| 週次集計 | 日曜の夜に手動 | 忘れると翌週へ持ち越し |
| 重い出力 | 必要になった瞬間に実行 | ノートパソコンが熱くなり、執筆が止まる |

夏はとくにきつい。
エアコンの効いた部屋でも、重い処理を回すとファンの音が上がる。
Mac mini はファンが小さく、熱くなりにくいですが、MacBook Pro は熱くなりやすい(汗)
画面の応答も鈍くなる。
内向きの仕事の静けさが、物理的に壊れる。

吃音のある僕は、外の喧騒を避けて真昼に閉じる選択をした。
なのに、自分のターミナルが喧騒を持ち込んでいた。

もう一つの失敗は、ローカル Cron への過信でした。

ノートを閉じるとジョブは走らない。
出張や昼寝で蓋を閉じたまま、朝「何も動いていない」と気づく。
意志の問題ではなく、実行環境の問題です。

環境を変えて朝を戻した実験と同じ構造でした。

頑張るのではなく、前提を移す。

バッチも、人の手元から離す必要があったのです。

今やらなくていい処理を夜間の仕事として定義し直す

転機は、処理の分類を変えたことでした。

以前は、自動化したい作業と雑に括っていました。
今は、次の三つの問いだけ先に立てます。

【バッチ見直しの三問】
1. これは、今この瞬間に結果が要るか?
2. 失敗したら、人がすぐ対応すべきか?
3. 日中の集中を削ってまで、手で回す価値があるか?

答えが「いいえ」に寄るものから、夜間へ逃がす。

七夕の技術の願い事で、リファクタしたい/触りたい/手放したいを分けました。

今回は運用側の分け方です。

日中に触るものと、夜間に任せるもの

触らない一本が手を伸ばす先を減らすなら、夜間バッチは手を伸ばす時間帯を減らす。
同じ夏の設計の技術側の線です。

8 月の空白週を先入れした話が時間の箱を確保するなら、今日の話は処理の箱を夜間に移す。

空白もバッチも、走っている今だからこそ先に設計できる。

【設計】 Cron と Queue の使い分け

道具を増やす前に、役割を固定しました。

👇️ Markdown 形式
| | Cron(定時) | Queue(待ち行列) |
|:---|:---|:---|
| 向くもの | 毎日/毎週、決まった時刻で足りる | 発生は不定期、重い、再試行したい |
| 例 | バックアップ、ヘルスチェック、週次 README | レポート生成、画像一括、通知のまとめて送信 |
| 失敗時 | 翌朝まとめて見る | リトライ+デッドレターを設計する |
| 僕の置き場 | GitHub Actions の `schedule` | アプリ内のジョブ Queue(再試行付き) |

ポイントは、全部を Queue にしないことです。
個人開発で Queue 基盤だけを厚くすると、増やさない週の精神に反する。
定時で足りるものは Cron のままが軽い。

逆に、ユーザー操作や溜まった作業を Cron に無理に載せると、空っぽの時間に空振りしたり、ピークで重なったりする。
重いものは Queue に積んで、ワーカーが夜間に消化する。

僕のルールは一行です。

ここから先は

5,459字 / 3画像

メンバーシップ ¥ 500 /月

■メンバーシップ 15 年目フリーランス開発者のひとり戦略を支える作戦会議室です。\ 案件に追われる…

ベーシックプラン

¥500 / 月

最後まで読んでいただき、ありがとうございます。もしこの記事が「役に立った」「心に響いた」と感じたら、珈琲一杯分サポートいただけると嬉しいです。あなたの温かい応援を力に、また次の創作活動に励みます。