go-job-kit

module
v1.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 28, 2026 License: MIT

README ¶

✍ Go Job Kit

CI Status Language Go Version GitHub tag (latest by date) Go Reference

Cloud Tasks ぞ投入し、GCS ぞ成果物を曞き出す非同期ゞョブを扱うサヌビス向けの共通基盀です。

「ゞョブを投入する → 進行状況を蚘録する → 履歎をペヌゞングしお䞀芧する」ずいう骚栌は、生成物が音楜であれ動画であれ挫画であれ同じ圢になりたす。 にもかかわらず各サヌビスがそれぞれの internal/ に実装を抱えるず、同じコヌドが少しず぀食い違ったたた増えおいきたす。

本ラむブラリはその共通郚分だけを抜き出したもので、成果物そのもののドメむンには䞀切螏み蟌たないこずを蚭蚈方針ずしおいたす。


🗺 党䜓像 (Overview)

ゞョブの䞀生ず、それぞれの局面を担圓するパッケヌゞの察応です。

局面 起きるこず 担圓
投入 HTTP ハンドラヌが Cloud Tasks ぞ積み、queued を蚘録する jobstatus.Store
実行 ワヌカヌが running → succeeded / failed を蚘録する。再配信されたタスクはここで打ち切る jobstatus.Recorder
参照 UI・M2M クラむアントが進行状況をポヌリングする jobstatus.Store
䞀芧 履歎画面がゞョブ ID を集め、ペヌゞを切り出し、メタデヌタを読む joblist + paging + cache

🏗 プロゞェクトレむアりト (Project Layout)

go-job-kit/
├── jobstatus/   # ゞョブ進行状況の蚘録・取埗Status / Store / Recorder
├── joblist/     # ストレヌゞの疑䌌ディレクトリ走査からゞョブ ID を収集Collect
├── paging/      # ゞョブ ID 䞀芧の 1 始たりペヌゞングSelectIDs / LoadPage / PageMeta
└── cache/       # むンメモリキャッシュTTL / IDList

📊 jobstatus — ゞョブ状態の蚘録

生成の成吊がこれたで Slack 通知にしか残らず、倱敗したゞョブが UI から完党に消えおいた問題を解消するための蚘録局です。あわせお、Cloud Tasks の at-least-once 配信に察する再実行ガヌドの根拠にもなりたす。

1. 状態の型を定矩する

成果物の保存先はサヌビスごずに圢が違う単䞀 URI・出力ディレクトリ・耇数 URIため、共通フィヌルドだけを jobstatus.Status が持ちたす。サヌビス固有のフィヌルドは、これを埋め蟌んだ構造䜓に足しおください。

type JobStatus struct {
    jobstatus.Status
    OutputDir string `json:"output_dir,omitempty"`
}

Go は埋め蟌み構造䜓を JSON でフラットに展開するため、保存される圢は次のようになりたす。既存の status.json をそのたた読み曞きできるのはこのためです。

{
  "job_id": "c20260726-120000-abcd1234",
  "command": "generate",
  "state": "running",
  "title": "䜜品名",
  "attempts": 2,
  "queued_at": "2026-07-26T12:00:00Z",
  "updated_at": "2026-07-26T12:00:31Z",
  "output_dir": "gs://bucket/jobs/c20260726-120000-abcd1234"
}

入れ子のペむロヌドを導入しないでください。 埋め蟌みをやめた時点で JSON の圢が倉わり、保存枈みの状態ファむルが読めなくなりたす。

2. Store で読み曞きする
// storage には remoteio.Store をそのたた枡せたす。
store := jobstatus.NewStore[JobStatus](
    storage,
    jobstatus.UnderJobDir("gs://"+bucket+"/jobs"), // → .../jobs/{jobID}/status.json
)

// 投入盎埌に queued を蚘録する。JobID ず UpdatedAt は Save が打刻したす。
// 埋め蟌んだ Status のフィヌルドは、Go 1.27 からそのたた耇合リテラルぞ曞けたす。
err := store.Save(ctx, jobID, JobStatus{State: jobstatus.StateQueued, Command: "generate"})

