@vtecx/vtecxdocument 1.0.4 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/batchjob.md +419 -0
- package/package.json +2 -2
package/docs/batchjob.md
ADDED
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
# vte.cx batchjob
|
|
2
|
+
|
|
3
|
+
この文書は、vte.cx の batchjob を実装・登録・運用するための仕様と実践的な指針をまとめたものです。開発者だけでなく、AI コーディングエージェントが実装判断に利用できることを目的とします。
|
|
4
|
+
|
|
5
|
+
## 概要
|
|
6
|
+
|
|
7
|
+
vte.cx の batchjob は、定期処理用の JavaScript モジュールを vte.cx サービスへ登録し、サービスプロパティに cron 形式の起動時刻を設定して実行する仕組みです。
|
|
8
|
+
|
|
9
|
+
- 実行モジュールは `/_html/batchjob` 配下へ登録する。
|
|
10
|
+
- モジュールは `run` 関数を公開する。
|
|
11
|
+
- 実行時には、初期化済みの `VtecxNext` インスタンスが引数として渡される。
|
|
12
|
+
- 渡されるインスタンスは、対象サービスのサービス管理者権限で各機能を利用できる。
|
|
13
|
+
- 起動スケジュールは `/_settings/properties` Entry の `rights` に設定する。
|
|
14
|
+
|
|
15
|
+
通常は TypeScript で実装し、Rspack で JavaScript にトランスパイルしてアップロードします。
|
|
16
|
+
|
|
17
|
+
## モジュールの形式
|
|
18
|
+
|
|
19
|
+
### JavaScript
|
|
20
|
+
|
|
21
|
+
```javascript
|
|
22
|
+
exports.run = async function (vtecxnext) {
|
|
23
|
+
// vtecxnext を使って処理する
|
|
24
|
+
};
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### TypeScript
|
|
28
|
+
|
|
29
|
+
型だけを参照する場合は `import type` を推奨します。
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
import type { VtecxNext } from '@vtecx/vtecxnext'
|
|
33
|
+
|
|
34
|
+
exports.run = async function (vtecxnext: VtecxNext) {
|
|
35
|
+
// vtecxnext を使って処理する
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
次の点を守ってください。
|
|
40
|
+
|
|
41
|
+
- 公開する関数名は `run` とする。
|
|
42
|
+
- 必要な非同期処理はすべて `await` し、完了前に `run` を終了させない。
|
|
43
|
+
- 業務処理は `run` から開始し、モジュールのトップレベルでは実行しない。
|
|
44
|
+
- 引数として渡された `vtecxnext` を使用する。
|
|
45
|
+
- batchjob 内で `VtecxNext` を再生成したり、APIKey や AccessToken で再認証したりしない。
|
|
46
|
+
|
|
47
|
+
## ソースファイルの配置
|
|
48
|
+
|
|
49
|
+
標準的なプロジェクト構成では、TypeScript ファイルを次の場所に置きます。
|
|
50
|
+
|
|
51
|
+
```text
|
|
52
|
+
src/batchjob/{モジュール名}.ts
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
例えば `src/batchjob/daily-report.ts` は、アップロード後に次の JavaScript として登録されます。
|
|
56
|
+
|
|
57
|
+
```text
|
|
58
|
+
/_html/batchjob/daily-report.js
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
スケジュール設定で指定するモジュール名は、通常、パスと拡張子を除いた `daily-report` です。
|
|
62
|
+
|
|
63
|
+
### `/_html/batchjob` の事前登録
|
|
64
|
+
|
|
65
|
+
初回アップロードの前に、登録先である `/_html/batchjob` フォルダーが vte.cx サービス上に存在している必要があります。フォルダーがない状態で Rspack のアップロードを実行するとエラーになります。
|
|
66
|
+
|
|
67
|
+
プロジェクトの `setup/_settings/htmlfolders.xml` に `/_html/batchjob` を定義します。
|
|
68
|
+
|
|
69
|
+
```xml
|
|
70
|
+
<feed>
|
|
71
|
+
<entry>
|
|
72
|
+
<contributor>
|
|
73
|
+
<uri>urn:vte.cx:acl:/_group/$admin,CRUD</uri>
|
|
74
|
+
</contributor>
|
|
75
|
+
<link rel="self" href="/_html/batchjob" />
|
|
76
|
+
</entry>
|
|
77
|
+
</feed>
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
実際のファイルでは、プロジェクトの権限設計に応じた `contributor` を設定してください。既存の `/_settings` や `/_html` の定義がある場合は削除せず、`/_html/batchjob` の Entry を追加します。
|
|
81
|
+
|
|
82
|
+
対象サービスへログインした後、次のコマンドでフォルダー定義をアップロードします。
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
pnpm upload:htmlfolders
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
これは通常、サービスごとの初回セットアップ時、または `htmlfolders.xml` を変更したときに実行します。すでに `/_html/batchjob` が登録済みであれば、batchjob モジュールを更新するたびに実行する必要はありません。
|
|
89
|
+
|
|
90
|
+
## ビルドとアップロード
|
|
91
|
+
|
|
92
|
+
対象の vte.cx サービスへログインし、初回は `/_html/batchjob` を登録してから、Rspack コマンドを実行します。
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
pnpm run login
|
|
96
|
+
pnpm upload:htmlfolders
|
|
97
|
+
pnpm exec rspack --env entry=/batchjob/{モジュール名}.ts
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
`/_html/batchjob` が登録済みの場合、モジュール更新時は次のコマンドだけで構いません。
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
pnpm exec rspack --env entry=/batchjob/{モジュール名}.ts
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
例:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
pnpm exec rspack --env entry=/batchjob/daily-report.ts
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
このコマンドは、プロジェクトの Rspack 設定に従って TypeScript を Node.js 向け JavaScript に変換し、`/_html/batchjob` 配下へアップロードします。
|
|
113
|
+
|
|
114
|
+
> `rspack` の設定やアップロード用プラグインはプロジェクト側に必要です。コマンドがローカルビルドだけでなく対象サービスへのアップロードも行う構成の場合、本番環境に対して不用意に実行しないでください。
|
|
115
|
+
|
|
116
|
+
## 起動時間の登録
|
|
117
|
+
|
|
118
|
+
対象サービスの `/_settings/properties` Entry の `rights` に、次の形式で設定します。
|
|
119
|
+
|
|
120
|
+
```properties
|
|
121
|
+
_batchjob.{ジョブ名}={分} {時} {日} {月} {曜日} {モジュール名}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
| 項目 | 内容 |
|
|
125
|
+
| --- | --- |
|
|
126
|
+
| ジョブ名 | 設定を識別する一意な名前 |
|
|
127
|
+
| 分 | cron の分フィールド |
|
|
128
|
+
| 時 | cron の時フィールド |
|
|
129
|
+
| 日 | cron の日フィールド |
|
|
130
|
+
| 月 | cron の月フィールド |
|
|
131
|
+
| 曜日 | cron の曜日フィールド |
|
|
132
|
+
| モジュール名 | `/_html/batchjob` 配下に登録した JavaScript の拡張子を除く名前 |
|
|
133
|
+
|
|
134
|
+
### 設定例
|
|
135
|
+
|
|
136
|
+
5 分ごとに `queue-worker` を実行:
|
|
137
|
+
|
|
138
|
+
```properties
|
|
139
|
+
_batchjob.queue_worker=*/5 * * * * queue-worker
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
毎日 2:30 に `daily-report` を実行:
|
|
143
|
+
|
|
144
|
+
```properties
|
|
145
|
+
_batchjob.daily_report=30 2 * * * daily-report
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
毎週月曜日の 9:00 に `weekly-summary` を実行:
|
|
149
|
+
|
|
150
|
+
```properties
|
|
151
|
+
_batchjob.weekly_summary=0 9 * * 1 weekly-summary
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
ジョブ名とモジュール名は別の値です。右端のモジュール名が、登録した JavaScript と一致していることを確認してください。
|
|
155
|
+
|
|
156
|
+
タイムゾーン、曜日の数値表現、再試行、最大実行時間など、サービスや実行環境に依存する挙動は推測せず、対象環境で確認してください。
|
|
157
|
+
|
|
158
|
+
## `VtecxNext` の利用
|
|
159
|
+
|
|
160
|
+
`run` に渡される `vtecxnext` は、対象サービスに接続済みです。Entry の取得、検索、登録、更新、プロパティ取得、ログ出力などに利用します。
|
|
161
|
+
|
|
162
|
+
```typescript
|
|
163
|
+
import type { VtecxNext } from '@vtecx/vtecxnext'
|
|
164
|
+
|
|
165
|
+
exports.run = async function (vtecxnext: VtecxNext) {
|
|
166
|
+
const entries = await vtecxnext.getFeed(
|
|
167
|
+
'/example/job?f&example.status-eq-queued&l=10'
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
for (const entry of entries) {
|
|
171
|
+
// Entry を処理する
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
利用できるメソッドと引数は、プロジェクトで使用している `@vtecx/vtecxnext` のバージョンに従ってください。
|
|
177
|
+
|
|
178
|
+
### vte.cx データ操作の注意点
|
|
179
|
+
|
|
180
|
+
- フィールド検索を行う URL には `f` パラメータを付ける。
|
|
181
|
+
- 一度に取得する Entry 数には `l` などで上限を設ける。
|
|
182
|
+
- 複数 Entry は、可能であれば一回の `put()` にまとめる。
|
|
183
|
+
- 親子 Entry を同時に作成する場合は、親を先に登録する。
|
|
184
|
+
- 既存 Entry の更新では、`id` の revision と既存の `contributor` を保持する。
|
|
185
|
+
- revision の競合を無視して上書きしない。
|
|
186
|
+
- 独自データはテンプレートで定義したフィールドへ保存し、標準 Atom フィールドを代用しない。
|
|
187
|
+
- 自動生成された型定義を手作業で編集しない。
|
|
188
|
+
- 権限制御は Entry やフォルダーの ACL/contributor を利用し、コード内へ独自のロール判定を重複実装しない。
|
|
189
|
+
|
|
190
|
+
## サービスプロパティ
|
|
191
|
+
|
|
192
|
+
batchjob の設定値は、必要に応じて `property()` から取得します。
|
|
193
|
+
|
|
194
|
+
```typescript
|
|
195
|
+
const enabled = await vtecxnext.property('_example.batch_enabled')
|
|
196
|
+
|
|
197
|
+
if (enabled !== 'true') {
|
|
198
|
+
return
|
|
199
|
+
}
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
設定例:
|
|
203
|
+
|
|
204
|
+
```properties
|
|
205
|
+
_example.batch_enabled=true
|
|
206
|
+
_example.batch_limit=10
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
API キーなどの秘密情報を扱う場合は、次の原則を守ります。
|
|
210
|
+
|
|
211
|
+
- 秘密情報をソースコード、Git、テストデータ、ドキュメントへ埋め込まない。
|
|
212
|
+
- 実値をログや例外メッセージへ出力しない。
|
|
213
|
+
- 設定例にはプレースホルダーだけを記載する。
|
|
214
|
+
- `/_settings/properties` を更新するときは既存設定を保持し、関係のない設定を上書きしない。
|
|
215
|
+
- 設定 Entry の閲覧・更新権限を適切に制限する。
|
|
216
|
+
|
|
217
|
+
## 冪等性と多重実行への備え
|
|
218
|
+
|
|
219
|
+
定期実行では、同じジョブが重なって起動する、途中で失敗する、実行結果が不明なまま再実行される可能性を考慮します。厳密に一回だけ実行されると仮定してはいけません。
|
|
220
|
+
|
|
221
|
+
キューを処理する場合は、例えば次の状態を Entry に保存します。
|
|
222
|
+
|
|
223
|
+
```text
|
|
224
|
+
queued -> processing -> completed
|
|
225
|
+
-> failed
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
推奨事項:
|
|
229
|
+
|
|
230
|
+
- `queued` など、処理対象の状態を明示的に検索する。
|
|
231
|
+
- 1 回の起動で処理する件数に上限を設ける。
|
|
232
|
+
- 実処理を始める前に `processing` へ更新する。
|
|
233
|
+
- revision 競合が発生した Entry を重複処理しない。
|
|
234
|
+
- 外部システムへの送信には、可能であれば冪等キーを使用する。
|
|
235
|
+
- 完了した処理を自動的に繰り返さない。
|
|
236
|
+
- 長い処理は工程ごとの完了状態を保存し、途中から再開できるようにする。
|
|
237
|
+
- 失敗時に自動再試行して安全かどうかを処理単位で判断する。
|
|
238
|
+
|
|
239
|
+
特にメール送信、決済、外部 API による作成処理など、副作用のある操作では、vte.cx 側の状態だけでなく送信先の結果も確認できる設計にします。
|
|
240
|
+
|
|
241
|
+
## エラー処理とログ
|
|
242
|
+
|
|
243
|
+
処理結果や障害調査に必要な情報は、`vtecxnext.log()` など、利用中の SDK が提供するログ機能で記録します。
|
|
244
|
+
|
|
245
|
+
```typescript
|
|
246
|
+
await vtecxnext.log(
|
|
247
|
+
'daily-report completed. requested=10 completed=9 failed=1',
|
|
248
|
+
'daily-report',
|
|
249
|
+
'INFO'
|
|
250
|
+
)
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
ログに含める情報:
|
|
254
|
+
|
|
255
|
+
- ジョブ名
|
|
256
|
+
- 開始・終了と処理時間
|
|
257
|
+
- 対象件数、成功件数、失敗件数
|
|
258
|
+
- Entry を特定するための秘密情報を含まない識別子
|
|
259
|
+
- 一般化したエラー種別
|
|
260
|
+
|
|
261
|
+
ログに含めない情報:
|
|
262
|
+
|
|
263
|
+
- APIKey、AccessToken、Authorization ヘッダー、Cookie
|
|
264
|
+
- パスワードやセッショントークン
|
|
265
|
+
- 個人情報を含む Entry 全体
|
|
266
|
+
- 外部 API のリクエスト/レスポンス全文
|
|
267
|
+
- 秘密情報を含む可能性がある例外オブジェクトや HTTP ヘッダー全体
|
|
268
|
+
|
|
269
|
+
エラーを捕捉する場合も、失敗状態の保存と安全なログ記録を行ったうえで、呼び出し元に失敗を伝える必要があるケースでは例外を握りつぶさないでください。
|
|
270
|
+
|
|
271
|
+
## 外部 HTTP 通信
|
|
272
|
+
|
|
273
|
+
batchjob から外部サービスへ通信する場合は、次を実装します。
|
|
274
|
+
|
|
275
|
+
- 接続タイムアウトと応答タイムアウトを設定する。
|
|
276
|
+
- レスポンスサイズと取得件数を制限する。
|
|
277
|
+
- HTTP ステータスと Content-Type を検証する。
|
|
278
|
+
- リトライ回数と待機時間に上限を設ける。
|
|
279
|
+
- 外部から与えられた URL を利用する場合は、許可するスキームと接続先を検証する。
|
|
280
|
+
- localhost、ループバック、プライベート IP、リンクローカルなどへの意図しないアクセスを防ぐ。
|
|
281
|
+
- リダイレクト先も再検証する。
|
|
282
|
+
- 外部 API の戻り値を構造検証してから Entry に保存する。
|
|
283
|
+
|
|
284
|
+
ブラウザー自動操作にはブラウザーバイナリなどの実行環境が必要です。batchjob の実行イメージがそれらを提供することを確認できない場合は、Playwright などを前提にせず、対応する別の実行環境へ処理を分離してください。
|
|
285
|
+
|
|
286
|
+
## 実装例
|
|
287
|
+
|
|
288
|
+
次は、キューから最大 10 件を取得して処理する最小例です。Entry のカスタムフィールド名や `put()` の具体的な引数形式は、対象プロジェクトのテンプレートと SDK バージョンに合わせてください。
|
|
289
|
+
|
|
290
|
+
```typescript
|
|
291
|
+
import type { VtecxNext } from '@vtecx/vtecxnext'
|
|
292
|
+
|
|
293
|
+
exports.run = async function (vtecxnext: VtecxNext) {
|
|
294
|
+
const enabled = await vtecxnext.property('_example.batch_enabled')
|
|
295
|
+
if (enabled !== 'true') {
|
|
296
|
+
return
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
const entries = await vtecxnext.getFeed(
|
|
300
|
+
'/example/job?f&example.status-eq-queued&l=10'
|
|
301
|
+
)
|
|
302
|
+
|
|
303
|
+
let completed = 0
|
|
304
|
+
let failed = 0
|
|
305
|
+
|
|
306
|
+
for (const entry of entries) {
|
|
307
|
+
try {
|
|
308
|
+
// 1. revision を保持したまま processing へ更新する
|
|
309
|
+
// 2. 必要な処理を実行する
|
|
310
|
+
// 3. completed と処理結果を保存する
|
|
311
|
+
completed += 1
|
|
312
|
+
} catch (error) {
|
|
313
|
+
// 秘密情報を含まない形で failed とエラー概要を保存する
|
|
314
|
+
failed += 1
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
await vtecxnext.log(
|
|
319
|
+
`example batch completed. requested=${entries.length} completed=${completed} failed=${failed}`,
|
|
320
|
+
'example-batch',
|
|
321
|
+
failed === 0 ? 'INFO' : 'WARN'
|
|
322
|
+
)
|
|
323
|
+
}
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
## デプロイ手順
|
|
327
|
+
|
|
328
|
+
1. `src/batchjob/{モジュール名}.ts` を実装する。
|
|
329
|
+
2. 型チェック、Lint、単体テストを実行する。
|
|
330
|
+
3. 対象環境とログイン先を確認する。
|
|
331
|
+
4. 初回は `setup/_settings/htmlfolders.xml` に `/_html/batchjob` が定義されていることを確認する。
|
|
332
|
+
5. 初回は `pnpm upload:htmlfolders` で登録先フォルダーをアップロードする。
|
|
333
|
+
6. Rspack コマンドで JavaScript をビルドし、アップロードする。
|
|
334
|
+
7. `/_html/batchjob/{モジュール名}.js` が登録されたことを確認する。
|
|
335
|
+
8. 必要なサービスプロパティを設定する。
|
|
336
|
+
9. `/_settings/properties` Entry の `rights` に `_batchjob.*` のスケジュールを登録する。
|
|
337
|
+
10. 少量のデータまたは副作用を抑えた設定で動作確認する。
|
|
338
|
+
11. 実行ログ、Entry の状態遷移、外部処理の結果を確認する。
|
|
339
|
+
|
|
340
|
+
## AI コーディングエージェント向けチェックリスト
|
|
341
|
+
|
|
342
|
+
実装またはレビュー時は、少なくとも次を確認してください。
|
|
343
|
+
|
|
344
|
+
- [ ] `exports.run = async function (vtecxnext)` の形式になっている。
|
|
345
|
+
- [ ] 引数の `vtecxnext` を使用し、認証情報を埋め込んでいない。
|
|
346
|
+
- [ ] `setup/_settings/htmlfolders.xml` に `/_html/batchjob` が定義されている。
|
|
347
|
+
- [ ] 初回アップロード前に `pnpm upload:htmlfolders` を実行している。
|
|
348
|
+
- [ ] ソースと登録先が `batchjob/{モジュール名}` で対応している。
|
|
349
|
+
- [ ] スケジュール右端のモジュール名が登録ファイルと一致している。
|
|
350
|
+
- [ ] 検索 URL に必要な `f` と件数上限がある。
|
|
351
|
+
- [ ] 多重実行と revision 競合を考慮している。
|
|
352
|
+
- [ ] 処理が冪等、または再実行可否が明示されている。
|
|
353
|
+
- [ ] すべての非同期処理を `await` している。
|
|
354
|
+
- [ ] タイムアウト、取得件数、レスポンスサイズに上限がある。
|
|
355
|
+
- [ ] 秘密情報や個人情報をログへ出力しない。
|
|
356
|
+
- [ ] 既存の Entry、`contributor`、サービスプロパティを不用意に破壊しない。
|
|
357
|
+
- [ ] SDK や実行環境について未確認の挙動を断定していない。
|
|
358
|
+
- [ ] 本番アップロード前に対象サービスを確認している。
|
|
359
|
+
|
|
360
|
+
## よくある問題
|
|
361
|
+
|
|
362
|
+
### アップロード時に `/_html/batchjob` が存在しないエラーになる
|
|
363
|
+
|
|
364
|
+
Rspack のアップロード先フォルダーがサービス上に未登録です。
|
|
365
|
+
|
|
366
|
+
1. `setup/_settings/htmlfolders.xml` に `/_html/batchjob` の Entry を追加する。
|
|
367
|
+
2. 対象サービスへログインする。
|
|
368
|
+
3. `pnpm upload:htmlfolders` を実行する。
|
|
369
|
+
4. Rspack のアップロードコマンドを再実行する。
|
|
370
|
+
|
|
371
|
+
```bash
|
|
372
|
+
pnpm run login
|
|
373
|
+
pnpm upload:htmlfolders
|
|
374
|
+
pnpm exec rspack --env entry=/batchjob/{モジュール名}.ts
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
`/_html` だけが存在していても、子フォルダーの `/_html/batchjob` が未登録であればアップロードできません。
|
|
378
|
+
|
|
379
|
+
### ジョブが起動しない
|
|
380
|
+
|
|
381
|
+
- JavaScript が `/_html/batchjob` 配下へ登録されているか確認する。
|
|
382
|
+
- `exports.run` が公開されているか確認する。
|
|
383
|
+
- `_batchjob.*` が `/_settings/properties` Entry の `rights` に設定されているか確認する。
|
|
384
|
+
- 設定右端のモジュール名と登録ファイル名を照合する。
|
|
385
|
+
- cron 式と対象環境のタイムゾーンを確認する。
|
|
386
|
+
|
|
387
|
+
### ジョブは起動するがデータを取得できない
|
|
388
|
+
|
|
389
|
+
- 対象パスとテンプレートのフィールド名を確認する。
|
|
390
|
+
- フィールド検索 URL に `f` があるか確認する。
|
|
391
|
+
- `VtecxNext` の利用方法が、インストール済み SDK のバージョンに合っているか確認する。
|
|
392
|
+
|
|
393
|
+
### 同じ処理が複数回実行される
|
|
394
|
+
|
|
395
|
+
- Entry の状態を処理開始前に `processing` へ更新する。
|
|
396
|
+
- revision 競合を検出し、競合した側で処理を続行しない。
|
|
397
|
+
- 外部処理に冪等キーまたは処理済み判定を追加する。
|
|
398
|
+
- 実行間隔より処理時間が長くなっていないか確認する。
|
|
399
|
+
|
|
400
|
+
### ローカルでは動くが batchjob では失敗する
|
|
401
|
+
|
|
402
|
+
- Node.js のバージョンと利用可能な Web API を確認する。
|
|
403
|
+
- Rspack によるバンドル結果と外部依存関係を確認する。
|
|
404
|
+
- ファイルシステム、ブラウザー、ネイティブモジュールなど、実行環境に存在すると仮定した機能を見直す。
|
|
405
|
+
- 実行時間、メモリ、外部通信の制限を対象環境で確認する。
|
|
406
|
+
|
|
407
|
+
## 未確認事項の扱い
|
|
408
|
+
|
|
409
|
+
次の項目は、実装前または運用開始前に対象サービスの仕様・設定で確認してください。
|
|
410
|
+
|
|
411
|
+
- cron の基準タイムゾーン
|
|
412
|
+
- 同一ジョブの同時実行制御
|
|
413
|
+
- 失敗時の自動再試行回数と間隔
|
|
414
|
+
- 最大実行時間、メモリ、ペイロードの制限
|
|
415
|
+
- 利用可能な Node.js バージョンと組み込み API
|
|
416
|
+
- 外部ネットワークへの接続制限
|
|
417
|
+
- ログの保存先、保持期間、閲覧権限
|
|
418
|
+
|
|
419
|
+
不明な挙動をコード側で都合よく仮定せず、安全側の制限と冪等性を実装してください。
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vtecx/vtecxdocument",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.6",
|
|
4
4
|
"description": "vte.cx BaaS framework and API documentation",
|
|
5
5
|
"main": "",
|
|
6
6
|
"files": [
|
|
@@ -21,4 +21,4 @@
|
|
|
21
21
|
"url": "https://github.com/reflexworks/vtecxdocument/issues"
|
|
22
22
|
},
|
|
23
23
|
"homepage": "https://github.com/reflexworks/vtecxdocument#readme"
|
|
24
|
-
}
|
|
24
|
+
}
|