Skip to content
Back to skills

Documents

ASecurity

ファイル取込を同期処理から分離し、APIで受け付けたファイルを後続のワーカーが解析できる構成にする。APIはファイル本体をオブジェクトストレージへ保存し、保存先をキューへ登録する。ワーカーはキューから保存先を受け取り、オブジェクトストレージのファイルを読み、解析結果をDBへ保存する。

  • 50 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 7, 2026
developmentapi

Works with

  • api

Security analysis

A100/100

Pro scans all 21 files and shows the line behind each finding

Scanned November 7, 2026

npx -y skills add iwasa-kosui/tanteki --skill documents --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Documents?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Documents
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/iwasa-kosui-documents-b6ac5b98/badge)](https://www.skillsdirectory.com/skills/iwasa-kosui-documents-b6ac5b98)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
# ファイル取込の設計書

## 背景と目的

ファイル取込を同期処理から分離し、APIで受け付けたファイルを後続のワーカーが解析できる構成にする。APIはファイル本体をオブジェクトストレージへ保存し、保存先をキューへ登録する。ワーカーはキューから保存先を受け取り、オブジェクトストレージのファイルを読み、解析結果をDBへ保存する。

## 範囲と制約

対象は次の処理である。

- APIによるファイルの受け付け
- オブジェクトストレージへのファイル保存
- 保存先のキューへの登録
- ワーカーによるファイルの読み出しと解析
- 解析結果のDBへの保存

ファイル本体をキューへ登録する方式は採用しない。ファイルサイズが10MBの場合、キューの1MB制限を超えるためである。解析を非同期化するため、利用者が結果を確認できるまでの時間は同期処理より長くなる。

## 採用設計

### 処理の流れ

```mermaid
sequenceDiagram
    participant C as 利用者
    participant A as API
    participant S as オブジェクトストレージ
    participant Q as キュー
    participant W as ワーカー
    participant D as DB

    C->>A: ファイルを送信
    A->>S: ファイルを保存
    S-->>A: 保存結果
    alt 保存に成功
        A->>Q: 保存先を登録
        Q-->>A: 登録結果
        A-->>C: 受付結果
        Q->>W: 保存先を配信
        W->>S: ファイルを読み出し
        S-->>W: ファイル本体
        W->>W: ファイルを解析
        W->>D: 解析結果を保存
    else 保存に失敗
        A-->>C: 503
    end
```

APIは、ファイルをオブジェクトストレージへ保存してから、保存先をキューへ登録する。オブジェクトストレージへの保存に失敗した場合は503を返し、キューへ登録しない。

ワーカーはキューから保存先を受け取り、保存先のファイルをオブジェクトストレージから読み出す。読み出したファイルを解析し、解析結果をDBへ保存する。

### 失敗時の扱い

オブジェクトストレージへの保存に失敗した場合、APIは503を返し、キューへの登録を行わない。したがって、保存できていないファイルをワーカーが処理することはない。

キューへの登録に失敗した場合の回復方法は未決定である。キューへの登録前に保存したファイルをどう扱うか、再登録を行うかは、この設計書では確定しない。

## 代替案と採否

### ファイル本体をキューへ登録する方式

この方式は採用しない。10MBのファイルはキューの1MB制限を超えるため、ファイルを登録できない。保存先だけをキューへ登録し、ファイル本体をオブジェクトストレージから読む方式を採用する。

## 影響

解析を非同期化するため、利用者への結果提示は遅くなる。APIの処理完了時点では解析結果がDBに保存されていない場合がある。

一方、ファイル本体はキューのサイズ制限を受けず、ワーカーがオブジェクトストレージから読み出して解析できる。オブジェクトストレージへの保存に失敗した場合は、APIが503を返し、処理対象をキューへ登録しない。

## 未決定事項

- キューへの登録に失敗した場合の回復方法
- キューへの登録前にオブジェクトストレージへ保存されたファイルの扱い
- 非同期処理の結果を利用者へ提示する方法

これらは実装の詳細または運用方法を確定する前に決める必要がある。特にキューへの登録失敗の回復方法は、保存済みファイルが解析されない状態をどう解消するかに関わる。

Files in this skill

  • adr-boundary.1.with_skill.md1.4 KB
  • adr-boundary.1.without_skill.md2.1 KB
  • adr-boundary.2.with_skill.md1.2 KB
  • adr-boundary.2.without_skill.md3 KB
  • canonical-reference.1.with_skill.md290 B
  • canonical-reference.1.without_skill.md321 B
  • canonical-reference.2.with_skill.md306 B
  • canonical-reference.2.without_skill.md289 B
  • comparison-rfc.1.with_skill.md1.3 KB
  • comparison-rfc.1.without_skill.md1.4 KB
  • comparison-rfc.2.with_skill.md1.3 KB
  • comparison-rfc.2.without_skill.md1.6 KB
  • design-tradeoff.1.with_skill.md3.9 KB
  • design-tradeoff.1.without_skill.md9.9 KB
  • design-tradeoff.2.with_skill.md3.9 KB
  • design-tradeoff.2.without_skill.md6.3 KB
  • incident-record.1.with_skill.md517 B
  • incident-record.1.without_skill.md535 B
  • incident-record.2.with_skill.md557 B
  • incident-record.2.without_skill.md500 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.