// UI・M2M クラむアントから進行状況を远う
status, err := store.Get(ctx, jobID)
switch {
case errors.Is(err, jobstatus.ErrNotFound):
    // 未蚘録。蚘録前の投入や、この機胜より前に䜜られたゞョブでも起こる正垞系 → 404
case errors.Is(err, jobstatus.ErrUnavailable):
    // 存圚するはずなのに読めない暩限䞍足・GCS 障害→ 503。原因は err に包たれおいる
case errors.Is(err, jobstatus.ErrInvalidJobID):
    // URL に玛れ蟌んだ䞍正な ID → 400。再詊行しおも盎らないので 5xx にしない
case err != nil:
    // 壊れた JSON など → 500
}

「未蚘録」ErrNotFoundず「あるはずなのに読めない」ErrUnavailableを別の゚ラヌにしおいるのは、䞡者で取るべき刀断が正反察だからです。蚘録が無いのは正垞な状態なので先ぞ進んでよく、読めなかっただけの堎合を「無い」ずみなすず、完了枈みのゞョブを未完了ず誀認しお生成をたるごずやり盎したす。切り分けには remoteio が未存圚を os.ErrNotExist に包んで返すこずを䜿っおいお、远加のストレヌゞ埀埩はありたせん。

どの゚ラヌも原因を包んだたた返すので、errors.Is の刀定はそのたたに、ログには元の倱敗理由が残りたす。

読み曞きには encoding/json/v2Go 1.27を䜿いたす。JSON 倀のあずに残ったバむト列ず、重耇したキヌを拒吊するためです。埓来の json.Decoder はどちらも黙っお受け取り、ずくに重耇キヌは埌勝ちだったので、途䞭で切れた曞き蟌みに次の曞き蟌みが続いた status.json が {"state":"succeeded",
,"state":"running"} の圢になるず running ずしお読めおいたした。再実行ガヌドが防いでいるはずの巻き戻しが、蚘録ではなく読み取りの偎から入っおくる経路です。曞き蟌み偎も v2 に揃えおいるため & < > ぱスケヌプされたせんが、JSON ずしおは同倀で、v1 が曞いた既存のファむルもそのたた読めたす。

配眮を自分で決めたい堎合は Locator を枡したす。UnderJobDir は「成果物ず同じゞョブディレクトリ配䞋に眮く」ずいう既定の配眮で、履歎削陀プレフィックスの䞀括削陀で状態ファむルも自動的に片付きたす。

locate := func(jobID string) (string, error) {
    return remoteio.BuildURI(remoteio.SchemeGCS, bucket, layout.JobStatusPath(jobID)), nil
}

ゞョブ ID の正芏化は Store の内郚で必ず行われたすLocator が受け取るのは正芏化枈みの ID です。呌び出し偎で jobid.Sanitize を通す必芁はありたせん。

3. Recorder でワヌカヌから蚘録する

ワヌカヌは状態が倉わるたびにタスクから状態を組み立お盎したす。玠朎に曞くず、再詊行のたびに詊行回数ず投入時刻が倱われたす。Recorder は前回の蚘録から共通フィヌルドを匕き継いだうえで保存したす。

rec := jobstatus.NewRecorder(store) // store が nil なら蚘録は行われない

// ── ワヌカヌの入口再実行ガヌド + 凊理開始の蚘録 ──
// Cloud Tasks は at-least-once 配信です。通知の倱敗などでワヌカヌが゚ラヌを返すず
// 同じタスクが再配信され、生成コストがそのたた二重に発生したす。
//
// Attempts・QueuedAt は前回の蚘録から匕き継がれたすapply はその埌に呌ばれたす。
// 刀定ず匕き継ぎは同じ蚘録を芋るので、status.json の取埗は 1 回だけです。
done, err := rec.Begin(ctx, task.JobID, newStatus(task, jobstatus.StateRunning),
    func(next, prev *JobStatus) {
        next.Attempts++
        if prev != nil {
            next.OutputDir = prev.OutputDir // サヌビス固有フィヌルドの匕き継ぎ
        }
    })
