awesome-privacyは、プライバシー重視のアプリやサービスをカテゴリ別にまとめたキュレーションリストです。awesome-privacy.ymlという単一のYAMLファイルが原本となり、そこからREADMEと公開Webサイト(awesome-privacy.xyz)、さらにAPIまでを自動生成しています。単なる静的リストではなく、GitHubやDocker Hubなどの外部情報を取得して各サービスの鮮度を可視化する仕組みも備えています。
中心にあるのはawesome-privacy.ymlです。lib/validate-awesome-privacy.pyがlib/schema.jsonでその構造を検証し、lib/awesome-privacy-readme-gen.pyがREADMEの該当セクションを再生成します。api/scripts/build-data.tsは同じYAMLをJSON化し、Hono製のAPI(api/src/app.ts)がpublicルート(services、categories、search、stats)とprivateルート(github、docker、ios、android、website、securityなど)として配信します。privateルートは外部サービスへの実問い合わせで、api/src/lib/cache配下のストレージ層がKVまたはメモリにキャッシュし、失敗時は古い値をそのまま返すフォールバックを持ちます(cache.test.tsで確認可能)。認証はBearerトークン方式で、トークンを持つ呼び出しはレート制限を回避します(auth.ts、app.test.ts)。webディレクトリのAstro+Svelte製フロントエンドがこのAPIを叩き、検索・カテゴリ表示・詳細情報カードを描画します。GitHub Actions(pr-check.yml、health-check.ymlなど)がPRレビューやリンク健全性チェックを自動化しています。
- STEP 01
まずawesome-privacy.ymlを開くと、各サービスがカテゴリ・タイトル・URL・説明・タグを持つ項目として並んでいることが分かります。
- STEP 02
pip install -r lib/requirements.txtの後にpython lib/validate-awesome-privacy.pyを実行すると、schema.jsonに沿った構造チェックが走り、不正な項目があればエラーで検出されます。
- STEP 03
apiディレクトリでbun installしてbun run devを動かすと、ポート8787でHonoサーバーが起動し、/v1/healthや/v1/statsにアクセスするとJSONの応答が返ってきます。
- STEP 04
/v1/enrich/配下のエンドポイントを認証なしで連続呼び出すと、app.test.tsが示す通り429のレート制限に当たり、Bearerトークンを付けると通過できます。
- STEP 05
webディレクトリでyarn devを実行すると、Astro+Svelte製のサイトがローカルで立ち上がり、検索バーやカテゴリ別ブラウズ、サービス詳細カードを確認できます。
- STEP 06
lib/awesome-privacy-readme-gen.pyを実行すると、README.md内の<!-- awesome-privacy-start -->から続く一覧セクションがYAMLの内容に合わせて再生成されます。
手に入るのは3層構成の成果物です。1つ目はYAMLから生成される一覧README、2つ目はカテゴリ検索やGitHub・Docker・ストア情報付きの詳細を返すAPI、3つ目はそれらを閲覧できるWebサイトです。API単体でも/v1/servicesや/v1/search、MCP用のエンドポイント(routes/mcp.ts)まで用意されており、自分のツールから叩くこともできます。
エンリッチメント系エンドポイントはGitHubやDocker Hub、各アプリストアなど外部サービスへの実問い合わせに依存するため、相手側のレート制限や仕様変更で失敗する可能性があります。
READMEの一覧部分はYAMLから自動生成される仕組みのため、README側を直接編集しても次回生成時に上書きされる想定です。
動作確認にはBun・Node・Pythonという複数のランタイムが必要で、api・lib・webの3か所でそれぞれ別の環境構築が求められます。
cache.test.tsなどのテストはモックによる挙動検証が中心で、実際の外部API呼び出しそのものの正確性まではテストで保証されていません。
self-hosted系のプライバシーツールを選びたい人や、awesome-list形式にAPI・Webサイトを組み合わせた構成を参考にしたい開発者に向いています。app.test.tsやcache.test.tsに具体的なアサーション(ステータスコード、キャッシュのフォールバック挙動)が書かれており、READMEの説明と実装の食い違いが少ないことがコードから読み取れます。そのため、実際に手元でbun run devやvalidate-awesome-privacy.pyを動かさなくても、挙動の見立てはある程度信頼できると判断できます。