[{"data":1,"prerenderedAt":254},["ShallowReactive",2],{"\u002Fblog\u002Fsub-store-cloudflare\u002F:ja":3,"\u002Fblog\u002Fsub-store-cloudflare\u002F-surround:ja":149,"blog-all-posts:ja":150},{"id":4,"title":5,"author":6,"body":10,"date":132,"description":133,"extension":134,"image":135,"locale":136,"meta":137,"minRead":138,"navigation":139,"original":139,"path":140,"pinned":141,"seo":142,"source":135,"sourceUrl":135,"stem":143,"tags":144,"updated":135,"__hash__":148},"blog\u002Fblog\u002Fsub-store-cloudflare.ja.md","機場（プロキシサービス）のサブスク集約を Cloudflare に移した",{"name":7,"avatar":8},"Chen Dahuang",{"src":9,"alt":7},"\u002Favatar.jpg",{"type":11,"value":12,"toc":124},"minimark",[13,17,28,32,35,38,51,54,57,61,64,85,88,91,94,97,105,112,115,118,121],[14,15,16],"p",{},"機場（プロキシサービス）はもう 3〜4 年使っていて、途中で自分で VPS ノードを建てたこともある。ずっとウザいことが一つあった：手元に 3〜5 本のサブスクがあって、自前のノードも数台あって、クライアントには一本一本手で追加しないといけないし、分流ルールはクライアントごとに組み直し。端末を変える、クライアントを変える、家族に設定してあげる、その度にまた一から。",[14,18,19,20,27],{},"後で思ったんだ。サブスクをクライアント側でバラバラに管理する必要はない。これを一本のリンクに集約して、ルールはサーバー側で固定し、クライアントはサブスクを購読するだけ——そうすればスッキリする。Sub-Store の考え方は以前から使ってたけど、あれは自分のサーバーで動かすタイプで、運用が面倒だった。だから今回、Cloudflare 上で動く自前バージョン sub-store-cloudflare を書いて、",[21,22,26],"a",{"href":23,"rel":24},"https:\u002F\u002Fgithub.com\u002Frealchendahuang\u002Fsub-store-cloudflare",[25],"nofollow","GitHub"," で公開した。",[29,30,31],"h2",{"id":31},"実はやることは一つだけ",[14,33,34],{},"複数のサブスクリプション元を一本のサブスクにまとめること。",[14,36,37],{},"具体的には、こういうものを入れられる：",[39,40,41,45,48],"ul",{},[42,43,44],"li",{},"いくつかの機場のサブスクリンク",[42,46,47],{},"自分の VPS のノードテキスト（vless、trojan、ss、vmess どれでも可）",[42,49,50],{},"一時的にノードをコピペして付け加えるのも OK",[14,52,53],{},"入ると Worker が取得して重複排除し、指定ルールでふるいにかけ、必要に応じてリネーム、国旗補完、ドメイン解決をやる。出てきたら組合せサブスクに詰めて、クライアントはこの一本を購読するだけで済む。",[14,55,56],{},"ルールはサーバー側に入れてある。よく使う Mihomo テンプレートを内蔵（acl4ssr、loyalsoldier のホワイトリスト／ブラックリスト、ai-streaming など）していて、分流グループやルールセットをクラウドで設定済みにしておける。サブスクを mihomo \u002F clash、surge、sing-box、shadowrocket などのクライアントに放り込めば、ダウンロード時点で分流ルール付きの完成品。そっちで手動ルールやルールセット URL のメンテは不要。",[29,58,60],{"id":59},"なぜ-cloudflare-に置くのか","なぜ Cloudflare に置くのか",[14,62,63],{},"理由はすごく現実的：",[39,65,66,73,79],{},[42,67,68,72],{},[69,70,71],"strong",{},"サーバー不要。"," Workers + D1、無料枠で個人には十分。サーバー代も運用も丸ごと省ける。",[42,74,75,78],{},[69,76,77],{},"workers.dev ドメイン自体が壁の外にある。"," クライアントが繋いでサブスクを取得するこの一歩が通じる。「サーバーが海外にあるのに、ノード取得にも梯子が要る」みたいなマトリョーシカがない。",[42,80,81,84],{},[69,82,83],{},"デプロイすれば Web 管理画面 + ダウンロードエンドポイント。"," スマホでクライアントを替えても、ブラウザで設定を変えられる。",[14,86,87],{},"技術スタックは意図的に小さい：Worker + Static Assets + D1 + Worker Secrets。KV、R2、Durable Objects、Queue、Cron はコアパスに入れず、減らせるものは減らす。",[29,89,90],{"id":90},"デプロイはわざと二通り",[14,92,93],{},"一つ目は使いたい人向け：リポジトリの Deploy to Cloudflare ボタンを押すと、Cloudflare がリポジトリを取得して Worker を作り、D1 を作り、トークンを 2 つ聞いてきて、デプロイ完了後にトークン付きの管理リンクを渡してくれる。ステップバイステップで、コマンドラインに触る必要なし。",[14,95,96],{},"二つ目は自分用でもあり、いじるのが好きな人用でもある：AI Agent のワンクリックインストール。",[14,98,99,100,104],{},"リポジトリには agent プロトコル（AGENTS.md + agent 内の SKILL）が入っている。サブスク元、作りたい組合せサブスク、使いたいルールテンプレートをローカル設定ファイルに書き、",[101,102,103],"code",{},"pnpm run install:cloudflare"," を走らせると、agent が Cloudflare ログイン確認、DB 作成、secret 書き込み、マイグレーション、デプロイ、設定インポート、リンク検証までやってくれて、最後に管理リンクとダウンロードリンクを手渡してくれる。",[14,106,107,108,111],{},"自分はこの二番目の道で繋いだから、こっちをおすすめする。手が省ける。Codex \u002F Claude Code に使うときは、リポジトリの ",[101,109,110],{},"agent\u002Finstall.prompt.md"," のプロンプトをそのままコピーすればいい。",[29,113,114],{"id":114},"向いている人",[14,116,117],{},"率直に言う：複数の機場に加えて自前ノードまで持っていて、一本のサブスクにまとめて自用したい人。それがこのプロジェクトのターゲット層。たった一つの機場をそれなりに使ってるだけなら、これは本当にいらない。",[14,119,120],{},"コードは全部オープンソース、AGPL。フロントのインタラクションの考え方は元版 Sub-Store に敬意を払いつつ、元版はコンテナで動いてもっと幅広いクライアントエコシステムをカバーしている。俺がやったのはもっと小さい Cloudflare-native の形で、自分で改造しやすく、直接デプロイもしやすい。項目ごとの複製ではない。",[14,122,123],{},"興味があればリポジトリを覗いてみて。README がわりと充実してるので、それに従ってデプロイすればいい。",{"title":125,"searchDepth":126,"depth":126,"links":127},"",2,[128,129,130,131],{"id":31,"depth":126,"text":31},{"id":59,"depth":126,"text":60},{"id":90,"depth":126,"text":90},{"id":114,"depth":126,"text":114},"2026-06-28","複数の機場と自前ノードを一本のサブスクにまとめ、分流ルールはサーバー側で設定。クライアントはサブスクを使うだけ。","md",null,"ja",{},4,true,"\u002Fblog\u002Fsub-store-cloudflare",false,{"title":5,"description":133},"blog\u002Fsub-store-cloudflare.ja",[145,146,147],"Cloudflare","科学上网（プロキシ）","オープンソースプロジェクト","4bFccD_nx_GN71qKWpIkeuM5EBN4RNGyXHpld7po79g",[135,135],[151,160,168,177,184,192,199,207,215,221,228,230,237,245],{"path":152,"title":153,"description":154,"date":155,"minRead":156,"tags":157},"\u002Fblog\u002Fagent-harness-selection","Pi Agent・OMP・Codex・ZCode を試して、結局 OpenCode + OpenChamber を選んだ理由","Agent Harness 選定の振り返り：GUI 体験、ベンダーロックイン、二次開発の自由度の三基準で Pi Agent・OMP・Codex・ZCode を切り、最終的に OpenCode カーネル + OpenChamber インターフェースを選んだ。","2026-08-06",6,[158,159],"AI Agent","ツール選定",{"path":161,"title":162,"description":163,"date":164,"minRead":156,"tags":165},"\u002Fblog\u002Fcloudflare-broke-stack","2026 独立開発ベストプラクティス：Cloudflare 貧乏人フルセット","独立開発者のゼロコスト技術スタック：コードは Codex、バージョン管理は GitHub、決済は Stripe、フロントは TanStack Start、バックエンドは Hono + Workers、DB は D1、ストレージは R2、キャッシュは KV。全部 Cloudflare の上で回す。","2026-06-15",[145,166,167],"独立開発","技術スタック",{"path":169,"title":170,"description":171,"date":172,"minRead":156,"tags":173},"\u002Fblog\u002Fdeepseek-api-web-search","DeepSeek API に組み込みの Web 検索、Responses API で公式の検索能力をタダで使う","DeepSeek が公式 API に Web 検索を内蔵。Responses エンドポイントで deepseek-v4-flash を呼び、web_search ツールを宣言するだけでいい。サードパーティの検索エンジンに繋がなくても、検索キーの申請も不要。","2026-08-05",[174,175,176],"DeepSeek","API","AI ツール",{"path":178,"title":179,"description":180,"date":172,"minRead":181,"tags":182},"\u002Fblog\u002Fdeepseek-v4-flash-review","DeepSeek V4 Flash 正式版を徹底レビュー：安い、速い、1M コンテキスト、検索内蔵","DeepSeek V4 Flash 正式版を数日間がっつり使ってみた：異常な安さ、電光石火の速さ、1M コンテキスト、公式組み込みの Web 検索、完全オープンソース。唯一の弱点はマルチモーダルだが、別モデルと組み合わせれば補える。",7,[174,183,176],"モデルレビュー",{"path":185,"title":186,"description":187,"date":164,"minRead":188,"tags":189},"\u002Fblog\u002Ffree-cloudflare","無料ユーザーはどうやって Cloudflare を搾り尽くすか。無料版でどこまでタダ乗りできる？","Cloudflare 無料版は個人用インターネット基盤一式を支えられる：DNS、CDN、Pages、Workers、KV、D1、R2、メール、Tunnel、AI Gateway など。",8,[145,190,191],"無料枠","デプロイ",{"path":193,"title":194,"description":195,"date":196,"minRead":188,"tags":197},"\u002Fblog\u002Fmodel-harness-decoupling","純正 Harness が必ずしも今の正解とは限らない：オープンモデル時代、モデルと Harness は分けて選ぶ","Claude を使うなら Claude Code？オープンモデル時代、この直感はアップデートが必要だ。純正の強みは本物だが、良いモデルを鍛えることと良い Harness を作ることは別の工学である——この記事では、モデルと Harness を分けて選べるようになった理由と、5 つの Harness の位置づけマップを解説する。","2026-09-09",[158,198,159],"Harness",{"path":200,"title":201,"description":202,"date":196,"minRead":188,"tags":203},"\u002Fblog\u002Fopencode-productive-stack","安定・高速・高生産性・安価：私の AI Coding スタック実録","OpenCode + OpenChamber + DeepSeek V4 Flash のサブスク 2 本で、15 プロジェクトを同時に回してもクォータはほとんど減らない。この記事では Context 剪定、階層メモリ、デスクトップ自動化、そして「やはり元の組み合わせ」という選定の教訓まで、設定の全記録をさらけ出す。",[204,205,206],"OpenCode","AI コーディング","設定",{"path":208,"title":209,"description":210,"date":211,"minRead":212,"tags":213},"\u002Fblog\u002Fproduct-faxin-principle","発心原理：独立開発者はなぜ「捨てる」ことを学ぶべきか","なぜ出発するのか。誰のために出発するのか。結局どの問題を解決したいのか。製品の鋭さは、手放す覚悟から生まれる。","2026-06-20",10,[214,166],"プロダクト思考",{"path":216,"title":217,"description":218,"date":211,"minRead":188,"tags":219},"\u002Fblog\u002Fproduct-pain-vs-itch","ユーザーに「すごい」と言われても浮かれるな：痛点と痒点","口先だけの称賛は一文の価値もない。需要を判断する唯一の厳しい基準は、ユーザーが何を払う気があるかを見ること。",[214,220],"需要判断",{"path":222,"title":223,"description":224,"date":155,"minRead":225,"tags":226},"\u002Fblog\u002Fqwen-vision-for-deepseek","DeepSeek にマルチモーダルを補う：Qwen-3.7-Flash 識図スキーム","DeepSeek V4 Flash はマルチモーダル非対応。画像認識はどうする？調べたところ、現時点で最コスパのスキームは Qwen-3.7-Flash：画像一枚の認識コストが極端に安く、V4 Flash と組み合わせれば弱点を補える。",5,[174,227,183],"マルチモーダル",{"path":140,"title":5,"description":133,"date":132,"minRead":138,"tags":229},[145,146,147],{"path":231,"title":232,"description":233,"date":196,"minRead":181,"tags":234},"\u002Fblog\u002Ftui-cognitive-bandwidth","TUI はあなたの認知帯域を食いつぶしている：AI Coding の『ギークフィルター』はそろそろ砕くとき","AI Coding Agent がこぞって TUI を載せ、インタラクションを 80 年代のターミナル・パラダイムに押し戻しておきながら、「没入型」「プログラマーへの敬意」などと美称する。この記事では、TUI が認知帯域をシステマティックに下げる 3 つのメカニズムと、Web UI こそが正解である理由を解き明かす。",[205,235,236],"インタラクション設計","エッセイ",{"path":238,"title":239,"description":240,"date":241,"minRead":156,"tags":242},"\u002Fblog\u002Fvalue-not-external","「価値があるか」を議論すること自体に、価値はない","私たちの価値は誰にも定義されない。人は AI 時代に、一体どうやって自分を理解すべきなのか。","2026-06-18",[243,244],"AI 思考","人文エッセイ",{"path":246,"title":247,"description":248,"date":249,"minRead":250,"tags":251},"\u002Fblog\u002Fx-growth-1000-followers","1 日でフォロワー 1000+ 増えた、俺がやったこと","6 月に X を本気で運用したら、1 日でフォロワー 1000+ 増えた。この記事では当時やったことと、もらった反応を記録する。","2026-06-16",12,[252,253],"X 運用","コンテンツ成長",1789752313675]