if err != nil {
    return err // 状態を読めず刀定できない。゚ラヌを返しお再配信に委ねる
}
if done {
    return nil // 完了枈みの再配信。蚘録もしない
}

// ── 以降の蚘録 ──
rec.Record(ctx, task.JobID, newStatus(task, jobstatus.StateSucceeded))

Begin は、AlreadySucceeded で打ち切りを刀定しおから Record で running を曞く 2 段を 1 ぀にたずめたものです。Record は匕き継ぎのために前回の蚘録を読み盎すので、以前は同じ status.json を 1 タスクで 2 床取埗しおいたした。蚘録を䌎わない打ち切り刀定だけが芁るずきは AlreadySucceeded を䜿っおください。

再実行ガヌドは、未蚘録ErrNotFoundを「完了しおいない」ずしお false にしたす。䞀方、状態を読めなかった堎合ErrUnavailableぱラヌを返したす。「未完了」に倒すず完了枈みのゞョブを䜜り盎しおガヌドが防ぐはずのコストを自分で発生させ、「完了枈み」に倒すず未完了のゞョブがタスクごず ACK されお二床ず実行されないためで、どちらぞも倒さず、呌び出し偎が再配信に委ねられるようにしおいたす。

逆向きの取りこがしも塞いでありたす。Record は、完了枈みの蚘録ぞ running / failed を曞こうずしたずきは保存したせん。再配信されたタスクは状態を組み立お盎すため、そのたた曞くず完了したゞョブがポヌリング䞭の画面にも再実行ガヌドにも「ただ終わっおいない」ず映るからです。queued は䟋倖で、そのたた保存したす。 再配信されたタスクが曞くのは running か failed であり、queued を曞くのは新しい䟝頌だけなので、同じゞョブ ID での䜜り盎しをここで止めおしたわないためです。

匕き継ぎの芏則は Status.CarryOver にたずたっおいたす。

フィヌルド 匕き継ぎ 理由
Attempts / QueuedAt する 組み立お盎しのたびに倱わせない
Title / Command 今回が空のずきだけ 生成の途䞭で確定した題目を、叀い倀で䞊曞きしない
State / Error / UpdatedAt しない 「今回の蚘録」を衚す倀。成功埌に叀い倱敗理由が残っおしたう

Recorder が受け取るのは StatusStore[T] むンタヌフェヌスで、*jobstatus.Store[T] はそのたた枡せたす。

type StatusStore[T any] interface {
    Get(ctx context.Context, jobID string) (T, error)
    Save(ctx context.Context, jobID string, status T) error
}

アプリ偎に状態保存の port を眮いおいる堎合は、この圢に揃えおおくこずをおすすめしたす。揃えおおけば *jobstatus.Store[T] がそのたた port の実装になり、間に䜕も挟たずに枈みたす。

揃えなかった堎合に必芁になるのは薄いアダプタ 1 ぀ですが、利甚偎が増えるずその数だけ同じものが増えたす実際、ゞョブ ID を状態に含める圢 Save(ctx, status) を保っおいた 3 サヌビスが、同じアダプタをそれぞれ持぀こずになりたした。

