変更履歴

バージョン管理: 羊角快車二次創作版は独自のラインで標準的なセマンティックバージョニングに従い、v1.0.0 から始まります。リリースタグは vX.Y.Z 形式で、プレリリースには -beta や -rc.1 などのサフィックスを付けます(例:v1.2.0-beta.1)。MAJOR は互換性のない変更、MINOR は後方互換性のある機能、PATCH は修正と小さな変更を表します。すべてのリリースはこの変更履歴に記録されます。告知ページは変更の規模と必要性に応じて維持されます。大きな変更には新しいページまたは更新されたページが作成され、1つのラインの複数リリースが同じページを共有できます。項目が公式アップストリーム openRin/Rin のバージョンと本プロジェクトのバージョンの両方に言及する場合、本プロジェクトのバージョンは区別のため yjvX.Y.Z と表記します。最新リリースは v1.1.2 です。以下の v0.3.0 / v0.2.0 の項目は公式アップストリームの履歴です。

v1.1.2 - 2026年10月26日

REST API キーと MCP キーを2つの別タイプに分離します。

このリリースの内容

  • キータイプ: api_keys テーブルに key_type カラムを追加(1 = REST API キー、2 = MCP キー)。設定ページでは REST API と MCP の別タブで両方を管理します
  • エンドポイントの分離: REST API キーは /api/key/* のみ、MCP キーは /mcp のみを呼び出し、タイプの不一致は 403 を返します
  • スコープの境界: content.read は MCP キーのみ利用可能です

ドキュメント

  • API ガイドに両方のキータイプを記載し、マイグレーション 0021.sql が既存キーを自動分類します
  • デプロイガイドと README が単一 Worker アーキテクチャを説明するようになりました。クライアントアセットは Worker とともに配布されるため、Cloudflare Pages プロジェクトは不要です

アップグレードに関する注意

  • マイグレーションは自動実行されます。content.read を持つ既存キーは MCP キーになり、残りは REST API キーになります

v1.1.1 - 2026年10月26日

MCP サーバーを追加し、カスタムドメイン経由の拒否されたアクセスを修正します。

このリリースの内容

  • MCP サーバー: 新しい /mcp エンドポイントが記事、モーメント、友だちリンク、サイト設定を MCP ツールとして公開します。API キーで認証し、スコープでフィルタリングされ、新しい content.read スコープに支えられています
  • ホスト名許可リスト: Host と Origin の検証が DNS リバインディングをブロックします。カスタムドメインは MCP_ALLOWED_HOSTS を通じて許可され、スキーム/ポートのエントリ、ワイルドカード、* を含みます

修正

  • デプロイコマンドが FRONTEND_URL と MCP_ALLOWED_HOSTS をエクスポートするようになり、拒否されたホスト名はレスポンス本文に設定のヒントが表示されます
  • ホスト名の検証が認証前に実行されるため、拒否されたホストは Invalid Host とともに 403 を返します

ドキュメント

  • v1.1 リリース告知 を追加し、API ガイドにカスタムドメインのトラブルシューティング(421 と 403)を記載しました

アップグレードに関する注意

  • カスタムドメインのサイトは MCP_ALLOWED_HOSTS または FRONTEND_URL を設定して再デプロイする必要があります。このリリースにはデータベースマイグレーションはありません

v1.1.0 - 2026年10月24日

二次創作版独自のバージョンラインの最初の機能リリースです。友だちリンクの二重検証方法を提供し、中国語と英語のドキュメントを同期させます。

このリリースの内容

  • 友だちリンク検証が DNS TXT と HTML ファイルアップロードをサポートするようになりました
    • JSON ペイロードが受け入れられた後、状態機械は awaiting_method_choice に入り、申請者に方法の選択を求めます:DNS TXT レコードの場合は 1(または 一 / 方案一 / 方法一)、HTML ファイルの場合は 2(または 二 / 方案二 / 方法二)と返信します
    • DNS:手順メールにホスト _jiaofriend、タイプ TXT、値 = 検証コードが記載されます。検証では Cloudflare DNS-over-HTTPS 経由で _jiaofriend.<visitor-domain> の TXT レコードを照会し、いずれかにコードが含まれているかを確認します
    • ファイル:既存の厳格なチェックを維持します。GET が 200 を返し、<body> テキスト(タグ/スクリプト/スタイルを除去した後)にコードが含まれている必要があります
    • 状態機械に awaiting_verification ステージが追加され、verifyMethod が記録されます。変更申請では旧サイトと新サイトの両方で再度方法を選択します。アップグレード前の verifying 状態はファイル検証にフォールバックします
    • DNS 検索は注入可能な依存関係 resolveTxt(name) => Promise<string[]> を経由し、リゾルバをテスト可能かつ交換可能に保ちます

修正

  • 友だちリンク検証が SPA フォールバック、カスタム 404 ページ、403/500 応答、30x リダイレクトを受け入れてしまう問題を修正
  • awaiting_json ステージで本文が JSON 試行でない場合に申請を終了してしまう問題を修正
  • /friends-sitemap.xml がフロントエンド SPA に飲み込まれる問題を修正
  • キー表示時に暗号化ストレージが平文ストレージになる問題を修正
  • キャプチャの繰り返し初期化で友だちリンク申請がクラッシュする問題を修正
  • CJS / ESM バンドル下での受信メール解析を修正

ドキュメント

  • 現在の実装に合わせてデプロイガイドを書き直しました:リポジトリの順序、サイト変数、ワークフロー一覧、マイグレーションスクリプトのパス、デプロイ URL の注記
  • ドキュメントディレクトリの再構成:env.md と database.md を configuration/ に移動
  • v1.0.0 リリース告知 を追加。ブログナビゲーションでは二次創作版のエントリが公式アップストリームのエントリより前に来ます
  • データベースガイドに users.password のハッシュルールを記載:ソルトなし SHA-256 のため、D1 で手動でパスワードを更新する場合はハッシュ値を保存する必要があります
  • 両方のリポジトリが登場する場合、二次創作版(本リポジトリ) が最初にラベル付きで記載され、その後に 公式アップストリーム openRin/Rin が続きます
  • 中国語と英語のドキュメントを同時に更新

アップグレードに関する注意

  • 検証方法の選択は既存の友だちリンクに影響しません。アップグレード前の verifying 状態は HTML ファイル検証にフォールバックします
  • 残りの機能には追加の環境変数は不要です

v1.0.0 - 2026年10月24日

二次創作版独自のバージョンラインの出発点です。公式アップストリーム openRin/Rin v0.3.0 の機能を引き継ぎ、このエディションですでに実装された機能とインフラを追加します。

新機能

  • メールによるセルフサービス友だちリンク:申請者はメールで友だちリンクの申請、変更、削除を行います。JSON テンプレート、画像キャプチャ、キャンセルコマンド、「新しいメールを作成する」ガイダンス付きの返信傍受、バインドされたメールによる所有者 UID の解決を含みます
  • 友だちリンクのグループと並べ替え:管理パネルからグループと表示順を管理
  • TOTP 二要素認証:全ユーザーが利用可能。リカバリーコードとログインレート制限付き
  • 外部呼び出し用 API キー:管理者は設定ページからスコープ付き権限でキーを作成・失効できます
  • friends-sitemap.xml:承認された友だちリンクを名前と説明付きで一覧表示します
  • MailPort マルチ送信者サポート:複数の送信者エンドポイント間での順序付きポーリングとレガシーフォールバック
  • AI 機能:AI 要約、AI 強化検索、カスタムモデル、並べ替え可能なフォールバックモデルキュー
  • コンテンツと読書体験:複数のコメントシステム、Webhook 通知、RSS、動的な robots.txt を備えたサイトマップ、友だちリンクの可用性の定期チェック

修正

  • TOTP を有効にした後、パスワードなしのアカウントがログインできなくなる問題を修正
  • API キーエンドポイントで「not found」テキストが重複し、権限スコープが空になる問題を修正
  • デプロイシークレットを一括アップロードする際の 10214 レース障害を修正

アーキテクチャとデプロイ

  • バックエンドランタイムを Cloudflare Workers 向けに最適化された軽量フレームワークに移行し、ルートと依存関係をオンデマンドで読み込み
  • 共有型とコンポーネントのために @rin/api や @rin/ui などの共有パッケージを抽出
  • デプロイ、開発、データベースのタスクを Rin CLI の下に統合し、GitHub Actions で Build / Deploy / Preview / Release / ドキュメントサイトのワークフローを提供
  • アップストリームの改善を同期:フィードサービスリポジトリ層、ルートガード、サイトマップサービス、Modal コンポーネント、画像フォールバックコンポーネント、安定した目次レンダリング

ドキュメント

  • ドキュメントセットはリポジトリとともに配布され、中国語と英語を同期
  • 両方のリポジトリが登場する場合、二次創作版(本リポジトリ) が最初にラベル付きで記載され、その後に 公式アップストリーム openRin/Rin が続きます

アップグレードに関する注意

  • 公式アップストリームから本エディションにアップグレードする場合、デプロイスクリプトが server/sql/ 内のマイグレーションを自動的に適用します。手動の手順は不要です
  • メールログイン、メール認証コード、セルフサービス友だちリンクはオプションであり、EMAIL_SEND_URLS / EMAIL_SEND_KEYS が必要です(環境変数 を参照)
  • TOTP、API キー、友だちリンクグループには追加の環境変数は不要です。必要に応じて管理ページから有効化してください

公式アップストリームの履歴

v0.3.0 - 2025年2月4日

アーキテクチャのリファクタリング

  • 軽量フレームワーク: ElysiaJS バックエンドフレームワークを Cloudflare Workers 向けに特別に最適化された軽量カスタムフレームワークにリファクタリング
    • 約15の重量級依存関係を削除、コアフレームワークコード < 10KB
    • オンデマンド読み込みアーキテクチャを実装し、リクエストごとに必要なサービスのみを初期化
    • 起動時間とメモリフットプリントを最適化

新機能

  • キャッシュシステム: データベースと S3 の両方をサポートする柔軟なキャッシュシステムを実装

    • CACHE_STORAGE_MODE 環境変数を追加し、database または s3 モードをサポート
    • キャッシュデータの自動シリアライズとデシリアライズをサポート
    • 高頻度データ保存用のキャッシュテーブルを追加
  • HyperLogLog 統計: PV/UV 統計を HyperLogLog アルゴリズムに移行

    • 16384 レジスタを使用し、誤差率は約 0.81%
    • visit_stats テーブルに pv カウンターと hll_data を追加
    • フィード訪問追跡を O(n) クエリから O(1) ルックアップに最適化
    • 高トラフィック記事のクエリ時間を大幅に短縮
  • エラーハンドリングシステム: 包括的なエラーハンドリングメカニズムを実装

    • 構造化エラークラス(ValidationError、NotFoundError など)を追加
    • React レンダリングエラーを捕捉する GlobalErrorBoundary を実装
    • 非同期操作と API 呼び出しを処理する useError フックを追加
    • エラーをログに記録しリクエスト ID を生成するサーバー側ミドルウェア
  • Cookie 認証: Authorization ヘッダーから Cookie ベースの認証に移行

    • バックエンドが HttpOnly、Secure、SameSite=lax の Cookie を設定
    • フロントエンドが Authorization ヘッダーを削除し、ブラウザの Cookie に依存
    • CSRF 保護を強化

改善と最適化

  • API クライアントのリファクタリング: Elysia/Eden をカスタム API クライアントに置き換え

    • @elysiajs/eden と rin-server の依存関係を削除
    • 型安全な API クライアントを作成
    • API 呼び出しパターンを簡素化(treaty パターンから直接メソッド呼び出しへ)
    • 破壊的変更: クライアント API インターフェースが変更されました。例:client.feed.index.get() → client.feed.list()
  • カスタム OAuth 実装: elysia-oauth2 をカスタム OAuth2 実装に置き換え

    • 任意の OAuth2 プロバイダーをサポートする汎用 OAuth2 プラグインアーキテクチャ
    • デフォルトで GitHub OAuth プロバイダーを内蔵
    • state パラメータ検証による CSRF 保護
    • 完全な TypeScript 型サポート
  • 依存性注入のリファクタリング: typedi をネイティブメカニズムに置き換え

    • typedi 依存性注入コンテナを削除
    • 依存性注入に Elysia の decorate() と derive() を使用
    • サービスは Container.get() の代わりに store 経由で依存関係にアクセス
  • 友だちリンクの最適化: Friend インターフェースを更新し、関連する API 呼び出しを調整

    • 型安全性を向上

バグ修正

  • UV の HLL への移行失敗を修正
  • GitHub コールバックルートのスキーマ検証問題を修正
  • クエリパラメータの整数解析を修正
  • CORS プリフライトリクエストの処理を修正
  • コードを最適化し、バンドルサイズを削減

データベースマイグレーション

  • キャッシュテーブル cache を追加(key、type、data、created_at、updated_at)
  • 訪問統計テーブル visit_stats を追加(feed_id、pv、hll_data)
  • データベースマイグレーションスクリプト:0006.sql

環境変数

新しい環境変数:

CACHE_STORAGE_MODE=<Cache storage mode: database or s3, default database>

v0.2.0 2024-06-07 更新

  • S3_CACHE_FOLDER 環境変数を追加
  • 暗号化環境変数のリストを更新し、必須のもののみを保持
  • 暗号化変数を GitHub から直接設定できるようになりました
  • GitHub 変数設定を更新し、GitHub 経由で設定する必要がある暗号化変数を追加(SEO インデックス保存用の S3 ストレージ)
  • GITHUB_CLIENT_ID と GITHUB_CLIENT_SECRET に RIN_ プレフィックスを付けました(RIN_GITHUB_CLIENT_ID、RIN_GITHUB_CLIENT_SECRET)。GitHub 変数が GITHUB_ で始められない問題を解決するためです。Cloudflare パネル経由で設定された変数(GITHUB_CLIENT_ID と GITHUB_CLIENT_SECRET)は影響を受けません。

公式アップストリーム移行ガイド

特別な指示のない通常のバージョン更新では、フォークしたリポジトリを同期するだけです。

v0.2.0 移行ガイド

  • SEO 最適化の導入により、GitHub で S3 ストレージ環境変数を設定する必要があります。そのため、GitHub で以下の環境変数を追加設定する必要があります(平文、Variables に追加):
SEO_BASE_URL=<SEO base URL for SEO indexing>
SEO_CONTAINS_KEY=<SEO indexing only includes links starting with SEO_BASE_URL or containing the SEO_CONTAINS_KEY keyword, defaults to empty>
S3_FOLDER=<Folder for storing S3 image resources, defaults to 'images/'>
S3_CACHE_FOLDER=<S3 cache folder (for SEO and high-frequency request caching), defaults to 'cache/'>
S3_BUCKET=<Name of the S3 bucket>
S3_REGION=<Region of the S3 bucket, use 'auto' if using Cloudflare R2>
S3_ENDPOINT=<S3 bucket endpoint address>
S3_ACCESS_HOST=<S3 bucket access address, without trailing '/'>

さらに、以下の暗号化環境変数を追加します(暗号化、Secrets に追加):

S3_ACCESS_KEY_ID=<Your S3AccessKeyID>
S3_SECRET_ACCESS_KEY=<Your S3SecretAccessKey>

これらの環境変数は以前は Cloudflare パネル経由で設定されていました。現在は GitHub に移行する必要があります。新しいバージョンのデプロイ GitHub Action が自動的に Cloudflare にアップロードするため、Cloudflare パネルでこれらの環境変数を設定する必要はなくなりました。