[{"data":1,"prerenderedAt":4634},["ShallowReactive",2],{"published-article-paths":3,"search-navigation":348,"\u002Fja\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac":421,"\u002Fja\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac-surround":1013},[4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,118,120,122,124,126,128,130,132,134,136,138,140,142,144,146,148,150,152,154,156,158,160,162,164,166,168,170,172,174,176,178,180,182,184,186,188,190,192,194,196,198,200,202,204,206,208,210,212,214,216,218,220,222,224,226,228,230,232,234,236,238,240,242,244,246,248,250,252,254,256,258,260,262,264,266,268,270,272,274,276,278,280,282,284,286,288,290,292,294,296,298,300,302,304,306,308,310,312,314,316,318,320,322,324,326,328,330,332,334,336,338,340,342,344,346],{"path":5},"\u002Fde\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":7},"\u002Fde\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":9},"\u002Fde\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":11},"\u002Fde\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":13},"\u002Fde\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":15},"\u002Fde\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":17},"\u002Fde\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":19},"\u002Fde\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":21},"\u002Fde\u002Farticle\u002Fsetup-antigravity-2",{"path":23},"\u002Fde\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":25},"\u002Fde\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":27},"\u002Fde\u002Farticle\u002Fsync-obsidian-across-devices",{"path":29},"\u002Fde\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":31},"\u002Fde\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":33},"\u002Fde\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":35},"\u002Fde\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":37},"\u002Fen\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":39},"\u002Fen\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":41},"\u002Fen\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":43},"\u002Fen\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":45},"\u002Fen\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":47},"\u002Fen\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"path":49},"\u002Fen\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":51},"\u002Fen\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":53},"\u002Fen\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":55},"\u002Fen\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"path":57},"\u002Fen\u002Farticle\u002Fsetup-antigravity-2",{"path":59},"\u002Fen\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":61},"\u002Fen\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":63},"\u002Fen\u002Farticle\u002Fsync-obsidian-across-devices",{"path":65},"\u002Fen\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":67},"\u002Fen\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":69},"\u002Fen\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":71},"\u002Fen\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":73},"\u002Fes\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":75},"\u002Fes\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":77},"\u002Fes\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":79},"\u002Fes\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":81},"\u002Fes\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":83},"\u002Fes\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"path":85},"\u002Fes\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":87},"\u002Fes\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":89},"\u002Fes\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":91},"\u002Fes\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"path":93},"\u002Fes\u002Farticle\u002Fsetup-antigravity-2",{"path":95},"\u002Fes\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":97},"\u002Fes\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":99},"\u002Fes\u002Farticle\u002Fsync-obsidian-across-devices",{"path":101},"\u002Fes\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":103},"\u002Fes\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":105},"\u002Fes\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":107},"\u002Fes\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":109},"\u002Ffr\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":111},"\u002Ffr\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":113},"\u002Ffr\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":115},"\u002Ffr\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":117},"\u002Ffr\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":119},"\u002Ffr\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"path":121},"\u002Ffr\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":123},"\u002Ffr\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":125},"\u002Ffr\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":127},"\u002Ffr\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"path":129},"\u002Ffr\u002Farticle\u002Fsetup-antigravity-2",{"path":131},"\u002Ffr\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":133},"\u002Ffr\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":135},"\u002Ffr\u002Farticle\u002Fsync-obsidian-across-devices",{"path":137},"\u002Ffr\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":139},"\u002Ffr\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":141},"\u002Ffr\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":143},"\u002Ffr\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":145},"\u002Fid\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":147},"\u002Fid\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":149},"\u002Fid\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":151},"\u002Fid\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":153},"\u002Fid\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":155},"\u002Fid\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"path":157},"\u002Fid\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":159},"\u002Fid\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":161},"\u002Fid\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":163},"\u002Fid\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"path":165},"\u002Fid\u002Farticle\u002Fsetup-antigravity-2",{"path":167},"\u002Fid\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":169},"\u002Fid\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":171},"\u002Fid\u002Farticle\u002Fsync-obsidian-across-devices",{"path":173},"\u002Fid\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":175},"\u002Fid\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":177},"\u002Fid\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":179},"\u002Fid\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":181},"\u002Fja\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":183},"\u002Fja\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":185},"\u002Fja\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":187},"\u002Fja\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":189},"\u002Fja\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":191},"\u002Fja\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":193},"\u002Fja\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":195},"\u002Fja\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":197},"\u002Fja\u002Farticle\u002Fsetup-antigravity-2",{"path":199},"\u002Fja\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":201},"\u002Fja\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":203},"\u002Fja\u002Farticle\u002Fsync-obsidian-across-devices",{"path":205},"\u002Fja\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":207},"\u002Fja\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":209},"\u002Fja\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":211},"\u002Fja\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":213},"\u002Fpt\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":215},"\u002Fpt\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":217},"\u002Fpt\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":219},"\u002Fpt\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":221},"\u002Fpt\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":223},"\u002Fpt\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"path":225},"\u002Fpt\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":227},"\u002Fpt\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":229},"\u002Fpt\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":231},"\u002Fpt\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"path":233},"\u002Fpt\u002Farticle\u002Fsetup-antigravity-2",{"path":235},"\u002Fpt\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":237},"\u002Fpt\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":239},"\u002Fpt\u002Farticle\u002Fsync-obsidian-across-devices",{"path":241},"\u002Fpt\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":243},"\u002Fpt\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":245},"\u002Fpt\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":247},"\u002Fpt\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":249},"\u002Ftw\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":251},"\u002Ftw\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":253},"\u002Ftw\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":255},"\u002Ftw\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":257},"\u002Ftw\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":259},"\u002Ftw\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":261},"\u002Ftw\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":263},"\u002Ftw\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":265},"\u002Ftw\u002Farticle\u002Fsetup-antigravity-2",{"path":267},"\u002Ftw\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":269},"\u002Ftw\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":271},"\u002Ftw\u002Farticle\u002Fsync-obsidian-across-devices",{"path":273},"\u002Ftw\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":275},"\u002Ftw\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":277},"\u002Ftw\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":279},"\u002Ftw\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":281},"\u002Fvi\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":283},"\u002Fvi\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":285},"\u002Fvi\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":287},"\u002Fvi\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":289},"\u002Fvi\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":291},"\u002Fvi\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"path":293},"\u002Fvi\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":295},"\u002Fvi\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":297},"\u002Fvi\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":299},"\u002Fvi\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"path":301},"\u002Fvi\u002Farticle\u002Fsetup-antigravity-2",{"path":303},"\u002Fvi\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":305},"\u002Fvi\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":307},"\u002Fvi\u002Farticle\u002Fsync-obsidian-across-devices",{"path":309},"\u002Fvi\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":311},"\u002Fvi\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":313},"\u002Fvi\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":315},"\u002Fvi\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":317},"\u002Fzh\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":319},"\u002Fzh\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":321},"\u002Fzh\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":323},"\u002Fzh\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":325},"\u002Fzh\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":327},"\u002Fzh\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":329},"\u002Fzh\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":331},"\u002Fzh\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":333},"\u002Fzh\u002Farticle\u002Fsetup-antigravity-2",{"path":335},"\u002Fzh\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":337},"\u002Fzh\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":339},"\u002Fzh\u002Farticle\u002Fsync-obsidian-across-devices",{"path":341},"\u002Fzh\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":343},"\u002Fzh\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":345},"\u002Fzh\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":347},"\u002Fzh\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",[349,353,357,361,365,369,373,377,381,385,389,393,397,401,405,409,413,417],{"title":350,"path":351,"stem":352},"AI Agent Skills: What They Are & How to Create Them","\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them","en\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"title":354,"path":355,"stem":356},"Bringing Buzz to DeepSeek Harness: Taught to Speak Nostr","\u002Farticle\u002Fbringing-buzz-to-deepseek-harness","en\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"title":358,"path":359,"stem":360},"Solving AI Agent Skills Fragmentation with npx skills","\u002Farticle\u002Fcentralised-the-skills-for-agents","en\u002Farticle\u002Fcentralised-the-skills-for-agents",{"title":362,"path":363,"stem":364},"How to Expose Hermes Agent Privately with Cloudflare WARP","\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp","en\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"title":366,"path":367,"stem":368},"How AI Agent Skills Replace Nuxt App Scaffolding Scripts","\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts","en\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"title":370,"path":371,"stem":372},"Stop Exposing Your Vault: Secure NodeWarden with Cloudflare","\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare","en\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"title":374,"path":375,"stem":376},"How to Deploy Hermes Agent on a Linux VPS","\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server","en\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"title":378,"path":379,"stem":380},"Self-Host Your Travel Itineraries with TREK and Docker","\u002Farticle\u002Fself-hosted-travel-planner-trek","en\u002Farticle\u002Fself-hosted-travel-planner-trek",{"title":382,"path":383,"stem":384},"Self-Host Block's Buzz: Shared AI Agent Workspace","\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues","en\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"title":386,"path":387,"stem":388},"How to Self-Host a BitWarden Compatible Server Nodewarden","\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare","en\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"title":390,"path":391,"stem":392},"Google Antigravity 2 Hands-On: Setup & First Impressions","\u002Farticle\u002Fsetup-antigravity-2","en\u002Farticle\u002Fsetup-antigravity-2",{"title":394,"path":395,"stem":396},"NetSuite AI Connector Guide: MCP Setup & Use Cases","\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude","en\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"title":398,"path":399,"stem":400},"Switch Between Multiple Cloudflare WARP Orgs on Mac","\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac","en\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"title":402,"path":403,"stem":404},"How to Sync Obsidian Vaults Across Devices Securely","\u002Farticle\u002Fsync-obsidian-across-devices","en\u002Farticle\u002Fsync-obsidian-across-devices",{"title":406,"path":407,"stem":408},"Testing Claude Fable 5: A Financial Analysis Review","\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis","en\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"title":410,"path":411,"stem":412},"Guide to Browser and Scheduler in Antigravity 2","\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2","en\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"title":414,"path":415,"stem":416},"Build a Persistent AI Memory System on Cloudflare","\u002Farticle\u002Fuse-cloudflare-as-ai-memory","en\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"title":418,"path":419,"stem":420},"Antigravity 2 in Action: AI Agents, Skills, and MCP","\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2","en\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"id":422,"title":423,"author":424,"body":425,"category":990,"date":993,"description":994,"extension":995,"image":996,"imageAlt":997,"isPublished":998,"meta":999,"minRead":510,"navigation":998,"path":201,"seo":1005,"stem":1006,"tags":1007,"updatedAt":1011,"__hash__":1012},"article\u002Fja\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac.md","MacのMDM構成プロファイルを用いて複数のCloudflare WARP組織を切り替える設定手順ガイド","",{"type":426,"value":427,"toc":983},"minimark",[428,433,437,444,448,451,454,457,461,464,472,492,822,940,943,946,949,979],[429,430,432],"h2",{"id":431},"cloudflare-warpとは","Cloudflare WARPとは？",[434,435,436],"p",{},"Cloudflare WARPは、指定されたデバイスのトラフィックをパブリックインターネットに直接送信する代わりに、Cloudflareのグローバルネットワーク経由でルーティングするクライアント側アプリケーションです。",[434,438,439,443],{},[440,441,442],"strong",{},"WireGuard","プロトコルに基づいて構築された暗号化トンネルを作成し、デバイスから最も近いCloudflareデータセンターへの通信を保護します。その後、Cloudflareダッシュボードでポリシーを作成し、この受信トラフィックをフィルタリング、ログ記録、検査、またはルーティングできます。",[429,445,447],{"id":446},"なぜcloudflare-warpが必要なのか","なぜCloudflare WARPが必要なのか？",[434,449,450],{},"社内WebサービスやSaaSアプリケーションなどの内部リソースを、従業員、契約社員、その他のステークホルダーに安全に公開するため、Cloudflare WARPクライアントは**Zero Trust Network Access (ZTNA)**のクライアント側セキュリティ適用ポイントとして機能します。",[434,452,453],{},"Cloudflare WARPクライアントは、ユーザーのノートPCやスマートフォンにインストールされます。アクセスを許可する前に、ユーザーが認証され、特定のセキュリティ健全性チェック（承認されたIP範囲からのアクセス、登録されたメールドメインの使用、アクティブなファイアウォールの実行など）を満たすことを要求します。",[434,455,456],{},"デバイストラフィックをCloudflareに直接トンネリングすることで、リクエストが内部リソースに到達する前に、ユーザーのID、デバイス、およびポリシーが検証されます。その結果、内部リソースがパブリックインターネットに公開されることはなく、すべてのリクエストが完全にログ記録および監査されます。",[429,458,460],{"id":459},"_1台のデバイスで複数のwarpプロファイルをサポートする","1台のデバイスで複数のWARPプロファイルをサポートする",[434,462,463],{},"ユーザーが個人用と企業用のCloudflareアカウントを切り替える必要がある場合や、システム管理者が複数のテナントを管理する場合、単一のデバイスで複数のWARPプロファイルをサポートすることが極めて重要になります。",[434,465,466,467,471],{},"macOSでこれを実現するために、",[468,469,470],"code",{},".mobileconfig"," MDMプロファイルファイルを使用して、異なるWARP環境を定義および登録できます。",[473,474,475,489],"ul",{},[476,477,478,479,488],"li",{},"Cloudflareから直接 ",[480,481,485,487],"a",{"href":482,"rel":483},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fstatic\u002Fmdm\u002Fmultiple-orgs\u002FCloudflareWARP.mobileconfig",[484],"nofollow",[468,486,470],{},"ファイルのサンプルをダウンロード"," します。",[476,490,491],{},"以下は、この設定がどのようなものかを示す例です：",[493,494,498],"pre",{"className":495,"code":496,"language":497,"meta":424,"style":424},"language-xml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\u003C!DOCTYPE plist PUBLIC \"-\u002F\u002FApple\u002F\u002FDTD PLIST 1.0\u002F\u002FEN\" \"http:\u002F\u002Fwww.apple.com\u002FDTDs\u002FPropertyList-1.0.dtd\">\n\u003Cplist version=\"1.0\">\n\u003Cdict>\n  \u003Ckey>PayloadContent\u003C\u002Fkey>\n  \u003Carray>\n    \u003Cdict>\n      \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n      \u003Cstring>Warp Configuration\u003C\u002Fstring>\n      \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n      \u003Cstring>com.cloudflare.warp.CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n      \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n      \u003Cstring>Cloudflare Ltd.\u003C\u002Fstring>\n      \u003Ckey>PayloadType\u003C\u002Fkey>\n      \u003Cstring>com.cloudflare.warp\u003C\u002Fstring>\n      \u003Ckey>PayloadUUID\u003C\u002Fkey>\n      \u003Cstring>CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n      \u003Ckey>PayloadVersion\u003C\u002Fkey>\n      \u003Cinteger>1\u003C\u002Finteger>\n      \u003Ckey>configs\u003C\u002Fkey>\n      \u003Carray>\n        \u003Cdict>\n          \u003Ckey>organization\u003C\u002Fkey>\n          \u003Cstring>your-team-name-1\u003C\u002Fstring>\n          \u003Ckey>display_name\u003C\u002Fkey>\n          \u003Cstring>Team 1\u003C\u002Fstring>\n        \u003C\u002Fdict>\n        \u003Cdict>\n          \u003Ckey>organization\u003C\u002Fkey>\n          \u003Cstring>your-team-name-2\u003C\u002Fstring>\n          \u003Ckey>display_name\u003C\u002Fkey>\n          \u003Cstring>Team 2\u003C\u002Fstring>\n        \u003C\u002Fdict>\n      \u003C\u002Farray>\n    \u003C\u002Fdict>\n  \u003C\u002Farray>\n  \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n  \u003Cstring>Cloudflare WARP\u003C\u002Fstring>\n  \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n  \u003Cstring>cloudflare_warp\u003C\u002Fstring>\n  \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n  \u003Cstring>Cloudflare, Ltd.\u003C\u002Fstring>\n  \u003Ckey>PayloadRemovalDisallowed\u003C\u002Fkey>\n  \u003Cfalse\u002F>\n  \u003Ckey>PayloadScope\u003C\u002Fkey>\n  \u003Cstring>System\u003C\u002Fstring>\n  \u003Ckey>PayloadType\u003C\u002Fkey>\n  \u003Cstring>Configuration\u003C\u002Fstring>\n  \u003Ckey>PayloadUUID\u003C\u002Fkey>\n  \u003Cstring>2B7763B8-64F6-41EB-AA5E-7761651B8131\u003C\u002Fstring>\n  \u003Ckey>PayloadVersion\u003C\u002Fkey>\n  \u003Cinteger>1\u003C\u002Finteger>\n\u003C\u002Fdict>\n\u003C\u002Fplist>\n","xml",[468,499,500,508,514,520,526,532,538,544,550,556,562,568,574,580,586,592,598,604,610,616,622,628,634,640,646,652,658,664,669,674,680,685,691,696,702,708,714,720,726,732,738,744,750,756,762,768,774,780,786,792,798,804,810,816],{"__ignoreMap":424},[501,502,505],"span",{"class":503,"line":504},"line",1,[501,506,507],{},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",[501,509,511],{"class":503,"line":510},2,[501,512,513],{},"\u003C!DOCTYPE plist PUBLIC \"-\u002F\u002FApple\u002F\u002FDTD PLIST 1.0\u002F\u002FEN\" \"http:\u002F\u002Fwww.apple.com\u002FDTDs\u002FPropertyList-1.0.dtd\">\n",[501,515,517],{"class":503,"line":516},3,[501,518,519],{},"\u003Cplist version=\"1.0\">\n",[501,521,523],{"class":503,"line":522},4,[501,524,525],{},"\u003Cdict>\n",[501,527,529],{"class":503,"line":528},5,[501,530,531],{},"  \u003Ckey>PayloadContent\u003C\u002Fkey>\n",[501,533,535],{"class":503,"line":534},6,[501,536,537],{},"  \u003Carray>\n",[501,539,541],{"class":503,"line":540},7,[501,542,543],{},"    \u003Cdict>\n",[501,545,547],{"class":503,"line":546},8,[501,548,549],{},"      \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n",[501,551,553],{"class":503,"line":552},9,[501,554,555],{},"      \u003Cstring>Warp Configuration\u003C\u002Fstring>\n",[501,557,559],{"class":503,"line":558},10,[501,560,561],{},"      \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n",[501,563,565],{"class":503,"line":564},11,[501,566,567],{},"      \u003Cstring>com.cloudflare.warp.CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n",[501,569,571],{"class":503,"line":570},12,[501,572,573],{},"      \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n",[501,575,577],{"class":503,"line":576},13,[501,578,579],{},"      \u003Cstring>Cloudflare Ltd.\u003C\u002Fstring>\n",[501,581,583],{"class":503,"line":582},14,[501,584,585],{},"      \u003Ckey>PayloadType\u003C\u002Fkey>\n",[501,587,589],{"class":503,"line":588},15,[501,590,591],{},"      \u003Cstring>com.cloudflare.warp\u003C\u002Fstring>\n",[501,593,595],{"class":503,"line":594},16,[501,596,597],{},"      \u003Ckey>PayloadUUID\u003C\u002Fkey>\n",[501,599,601],{"class":503,"line":600},17,[501,602,603],{},"      \u003Cstring>CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n",[501,605,607],{"class":503,"line":606},18,[501,608,609],{},"      \u003Ckey>PayloadVersion\u003C\u002Fkey>\n",[501,611,613],{"class":503,"line":612},19,[501,614,615],{},"      \u003Cinteger>1\u003C\u002Finteger>\n",[501,617,619],{"class":503,"line":618},20,[501,620,621],{},"      \u003Ckey>configs\u003C\u002Fkey>\n",[501,623,625],{"class":503,"line":624},21,[501,626,627],{},"      \u003Carray>\n",[501,629,631],{"class":503,"line":630},22,[501,632,633],{},"        \u003Cdict>\n",[501,635,637],{"class":503,"line":636},23,[501,638,639],{},"          \u003Ckey>organization\u003C\u002Fkey>\n",[501,641,643],{"class":503,"line":642},24,[501,644,645],{},"          \u003Cstring>your-team-name-1\u003C\u002Fstring>\n",[501,647,649],{"class":503,"line":648},25,[501,650,651],{},"          \u003Ckey>display_name\u003C\u002Fkey>\n",[501,653,655],{"class":503,"line":654},26,[501,656,657],{},"          \u003Cstring>Team 1\u003C\u002Fstring>\n",[501,659,661],{"class":503,"line":660},27,[501,662,663],{},"        \u003C\u002Fdict>\n",[501,665,667],{"class":503,"line":666},28,[501,668,633],{},[501,670,672],{"class":503,"line":671},29,[501,673,639],{},[501,675,677],{"class":503,"line":676},30,[501,678,679],{},"          \u003Cstring>your-team-name-2\u003C\u002Fstring>\n",[501,681,683],{"class":503,"line":682},31,[501,684,651],{},[501,686,688],{"class":503,"line":687},32,[501,689,690],{},"          \u003Cstring>Team 2\u003C\u002Fstring>\n",[501,692,694],{"class":503,"line":693},33,[501,695,663],{},[501,697,699],{"class":503,"line":698},34,[501,700,701],{},"      \u003C\u002Farray>\n",[501,703,705],{"class":503,"line":704},35,[501,706,707],{},"    \u003C\u002Fdict>\n",[501,709,711],{"class":503,"line":710},36,[501,712,713],{},"  \u003C\u002Farray>\n",[501,715,717],{"class":503,"line":716},37,[501,718,719],{},"  \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n",[501,721,723],{"class":503,"line":722},38,[501,724,725],{},"  \u003Cstring>Cloudflare WARP\u003C\u002Fstring>\n",[501,727,729],{"class":503,"line":728},39,[501,730,731],{},"  \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n",[501,733,735],{"class":503,"line":734},40,[501,736,737],{},"  \u003Cstring>cloudflare_warp\u003C\u002Fstring>\n",[501,739,741],{"class":503,"line":740},41,[501,742,743],{},"  \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n",[501,745,747],{"class":503,"line":746},42,[501,748,749],{},"  \u003Cstring>Cloudflare, Ltd.\u003C\u002Fstring>\n",[501,751,753],{"class":503,"line":752},43,[501,754,755],{},"  \u003Ckey>PayloadRemovalDisallowed\u003C\u002Fkey>\n",[501,757,759],{"class":503,"line":758},44,[501,760,761],{},"  \u003Cfalse\u002F>\n",[501,763,765],{"class":503,"line":764},45,[501,766,767],{},"  \u003Ckey>PayloadScope\u003C\u002Fkey>\n",[501,769,771],{"class":503,"line":770},46,[501,772,773],{},"  \u003Cstring>System\u003C\u002Fstring>\n",[501,775,777],{"class":503,"line":776},47,[501,778,779],{},"  \u003Ckey>PayloadType\u003C\u002Fkey>\n",[501,781,783],{"class":503,"line":782},48,[501,784,785],{},"  \u003Cstring>Configuration\u003C\u002Fstring>\n",[501,787,789],{"class":503,"line":788},49,[501,790,791],{},"  \u003Ckey>PayloadUUID\u003C\u002Fkey>\n",[501,793,795],{"class":503,"line":794},50,[501,796,797],{},"  \u003Cstring>2B7763B8-64F6-41EB-AA5E-7761651B8131\u003C\u002Fstring>\n",[501,799,801],{"class":503,"line":800},51,[501,802,803],{},"  \u003Ckey>PayloadVersion\u003C\u002Fkey>\n",[501,805,807],{"class":503,"line":806},52,[501,808,809],{},"  \u003Cinteger>1\u003C\u002Finteger>\n",[501,811,813],{"class":503,"line":812},53,[501,814,815],{},"\u003C\u002Fdict>\n",[501,817,819],{"class":503,"line":818},54,[501,820,821],{},"\u003C\u002Fplist>\n",[473,823,824,834,848,858,864,883,895,915,931],{},[476,825,826,829,830,833],{},[468,827,828],{},"your-team-name-1"," と ",[468,831,832],{},"your-team-name-2"," を、それぞれのCloudflare Zero Trustチーム名に置き換えます。",[476,835,836,837,840,841,843,844,847],{},"ターミナルで ",[468,838,839],{},"uuidgen"," コマンドを実行してユニークなUUIDを生成し、それらを使用して ",[468,842,470],{}," ファイル内のプレースホルダー ",[468,845,846],{},"PayloadUUID"," 値を置き換えます。",[476,849,850,851,854,855,857],{},"プロファイルが一意に保たれるよう、",[468,852,853],{},"PayloadIdentifier"," 文字列にも更新された ",[468,856,846],{}," が含まれていることを確認してください。",[476,859,860,861,863],{},"編集した ",[468,862,470],{}," ファイルを保存します。",[476,865,866,867,870,871,874,875,878],{},"Macで ",[440,868,869],{},"システム設定"," を開き、",[440,872,873],{},"プロファイル"," を検索して選択します。",[876,877],"br",{},[879,880],"img",{"alt":881,"src":882},"macOSシステム設定のプロファイル画面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-system-settings-profiles.webp",[476,884,885,888,889,891],{},[440,886,887],{},"インストール、表示、または削除..."," をクリックして、新しい構成プロファイルの追加を開始します。",[876,890],{},[879,892],{"alt":893,"src":894},"macOSプロファイルのインストール・表示・削除ボタン","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-profiles-view-remove.webp",[476,896,897,898,901,902,904,905,907,911],{},"左下隅にある ",[440,899,900],{},"+","（プラス）アイコンをクリックし、保存した ",[468,903,470],{}," ファイルを選択します。",[876,906],{},[879,908],{"alt":909,"src":910},"新しいプロファイルを追加するmacOSプロファイルのプラス（+）ボタン","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-profiles-add-profile.webp",[879,912],{"alt":913,"src":914},"macOSで.mobileconfigファイルを選択する画面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-select-mobileconfig-file.webp",[476,916,917,920,921,924,925,927],{},[440,918,919],{},"Cloudflare WARP"," を選択し、",[440,922,923],{},"インストール"," をクリックして設定を適用します。",[876,926],{},[879,928],{"alt":929,"src":930},"macOSでCloudflare WARPプロファイルのインストールを確認する画面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-install-cloudflare-warp-profile.webp",[476,932,933,934,936],{},"Cloudflare WARPクライアントを再起動します。ユーザーインターフェースにマルチプロファイル切り替えメニューが表示されるはずです：",[876,935],{},[879,937],{"alt":938,"src":939},"macOS上の複数プロファイル切り替え機能付きCloudflare WARPクライアント","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fcloudflare-warp-multi-profile-switcher.webp",[429,941,942],{"id":942},"おわりに",[434,944,945],{},"Cloudflare WARPクライアントはユーザーデバイス上の重要なセキュリティ境界として機能し、Zero Trust Network Access（ZTNA）を堅牢かつ実用的なものにします。内部リソースをパブリックインターネットから分離し続けることで、すべての接続試行が安全に認証、評価、および監査されます。",[429,947,948],{"id":948},"参考資料",[473,950,951,958,965,972],{},[476,952,953],{},[480,954,957],{"href":955,"rel":956},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002Fdeployment\u002Fmdm-deployment\u002F#prepare-file-for-mdm-deployment",[484],"Managed Deployment Preparation",[476,959,960],{},[480,961,964],{"href":962,"rel":963},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002Fdeployment\u002Fmdm-deployment\u002Fswitch-organizations\u002F",[484],"Switch Between Zero Trust Organizations",[476,966,967],{},[480,968,971],{"href":969,"rel":970},"https:\u002F\u002Fblog.cloudflare.com\u002Fintroducing-warp-connector-paving-the-path-to-any-to-any-connectivity-2\u002F",[484],"Introducing WARP Connector: Paving the Path to Any-to-Any Connectivity",[476,973,974],{},[480,975,978],{"href":976,"rel":977},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002F",[484],"Cloudflare One Client Documentation",[980,981,982],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":424,"searchDepth":510,"depth":516,"links":984},[985,986,987,988,989],{"id":431,"depth":510,"text":432},{"id":446,"depth":510,"text":447},{"id":459,"depth":510,"text":460},{"id":942,"depth":510,"text":942},{"id":948,"depth":510,"text":948},[991,992],"security","cloudflare","2026-07-04","Macで.mobileconfigファイルを用いて、複数のCloudflare WARP組織環境を設定し、ユーザーUI上で簡単に切り替える方法をステップバイステップで分かりやすく解説します。システム管理者向けに、MDM構成プロファイルの作成、インストール、切り替え動作確認まで網羅した完全な実践設定ガイドです。","md","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002FJA-Switch-Between-Multiple-Cloudflare-WARP-Orgs-on-Mac.webp","Macで複数のCloudflare WARP組織を切り替える設定手順",true,{"schemaOrg":1000,"robots":1003,"sitemap":1004},[1001],{"@type":1002,"headline":423,"description":994},"HowTo","index, follow",{"lastmod":993},{"title":997,"description":994,"ogTitle":423,"ogDescription":994,"twitterTitle":423,"twitterDescription":994},"ja\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",[1008,919,1009,1010],"macOS","MDM","Zero Trust",null,"ybGveqjdhzREK92fqRUTTaL4gPz_r6KraZIW2UrslwI",{"surround":1014,"related":2277},[1015,1419],{"id":1016,"title":1017,"author":424,"body":1018,"category":1401,"date":1403,"description":1404,"extension":995,"image":1405,"imageAlt":1406,"isPublished":998,"meta":1407,"minRead":510,"navigation":998,"path":181,"seo":1411,"stem":1412,"tags":1413,"updatedAt":1011,"__hash__":1418},"article\u002Fja\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them.md","AIエージェントのスキルとは？その基本概念から作成方法、再利用可能なワークフローの構築までを徹底解説",{"type":426,"value":1019,"toc":1391},[1020,1024,1035,1046,1115,1120,1124,1127,1136,1142,1147,1204,1215,1221,1224,1281,1285,1288,1295,1298,1309,1313,1357,1360,1376,1378,1385,1388],[429,1021,1023],{"id":1022},"aiエージェントのスキルagent-skillとは","AIエージェントのスキル（Agent Skill）とは？",[434,1025,1026,1027,1030,1031,1034],{},"エージェントのスキル（agent skill）とは、再利用可能な ",[440,1028,1029],{},"指示（インストラクション）のセット","、すなわち、エージェントに特定のタスクを高いクオリティで実行させるための「標準化された手順書」です。これは ",[468,1032,1033],{},"SKILL.md"," という単一の Markdown ファイルで構成され、タスクに必要なその他のファイル（参照ドキュメント、テンプレート、実行可能なスクリプトなど）をひとまとめにパッケージ化することができます。",[434,1036,1037,1038,1045],{},"例として、計画や設計を問い詰めるスキルである ",[480,1039,1042],{"href":1040,"rel":1041},"https:\u002F\u002Fgithub.com\u002Fmattpocock\u002Fskills\u002Fblob\u002F733d312884b3878a9a9cff693c5886943753a741\u002Fskills\u002Fproductivity\u002Fgrill-me\u002FSKILL.md",[484],[468,1043,1044],{},"grill-me"," を見てみましょう：",[493,1047,1051],{"className":1048,"code":1049,"language":1050,"meta":424,"style":424},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","---\nname: grill-me\ndescription: Interview the user relentlessly about a plan or design until reaching shared understanding, resolving each branch of the decision tree. Use when user wants to stress-test a plan, get grilled on their design, or mentions \"grill me\".\n---\n\nInterview me relentlessly about every aspect of this plan until we reach a shared understanding. Walk down each branch of the design tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer.\n\nAsk the questions one at a time.\n\nIf a question can be answered by exploring the codebase, explore the codebase instead.\n","yaml",[468,1052,1053,1059,1073,1083,1087,1092,1097,1101,1106,1110],{"__ignoreMap":424},[501,1054,1055],{"class":503,"line":504},[501,1056,1058],{"class":1057},"sBMFI","---\n",[501,1060,1061,1065,1069],{"class":503,"line":510},[501,1062,1064],{"class":1063},"swJcz","name",[501,1066,1068],{"class":1067},"sMK4o",":",[501,1070,1072],{"class":1071},"sfazB"," grill-me\n",[501,1074,1075,1078,1080],{"class":503,"line":516},[501,1076,1077],{"class":1063},"description",[501,1079,1068],{"class":1067},[501,1081,1082],{"class":1071}," Interview the user relentlessly about a plan or design until reaching shared understanding, resolving each branch of the decision tree. Use when user wants to stress-test a plan, get grilled on their design, or mentions \"grill me\".\n",[501,1084,1085],{"class":503,"line":522},[501,1086,1058],{"class":1057},[501,1088,1089],{"class":503,"line":528},[501,1090,1091],{"emptyLinePlaceholder":998},"\n",[501,1093,1094],{"class":503,"line":534},[501,1095,1096],{"class":1071},"Interview me relentlessly about every aspect of this plan until we reach a shared understanding. Walk down each branch of the design tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer.\n",[501,1098,1099],{"class":503,"line":540},[501,1100,1091],{"emptyLinePlaceholder":998},[501,1102,1103],{"class":503,"line":546},[501,1104,1105],{"class":1071},"Ask the questions one at a time.\n",[501,1107,1108],{"class":503,"line":552},[501,1109,1091],{"emptyLinePlaceholder":998},[501,1111,1112],{"class":503,"line":558},[501,1113,1114],{"class":1071},"If a question can be answered by exploring the codebase, explore the codebase instead.\n",[434,1116,1117,1119],{},[468,1118,1033],{}," ファイルには、少量のメタデータブロックと、指示の本文が含まれています。メタデータにはスキルの名前（name）と説明（description）が記述されており、AI エージェントは起動時にこれを読み込みます。",[429,1121,1123],{"id":1122},"aiエージェントのスキルはどう機能するか段階的開示progressive-disclosure","AIエージェントのスキルはどう機能するか：段階的開示（Progressive Disclosure）",[434,1125,1126],{},"初期状態では、スキルの名前と説明だけがコンテキスト（Context）に読み込まれます。ユーザーの要求がスキルの説明文と一致したときに初めて、指示の本文全体が同じコンテキストに読み込まれます。",[434,1128,1129,1130,1135],{},"実際の開発フローにおいて、この ",[480,1131,1133],{"href":1040,"rel":1132},[484],[468,1134,1044],{}," スキルがどのように使われるかを見てみましょう。",[434,1137,1138],{},[879,1139],{"alt":1140,"src":1141},"AIエージェントスキルの実行における段階的開示（プログレッシブ・ディスクロージャー）メカニズムを示すシーケンス図","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FAI%20Agent%20Skills%20What%20They%20Are%20%26%20How%20to%20Create%20Them\u002Fai-agent-skill-progressive-disclosure-sequence-diagram.webp",[1143,1144,1146],"h3",{"id":1145},"ステップバイステップ","ステップ・バイ・ステップ",[1148,1149,1150,1156,1162,1168,1174,1188,1198],"ol",{},[476,1151,1152,1155],{},[440,1153,1154],{},"リクエスト（Request）"," — ユーザーがエージェントに「私のワークフローの設計を問い詰めて、ストレステストしてほしい（grill me on my workflow design）」と依頼します。",[476,1157,1158,1161],{},[440,1159,1160],{},"選択用プロンプト（Selection prompt）"," — ユーザーのリクエストと、利用可能なすべてのスキルの説明文が LLM に送信されます。",[476,1163,1164,1167],{},[440,1165,1166],{},"LLM による選択"," — LLM がリクエストと各スキルの説明を比較し、一致するスキルを選択して返します。",[476,1169,1170,1173],{},[440,1171,1172],{},"確認（Confirmation）"," — エージェントが提案されたスキルをユーザーに提示し、ユーザーがそれを確認（または却下・調整）します。",[476,1175,1176,1179,1180,1184,1185,1187],{},[440,1177,1178],{},"指示のロード"," — エージェントは、確認されたスキルの ",[1181,1182,1183],"em",{},"完全な"," 指示（",[468,1186,1033],{}," の本文）を取得します。",[476,1189,1190,1193,1194,1197],{},[440,1191,1192],{},"実行用プロンプト（Execution prompt）"," — ユーザーのリクエストに、",[440,1195,1196],{},"選択されたスキルの具体的な指示","を加えたものが LLM に送信されます。",[476,1199,1200,1203],{},[440,1201,1202],{},"レスポンス"," — LLM が、問い詰めのための最初の質問を出力します。",[434,1205,1206,1207,1214],{},"次に、参照ドキュメントを持つスキルがどのように使われるかを、",[480,1208,1211],{"href":1209,"rel":1210},"https:\u002F\u002Fgithub.com\u002Fcoleam00\u002Fexcalidraw-diagram-skill",[484],[468,1212,1213],{},"excalidraw-diagram-skill"," を例に説明します：",[434,1216,1217],{},[879,1218],{"alt":1219,"src":1220},"外部の参照ファイルやテンプレートを読み込んでスキルを実行するAIエージェントのシーケンス図","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FAI%20Agent%20Skills%20What%20They%20Are%20%26%20How%20to%20Create%20Them\u002Fai-agent-skill-with-reference-files-sequence-diagram.webp",[1143,1222,1146],{"id":1223},"ステップバイステップ-1",[1148,1225,1226,1231,1237,1246,1252,1263,1272],{},[476,1227,1228,1230],{},[440,1229,1154],{}," — ユーザーが「デプロイプロセスのワークフローを描いて（draw the workflow of the deployment process）」と依頼します。",[476,1232,1233,1236],{},[440,1234,1235],{},"選択用プロンプト"," — ユーザーのリクエストと、すべてのスキルの説明が LLM に送信されます。",[476,1238,1239,1241,1242,1245],{},[440,1240,1166],{}," — LLM はリクエストと説明を比較し、一致するスキルを返します。ここでは「ワークフローを描く」が ",[468,1243,1244],{},"excalidraw-diagram"," の説明と一致するため、このスキルが選択されます。",[476,1247,1248,1251],{},[440,1249,1250],{},"確認"," — エージェントは提案されたスキルをユーザーに提示し、ユーザーが確認します。",[476,1253,1254,1256,1257,1259,1260,1262],{},[440,1255,1178],{}," — エージェントは、確認されたスキルの指示本文（",[468,1258,1033],{},"）と、関連する参照ファイル（",[468,1261,1244],{}," の場合はカラーパレット、JSON スキーマ、要素テンプレートなど）をすべて読み込みます。",[476,1264,1265,1193,1268,1271],{},[440,1266,1267],{},"実行用プロンプト",[440,1269,1270],{},"スキルの指示と参照ファイル","を足したプロンプトが LLM に送信されます。モデルは必要な詳細な手法や仕様を把握できます。",[476,1273,1274,1276,1277,1280],{},[440,1275,1202],{}," — LLM がアウトプット（",[468,1278,1279],{},".excalidraw"," の JSON ファイル）を生成し、エージェントがそれをユーザーに返します。",[429,1282,1284],{"id":1283},"aiエージェントのスキル-vs-ツール-mcp","AIエージェントのスキル vs ツール ＆ MCP",[434,1286,1287],{},"スキルは、プロンプト、ツール（Tools）、MCP（Model Context Protocol）を置き換えるものではありません。ツールや MCP インテグレーションは、データベースへの問い合わせや API の呼び出しなど、外部システムへアクセスする「エージェントの腕」を伸ばす役割を持ちます。これに対し、スキルは特定のタスクを完遂するための「エージェントのノウハウ（専門知識）」を深める役割を持ちます。",[434,1289,1290,1291,1294],{},"例えば、",[480,1292,1293],{"href":395},"ChatGPTとClaudeでNetSuite MCPをセットアップする方法"," のような MCP を使えば、エージェントは NetSuite 内のリアルタイムな財務・業務データにアクセスしてユーザーの質問に答えられるようになります。そしてさらに「NetSuite業務レポートスキル」を組み合わせることで、エージェントはそのデータをどのように編集し、どのようなレポートとしてユーザーに提示すべきかという具体的な手順を実行できるようになります。",[434,1296,1297],{},"スキルの活用が特に効果的なシナリオ：",[473,1299,1300,1303,1306],{},[476,1301,1302],{},"複数ステップにわたる複雑なワークフロー",[476,1304,1305],{},"PDF からのデータ抽出など、ドキュメントの高度な処理",[476,1307,1308],{},"組織のコード生成標準に沿った実装",[429,1310,1312],{"id":1311},"aiエージェントのスキルの作成方法","AIエージェントのスキルの作成方法",[1148,1314,1315,1325,1339,1348],{},[476,1316,1317,1320,1321,1324],{},[440,1318,1319],{},"フォルダを作成","し、スキルの名前を付けます（例：",[468,1322,1323],{},"netsuite-operation-report\u002F","）。",[476,1326,1327,1332,1333,1335,1336,1338],{},[440,1328,1329,1331],{},[468,1330,1033],{}," を作成","し、",[468,1334,1064],{},"（名前）、明確な ",[468,1337,1077],{},"（説明）、および簡潔な指示本文（200語以内）を記述します。",[476,1340,1341,1344,1345,1347],{},[440,1342,1343],{},"リソースを追加","します。タスクに必要な参照ドキュメント、テンプレート、スクリプトなどをフォルダ内に配置します。",[468,1346,1033],{}," 自体は短く保ち、詳細は各ファイルにリンクさせます。",[476,1349,1350,1352,1353,1356],{},[440,1351,923],{},"してエージェントが発見できるようにします。複数のエージェント間でスキルを効率的に管理する方法については、",[480,1354,1355],{"href":359},"npx skillsによるAIエージェント用スキルの集中管理"," を参照してください。",[434,1358,1359],{},"質の高いスキルを作成するためのコツ：",[473,1361,1362,1365,1370,1373],{},[476,1363,1364],{},"説明文（description）は、人間向けではなく、システムが判別する「トリガー」として機能するように書きます。",[476,1366,1367,1369],{},[468,1368,1033],{}," は 200語以内で軽量に保ちます。本文には一般的な手順のみを書き、エッジケースは参照ドキュメントに委ねます。",[476,1371,1372],{},"確定的な処理にはスクリプト（コード）を使います。LLM に複雑な算術計算をさせないようにします。",[476,1374,1375],{},"バージョン管理を行い、Git にコミットします。",[429,1377,942],{"id":942},[434,1379,1380,1381,1384],{},"接続先（接続可能な外部システム）を定義する「ツール」や「MCP」とは異なり、エージェントの「スキル」は ",[440,1382,1383],{},"どのように仕事を遂行するか（実務の手順）"," をパッケージ化したものです。これらは競合するものではなく、お互いを補完し合う重要な関係にあります。",[434,1386,1387],{},"「段階的開示（Progressive Disclosure）」の仕組みを活かすことで、必要なときだけ詳細な手順や参照ドキュメント、実行スクリプトをロードできるため、エージェントのコンテキストウィンドウをクリーンで無駄のない状態に維持することができます。",[980,1389,1390],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":424,"searchDepth":510,"depth":516,"links":1392},[1393,1394,1398,1399,1400],{"id":1022,"depth":510,"text":1023},{"id":1122,"depth":510,"text":1123,"children":1395},[1396,1397],{"id":1145,"depth":516,"text":1146},{"id":1223,"depth":516,"text":1146},{"id":1283,"depth":510,"text":1284},{"id":1311,"depth":510,"text":1312},{"id":942,"depth":510,"text":942},[1402],"ai-agents","2026-06-26","AIエージェントのスキルとは何か、また状況に応じて詳細なシステム手順を効率的にロードする「段階的開示（Progressive Disclosure）」の仕組みを詳しく解説。開発者向けに再利用可能で強力なカスタムスキルを一から自作し、実開発に適用するための実践的な手順と手法を余すところなく紹介します。","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FAI%20Agent%20Skills%20What%20They%20Are%20%26%20How%20to%20Create%20Them\u002FJA-AI-Agent-Skills-What-They-Are-%26-How-to-Create-Them.webp","AIエージェントのスキル作成・開発ガイド：再利用可能で効率的なワークフローを構築する手順とベストプラクティス",{"schemaOrg":1408,"robots":1003,"sitemap":1410},[1409],{"@type":1002,"headline":1017,"description":1404},{"lastmod":1403},{"title":1406,"description":1404,"ogTitle":1017,"ogDescription":1404,"twitterTitle":1017,"twitterDescription":1404},"ja\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",[1414,1415,1416,1417],"AIエージェント","エージェントスキル","再利用可能なワークフロー","AIチュートリアル","sMzHllYBdhg70umNdDoR0_xCKy6Ict_7j3aoGx2f6uo",{"id":1420,"title":1421,"author":1011,"body":1422,"category":2258,"date":2259,"description":2260,"extension":995,"image":2261,"imageAlt":2262,"isPublished":998,"meta":2263,"minRead":722,"navigation":998,"path":209,"seo":2269,"stem":2270,"tags":2271,"updatedAt":1011,"__hash__":2276},"article\u002Fja\u002Farticle\u002Fuse-cloudflare-as-ai-memory.md","CloudflareとModel Context Protocolによる永続的自己ホスト型AIメモリシステム",{"type":426,"value":1423,"toc":2240},[1424,1428,1431,1434,1438,1441,1455,1459,1466,1480,1483,1486,1530,1534,1616,1620,1646,1763,1774,1778,1783,1828,1853,1857,1862,1935,1940,1944,1977,1985,2024,2028,2060,2064,2072,2077,2124,2128,2187,2190,2193,2196,2199,2203,2237],[429,1425,1427],{"id":1426},"aiエージェントにおける永続的メモリの重要性","AIエージェントにおける永続的メモリの重要性",[434,1429,1430],{},"AIアシスタントが日常生活に深く組み込まれるにつれ、私たちは「空白のコンテキスト問題（コンテキストの喪失）」に頻繁に遭遇することになります。先週下した決定は忘れ去られ、新しいセッションを開始するたびに、同じ技術スタックの仕様を入力し、ユーザー設定を何度も定義し直す必要が生じます。",[434,1432,1433],{},"毎回ゼロからやり直す代わりに、継続的に進化し、ユーザーの決定を恒常的に理解し、同じコンテキストの入力を繰り返す手間を完全に省くメモリシステムを構築する必要があります。",[429,1435,1437],{"id":1436},"自己ホスト型-vs-ビルトイン型-aiメモリシステム","自己ホスト型 vs. ビルトイン型 AIメモリシステム",[434,1439,1440],{},"多くのAIエージェントにはメモリ機能が組み込まれていますが、私たちは1つのエージェントだけですべての用を足すわけではありません。プロジェクトの設計やアーキテクチャの構築にはClaudeを、コーディングにはKimiを、背景調査にはChatGPTを使用することがあります。しかし、これらの異なるエージェント間でコンテキストは共有されず、それぞれのツール内に完全に孤立（サイロ化）したままになります。",[434,1442,1443,1444,1449,1450,1454],{},"ソフトウェアエンジニアリングの観点から、私たちは不透明なブラックボックスを信頼しません。観察可能で、監査可能であり、そして完全に私たちの制御下にあるAIメモリシステムが必要です。オープンソースプロジェクトである ",[480,1445,1448],{"href":1446,"rel":1447},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fsecond-brain-cloudflare\u002Ftree\u002Fmain",[484],"Second Brain","（",[480,1451,1452],{"href":1452,"rel":1453},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare",[484]," のフォーク）は、Model Context Protocol（MCP）をサポートした、永続的で自己ホスト（セルフホスト）型のメモリシステムを提供します。Claude、ChatGPT、Kimi CodeなどのMCP対応AIエージェントであれば、共通の統一されたメモリコンテキストを完全に共有できます。",[429,1456,1458],{"id":1457},"cloudflare上でsecond-brain-aiメモリを構築する方法","Cloudflare上でSecond Brain AIメモリを構築する方法",[434,1460,1461,1462,1465],{},"Second Brainメモリシステムは、世界中に分散された超低レイテンシのサーバーレス実行インフラを提供する ",[440,1463,1464],{},"Cloudflare Workers"," 上に展開されます。これにより、メモリの検索（recall）や保存などの処理を、AIの推論ループ内で遅延を感じさせることなく、ほぼ瞬時に実行することができます。",[434,1467,1468,1469,1472,1473,1476,1477,1479],{},"ベクトルの生成には、",[440,1470,1471],{},"Workers AI"," の埋め込み（embedding）モデルが使用されます。生成された埋め込みベクトルは、高度に最適化され、世界中に分散配置されたベクトルデータベースである ",[440,1474,1475],{},"Cloudflare Vectorize"," に保存されます。",[440,1478,1475],{}," は、セマンティックな（意味的な）関連性を持つメモリを正確に特定するために、コサイン類似度（cosine similarity）検索を実行します。",[434,1481,1482],{},"Second Brainには、インテリジェントな重複検出とマージ（融合）メカニズムも備わっています。意味の類似度が85%未満のコンテンツは新規メモリとして保存され、それ以上の類似度を持つものは重複候補としてブロックまたはマークされます。1,600文字を超える長いテキストは、文脈の喪失を防ぐために、文の境界や改行位置で適切に分割され、隣り合うチャンク間で200文字の重複（overlap）が維持されます。分割された各チャンクはそれぞれベクトル化され、極めて精度の高いマッチングを実現します。",[434,1484,1485],{},"AIエージェントから直接呼び出して使用するために、以下のツールがMCPインターフェースとして公開されています：",[473,1487,1488,1494,1500,1506,1512,1518,1524],{},[476,1489,1490,1493],{},[468,1491,1492],{},"remember",": アイデア、決定事項、好み、プロジェクトのコンテキストを保存する",[476,1495,1496,1499],{},[468,1497,1498],{},"append",": 既存のメモリに新しい更新情報や追記を追加する",[476,1501,1502,1505],{},[468,1503,1504],{},"update",": 既存のメモリを完全に置き換える",[476,1507,1508,1511],{},[468,1509,1510],{},"recall",": 完全一致するキーワードではなく、セマンティックな意味に基づいてメモリを検索する",[476,1513,1514,1517],{},[468,1515,1516],{},"list_recent",": 最近保存されたメモリを一覧表示する",[476,1519,1520,1523],{},[468,1521,1522],{},"forget",": メモリを完全に、恒久的に削除する",[476,1525,1526,1529],{},[468,1527,1528],{},"link\u002Fconnections",": 関連するメモリ同士を明示的にリンクする（V2グラフ機能）",[1143,1531,1533],{"id":1532},"cloudflareでのsecond-brainのセットアップ","CloudflareでのSecond Brainのセットアップ",[1148,1535,1536,1553,1560,1567,1574,1581,1592,1599,1602,1609],{},[476,1537,1538,1543,1544,1547,1548,1552],{},[480,1539,1542],{"href":1540,"rel":1541},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fsecond-brain-cloudflare",[484],"Githubリポジトリ"," ページの ",[468,1545,1546],{},"Deploy to Cloudflare"," をクリックします。 [[",[879,1549],{"alt":1550,"src":1551},"GitHubページ上のDeploy to Cloudflareボタンのハイライト表示","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fdeploy-to-cloudflare-button.webp","]]",[476,1554,1555,1556],{},"表示されたCloudflare Workerのフォームに入力します。\n",[879,1557],{"alt":1558,"src":1559},"Cloudflare Workersのデプロイ設定フォーム画面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-deployment-form.webp",[476,1561,1562,1563],{},"Dimensions（次元数）に '384' を入力し、Metric（指標）に 'cosine' を選択して、Deployボタンをクリックします。\n",[879,1564],{"alt":1565,"src":1566},"Cloudflare Vectorizeデータベース作成設定画面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-vectorize-configuration.webp",[476,1568,1569,1570],{},"以下は、Cloudflare Worker内に展開されたSecond Brainの管理ダッシュボードの概要です：\n",[879,1571],{"alt":1572,"src":1573},"デプロイされたSecond Brain Workerの概要ダッシュボード","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-second-brain-overview.webp",[476,1575,1576,1577],{},"'Settings'（設定）タブをクリックし、安全なアクセスキーを作成するために 'AUTH_TOKEN' の編集アイコンをクリックします：\n",[879,1578],{"alt":1579,"src":1580},"AUTH_TOKENがハイライトされたCloudflare Workerの変数設定","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-auth-token-settings.webp",[476,1582,1583,1584,1588],{},"'Rotate' リンクをクリックして、新しい値を入力できるようにします： ",[879,1585],{"alt":1586,"src":1587},"AUTH_TOKEN変数の編集およびローテーション画面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-auth-token-rotate.webp",[879,1589],{"alt":1590,"src":1591},"生成されたランダムな文字列をAUTH_TOKENの値フィールドに入力する様子","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-auth-token-value-input.webp",[476,1593,1594,1595,1598],{},"macOSのターミナルで ",[468,1596,1597],{},"openssl rand -base64 32"," コマンドを実行して安全なランダム値を生成し、それを 'Value' 入力フィールドに貼り付けます。",[476,1600,1601],{},"'Deploy' ボタンをクリックして、'AUTH_TOKEN' の新しい値を保存します。",[476,1603,1604,1605],{},"ウェブブラウザで、作成したSecond BrainのWorker URLを開きます。\n",[879,1606],{"alt":1607,"src":1608},"Bearer Token入力欄があるSecond Brain Web UIのログイン画面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fsecond-brain-web-ui-login.webp",[476,1610,1611,1612,1615],{},"作成した 'AUTH_TOKEN' を ",[468,1613,1614],{},"Bearer token"," フィールドに入力し、'Connect' ボタンをクリックして管理用の Web UI にログインします。",[1143,1617,1619],{"id":1618},"mcp経由でのclaude-desktopの統合","MCP経由でのClaude Desktopの統合",[1148,1621,1622,1629,1636],{},[476,1623,1624,1625],{},"Claude Desktopの設定画面で 'Customize'（カスタマイズ）をクリックします。\n",[879,1626],{"alt":1627,"src":1628},"Claude Desktop画面上のCustomizeボタンの指示位置","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-customize-button.webp",[476,1630,1631,1632],{},"'Developer'（デベロッパー）をクリックして、MCPサーバーの設定ファイルをエディタで直接開きます：\n",[879,1633],{"alt":1634,"src":1635},"MCP設定にアクセスするためのClaude Desktopデベロッパー設定メニュー","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-developer-menu.webp",[476,1637,1638,1641,1642,1645],{},[468,1639,1640],{},"claude_desktop_config.json"," ファイルの ",[468,1643,1644],{},"mcpServers"," セクションに以下のコードブロックを追加します：",[493,1647,1651],{"className":1648,"code":1649,"language":1650,"meta":424,"style":424},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","    \"second-brain\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"mcp-remote\",\n        \"https:\u002F\u002F\u003Cyour-worker-url>\u002Fmcp\",\n        \"--header\",\n        \"Authorization: Bearer \u003Cyour-token>\"\n      ]\n    }\n","json",[468,1652,1653,1671,1695,1709,1721,1732,1743,1753,1758],{"__ignoreMap":424},[501,1654,1655,1658,1661,1664,1668],{"class":503,"line":504},[501,1656,1657],{"class":1067},"    \"",[501,1659,1660],{"class":1071},"second-brain",[501,1662,1663],{"class":1067},"\"",[501,1665,1667],{"class":1666},"sTEyZ",": ",[501,1669,1670],{"class":1067},"{\n",[501,1672,1673,1676,1680,1682,1684,1687,1690,1692],{"class":503,"line":510},[501,1674,1675],{"class":1067},"      \"",[501,1677,1679],{"class":1678},"spNyl","command",[501,1681,1663],{"class":1067},[501,1683,1068],{"class":1067},[501,1685,1686],{"class":1067}," \"",[501,1688,1689],{"class":1071},"npx",[501,1691,1663],{"class":1067},[501,1693,1694],{"class":1067},",\n",[501,1696,1697,1699,1702,1704,1706],{"class":503,"line":516},[501,1698,1675],{"class":1067},[501,1700,1701],{"class":1678},"args",[501,1703,1663],{"class":1067},[501,1705,1068],{"class":1067},[501,1707,1708],{"class":1067}," [\n",[501,1710,1711,1714,1717,1719],{"class":503,"line":522},[501,1712,1713],{"class":1067},"        \"",[501,1715,1716],{"class":1071},"mcp-remote",[501,1718,1663],{"class":1067},[501,1720,1694],{"class":1067},[501,1722,1723,1725,1728,1730],{"class":503,"line":528},[501,1724,1713],{"class":1067},[501,1726,1727],{"class":1071},"https:\u002F\u002F\u003Cyour-worker-url>\u002Fmcp",[501,1729,1663],{"class":1067},[501,1731,1694],{"class":1067},[501,1733,1734,1736,1739,1741],{"class":503,"line":534},[501,1735,1713],{"class":1067},[501,1737,1738],{"class":1071},"--header",[501,1740,1663],{"class":1067},[501,1742,1694],{"class":1067},[501,1744,1745,1747,1750],{"class":503,"line":540},[501,1746,1713],{"class":1067},[501,1748,1749],{"class":1071},"Authorization: Bearer \u003Cyour-token>",[501,1751,1752],{"class":1067},"\"\n",[501,1754,1755],{"class":503,"line":546},[501,1756,1757],{"class":1067},"      ]\n",[501,1759,1760],{"class":503,"line":552},[501,1761,1762],{"class":1067},"    }\n",[434,1764,1765,1769,1770],{},[879,1766],{"alt":1767,"src":1768},"Second Brainサーバーを含むClaude DesktopのMCP設定JSONファイル","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-mcp-config-json.webp","\n4. Claude Desktopを再起動し、'Local MCP servers' のリストを確認します。ステータスが 'running'（実行中）と表示されていれば成功です。\n",[879,1771],{"alt":1772,"src":1773},"Second Brain MCPサーバーが正常に実行中であることを示すClaude Desktop","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-mcp-status-running.webp",[1143,1775,1777],{"id":1776},"mcp経由でのclaude-codeの統合","MCP経由でのClaude Codeの統合",[473,1779,1780],{},[476,1781,1782],{},"ターミナルで以下のコマンドを実行して、新しいMCPサーバーを追加します：",[493,1784,1788],{"className":1785,"code":1786,"language":1787,"meta":424,"style":424},"language-shell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","claude mcp add --transport http second-brain https:\u002F\u002F\u003Cyour-worker-url>\u002Fmcp\n","shell",[468,1789,1790],{"__ignoreMap":424},[501,1791,1792,1795,1798,1801,1804,1807,1810,1813,1816,1819,1822,1825],{"class":503,"line":504},[501,1793,1794],{"class":1057},"claude",[501,1796,1797],{"class":1071}," mcp",[501,1799,1800],{"class":1071}," add",[501,1802,1803],{"class":1071}," --transport",[501,1805,1806],{"class":1071}," http",[501,1808,1809],{"class":1071}," second-brain",[501,1811,1812],{"class":1071}," https:\u002F\u002F",[501,1814,1815],{"class":1067},"\u003C",[501,1817,1818],{"class":1071},"your-worker-ur",[501,1820,1821],{"class":1666},"l",[501,1823,1824],{"class":1067},">",[501,1826,1827],{"class":1071},"\u002Fmcp\n",[473,1829,1830,1837],{},[476,1831,1832,1833,1836],{},"Claude Codeはエンドポイントが認証を必要とすることを自動的に検出し、ウェブブラウザでログインページを開きます。ブラウザ上で ",[468,1834,1835],{},"AUTH_TOKEN"," を入力して認証を完了させます。",[476,1838,1839,1842,1843,1846,1847,1852],{},[468,1840,1841],{},"~\u002F.claude"," ディレクトリ内に ",[468,1844,1845],{},"CLAUDE.md"," ファイルを作成し、",[480,1848,1851],{"href":1849,"rel":1850},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fblob\u002Fmain\u002FAI_Instructions\u002FCLAUDE_INSTRUCTIONS.md",[484],"CLAUDE_INSTRUCTIONS.md"," に記載されている指示を記述しておきます。",[1143,1854,1856],{"id":1855},"mcp経由でのgemini-cliの統合","MCP経由でのGemini CLIの統合",[1148,1858,1859],{},[476,1860,1861],{},"以下のMCPサーバー設定を、お使いの '.\u002F.gemini\u002Fsettings.json' ファイルに追加します：",[493,1863,1865],{"className":1648,"code":1864,"language":1650,"meta":424,"style":424},"    \"second-brain\": {\n      \"httpUrl\": \"https:\u002F\u002F\u003Cyour-worker-url>\u002Fmcp\",\n      \"oauth\": {\n        \"enabled\": true\n      }\n    }\n",[468,1866,1867,1879,1898,1912,1926,1931],{"__ignoreMap":424},[501,1868,1869,1871,1873,1875,1877],{"class":503,"line":504},[501,1870,1657],{"class":1067},[501,1872,1660],{"class":1071},[501,1874,1663],{"class":1067},[501,1876,1667],{"class":1666},[501,1878,1670],{"class":1067},[501,1880,1881,1883,1886,1888,1890,1892,1894,1896],{"class":503,"line":510},[501,1882,1675],{"class":1067},[501,1884,1885],{"class":1678},"httpUrl",[501,1887,1663],{"class":1067},[501,1889,1068],{"class":1067},[501,1891,1686],{"class":1067},[501,1893,1727],{"class":1071},[501,1895,1663],{"class":1067},[501,1897,1694],{"class":1067},[501,1899,1900,1902,1905,1907,1909],{"class":503,"line":516},[501,1901,1675],{"class":1067},[501,1903,1904],{"class":1678},"oauth",[501,1906,1663],{"class":1067},[501,1908,1068],{"class":1067},[501,1910,1911],{"class":1067}," {\n",[501,1913,1914,1916,1919,1921,1923],{"class":503,"line":522},[501,1915,1713],{"class":1067},[501,1917,1918],{"class":1057},"enabled",[501,1920,1663],{"class":1067},[501,1922,1068],{"class":1067},[501,1924,1925],{"class":1067}," true\n",[501,1927,1928],{"class":503,"line":528},[501,1929,1930],{"class":1067},"      }\n",[501,1932,1933],{"class":503,"line":534},[501,1934,1762],{"class":1067},[1148,1936,1937],{"start":510},[476,1938,1939],{},"Gemini CLIを起動します。",[1143,1941,1943],{"id":1942},"aiエージェントでのsecond-brainのテスト","AIエージェントでのSecond Brainのテスト",[1148,1945,1946,1956,1970],{},[476,1947,1948,1951,1952],{},[440,1949,1950],{},"Claude Desktop"," 上で、簡単なブランドのカラーパレット設定を指示してみます。初期状態では、Second Brainは呼び出されません。\n",[879,1953],{"alt":1954,"src":1955},"Second Brainメモリ層が有効になっていない状態でのClaude Desktopでの最初のテスト","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-first-run-brand-palette.webp",[476,1957,1958,1959,1961,1962,1965,1966],{},"単に 'remember' という言葉を使ってみても、",[440,1960,1950],{}," のローカルビルトインツールである ",[468,1963,1964],{},"memory_user-edits"," のみが実行され、リモートのSecond Brainメモリ層は無視されます。\n",[879,1967],{"alt":1968,"src":1969},"Second Brainではなくローカルの組み込みツールにフォールバックするClaude Desktop","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-remember-built-in-tool-fallback.webp",[476,1971,1972,1973,1976],{},"次に、",[440,1974,1975],{},"Claude Code"," 上で以下のプロンプトを入力して送信すると、Second Brainが正しく呼び出されます：",[493,1978,1983],{"className":1979,"code":1981,"language":1982},[1980],"language-text","Remember Our brand palette uses `#1a1a2e` as primary, `#16213e` as secondary, and `#e94560` as accent. Never use pure black.\"\n","text",[468,1984,1981],{"__ignoreMap":424},[434,1986,1987,1991,1992,1995,1996,2000,2001,2004,2005,2007,2008,2012,2013,2016,2017,2000,2021],{},[879,1988],{"alt":1989,"src":1990},"Second Brain MCPの正常なトリガーを示すClaude Codeのターミナル画面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-code-second-brain-mcp-called.webp","\n4. ",[440,1993,1994],{},"Cloudflare上のSecond Brain"," ダッシュボードを開き、新しいカラー設定が保存されていることを確認します：\n",[879,1997],{"alt":1998,"src":1999},"Second Brain Web UIで保存されたブランドカラーコードのデータを確認する画面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fsecond-brain-web-ui-color-verification.webp","\n- ",[1181,2002,2003],{},"Claude Codeがシームレスに機能したのは、プロジェクトフォルダ内の CLAUDE_INSTRUCTIONS.md に 'Second Brain' に関連するトリガー指示が含まれていたためです。","\n5. ",[440,2006,1950],{}," でも同様に機能させるには、プロンプトの中で 'Second Brain' という言葉を明示的に含めて、この永続メモリ層への保存または読み込みを強制する必要があります。\n",[879,2009],{"alt":2010,"src":2011},"キーワードを明示的に指定してClaude DesktopでSecond Brainをトリガーする様子","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-second-brain-explicit-trigger.webp","\n6. ",[440,2014,2015],{},"Gemini CLI"," も同様で、Second Brain MCPをトリガーするために、プロンプト内で 'Second Brain' に言及する必要があります。\n",[879,2018],{"alt":2019,"src":2020},"Second Brain MCPの正常な呼び出しを示すGemini CLIのターミナル画面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fgemini-cli-second-brain-trigger.webp",[1181,2022,2023],{},"CLAUDE_INSTRUCTIONS.md と同じように、お使いの GEMINI.md ファイルに類似の指示を追加しておくことで、プロンプトでキーワードを意識して入力しなくても、背後で自動的にSecond Brainがトリガーされるようになります。",[1143,2025,2027],{"id":2026},"webブラウザ拡張機能","Webブラウザ拡張機能",[473,2029,2030,2033],{},[476,2031,2032],{},"Google Chrome、Mozilla Firefox、および Microsoft Edge 向けに公式拡張機能が提供されています。",[476,2034,2035,2036],{},"拡張機能では以下の操作が可能です：\n",[473,2037,2038,2044,2050],{},[476,2039,2040,2043],{},[440,2041,2042],{},"現在のページをキャプチャする"," — 表示中のページのタイトルとURLをSecond Brainに即座に保存します。",[476,2045,2046,2049],{},[440,2047,2048],{},"選択したテキストをキャプチャする"," — ページ上の任意のテキストをドラッグ選択してから拡張機能アイコンをクリックすると、その抜粋がページのタイトルとURLとともに保存されます。",[476,2051,2052,2055,2056,2059],{},[440,2053,2054],{},"クイックメモを追加する"," — 保存する前に、拡張機能のポップアップ内に直接メモを入力したり、",[468,2057,2058],{},"#hashtags"," を割り当てたりできます。ハッシュタグは自動的にメタデータタグとして抽出されます。",[1143,2061,2063],{"id":2062},"obsidianプラグインによる個人知識の同期","Obsidianプラグインによる個人知識の同期",[473,2065,2066,2069],{},[476,2067,2068],{},"ローカルの Obsidian Vault 内のノートを、Cloudflare上のSecond Brainと直接、選択的に同期するための専用プラグインが提供されています。",[476,2070,2071],{},"特定のノートに特定のタグを追加するだけで、その内容が永続ベクトルストレージに同期されます。",[2073,2074,2076],"h4",{"id":2075},"obsidianプラグインのインストール","Obsidianプラグインのインストール",[1148,2078,2079,2094,2104,2111],{},[476,2080,2081,2082,2085,2086,2089,2090],{},"Obsidianを起動し、",[501,2083,2084],{},"Settings（設定）"," → ",[501,2087,2088],{},"Community Plugins（コミュニティプラグイン）"," を開きます。\n",[879,2091],{"alt":2092,"src":2093},"Community Plugins（コミュニティプラグイン）セクションへ遷移するObsidianの設定画面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-settings-community-plugins.webp",[476,2095,2096,2099,2100],{},[501,2097,2098],{},"Browse（閲覧）"," ボタンをクリックします。\n",[879,2101],{"alt":2102,"src":2103},"Browse（閲覧）ボタンが表示されたObsidianのコミュニティプラグイン検索画面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-community-plugins-browse.webp",[476,2105,2106,2107],{},"'Second Brain Sync' を検索します。\n",[879,2108],{"alt":2109,"src":2110},"Obsidianプラグインストアで「Second Brain Sync」プラグインを検索する画面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-community-plugins-search-second-brain.webp",[476,2112,2113,2116,2117,2099,2120],{},[501,2114,2115],{},"Install（インストール）"," ボタンをクリックし、続いて ",[501,2118,2119],{},"Enable（有効化）",[879,2121],{"alt":2122,"src":2123},"Obsidianで「Second Brain Sync」プラグインをインストールして有効化する様子","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-plugin-install-and-enable.webp",[2073,2125,2127],{"id":2126},"obsidianプラグインの設定","Obsidianプラグインの設定",[1148,2129,2130,2138,2145,2155,2170,2180],{},[476,2131,2132,2085,2134,2137],{},[501,2133,2084],{},[501,2135,2136],{},"Second Brain Sync"," を開きます。",[476,2139,2140,2141],{},"作成したWorkerの「URL」と「Auth token（認証トークン）」を入力します。\n",[879,2142],{"alt":2143,"src":2144},"Obsidianプラグイン設定画面でWorkerのURLと認証トークンを入力する様子","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-plugin-configuration-credentials.webp",[476,2146,2147,2150,2151],{},[501,2148,2149],{},"Test"," ボタンをクリックし、接続が正常に確立されていることを検証します。\n",[879,2152],{"alt":2153,"src":2154},"Obsidianプラグインの接続テストが正常に成功したことを示すダイアログ","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-plugin-connection-test-success.webp",[476,2156,2157,2158,2161,2162,2165,2166],{},"同期動作を設定します。",[501,2159,2160],{},"Sync tag"," に同期対象ノートを判別するタグ名を設定し、",[501,2163,2164],{},"Auto-sync on save（保存時に自動同期）"," を有効にします。\n",[879,2167],{"alt":2168,"src":2169},"Obsidianプラグイン設定で同期タグ（Sync tag）を設定し、保存時の自動同期を有効化する画面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-plugin-sync-behavior-settings.webp",[476,2171,2172,2173,2175,2176],{},"Obsidianのノート内に、設定した同期用タグ（例： ",[468,2174,1660],{},"）を記述して保存します。\n",[879,2177],{"alt":2178,"src":2179},"同期用タグ「second-brain」を付与した新規Obsidianノートの作成画面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-note-with-sync-tag.webp",[476,2181,2182,2183],{},"保存されたノートは、即座にCloudflare上に展開されたSecond Brainへ自動同期されます。\n",[879,2184],{"alt":2185,"src":2186},"同期が成功したObsidianのノートをSecond Brain Web UI側で確認する様子","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fsecond-brain-web-ui-synced-note-verification.webp",[429,2188,2189],{"id":2189},"結論",[434,2191,2192],{},"Second Brainは、現在のAIエージェントにおける最大の難題の一つである「コンテキストの喪失とメモリの欠如」に対する、洗練されたオープンソースの解法を提供します。このプロジェクトをCloudflareの拡張性の高いサーバーレスインフラと融合させることで、グローバルに分散され、極めて遅延の少ない、完全に自己ホストされたセマンティックメモリレイヤーを手にすることができます。さらにModel Context Protocol（MCP）規格に準拠しているため、この知識ベースは多様なAIアシスタント間で完全にポータブル（移植可能）です。",[434,2194,2195],{},"Obsidianプラグインの存在は、このアーキテクチャを個人の知識管理と推論ループを橋渡しするものへと昇華させます。ユーザーの散らばった個人ノートが、AIエージェントがいつでも意味的に解釈・呼び出し可能な構造化された文脈データへと進化します。",[434,2197,2198],{},"自己ホスト型アプローチ、セマンティックベクトル検索、そしてMCPのようなオープンな標準規格を高度に融合させることで、Second Brainは単なる情報置き場を超え、真の意味で実用的な独自の「AIアシスタントエコシステム」を構築するための強固な設計基盤であることを証明しています。",[429,2200,2202],{"id":2201},"参考文献","参考文献：",[473,2204,2205,2211,2217,2224,2231],{},[476,2206,2207],{},[480,2208,2209],{"href":2209,"rel":2210},"https:\u002F\u002Fwww.thesecondbrain.dev\u002F",[484],[476,2212,2213],{},[480,2214,2215],{"href":2215,"rel":2216},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fwiki\u002FHow-It-Works",[484],[476,2218,2219],{},[480,2220,2223],{"href":2221,"rel":2222},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fwiki\u002FConnect-to-AI-Clients",[484],"Connect to AI Clients",[476,2225,2226],{},[480,2227,2230],{"href":2228,"rel":2229},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fwiki\u002FObsidian-Plugin",[484],"Second Brain Obsidian Plugin",[476,2232,2233],{},[480,2234,2235],{"href":2235,"rel":2236},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-obsidian-plugin",[484],[980,2238,2239],{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":424,"searchDepth":510,"depth":516,"links":2241},[2242,2243,2244,2256,2257],{"id":1426,"depth":510,"text":1427},{"id":1436,"depth":510,"text":1437},{"id":1457,"depth":510,"text":1458,"children":2245},[2246,2247,2248,2249,2250,2251,2252],{"id":1532,"depth":516,"text":1533},{"id":1618,"depth":516,"text":1619},{"id":1776,"depth":516,"text":1777},{"id":1855,"depth":516,"text":1856},{"id":1942,"depth":516,"text":1943},{"id":2026,"depth":516,"text":2027},{"id":2062,"depth":516,"text":2063,"children":2253},[2254,2255],{"id":2075,"depth":522,"text":2076},{"id":2126,"depth":522,"text":2127},{"id":2189,"depth":510,"text":2189},{"id":2201,"depth":510,"text":2202},[992,1402],"2026-08-07","CloudflareとSecond Brain、MCPを使用して、永続的で自己ホスト型のAIメモリシステムを構築する方法を学びます。ClaudeやGemini、Obsidianでコンテキストを共有しましょう。","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002FJA-Use-Cloudflare-as-AI-memory.webp","Cloudflare WorkersとVectorize上に構築された永続的な自己ホスト型AIメモリシステム。MCPとObsidian同期に対応。",{"schemaOrg":2264,"robots":1003,"sitemap":2268},[2265],{"@type":2266,"headline":2267,"description":2260},"TechArticle","Cloudflare & MCPによる自己ホスト型永続AIメモリシステム",{"lastmod":2259},{"title":2267,"description":2260,"ogTitle":1421,"ogDescription":2260,"twitterTitle":1421,"twitterDescription":2260},"ja\u002Farticle\u002Fuse-cloudflare-as-ai-memory",[2272,2273,2274,1448,2275],"Cloudflare","MCP","AIメモリ","Obsidian","9x3FSkJZh6hcgPg0GymRv7yWTVgQ-1XCvzT_j98Vvqo",[2278,3201,3202],{"id":2279,"title":2280,"author":424,"body":2281,"category":3154,"date":3155,"description":3156,"extension":995,"image":3157,"imageAlt":3158,"isPublished":998,"meta":3159,"minRead":528,"navigation":998,"path":363,"seo":3194,"stem":3196,"tags":3197,"updatedAt":3193,"__hash__":3200},"article\u002Fja\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp.md","Cloudflare WARPでHermes Agentをプライベートネットワークに公開する方法",{"type":426,"value":2282,"toc":3136},[2283,2297,2307,2310,2313,2325,2328,2336,2339,2343,2392,2396,2531,2535,2567,2571,2574,2640,2643,2679,2682,2709,2713,2723,2726,2764,2851,2855,2860,2875,2884,2959,2964,3010,3014,3059,3073,3077,3121,3123,3133],[434,2284,2285,2286,2289,2290,2292,2293,2296],{},"パブリックインターネットに公開することなく、ノートパソコン、タブレット、スマートフォンなどの他のデバイスから",[440,2287,2288],{},"Hermes Agent","にアクセスしたい場合、よく課題に直面します。",[440,2291,919],{},"と",[440,2294,2295],{},"Cloudflare Zero Trust","を活用することで、ファイアウォールのインバウンドポートを一切開くことなく、Hermes Agentをグローバルに公開することが可能になります。",[434,2298,2299,2300,2303,2304,2306],{},"以前のガイド「",[480,2301,2302],{"href":375},"リモートのLinux VPSサーバー環境にHermes Agentを導入・デプロイして常時運用する方法","」に従って設定済みであれば、Hermes Agentはすでに24時間稼働しているはずです。従来のVPNの煩雑な管理に対処する代わりに、今回は",[440,2305,919],{},"クライアントを使用して、インターネット経由でHermes Agentをプライベートネットワークに公開します。",[429,2308,2309],{"id":2309},"アーキテクチャの理解",[434,2311,2312],{},"本構成で動作するコンポーネント：",[1148,2314,2315,2320],{},[476,2316,2317,2319],{},[440,2318,2295],{},": ルーティングルールとアクセス権限（ポリシー）を定義するCloudflare의ダッシュボードです。",[476,2321,2322,2324],{},[440,2323,919],{},": デバイス（VPS、ノートパソコン、スマートフォン）にインストールするクライアントアプリケーションです。プライベートネットワーク宛てのトラフィックを傍受し、安全にルーティングします。",[1143,2326,2327],{"id":2327},"前提条件",[473,2329,2330,2333],{},[476,2331,2332],{},"VPS上でHermes Agentが稼働していること。",[476,2334,2335],{},"無料のCloudflareアカウント。",[429,2337,2338],{"id":2338},"ステップバイステップガイド",[1143,2340,2342],{"id":2341},"ステップ-1-cloudflare-zero-trustのセットアップ","ステップ 1: Cloudflare Zero Trustのセットアップ",[1148,2344,2345,2353,2360,2371,2378,2385],{},[476,2346,2347,2352],{},[480,2348,2351],{"href":2349,"rel":2350},"https:\u002F\u002Fdash.cloudflare.com\u002F",[484],"Cloudflare ダッシュボード","にログインします。",[476,2354,2355,2356],{},"左側のメニューから「Zero Trust」をクリックします。\n",[879,2357],{"alt":2358,"src":2359},"Zero Trustオプションが表示されたCloudflareダッシュボードの左サイドバーナビゲーションメニュー","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-left-menu.webp",[476,2361,2362,2363,2366,2367],{},"初めて利用する場合は、プランの選択（このセットアップには無料プランで十分です）とチーム名の設定（例：",[468,2364,2365],{},"ai-team","）を求められます。\n",[879,2368],{"alt":2369,"src":2370},"初回設定のCloudflare Zero Trustアカウントの作成とチームの命名処理","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-team-setup.webp",[476,2372,2373,2374],{},"「Access」をクリックし、「Policies」を選択して、ネットワークへのアクセス権を持つユーザーを定義するアクセスポリシーを作成します。\n",[879,2375],{"alt":2376,"src":2377},"新しく設定されたアクセス規則を表示しているCloudflare Zero Trustアクセス権限ポリシーページ","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-access-policies-page.webp",[476,2379,2380,2381],{},"「Create new policy」をクリックします。\n",[879,2382],{"alt":2383,"src":2384},"Cloudflare Access policies page showing no policies added and a button to create a new policy.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-no-policies-create-button.png",[476,2386,2387,2388],{},"「Emails」を選択し、「Policy rules」の下にあなたのメールアドレスを入力します。\n",[879,2389],{"alt":2390,"src":2391},"Cloudflare Access policy rule configuration screen with an email address specified as the inclusion criteria.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-policy-rule-email.png",[1143,2393,2395],{"id":2394},"ステップ-2-vpsへのcloudflare-warpクライアントのセットアップ","ステップ 2: VPSへのCloudflare WARPクライアントのセットアップ",[1148,2397,2398,2408,2414,2421,2424,2439,2442,2524],{},[476,2399,2400,2401,829,2404,2407],{},"VPSのターミナルで ",[468,2402,2403],{},"sudo apt update",[468,2405,2406],{},"sudo apt install cloudflare-warp"," を実行します。",[476,2409,836,2410,2413],{},[468,2411,2412],{},"warp-cli registration new \u003CTEAM-NAME>"," を実行すると、URLが出力されます。",[476,2415,2416,2417,2420],{},"出力されたURL（例：",[468,2418,2419],{},"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fwarp","）をコピーし、ブラウザに貼り付けて認証を行います。",[476,2422,2423],{},"ステップ1のポリシー設定でメール認証を使用したため、メールアドレスを入力して認証を進めます。",[476,2425,2426,2427,2430,2431,2434,2435,2438],{},"ブラウザに「",[440,2428,2429],{},"Success","」ページが表示されたら、青い「",[440,2432,2433],{},"Open Cloudflare WARP","」ボタンを右クリックし、「",[440,2436,2437],{},"検証 (Inspect)","」を選択します。",[476,2440,2441],{},"ボタンのリンク内に表示されている長いトークンをコピーします。",[476,2443,2400,2444,2447,2448,2450,2451],{},[468,2445,2446],{},"warp-cli --accept-tos registration token \"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fauth?token=\u003Ccopied_token>\""," を実行し、VPSをCloudflare Zero Trustに接続します。",[876,2449],{},"Ubuntu 26で「Error: Failed to communicate with the WARP API」が発生した場合は、次のコマンドを実行します。",[493,2452,2456],{"className":2453,"code":2454,"language":2455,"meta":424,"style":424},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","sudo systemctl restart warp-svc.service\n\n# Check status\nsudo systemctl status warp-svc.service\n\n# Run the warp-cli registration token again\nwarp-cli --accept-tos registration token   \"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fauth?token=\u003Ccopied_token>\"\n","bash",[468,2457,2458,2472,2476,2482,2493,2497,2502],{"__ignoreMap":424},[501,2459,2460,2463,2466,2469],{"class":503,"line":504},[501,2461,2462],{"class":1057},"sudo",[501,2464,2465],{"class":1071}," systemctl",[501,2467,2468],{"class":1071}," restart",[501,2470,2471],{"class":1071}," warp-svc.service\n",[501,2473,2474],{"class":503,"line":510},[501,2475,1091],{"emptyLinePlaceholder":998},[501,2477,2478],{"class":503,"line":516},[501,2479,2481],{"class":2480},"sHwdD","# Check status\n",[501,2483,2484,2486,2488,2491],{"class":503,"line":522},[501,2485,2462],{"class":1057},[501,2487,2465],{"class":1071},[501,2489,2490],{"class":1071}," status",[501,2492,2471],{"class":1071},[501,2494,2495],{"class":503,"line":528},[501,2496,1091],{"emptyLinePlaceholder":998},[501,2498,2499],{"class":503,"line":534},[501,2500,2501],{"class":2480},"# Run the warp-cli registration token again\n",[501,2503,2504,2507,2510,2513,2516,2519,2522],{"class":503,"line":540},[501,2505,2506],{"class":1057},"warp-cli",[501,2508,2509],{"class":1071}," --accept-tos",[501,2511,2512],{"class":1071}," registration",[501,2514,2515],{"class":1071}," token",[501,2517,2518],{"class":1067},"   \"",[501,2520,2521],{"class":1071},"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fauth?token=\u003Ccopied_token>",[501,2523,1752],{"class":1067},[476,2525,2526,2527],{},"Cloudflare Zero Trustダッシュボードに戻り、「Devices」をクリックします。VPSデバイスが表示されているはずです。\n",[879,2528],{"alt":2529,"src":2530},"Linux VPSが正常に接続されていることを確認するZero Trustデバイスダッシュボード","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-devices-vps-connected.webp",[1143,2532,2534],{"id":2533},"ステップ-3-トラフィックのルーティング設定","ステップ 3: トラフィックのルーティング設定",[1148,2536,2537,2544,2551,2558],{},[476,2538,2539,2540],{},"Devicesダッシュボードで、VPSのプロファイルをクリックします。\n",[879,2541],{"alt":2542,"src":2543},"登録されたVPSデバイスの詳細と分割トンネル設定へのアクセス画面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-device-profile.webp",[476,2545,2546,2547],{},"下にスクロールして「Split Tunnels」セクションを見つけます。\n",[879,2548],{"alt":2549,"src":2550},"VPSプロフィール設定項目内のSplit Tunnels分割トンネルセクション","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-split-tunnels-section.webp",[476,2552,2553,2554],{},"「Manage」ボタンをクリックし、以下のように設定を構成します。必要に応じてIPアドレスを置き換えてください。\n",[879,2555],{"alt":2556,"src":2557},"Cloudflare設定での分割トンネルIPアドレスとホスト名の除外ルールの管理設定","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-manage-split-tunnels.webp",[476,2559,2560,829,2563,2566],{},[468,2561,2562],{},"address",[468,2564,2565],{},"host"," を公開することで、トラフィックが同じプライベートネットワーク経由でサービスにルーティングされるようになります。",[1143,2568,2570],{"id":2569},"ステップ-4-vpsでのファイアウォール設定","ステップ 4: VPSでのファイアウォール設定",[434,2572,2573],{},"ファイアウォールを有効にして、「100.96.0.0\u002F12」サブネットのみを許可し、他のすべてのパブリックな受信アクセスをブロックします。",[493,2575,2577],{"className":2453,"code":2576,"language":2455,"meta":424,"style":424},"sudo ufw enable \nsudo ufw default allow outgoing \nsudo ufw default deny incoming\nsudo ufw allow in from 100.96.0.0\u002F12\n",[468,2578,2579,2592,2609,2623],{"__ignoreMap":424},[501,2580,2581,2583,2586,2589],{"class":503,"line":504},[501,2582,2462],{"class":1057},[501,2584,2585],{"class":1071}," ufw",[501,2587,2588],{"class":1071}," enable",[501,2590,2591],{"class":1666}," \n",[501,2593,2594,2596,2598,2601,2604,2607],{"class":503,"line":510},[501,2595,2462],{"class":1057},[501,2597,2585],{"class":1071},[501,2599,2600],{"class":1071}," default",[501,2602,2603],{"class":1071}," allow",[501,2605,2606],{"class":1071}," outgoing",[501,2608,2591],{"class":1666},[501,2610,2611,2613,2615,2617,2620],{"class":503,"line":516},[501,2612,2462],{"class":1057},[501,2614,2585],{"class":1071},[501,2616,2600],{"class":1071},[501,2618,2619],{"class":1071}," deny",[501,2621,2622],{"class":1071}," incoming\n",[501,2624,2625,2627,2629,2631,2634,2637],{"class":503,"line":522},[501,2626,2462],{"class":1057},[501,2628,2585],{"class":1071},[501,2630,2603],{"class":1071},[501,2632,2633],{"class":1071}," in",[501,2635,2636],{"class":1071}," from",[501,2638,2639],{"class":1071}," 100.96.0.0\u002F12\n",[434,2641,2642],{},"ローカルサービスが中断されないよう、ループバックトラフィックを許可します：",[493,2644,2646],{"className":2453,"code":2645,"language":2455,"meta":424,"style":424},"sudo ufw allow in on lo\nsudo ufw allow out on lo\n",[468,2647,2648,2664],{"__ignoreMap":424},[501,2649,2650,2652,2654,2656,2658,2661],{"class":503,"line":504},[501,2651,2462],{"class":1057},[501,2653,2585],{"class":1071},[501,2655,2603],{"class":1071},[501,2657,2633],{"class":1071},[501,2659,2660],{"class":1071}," on",[501,2662,2663],{"class":1071}," lo\n",[501,2665,2666,2668,2670,2672,2675,2677],{"class":503,"line":510},[501,2667,2462],{"class":1057},[501,2669,2585],{"class":1071},[501,2671,2603],{"class":1071},[501,2673,2674],{"class":1071}," out",[501,2676,2660],{"class":1071},[501,2678,2663],{"class":1071},[434,2680,2681],{},"ファイアウォールをリロードし、ステータスを確認します：",[493,2683,2685],{"className":2453,"code":2684,"language":2455,"meta":424,"style":424},"sudo ufw reload \nsudo ufw status verbose\n",[468,2686,2687,2698],{"__ignoreMap":424},[501,2688,2689,2691,2693,2696],{"class":503,"line":504},[501,2690,2462],{"class":1057},[501,2692,2585],{"class":1071},[501,2694,2695],{"class":1071}," reload",[501,2697,2591],{"class":1666},[501,2699,2700,2702,2704,2706],{"class":503,"line":510},[501,2701,2462],{"class":1057},[501,2703,2585],{"class":1071},[501,2705,2490],{"class":1071},[501,2707,2708],{"class":1071}," verbose\n",[1143,2710,2712],{"id":2711},"ステップ-5-hermes-agentをプライベートネットワークに公開する","ステップ 5: Hermes Agentをプライベートネットワークに公開する",[434,2714,2715,2718,2719,2722],{},[440,2716,2717],{},"Hermes Agent Web Dashboard","をプライベートネットワークに公開し、デフォルトの認証プロバイダである",[440,2720,2721],{},"Nous Research","を使用します。",[2073,2724,2725],{"id":2725},"認証プロバイダのセットアップ",[1148,2727,2728,2736,2743,2750,2757],{},[476,2729,2730,2735],{},[480,2731,2734],{"href":2732,"rel":2733},"https:\u002F\u002Fportal.nousresearch.com",[484],"portal.nousresearch.com"," にアクセスし、アカウントを登録します。",[476,2737,2738,2739],{},"「Local Dashboards」を選択します。\n",[879,2740],{"alt":2741,"src":2742},"Nous ResearchポータルでのLocal Dashboardsローカルダッシュボードオプションの選択画面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fnous-portal-local-dashboards-selection.webp",[476,2744,2745,2746],{},"「Register Dashboard」をクリックします。\n",[879,2747],{"alt":2748,"src":2749},"新しいダッシュボード項目を作成するためのRegister Dashboardボタンのクリック操作","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fnous-portal-register-dashboard.webp",[476,2751,2752,2753],{},"「Dashboard redirect URI」にVPSのプライベートネットワークIPアドレスを入力し、「Save」をクリックします。\n",[879,2754],{"alt":2755,"src":2756},"Nous ResearchポータルにおけるリダイレクトURIとしてのプライベートIPアドレスの登録処理","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fnous-portal-register-redirect-uri.webp",[476,2758,2759,2760,2763],{},"「OAuth client ID」をコピーし、",[468,2761,2762],{},"config.yaml"," ファイルに貼り付けます：",[493,2765,2767],{"className":1048,"code":2766,"language":1050,"meta":424,"style":424},"dashboard:\n  theme: default\n  show_token_analytics: false\n  oauth:\n    client_id: agent:cmq02x7ha0002jk0ba3kfnb\n    portal_url: https:\u002F\u002Fportal.nousresearch.com\n  basic_auth:\n    username: ''\n    password_hash: ''\n",[468,2768,2769,2777,2787,2798,2805,2815,2825,2832,2842],{"__ignoreMap":424},[501,2770,2771,2774],{"class":503,"line":504},[501,2772,2773],{"class":1063},"dashboard",[501,2775,2776],{"class":1067},":\n",[501,2778,2779,2782,2784],{"class":503,"line":510},[501,2780,2781],{"class":1063},"  theme",[501,2783,1068],{"class":1067},[501,2785,2786],{"class":1071}," default\n",[501,2788,2789,2792,2794],{"class":503,"line":516},[501,2790,2791],{"class":1063},"  show_token_analytics",[501,2793,1068],{"class":1067},[501,2795,2797],{"class":2796},"sfNiH"," false\n",[501,2799,2800,2803],{"class":503,"line":522},[501,2801,2802],{"class":1063},"  oauth",[501,2804,2776],{"class":1067},[501,2806,2807,2810,2812],{"class":503,"line":528},[501,2808,2809],{"class":1063},"    client_id",[501,2811,1068],{"class":1067},[501,2813,2814],{"class":1071}," agent:cmq02x7ha0002jk0ba3kfnb\n",[501,2816,2817,2820,2822],{"class":503,"line":534},[501,2818,2819],{"class":1063},"    portal_url",[501,2821,1068],{"class":1067},[501,2823,2824],{"class":1071}," https:\u002F\u002Fportal.nousresearch.com\n",[501,2826,2827,2830],{"class":503,"line":540},[501,2828,2829],{"class":1063},"  basic_auth",[501,2831,2776],{"class":1067},[501,2833,2834,2837,2839],{"class":503,"line":546},[501,2835,2836],{"class":1063},"    username",[501,2838,1068],{"class":1067},[501,2840,2841],{"class":1067}," ''\n",[501,2843,2844,2847,2849],{"class":503,"line":552},[501,2845,2846],{"class":1063},"    password_hash",[501,2848,1068],{"class":1067},[501,2850,2841],{"class":1067},[2073,2852,2854],{"id":2853},"hermes-dashboardを自動起動するためのsystemd設定","Hermes Dashboardを自動起動するためのSystemd設定",[1148,2856,2857],{},[476,2858,2859],{},"サービスファイルを作成します：",[493,2861,2863],{"className":1785,"code":2862,"language":1787,"meta":424,"style":424},"sudo nano \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-dashboard.service\n",[468,2864,2865],{"__ignoreMap":424},[501,2866,2867,2869,2872],{"class":503,"line":504},[501,2868,2462],{"class":1057},[501,2870,2871],{"class":1071}," nano",[501,2873,2874],{"class":1071}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-dashboard.service\n",[1148,2876,2877],{"start":510},[476,2878,2879,2880,2883],{},"以下の構成を貼り付けます。必ず ",[468,2881,2882],{},"--host 0.0.0.0"," がコマンドに含まれていることを確認してください：",[493,2885,2889],{"className":2886,"code":2887,"language":2888,"meta":424,"style":424},"language-ini shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[Unit]\nDescription=Hermes Dashboard\nAfter=network.target\n\n[Service]\nUser=hermes\nWorkingDirectory=\u002Fhome\u002Fhermes\nExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes dashboard --host 0.0.0.0\nRestart=always\nRestartSec=10\nEnvironment=PATH=\u002Fhome\u002Fhermes\u002F.local\u002Fbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin\n\n[Install]\nWantedBy=multi-user.target\n","ini",[468,2890,2891,2896,2901,2906,2910,2915,2920,2925,2930,2935,2940,2945,2949,2954],{"__ignoreMap":424},[501,2892,2893],{"class":503,"line":504},[501,2894,2895],{},"[Unit]\n",[501,2897,2898],{"class":503,"line":510},[501,2899,2900],{},"Description=Hermes Dashboard\n",[501,2902,2903],{"class":503,"line":516},[501,2904,2905],{},"After=network.target\n",[501,2907,2908],{"class":503,"line":522},[501,2909,1091],{"emptyLinePlaceholder":998},[501,2911,2912],{"class":503,"line":528},[501,2913,2914],{},"[Service]\n",[501,2916,2917],{"class":503,"line":534},[501,2918,2919],{},"User=hermes\n",[501,2921,2922],{"class":503,"line":540},[501,2923,2924],{},"WorkingDirectory=\u002Fhome\u002Fhermes\n",[501,2926,2927],{"class":503,"line":546},[501,2928,2929],{},"ExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes dashboard --host 0.0.0.0\n",[501,2931,2932],{"class":503,"line":552},[501,2933,2934],{},"Restart=always\n",[501,2936,2937],{"class":503,"line":558},[501,2938,2939],{},"RestartSec=10\n",[501,2941,2942],{"class":503,"line":564},[501,2943,2944],{},"Environment=PATH=\u002Fhome\u002Fhermes\u002F.local\u002Fbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin\n",[501,2946,2947],{"class":503,"line":570},[501,2948,1091],{"emptyLinePlaceholder":998},[501,2950,2951],{"class":503,"line":576},[501,2952,2953],{},"[Install]\n",[501,2955,2956],{"class":503,"line":582},[501,2957,2958],{},"WantedBy=multi-user.target\n",[1148,2960,2961],{"start":516},[476,2962,2963],{},"サービスを有効化し、起動します：",[493,2965,2967],{"className":1785,"code":2966,"language":1787,"meta":424,"style":424},"sudo systemctl daemon-reload\nsudo systemctl enable hermes-dashboard\nsudo systemctl start hermes-dashboard\nsudo systemctl status hermes-dashboard\n",[468,2968,2969,2978,2989,3000],{"__ignoreMap":424},[501,2970,2971,2973,2975],{"class":503,"line":504},[501,2972,2462],{"class":1057},[501,2974,2465],{"class":1071},[501,2976,2977],{"class":1071}," daemon-reload\n",[501,2979,2980,2982,2984,2986],{"class":503,"line":510},[501,2981,2462],{"class":1057},[501,2983,2465],{"class":1071},[501,2985,2588],{"class":1071},[501,2987,2988],{"class":1071}," hermes-dashboard\n",[501,2990,2991,2993,2995,2998],{"class":503,"line":516},[501,2992,2462],{"class":1057},[501,2994,2465],{"class":1071},[501,2996,2997],{"class":1071}," start",[501,2999,2988],{"class":1071},[501,3001,3002,3004,3006,3008],{"class":503,"line":522},[501,3003,2462],{"class":1057},[501,3005,2465],{"class":1071},[501,3007,2490],{"class":1071},[501,3009,2988],{"class":1071},[1143,3011,3013],{"id":3012},"ステップ-6-デスクトップにcloudflare-warpクライアントをインストールする","ステップ 6: デスクトップにCloudflare WARPクライアントをインストールする",[1148,3015,3016,3024,3027,3034,3041,3048],{},[476,3017,3018,3023],{},[480,3019,3022],{"href":3020,"rel":3021},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fwarp-client\u002Fget-started\u002F",[484],"Cloudflareのポータル","からCloudflare WARPクライアントをダウンロードします。",[476,3025,3026],{},"インストール後、Cloudflare WARPクライアントを開いて起動します。",[476,3028,3029,3030],{},"画面の指示に従ってログインします。\n",[879,3031],{"alt":3032,"src":3033},"デスクトップ端末に表示されたCloudflare WARPクライアントのログインプロンプト画面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-warp-desktop-login-prompt.webp",[476,3035,3036,3037],{},"ログインに成功すると、「Success」ページが表示されます。\n",[879,3038],{"alt":3039,"src":3040},"デスクトップでのCloudflare Zero Trustログイン成功後の認証完了通知用ウェブページ","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-warp-desktop-login-success.webp",[476,3042,3043,3044],{},"WARPクライアントがZero Trustチームに接続されていることが表示されるはずです。\n",[879,3045],{"alt":3046,"src":3047},"Zero Trustプライベートネットワークへのアクティブ接続を証明するデスクトップ用WARPクライアント","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-warp-desktop-client-connected.webp",[476,3049,3050,3051,3054,3055],{},"Webブラウザを開き、プライベートIP（例：",[468,3052,3053],{},"100.96.0.3","）を入力します。Hermes Web Dashboardが正常に読み込まれるはずです。\n",[879,3056],{"alt":3057,"src":3058},"デスクトップのブラウザからアクセスしたプライベートなHermes Agentウェブダッシュボード","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fhermes-agent-dashboard-desktop-view.webp",[3060,3061,3062],"blockquote",{},[434,3063,3064,3067,3068,3072],{},[440,3065,3066],{},"macOSユーザー向けのヒント:"," 複数のCloudflareアカウントにアクセスするためにWARPクライアントを使用している場合は、「",[440,3069,3070],{},[480,3071,423],{"href":399},"」のクイックガイドをチェックして、アカウント間のシームレスな切り替えに役立ててください。",[1143,3074,3076],{"id":3075},"ステップ-7-iosデバイスにcloudflare-warpクライアントをインストールする","ステップ 7: iOSデバイスにCloudflare WARPクライアントをインストールする",[1148,3078,3079,3086,3094,3102,3110],{},[476,3080,3081,3082,3085],{},"App Storeから",[440,3083,3084],{},"Cloudflare One","をインストールします。",[476,3087,3088,3089],{},"Cloudflare Oneアプリを開き、画面の指示に従ってチーム名を入力します。\n",[879,3090],{"alt":3091,"src":3092,"width":3093},"iOSデバイスのCloudflare OneアプリにおけるCloudflare Zero Trustチーム名の入力プロンプト","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-one-ios-team-name-prompt.webp",239,[476,3095,3096,3097],{},"上記のポリシー設定で登録したのと同じメールアドレスを使用してログインします。\n",[879,3098],{"alt":3099,"src":3100,"width":3101},"iOSに表示されたCloudflare Zero Trustのログイン用電子メール認証プロンプト画面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-one-ios-email-login.webp",229,[476,3103,3104,3105],{},"接続が完了すると、次のようになります：\n",[879,3106],{"alt":3107,"src":3108,"width":3109},"iOSモバイル端末の画面上でアクティブな接続状態を通知しているCloudflare Oneアプリ","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-one-ios-client-connected.webp",322,[476,3111,3112,3113,3115,3116],{},"モバイルデバイスのWebブラウザを開き、プライベートIP ",[468,3114,3053],{}," を入力してHermes Web Dashboardにアクセスします。\n",[879,3117],{"alt":3118,"src":3119,"width":3120},"スマートフォンのモバイルブラウザ上にロードされたHermes Agentウェブダッシュボードの表示","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fhermes-agent-dashboard-mobile-view.webp",345,[429,3122,2189],{"id":2189},[434,3124,3125,3126,3128,3129,3132],{},"ID（アイデンティティ）ポリシーを管理する",[440,3127,2295],{},"と、暗号化されたトンネル経由でトラフィックをルーティングする",[440,3130,3131],{},"WARP","クライアントを組み合わせることで、世界中のどこからでもお使いのデバイスからHermes Agentへ安全にアクセスできるようになりました。このセットアップにより、完全なリモート環境でプライベートなAIインフラを構築・運用するための、安全で堅牢な基盤が整いました。",[980,3134,3135],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":424,"searchDepth":510,"depth":516,"links":3137},[3138,3141,3153],{"id":2309,"depth":510,"text":2309,"children":3139},[3140],{"id":2327,"depth":516,"text":2327},{"id":2338,"depth":510,"text":2338,"children":3142},[3143,3144,3145,3146,3147,3151,3152],{"id":2341,"depth":516,"text":2342},{"id":2394,"depth":516,"text":2395},{"id":2533,"depth":516,"text":2534},{"id":2569,"depth":516,"text":2570},{"id":2711,"depth":516,"text":2712,"children":3148},[3149,3150],{"id":2725,"depth":522,"text":2725},{"id":2853,"depth":522,"text":2854},{"id":3012,"depth":516,"text":3013},{"id":3075,"depth":516,"text":3076},{"id":2189,"depth":510,"text":2189},[1402,991],"2026-07-09","ファイアウォールのインバウンドポートを開くことなく、Cloudflare WARPとZero Trustを使用してグローバルかつ安全にHermes Agentへアクセスし、プライベートネットワークに公開する方法を詳しく解説します。","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002FJA-Exposing-Hermes-Agent-to-Private-Network-Using-Cloudflare-WARP.webp","Cloudflare Zero TrustとWARPトンネルを使用してHermes Agentをプライベートネットワークに安全に公開",{"schemaOrg":3160,"robots":1003,"sitemap":3192},[3161],{"@type":1002,"headline":2280,"description":3156,"name":2280,"image":3157,"step":3162},[3163,3168,3172,3176,3180,3184,3188],{"@type":3164,"name":3165,"text":3166,"url":3167,"image":2359},"HowToStep","Cloudflare Zero Trustのセットアップ","Cloudflare ダッシュボードにログインします。 左側のメニューから「Zero Trust」をクリックします。 初めて利用する場合は、プランの選択（このセットアップには無料プランで十分です）とチーム名の設定（例：ai-team）を求められます。 「Access」をクリックし、「Policies」を選択して、ネットワークへのアクセス権を持つユーザーを定義するアクセスポリシーを作成します。 「Create new policy」をクリックします。 「Emails」を選択し、「Policy ru","#step-1",{"@type":3164,"name":3169,"text":3170,"url":3171,"image":2530},"VPSへのCloudflare WARPクライアントのセットアップ","VPSのターミナルで sudo apt update と sudo apt install cloudflare-warp を実行します。 ターミナルで warp-cli registration new \u003CTEAM-NAME> を実行すると、URLが出力されます。 出力されたURL（例：https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fwarp）をコピーし、ブラウザに貼り付けて認証を行います。 ステップ1のポリシー設定でメール認証を使用したため、メールアドレスを入力して認","#step-2",{"@type":3164,"name":3173,"text":3174,"url":3175,"image":2543},"トラフィックのルーティング設定","Devicesダッシュボードで、VPSのプロファイルをクリックします。 下にスクロールして「Split Tunnels」セクションを見つけます。 「Manage」ボタンをクリックし、以下のように設定を構成します。必要に応じてIPアドレスを置き換えてください。 address と host を公開することで、トラフィックが同じプライベートネットワーク経由でサービスにルーティングされるようになります。","#step-3",{"@type":3164,"name":3177,"text":3178,"url":3179},"VPSでのファイアウォール設定","ファイアウォールを有効にして、「100.96.0.0\u002F12」サブネットのみを許可し、他のすべてのパブリックな受信アクセスをブロックします。 bash ローカルサービスが中断されないよう、ループバックトラフィックを許可します： bash ファイアウォールをリロードし、ステータスを確認します： bash","#step-4",{"@type":3164,"name":3181,"text":3182,"url":3183},"Hermes Agentをプライベートネットワークに公開する","Hermes Agent Web Dashboardをプライベートネットワークに公開し、デフォルトの認証プロバイダであるNous Researchを使用します。","#step-5",{"@type":3164,"name":3185,"text":3186,"url":3187,"image":3033},"デスクトップにCloudflare WARPクライアントをインストールする","CloudflareのポータルからCloudflare WARPクライアントをダウンロードします。 インストール後、Cloudflare WARPクライアントを開いて起動します。 画面の指示に従ってログインします。 ログインに成功すると、「Success」ページが表示されます。 WARPクライアントがZero Trustチームに接続されていることが表示されるはずです。 Webブラウザを開き、プライベートIP（例：100.96.0.3）を入力します。Hermes Web Dashboardが正常に","#step-6",{"@type":3164,"name":3189,"text":3190,"url":3191,"image":3092},"iOSデバイスにCloudflare WARPクライアントをインストールする","App StoreからCloudflare Oneをインストールします。 Cloudflare Oneアプリを開き、画面の指示に従ってチーム名を入力します。 上記のポリシー設定で登録したのと同じメールアドレスを使用してログインします。 接続が完了すると、次のようになります： モバイルデバイスのWebブラウザを開き、プライベートIP 100.96.0.3 を入力してHermes Web Dashboardにアクセスします。","#step-7",{"lastmod":3193},"2026-09-28",{"title":3195,"description":3156,"ogTitle":2280,"ogDescription":3156,"twitterTitle":2280,"twitterDescription":3156},"Cloudflare Zero TrustによるHermes Agentへの安全なアクセス","ja\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",[919,1010,2288,3198,3199],"プライベートネットワーク","チュートリアル","i0kMFCbckmQif9X-O10srGArjMa6VemzcCDaqwHXHVY",{"id":1420,"title":1421,"author":1011,"body":1422,"category":2258,"date":2259,"description":2260,"extension":995,"image":2261,"imageAlt":2262,"isPublished":998,"meta":2263,"minRead":722,"navigation":998,"path":415,"seo":2269,"stem":2270,"tags":2271,"updatedAt":1011,"__hash__":2276},{"id":3203,"title":3204,"author":424,"body":3205,"category":4614,"date":4616,"description":4617,"extension":995,"image":4618,"imageAlt":4619,"isPublished":998,"meta":4620,"minRead":540,"navigation":998,"path":403,"seo":4627,"stem":4629,"tags":4630,"updatedAt":1011,"__hash__":4633},"article\u002Fja\u002Farticle\u002Fsync-obsidian-across-devices.md","自ホスト型SynchとIgnisを導入しObsidian保管庫を複数デバイス間で安全に同期する方法",{"type":426,"value":3206,"toc":4592},[3207,3210,3215,3224,3233,3248,3253,3262,3266,3271,3285,3302,3305,3309,3312,3319,3324,3328,3332,3390,3397,3429,3433,3441,3449,3460,3518,3521,3540,3547,3559,3563,3567,3574,3579,3590,3607,3612,3624,3629,3635,3640,3655,3658,3663,3666,3671,3675,3680,3695,3699,3713,3722,3726,3731,3735,3745,3778,3782,3789,3928,3961,3966,3987,3993,3998,4001,4012,4083,4087,4092,4129,4259,4266,4272,4278,4284,4287,4293,4300,4314,4325,4332,4338,4345,4471,4477,4482,4485,4490,4493,4497,4503,4508,4514,4525,4534,4537,4548,4554,4560,4563,4566,4589],[434,3208,3209],{},"Obsidianは、ローカルファースト（ローカル優先）のナレッジ管理アプリです。すべてのノートはデバイス上のMarkdownファイルとして保存され、完全にユーザー自身の管理下に置かれます。しかし、ノートパソコン、スマートフォン、その他のデバイスで同じ保管庫（Vault）を共有したかったり、外出先からウェブブラウザ経由でアクセスしたかったりすることも少なくありません。",[879,3211],{"src":3212,"alt":3213,"style":3214},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-multi-device-sync-illustration.webp","複数デバイス間で同期されたObsidian保管庫のイラスト","max-width: 667px; width: 100%; height: auto;",[434,3216,3217,3218,3223],{},"Obsidian向けにはいくつかの同期ソリューションが提供されていますが、コンフリクト（衝突）の処理、暗号化、またはデータの所有権（データ主権）などの面で、何らかのトレードオフを伴うのが一般的です。",[480,3219,3222],{"href":3220,"rel":3221},"https:\u002F\u002Fgithub.com\u002Fhjinco\u002Fsynch",[484],"Synch","は、セルフホスト（自ホスト）サーバーを用いて、エンドツーエンド（端対端）の暗号化と自動コンフリクト処理を両立させながらObsidianの保管庫を同期できるオープンソースのアプリケーションです。",[434,3225,3226,3227,3232],{},"Obsidianのローカルファーストなアプローチはほとんどの場面で完璧に機能しますが、状況によってはウェブブラウザからリモートで保管庫にアクセスしたい場合もあります。",[480,3228,3231],{"href":3229,"rel":3230},"https:\u002F\u002Fgithub.com\u002FNystik-gh\u002Fignis",[484],"Ignis","は、オープンソースのウェブクライアントであり、ウェブブラウザ上でObsidianをデスクトップアプリに近い形式で実行できるため、場所を問わず保管庫の閲覧・編集が可能です。",[434,3234,3235,3236,3239,3240,2292,3242,3244,3245,3247],{},"このガイドでは、",[440,3237,3238],{},"VPS","（仮想専用サーバー）上に",[440,3241,3222],{},[440,3243,3231],{},"をセットアップし、これらを公開インターネットにさらすのではなく、**",[480,3246,2295],{"href":363},"**のプライベートネットワーク内で安全にホストする手順を紹介します。",[879,3249],{"src":3250,"alt":3251,"style":3252},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-sync-cloudflare-zero-trust-architecture.webp","Cloudflare Zero Trustを使用したObsidian同期のアーキテクチャ図","max-width: 671px; width: 100%; height: auto;",[3254,3255],"article-card",{"description":3256,"image":3257,"image-alt":3258,"label":3259,"min-read":3260,"title":3261,"to":363},"インバウンド用のファイアウォールポートを開放することなく、Cloudflare WARPとZero Trustを用いて、Hermesエージェントをグローバルから安全に公開・アクセスする方法を解説します。","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002FEN-Exposing-Hermes-Agent-to-Private-Network-Using-Cloudflare-WARP.webp","Cloudflare Zero TrustとWARPトンネルを使用してHermesエージェントをプライベートネットワークに安全に公開する様子","関連記事","8","Cloudflare WARPでHermesエージェントをプライベートに公開する方法",[429,3263,3265],{"id":3264},"synchによるobsidian保管庫の安全な同期","SynchによるObsidian保管庫の安全な同期",[434,3267,3268,3270],{},[440,3269,3222],{},"には以下の特徴があります：",[473,3272,3273,3276,3279,3282],{},[476,3274,3275],{},"変更が検出されると、即座に保管庫を同期",[476,3277,3278],{},"アップロード前に保管庫のデータを暗号化",[476,3280,3281],{},"バージョン履歴（履歴管理）からの復元が可能",[476,3283,3284],{},"自動コンフリクト処理を搭載",[434,3286,3287,3289,3290,3301],{},[440,3288,3222],{},"は、デバイス上でランダムな32バイトの",[440,3291,3292,3293,3300],{},"保管庫キー（Vault Key）",[440,3294,3295,3296,3299],{},"を生成し、これを用いてデータを暗号化します。リモート保管庫を作成する際に、",[440,3297,3298],{},"保管庫パスワード","を設定します。このパスワードは","保管庫キー","を保護するために使用され、サーバー上に安全に保管され、他のデバイスでロックを解除する際に必要となります。",[434,3303,3304],{},"コンフリクトの解決は、サーバー上ではなく、お使いのクライアントデバイス上で行われる点に注意してください。2つのデバイスが同じノートを同時に編集した場合、サーバーは最初に到着したバージョンを保持し、もう一方のデバイスを「古い（バージョン不一致）」状態としてマークします。古い状態のデバイスは、最終的なマージ後のノートをアップロードする前に、ローカルの変更内容に新しいバージョンを自動的にマージ（統合）します。",[1143,3306,3308],{"id":3307},"vpsへのsynchの導入","VPSへのSynchの導入",[2073,3310,3311],{"id":3311},"ドメイン名の作成",[434,3313,3314,3315,3318],{},"CloudflareでAレコードを作成し、プロキシステータスを ",[440,3316,3317],{},"「DNSのみ（DNS only）」","（CloudflareのCDNをバイパスする設定）に設定します。",[879,3320],{"src":3321,"alt":3322,"style":3323},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fcloudflare-dns-a-record-synch-server.webp","CloudflareでのSynchサーバー用DNS Aレコードの構成","max-width: 538px; width: 100%; height: auto;",[2073,3325,3327],{"id":3326},"ubuntu上でdockerを用いたsynchのインストール","Ubuntu上でDockerを用いたSynchのインストール",[3329,3330,3331],"h5",{"id":3331},"リポジトリのクローン",[493,3333,3335],{"className":2453,"code":3334,"language":2455,"meta":424,"style":424},"git clone https:\u002F\u002Fgithub.com\u002Fhjinco\u002Fsynch.git       \n        \n# APIフォルダに移動\ncd synch\u002Fapps\u002Fapi\n        \n# 環境変数ファイルのサンプルをコピー\ncp .env.example .env\n",[468,3336,3337,3351,3356,3361,3370,3374,3379],{"__ignoreMap":424},[501,3338,3339,3342,3345,3348],{"class":503,"line":504},[501,3340,3341],{"class":1057},"git",[501,3343,3344],{"class":1071}," clone",[501,3346,3347],{"class":1071}," https:\u002F\u002Fgithub.com\u002Fhjinco\u002Fsynch.git",[501,3349,3350],{"class":1666},"       \n",[501,3352,3353],{"class":503,"line":510},[501,3354,3355],{"class":1666},"        \n",[501,3357,3358],{"class":503,"line":516},[501,3359,3360],{"class":2480},"# APIフォルダに移動\n",[501,3362,3363,3367],{"class":503,"line":522},[501,3364,3366],{"class":3365},"s2Zo4","cd",[501,3368,3369],{"class":1071}," synch\u002Fapps\u002Fapi\n",[501,3371,3372],{"class":503,"line":528},[501,3373,3355],{"class":1666},[501,3375,3376],{"class":503,"line":534},[501,3377,3378],{"class":2480},"# 環境変数ファイルのサンプルをコピー\n",[501,3380,3381,3384,3387],{"class":503,"line":540},[501,3382,3383],{"class":1057},"cp",[501,3385,3386],{"class":1071}," .env.example",[501,3388,3389],{"class":1071}," .env\n",[3329,3391,3393,3396],{"id":3392},"env-ファイルの設定",[468,3394,3395],{},".env"," ファイルの設定",[473,3398,3399,3405,3423],{},[476,3400,3401,3404],{},[468,3402,3403],{},"PUBLIC_URL=synch.pafor.me",": Synchサーバーの公開ドメイン名（前のステップで作成したドメイン名）を入力します。",[476,3406,3407,829,3410,3413,3414,3418,3419,3422],{},[468,3408,3409],{},"BETTER_AUTH_SECRET",[468,3411,3412],{},"SYNC_TOKEN_SECRET",": この",[480,3415,3417],{"href":3416},"\u002Fja\u002Ftools\u002Fsecret-key-hex","オンライン秘密鍵生成ツール","を使用するか、ターミナルで ",[468,3420,3421],{},"openssl rand -hex 32"," を2回実行して安全な鍵を生成します。",[476,3424,3425,3428],{},[468,3426,3427],{},"AUTH_ALLOWED_EMAILS",": アカウント作成とサインアップを許可するメールアドレスをカンマ区切りで指定します。",[3329,3430,3432],{"id":3431},"caddyfileへのドメインの追加","Caddyfileへのドメインの追加",[434,3434,3435,3436,3440],{},"Cloudflare DNSモジュールをCaddyに統合し、コンテナ内で起動する方法の詳細については、こちらの",[480,3437,3439],{"href":3438},"\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues#_4-enable-https-with-caddy","セルフホストBuzzに関する記事","をご参照ください。",[3254,3442],{"description":3443,"image":3444,"image-alt":3445,"label":3446,"min-read":3447,"title":3448,"to":3438},"Dockerコンテナ内のCaddyが、Cloudflare DNS認証チャレンジを用いてSSL\u002FTLS証明書を自動的に発行・更新するように構成する方法を学びます。","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002FEN-Self-Hosting-Buzz-As-The-Workspace-Where-AI-Agents-Become-Colleagues.webp","自己ホスト型ワークスペースにおいて、SSL\u002FTLS証明書の自動生成のためにCloudflare DNS APIトークンを使用してCaddyを構成する構成図","セルフホストガイド","12","Block製Buzzを自己ホスト：人とAIエージェントが自律的に協働する次世代共有ワークスペースの構築",[434,3450,3451,3452,3455,3456,3459],{},"Caddyfileに ",[468,3453,3454],{},"SYNCH_DOMAIN"," ディレクティブを追加し、ポート ",[468,3457,3458],{},"8787","（Synchコンテナが使用するポート）を指定します：",[493,3461,3463],{"className":1648,"code":3462,"language":1650,"meta":424,"style":424},"{\n  acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN}\n}\n\n{$SYNCH_DOMAIN} {\n  encode zstd gzip\n  reverse_proxy host.docker.internal:8787\n}\n",[468,3464,3465,3469,3477,3481,3485,3498,3503,3514],{"__ignoreMap":424},[501,3466,3467],{"class":503,"line":504},[501,3468,1670],{"class":1067},[501,3470,3471,3474],{"class":503,"line":510},[501,3472,3473],{"class":1666},"  acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN",[501,3475,3476],{"class":1067},"}\n",[501,3478,3479],{"class":503,"line":516},[501,3480,3476],{"class":1666},[501,3482,3483],{"class":503,"line":522},[501,3484,1091],{"emptyLinePlaceholder":998},[501,3486,3487,3490,3493,3496],{"class":503,"line":528},[501,3488,3489],{"class":1067},"{",[501,3491,3492],{"class":1666},"$SYNCH_DOMAIN",[501,3494,3495],{"class":1067},"}",[501,3497,1911],{"class":1067},[501,3499,3500],{"class":503,"line":534},[501,3501,3502],{"class":1666},"  encode zstd gzip\n",[501,3504,3505,3508,3510],{"class":503,"line":540},[501,3506,3507],{"class":1666},"  reverse_proxy host.docker.internal",[501,3509,1068],{"class":1067},[501,3511,3513],{"class":3512},"sbssI","8787\n",[501,3515,3516],{"class":503,"line":546},[501,3517,3476],{"class":1067},[434,3519,3520],{},"コンテナを起動します：",[493,3522,3524],{"className":2453,"code":3523,"language":2455,"meta":424,"style":424},"docker compose up -d\n",[468,3525,3526],{"__ignoreMap":424},[501,3527,3528,3531,3534,3537],{"class":503,"line":504},[501,3529,3530],{"class":1057},"docker",[501,3532,3533],{"class":1071}," compose",[501,3535,3536],{"class":1071}," up",[501,3538,3539],{"class":1071}," -d\n",[434,3541,3542,3543,3546],{},"次の ",[468,3544,3545],{},"curl"," コマンドを実行して、稼働状況を確認します：",[493,3548,3550],{"className":2453,"code":3549,"language":2455,"meta":424,"style":424},"curl https:\u002F\u002Fsynch.pafor.me\u002Fhealth\n",[468,3551,3552],{"__ignoreMap":424},[501,3553,3554,3556],{"class":503,"line":504},[501,3555,3545],{"class":1057},[501,3557,3558],{"class":1071}," https:\u002F\u002Fsynch.pafor.me\u002Fhealth\n",[1143,3560,3562],{"id":3561},"obsidianとsynchサーバーの接続","ObsidianとSynchサーバーの接続",[2073,3564,3566],{"id":3565},"obsidianへのsynchプラグインのインストール","ObsidianへのSynchプラグインのインストール",[434,3568,3569,3570,3573],{},"Obsidianの設定を開き、**「コミュニティプラグイン」",[440,3571,3572],{},"に移動して、","「閲覧（Browse）」**ボタンをクリックします：",[879,3575],{"src":3576,"alt":3577,"style":3578},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-community-plugins-browse.webp","Obsidian設定でのコミュニティプラグインの閲覧","max-width: 523px; width: 100%; height: auto;",[434,3580,3581,3582,3585,3586],{},"検索バーで ",[440,3583,3584],{},"「Synchrun」"," を探し、インストールします：\n",[879,3587],{"src":3588,"alt":3589,"style":3323},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-install-synchrun-plugin.webp","ObsidianへのSynchrunプラグインのインストール",[434,3591,3592,3594,3595,3598,3599,3606],{},[440,3593,3584],{}," のインストール完了後、プラグインの設定を開き、**「Use a self-hosted server（自ホストサーバーを使用）」",[440,3596,3597],{},"を有効にします。次に、","「Server URL」",[440,3600,3601,3602,3605],{},"フィールドに ",[468,3603,3604],{},"https:\u002F\u002Fsynch.pafor.me"," を入力し、","「Save」**をクリックします。",[879,3608],{"src":3609,"alt":3610,"style":3611},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-synchrun-plugin-settings-self-hosted.webp","Synchrunプラグイン設定でのセルフホストサーバーURLの構成","max-width: 525px; width: 100%; height: auto;",[434,3613,3614,3615,3618,3619,1641,3621,3623],{},"**「Account」**項目内にある ",[440,3616,3617],{},"「Sign in on this device（このデバイスでサインイン）」"," ボタンをクリックします。続いて、",[468,3620,3395],{},[468,3622,3427],{}," リストに指定したメールアドレスを使ってサインアップ（アカウント登録）を行います。完了後、以下の認証ページにリダイレクトされます：",[879,3625],{"src":3626,"alt":3627,"style":3628},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynchrun-account-authorization-page.webp","Synchrunのアカウント認証ページ","max-width: 494px; width: 100%; height: auto;",[434,3630,3631,3634],{},[440,3632,3633],{},"「Allow Obsidian sign-in（Obsidianへのサインインを許可）」"," ボタンをクリックします：",[879,3636],{"src":3637,"alt":3638,"style":3639},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynchrun-allow-obsidian-signin.webp","SynchのためのObsidianサインインの許可","max-width: 498px; width: 100%; height: auto;",[434,3641,3642,3645,3646,3649,3650],{},[440,3643,3644],{},"「Return to Obsidian（Obsidianに戻る）」"," ボタンをクリックし、次に ",[440,3647,3648],{},"「Create vault（保管庫の作成）」"," をクリックします：\n",[879,3651],{"src":3652,"alt":3653,"style":3654},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-synchrun-create-remote-vault.webp","Synchrunでの新しいリモート保管庫の作成","max-width: 496px; width: 100%; height: auto;",[434,3656,3657],{},"リモート保管庫の名前と安全なパスワードを入力して作成します。",[879,3659],{"src":3660,"alt":3661,"style":3662},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-synchrun-vault-password-setup.webp","Obsidianリモート保管庫の安全なパスワードの設定","max-width: 500px; width: 100%; height: auto;",[434,3664,3665],{},"これで自動的に同期処理が開始されます。お使いの保管庫の容量によって完了までにかかる時間は異なります。同期完了後、ストレージの総使用量が表示されます。",[879,3667],{"src":3668,"alt":3669,"style":3670},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-synchrun-sync-completed-storage.webp","使用中の合計ストレージを示すSynchrun同期完了画面","max-width: 508px; width: 100%; height: auto;",[429,3672,3674],{"id":3673},"ignisによるブラウザベースのobsidianアクセス","IgnisによるブラウザベースのObsidianアクセス",[434,3676,3677,3679],{},[440,3678,3231],{},"は、Obsidianが使用するElectron APIをWeb APIに置き換えることで、標準的なウェブブラウザ上で直接ObsidianのJavaScriptコードを実行可能にするツールです。すべてのMarkdownファイルと添付ファイルは、ホストサーバー上のファイルシステムに直接保存されます。",[434,3681,3682,3683,3688,3689,3694],{},"ただし、スタンドアロン型のObsidianデスクトップアプリと比較して、いくつかの制限事項が存在します。ブラウザ環境に直接対応する機能がないElectron APIやNode.js APIに依存する一部の機能やサードパーティ製プラグインは動作しません。詳細な互換性については、Ignis公式の ",[480,3684,3687],{"href":3685,"rel":3686},"https:\u002F\u002Fignis.thiefling.com\u002Fdocs\u002Fusing\u002Flimitations\u002F",[484],"Limitations（制限事項）"," および ",[480,3690,3693],{"href":3691,"rel":3692},"https:\u002F\u002Fignis.thiefling.com\u002Fdocs\u002Fusing\u002Fplugin-compatibility\u002F",[484],"Plugin compatibility（プラグイン互換性）"," ガイドをご参照ください。",[1143,3696,3698],{"id":3697},"ignisのセットアップ","Ignisのセットアップ",[434,3700,3701,3702,3704,3705,3708,3709,3712],{},"今回はDockerを使用し、VPS上に ",[440,3703,3231],{}," をインストールして、ローカルの ",[468,3706,3707],{},".\u002Fvaults"," フォルダにマウントします。この保管庫ディレクトリは、先ほど設定したリモート保管庫から最新のノートデータを取得するために、",[440,3710,3711],{},"Synch CLI","を用いてバックグラウンドで自動同期されます。",[434,3714,3715,3716,3718,3719,3721],{},"また、",[440,3717,3231],{},"には標準でユーザー認証機能が備わっていないため、外部からの不正アクセスを防ぐために、**",[480,3720,2295],{"href":363},"**のプライベートネットワークの背後に隠して安全を確保します。",[2073,3723,3725],{"id":3724},"dnsレコードの作成","DNSレコードの作成",[879,3727],{"src":3728,"alt":3729,"style":3730},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fcloudflare-dns-a-record-ignis.webp","CloudflareでのIgnis Webクライアント用DNS Aレコードの構成","max-width: 552px; width: 100%; height: auto;",[2073,3732,3734],{"id":3733},"caddyfileへのドメイン追加","Caddyfileへのドメイン追加",[434,3736,3737,3740,3741,3744],{},[468,3738,3739],{},"synch.pafor.me"," と同様に、Caddyfileに ",[468,3742,3743],{},"obsidian.pafor.me"," を追加します：",[493,3746,3748],{"className":1648,"code":3747,"language":1650,"meta":424,"style":424},"{$OBSIDIAN_DOMAIN} {\n  encode zstd gzip\n  reverse_proxy host.docker.internal:9898\n}\n",[468,3749,3750,3761,3765,3774],{"__ignoreMap":424},[501,3751,3752,3754,3757,3759],{"class":503,"line":504},[501,3753,3489],{"class":1067},[501,3755,3756],{"class":1666},"$OBSIDIAN_DOMAIN",[501,3758,3495],{"class":1067},[501,3760,1911],{"class":1067},[501,3762,3763],{"class":503,"line":510},[501,3764,3502],{"class":1666},[501,3766,3767,3769,3771],{"class":503,"line":516},[501,3768,3507],{"class":1666},[501,3770,1068],{"class":1067},[501,3772,3773],{"class":3512},"9898\n",[501,3775,3776],{"class":503,"line":522},[501,3777,3476],{"class":1067},[2073,3779,3781],{"id":3780},"dockerを使用したignisの起動","Dockerを使用したIgnisの起動",[434,3783,3784,3785,3788],{},"以下の docker-compose yml の内容を ",[468,3786,3787],{},"ignis-docker-compose.yml"," としてVPS上に保存します：",[493,3790,3794],{"className":3791,"code":3792,"language":3793,"meta":424,"style":424},"language-yml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","services:\n  ignis:\n    image: nobbe\u002Fignis:latest\n    ports:\n      - \"9898:8080\"\n    environment:\n      # お使いのホストユーザーのUID\u002FGIDに合わせて構成してください (確認コマンド: id)\n      - PUID=1000\n      - PGID=1000\n      - WS_ORIGINS=https:\u002F\u002Fobsidian.pafor.me\n    volumes:\n      - .\u002Fvaults:\u002Fvaults\n      - .\u002Fdata:\u002Fapp\u002Fdata\n      - obsidian-app:\u002Fapp\u002Fobsidian-app\n    restart: unless-stopped\n\nvolumes:\n  obsidian-app:\n","yml",[468,3795,3796,3803,3810,3820,3827,3839,3846,3851,3858,3865,3872,3879,3886,3893,3900,3910,3914,3921],{"__ignoreMap":424},[501,3797,3798,3801],{"class":503,"line":504},[501,3799,3800],{"class":1063},"services",[501,3802,2776],{"class":1067},[501,3804,3805,3808],{"class":503,"line":510},[501,3806,3807],{"class":1063},"  ignis",[501,3809,2776],{"class":1067},[501,3811,3812,3815,3817],{"class":503,"line":516},[501,3813,3814],{"class":1063},"    image",[501,3816,1068],{"class":1067},[501,3818,3819],{"class":1071}," nobbe\u002Fignis:latest\n",[501,3821,3822,3825],{"class":503,"line":522},[501,3823,3824],{"class":1063},"    ports",[501,3826,2776],{"class":1067},[501,3828,3829,3832,3834,3837],{"class":503,"line":528},[501,3830,3831],{"class":1067},"      -",[501,3833,1686],{"class":1067},[501,3835,3836],{"class":1071},"9898:8080",[501,3838,1752],{"class":1067},[501,3840,3841,3844],{"class":503,"line":534},[501,3842,3843],{"class":1063},"    environment",[501,3845,2776],{"class":1067},[501,3847,3848],{"class":503,"line":540},[501,3849,3850],{"class":2480},"      # お使いのホストユーザーのUID\u002FGIDに合わせて構成してください (確認コマンド: id)\n",[501,3852,3853,3855],{"class":503,"line":546},[501,3854,3831],{"class":1067},[501,3856,3857],{"class":1071}," PUID=1000\n",[501,3859,3860,3862],{"class":503,"line":552},[501,3861,3831],{"class":1067},[501,3863,3864],{"class":1071}," PGID=1000\n",[501,3866,3867,3869],{"class":503,"line":558},[501,3868,3831],{"class":1067},[501,3870,3871],{"class":1071}," WS_ORIGINS=https:\u002F\u002Fobsidian.pafor.me\n",[501,3873,3874,3877],{"class":503,"line":564},[501,3875,3876],{"class":1063},"    volumes",[501,3878,2776],{"class":1067},[501,3880,3881,3883],{"class":503,"line":570},[501,3882,3831],{"class":1067},[501,3884,3885],{"class":1071}," .\u002Fvaults:\u002Fvaults\n",[501,3887,3888,3890],{"class":503,"line":576},[501,3889,3831],{"class":1067},[501,3891,3892],{"class":1071}," .\u002Fdata:\u002Fapp\u002Fdata\n",[501,3894,3895,3897],{"class":503,"line":582},[501,3896,3831],{"class":1067},[501,3898,3899],{"class":1071}," obsidian-app:\u002Fapp\u002Fobsidian-app\n",[501,3901,3902,3905,3907],{"class":503,"line":588},[501,3903,3904],{"class":1063},"    restart",[501,3906,1068],{"class":1067},[501,3908,3909],{"class":1071}," unless-stopped\n",[501,3911,3912],{"class":503,"line":594},[501,3913,1091],{"emptyLinePlaceholder":998},[501,3915,3916,3919],{"class":503,"line":600},[501,3917,3918],{"class":1063},"volumes",[501,3920,2776],{"class":1067},[501,3922,3923,3926],{"class":503,"line":606},[501,3924,3925],{"class":1063},"  obsidian-app",[501,3927,2776],{"class":1067},[473,3929,3930,3941,3955],{},[476,3931,3932,3933,3936,3937,3940],{},"ポート ",[468,3934,3935],{},"8080"," は他のサービスと競合しやすいため、ホスト側では ",[468,3938,3939],{},"9898"," を使用します。",[476,3942,3943,3944,3947,3948,829,3951,3954],{},"VPS上で ",[468,3945,3946],{},"id"," コマンドを実行し、お使いのホストユーザーの ",[468,3949,3950],{},"UID",[468,3952,3953],{},"GID"," を確認・設定して、適切なファイルシステム権限が適用されるようにします。",[476,3956,3957,3960],{},[468,3958,3959],{},"WS_ORIGINS"," を設定し、指定した独自ドメインのみからWebSocket接続を受け入れるよう制限します。",[434,3962,3963,3965],{},[440,3964,3231],{}," のコンテナを起動します：",[493,3967,3969],{"className":2453,"code":3968,"language":2455,"meta":424,"style":424},"docker compose -f ignis-docker-compose.yml up -d\n",[468,3970,3971],{"__ignoreMap":424},[501,3972,3973,3975,3977,3980,3983,3985],{"class":503,"line":504},[501,3974,3530],{"class":1057},[501,3976,3533],{"class":1071},[501,3978,3979],{"class":1071}," -f",[501,3981,3982],{"class":1071}," ignis-docker-compose.yml",[501,3984,3536],{"class":1071},[501,3986,3539],{"class":1071},[434,3988,3989,3990,3992],{},"ウェブブラウザで設定したドメインにアクセスすると、**「Vault Manager（保管庫マネージャー）」**が表示されます。まだ保管庫が作成されていないため、画面は空の状態です。次のセクションで、リモート保管庫とデータを同期するために ",[440,3991,3711],{}," の設定を行います。",[879,3994],{"src":3995,"alt":3996,"style":3997},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-vault-manager-empty.webp","Ignis Webクライアントの空のVault Managerインターフェース","max-width: 466px; width: 100%; height: auto;",[2073,3999,4000],{"id":4000},"ファイアウォールに関する注意点",[434,4002,4003,4004,4007,4008,4011],{},"Dockerの標準仕様として、コンテナを起動すると自動的にDNATおよびFORWARDルールがiptablesへ挿入され、外部からの通信がダイレクトに対象コンテナへルーティングされます。この挙動は、Ubuntuに標準搭載されているUFWやiptablesの ",[468,4005,4006],{},"INPUT"," チェーンによる制御をバイパスしてしまいます。コンテナを完全にプライベート化し、不要な通信を遮断するために、手動で以下のルールを ",[468,4009,4010],{},"iptables"," に適用します：",[493,4013,4015],{"className":2453,"code":4014,"language":2455,"meta":424,"style":424},"# 外部公開インターフェースからのトラフィックをすべて拒否\nsudo iptables -I DOCKER-USER -i ext_if -j DROP \n\n# 許可する特定のCloudflare WARPクライアントのプライベートIPからのみアクセスを許可\nsudo iptables -I DOCKER-USER -i ext_if -s 100.96.0.10 -j ACCEPT\n",[468,4016,4017,4022,4049,4053,4058],{"__ignoreMap":424},[501,4018,4019],{"class":503,"line":504},[501,4020,4021],{"class":2480},"# 外部公開インターフェースからのトラフィックをすべて拒否\n",[501,4023,4024,4026,4029,4032,4035,4038,4041,4044,4047],{"class":503,"line":510},[501,4025,2462],{"class":1057},[501,4027,4028],{"class":1071}," iptables",[501,4030,4031],{"class":1071}," -I",[501,4033,4034],{"class":1071}," DOCKER-USER",[501,4036,4037],{"class":1071}," -i",[501,4039,4040],{"class":1071}," ext_if",[501,4042,4043],{"class":1071}," -j",[501,4045,4046],{"class":1071}," DROP",[501,4048,2591],{"class":1666},[501,4050,4051],{"class":503,"line":516},[501,4052,1091],{"emptyLinePlaceholder":998},[501,4054,4055],{"class":503,"line":522},[501,4056,4057],{"class":2480},"# 許可する特定のCloudflare WARPクライアントのプライベートIPからのみアクセスを許可\n",[501,4059,4060,4062,4064,4066,4068,4070,4072,4075,4078,4080],{"class":503,"line":528},[501,4061,2462],{"class":1057},[501,4063,4028],{"class":1071},[501,4065,4031],{"class":1071},[501,4067,4034],{"class":1071},[501,4069,4037],{"class":1071},[501,4071,4040],{"class":1071},[501,4073,4074],{"class":1071}," -s",[501,4076,4077],{"class":3512}," 100.96.0.10",[501,4079,4043],{"class":1071},[501,4081,4082],{"class":1071}," ACCEPT\n",[2073,4084,4086],{"id":4085},"synch-cliのセットアップ","Synch CLIのセットアップ",[434,4088,4089,4091],{},[440,4090,3711],{},"は、グラフィカルなUIを持たない（CUI用の）ツールであり、デスクトップ版のアプリケーション一式をインストールすることなく、リモートサーバー上で直接Obsidianの保管庫フォルダを同期させることができます。",[434,4093,4094,4095,4098,4099,4101,4102,4105,4106,4109,4110,4113,4114,4113,4117,4120,4121,4124,4125,4128],{},"先ほどクローンした ",[468,4096,4097],{},"synch"," リポジトリから、",[440,4100,3711],{},"をビルドします。ビルドには、",[440,4103,4104],{},"Node.js >= 22.5","（CLIが内部で ",[468,4107,4108],{},"node:sqlite"," や、",[468,4111,4112],{},"fetch",", ",[468,4115,4116],{},"WebSocket",[468,4118,4119],{},"WebCrypto"," などのブラウザ互換APIに依存しているため）および ",[440,4122,4123],{},"pnpm","（リポジトリがバージョン ",[468,4126,4127],{},"10.33.0"," のpnpmワークスペースとして管理されているため）が必要です：",[493,4130,4132],{"className":2453,"code":4131,"language":2455,"meta":424,"style":424},"# バージョンの確認\nnode --version   # 22.5以上であることを確認\npnpm --version\n\n# リポジトリのルートディレクトリで\npnpm install\n\n# CLIのビルドを実行\npnpm -C apps\u002Fcli build\n\n# ビルドに成功すると、`apps\u002Fcli\u002Fdist\u002Fsynch.js` が生成されます。実行権限を付与し、パスの通った場所に配置します\nchmod +x apps\u002Fcli\u002Fdist\u002Fsynch.js\nln -sf \"$PWD\u002Fapps\u002Fcli\u002Fdist\u002Fsynch.js\" \"$HOME\u002F.local\u002Fbin\u002Fsynch\"\n\n# 正しく導入されたか確認\nsynch --help\n",[468,4133,4134,4139,4150,4157,4161,4166,4173,4177,4182,4195,4199,4204,4215,4243,4247,4252],{"__ignoreMap":424},[501,4135,4136],{"class":503,"line":504},[501,4137,4138],{"class":2480},"# バージョンの確認\n",[501,4140,4141,4144,4147],{"class":503,"line":510},[501,4142,4143],{"class":1057},"node",[501,4145,4146],{"class":1071}," --version",[501,4148,4149],{"class":2480},"   # 22.5以上であることを確認\n",[501,4151,4152,4154],{"class":503,"line":516},[501,4153,4123],{"class":1057},[501,4155,4156],{"class":1071}," --version\n",[501,4158,4159],{"class":503,"line":522},[501,4160,1091],{"emptyLinePlaceholder":998},[501,4162,4163],{"class":503,"line":528},[501,4164,4165],{"class":2480},"# リポジトリのルートディレクトリで\n",[501,4167,4168,4170],{"class":503,"line":534},[501,4169,4123],{"class":1057},[501,4171,4172],{"class":1071}," install\n",[501,4174,4175],{"class":503,"line":540},[501,4176,1091],{"emptyLinePlaceholder":998},[501,4178,4179],{"class":503,"line":546},[501,4180,4181],{"class":2480},"# CLIのビルドを実行\n",[501,4183,4184,4186,4189,4192],{"class":503,"line":552},[501,4185,4123],{"class":1057},[501,4187,4188],{"class":1071}," -C",[501,4190,4191],{"class":1071}," apps\u002Fcli",[501,4193,4194],{"class":1071}," build\n",[501,4196,4197],{"class":503,"line":558},[501,4198,1091],{"emptyLinePlaceholder":998},[501,4200,4201],{"class":503,"line":564},[501,4202,4203],{"class":2480},"# ビルドに成功すると、`apps\u002Fcli\u002Fdist\u002Fsynch.js` が生成されます。実行権限を付与し、パスの通った場所に配置します\n",[501,4205,4206,4209,4212],{"class":503,"line":570},[501,4207,4208],{"class":1057},"chmod",[501,4210,4211],{"class":1071}," +x",[501,4213,4214],{"class":1071}," apps\u002Fcli\u002Fdist\u002Fsynch.js\n",[501,4216,4217,4220,4223,4225,4228,4231,4233,4235,4238,4241],{"class":503,"line":576},[501,4218,4219],{"class":1057},"ln",[501,4221,4222],{"class":1071}," -sf",[501,4224,1686],{"class":1067},[501,4226,4227],{"class":1666},"$PWD",[501,4229,4230],{"class":1071},"\u002Fapps\u002Fcli\u002Fdist\u002Fsynch.js",[501,4232,1663],{"class":1067},[501,4234,1686],{"class":1067},[501,4236,4237],{"class":1666},"$HOME",[501,4239,4240],{"class":1071},"\u002F.local\u002Fbin\u002Fsynch",[501,4242,1752],{"class":1067},[501,4244,4245],{"class":503,"line":582},[501,4246,1091],{"emptyLinePlaceholder":998},[501,4248,4249],{"class":503,"line":588},[501,4250,4251],{"class":2480},"# 正しく導入されたか確認\n",[501,4253,4254,4256],{"class":503,"line":594},[501,4255,4097],{"class":1057},[501,4257,4258],{"class":1071}," --help\n",[434,4260,4261,4262,4265],{},"ビルドしたSynch CLIは、リモートのSynch保管庫が稼働しているのと同じVPS上で実行するため、ローカルのAPIサーバーに直接接続できます。もし別の独立したサーバーから同期を設定する場合は、",[468,4263,4264],{},"synch login --api-url \u003CリモートのSynchのAPIのURL>"," を実行してあらかじめ接続先を定義しておきます。",[434,4267,4268],{},[879,4269],{"alt":4270,"src":4271},"ターミナルでカスタムAPI URLを使用してsynch loginを実行する","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynch-login-api-url-terminal.webp",[434,4273,836,4274,4277],{},[468,4275,4276],{},"synch login"," を実行すると、認証用URLが提示されます：",[434,4279,4280],{},[879,4281],{"alt":4282,"src":4283},"Synch CLIの認証URLを示すターミナル出力","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynch-login-auth-url-terminal.webp",[434,4285,4286],{},"デスクトップ版ObsidianのSynchrunプラグインに登録したのと同じメールアドレスを用いて、提示されたウェブページからログインします。",[434,4288,4289],{},[879,4290],{"alt":4291,"src":4292},"Synch CLI認証のためのWebログインの成功","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynch-web-login-success.webp",[434,4294,4295,4296,4299],{},"ログイン後、",[468,4297,4298],{},"synch vault connect --vault ~\u002Fvaults\u002F\u003C保管庫名> --vault-id asadqe-7b29-4677-fsad-234asdafasd"," を実行して、VPS上のローカルディレクトリとリモートの保管庫を紐づけます。",[434,4301,4302,4303,4305,4306,4309,4310,4313],{},"リモート保管庫のID（Vault ID）は、デスクトップ版プラグインの ",[440,4304,3584],{}," 設定画面の ",[440,4307,4308],{},"「Manage remote vaults（リモート保管庫の管理）」"," から確認可能です。クリックするとウェブページが開き、固有のGUID（例: ",[468,4311,4312],{},"123e4567-e89b-12d3-a456-426614174000","）が設定された保管庫一覧が表示されます：",[434,4315,4316,4321],{},[879,4317],{"src":4318,"alt":4319,"style":4320},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynchrun-manage-remote-vaults.webp","Synchrunプラグインでのリモート保管庫の管理","max-width: 582px; width: 100%; height: auto;",[879,4322],{"alt":4323,"src":4324},"Synchrunでの一意のリモート保管庫IDの検索","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynchrun-remote-vault-id.webp",[434,4326,4327,4328,4331],{},"プロンプトの指示に従って保管庫のパスワードを入力すると、接続が確立されます。その後、",[468,4329,4330],{},"synch sync --vault ~\u002Fvaults\u002F\u003C保管庫名>"," を実行して最初の同期処理（イニシャル同期）を行います。初回はデータ量に応じて数分〜数十分ほどかかる場合があります。",[434,4333,4334],{},[879,4335],{"alt":4336,"src":4337},"Synch CLIでの初期保管庫同期の進行状況","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynch-cli-initial-sync-progress.webp",[434,4339,4340,4341,4344],{},"この同期処理を常時自動化するために、システム起動時にバックグラウンドで ",[468,4342,4343],{},"synch watch"," が自動実行され、変更を即座に反映できるように、systemdのサービスユニットを作成して有効化します：",[493,4346,4348],{"className":2453,"code":4347,"language":2455,"meta":424,"style":424},"sudo tee \u002Fetc\u002Fsystemd\u002Fsystem\u002Fsynch-watch.service \u003C\u003C'EOF'\n[Unit]\nDescription=Synch vault watcher\nAfter=network-online.target\nWants=network-online.target\n\n[Service]\nType=simple\nUser=\u003Cusername>\nExecStart=\u002Fhome\u002F\u003Cusername>\u002F.local\u002Fbin\u002Fsynch watch --vault \u002Fhome\u002F\u003Cusername>\u002Fvaults\u002F\u003Cvault-name>\nWorkingDirectory=\u002Fhome\u002F\u003Cusername>\u002Fvaults\nEnvironment=\"PATH=\u002Fhome\u002F\u003Cusername>\u002F.local\u002Fbin:\u002Fhome\u002F\u003Cusername>\u002F.cargo\u002Fbin:\u002Fusr\u002Flocal\u002Fsbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fsbin:\u002Fusr\u002Fbin:\u002Fsbin:\u002Fbin\"\nEnvironment=\"HOME=\u002Fhome\u002F\u003Cusername>\"\nRestart=always\nRestartSec=5\n\n[Install]\nWantedBy=multi-user.target\nEOF\nsudo systemctl daemon-reload\nsudo systemctl enable --now synch-watch.service\n",[468,4349,4350,4366,4370,4375,4380,4385,4389,4393,4398,4403,4408,4413,4418,4423,4427,4432,4436,4440,4444,4449,4457],{"__ignoreMap":424},[501,4351,4352,4354,4357,4360,4363],{"class":503,"line":504},[501,4353,2462],{"class":1057},[501,4355,4356],{"class":1071}," tee",[501,4358,4359],{"class":1071}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fsynch-watch.service",[501,4361,4362],{"class":1067}," \u003C\u003C",[501,4364,4365],{"class":1067},"'EOF'\n",[501,4367,4368],{"class":503,"line":510},[501,4369,2895],{"class":1071},[501,4371,4372],{"class":503,"line":516},[501,4373,4374],{"class":1071},"Description=Synch vault watcher\n",[501,4376,4377],{"class":503,"line":522},[501,4378,4379],{"class":1071},"After=network-online.target\n",[501,4381,4382],{"class":503,"line":528},[501,4383,4384],{"class":1071},"Wants=network-online.target\n",[501,4386,4387],{"class":503,"line":534},[501,4388,1091],{"emptyLinePlaceholder":998},[501,4390,4391],{"class":503,"line":540},[501,4392,2914],{"class":1071},[501,4394,4395],{"class":503,"line":546},[501,4396,4397],{"class":1071},"Type=simple\n",[501,4399,4400],{"class":503,"line":552},[501,4401,4402],{"class":1071},"User=\u003Cusername>\n",[501,4404,4405],{"class":503,"line":558},[501,4406,4407],{"class":1071},"ExecStart=\u002Fhome\u002F\u003Cusername>\u002F.local\u002Fbin\u002Fsynch watch --vault \u002Fhome\u002F\u003Cusername>\u002Fvaults\u002F\u003Cvault-name>\n",[501,4409,4410],{"class":503,"line":564},[501,4411,4412],{"class":1071},"WorkingDirectory=\u002Fhome\u002F\u003Cusername>\u002Fvaults\n",[501,4414,4415],{"class":503,"line":570},[501,4416,4417],{"class":1071},"Environment=\"PATH=\u002Fhome\u002F\u003Cusername>\u002F.local\u002Fbin:\u002Fhome\u002F\u003Cusername>\u002F.cargo\u002Fbin:\u002Fusr\u002Flocal\u002Fsbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fsbin:\u002Fusr\u002Fbin:\u002Fsbin:\u002Fbin\"\n",[501,4419,4420],{"class":503,"line":576},[501,4421,4422],{"class":1071},"Environment=\"HOME=\u002Fhome\u002F\u003Cusername>\"\n",[501,4424,4425],{"class":503,"line":582},[501,4426,2934],{"class":1071},[501,4428,4429],{"class":503,"line":588},[501,4430,4431],{"class":1071},"RestartSec=5\n",[501,4433,4434],{"class":503,"line":594},[501,4435,1091],{"emptyLinePlaceholder":998},[501,4437,4438],{"class":503,"line":600},[501,4439,2953],{"class":1071},[501,4441,4442],{"class":503,"line":606},[501,4443,2958],{"class":1071},[501,4445,4446],{"class":503,"line":612},[501,4447,4448],{"class":1067},"EOF\n",[501,4450,4451,4453,4455],{"class":503,"line":618},[501,4452,2462],{"class":1057},[501,4454,2465],{"class":1071},[501,4456,2977],{"class":1071},[501,4458,4459,4461,4463,4465,4468],{"class":503,"line":624},[501,4460,2462],{"class":1057},[501,4462,2465],{"class":1071},[501,4464,2588],{"class":1071},[501,4466,4467],{"class":1071}," --now",[501,4469,4470],{"class":1071}," synch-watch.service\n",[434,4472,4473,4474,4476],{},"ブラウザで ",[468,4475,3743],{}," にアクセスしてみましょう。以下のように、デスクトップ版とほとんど見分けがつかない美しいインターフェースとノートレイアウトが表示されます：",[879,4478],{"src":4479,"alt":4480,"style":4481},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-web-interface-desktop-view.webp","デスクトップでObsidian保管庫を表示するIgnis Webインターフェース","max-width: 593px; width: 100%; height: auto;",[434,4483,4484],{},"設定アイコンを開くと、ほぼすべての基本設定がそのまま引き継がれていることが確認できます。ただし、コミュニティプラグインについては、ブラウザ側で必要に応じて個別に再インストールを行う必要があります：",[879,4486],{"src":4487,"alt":4488,"style":4489},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-settings-community-plugins.webp","Ignis Webインターフェースのコミュニティプラグイン設定","max-width: 597px; width: 100%; height: auto;",[434,4491,4492],{},"動作テストとして、このウェブ画面側から新しくノートを1枚追加してみます：",[879,4494],{"src":4495,"alt":4496,"style":4489},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-create-new-note-web.webp","Ignis Webインターフェースを介した新しいMarkdownメモの作成",[434,4498,4499,4500,4502],{},"作成すると、即座にデスクトップ側のObsidianアプリにも同期され反映されることが確認できます。なお、中身が空のフォルダは ",[440,4501,3231],{}," の画面上には表示されない仕様になっています。",[879,4504],{"src":4505,"alt":4506,"style":4507},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-desktop-synced-note.webp","新しく作成されたメモがObsidianデスクトップアプリに正常に同期されました","max-width: 502px; width: 100%; height: auto;",[434,4509,4510,4511,4513],{},"スマートフォンなどのモバイルブラウザから ",[468,4512,3743],{}," にアクセスした場合の表示：",[434,4515,4516,4521],{},[879,4517],{"src":4518,"alt":4519,"style":4520},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-mobile-view-sidebar.webp","モバイルデバイスでのIgnis Webクライアントのサイドバーナビゲーション","max-width: 269px; width: 100%; height: auto;",[879,4522],{"src":4523,"alt":4524,"style":4520},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-mobile-view-editor.webp","モバイルデバイスでのIgnis WebクライアントのMarkdownメモエディター",[434,4526,3715,4527,4529,4530,4533],{},[440,4528,3231],{},"上で不要になったノートを削除した場合、そのノートはローカル保管庫内の ",[468,4531,4532],{},"~\u002Fvaults\u002F\u003C保管庫名>\u002F.trash"," フォルダへ安全に移動（ゴミ箱行き）となります。",[429,4535,4536],{"id":4536},"自己ホスト型保管庫に関するまとめ",[434,4538,4539,4540,829,4542,4544,4545,4547],{},"オープンソースの ",[440,4541,3222],{},[440,4543,3231],{}," を組み合わせることで、自分が完全に管理・所有するインフラ上で、メインのObsidian保管庫をデバイスを選ばず安全に同期・活用できるようになります。また、これらのサービスを ",[440,4546,2295],{}," の閉域プライベートネットワーク内に配置することで、あなたの大切な個人ノートを公開インターネットの脅威から完全に隔離・保護することが可能です。",[434,4549,4550,4551,4553],{},"なお、",[440,4552,3231],{},"はデスクトップ版のローカルアプリを100%代替することを狙って作られたものではありません。あくまで「手元に普段のパソコンがない時や、他環境のブラウザからノートを一時的に確認・編集したい場合」に重宝する、軽量かつ機動性に優れたウェブクライアントとしての役割を担います。普段のノート記述や細かなカスタマイズ、プラグインの本格的な利用には、引き続きObsidianのネイティブアプリを主軸として活用するのが最善です。",[434,4555,4556,4557,4559],{},"最後に、Synchはエンドツーエンドで強力に暗号化されているため、ブルートフォース（総当たり）攻撃からノートを守るためには、十分に強固なリモート保管庫パスワードの設定が必須です。万が一パスワードを紛失した場合、サーバー側には復号された ",[440,4558,3300],{}," は一切保存されていないため、データを復元することは絶対に不可能です。VPSのインスタンスのセキュリティ管理、および自動スナップショットやバックアップのメンテナンスも、怠らず適切に行ってください。",[434,4561,4562],{},"Synchの履歴管理機能やゴミ箱への退避機能によって、誤操作によるデータ消失の大半は防げますが、大切なナレッジを守るためにも、Obsidian保管庫全体の独立したバックアップを別途定期的に取得しておくことを強くお勧めします。",[429,4564,4565],{"id":4565},"参考リンク",[473,4567,4568,4575,4582],{},[476,4569,4570],{},[480,4571,4574],{"href":4572,"rel":4573},"https:\u002F\u002Fsynch.run\u002Fself-hosting-docker\u002F",[484],"Docker Composeを用いたSynchのデプロイ方法",[476,4576,4577],{},[480,4578,4581],{"href":4579,"rel":4580},"https:\u002F\u002Fignis.thiefling.com\u002Fdocs\u002Fserver\u002Fdeploy\u002F",[484],"Dockerを用いたIgnisのデプロイ方法",[476,4583,4584],{},[480,4585,4588],{"href":4586,"rel":4587},"https:\u002F\u002Fsynch.run\u002Fblog\u002Fencryption-and-decryption\u002F",[484],"Synchにおけるエンドツーエンド暗号化の仕組み",[980,4590,4591],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"title":424,"searchDepth":510,"depth":516,"links":4593},[4594,4603,4612,4613],{"id":3264,"depth":510,"text":3265,"children":4595},[4596,4600],{"id":3307,"depth":516,"text":3308,"children":4597},[4598,4599],{"id":3311,"depth":522,"text":3311},{"id":3326,"depth":522,"text":3327},{"id":3561,"depth":516,"text":3562,"children":4601},[4602],{"id":3565,"depth":522,"text":3566},{"id":3673,"depth":510,"text":3674,"children":4604},[4605],{"id":3697,"depth":516,"text":3698,"children":4606},[4607,4608,4609,4610,4611],{"id":3724,"depth":522,"text":3725},{"id":3733,"depth":522,"text":3734},{"id":3780,"depth":522,"text":3781},{"id":4000,"depth":522,"text":4000},{"id":4085,"depth":522,"text":4086},{"id":4536,"depth":510,"text":4536},{"id":4565,"depth":510,"text":4565},[4615],"productivity","2026-09-15","Cloudflare Zero Trust環境において、自ホスト型のSynchとIgnisを導入し、複数デバイス間でObsidianの保管庫（Vault）を安全に同期・暗号化するとともに、ウェブブラウザ経由でノートを安全に閲覧・編集するための、強固なプライベートネットワーク構築手順を詳しく解説します。","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002FJA-Sync-Obsidian-Across-Devices.webp","セルフホストSynchとIgnisを使用し、Cloudflare Zero Trustプライベートネットワーク内で安全に複数デバイス間のObsidian保管庫を同期している図",{"schemaOrg":4621,"robots":1003,"sitemap":4625},[4622,4624],{"@type":4623,"headline":3204,"description":4617,"image":4618},"Article",{"@type":1002,"name":3204,"description":4617,"image":4618},{"lastmod":4626},"2026-09-16",{"title":4628,"description":4617,"ogTitle":3204,"ogDescription":4617,"twitterTitle":3204,"twitterDescription":4617},"Cloudflare Zero Trustによる安全なObsidian同期と自ホスト型Synch・Ignisの構築","ja\u002Farticle\u002Fsync-obsidian-across-devices",[4631,2275,4632,1010],"セルフホスト","同期","vLEe3YjLuAqtVGuhjnjR-zFGxNLCqkKj0P9t3ekqnWE",1792490006099]