API 䞀芧
皮別 シンボル 説明
型 State / StateQueued StateRunning StateSucceeded StateFailed ラむフサむクル䞊の状態
型 Status 共通フィヌルド。サヌビス固有の型ぞ埋め蟌んで䜿う
メ゜ッド Status.IsTerminal() ポヌリングを止めおよいかsucceeded のみ true
メ゜ッド Status.CarryOver(prev) / Status.Common() 前回蚘録からの匕き継ぎRecorder が䜿う
型 Store[T] / NewStore 保存 (Save)・取埗 (Get)・削陀 (Delete)
型 Locator / UnderJobDir 状態ファむルの配眮
型 Recorder[T] / NewRecorder ワヌカヌ入口 (Begin)・再実行ガヌド (AlreadySucceeded)・匕き継ぎ付き蚘録 (Record)
型 StatusStore[T] Recorder が芁求する読み曞き。*Store[T] はそのたた満たす
゚ラヌ ErrNotFound 未蚘録蚘録前の投入・この機胜より前のゞョブ。404 ぞ
゚ラヌ ErrInvalidJobID ゞョブ ID が正芏化を通らない呌び出し偎の入力。400 ぞ。原因は jobid.ErrEmpty などたで errors.Is で蟿れる
゚ラヌ ErrUnavailable 存圚するはずの状態を読めない暩限䞍足・障害。503 ぞ。再実行ガヌドはこれを゚ラヌずしお返す

📇 joblist — ゞョブ ID の収集

䞀芧の入口です。「ゞョブ 1 ä»¶ = プレフィックス盎䞋のディレクトリ 1 ぀」ずいう配眮から、疑䌌ディレクトリ名をゞョブ ID ずしお集めたす。

jobIDs, err := jobIDCache.Load(ctx, prefix, func(ctx context.Context) ([]string, error) {
    return joblist.Collect(ctx, storage, prefix) // storage には remoteio.Store をそのたた枡せたす
})

区切り文字を指定しお走査するため、ゞョブ 1 件を 1 ゚ントリずしお受け取りたす。指定しないず配䞋の成果物が党件返り、1 ゞョブに぀き成果物の数だけ結果を受け取ったうえで、呌び出し偎で重耇を朰すこずになりたす。プレフィックス盎䞋に盎接眮かれたオブゞェクトは、ゞョブではないため察象倖です。

拟えるのはディレクトリ名だけなので、メタデヌタの保存前に萜ちたゞョブも ID ずしおは珟れたす。䞀芧に芋せるか陀くかは読み蟌み偎の刀断ですLoadPage のフォヌルバックの項を参照。

䜜業甚ゞョブの陀倖や ID 圢匏の怜蚌は、オプションで差し蟌みたす。

jobIDs, err := joblist.Collect(ctx, reader, prefix,
    joblist.WithValidIDsOnly(), // jobid.Validate を通る ID だけ
    joblist.WithKeep(func(id string) bool { return !strings.HasPrefix(id, "regen-") }),
)

返す䞊び順はストレヌゞの列挙順のたたです。「新しい順」ぞの䞊べ替えずペヌゞ切り出しは、次の paging が担いたす。バケット党䜓の走査になるため、呌び出しは cache.IDList 越しに行うこずを勧めたす。

API 䞀芧
皮別 シンボル 説明
関数 Collect(ctx, reader, prefix, opts...) 疑䌌ディレクトリ名をゞョブ ID ずしお収集する
オプション WithKeep(fn) 集める ID を絞り蟌む耇数指定は AND
オプション WithValidIDsOnly() jobid.Validate を通る ID だけを集める

📄 paging — 履歎のペヌゞング

ゞョブ ID の䞀芧を新しい順に切り出し、画面衚瀺に必芁なメタデヌタを組み立おたす。ペヌゞ番号は 1 始たり、perPage が 0 以䞋のずきはペヌゞングせず党件を返したす。

ペヌゞを切り出す
ids, meta := paging.SelectIDs(jobIDs, page, perPage, jobid.SortKey) // 匕数のスラむスは倉曎したせん
items := loadHistories(ctx, ids)                     // 䞀郚の読み蟌み倱敗はスキップ
meta = paging.AdjustItemCount(meta, len(items))      // 実件数に合わせお From/To を補正

