Agent Skills by ALSEL
Anthropic Claudeその他⭐ リポ 0品質スコア 50/100

content-hash-cache-pattern

ファイルの内容をSHA-256でハッシュ化し、パスに依存しない形で処理結果をキャッシュするパターンです。内容が変われば自動的に無効化され、サービス層を分離したクリーンな設計を実現します。コストの高いファイル処理を効率化したい場面で活躍します。

description の原文を見る

使用SHA-256内容哈希缓存昂贵的文件处理结果——路径无关、自动失效、服务层分离。

SKILL.md 本文

コンテンツハッシュファイルキャッシュパターン

SHA-256 コンテンツハッシュをキャッシュキーとして使用し、高コストなファイル処理結果(PDF 解析、テキスト抽出、画像分析)をキャッシュします。パスベースのキャッシュとは異なり、この方法はファイルの移動/名前変更後も有効であり、コンテンツ変更時には自動的に無効化されます。

いつ活用するか

  • ファイル処理パイプラインを構築するとき(PDF、画像、テキスト抽出)
  • 処理コストが高く、同じファイルが繰り返し処理されるとき
  • --cache/--no-cache CLI オプションが必要なとき
  • 既存の純粋関数を変更せずにキャッシュを追加したいとき

コアパターン

1. コンテンツハッシュベースのキャッシュキー

ファイルパスではなくファイルコンテンツをキャッシュキーとして使用します:

import hashlib
from pathlib import Path

_HASH_CHUNK_SIZE = 65536  # 64KB chunks for large files

def compute_file_hash(path: Path) -> str:
    """SHA-256 of file contents (chunked for large files)."""
    if not path.is_file():
        raise FileNotFoundError(f"File not found: {path}")
    sha256 = hashlib.sha256()
    with open(path, "rb") as f:
        while True:
            chunk = f.read(_HASH_CHUNK_SIZE)
            if not chunk:
                break
            sha256.update(chunk)
    return sha256.hexdigest()

コンテンツハッシュを使う理由は? ファイルの名前変更/移動 = キャッシュヒット。コンテンツ変更 = 自動無効化。インデックスファイルが不要。

2. キャッシュエントリ用のフローズンデータクラス

from dataclasses import dataclass

@dataclass(frozen=True, slots=True)
class CacheEntry:
    file_hash: str
    source_path: str
    document: ExtractedDocument  # The cached result

3. ファイルベースのキャッシュストレージ

各キャッシュエントリは {hash}.json として保存——ハッシュで O(1) ルックアップを実現し、インデックスファイルは不要です。

import json
from typing import Any

def write_cache(cache_dir: Path, entry: CacheEntry) -> None:
    cache_dir.mkdir(parents=True, exist_ok=True)
    cache_file = cache_dir / f"{entry.file_hash}.json"
    data = serialize_entry(entry)
    cache_file.write_text(json.dumps(data, ensure_ascii=False), encoding="utf-8")

def read_cache(cache_dir: Path, file_hash: str) -> CacheEntry | None:
    cache_file = cache_dir / f"{file_hash}.json"
    if not cache_file.is_file():
        return None
    try:
        raw = cache_file.read_text(encoding="utf-8")
        data = json.loads(raw)
        return deserialize_entry(data)
    except (json.JSONDecodeError, ValueError, KeyError):
        return None  # Treat corruption as cache miss

4. サービスレイヤーラッパー(単一責任の原則)

処理関数の純粋性を保ちます。キャッシュを独立したサービスレイヤーとして追加します。

def extract_with_cache(
    file_path: Path,
    *,
    cache_enabled: bool = True,
    cache_dir: Path = Path(".cache"),
) -> ExtractedDocument:
    """Service layer: cache check -> extraction -> cache write."""
    if not cache_enabled:
        return extract_text(file_path)  # Pure function, no cache knowledge

    file_hash = compute_file_hash(file_path)

    # Check cache
    cached = read_cache(cache_dir, file_hash)
    if cached is not None:
        logger.info("Cache hit: %s (hash=%s)", file_path.name, file_hash[:12])
        return cached.document

    # Cache miss -> extract -> store
    logger.info("Cache miss: %s (hash=%s)", file_path.name, file_hash[:12])
    doc = extract_text(file_path)
    entry = CacheEntry(file_hash=file_hash, source_path=str(file_path), document=doc)
    write_cache(cache_dir, entry)
    return doc

主要な設計決定

決定理由
SHA-256 コンテンツハッシュパス非依存、コンテンツ変更時に自動無効化
{hash}.json ファイル命名O(1) ルックアップ、インデックスファイル不要
サービスレイヤーラッパー単一責任の原則:抽出機能は純粋、キャッシュは独立した関心事
手動 JSON シリアライズフローズンデータクラスのシリアライズを完全制御
破損時に None を返す優雅に劣化、次回の実行時に再処理
cache_dir.mkdir(parents=True)初回書き込み時にディレクトリを遅延作成

ベストプラクティス

  • パスではなくコンテンツをハッシュ化する —— パスは変わるが、コンテンツ識別子は変わらない
  • 大ファイルをハッシュする際はチャンク単位で処理 —— ファイル全体をメモリに読み込まない
  • 処理関数の純粋性を保つ —— キャッシュについて何も知らないようにする
  • キャッシュヒット/ミスをログに記録し、デバッグ用に切り詰めたハッシュ値を使用する
  • 破損への対応は優雅に —— 無効なキャッシュエントリをミスとして扱い、決してクラッシュしない

避けるべきアンチパターン

# BAD: Path-based caching (breaks on file move/rename)
cache = {"/path/to/file.pdf": result}

# BAD: Adding cache logic inside the processing function (SRP violation)
def extract_text(path, *, cache_enabled=False, cache_dir=None):
    if cache_enabled:  # Now this function has two responsibilities
        ...

# BAD: Using dataclasses.asdict() with nested frozen dataclasses
# (can cause issues with complex nested types)
data = dataclasses.asdict(entry)  # Use manual serialization instead

適用シーン

  • ファイル処理パイプライン(PDF 解析、OCR、テキスト抽出、画像分析)
  • --cache/--no-cache オプションで利益を得る CLI ツール
  • 複数回の実行で同じファイルが出現するバッチ処理
  • 既存の純粋関数を変更せずにキャッシュを追加したい場合

非適用シーン

  • 常に最新状態を保つ必要があるデータ(リアルタイムデータストリーム)
  • キャッシュエントリが非常に大きくなる可能性がある場合(ストリーミング処理の検討が必要)
  • 結果がファイルコンテンツ以外のパラメータに依存する場合(例:異なる抽出設定)

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
affaan-m
リポジトリ
affaan-m/everything-claude-code
ライセンス
MIT
最終更新
不明

Source: https://github.com/affaan-m/everything-claude-code / ライセンス: MIT

関連スキル

汎用その他⭐ リポ 1,982

superfluid

Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper

by LeoYeAI
汎用その他⭐ リポ 100

civ-finish-quotes

実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。

by huxiuhan
汎用その他⭐ リポ 1,110

nookplot

Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。

by BankrBot
汎用その他⭐ リポ 59

web3-polymarket

Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。

by elophanto
汎用その他⭐ リポ 52

ethskills

Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。

by jiayaoqijia
汎用その他⭐ リポ 44

xxyy-trade

このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。

by Jimmy-Holiday
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: affaan-m · affaan-m/everything-claude-code · ライセンス: MIT