[{"data":1,"prerenderedAt":2281},["ShallowReactive",2],{"docs:\u002Fguide\u002Fexecution":3},{"page":4,"untranslated":2280,"translated":2280},{"id":5,"title":6,"body":7,"description":2271,"extension":2272,"meta":2273,"navigation":1496,"path":2274,"publishedAt":2275,"seo":2276,"stem":2277,"updatedAt":2278,"__hash__":2279},"docs_ja\u002Fguide\u002Fexecution.md","実行の制御",{"type":8,"value":9,"toc":2246},"minimark",[10,13,17,112,136,140,163,166,195,206,209,212,286,295,362,376,379,396,434,476,487,490,517,550,552,576,595,652,674,699,702,705,791,907,925,928,941,944,964,1013,1016,1023,1049,1082,1111,1114,1135,1138,1144,1179,1203,1219,1222,1225,1271,1280,1357,1373,1387,1390,1411,1446,1453,1701,1704,1812,1832,1835,1866,1936,1950,1953,2067,2091,2094,2106,2176,2223,2242],[11,12,6],"h1",{"id":6},[14,15,16],"h2",{"id":16},"状態",[18,19,20,32],"table",{},[21,22,23],"thead",{},[24,25,26,29],"tr",{},[27,28,16],"th",{},[27,30,31],{},"意味",[33,34,35,47,57,67,77,90,100],"tbody",{},[24,36,37,44],{},[38,39,40],"td",{},[41,42,43],"code",{},"SCHEDULED",[38,45,46],{},"初回とリトライの実行待ち",[24,48,49,54],{},[38,50,51],{},[41,52,53],{},"QUEUED",[38,55,56],{},"実行対象となり、performerの開始前",[24,58,59,64],{},[38,60,61],{},[41,62,63],{},"RUNNING",[38,65,66],{},"performerの実行中",[24,68,69,74],{},[38,70,71],{},[41,72,73],{},"COMPLETED",[38,75,76],{},"成功。終了状態の1つで、他の状態への遷移なし",[24,78,79,84],{},[38,80,81],{},[41,82,83],{},"FAILED",[38,85,86,87,89],{},"試行回数の上限までの失敗。手動のリトライで",[41,88,43],{},"に遷移",[24,91,92,97],{},[38,93,94],{},[41,95,96],{},"CANCELLED",[38,98,99],{},"取り消し済み。終了状態の1つで、他の状態への遷移なし",[24,101,102,107],{},[38,103,104],{},[41,105,106],{},"STALLED",[38,108,109,110,89],{},"結果が報告されないままの停止。手動のリトライに限り",[41,111,43],{},[113,114,115,118,119,122,124,125,127,128,130,132,133,135],"p",{},[41,116,117],{},"attempts","は、終了した試行の回数です。",[120,121],"br",{},[41,123,43],{},"のジョブは、",[41,126,117],{},"が0の場合は初回の実行待ち、1以上の場合はリトライ待ちです。",[120,129],{},[41,131,83],{},"と",[41,134,106],{},"のジョブは、ダッシュボードまたはREST APIから手動でリトライしてください。",[137,138,139],"h3",{"id":139},"遷移",[113,141,142,144,145,147,148,150,132,152,154,155,160,161,147],{},[41,143,43],{},"のジョブを取り消すと、直ちに",[41,146,96],{},"に遷移します。",[120,149],{},[41,151,53],{},[41,153,63],{},"のジョブは、期限を過ぎた場合か、",[156,157,159],"a",{"href":158},"#%E5%AE%9F%E8%A1%8C%E4%B8%AD%E3%81%AE%E5%8F%96%E3%82%8A%E6%B6%88%E3%81%97","実行中の取り消し","が確定した場合に、",[41,162,96],{},[14,164,165],{"id":165},"リトライ",[113,167,168,169,172,173,176,177,179,181,182,184,186,187,190,191,194],{},"リトライの回数の上限は",[41,170,171],{},"maxAttempts","で、間隔は",[41,174,175],{},"backoff","で設定します。",[120,178],{},[41,180,171],{},"には、1以上の整数を指定してください。",[120,183],{},[41,185,175],{},"は、固定間隔の",[41,188,189],{},"fixed","と指数バックオフの",[41,192,193],{},"exponential","のどちらかの形式で指定します。",[196,197,199],"callout",{"type":198},"info",[113,200,201,202,205],{},"wrangler.jsoncの",[41,203,204],{},"max_retries","はQueuesの設定です。Tsumugiのリトライには影響しません。",[137,207,208],{"id":208},"バックオフ",[113,210,211],{},"既定は、次の指数バックオフです。",[213,214,219],"pre",{"className":215,"code":216,"language":217,"meta":218,"style":218},"language-ts shiki shiki-themes github-light github-dark","{ kind: 'exponential', baseMs: 1_000, factor: 2, maxMs: 3_600_000, jitter: true }\n","ts","",[41,220,221],{"__ignoreMap":218},[222,223,226,230,234,237,241,244,247,249,253,255,258,260,263,265,268,270,273,275,278,280,283],"span",{"class":224,"line":225},"line",1,[222,227,229],{"class":228},"sVt8B","{ ",[222,231,233],{"class":232},"sScJk","kind",[222,235,236],{"class":228},": ",[222,238,240],{"class":239},"sZZnC","'exponential'",[222,242,243],{"class":228},", ",[222,245,246],{"class":232},"baseMs",[222,248,236],{"class":228},[222,250,252],{"class":251},"sj4cs","1_000",[222,254,243],{"class":228},[222,256,257],{"class":232},"factor",[222,259,236],{"class":228},[222,261,262],{"class":251},"2",[222,264,243],{"class":228},[222,266,267],{"class":232},"maxMs",[222,269,236],{"class":228},[222,271,272],{"class":251},"3_600_000",[222,274,243],{"class":228},[222,276,277],{"class":232},"jitter",[222,279,236],{"class":228},[222,281,282],{"class":251},"true",[222,284,285],{"class":228}," }\n",[113,287,288,289,291,292,294],{},"固定間隔にする場合は、",[41,290,233],{},"に",[41,293,189],{},"を指定してください。",[213,296,298],{"className":215,"code":297,"language":217,"meta":218,"style":218},"await tsumugi.enqueue(env, {\n  binding: 'MAIL',\n  payload,\n  backoff: { kind: 'fixed', delayMs: 30_000, jitter: true },\n});\n",[41,299,300,315,327,333,356],{"__ignoreMap":218},[222,301,302,306,309,312],{"class":224,"line":225},[222,303,305],{"class":304},"szBVR","await",[222,307,308],{"class":228}," tsumugi.",[222,310,311],{"class":232},"enqueue",[222,313,314],{"class":228},"(env, {\n",[222,316,318,321,324],{"class":224,"line":317},2,[222,319,320],{"class":228},"  binding: ",[222,322,323],{"class":239},"'MAIL'",[222,325,326],{"class":228},",\n",[222,328,330],{"class":224,"line":329},3,[222,331,332],{"class":228},"  payload,\n",[222,334,336,339,342,345,348,351,353],{"class":224,"line":335},4,[222,337,338],{"class":228},"  backoff: { kind: ",[222,340,341],{"class":239},"'fixed'",[222,343,344],{"class":228},", delayMs: ",[222,346,347],{"class":251},"30_000",[222,349,350],{"class":228},", jitter: ",[222,352,282],{"class":251},[222,354,355],{"class":228}," },\n",[222,357,359],{"class":224,"line":358},5,[222,360,361],{"class":228},"});\n",[113,363,364,367,368,370,371,375],{},[41,365,366],{},"jitter: true","を指定すると、同時に失敗した多数のジョブの再試行時刻が分散されます。",[120,369],{},"\nperformer側から再試行の可否と次の再試行の時刻を指定する方法は、",[156,372,374],{"href":373},"\u002Fguide\u002Fperformer#%E5%86%8D%E8%A9%A6%E8%A1%8C%E3%81%AE%E6%8C%87%E5%AE%9A","再試行の指定","を参照してください。",[14,377,378],{"id":378},"実行保証",[113,380,381,384,385,388,389,392,393,395],{},[41,382,383],{},"guarantee","は、",[41,386,387],{},"at-least-once","(既定)と",[41,390,391],{},"at-most-once","のいずれかです。",[120,394],{},"\n結果が報告されないジョブの動作は、選択した値により異なります。",[18,397,398,408],{},[21,399,400],{},[24,401,402,405],{},[27,403,404],{},"保証",[27,406,407],{},"結果が報告されない場合の動作",[33,409,410,422],{},[24,411,412,417],{},[38,413,414,416],{},[41,415,387],{},"(既定)",[38,418,419,421],{},[41,420,43],{},"としての再投入",[24,423,424,428],{},[38,425,426],{},[41,427,391],{},[38,429,430,431,433],{},"再投入なしの",[41,432,106],{},"。再実行は手動のリトライに限定",[213,435,437],{"className":215,"code":436,"language":217,"meta":218,"style":218},"await tsumugi.enqueue(env, {\n  binding: 'CHARGE',\n  payload,\n  guarantee: 'at-most-once',\n});\n",[41,438,439,449,458,462,472],{"__ignoreMap":218},[222,440,441,443,445,447],{"class":224,"line":225},[222,442,305],{"class":304},[222,444,308],{"class":228},[222,446,311],{"class":232},[222,448,314],{"class":228},[222,450,451,453,456],{"class":224,"line":317},[222,452,320],{"class":228},[222,454,455],{"class":239},"'CHARGE'",[222,457,326],{"class":228},[222,459,460],{"class":224,"line":329},[222,461,332],{"class":228},[222,463,464,467,470],{"class":224,"line":335},[222,465,466],{"class":228},"  guarantee: ",[222,468,469],{"class":239},"'at-most-once'",[222,471,326],{"class":228},[222,473,474],{"class":224,"line":358},[222,475,361],{"class":228},[113,477,478,480,481,483,484,486],{},[41,479,391],{},"のジョブは、二重に実行されません。",[120,482],{},"\nその代わり、実行を開始するまでの時間は、",[41,485,387],{},"より長くなります。",[14,488,489],{"id":489},"タイムアウトと無応答",[113,491,492,495,496,498,499,502,503,506,507,509,510,512,513,375],{},[41,493,494],{},"timeoutMs","を過ぎた試行は、失敗として扱われます。",[120,497],{},"\n試行のエラーには、",[41,500,501],{},"TsumugiTimeoutError","(",[41,504,505],{},"job timed out (\u003CjobId>, \u003CtimeoutMs>ms)",")が記録されます。",[120,508],{},"\nタイムアウト後も、performerの実行は停止されません。",[120,511],{},"\n処理を中断する方法は、",[156,514,516],{"href":515},"\u002Fguide\u002Fperformer#%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%A2%E3%82%A6%E3%83%88%E3%81%AB%E3%82%88%E3%82%8B%E4%B8%AD%E6%96%AD","タイムアウトによる中断",[113,518,519,521,522,524,525,528,529,132,531,534,535,537,539,540,542,543,545,547,548,147],{},[41,520,53],{},"または",[41,523,63],{},"のジョブは、実行開始(または最後の",[41,526,527],{},"heartbeat",")から",[41,530,494],{},[41,532,533],{},"reaperGraceMs","(既定30秒)を過ぎても試行結果が記録されない場合に無応答と判定されます。",[120,536],{},[41,538,391],{},"のジョブは、試行回数に関係なく",[41,541,106],{},"へ遷移します。",[120,544],{},[41,546,387],{},"のジョブは、試行回数が上限に達していなければ再投入され、達していれば",[41,549,83],{},[14,551,159],{"id":159},[113,553,554,132,556,558,559,561,562,568,569,571,572,575],{},[41,555,53],{},[41,557,63],{},"のジョブを取り消すと、performerへの取り消しの要求が記録されます。",[120,560],{},"\n取り消しは、ダッシュボードか",[156,563,565],{"href":564},"\u002Freference\u002Frest-api#post-apijobsidcancel",[41,566,567],{},"POST \u002Fapi\u002Fjobs\u002F:id\u002Fcancel","で実行します。",[120,570],{},"\nこのエンドポイントのレスポンスには、",[41,573,574],{},"requested: true","が含まれます。",[113,577,578,579,582,583,586,587,589,590,592,593,147],{},"performerは、",[41,580,581],{},"ctx.heartbeat()","の戻り値",[41,584,585],{},"cancelRequested","で要求を確認します。",[120,588],{},"\n処理を中断する場合は、例外をthrowして終了してください。",[120,591],{},"\n要求後に失敗した試行はリトライされず、ジョブは",[41,594,96],{},[213,596,598],{"className":215,"code":597,"language":217,"meta":218,"style":218},"const { cancelRequested } = await ctx.heartbeat(progress);\nif (cancelRequested) throw new Error('cancelled');\n",[41,599,600,627],{"__ignoreMap":218},[222,601,602,605,608,610,613,616,619,622,624],{"class":224,"line":225},[222,603,604],{"class":304},"const",[222,606,607],{"class":228}," { ",[222,609,585],{"class":251},[222,611,612],{"class":228}," } ",[222,614,615],{"class":304},"=",[222,617,618],{"class":304}," await",[222,620,621],{"class":228}," ctx.",[222,623,527],{"class":232},[222,625,626],{"class":228},"(progress);\n",[222,628,629,632,635,638,641,644,646,649],{"class":224,"line":317},[222,630,631],{"class":304},"if",[222,633,634],{"class":228}," (cancelRequested) ",[222,636,637],{"class":304},"throw",[222,639,640],{"class":304}," new",[222,642,643],{"class":232}," Error",[222,645,502],{"class":228},[222,647,648],{"class":239},"'cancelled'",[222,650,651],{"class":228},");\n",[113,653,654,655,657,658,660,661,663,664,147,666,668,669,671,673],{},"要求より先に成功が報告された場合は、ジョブは",[41,656,73],{},"のままとなり、結果も保存されます。",[120,659],{},"\n要求から",[41,662,533],{},"(既定30秒)が過ぎても結果が報告されない場合は、ジョブが",[41,665,96],{},[120,667],{},"\nperformerの実行は停止されないため、要求を確認しないperformerは実行を続けます。",[120,670],{},[41,672,96],{},"に遷移した後の報告は、破棄されます。",[113,675,676,677,542,679,681,682,684,685,542,687,689,690,693,694,696,698],{},"リトライ待ちのジョブは、再投入されず",[41,678,96],{},[120,680],{},"\n実行前の",[41,683,391],{},"のジョブも、実行されず",[41,686,96],{},[120,688],{},"\n取り消しを要求済みのジョブに",[41,691,692],{},"reschedule","を要求すると、REST APIは409で応答します。",[120,695],{},[41,697,527],{},"を呼ばないperformerは、要求を確認しません。",[14,700,701],{"id":701},"実行量の制限",[113,703,704],{},"bindingごとに、4つの設定で実行量を制限します。",[18,706,707,720],{},[21,708,709],{},[24,710,711,714,717],{},[27,712,713],{},"設定",[27,715,716],{},"既定",[27,718,719],{},"内容",[33,721,722,737,755,773],{},[24,723,724,729,734],{},[38,725,726],{},[41,727,728],{},"concurrency",[38,730,731],{},[41,732,733],{},"100",[38,735,736],{},"同時に実行するジョブ数の上限",[24,738,739,744,749],{},[38,740,741],{},[41,742,743],{},"rate",[38,745,746],{},[41,747,748],{},"null",[38,750,751,752,754],{},"一定時間あたりに実行するジョブ数の上限。",[41,753,748],{},"は制限なし",[24,756,757,762,767],{},[38,758,759],{},[41,760,761],{},"perKeyConcurrency",[38,763,764],{},[41,765,766],{},"1",[38,768,769,772],{},[41,770,771],{},"concurrencyKey","ごとの同時実行数の上限",[24,774,775,780,784],{},[38,776,777],{},[41,778,779],{},"perKeyRate",[38,781,782],{},[41,783,748],{},[38,785,786,788,789,754],{},[41,787,771],{},"ごとの一定時間あたりの実行数の上限。",[41,790,748],{},[213,792,794],{"className":215,"code":793,"language":217,"meta":218,"style":218},"const tsumugi = defineTsumugi({\n  performers,\n  bindings: {\n    MAIL: {\n      policy: {\n        concurrency: 20,\n        rate: { tokens: 100, intervalMs: 60_000 },\n        perKeyConcurrency: 1,\n        perKeyRate: { tokens: 10, intervalMs: 60_000 },\n      },\n    },\n  },\n});\n",[41,795,796,812,817,822,827,832,843,859,869,884,890,896,902],{"__ignoreMap":218},[222,797,798,800,803,806,809],{"class":224,"line":225},[222,799,604],{"class":304},[222,801,802],{"class":251}," tsumugi",[222,804,805],{"class":304}," =",[222,807,808],{"class":232}," defineTsumugi",[222,810,811],{"class":228},"({\n",[222,813,814],{"class":224,"line":317},[222,815,816],{"class":228},"  performers,\n",[222,818,819],{"class":224,"line":329},[222,820,821],{"class":228},"  bindings: {\n",[222,823,824],{"class":224,"line":335},[222,825,826],{"class":228},"    MAIL: {\n",[222,828,829],{"class":224,"line":358},[222,830,831],{"class":228},"      policy: {\n",[222,833,835,838,841],{"class":224,"line":834},6,[222,836,837],{"class":228},"        concurrency: ",[222,839,840],{"class":251},"20",[222,842,326],{"class":228},[222,844,846,849,851,854,857],{"class":224,"line":845},7,[222,847,848],{"class":228},"        rate: { tokens: ",[222,850,733],{"class":251},[222,852,853],{"class":228},", intervalMs: ",[222,855,856],{"class":251},"60_000",[222,858,355],{"class":228},[222,860,862,865,867],{"class":224,"line":861},8,[222,863,864],{"class":228},"        perKeyConcurrency: ",[222,866,766],{"class":251},[222,868,326],{"class":228},[222,870,872,875,878,880,882],{"class":224,"line":871},9,[222,873,874],{"class":228},"        perKeyRate: { tokens: ",[222,876,877],{"class":251},"10",[222,879,853],{"class":228},[222,881,856],{"class":251},[222,883,355],{"class":228},[222,885,887],{"class":224,"line":886},10,[222,888,889],{"class":228},"      },\n",[222,891,893],{"class":224,"line":892},11,[222,894,895],{"class":228},"    },\n",[222,897,899],{"class":224,"line":898},12,[222,900,901],{"class":228},"  },\n",[222,903,905],{"class":224,"line":904},13,[222,906,361],{"class":228},[113,908,909,911,912,914,915,917,919,920,132,922,924],{},[41,910,779],{},"は、すべてのキーに同じ値で適用されます。",[120,913],{},"\nキーごとに異なる値を設定する項目は、用意されていません。",[120,916],{},[41,918,771],{},"がnullのジョブには、",[41,921,761],{},[41,923,779],{},"が適用されません。",[137,926,927],{"id":927},"実行されない原因の確認",[113,929,930,931,937,938,940],{},"投入したジョブが実行されない場合は、",[156,932,934],{"href":933},"\u002Freference\u002Frest-api#get-apidiagnostics",[41,935,936],{},"GET \u002Fapi\u002Fdiagnostics","のレスポンスで、実行を制限している設定を確認してください。",[120,939],{},"\nレスポンスは、一時停止、同時実行数、レートのどれが原因かを示します。",[137,942,943],{"id":943},"実行時の変更",[113,945,946,947,950,951,953,954,956,957,963],{},"ダッシュボードの",[41,948,949],{},"bindings","タブでは、同時実行数の変更と投入の一時停止を操作します。",[120,952],{},"\n変更はデプロイを必要とせず、bindingのすべてのshardに適用されます。",[120,955],{},"\nこの操作は、",[156,958,960],{"href":959},"\u002Freference\u002Frest-api#post-apibindingsbindingpolicy",[41,961,962],{},"POST \u002Fapi\u002Fbindings\u002F:binding\u002Fpolicy","の呼び出しと同様です。",[213,965,969],{"className":966,"code":967,"language":968,"meta":218,"style":218},"language-bash shiki shiki-themes github-light github-dark","curl -X POST -H \"authorization: Bearer $TOKEN\" -H 'content-type: application\u002Fjson' \\\n  -d '{\"paused\": true}' https:\u002F\u002Fexample.com\u002Fapi\u002Fbindings\u002FMAIL\u002Fpolicy\n","bash",[41,970,971,1002],{"__ignoreMap":218},[222,972,973,976,979,982,985,988,991,994,996,999],{"class":224,"line":225},[222,974,975],{"class":232},"curl",[222,977,978],{"class":251}," -X",[222,980,981],{"class":239}," POST",[222,983,984],{"class":251}," -H",[222,986,987],{"class":239}," \"authorization: Bearer ",[222,989,990],{"class":228},"$TOKEN",[222,992,993],{"class":239},"\"",[222,995,984],{"class":251},[222,997,998],{"class":239}," 'content-type: application\u002Fjson'",[222,1000,1001],{"class":251}," \\\n",[222,1003,1004,1007,1010],{"class":224,"line":317},[222,1005,1006],{"class":251},"  -d",[222,1008,1009],{"class":239}," '{\"paused\": true}'",[222,1011,1012],{"class":239}," https:\u002F\u002Fexample.com\u002Fapi\u002Fbindings\u002FMAIL\u002Fpolicy\n",[113,1014,1015],{},"再開後は、一時停止前から待機していた優先度の低いジョブが、後から投入された優先度の高いジョブより先に実行されることがあります。",[113,1017,1018],{},[1019,1020],"img",{"alt":1021,"src":1022},"bindingsタブ","\u002Fdashboard-bindings.jpg",[113,1024,1025,1026,1029,1030,1033,1034,1036,384,1038,1041,1042,132,1045,1048],{},"コードから変更する場合は、",[41,1027,1028],{},"tsumugi.shardFor","で取得したstubの",[41,1031,1032],{},"configure","を呼び出してください。",[120,1035],{},[41,1037,1032],{},[41,1039,1040],{},"policy","で実行量の設定を、",[41,1043,1044],{},"sweepAfterMs",[41,1046,1047],{},"failedRetentionMs","で保持期間を変更します。",[213,1050,1052],{"className":215,"code":1051,"language":217,"meta":218,"style":218},"await tsumugi.shardFor(env, 'MAIL').configure({ policy: { concurrency: 5 } });\n",[41,1053,1054],{"__ignoreMap":218},[222,1055,1056,1058,1060,1063,1066,1068,1071,1073,1076,1079],{"class":224,"line":225},[222,1057,305],{"class":304},[222,1059,308],{"class":228},[222,1061,1062],{"class":232},"shardFor",[222,1064,1065],{"class":228},"(env, ",[222,1067,323],{"class":239},[222,1069,1070],{"class":228},").",[222,1072,1032],{"class":232},[222,1074,1075],{"class":228},"({ policy: { concurrency: ",[222,1077,1078],{"class":251},"5",[222,1080,1081],{"class":228}," } });\n",[113,1083,1084,1085,1087,1088,1090,1091,1093,1094,1096,1098,1099,1033,1105,1107,1108,1110],{},"実行時に変更した設定は、",[41,1086,949],{},"の設定より優先されます。",[120,1089],{},"\nその後は、",[41,1092,949],{},"の設定は適用されません。",[120,1095],{},[41,1097,949],{},"の設定に戻すには、",[156,1100,1102],{"href":1101},"\u002Freference\u002Frest-api#post-apibindingsbindingpolicyreset",[41,1103,1104],{},"POST \u002Fapi\u002Fbindings\u002F:binding\u002Fpolicy\u002Freset",[120,1106],{},"\nあるいは、",[41,1109,1032],{},"で元の内容を再度指定します。",[14,1112,1113],{"id":1113},"エージング",[113,1115,1116,1117,1119,1120,1122,1123,1125,1126,1129,1130,1132,1134],{},"優先度の高いジョブが投入され続けると、優先度の低いジョブがいつまでも実行されません。",[120,1118],{},"\nこれを防ぐために、待ち時間に応じて実効優先度が上がります。",[120,1121],{},"\nこの動作をエージングと呼び、既定で適用されます。",[120,1124],{},"\n上がる間隔は",[41,1127,1128],{},"agingIntervalMs","で、既定値は60秒です。",[120,1131],{},[41,1133,748],{},"を指定すると、エージングは適用されず、優先度の順序どおりにジョブが実行されます。",[14,1136,1137],{"id":1137},"shard",[113,1139,1140,1141,1143],{},"shardは、bindingのジョブを分割して管理する単位です。",[120,1142],{},"\n既定のshard数は1です。",[213,1145,1147],{"className":215,"code":1146,"language":217,"meta":218,"style":218},"bindings: {\n  MAIL: { shards: 4 },\n}\n",[41,1148,1149,1156,1174],{"__ignoreMap":218},[222,1150,1151,1153],{"class":224,"line":225},[222,1152,949],{"class":232},[222,1154,1155],{"class":228},": {\n",[222,1157,1158,1161,1164,1167,1169,1172],{"class":224,"line":317},[222,1159,1160],{"class":232},"  MAIL",[222,1162,1163],{"class":228},": { ",[222,1165,1166],{"class":232},"shards",[222,1168,236],{"class":228},[222,1170,1171],{"class":251},"4",[222,1173,355],{"class":228},[222,1175,1176],{"class":224,"line":329},[222,1177,1178],{"class":228},"}\n",[113,1180,1181,1182,1185,1186,1188,132,1190,1193,1194,1196,1197,1199,1200,1202],{},"shard数を2以上にすると、",[41,1183,1184],{},"partitionKey","が必須になり、省略すると例外が発生します。",[120,1187],{},[41,1189,771],{},[41,1191,1192],{},"uniqueKey","による制御の範囲は、shard数によって異なります。",[120,1195],{},"\nshard数が1の場合、binding内のすべてのジョブが対象です。",[120,1198],{},"\n2以上の場合、",[41,1201,1184],{},"で選ばれる同じshardのジョブに限られます。",[113,1204,1205,521,1207,1209,1210,1212,1213,1215,1216,1218],{},[41,1206,771],{},[41,1208,1192],{},"を使用する場合は、",[41,1211,1184],{},"にも同じキーを指定してください。",[120,1214],{},"\n異なる値を設定してもエラーにはなりませんが、同じキーを持つジョブが別々のshardに割り当てられる可能性があります。",[120,1217],{},"\nその結果、同時実行や重複生成が発生することがあります。",[14,1220,1221],{"id":1221},"保持期間",[113,1223,1224],{},"終了したジョブは、一定期間が経過すると削除されます。",[18,1226,1227,1238],{},[21,1228,1229],{},[24,1230,1231,1234,1236],{},[27,1232,1233],{},"対象",[27,1235,713],{},[27,1237,716],{},[33,1239,1240,1256],{},[24,1241,1242,1249,1253],{},[38,1243,1244,1246,1247],{},[41,1245,73],{}," \u002F ",[41,1248,96],{},[38,1250,1251],{},[41,1252,1044],{},[38,1254,1255],{},"5分",[24,1257,1258,1264,1268],{},[38,1259,1260,1246,1262],{},[41,1261,83],{},[41,1263,106],{},[38,1265,1266],{},[41,1267,1047],{},[38,1269,1270],{},"7日",[113,1272,1273,1274,1276,1277,1279],{},"削除済みのジョブは、リトライできません。",[120,1275],{},"\n両方の設定は、",[41,1278,949],{},"でbindingごとに指定します。",[213,1281,1283],{"className":215,"code":1282,"language":217,"meta":218,"style":218},"const tsumugi = defineTsumugi({\n  performers,\n  bindings: {\n    MAIL: { sweepAfterMs: 60 * 60 * 1000, failedRetentionMs: 14 * 24 * 60 * 60 * 1000 },\n  },\n});\n",[41,1284,1285,1297,1301,1305,1349,1353],{"__ignoreMap":218},[222,1286,1287,1289,1291,1293,1295],{"class":224,"line":225},[222,1288,604],{"class":304},[222,1290,802],{"class":251},[222,1292,805],{"class":304},[222,1294,808],{"class":232},[222,1296,811],{"class":228},[222,1298,1299],{"class":224,"line":317},[222,1300,816],{"class":228},[222,1302,1303],{"class":224,"line":329},[222,1304,821],{"class":228},[222,1306,1307,1310,1313,1316,1319,1321,1324,1327,1330,1332,1335,1337,1339,1341,1343,1345,1347],{"class":224,"line":335},[222,1308,1309],{"class":228},"    MAIL: { sweepAfterMs: ",[222,1311,1312],{"class":251},"60",[222,1314,1315],{"class":304}," *",[222,1317,1318],{"class":251}," 60",[222,1320,1315],{"class":304},[222,1322,1323],{"class":251}," 1000",[222,1325,1326],{"class":228},", failedRetentionMs: ",[222,1328,1329],{"class":251},"14",[222,1331,1315],{"class":304},[222,1333,1334],{"class":251}," 24",[222,1336,1315],{"class":304},[222,1338,1318],{"class":251},[222,1340,1315],{"class":304},[222,1342,1318],{"class":251},[222,1344,1315],{"class":304},[222,1346,1323],{"class":251},[222,1348,355],{"class":228},[222,1350,1351],{"class":224,"line":358},[222,1352,901],{"class":228},[222,1354,1355],{"class":224,"line":834},[222,1356,361],{"class":228},[113,1358,1359,1360,176,1363,1365,1366,1368,1369,375],{},"ダッシュボードとREST APIの一覧に表示する期間は、保持期間とは別に",[41,1361,1362],{},"retention",[120,1364],{},"\ncronトリガーを設定すると、期間を過ぎた終了済みのジョブとRunが一覧から削除されます。",[120,1367],{},"\n詳細は",[156,1370,1372],{"href":1371},"\u002Freference\u002Fconfig#sweepoptions","SweepOptions",[113,1374,1375,1376,1378,1379,132,1381,1383,1384,1386],{},"既定では2つの期間が一致します。",[120,1377],{},"\nそのため、一覧に表示されている",[41,1380,83],{},[41,1382,106],{},"のジョブは、リトライの対象です。",[120,1385],{},"\n一方の期間だけを変更した場合は、一覧に表示されているジョブでも、リトライの要求に対してREST APIが410で応答する可能性があります。",[14,1388,1389],{"id":1389},"失敗の通知",[113,1391,1392,1395,1396,132,1398,1400,1401,1403,1405,1406,1408,1410],{},[41,1393,1394],{},"onFailure","に通知先のbinding名を指定すると、",[41,1397,83],{},[41,1399,106],{},"のジョブが、指定したperformerに通知されます。",[120,1402],{},[41,1404,83],{},"は、試行回数の上限まで失敗したジョブです。",[120,1407],{},[41,1409,106],{},"は、結果が報告されないまま停止したジョブです。",[213,1412,1414],{"className":215,"code":1413,"language":217,"meta":218,"style":218},"const tsumugi = defineTsumugi({\n  performers,\n  onFailure: 'NotifyFailure',\n});\n",[41,1415,1416,1428,1432,1442],{"__ignoreMap":218},[222,1417,1418,1420,1422,1424,1426],{"class":224,"line":225},[222,1419,604],{"class":304},[222,1421,802],{"class":251},[222,1423,805],{"class":304},[222,1425,808],{"class":232},[222,1427,811],{"class":228},[222,1429,1430],{"class":224,"line":317},[222,1431,816],{"class":228},[222,1433,1434,1437,1440],{"class":224,"line":329},[222,1435,1436],{"class":228},"  onFailure: ",[222,1438,1439],{"class":239},"'NotifyFailure'",[222,1441,326],{"class":228},[222,1443,1444],{"class":224,"line":335},[222,1445,361],{"class":228},[113,1447,1448,1449,1452],{},"通知先のperformerは、",[41,1450,1451],{},"FailureNotice","を引数として受け取ります。",[213,1454,1456],{"className":215,"code":1455,"language":217,"meta":218,"style":218},"import { Performer } from 'tsumugi\u002Fperformer';\nimport type { FailureNotice } from 'tsumugi';\n\nexport class NotifyFailure extends Performer\u003CFailureNotice, void, {}, Env> {\n  async perform(notice: FailureNotice): Promise\u003Cvoid> {\n    const res = await fetch(this.env.SLACK_WEBHOOK, {\n      method: 'POST',\n      body: JSON.stringify({ text: `${notice.binding} が失敗しました: ${notice.error}` }),\n    });\n    if (!res.ok) throw new Error(`notification failed: ${res.status}`);\n  }\n}\n",[41,1457,1458,1475,1492,1498,1534,1568,1597,1607,1650,1655,1692,1697],{"__ignoreMap":218},[222,1459,1460,1463,1466,1469,1472],{"class":224,"line":225},[222,1461,1462],{"class":304},"import",[222,1464,1465],{"class":228}," { Performer } ",[222,1467,1468],{"class":304},"from",[222,1470,1471],{"class":239}," 'tsumugi\u002Fperformer'",[222,1473,1474],{"class":228},";\n",[222,1476,1477,1479,1482,1485,1487,1490],{"class":224,"line":317},[222,1478,1462],{"class":304},[222,1480,1481],{"class":304}," type",[222,1483,1484],{"class":228}," { FailureNotice } ",[222,1486,1468],{"class":304},[222,1488,1489],{"class":239}," 'tsumugi'",[222,1491,1474],{"class":228},[222,1493,1494],{"class":224,"line":329},[222,1495,1497],{"emptyLinePlaceholder":1496},true,"\n",[222,1499,1500,1503,1506,1509,1512,1515,1518,1520,1522,1525,1528,1531],{"class":224,"line":335},[222,1501,1502],{"class":304},"export",[222,1504,1505],{"class":304}," class",[222,1507,1508],{"class":232}," NotifyFailure",[222,1510,1511],{"class":304}," extends",[222,1513,1514],{"class":232}," Performer",[222,1516,1517],{"class":228},"\u003C",[222,1519,1451],{"class":232},[222,1521,243],{"class":228},[222,1523,1524],{"class":251},"void",[222,1526,1527],{"class":228},", {}, ",[222,1529,1530],{"class":232},"Env",[222,1532,1533],{"class":228},"> {\n",[222,1535,1536,1539,1542,1544,1548,1551,1554,1557,1559,1562,1564,1566],{"class":224,"line":358},[222,1537,1538],{"class":304},"  async",[222,1540,1541],{"class":232}," perform",[222,1543,502],{"class":228},[222,1545,1547],{"class":1546},"s4XuR","notice",[222,1549,1550],{"class":304},":",[222,1552,1553],{"class":232}," FailureNotice",[222,1555,1556],{"class":228},")",[222,1558,1550],{"class":304},[222,1560,1561],{"class":232}," Promise",[222,1563,1517],{"class":228},[222,1565,1524],{"class":251},[222,1567,1533],{"class":228},[222,1569,1570,1573,1576,1578,1580,1583,1585,1588,1591,1594],{"class":224,"line":834},[222,1571,1572],{"class":304},"    const",[222,1574,1575],{"class":251}," res",[222,1577,805],{"class":304},[222,1579,618],{"class":304},[222,1581,1582],{"class":232}," fetch",[222,1584,502],{"class":228},[222,1586,1587],{"class":251},"this",[222,1589,1590],{"class":228},".env.",[222,1592,1593],{"class":251},"SLACK_WEBHOOK",[222,1595,1596],{"class":228},", {\n",[222,1598,1599,1602,1605],{"class":224,"line":845},[222,1600,1601],{"class":228},"      method: ",[222,1603,1604],{"class":239},"'POST'",[222,1606,326],{"class":228},[222,1608,1609,1612,1615,1618,1621,1624,1627,1629,1631,1634,1637,1639,1641,1644,1647],{"class":224,"line":861},[222,1610,1611],{"class":228},"      body: ",[222,1613,1614],{"class":251},"JSON",[222,1616,1617],{"class":228},".",[222,1619,1620],{"class":232},"stringify",[222,1622,1623],{"class":228},"({ text: ",[222,1625,1626],{"class":239},"`${",[222,1628,1547],{"class":228},[222,1630,1617],{"class":239},[222,1632,1633],{"class":228},"binding",[222,1635,1636],{"class":239},"} が失敗しました: ${",[222,1638,1547],{"class":228},[222,1640,1617],{"class":239},[222,1642,1643],{"class":228},"error",[222,1645,1646],{"class":239},"}`",[222,1648,1649],{"class":228}," }),\n",[222,1651,1652],{"class":224,"line":871},[222,1653,1654],{"class":228},"    });\n",[222,1656,1657,1660,1663,1666,1669,1671,1673,1675,1677,1680,1683,1685,1688,1690],{"class":224,"line":886},[222,1658,1659],{"class":304},"    if",[222,1661,1662],{"class":228}," (",[222,1664,1665],{"class":304},"!",[222,1667,1668],{"class":228},"res.ok) ",[222,1670,637],{"class":304},[222,1672,640],{"class":304},[222,1674,643],{"class":232},[222,1676,502],{"class":228},[222,1678,1679],{"class":239},"`notification failed: ${",[222,1681,1682],{"class":228},"res",[222,1684,1617],{"class":239},[222,1686,1687],{"class":228},"status",[222,1689,1646],{"class":239},[222,1691,651],{"class":228},[222,1693,1694],{"class":224,"line":892},[222,1695,1696],{"class":228},"  }\n",[222,1698,1699],{"class":224,"line":898},[222,1700,1178],{"class":228},[137,1702,1451],{"id":1703},"failurenotice",[18,1705,1706,1715],{},[21,1707,1708],{},[24,1709,1710,1713],{},[27,1711,1712],{},"名前",[27,1714,719],{},[33,1716,1717,1727,1736,1749,1758,1767,1778,1790,1802],{},[24,1718,1719,1724],{},[38,1720,1721],{},[41,1722,1723],{},"jobId",[38,1725,1726],{},"失敗したジョブのID",[24,1728,1729,1733],{},[38,1730,1731],{},[41,1732,1633],{},[38,1734,1735],{},"失敗したジョブのbinding",[24,1737,1738,1743],{},[38,1739,1740],{},[41,1741,1742],{},"state",[38,1744,1745,521,1747],{},[41,1746,83],{},[41,1748,106],{},[24,1750,1751,1755],{},[38,1752,1753],{},[41,1754,117],{},[38,1756,1757],{},"実行した回数",[24,1759,1760,1764],{},[38,1761,1762],{},[41,1763,171],{},[38,1765,1766],{},"試行回数の上限",[24,1768,1769,1773],{},[38,1770,1771],{},[41,1772,1643],{},[38,1774,1775,1776],{},"最後の試行のエラー。記録なしの場合は",[41,1777,748],{},[24,1779,1780,1785],{},[38,1781,1782],{},[41,1783,1784],{},"runId",[38,1786,1787,1788],{},"投入元のRun。単独で投入したジョブは",[41,1789,748],{},[24,1791,1792,1797],{},[38,1793,1794],{},[41,1795,1796],{},"nodeId",[38,1798,1799,1800],{},"投入元のノード。単独で投入したジョブは",[41,1801,748],{},[24,1803,1804,1809],{},[38,1805,1806],{},[41,1807,1808],{},"failedAt",[38,1810,1811],{},"失敗した時刻。epochミリ秒",[113,1813,1814,1815,1817,1818,1820,1821,1823,1824,1826,1827,1829,1831],{},"すべてのbindingのジョブが通知の対象です。",[120,1816],{},"\n通知は1件のジョブとして実行されます。",[120,1819],{},"\n通知ジョブが失敗した場合、そのジョブは一覧に表示されます。",[120,1822],{},"\n通知ジョブも他のジョブと同様にリトライの対象です。",[120,1825],{},"\n通知先のbinding自身のジョブの失敗は通知されません。",[120,1828],{},[41,1830,1394],{},"を指定する前に失敗したジョブは対象外です。",[14,1833,1834],{"id":1834},"終了の通知",[113,1836,1837,1840,1841,1843,1844,1847,1848,243,1850,243,1852,243,1854,1856,1857,1859,1861,1862,1865],{},[41,1838,1839],{},"onSettled","を指定すると、失敗に限らず、終了したジョブが指定したperformerに通知されます。",[120,1842],{},"\n通知する状態は",[41,1845,1846],{},"states","に指定し、",[41,1849,73],{},[41,1851,83],{},[41,1853,96],{},[41,1855,106],{},"から選びます。",[120,1858],{},[41,1860,1846],{},"は必須です。空の配列や不正な状態を指定すると、",[41,1863,1864],{},"defineTsumugi","で例外が発生します。",[213,1867,1869],{"className":215,"code":1868,"language":217,"meta":218,"style":218},"const tsumugi = defineTsumugi({\n  performers,\n  onSettled: {\n    binding: 'NotifySettled',\n    states: ['COMPLETED', 'FAILED', 'CANCELLED', 'STALLED'],\n  },\n});\n",[41,1870,1871,1883,1887,1892,1902,1928,1932],{"__ignoreMap":218},[222,1872,1873,1875,1877,1879,1881],{"class":224,"line":225},[222,1874,604],{"class":304},[222,1876,802],{"class":251},[222,1878,805],{"class":304},[222,1880,808],{"class":232},[222,1882,811],{"class":228},[222,1884,1885],{"class":224,"line":317},[222,1886,816],{"class":228},[222,1888,1889],{"class":224,"line":329},[222,1890,1891],{"class":228},"  onSettled: {\n",[222,1893,1894,1897,1900],{"class":224,"line":335},[222,1895,1896],{"class":228},"    binding: ",[222,1898,1899],{"class":239},"'NotifySettled'",[222,1901,326],{"class":228},[222,1903,1904,1907,1910,1912,1915,1917,1920,1922,1925],{"class":224,"line":358},[222,1905,1906],{"class":228},"    states: [",[222,1908,1909],{"class":239},"'COMPLETED'",[222,1911,243],{"class":228},[222,1913,1914],{"class":239},"'FAILED'",[222,1916,243],{"class":228},[222,1918,1919],{"class":239},"'CANCELLED'",[222,1921,243],{"class":228},[222,1923,1924],{"class":239},"'STALLED'",[222,1926,1927],{"class":228},"],\n",[222,1929,1930],{"class":224,"line":834},[222,1931,901],{"class":228},[222,1933,1934],{"class":224,"line":845},[222,1935,361],{"class":228},[113,1937,1938,1940,1941,1943,1944,1946,1947,1452],{},[41,1939,73],{},"を含めると、完了したジョブと同じ数の通知ジョブが投入されます。",[120,1942],{},"\nジョブの件数を確認してから指定してください。",[120,1945],{},"\n通知先のperformerは、",[41,1948,1949],{},"SettledNotice",[137,1951,1949],{"id":1952},"settlednotice",[18,1954,1955,1963],{},[21,1956,1957],{},[24,1958,1959,1961],{},[27,1960,1712],{},[27,1962,719],{},[33,1964,1965,1974,1983,1992,2000,2008,2019,2037,2047,2057],{},[24,1966,1967,1971],{},[38,1968,1969],{},[41,1970,1723],{},[38,1972,1973],{},"終了したジョブのID",[24,1975,1976,1980],{},[38,1977,1978],{},[41,1979,1633],{},[38,1981,1982],{},"終了したジョブのbinding",[24,1984,1985,1989],{},[38,1986,1987],{},[41,1988,1742],{},[38,1990,1991],{},"終了時の状態",[24,1993,1994,1998],{},[38,1995,1996],{},[41,1997,117],{},[38,1999,1757],{},[24,2001,2002,2006],{},[38,2003,2004],{},[41,2005,171],{},[38,2007,1766],{},[24,2009,2010,2014],{},[38,2011,2012],{},[41,2013,1643],{},[38,2015,2016,2017],{},"最後の試行のエラー。失敗以外の終了と記録なしの場合は",[41,2018,748],{},[24,2020,2021,2026],{},[38,2022,2023],{},[41,2024,2025],{},"result",[38,2027,2028,2031,2032,2034,2035],{},[41,2029,2030],{},"perform","の戻り値。",[41,2033,73],{},"以外と保存上限超過の場合は",[41,2036,748],{},[24,2038,2039,2043],{},[38,2040,2041],{},[41,2042,1784],{},[38,2044,1787,2045],{},[41,2046,748],{},[24,2048,2049,2053],{},[38,2050,2051],{},[41,2052,1796],{},[38,2054,1799,2055],{},[41,2056,748],{},[24,2058,2059,2064],{},[38,2060,2061],{},[41,2062,2063],{},"settledAt",[38,2065,2066],{},"終了した時刻。epochミリ秒",[113,2068,2069,2070,2072,2073,2075,2077,2078,2080,2081,132,2083,2085,2086,2088,2090],{},"通知先のbinding自身のジョブと、",[41,2071,1394],{},"の通知先のbindingのジョブは、通知されません。",[120,2074],{},[41,2076,1394],{},"と同時に指定した場合、",[41,2079,1846],{},"に含めた",[41,2082,83],{},[41,2084,106],{},"は、両方の通知先に通知されます。",[120,2087],{},[41,2089,1839],{},"を指定する前に終了したジョブは、対象外です。",[14,2092,2093],{"id":2093},"投入時の既定値",[113,2095,2096,2099,2100,2102,2103,2105],{},[41,2097,2098],{},"onEnqueue","を指定すると、ジョブの投入ごとに",[41,2101,2098],{},"が呼び出され、その戻り値が実行オプションの既定値として使用されます。",[120,2104],{},"\n呼び出し側で指定された値は常に優先され、既定値はオプションが明示されていない場合にのみ適用されます。",[213,2107,2109],{"className":215,"code":2108,"language":217,"meta":218,"style":218},"const tsumugi = defineTsumugi({\n  performers,\n  onEnqueue: (input) => (input.binding === 'SlowJob' ? { timeoutMs: 300_000 } : undefined),\n});\n",[41,2110,2111,2123,2127,2172],{"__ignoreMap":218},[222,2112,2113,2115,2117,2119,2121],{"class":224,"line":225},[222,2114,604],{"class":304},[222,2116,802],{"class":251},[222,2118,805],{"class":304},[222,2120,808],{"class":232},[222,2122,811],{"class":228},[222,2124,2125],{"class":224,"line":317},[222,2126,816],{"class":228},[222,2128,2129,2132,2135,2138,2141,2144,2147,2150,2153,2156,2159,2162,2164,2166,2169],{"class":224,"line":329},[222,2130,2131],{"class":232},"  onEnqueue",[222,2133,2134],{"class":228},": (",[222,2136,2137],{"class":1546},"input",[222,2139,2140],{"class":228},") ",[222,2142,2143],{"class":304},"=>",[222,2145,2146],{"class":228}," (input.binding ",[222,2148,2149],{"class":304},"===",[222,2151,2152],{"class":239}," 'SlowJob'",[222,2154,2155],{"class":304}," ?",[222,2157,2158],{"class":228}," { timeoutMs: ",[222,2160,2161],{"class":251},"300_000",[222,2163,612],{"class":228},[222,2165,1550],{"class":304},[222,2167,2168],{"class":251}," undefined",[222,2170,2171],{"class":228},"),\n",[222,2173,2174],{"class":224,"line":335},[222,2175,361],{"class":228},[113,2177,2178,2179,243,2182,243,2185,243,2187,243,2189,243,2191,243,2193,243,2196,243,2199,243,2202,243,2205,2207,2208,2210,243,2212,243,2215,243,2217,243,2220,2222],{},"既定値にできる実行オプションは、",[41,2180,2181],{},"traceparent",[41,2183,2184],{},"priority",[41,2186,171],{},[41,2188,175],{},[41,2190,494],{},[41,2192,383],{},[41,2194,2195],{},"delayMs",[41,2197,2198],{},"runAt",[41,2200,2201],{},"expiresAt",[41,2203,2204],{},"expiresInMs",[41,2206,771],{},"です。",[120,2209],{},[41,2211,1633],{},[41,2213,2214],{},"payload",[41,2216,1192],{},[41,2218,2219],{},"uniqueForMs",[41,2221,1184],{},"は、対象外です。",[113,2224,2225,132,2227,2229,2230,924,2232,2234,2235,2241],{},[41,2226,1394],{},[41,2228,1839],{},"の通知ジョブには、",[41,2231,2098],{},[120,2233],{},"\n別Workerから投入するジョブにも適用する場合は、",[156,2236,2238],{"href":2237},"\u002Fguide\u002Fclient#%E6%8A%95%E5%85%A5%E6%99%82%E3%81%AE%E6%97%A2%E5%AE%9A%E5%80%A4",[41,2239,2240],{},"createClient","に同じ関数を渡してください。",[2243,2244,2245],"style",{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":218,"searchDepth":329,"depth":329,"links":2247},[2248,2251,2254,2255,2256,2257,2261,2262,2263,2264,2267,2270],{"id":16,"depth":317,"text":16,"children":2249},[2250],{"id":139,"depth":329,"text":139},{"id":165,"depth":317,"text":165,"children":2252},[2253],{"id":208,"depth":329,"text":208},{"id":378,"depth":317,"text":378},{"id":489,"depth":317,"text":489},{"id":159,"depth":317,"text":159},{"id":701,"depth":317,"text":701,"children":2258},[2259,2260],{"id":927,"depth":329,"text":927},{"id":943,"depth":329,"text":943},{"id":1113,"depth":317,"text":1113},{"id":1137,"depth":317,"text":1137},{"id":1221,"depth":317,"text":1221},{"id":1389,"depth":317,"text":1389,"children":2265},[2266],{"id":1703,"depth":329,"text":1451},{"id":1834,"depth":317,"text":1834,"children":2268},[2269],{"id":1952,"depth":329,"text":1949},{"id":2093,"depth":317,"text":2093},"ジョブの状態と遷移, リトライとバックオフ, 実行保証, タイムアウト, 実行量の制限, 保持期間, 失敗と終了の通知について","md",{},"\u002Fguide\u002Fexecution","2026-07-22",{"title":6,"description":2271},"guide\u002Fexecution","2026-10-25","_79S80pgC-DtfmQ9dmV6kxwkCmw14x5Qnos4bBUHMEQ",false,1794027571230]