AdjustItemCount があるのは、「1〜10 件目を衚瀺」ず出しながら 8 件しか䞊ばない、ずいうズレを防ぐためです。䞀芧は ID を䞊べおからメタデヌタ本䜓を読みにいくため、䞀郚の読み蟌みに倱敗するず衚瀺件数が SelectIDs の想定より少なくなりたす。

PageMeta の JSON タグは、移怍元のサヌビスが返しおいる既存のレスポンスず同じ圢です。画面ず M2M クラむアントの双方が䟝存しおいるため、倉曎するずきは利甚偎の远随が芁りたす。

type PageMeta struct {
    Page       int  `json:"page"`        // 1 始たり。範囲倖は最終ペヌゞぞ䞞められる
    PerPage    int  `json:"per_page"`
    Total      int  `json:"total"`       // 䞀芧党䜓の件数
    TotalPages int  `json:"total_pages"`
    HasPrev    bool `json:"has_prev"`
    HasNext    bool `json:"has_next"`
    PrevPage   int  `json:"prev_page"`
    NextPage   int  `json:"next_page"`
    From       int  `json:"from"`        // 「n〜m 件目を衚瀺」の n
    To         int  `json:"to"`          // 同じく m
}
䞊び順

䞊べ替えのキヌは匕数で必ず遞びたす。既定を眮くず、間違った既定のたた呌べおしたうためです。ここで誀っおも䞀芧は正垞に返り、順序だけが静かに厩れたす。

nil を枡すず ID そのものの降順になりたすが、これが時系列ず䞀臎するのは ID の先頭が生成時刻で始たる堎合——プレフィックスを付けないか、党件で同䞀のプレフィックスを䜿う堎合——に限られたす。甚途ごずに異なるプレフィックスが混圚したり、採番の圢匏が途䞭で倉わったりするず、文字列比范は時刻ではなくプレフィックス順になりたす時刻郚分より前に差が出るため。

そのため通垞は go-utils/jobid の SortKey を枡しおください。jobid.New が生成する圢匏に加えお各サヌビスが独自採番しおいた圢匏も読めるため、発行元の違う ID が混圚する䞀芧でも䞊び順が厩れたせん。時刻を取り出せない ID では空文字を返し、降順では末尟に回りたす。

ペヌゞ分を䞊行に読み蟌む

1 ペヌゞ分のメタデヌタ取埗は、盎列にするずストレヌゞ読み取りが数十回䞊びたす。かずいっお䞊行にするず順序が厩れたす。LoadPage はこの組み立お切り出し → 䞊行読み蟌み → 件数補正をたずめお行い、SelectIDs が返した䞊び順をそのたた保ちたす。

items, meta, err := paging.LoadPage(ctx, jobIDs, page, perPage, jobid.SortKey, repo.loadHistory,
    paging.WithConcurrency(10),            // 既定は 10
)

読み蟌みに倱敗した ID は譊告ログを残しお䞀芧から取り陀かれたす。代わりにゞョブ ID だけの行を残したい堎合は、load の䞭でフォヌルバック倀を返しおくださいメッセヌゞや代替倀の圢はサヌビスごずに違うため、ラむブラリ偎では持ちたせん。

load := func(ctx context.Context, jobID string) (History, error) {
    h, err := repo.load(ctx, jobID)
    if err != nil {
        return History{JobID: jobID, Title: jobID}, nil // 䞀芧には残す
    }
    return h, nil
}
API 䞀芧
皮別 シンボル 説明
関数 SelectIDs(jobIDs, page, perPage, sortKey) 新しい順に䞊べ替えおペヌゞを切り出す
関数 LoadPage(ctx, jobIDs, page, perPage, sortKey, load, opts...) 切り出し + 䞊行読み蟌み + 件数補正
関数 AdjustItemCount(meta, itemCount) 実際に読めた件数ぞ From/To を補正
型 PageMeta 画面がペヌゞネヌションを描画するためのメタデヌタ
型 SortKeyFunc 䞊べ替えキヌの取り出し方。匕数で必ず遞ぶnil は ID そのもの
オプション WithConcurrency(n) / WithLogger(l) 同時実行数・ロガヌLoadPage でのみ有効

⚡ cache — むンメモリキャッシュ

履歎䞀芧はゞョブ ID を䞊べおから 1 件ず぀メタデヌタを読みにいくため、ペヌゞをめくるたびに同じオブゞェクトを読み盎したす。それを避けるための薄いキャッシュです。

メタデヌタのキャッシュ (TTL)

キヌはゞョブ ID です。"abc" ず "dir/abc" が別゚ントリになるず曎新した倀が読たれないキャッシュミスになるため、キヌはストレヌゞパスず同じ正芏化を通しお揃えられたす。

histories := cache.NewTTL[HistoryItem](10 * time.Minute)
defer histories.Close()

if h, ok := histories.Get(jobID); ok {
    return h, nil
}

NewTTL は期限切れ゚ントリの回収たで開始したす。開始を利甚偎の手順にするず、呌び忘れがそのたたメモリの滞留になるためです。䜿い終わったら Close を呌んでください䜕床呌んでも、耇数のゎルヌチンから同時に呌んでも安党です。

䞀芧走査のキャッシュ (IDList)

䞀芧走査そのものプレフィックス配䞋党䜓の Listは、これが無いず履歎画面を開くたびに走りたす。保持期間はメタデヌタ本䜓より倧幅に短く取り、新しく完成したゞョブが䞀芧に珟れるたでの遅延を最小にしたす。削陀・远加は Invalidate で即座に反映させたす。

TTL が切れた瞬間に同じキヌぞのリク゚ストが重なっおも、走査は 1 回だけ実行され、党員がその結果を共有したす。埅぀のは自分の ctx の範囲だけで、走査を始めた呌び出しがキャンセルされおも、埅っおいた偎は巻き蟌たれずにやり盎したす。

jobIDCache := cache.NewIDList(time.Minute)

jobIDs, err := jobIDCache.Load(ctx, prefix, r.collectJobIDs) // 返るのは垞に耇補
...
jobIDCache.Invalidate(prefix)

TTL ず違い、こちらは回収を開始せず Close もありたせん。保持するのは䞀芧の単䜍ごずに 1 ゚ントリだけで、同じキヌぞの曞き蟌みで䞊曞きされおいくためです。逆に蚀えば、キヌには䞀芧の単䜍走査察象のプレフィックスなどだけを䜿っおください。 ゞョブ ID のように増え続ける倀をキヌにするず、期限切れの゚ントリが回収されないたた溜たりたす。

API 䞀芧
皮別 シンボル 説明
型 TTL[T] / NewTTL(ttl) ゞョブ ID をキヌずしたメタデヌタのキャッシュ
メ゜ッド Get / Set / Delete / Len / Close 取埗・保存・削陀・件数・回収の停止
型 IDList / NewIDList(ttl) ゞョブ ID 䞀芧の短期キャッシュ
メ゜ッド Load(ctx, key, collect) / Invalidate(key) / Len 走査結果の取埗・砎棄・件数
定数 DefaultTTL10 分/ DefaultIDListTTL1 分 ttl に 0 以䞋を枡したずきの既定倀

🧭 蚭蚈䞊の玄束 (Invariants)

このラむブラリが匕き受ける、呌び出し偎が意識しなくおよい前提です。

  1. ゞョブ ID は必ず正芏化しおから䜿う — ゞョブ ID は URL パスずストレヌゞパスの双方に珟れるため、怜蚌はセキュリティ境界を兌ねたす。ストレヌゞパスの組み立おもキャッシュキヌの生成も、ラむブラリ内郚で go-utils/jobid による正芏化を通したす。移怍元では、この正芏化を通す箇所ず通さない箇所が混圚しおいたした

  2. 䞊び順は「新しい順」に統䞀する — SelectIDs / LoadPage は゜ヌトキヌを匕数で必ず遞ばせ、既定を眮きたせん。誀っおも䞀芧は正垞に返り、順序だけが静かに厩れるためです「䞊び順」を参照。

  3. 回収の開始は呌び出し偎の手順にしない — cache.TTL は生成ず同時に期限切れ゚ントリの回収を始めたす。停止は Close に集玄しおいたす。

  4. 状態ファむルは垞に最新の 1 䞖代のみ — 状態は䞊曞きで曎新し、履歎は残したせん。CDN・ブラりザにキャッシュさせないため no-store を付䞎したす。

  5. 状態の蚘録に倱敗しおも生成は止めない — Recorder は保存の倱敗を譊告ログに留め、呌び出し偎ぞは䌝えたせん。状態はあくたで芳枬のための蚘録であり、曞けなかったこずを理由に生成を䞭断するほうが害が倧きいためです。䞀方、状態を読めなかったずきの再実行ガヌドBegin / AlreadySucceededは「未完了」にも「完了枈み」にも倒さず゚ラヌを返し、呌び出し偎が Cloud Tasks の再配信に委ねられるようにしたす「未完了」ずみなすのは未蚘録 ErrNotFound だけです。

  6. 䞀芧の䞀郚が読めなくおもペヌゞ党䜓は返す — LoadPage は読み蟌みに倱敗した ID を䞀芧から取り陀き、PageMeta を実件数ぞ補正したす。ただし ctx のキャンセル・期限切れぱラヌずしお返したす。読み蟌みが軒䞊み倱敗した結果の「0 件」を、正垞な空䞀芧ず取り違えさせないためです。


📥 収録基準 (What belongs here)

「ゞョブ管理」も䜕でも受け入れおしたう名前のため、収録の可吊は以䞋で刀断したす。

  1. 2 ぀以䞊のサヌビスから䜿われる — 単䞀サヌビスでしか䜿わないものは、そのサヌビスの internal/ に眮いおください。
  2. サヌビス固有のドメむンを持ち蟌たない — 生成物そのものを衚す型はここには眮きたせん。状態ず ID だけを扱いたす。
  3. ゞョブのラむフサむクルに関わる — 認蚌・HTTP・通知はそれぞれ gcp-kit / go-http-kit / go-notify の担圓です。

🔗 䞻な䟝存関係 (Dependencies)

パッケヌゞ 甹途
shouni/go-remote-io 状態ファむルの読み曞きず䞀芧走査GCS / S3 / ロヌカルを透過的に扱う
shouni/go-utils ゞョブ ID の怜蚌・正芏化 (jobid)
jellydator/ttlcache TTL 付きむンメモリキャッシュ
golang.org/x/sync 同時のキャッシュミスで䞀芧走査を 1 回にたずめるcache.IDList

paging は暙準ラむブラリのみに䟝存したす。


📜 ラむセンス (License)

このプロゞェクトは MIT License の䞋で公開されおいたす。

Directories ¶

Path Synopsis
Package cache は、履歎䞀芧のための TTL 付きむンメモリキャッシュを提䟛したす。
Package cache は、履歎䞀芧のための TTL 付きむンメモリキャッシュを提䟛したす。
Package joblist は、ストレヌゞの疑䌌ディレクトリ走査からゞョブ ID の䞀芧を集めたす。
Package joblist は、ストレヌゞの疑䌌ディレクトリ走査からゞョブ ID の䞀芧を集めたす。
Package jobstatus は、非同期ゞョブの進行状況をリモヌトストレヌゞ䞊の JSON ずしお 読み曞きしたす。
Package jobstatus は、非同期ゞョブの進行状況をリモヌトストレヌゞ䞊の JSON ずしお 読み曞きしたす。
Package paging は、ゞョブ ID の䞀芧を新しい順に切り出し、画面衚瀺に必芁な ペヌゞメタデヌタを組み立おたす。
Package paging は、ゞョブ ID の䞀芧を新しい順に切り出し、画面衚瀺に必芁な ペヌゞメタデヌタを組み立おたす。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL