
CSS
ã€ãã³ã
該åœããã³ã³ãã³ããèŠã€ãããŸããã§ãã
ãã¬ãžã³
æè¡ããã°
ã¯ããã« # Deno 2.9 ãªãªãŒã¹ããã§ãšãããããŸãã Deno 2.9 | Deno Electron 倧奜ããªèªåãšããŠãæ°ã«ãªãã®ã¯ãã¯ã Deno Desktop ã§ãã Tauri ãšåæ§ WebView ãããã¯ãšã³ãã«ããæ§æãš Electron ãšåæ§ Chromium ããŒã¹ã®æ§æãéžã¹ããšã®ããšã§ãããã¯è©ŠããããªããšæããŸããã å
¬åŒããã¥ã¡ã³ãã¯ä»¥äžã«ãããŸãã https://docs.deno.com/runtime/desktop/ --> Caution Deno ããã°ã«ã¯ä»¥äžã®ããã«æžãããŠããã2.9 æç¹ã§ã¯ãã¹ã¯ãããæ©èœã¯å®éšç段éã§ãã deno desktop is experimental in 2.9. The surface described here is stabilizing and some platform features are still landing. 䜿ã£ãŠã¿ã # ãŸã㯠2.9 ã«ã¢ããã°ã¬ãŒãããŠãããŸã [1] ã deno upgrade main.ts ã« Deno.serve ã䜿ã£ãŠæ®éã«ãµãŒããŒããã°ã©ã ãæžããŸãã main.ts Deno.serve(() => new Response( "<!DOCTYPE html><h1>Hello from Deno desktop </h1>", { headers: { "content-type": "text/html" } }, ) ); åããã£ã¬ã¯ããªã§ deno desktop main.ts ãå®è¡ããŸãã $ deno desktop main.ts â deno desktop is experimental and subject to change Check main.ts Compile main.ts to hello.dylib Embedded Files hello.dylib âââ main.ts (430B) Files: 1.91KB Metadata: 1.38KB Remote modules: 12B Downloading laufey webview backend for aarch64-apple-darwin (v0.4.0) Download laufey-webview-aarch64-apple-darwin.tar.gz 97.44KiB/97.44KiB Codesigning bundle with identity "-" hello.app/Contents/MacOS/laufey_webview: replacing existing signature hello.app/Contents/MacOS/hello.dylib: replacing existing signature Bundle hello.app æåŸã®åºåã§ãã«ãŒãã« hello.app (macOS ã®ã¢ããªå®è¡ãã¡ã€ã«)ãçæãããŠãããèµ·åã§ããŸãïŒWindows ã®å Žåã¯ãhello.exe ãçæãããŸãïŒã Deno ã®ã³ã³ã»ããéãã远å ã®ã¢ãžã¥ãŒã«ãèšå®ãªã(Out of the box)ã§ãã¹ã¯ãããã¢ããªãçæãããŸããã Deno Desktop ã®éçºäœéš # HMR (Hot Module Replacement) ãªãã·ã§ã³ä»ãã§èµ·åããããšã§ãããŒã«ã«ã®éçºãµãŒããç«ã¡äžããã³ãŒã倿Žãæ€ç¥ããŠã¢ããªå
容ãå³ææŽæ°ããŠãããŸãã deno desktop --hmr main.ts â deno desktop is experimental and subject to change Compile main.ts to file:///Users/kondoumh/Library/Caches/deno/desktop/5f4a00908e99d886/hello.dylib Embedded Files hello.dylib âââ main.ts (422B) Files: 1.9KB Metadata: 1.38KB Remote modules: 12B Running desktop app with HMR (watching /Users/kondoumh/dev/deno-study/desktop/hello) Runtime loaded successfully from: /Users/kondoumh/Library/Caches/deno/desktop/5f4a00908e99d886/hello.dylib Runtime started [desktop] dylib path: "/Users/kondoumh/Library/Caches/deno/desktop/5f4a00908e99d886/hello.dylib" Listening on http://127.0.0.1:52958/ main.ts ã®ã³ãŒããæžãæãããšãä¿ååŸããã«ç»é¢ãžåæ ãããŸãã --> Information Electron ã§ã¯ HMR ã¯æšæºã§ã¯å©çšã§ãããå¥é Forge ãªã©ã§éçºãµãŒããŒãèµ·åããå¿
èŠããããŸãã https://developer.mamezou-tech.com/blogs/2024/01/29/electron-forge-introduction/ UI ã® ããŒã«ã« HTTP ãµãŒãã¹ã«ããå®çŸ # Electron (Forge ãªã©) ã§ã¯ããŒã«ã«ãµãŒããŒã®å©çšã¯éçºæãäžå¿ã§ãé
åžåŸã¯ file:// ã§ã¢ã»ãããèªãæ§æãäžè¬çã§ãã ããã«å¯Ÿã Deno Desktop ã¯ãé
åžåŸã®ãã€ããªã§ãããŒã«ã« HTTP ãµãŒããŒãå
éšèµ·åãã空ãããŒããèªåå²ãåœãŠã㊠UI ãæç»ããŸãããµãŒããŒã¯ããã»ã¹å
ã§éããŠãããå€éšå
¬éã¯ãããŸãããããŒãè¡çªãæèããã«æžãã®ãè¯ãç¹ã§ãã ãã®ãéçºæããã«ãæžã¿ãã€ããªã§ããåã HTTP å®è¡ã¢ãã«ã§ UI ãæäŸãããèšèšã«ããã éçºæãšãããã€æã®æåã«å·®ããªã ã³ã³ãã³ãã¯ãã©ãŠã¶ãšãã¹ã¯ãããã§åãåãããã Next.js ãªã©ã®ãã¬ãŒã ã¯ãŒã¯ããã®ãŸãŸãã¹ã¯ãããã¢ããªã®äžã§åã ãšãã£ãã¡ãªãããåŸãããŸãã https://docs.deno.com/runtime/desktop/serving/ DevTools ã®èµ·å # Electron ã Tauri ãšåæ§ãDevTools ã«ãããããã°ãå¯èœã§ããBrowserWindow ãèµ·åãã openDevtools ã¡ãœãããåŒã¶ã ãã§ãã const win = new Deno.BrowserWindow({ title: "My Deno Desktop App", width: 800, height: 600, }); win.openDevtools(); https://docs.deno.com/runtime/desktop/devtools/ --> Information ããŸã®ãšãããDevTools ã®ãã«ãµããŒãã¯ããã¯ãšã³ãã cef ã«ããŠããæã®ã¿ã§ãã 以äžã®ããã«ãæå®ããŠèµ·åããå¿
èŠããããŸãã deno desktop --hmr --backend=cef main.ts ããã¯ãšã³ããšããã³ããšã³ãã®éä¿¡(Bindings) # Electron ã® IPC é信㯠render.js ãš main.js ã preload.js çµç±ã§ããªããžããå¿
èŠããããããªãé¢åã§ããDeno ãã¹ã¯ãããã§ã¯ BrowserWindow ã«ãã€ã³ããã颿°ã bindings ãšããã°ããŒãã«ãªããžã§ã¯ãã«ããç°¡åã«åŒã³åºãããšãã§ããŸãã Deno ã©ã³ã¿ã€ã ãšã¬ã³ããªã³ã°ããã¯ãšã³ãã¯ã¹ã¬ãããããã»ã¹ãšããŠåäœããåŒã³åºãã¯ããã»ã¹å
ãã£ãã«ãä»ããŠè¡ãããŸãããã®ãµã³ãã«æ§æã§ã¯ãœã±ããããŒã¹ã® IPC ãçŽæ¥æ±ããã«æžããããElectron ã® ipcMain / ipcRendererãTauri ã® invoke ãšæ¯ã¹ãŠèŠéãããæžããã®ãå©ç¹ã§ãã å®éã®ã³ãŒãã§èŠãŠã¿ãŸãããã const win = new Deno.BrowserWindow({ title: "Bindingsã®ãã¹ã", width: 800, height: 600, }); // ========================================== // 1. ããã¯ãšã³ãåŽïŒããã³ãããåŒã°ãã颿°ãç»é² // ========================================== win.bind("getSystemInfo", async (userName) => { console.log(`[DenoåŽ] ããã³ããšã³ãããåŒã°ããŸããïŒ åŒæ°: ${userName}`); // Denoã®æ©èœã䜿ã£ãŠOSã®æ
å ±ãååŸ const denoVersion = Deno.version.deno; const os = Deno.build.os; // å°ãéãåŠçãã·ãã¥ã¬ãŒãïŒ0.5ç§åŸ
ã€ïŒ await new Promise(resolve => setTimeout(resolve, 500)); // ããã³ããšã³ãã«è¿ãããŒã¿ïŒJSONåã§ãããã®ãªãäœã§ãOKïŒ return { message: `ããã«ã¡ã¯ã${userName}ããïŒ`, os: os, denoVersion: denoVersion }; }); // ========================================== // 2. ããã³ããšã³ãåŽïŒç»é¢ã®HTMLãè¿ã // ========================================== Deno.serve(() => { const html = ` <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Bindings Test</title> </head> <body> <h1>Deno Desktop Bindings</h1> <button id="btn">ã·ã¹ãã æ
å ±ãååŸ</button> <pre id="result">ããã«çµæãåºãŸã</pre> <script> // ãã¿ã³ãæŒãããæã®åŠç document.querySelector('#btn').addEventListener('click', async () => { const resultArea = document.getElementById('result'); resultArea.textContent = "ååŸäž..."; try { // ð¡ bindings ã䜿ã£ãŠããã¯ãšã³ãã®é¢æ°ãåŒã³åºã const data = await bindings.getSystemInfo("kondoumh"); // çµæãç»é¢ã«è¡šç€º resultArea.textContent = JSON.stringify(data, null, 2); } catch (error) { resultArea.textContent = "error: " + error.message; } }); </script> </body> </html> `; return new Response(html, { headers: { "content-type": "text/html" }, }); }); ã¢ããªç»é¢ã§ãã ã·ã¹ãã æ
å ±ãååŸ ãã¿ã³ãã¯ãªãã¯ãããšãã°ããåŒã³åºãäžã«ãªããçµæã衚瀺ãããŸãã çµæã衚瀺ãããç¶æ
ã ã¢ããªãèµ·åããŠããããã¯ãšã³ãã§ã¯æ¬¡ã®ããã«ãã°ãåºãŠããŸãã [DenoåŽ] ããã³ããšã³ãããåŒã°ããŸããïŒ åŒæ°: kondoumh ãããã·ã³ãã«ã§ããOS ã®ãã€ãã£ãæ©èœãš Web UI ãç°¡åã«é£æºã§ããã®ãããã§ããã https://docs.deno.com/runtime/desktop/bindings/ ã¡ãã¥ãŒ ã®å©çš # ã¢ããªã±ãŒã·ã§ã³ã¡ãã¥ãŒã®å®è£
ã BrowserWindow ã® setApplicationMenu ã¡ãœããå
ã§ã¡ãã¥ãŒãªããžã§ã¯ããå®çŸ©ããŠæž¡ããŸãã BrowserWindow ã«ã€ãã³ããªã¹ããŒãç»é²ããŠã¡ãã¥ãŒãã¯ãªãã¯ãããæã®æ¯ãèããå®è£
ããŸãã role ãªã©ã¯ Electron ãšåãã§ããã win.setApplicationMenu([ { submenu: { label: "File", items: [ { item: { label: "New", id: "new", accelerator: "CmdOrCtrl+N", enabled: true, }, }, { item: { label: "OpenâŠ", id: "open", accelerator: "CmdOrCtrl+O", enabled: true, }, }, "separator", { item: { label: "Save", id: "save", accelerator: "CmdOrCtrl+S", enabled: true, }, }, { role: { role: "quit" } }, ], }, }, { submenu: { label: "Edit", items: [ { role: { role: "undo" } }, { role: { role: "redo" } }, "separator", { role: { role: "cut" } }, { role: { role: "copy" } }, { role: { role: "paste" } }, ], }, }, ]); win.addEventListener("menuclick", (e) => { const detail = (e as CustomEvent).detail; switch (detail.id) { case "new": console.log("New clicked"); break; case "open": console.log("Open clicked"); break; case "save": console.log("Save clicked"); break; } }); ã³ã³ããã¹ãã¡ãã¥ãŒã®å®è£
ã Deno.MenuItem ã®é
åãäœæããŠãBrowserWindow ã® showContextMenu ã«åº§æšãšãšãã«æž¡ããŸãã const contextMenu: Deno.MenuItem[] = [ { item: { label: "Copy", id: "copy", enabled: true } }, { item: { label: "Paste", id: "paste", enabled: true } }, "separator", { item: { label: "PropertiesâŠ", id: "props", enabled: true } }, ]; // Trigger from a right-click. The webview may not forward the browser // `contextmenu` event, so handle the secondary mouse button on the window. win.addEventListener("mousedown", (e) => { if (e.button === 2) { win.showContextMenu(e.clientX, e.clientY, contextMenu); } }); win.addEventListener("contextmenuclick", (e) => { if (e.detail.id === "copy") { console.log("Copy clicked"); } if (e.detail.id === "paste") { console.log("Paste clicked"); } if (e.detail.id === "props") { console.log("Properties clicked"); } }); --> Information ããã§ã¯ã¡ãã¥ãŒã®ã¯ãªãã¯ã€ãã³ãã§ãã°ãåºåããŠããŸããããã°èªäœã¯ã¢ããªãèµ·åããŠããã¿ãŒããã«åŽã«åºãŸãã®ã§ã泚æãã ããã https://docs.deno.com/runtime/desktop/menus/ ãã¬ãŒã ã¯ãŒã¯ãå©çšããéçº # Deno.serve() ãå©çšãããµã³ãã«ãèŠãŠããŸããããDeno ãã¹ã¯ãããã§ã¯ã以äžã®ãã¬ãŒã ã¯ãŒã¯ãšãšãã«å©çšå¯èœã§ãããããã®ãããžã§ã¯ãã®ãã£ã¬ã¯ããªã§ deno desktop ãèµ·åãããšããã¬ãŒã ã¯ãŒã¯ãèªåæ€åºããŠã¢ããªãæ§æããŸããå€ãã®ã¢ãã³ãã¬ãŒã ã¯ãŒã¯ããµããŒããããŠããŸãã Next.js Astro Fresh Remix Nuxt SvelteKit SolidStart TanStack Start Vite ããŒã«ã«ã§åããŠãã®ã« SSR ã䜿ããšããã®ããªããšãäžæè°ãªæãã§ãããã¡ãããšåããŠã»ãã¥ã¢ã§ããã°ãšã·ïŒãšããæãã§ããããã https://docs.deno.com/examples/next_tutorial/ Next.js ã®ã¢ããªãäœæããŸãã deno run -A npm:create-next-app@latest äœæãããããžã§ã¯ããã£ã¬ã¯ããªãžç§»åããŠå®è¡ããŸãã cd <project-dir> deno desktop -A Next.js ã®ã¢ããªããå€éšãµãŒããŒãªãã§ãŸãã£ãšãã¹ã¯ãããå
ã§åããŠãã®ã¯äžæè°ãªæãã§ãã https://docs.deno.com/runtime/desktop/frameworks/ ããã¯ãšã³ãã®éžæã«ã€ã㊠# ãã¹ã¯ãããã¢ããªã¯é
åžãããã€ããªã®ãµã€ãºãéèŠã§ããå°ããã«è¶ããããšã¯ãããŸããã Electron 㯠Chromium ãå
å
ãããããã€ã³ã¹ããŒã«ããããã€ããªãµã€ãºã¯300MBãããã®å€§ããã«ãªã£ããããŸãã Deno Desktop ã®å ŽåãOS ã«ããªã€ã³ã¹ããŒã«ãããŠãã WebView ã䜿ãã°70MBçšåºŠã§ããCEF(Chromium) ã ãšãã¯ã300MBçšåºŠã«ãªããŸãã OS äŸåã® WebView ã ãšãWindows ãš Mac ã§åŸ®åŠã« CSS ã JS ã®æåãå€ããã¯ãã¹ãã©ãŠã¶åé¡ãçºçããããããã®ããã®å¯Ÿå¿ããã¹ããå¿
èŠã«ãªããŸããæ©èœãå°ãªããã¡ã¯ WebView ã§ããããããããŸããããæ©èœãå¢ããŠãããšãã¹ãã®æéãäœåã«ããªã£ãŠãããŸãã Deno Desktop ã®å Žåãæåã¯è»œé㪠WebView ã§ã¹ã¿ãŒãããã¯ãã¹ãã©ãŠã¶ãéè·ã«ãªã£ãŠããããã¡ãã£ãšé
åžãµã€ãºã¯å€§ãããªããã©ãCEF ã«ã¹ã€ããã§ããã®ãããããªãšæããŸãã https://docs.deno.com/runtime/desktop/backends/ --> Information Tauri ã ãšãã®èŸºãServo ããŒã¹ã®èªå WebView ãããžã§ã¯ã Verso åŸ
ã¡ã§ãããDeno ã¯æ¢åã® Chromium ãéžæå¯èœã«ããŠããããããçŸæç¹ã§ã®å²ãåããæããããŸããã Electron ãšã®æ¯èŒ # æ¢å Web ã¢ããªããã¹ã¯ãããåããããŠãŒã¹ã±ãŒã¹ã§ã¯ãDeno Desktop ã¯ããªãæåã§ãã äžæ¹ã§ãElectron ã® WebContentsView ã®ãããªé«åºŠãªãã«ããã¥ãŒæ§æãåæã«ããŠããå Žåã¯ãçŸæç¹ã§ã¯ Electron ã®ã»ããé©ããŠããŸããããšãã° VS Code ã Figma ã®ããã«ãè€æ°ãã¥ãŒã现ããå¶åŸ¡ããã¿ã€ãã®ã¢ããªã§ãã ãã£ããæŽçãããšæ¬¡ã®ãããªæè§Šã§ãã åäžãŠã£ã³ããŠäžå¿ + æ¢å Web è³ç£æŽ»çš: Deno Desktop ã¯ããªãè¯ã è€éãªãŠã£ã³ããŠ/ãã¥ãŒç®¡ç: Electron ãäŸç¶åŒ·ã --> Information ãã«ããã¥ãŒæ§æã®å¯Ÿå¿ã®åŒ±ã㯠Tauri ãåæ§ã§ãã https://developer.mamezou-tech.com/blogs/2025/12/01/porting-an-electron-app-to-tauri2/ Electron ã® WebContensView æ§æã«ã€ããŠã¯ä»¥äžã®èšäºããåç
§ãã ããã /blogs/2024/08/28/electron-webcontentsview-app-structure/ https://docs.deno.com/runtime/desktop/comparison/ ãããã« # 以äžãDeno Desktop æ©èœãäžéã詊ããŸããã Out of the box ã§ãããŸã§ãã¹ã¯ãããéçºäœéšãæŽã£ãŠããã®ã¯ççŽã«é©ãã§ããã¿ã¹ã¯ãã¬ã€ãã¡ãã¥ãŒãBindings ãªã©ãã¢ããªããããåºãããã® API ãæåããæã£ãŠããã®ã奜å°è±¡ã§ããã Tauri ãšéã£ãŠã¢ããªåŽããã¹ãŠ TypeScript ã§æžãããããæ¢å Web ã¢ããªãããŒã¹ã«ãã¡ãã¥ãŒãã¿ã¹ã¯ãã¬ã€ã远å ããOS æ©èœãšé£æºãããçšéã§ã¯ããªãçžæ§ããããšæããŸããæå°æ§æãªãããã¹ã¯ãããã¢ããªåèªäœã¯1æéãããããªãã¯ãã§ãã --> Information Tauri ã JS ã® API ãçãããŠãRust ç¥ããªãå¢ãåã蟌ãããšããŠã¯ããŸãã Deno ã®ãã©ãŒæ©èœã«ãªãå¯èœæ§ããããŸãããexperimental ããå®å®çãžåããŠãä»åŸã®çæããšãŠã楜ãã¿ãªæ©èœã§ãã 2026幎7æ6æ¥çŸåšã®ææ°ã¯ 2.9.1 ã§ãã â©ïž
ã¯ããã« ã¯ãããŸããŠãéçºæ¬éšãœãªã¥ãŒã·ã§ã³éçºéšã«ãŠå
å®è
ã€ã³ã¿ãŒã³ãããŠããèæ°žæ©ä¹è±ã§ããéçºæªçµéšã§GitãšGitHubã®éããCPUãšã¯äœãããããªããããã·ã¹ãã ã«çãã£ãç§ããä»åãå±ç€ºäŒéå¶æ¹åãããžã§ã¯ããã®äžç°ã§ããŒã«ã®éçºã«ææŠããããããã®å
容ãèšäºã«ããããšã«ããŸããã æ¬èšäºã§ã¯ãæè¡ã«é¢ããå
容ã«ãã©ãŒã«ã¹ããŠèšèŒããŠããŸãã ãããžã§ã¯ãã®æŠèŠãéçºã«è³ããŸã§ã®éçšã¯æ¡çšNoteã«æ²èŒããŠããŸãã®ã§ããèå³ãããæ¹ã¯ãã¡ããã芧ãã ããã ãã®èšäºãéããŠäŒãããããš ç§ããã®åãçµã¿ãéããŠæ°ã¥ããããšãçããã«ãäŒããããããšã¯ä»¥äžã®3ã€ã§
æäœæ¥ããéã«åããªããã ããAIã§äœããç°å¢ãæŽãã ã©ãïŒSlidev ãš Claude Code ã§ã¹ã©ã€ããéç£ããŠãéŸã¡ããã§ãã ããæè¿ãã»ããšã«ã¹ã©ã€ãã°ã£ããäœã£ãŠããã§ãããã»ãããŒãå匷äŒã瀟å
å
±æâŠâŠæ°ã¥ãã°æ¯é±ã©ããã§1æ¬ãæ£çŽãããã1æ1ææäœæ¥ã§ãã¶ã€ã³ããŠãããã©ãèããŠãéã«åããªãã ãªã®ã§ãAIã«äœãããããšã«ããŸããããã ãAIã«äžžæããããšãããŒã³ããã©ãã©ã«ãªããŸããè²ã¯åæã«å¢ããããå€ãªã°ã©ãã¯æ¹§ããããã©ã³ããæ°åã§å€ãããããã£ãœãèŠãããã§ããããã®ãŸãŸäœ¿çšããããšã¯ã§ããªãã§ããã ããã§ã AIããã€ãåãããŒã³ã§äœããããã«ãç°å¢ã®ã»ããæŽåããŸãã ãè²ã»ã¬ã€ã¢ãŠãã®åã»ãã䜿ãéšåã»äœã£ãŠããç¯å²ã®ã«ãŒã«ããã®äžåŒã”ã²ãªå”ãšããŠçšæããŠãAIã«ã¯ãã®æ ã®äžã ãã§äœãããããããããæ°èŠäœæãã°ããšã©ã¯ã«ãªã£ãŠããããæ¯åããŒã³ãæããŸããæããšããããã æãããã«èšå®ãã ããæ£ç¢ºã§ããã ãã®èšäºã§ã¯ããã® ã²ãªåïŒã³ãŒãäžåŒïŒã«ãŒã«ãæžãã CLAUDE.md ïŒãäžžããšå
¬éããŸã ãAIã«ããã°èªã¿èŸŒãŸããã°ãããªãã®ã¹ã©ã€ãã«ãåãã·ã¹ãã ããŸãã£ãšå®è£
ã§ããŸããæã¡åž°ã£ãŠãã䜿ãã圢ã«ããŸããã äžã®ãããªãã®ããµã¯ããšäœãããšãã§ããŸãã åæïŒAIãšçžæ§ã®ããç°å¢ïŒSlidev æ¬é¡ã«å
¥ãåã«ãåæã ãå
±æãããŠãã ããã åãã¹ã©ã€ããäœã£ãŠãã®ã¯ã Slidev ã£ãŠããŒã«ã§ãããã£ããèšããšã Markdown ã§ã¹ã©ã€ããæžããããŒã« ã1æã®ã¹ã©ã€ãããç»åã§ããã¯ãã®ãªããžã§ã¯ãã§ããªãã äžžããšã³ãŒãïŒããã¹ãïŒ ã«ãªããŸãã ã§ãã¹ã©ã€ããäžžããšããã¹ãã ãšãããããããšãç¶ããŸãããªãã§ãæ¬åœã¯ããã¡ã°ãäžã® AI ãšã®çžæ§ ã§ãã AI ãšã®çžæ§ãæçŸ€ ïŒ äžèº«ã MarkdownïŒããã¹ãïŒã ãããAIïŒClaude CodeïŒã«èªãŸããã®ãæžãããã®ãæãã®ãŸãŸããããããã®èšäºã®ãAIã«ã¹ã©ã€ããéç£ãããããæãç«ã€ã®ã¯ããããããããã§ãã Git ã§ç®¡çã§ãã ïŒ å·®åãå±¥æŽãæ®ããŠãæ®éã®ã³ãŒããšåãããªã§ããŒãžã§ã³ç®¡çã»ã¬ãã¥ãŒãã§ããã ããã³ããšã³ãã®æèŠã§äœãã ïŒ ã¬ã€ã¢ãŠããéšåã Vue ã³ã³ããŒãã³ã ãšããŠæžããã®ã§ãWeb ãäœãã®ãšåãããªãäžåºŠçµãã éšåã¯äœ¿ãåããããåã£ãèŠãæ¹ãã§ããŸãïŒããã³ããšã³ãã«æ
£ããŠã人ã»ã©ãããããã¿ãåããã¯ãïŒã ãã¶ã€ã³ãã³ãŒãã§çžãã ïŒ è²ããµã€ãºãäœçœããCSS 倿°ã§äžå
管çã§ããã ãããŠããã®èšäºã§ããããæãã®ã¯ãäž»ã«ãã®äžã®ã»ã ââ ã¬ã€ã¢ãŠããšéšåã Vue ã§çµãã§ãè²ããµã€ãºã倿°ã§çžãããããå
šéšã”ã¹ã©ã€ãïŒããã¹ã”ã ããæç«ãã話ã§ãããã¯ãã Google ã¹ã©ã€ãã ãšãããã¯ãããŸããã ãªã®ã§ãããããéããŠèŠãã4é建ãŠïŒ style.css / layouts/ / components/ / CLAUDE.md ïŒã¯ã ãŸãããš Slidev ãããžã§ã¯ãã®äžèº« ã§ããåäœç°å¢ã¯ Slidev v51 ç³» / Vue 3 / UnoCSSïŒSlidev æšæºå梱ïŒã ãããŠããäžæ¹ã®åæããAI åŽã«äœ¿ã£ãŠã Claude Code ã§ãããšã¯ããèã¯ã AI ã«ã«ãŒã«ãæžãããã¡ã€ã«ãæž¡ã ããšããèãæ¹ã®ã»ãã§ãClaude Code å°çšã®è©±ã§ã¯ãããŸããã CLAUDE.md ãšããååã¯ãClaude Code ããã®ãã¡ã€ã«ãèªåã§èªã¿èŸŒãã§ãããããä»ããŠãã ããä»ã® AI ã³ãŒãã£ã³ã°ããŒã«ã§ããã«ãŒã«ãèªãŸããå Žæã«çœ®ããªããããã³ããã«è²Œããªãããã°ãåãããã«å¹ããŸãã ïŒSlidev ã®ã»ããã¢ãããã®ãã®ã¯ 第1éš ã«æžããã®ã§ãããããã Slidev ã£ãŠïŒããšãã人ã¯ãã¡ããããïŒ ãã¶ã€ã³ã·ã¹ãã ã¯4é建㊠â ããŒã¯ã³ã»åã»éšåã»ã«ãŒã« ã§ããã®æŽåããç°å¢ã®äžèº«ãããã§ãã”ã²ãªå”ã£ãŠèšããšãã¯ããšããŠãŸããã©ãæ§æãšããŠã¯4é建ãŠã«ãªã£ãŠãŸãã 1éïŒ ããŒã¯ã³ ïŒ style.css ïŒïŒè²ã»ãµã€ãºã»äœçœã倿°ã§æ±ºãããæ ã 2éïŒ å ïŒ layouts/ ïŒïŒç¹°ãè¿ãã¬ã€ã¢ãŠãã®æ§é 3éïŒ éšå ïŒ components/ ïŒïŒç¹°ãè¿ãããŒã 4éïŒ ã«ãŒã« ïŒ CLAUDE.md ïŒïŒäžã®3ã€ãã©ã䜿ããã®äœæ³ ããŒã¯ã³ã®äžã«åãä¹ã£ãŠãåã®äžã«éšåãä¹ã£ãŠããã®å
šéšã4éã®ã«ãŒã«ãæããŠããäžããäžãŸã§åã¿åã£ã1ã»ãããªãã§ãããã ããäžžããšæã£ãŠãããããåŸããè¶³ããŠè²ãŠãããã é çªã«èŠãŠãããŸãããããŸãã¯å®ç©ããã ãŸãå®ç©ãèŠãïŒããŒã¯ã³ â å â éšå çå±ã¯åŸåãã§ããŸã1ã3éãå®ç©ã§èŠãŠãããŸããæ²èŒããã³ãŒãã¯ã©ããèŠç¹ãæããæå°çã§ãïŒå®ç©ã¯ã¯ã©ã¹ã props ãããå°ãä»ããŠãŸãããèã®éšåã¯åãïŒããã³ããããããŸãããã ã³ãŒãã¯ã©ãããPNG ãšã¯ã¹ããŒããŸã§å®éã«ç¢ºèªãããã®ã§ãã è²ãšãµã€ãºã決ããïŒstyle.css ã®ããŒã¯ã³ïŒ 1éã¯åå°ãè²ã»ãµã€ãºã»äœçœããããã¶ style.css ã® :root ã« å€æ°ïŒããŒã¯ã³ïŒ ãšããŠçœ®ããŸããã¹ã©ã€ãåŽã§çã® #C2410C ã¿ãããªå€ãçŽæ¥æžãããšã¯ãããäžåããªããå¿
ããã®å€æ°ãçµç±ããã /* style.cssïŒè²ã»ãµã€ãºã»äœçœãã倿°ãã§äžç®æã«éããïŒãããåå°ã®å
šéšïŒ */ :root { /* ãã©ã³ãè² */ --navy-900: #0B1F3A; /* ã¡ã€ã³ã®æ¿ããã€ã㌠*/ --navy-700: #1B3357; --navy-300: #93A8C4; --bg-white: #FFFFFF; --bg-light: #F6F8FB; --text-primary: #1E293B; --text-secondary: #475569; --text-muted: #64748B; --accent: #C2410C; /* æããæ±ã匷調ã¯ãã®1è²ã ã */ --accent-soft: rgba(194, 65, 12, 0.10); --border-light: #E2E8F0; /* Notice çšã®ãæå³ã®è²ã */ --info: #1D4ED8; --info-bg: #EFF4FF; --warning: #B45309; --warning-bg: #FFF7ED; --success: #15803D; --success-bg: #ECFDF3; --danger: #B91C1C; --danger-bg: #FEF2F2; /* ã³ãŒã衚瀺ïŒãã€ããŒå°ãæå°ã¯æ±ãæ²ãã®ã§æè²ãå¥å»ºãŠïŒ */ --code-bg: var(--navy-900); --code-bar: var(--navy-700); --code-text: #E8EEF6; --code-comment: #93A8C4; --code-accent: #FFB27A; /* ãµã€ãºã»äœçœ */ --font-body: 20px; /* æ¬æã19px ã¯äžåããªã */ --font-lead: 24px; --font-heading: 35px; --space-sm: 8px; --space-md: 16px; --space-lg: 24px; } ãã®ããã§ãå
šã¹ã©ã€ãå
±éã®ãå°ããäžåºŠã ãåœãŠãŠãããŸãããã©ã³ãã»èæ¯ã»æ¬æãµã€ãºã¿ãããªãã©ã®ã¹ã©ã€ãã§ãå¿
ãå¹ããŠã»ãããã€ã§ããã /* å
šã¹ã©ã€ãå
±éã®ãå°ãã.slidev-layout ã«äžåºŠã ãåœãŠã */ .slidev-layout { font-family: 'Noto Sans JP', sans-serif; background: var(--bg-white); color: var(--text-primary); font-size: var(--font-body); line-height: 1.6; } ãµã€ãºæã®ç®å®ã¯ãæ¬æã¯æäœ 19pxïŒ --font-body 㯠20px ã§éçšïŒãæåœ±ã¡ã€ã³ãªã 24px ããããŸã§äžãããããã®1æ¬ã ãæ±ºããŠããã°ãããšã¯ãã¬ãŸããã ã€ãŸã”èªç±ã«éžã°ããªãïŒçšæããäžããéžã°ãã”ã«åãããã§ãã ãã®ãè²ãšãµã€ãºã倿°ã§çžããèãæ¹ãã®ãã®ã¯ 第3éš ã§ã¿ã£ã¡ãæžããã®ã§ãããã§ã¯å®ç©ã ããèŠã¯ã 䜿ãè²ãšãµã€ãºãããã§ç¢ºå®ãããŠãããšã¯éžã¶ã ãã«ãã ã£ãŠããšã§ãã åãããããïŒlayouts/ïŒ 2éã¯ã¬ã€ã¢ãŠãã®ãåããç¹°ãè¿ãæ§é ã layouts/ ã«çœ®ããŠãã¹ã©ã€ããã㯠layout: åå ã§åŒã¶ã ãã«ããŸãã ããã§åãã²ãšã€ã ãæ±ºããŠãã«ãŒã«ããããŸãã æ§é ãåçŽãªã UnoCSS ã®ãŠãŒãã£ãªãã£ã ãã§æžãïŒãããåºå®ã¿ããã«æ§é ãè€éãªã <style> ã§æ§é CSSãæžã ããã®äœ¿ãåã1æ¬ã§ãã ããšãã°ã瞊äžå€®ããããã¿ãããªåçŽãªãã€ã¯ãUnoCSS ã ãã§å®çµããŸãã <!-- layouts/centered.vueïŒçžŠäžå€®ããããUnoCSS ã ããscoped CSS ãªã --> <template> <div class="slidev-layout h-full flex flex-col justify-center px-14 py-10"> <slot /> </div> </template> äžæ¹ãäžéšã«ããããåºå®ããŠâŠã¿ããã«æ§é ãå
¥ãçµããã€ã¯ãçŽ çŽã« <style> ã§çµãã heading ãš kicker ã props ã§åããŠãæ¬æã¯ <slot /> ã«æµããŸãã <!-- layouts/fixed-header.vueïŒäžéšåºå®ãããïŒæ¬æãè€éãªã®ã§ <style> ã§æ§é ãçµã --> <script setup> defineProps({ heading: String, kicker: String }) </script> <template> <div class="slide-with-fixed-header"> <header class="slide-fixed-header"> <h2 class="header-heading">{{ heading }}</h2> <span class="header-kicker">{{ kicker }}</span> </header> <main class="slide-body"><slot /></main> </div> </template> <style> .slide-with-fixed-header { height: 100%; display: flex; flex-direction: column; } /* äžéšã«åºå®ãã垯ãè²ã¯åœç¶ããŒã¯ã³åç
§ïŒç HEX ã¯æžããªãïŒ */ .slide-fixed-header { height: 64px; background: linear-gradient(90deg, var(--navy-900), var(--navy-700)); color: #fff; display: flex; align-items: center; padding: 0 40px; } /* æ®ããæ¬æã«ãflex:1 ã§é«ããåããïŒçžŠã®äžèº«ãæ±ãããããªã */ .slide-body { flex: 1; padding: 36px 44px; font-size: var(--font-body); } </style> <style> ã§ãããããäžã«åºå®ããŠãæ®ããæ¬æãåããããšããæ§é ãçµãã§ãŸãããããã”éªšæ Œ”ãèŠããã€ã¯ãUnoCSS ã®ã¯ã©ã¹ã䞊ã¹ããã <style> ã§æžããã»ããèŠéãããããããããè€éãªãæ§é CSSãã®äžèº«ã§ãã ã¹ã©ã€ãåŽã¯ãããåŒã¶ã ãã§ãã --- layout: fixed-header heading: ç£èŠã®3æ¬æ± kicker: basics --- éšåã®è²ãããããïŒcomponents/ïŒ 3éã¯ãéšåãã2å以äžåºãŠããããŒãã¯ãVue ã³ã³ããŒãã³ãã«ã㊠components/ ã«çœ®ããŠã <PointCard> ã¿ããã«åŒã¶ã ãã«ããŸãã éšåã§äžçªå€§äºãªã®ã¯ã è²ã ãã¯å¿
ãããŒã¯ã³åç
§ã«ãã ããšãäžãå®ç©ã®ã«ãŒãéšåã§ãããèæ¯ãã©ãã«ã®è²ããçã® HEX ãããªã var(--xxx) ã§æžããŠãã®ãåãããšæããŸãã <!-- components/PointCard.vueïŒscoped CSS ã¯æžãã UnoCSSãè²ã ã var() åç
§ --> <template> <div class="flex flex-col gap-3 rounded-xl bg-white px-6 py-5 border border-[var(--border-light)] shadow-lg h-full"> <!-- ã©ãã«ã®èæ¯è²ããããŒã¯ã³ããéžã¶ã ãïŒæ± or ãã€ããŒïŒ --> <span :class="tone === 'accent' ? 'bg-[var(--accent)]' : 'bg-[var(--navy-900)]'"> {{ label }} </span> <div class="text-[var(--text-primary)]"><slot /></div> </div> </template> ã¹ã©ã€ãåŽã¯ãåãšåãã§ããåŒã¶ã ãããã£ãã® fixed-header ã®æ¬æã grid ã§å²ã£ãŠãããã« PointCard ã䞊ã¹ã1æããããã§ãã --- layout: fixed-header heading: ç£èŠã®3æ¬æ± kicker: basics --- <div class="flex-1 flex flex-col justify-center"> <div class="grid grid-cols-3 gap-6"> <PointCard label="Logs" tone="navy"> ãäœãèµ·ããããã®èšé²ããŸãã¯ãšã©ãŒãã°ã1ãæã«éçŽãã </PointCard> <PointCard label="Metrics" tone="accent"> ãã©ããããããã®æ°å€ãã¬ã€ãã³ã·ã»ãšã©ãŒçã»é£œå床ãç¶ç¶èŠ³æž¬ </PointCard> <PointCard label="Traces" tone="navy"> ãã©ãã§é
ãããã®çµè·¯ããªã¯ãšã¹ãããµãŒãã¹æšªæã§è¿œã </PointCard> </div> </div> ããããŠãããšã éšåã10å20åãšå¢ããŠãè²ãå²ããªã ãæ°ããã«ãŒããè¶³ããŠããå¿
ãåãæ±ã»åããã€ããŒã«ãªãããããã·ã¹ãã ã厩ããªãèãªãã§ããã éšåã¯äžåºŠäœã£ã¡ããã°ãããšã¯äœ¿ãåããã§ããŸããã¡ãªã¿ã«ããããã£ãŠãè¯ãã£ããã¿ãŒã³ãåã»éšåã»ã«ãŒã«ã« 貯ãã ãã£ãŠããèãæ¹èªäœã¯ 第4éš ã§æžãã話ã§ãããã®èšäºã¯ãã®”å®ç©”ãå
šéšéããŠèŠããŠãããšããäœçœ®ã¥ãã§ããã 4éã® CLAUDE.md â çŽ æãâæ¯åããããŠæã¡éã¶â ãããŸã§ã®3éïŒããŒã¯ã³ã»åã»éšåïŒã¯ãåå¥åäœã§å¹ã”çŽ æ”ã§ããã§ãæ£çŽã«å
ã«èšã£ãŠãããšã ãã®çŽ æãAIã¯ãããšçŽ çŽã«äœ¿ã£ãŠãããŸã ïŒã©ã®ãããäžæããã¯ããã®èšäºã®åŸåã§ãããšæå°æªãªå®éšãããŠç¢ºãããŸãïŒã ããã4éã®ã«ãŒã«ã¯äœã®ããã«ããã®ãã ãæ¯åã»èª°ããã£ãŠãã»åãæ ãã«ãããããã ã§ããçŽ æããã£ãŠããæŸã£ãŠãããšAIã¯æ¯åã¡ãã£ãšãã€éããã®ãåºããããšãã©ã”æãã”ã¯ã¿åºãæ¹ãããŸããçµµæåãå
¥ããŠæååããããããæ¬æãã¹ããšå°ãããªã£ãããã«ãŒã«ãšããŠææåããããšã§ç¡èŠããã確ç«ãæžãããŸãã ãã®ã·ã¹ãã ã§ ããã¡ã°ãæã¡éã¶äŸ¡å€ãããã®ãããã®4éã ã§ãã1ã3éã®çŽ æã¯ã”äœ¿ãæ¹”ã®ã«ãŒã«ãäžç·ã«ãªããšããã ã®ãã¡ã€ã«ã®å¯ãéãã«ãªã£ãŠããŸããŸãã ã ããã 1ã3éã®äœ¿ãæ¹ãå
šéšã«ãŒã«ã«ã㊠CLAUDE.md ã«æžã ãSlidev ã®ãããžã§ã¯ãã« CLAUDE.md ã眮ããŠãããšãClaude Code ã¯ãã®ãã£ã¬ã¯ããªã®ãã¡ã€ã«ãè§Šã£ããšãèªåã§èªã¿èŸŒã¿ãŸããã€ãŸãããããAIã«æ¯åææž¡ã”èªçŽæž”ã«ãªãããã§ããïŒããŸãŒã«å
šåã§ç¡èŠããããšãã¯åŸããCLAUDE.mdãåç
§ãããŠèªå·±ä¿®åŸ©ããããããŸãïŒ ã«ãŒã«ã®å
šæïŒãããæž¡ãã ãïŒ äžèº«ã¯ãããªã«é£ãããªãã§ãã1ã3éã§èŠãäœæ³ãããã®ãŸãŸèšèã«ããã ããåºãæãã¿ããŠã仿¹ãªãã®ã§ã åãå®éã«äœ¿ã£ãŠã CLAUDE.md ãå
šæãã®ãŸãŸèŒããŸã ããããã³ããŒããŠèªåã® Slidev ãããžã§ã¯ãã® CLAUDE.md ã«çœ®ãã°ãããã ãã§æ ãå¹ããŸãã # ã¹ã©ã€ãäœæã«ãŒã«ïŒSlidev ãã¶ã€ã³ã·ã¹ãã ïŒ ãã®ãããžã§ã¯ãã®ã¹ã©ã€ãã¯ã**1ã€ã®çµ±äžããããã¶ã€ã³ã·ã¹ãã **ã®å
åŽã ãã§äœãã AIïŒClaude CodeïŒã¯ã¹ã©ã€ããçæã»ç·šéãããšãã**å¿
ã以äžã®ã«ãŒã«ã«åŸã**ããšã ãã®ãã¡ã€ã«ããšæž¡ãã°ãå¥ãããžã§ã¯ãã«ãåãã·ã¹ãã ãç§»æ€ã§ããïŒãããçãïŒã --- ## 0. 倧ååïŒèªç±ã«æžãããªãïŒå¶çŽãéããçãïŒ - è²ã»ãµã€ãºã»äœçœã»ã¢ã€ã³ã³ã**ãã®å Žã§åæã«æ±ºããªã**ãäžã®ããŒã¯ã³ïŒã«ãŒã«ã®äžããã ãéžã¶ã - ãããæãã«ãã§ã¯ãªãã**ãã®æ ã®äžã§**ããéžæè¢ãçµãã»ã©åºåã¯å®å®ããã - è¿·ã£ãã**å¢ãããæžãã**ã匷調ã¯1è²ãã¬ã€ã¢ãŠãã¯æ¢åã®åãåªå
ã ## 1. è²ïŒããŒã¯ã³ïŒ - è²ã¯ `style.css` ã® `:root` ã§å®çŸ©ãã **CSS倿°ã ã**ã䜿ããç HEX ã®çŽæžãã¯**çŠæ¢**ã - å¿
ã `var(--xxx)` çµç±ã§æå®ããïŒUnoCSS ãªã `bg-[var(--accent)]` ã®ããã« arbitrary value ã§åç
§ïŒã - 䜿ããè²ïŒ - èæ¯ïŒ`--bg-white` / `--bg-light` - æåïŒ`--text-primary` / `--text-secondary` / `--text-muted` - ãã€ããŒïŒ`--navy-900` / `--navy-700` / `--navy-300` - 匷調ïŒ`--accent`ïŒæããæ±ïŒ/ `--accent-soft` - 眫ç·ïŒ`--border-light` - ã³ãŒãïŒãã€ããŒå°ïŒïŒ`--code-bg` / `--code-bar` / `--code-text` / `--code-comment` / `--code-accent`ïŒæå°ã¯æ±ãæ²ãã®ã§åŒ·èª¿ã¯æããæ±æ©ã® `--code-accent` ã䜿ãïŒ - **匷調è²ã¯3è²ãŸã§**ãåºæ¬ã¯æ± `--accent` ã®1è²ã§ååãè²æ°ãå¢ãããšãã©ãã倧äºãããæ¶ããã ## 2. ãµã€ãºã»äœçœïŒããŒã¯ã³ïŒ - ãã©ã³ããµã€ãºã¯ `--font-*` ã䜿ãã**æ¬æã¯ `--font-body`ïŒ19px ã¯äžåããªãïŒ**ãæåœ±ã»é
ä¿¡ã§èªããã©ã€ã³ãå®ãã - `--font-body` / `--font-lead` / `--font-heading` - äœçœã¯ `--space-*`ïŒ`--space-sm` / `--space-md` / `--space-lg`ïŒã䜿ããå»ã¿ãæããã - UnoCSS ã䜿ãå Žåã¯æ¢è£œã¹ã±ãŒã«ã«ä¹ã£ãŠããïŒ**æ¬æã¯ `text-xl` 以äžïŒïŒ20pxã`text-lg` 㯠18px ã§äžéå²ãïŒ**ãäœçœã¯ `gap-4` / `p-4` ãªã©ïŒã - è²ã»ãµã€ãºã»äœçœã¯**ãã¹ãŠå€æ° or ãŠãŒãã£ãªãã£çµç±**ãããžãã¯ãã³ããŒã®çŽæžããããªãã ## 3. ã¢ã€ã³ã³ - ã¢ã€ã³ã³ã¯ **Material Icons ã«äžæ¬å**ããïŒ`<span class="material-icons">åå</span>`ã - **çµµæåïŒ🚀✨✅ ãªã©ïŒã¯äœ¿ããªã**ããšã¯ã¹ããŒãïŒPNG/PDFïŒã§æ¶ããã»è±è
åããããã ## 4. åïŒlayouts/ïŒãš éšåïŒcomponents/ïŒ - ç¹°ãè¿ãæ§é ã¯**å**ïŒ`layouts/`ïŒãç¹°ãè¿ãããŒãã¯**éšå**ïŒ`components/`ïŒã«ããŠã`layout:` / ã¿ã°ã§åŒã¶ã - æ°èŠã¹ã©ã€ãã¯**ãŸãæ¢åã®åã»éšåããçµã**ãç¡ããšãã ãæ°ããäœãïŒÂ§7 ã®äœãæ¹ã«åŸãïŒã - ã¬ã€ã¢ãŠãã®å®è£
ã¯**1ã€ã®äœ¿ãåãã«ãŒã«**ã§éžã¶ïŒ - **æ§é ãåçŽ** â `centered.vue` ã®ããã« **UnoCSS ãŠãŒãã£ãªãã£ã®ã¿**ïŒscoped CSS ãæžããªãïŒã - **æ§é ãè€é**ïŒãããåºå®ã»æ¬ææ ãªã©ïŒâ `fixed-header.vue` ã®ããã« **`<style>` ã®æ§é CSS**ã - **ã³ã³ãã³ãæã¯åºæ¬ `fixed-header`ïŒäžéšåºå®ãããïŒã§çµ±äž**ãã課é¡ãããŸãšããçã®ã»ã¯ã·ã§ã³ã heading ã«å
¥ããŠããããŒåããïŒå°å³ã«å¹ãçµ±äžæïŒã - **暪䞊ã³ïŒcolumnsïŒ**ïŒãããä»ãã®äžã§ã®æšªäžŠã³ã¯ fixed-header ã®æ¬æã Tailwind ã® `grid grid-cols-2 gap-10` ã§å²ãããããç¡ãã®å
šé¢2ã«ã©ã ãèŠããšãã ã `two-col.vue`ã`.columns` ã®ãã㪠global ãŠãŒãã£ãªãã£ã¯äœããªãã - 瞊äžå€®ã«äŒžã°ãïŒæ§ content-expandïŒã¯ **Tailwind ã® `flex-1 flex flex-col justify-center`** ã§éãããglobal ã¯ã©ã¹ã«ããªãã - éšåã®è²ã¯**å¿
ãããŒã¯ã³åç
§**ïŒ`bg-[var(--accent)]` çïŒãéšåãå¢ããŠãè²ãå²ããªãããã«ããã - **ãããŒïŒã¹ããããç¢å°ã§ã€ãªãïŒÂ§7 ã®æšå¥šåœ¢ïŒ**ïŒ`PointCard` ã `flex items-stretch gap-3` ã®è¡ã« `flex-1` ã§äžŠã¹ïŒã«ãŒãã¯çé«ã«æããïŒãåã«ãŒãã«ã¯ `card-class="justify-center"` ãæž¡ããŠ**æ¬æã瞊äžå€®å¯ã**ã«ããéã®ç¢å° `<span class="material-icons text-4xl">arrow_forward</span>`ïŒ`items-center` ã§æãïŒãšèŠç·ã®é«ããåããããç¢å°ã¯å°çšéšåãäœãã Material IconsïŒããŒã¯ã³è²ïŒ`text-[var(--navy-300)]`ïŒã§éããïŒç¬èªã®ç¢å°SVGã»çHEXã¯äœ¿ããªãïŒãâ»ã«ãŒãæ¬æã瞊äžå€®å¯ãã«ããªããšãæ¬æãäžå¯ãã®ãšãç¢å°ã ããã«ãŒã瞊äžå€®ïŒããã¹ãããäžã«åãæ®ãããŠèŠããã ## 5. ãã©ãã«æžãããïŒCSS ã®çœ®ãå ŽæïŒ 倿ã¯1ã€ïŒ**ãã©ã®ã¹ã©ã€ãã§ãå¿
ãå¹ããŠã»ãããïŒã** - **å
šã¹ã©ã€ãå
±éã®åå°**ïŒããŒã¯ã³ãããŒã¹ã®ãã©ã³ãã»è²ã»èæ¯ïŒâ `style.css`ã - **ãã®åã»éšåã®äžã ãã®èŠãç®** â ãã® `layouts/` `components/` ã®äžã«éã蟌ããã - **ãã®1æã ã** â ãã®ã¹ã©ã€ãã« `<style>`ïŒåžžã« scopedã»ä»ã«æŒããªãïŒã æžãæ¹ã®äœæ³ïŒ - `style.css` ã®å
±éã¹ã¿ã€ã«ã¯ **`.slidev-layout` ã®é
äžã«æžã**ïŒçŽ ã® `h1 {}` ã¯çºè¡šè
ã¢ãŒãUIã«ãŸã§æŒããïŒã - **`!important` ã¯åºæ¬äœ¿ããªã**ãå¹ããªããšãã¯çœ®ãå Žæã»ç¶æ¿ïŒÂ§6ïŒãçããïŒSlidev çµã¿èŸŒã¿ã®é«åªå
床ã¹ã¿ã€ã«ãšã©ãããŠãç«¶åããç®æïŒåºå®ãããã®èŠåºãçã ããããã«éã£ãŠèš±å®¹ããïŒ ## 6. â
æéèŠã®çœ ïŒèªäœã¬ã€ã¢ãŠã㯠`.slidev-layout` ãç¶æ¿ããªã - çµã¿èŸŒã¿ã¬ã€ã¢ãŠãïŒdefault / two-cols çïŒã¯ããã® template å
ã§ **èªåã§** `class="slidev-layout"` ãä»ããŠããïŒSlidev ãèªåã§ä»ããããã§ã¯ãªãïŒãã ãã `style.css` ã®å
±éã¹ã¿ã€ã«ãå¹ãã - **èªäœã¬ã€ã¢ãŠãã¯èªåã§ `class="slidev-layout"` ãä»ããªããšã`style.css` ã®å
±éã¹ã¿ã€ã«ïŒããŒã¯ã³ã»èŠåºãè²ã»kickerã»ããŒã«ãŒïŒãäžåå¹ããªã**ãèŠåºããçŽ ã®å°ãã黿åã«æ»ãã - 察åŠïŒã©ã¡ããïŒïŒ 1. åã® wrapper ã« `class="slidev-layout"` ãè¶³ãã 2. åã®äžèº«ã UnoCSS ã§å®çµãããïŒå
±éã¹ã¿ã€ã«ã«äŸåããªãïŒã ## 7. AIã£ãœãã®åé¿ïŒå¿
ãå®ãïŒ | ãããã¡ïŒAIã£ãœãïŒ | 代ããã«ãããã | |---|---| | Inter / Poppins ãã©ã³ã | Noto Sans JP ã«å¯ãã | | 玫ãéã®ã°ã©ãèæ¯ | åè²ïŒãã€ããŒ/çœïŒïŒå¿
èŠãªãèããã€ãº | | å®å
šå¯Ÿç§°ãªã¬ã€ã¢ãŠã | ãããšå°ãé察称ã«ïŒscale / opacity ã®å·®ïŒ | | åãã«ãŒãã3ææšªäžŠã³ | ç¢å°ã§ã€ãªããããŒåœ¢åŒã« | | è§äžžã«ãŒãã§å
šé¢ãåãã | ã¬ã€ã¢ãŠããè€æ°çš®é¡äœ¿ãåãã | - **1ã€ã®å³ã»1æã®ã¹ã©ã€ãã«1ã¡ãã»ãŒãž**ãè©°ã蟌ãŸãªãã - é
ä¿¡åãã¯å¯èªæ§æåªå
ïŒæ¬æãåå倧ãããç®å® 24px 以äžïŒã ## 8. ä»äžãïŒå¿
ãïŒ - ã«ãŒã«ã«æžããïŒç»é¢ã§ãã®éãåºãŠãããšã¯éããªãã**æåŸã¯å¿
ã PNG ã«ãšã¯ã¹ããŒãããŠãç»åãç®ã§èŠãŠç¢ºèª**ããã - `cd application/slides && npx slidev export src/<name>/slides.md --format png --per-slide --output src/<name>/export/slide` - 厩ããŠããã §5ã»Â§6ïŒçœ®ãå Žæã»ç¶æ¿ïŒããŸãçãã --- ## ãã®ãããžã§ã¯ãã®çŸç© **ååïŒglobal ã¯ãå°ãã ããæ§é 㯠layouts/ãè£
食㯠components/ã现éšã¯ Tailwind(UnoCSS) ã§éããã** | çš®é¡ | ãã¡ã€ã« | äžèº« | |---|---|---| | å°ïŒglobalïŒ | `style.css` | `:root` ããŒã¯ã³ïŒ `.slidev-layout` ã®å°ïŒfontã»è²ã»èæ¯ã»sizeã»h1ã»ã€ã³ã©ã€ã³codeïŒã ã | | åïŒã¿ã€ãã« | `layouts/title.vue` | ããŒã¯ãã€ããŒã®ããŒããŒã`.slidev-layout` ãä»ããåå
ã§å®çµïŒéããïŒ | | åïŒçžŠäžå€® | `layouts/centered.vue` | UnoCSS ã®ã¿ïŒscoped CSS ãŒãïŒ | | åïŒåºå®ããã | `layouts/fixed-header.vue` | äžéšåºå®ãããïŒæ¬æïŒæ§é CSSïŒãprops `heading` / `kicker` | | åïŒæšªäžŠã³ | `layouts/two-col.vue` | èªäœ two-colïŒUnoCSS gridïŒãæ¬æïŒå·Šã`::right::`ïŒå³ | | çœ ã㢠| `layouts/trap.vue` | ãã㊠`.slidev-layout` ãä»ããªãïŒÂ§6 ã®å®æŒçšïŒ | | éšåïŒèŠåºãã©ãã« | `components/Kicker.vue` | æ±ã®çžŠããŒãslot | | éšåïŒç®æ¡æžã | `components/Points.vue` | æ±ã²ã圢ããŒã«ãŒãslot ã« markdown ãªã¹ã | | éšåïŒNotice | `components/NoticeBox.vue` | `type`ïŒinfo/warning/success/dangerïŒ+ `title` + slotãMaterial Iconã»è²ã¯ã»ãã³ãã£ãã¯ããŒã¯ã³ | | éšåïŒã«ãŒã | `components/PointCard.vue` | `label` / `tone` + slotãè²ã¯ããŒã¯ã³åç
§ | | éšåïŒã«ãŒã«ç®± | `components/RuleBox.vue` | ã«ãŒã«æç€ºããã¯ã¹ãslot | | éšåïŒã³ãŒãããã㯠| `components/CodeBlock.vue` | ãã€ããŒå°ã®ã³ãŒãããã«ã`file` / `lang` propsãè£
食㯠scoped ã§éããè²ã¯ `--code-*` ããŒã¯ã³åç
§ | - **ã³ãŒããããã¯ã¯ `CodeBlock.vue` ã§éãã**ïŒslot ã«çŽ ã® `<pre>` ãå
¥ãã匷調㯠`<span class="c">`ïŒã³ã¡ã³ãïŒ/`<span class="k">`ïŒããŒïŒã®2è²ã ããSlidev ã® ` ``` ` ãã§ã³ã¹ïŒShikiïŒã¯çæè²ïŒéããŒã¯ã³ã®è²ãæ··ããã®ã§ãå°ãæãã³ãŒãæ²èŒã«ã¯äœ¿ããªãã - 暪䞊ã³ïŒ`two-col.vue` ã䜿ãïŒ`.columns` ã®ãã㪠global ãŠãŒãã£ãªãã£ã¯äœããªãïŒã - 瞊äžå€®ã«äŒžã°ãïŒæ§ content-expandïŒïŒ Tailwind ã® `flex-1 flex flex-col justify-center` ã§éããïŒglobal ã¯ã©ã¹ã«ããªãïŒã - è£
食ã®è²ã¯**ãã¹ãŠããŒã¯ã³åç
§**ïŒ`var(--x)` / `bg-[var(--x)]`ïŒãç HEX çŽæžãã¯ããªãã é·ãã§ããã©ããã£ãŠãããšã¯ã·ã³ãã«ã§ãããè²ã¯å€æ°ã ãã»åŒ·èª¿ã¯1è²ã»æ¬æ19pxã»ã¢ã€ã³ã³ã¯ Material Iconsã»ã¬ã€ã¢ãŠãã¯åçŽ=UnoCSS/è€é=æ§é CSSã»éšåã®è²ã¯ããŒã¯ã³åç
§ãããããå
šéš”ãã£ãŠããããšïŒãã¡ãªããš”ãšã㊠å
·äœçã«èšãåã£ãŠã ã ãããããæãã«ããããªããŠããã®æ ã®äžã§ããéžæè¢ãçµãã°çµãã»ã©ãAIã®åºåã¯å®å®ããŸãã ç¹ã«å¹ãã®ããäžã®ã«ãŒã«ã«ãããAIã£ãœãã®åé¿ãã®è¡šãæŸã£ãŠãããšAIãå¯ã£ãŠãã”ãªããããµãæ¹å”ïŒçŽ«éã°ã©ããçµµæåãã«ãŒã3ææšªäžŠã³âŠâŠïŒããå
åãã§åæãããŠå¡ãã§ãŸãããããããã ãã§ãåºåã®”AI補ã£ãœã”ãã¬ã¯ããšæžããã§ããã äžã® CLAUDE.md ã®æ«å°Ÿã«ã¯ãå®ã¯ãä»åŸãã¶ã€ã³ã远å ãããšãã®å®äŸããã³ããéããä»ããŠãããŸããããã¯æ¬¡ã®ç« ã§å®éã«äœ¿ã£ãŠã¿ããã®ã§ãããã§ã¯çããŸããã äœåºŠãã¯ãŸãçœ ã«ã€ããŠã¯ã«ãŒã«åããŠæ°žç¶åãã ã«ãŒã«ãå¹ãã£ãŠè©±ã§ãããããããäŸãäžã€ã Slidev ã«ã¯ãã£ãããªçœ ããããŸãã èªäœã®ã¬ã€ã¢ãŠãã¯ã style.css ã«æžããå
±éã¹ã¿ã€ã«ãèªåã§ã¯ç¶ãã§ãããªã ãã§ãããçš®ãæãããšãSlidev 忢±ã®ã¬ã€ã¢ãŠãïŒ default ã two-cols ïŒã¯ããã®äžã§ class="slidev-layout" ã èªåã§ ä»ããŠãããå
±éã¹ã¿ã€ã«ãå¹ãã ããSlidev ãåæã«ä»ããŠããããããããªããã§ããã ããèªäœã¬ã€ã¢ãŠãããèªåã§ä»ããªããšå¹ããªããä»ãå¿ãããšããã£ããããŒã¯ã³ã§æ±ºããèŠåºãã®è²ããµã€ãºãå
šéšãã£ãœæããŠã èŠåºããçŽ ã®å°ãã黿åã«æ»ããŸã ãé£èŒãéãã§ãã£ãŠããšãå°å³ã«äžçªããããã€ã§ãã ã§ãããã察åŠã¯ã«ãŒã«ã«1è¡æžãã ããã èªäœã¬ã€ã¢ãŠãã«ã¯å¿
ã class="slidev-layout" ãä»ãã ãããã£ãããã§ãAIã¯äºåºŠãšãã®çœ ãèžãŸãªããªããããã£ãŠèŠããç¥èŠãããããã£ãŠã«ãŒã«ã«ç³ãã§ããããã§ããã ãã®ãã¡ã€ã«ãæž¡ãïŒæ ã®å
åŽã«éã蟌ãã èŠããã«ããã®1æã AI ã«æž¡ããŠãããšãåºåãã·ã¹ãã ã®å
åŽã«åãŸãããããªããã ãŸãããšã³ããŒããã°å¥ãããžã§ã¯ãã«ãç§»æ€ã§ãã ãâŠâŠã£ãŠãå£ã§èšãã®ã¯ç°¡åã§ããããæ¬åœã«å¹ãã®ïŒ ã£ãŠããã®ããããããå®éã«è©ŠããŠãããŸãã ã§ãã©ãæã€ã®ïŒ â ããã³ããã§ãè¶³ããã»èšèã§ãåãã ããããã¯å®æŒã§ãããã£ãã® CLAUDE.md ãæž¡ããç¶æ
ã§ãå®éã«ã©ããªããã³ãããæã€ãšãã©ãè¿ã£ãŠããã®ãããè¶³ãããšãåããã®2ã€ãèŠããŸãã è¶³ãïŒæ¢åã·ã¹ãã ã«æ°èŠçŽ ãããã³ããã§è¿œå ãŸãã¯ãè¶³ãããæ¢åã®ãããã«ãæ°ããèŠçŽ ãããã³ããã§è¿œå ãããã¿ãŒã³ã§ãã ããšãã°ãç¢å°ã§ã€ãªããããŒã®ã¹ã©ã€ãã1æè¶³ããŠããšé Œããšããåã¯ããæã¡ãŸãã ãã®ãããã«ãè€æ°ã®ã¹ããããç¢å°ã§ã€ãªãããããŒãã®ã¹ã©ã€ãã1æè¿œå ããŠã - ãŸãåããã£ã¬ã¯ããªã® CLAUDE.md ãèªãã§ããã®ã«ãŒã«ã«å¿
ãåŸãããšã - æ¢åã®åïŒlayouts/ïŒãšéšåïŒcomponents/ïŒã䜿ããããŒã³ã«åãããã - ç¢å°ãã¹ãããã®è²ãããŒã¯ã³ã«åããããç HEX ã®çŽæžãã¯ããªãã - 远å ããã PNG ã«ãšã¯ã¹ããŒãããŠãèŠãç®ã厩ããŠãªããèªåã§ç¢ºèªããŠã - ã«ãŒã«ã«ç¡ãèŠçŽ ã厩ããåºããããã®å Žãã®ãã§çŽãã CLAUDE.md ã«1è¡è¶³ã圢ã§å¯Ÿå¿ããŠïŒïŒè²ãŠãïŒã ããœã¯æåŸã®2è¡ã§ãã ãCLAUDE.md ã«åŸãããšãæåŸã« PNG ã§ç¢ºèªããã»ããã§æ¯åèšã ãããã§æ ããåºãªããªãããåºæ¥äžãããèªåã§ç®èŠãã§ãã¯ãããããã å®éããã§ãããŒãè¶³ããã®ãããã§ããç¢å°ã¯çµµæåãããªã Material Iconsãè²ã¯æ¢åã®ããŒã¯ã³ãã¡ãããšã·ã¹ãã ã®ããŒã³ã«ä¹ã£ããŸãŸè¿œå ãããŠãŸãïŒSlidev æšæºã®ã¢ã€ã³ã³ã¯ Iconify ã§ãããCDN ã1è¡èªãã ãã§èšå®ããã㪠Material Icons ã«å¯ããŠãŸããçµµæåãšéã£ãŠãšã¯ã¹ããŒãã§ãæ¶ããªãã®ã§ïŒã ããäžã€ãé¢çœãã£ã話ããå¥ã®ãšããåã”è¶³ã”ããã³ããã§ãã³ãŒããããã¯ã®ã¹ã©ã€ããè¶³ããŠããšé Œãã ããAIããããŸã®ã«ãŒã«ã«ã¯ã³ãŒã衚瀺ã®è²æå®ãç¡ãã§ããããšæ°ã¥ããŠã CodeBlock.vue ãšããéšåãèªåã§äœãã CLAUDE.md ã«ãã«ãŒã«ãè¶³ããŠãã ãã§ããã ããã蚌æ ããã£ãã® CLAUDE.md ã«æ®ã£ãŠãŸããè²ã®ãšããã«ãã --code-bg / --code-text / --code-accent ïŒæå°ã³ãŒãçšã«æããæ±æ©ãå¥å»ºãŠãããã€ïŒââãããæåããæžããŠãããããªããŠããã®ãšã AI ãè¶³ãããã®ã§ããæç€ºããã®ã¯ãã«ãŒã«ã«ç¡ãèŠçŽ ãåºãã CLAUDE.md ã«1è¡è¶³ããŠãã ããè¶³ããªããã®ã«æ°ã¥ããŠããã®å Žã§åããŠã次ãã䜿ãã圢ã«ããŠããããããããŸãã«”è²ãŠã”ã§ãã åãïŒèªç¶èšèªã«ãŒãã§ã¬ã€ã¢ãŠããåãã ããäžã€ã¯ãåãããäžåºŠåºãŠããã¹ã©ã€ãããèšèã ãã§äœåºŠãäœãæ¿ããŠãããã¿ãŒã³ã§ãã ãããããŒã®ã¹ã©ã€ãããæšªäžŠã³4æã«é·ã説ææãè©°ã蟌ãã§ãŠãæ¥æ¬èªãåèªã®éäžã§æãè¿ããŠè©°ãŸã£ãŠèŠãããã§ãããã§ã CSS ã¯äžåè§Šãã ããããªããã³ããã§äœãæ¿ããŠãããŸããã 7æç®ã®ãããŒãã瞊ç©ã¿ãã¬ã€ã¢ãŠãã«äœãæ¿ããŠãCLAUDE.md ã®ã«ãŒã«ã«åŸããCLAUDE.md èªäœã¯å€æŽããªãããšã - 4ã¹ããããäžããäžãžçžŠã«ç©ããåã¹ãããã¯æšªé·ã®1ãã³ãã - å·Šã«ãçªå·ïŒçãã¿ã€ãã«ããå³ã«èª¬ææïŒå·Šå³ã§åé¢ïŒã暪å¹
ãåºãã®ã§1è¡ã«åãŸãã - ã¹ãããéã¯äžåãç¢å°ã§ã€ãªãã - çŽããã PNG ã§7æç®ãå¿
ãç®ã§èŠãŠã溢ããŠãªãã確èªããŠã 暪䞊㳠â 2Ã2ã«åé¢ â 瞊ç©ã¿ããšæ®µéçã«åããããã§ãããå
šéš èªç¶èšèªã®ããã³ããã ããæã§CSSãæžããç®æã¯ãŒãã§ãã ããããã®éãã£ãšãè²ã¯ããŒã¯ã³ã®ãŸãŸãéšåãæ¢åã®ãŸãŸã æ ã®äžã§åãããŠããããã©ãäœãæ¿ããŠãããŒã³ã厩ããªã ããèšèã ãã§åãããæç«ããã®ã¯ãåå°ã«ã«ãŒã«ããããããªãã§ãããã æ¬åœã«ç§»æ€ã§ããã®ã â CLAUDE.md ã ãã§å»ºãŠçŽããŠã¿ã ãè¶³ããããåãããã¯åãã£ããã§ãäžçªã§ãã䞻匵ã ãã®ã·ã¹ãã ã¯äžžããšå¥ãããžã§ã¯ãã«ç§»æ€ã§ãã ã£ãŠãã€ãããã¯æ¬åœãªã®ããã¡ãã£ãšæå°æªãªå®éšãããŠã¿ãŸããã ããæ¹ã¯ããã æ°ãã Claude Code ã®ã»ãã·ã§ã³ã«ã CLAUDE.md ã ããæž¡ã ãããŒã¯ã³ãåãéšåãããææ¬ã«ãªãæ¢åã®ãããããäžåèŠããªãããã®ããã§ãGit ãã©ã³ãæŠç¥ã®å
¥éã¹ã©ã€ãããå¥ã®ãã©ã³ãè²ã§äžããäœã£ãŠããšé Œããã«ãŒã«ã ããé Œãã«ããŒããã建ãŠããããïŒãšããå®éšã§ãã å
ã«èšã£ãŠãããšãã¬ãã¬ãã«çµ±å¶ããå®éšãããªã”ãã£ãŠã¿ãèšé²”ã§ãïŒå1åãã€ïŒããã ä»åã¯ãã«ãŒã«ãæž¡ããçãš ã«ãŒã«ãäžåæž¡ããªãã察ç
§ãç ã®äž¡æ¹ãåããã®ã§ãã«ãŒã«ãæ¬åœã«å¹ããŠãã®ãã»ã©ãã«å¹ããŠãã®ããããããšããããªèŠããŸãããé çªã«ãããŸãã CLAUDE.md ãæž¡ããããå¥ãã©ã³ãã®ãããã建ã£ã å®éã«æããã®ãããã®ããã³ããã§ããã ãææ¬ã絶察ã«èŠã㪠ããšå¿µæŒãããŠãã®ãããœãããã§ãç䌌ããããæã£ããã®éãéãå¡ãã§ãŸãã application/slides/src/git-branching/ ã«ãSlidev ã®ãããããäžãããäœã£ãŠã»ããã - ãã®ãã£ã¬ã¯ããªã«ã¯ CLAUDE.md ã ãã眮ããŠããããŸããããèªã¿ãå¿
ãåŸãããšã - style.css / layouts/ / components/ / slides.md ã¯ãŸã ç¡ããCLAUDE.md ã®ã«ãŒã«ã«æ²¿ã£ãŠèªåã§æ°èŠã«äœãã - â
éèŠïŒä»ã®ãããïŒç¹ã« blog-design-system/ïŒã® style.cssã»layoutsã»components 㯠絶察ã«éããªãã»åç
§ããªããæå
ã® CLAUDE.md ã ããå¯äžã®æ ¹æ ã«ããããšã - ãã©ã³ãè²ã¯å
ïŒãã€ããŒïŒæ±ïŒãšã¯å¥ç³»çµ±ã«ããïŒäŸïŒããŒã¯ã°ãªãŒã³ïŒæããç¥çïŒã ç HEX ã眮ãã®ã¯ style.css ã® :root ã ããå©çšåŽã¯ var() åç
§ã - 顿ã¯ãGit ãã©ã³ãæŠç¥å
¥éããã¿ã€ãã« / ã¢ãžã§ã³ã / èª²é¡ / æ¯èŒã«ãŒã / Notice / ã³ãã³ãäŸ / å°å
¥ãã㌠/ ãŸãšã ãå«ã 6ã8 æã - ã§ããã PNG ã«ãšã¯ã¹ããŒãããŠã厩ããŠãªããèªåã§ç¢ºèªããŠã - ã«ãŒã«ã«ç¡ãèŠçŽ ã厩ããåºããããã®å Žãã®ãã§çŽãã CLAUDE.md ã«1è¡è¶³ã圢ã§å¯Ÿå¿ããŠïŒïŒè²ãŠãïŒã çµæããèšããšã 建ã¡ãŸãã ã æž¡ããã®ã¯ CLAUDE.md 1æã ãããªã®ã«å¥ã»ãã·ã§ã³ã®AIã¯ã style.css ã®ããŒã¯ã³ãèªåã§å®çŸ©ãçŽããŠïŒãããè²ã¯å
ã®ãã€ããŒïŒæ±ãããªããã¡ãããšå¥ç³»çµ±ã®ããŒã¯ã°ãªãŒã³ïŒç¥çã«ããŠïŒãã¬ã€ã¢ãŠãã®åãéšåãçœçŽããçµãã§ã8æã®ããããäœãäžããŸããã è²ã顿ãå¥ç©ãªã®ã«ãã§ãããã£ããã®ã¯ãåããã¶ã€ã³ã·ã¹ãã ã®è²éãçãã«ããèŠããªããã¶ã€ã³ãåºãŠããŸããã䞻芳ã ãã ãšåŒ±ãã®ã§ãæ°ããããäºå®ã§èšããšãããã§ãã ãã©ã³ãè²ã¯å¥ç³»çµ±ã«æ¯ãããŠãïŒå
#0B1F3A ïŒ #C2410C â ããŒã¯ã°ãªãŒã³ïŒç¥ç #102a1d ïŒ #b07d24 ïŒ ç HEX ã®çŽæžã㯠style.css ã® :root å®çŸ©ä»¥å€ãŒããå©çšåŽã¯å
šéš var() åç
§ åºå®ãããã»åŒ·èª¿1è²ã»ç¢å°ãããŒã»æå°ã®ã³ãŒãããã«ãšãèŠåŸã¯ãã®ãŸãŸåçŸ 8æãã¹ãŠ PNG åããŠåŽ©ããªã ãææ¬ã®ãããã¯äžåèŠããŠãªãã®ã«ãã§ãã ãæ¬åœã«èŠãŠãªãã®ïŒããè£åãããŸãããClaude Code ã®æäœãã°ã§å
ãããïŒ blog-design-system ïŒãäžåºŠãéããŠãªãããšã確èªããããã§ãããŒã¯ã³ã®å€ãã¬ã€ã¢ãŠãã®å®è£
ãå
ãšã¯å¥ç©ïŒã¯ã©ã¹åãææ³ãéãïŒãªã®ãç
§åæžã¿ãç䌌ãããããªããã«ãŒã«ããç¬ç«ã«å»ºãŠããã§ãã ã«ãŒã«ç¡ããšæ¯ã¹ãã â çŽ ã® Claude ã¯äœç¹ã ãããéã«ã ã«ãŒã«ãäžåæž¡ããªãã£ãã ã©ããªãã®ãããŸã£ãããªã»ãã·ã§ã³ã«ã CLAUDE.md ãããŒã¯ã³ãäœãæž¡ããããGit ãã©ã³ãæŠç¥ã®ã¹ã©ã€ããããæãã«äœã£ãŠããšã ãé Œãã§ã¿ãŸããïŒãã£ããšåã顿ã§ïŒã ããããããã£ããäžæããã§ãããæ£çŽã³ã£ããããŸããã è²ã¯é Œãã§ãªãã®ã« CSS倿°ïŒããŒã¯ã³ïŒå ããŠããç HEX ã®çŽæžãã¯ã»ãŒç¡ã ã«ãŒã3æäžŠã³ã§çµããããã ç¢å°ãããŒãèªåãã䜿ã£ãŠã ã¬ã€ã¢ãŠããéšåãèªåã§åã£ãŠãèŠãç®ã¯ã¡ãããšããã£ãœã ã€ãŸãããã®èšäºã§ãã«ãŒã«ã®ãããããšæã£ãŠãäœæ³ã®ããªãã®éšåã¯ã Claude ãçŽ ã§ãããŸã ãããã¯æ£çŽã«èªããŸããClaude Codeãå°åãé«ãã ã§ããã«ãŒã«ç¡ãã ãš å°ãããšããã§è»¢ã¶ ãã§ããã çµµæåã䜿ã£ãŠè±è
ïŒâ¡ïŒå ããŠãããã©ã³ãã«ç¡ãã°ãªãã§æååãããŠãåŸããèªåã§çŽããã¡ã«ïŒã«ãŒã«ãããã°æåãã Material Icons ã«å¯ããŠåé¿ïŒ æ¬æã« 0.6ã0.8rem ã®å°ããããåãæ£åš ãæåœ±ãããèªããªããã€ïŒ19px äžéã«ãŒã«ãé²ãïŒ èªäœã¬ã€ã¢ãŠãã« class="slidev-layout" ãä»ããŠãªãã£ã ãå
±éã¹ã¿ã€ã«ã .slidev-layout ã«çœ®ããŠãã®ã«ãã§ããä»åã¯ããŸããŸèªåã®ã¹ã¿ã€ã«ã§é ããŠããã©ãäžæ©ééããã°èŠåºããæ»ã¬ããã£ãã®ç¶æ¿ã®çœ ãã®ãã®ïŒãèªäœã¬ã€ã¢ãŠãã« class ãä»ãããã«ãŒã«ãæç€ºã§æœ°ããã€ïŒ èŠããã«ãäœæã ãšã çŽ ã® Claude ã 80ç¹ããããã«ãŒã«ãããã 90ã95ç¹ã«åŒãäžããŠãæ¯åããã«æã æãã§ãããŒãããå質ãçãéæ³ãããªãã “æããå°ããªèºã”ãå
åãã§çžã ãã®ãªãã§ãããããããçŽ ã®80ç¹ã¯ äžåãã£ããã»èªå·±æµ ã§ã次ã®ããããåã80ç¹ã«ãªãä¿èšŒã¯ãªãããããŒã ã®ä»ã®äººãåãããŒã³ã«ãªãä¿èšŒããªãã æ¯åã»èª°ã§ãã»åãå質 ã«ããŠããããäžžããšç§»æ€ã§ããããã«ããããããã«ãŒã«ã®æ¬åœã®å€æã¡ã§ãã ã«ãŒã«ã1è¡çŽããšãå
šããããåæã«çŽã ããŸãã«ãã·ã¹ãã ãæã€ããšã®äžçªã®ããŸã¿ã宿Œã§ããŸããã å®ã¯éäžã§ãåã CLAUDE.md ã«æžãããç¢å°ãããŒã®äœæ³ãã«ã¡ãã£ãšãããã°ããã£ããã§ãããç¢å°ãã«ãŒãã®æ¬æããäžã«ãºã¬ããã£ãŠãã€ãã§ãããã å
ã®ããããšãç§»æ€å
ã®ããããäž¡æ¹ã«äŒæããŠã ãã³ããŒã§äžå
·åãäžç·ã«åºãŸããã£ãŠãã€ã§ããã ã§ãçŽãã®ã¯ç°¡åã§ããã°ã£ãŠãã®ã¯”ã«ãŒã«ã®1è¡”ãªã®ã§ã ãããçŽããŠåãããã«åæ ããã ã ãã¹ã©ã€ãã1æãã€çŽããŠåãå¿
èŠããªããçŽãã¹ãå Žæãã«ãŒã«ã«1ãæãã£ãŠããã®ãããœã§ãããã©ãã©ã«ã¹ã©ã€ããäœã£ãŠãããåã厩ããå
šéšã®ã¹ã©ã€ãã§æäœæ¥ã§æœ°ããã¡ã«ãªãã 1ã€ã®ã·ã¹ãã ã«çµ±äžããŠãããããã§ããèžåœ ãªãã§ããã ãã ãããã¯è£ãè¿ããšæ³šæã§ããã£ãŠã é
ã CLAUDE.md ã«ãã°ããããšãã³ããŒå
å
šéšã«äžç·ã«äŒæãã ããªã®ã§ããã®ã«ãŒã«ãæã£ãŠãã£ããã CLAUDE.md ã«ãæžããŠãããæåŸã«å¿
ã PNG ã§ç®èŠç¢ºèªããå¿ããã«ãã³ããŒã¯äŸ¿å©ã ãã©ãäžå
·åããšã³ããŒããŠãªããã¯èªåã®ç®ã§èŠããã§ãã 1ã€ã«çµ±äžãããããç§»æ€ã§ããŠã»è²ã€ ãã©ãã©ã«äŸ¿å©ãªããŒããéããŠãããã¶ã€ã³ã¯è²ã¡ãŸããã ããŒã¯ã³ïŒåïŒéšåïŒã«ãŒã«ãã1ã€ã®åã¿åã£ãã·ã¹ãã ã«çµ±äžãã ããããããšããããªããŸãã AIã«äœãããŠãæ¯åããŒã³ãæãïŒæãããã«èšå®ããããïŒ å¥ãããžã§ã¯ãã«ãç§»æ€ã§ãããæ®æ®µã¯ããããäžžããšã³ããŒãææª CLAUDE.md 1æã§ã AI ã建ãŠçŽããïŒãã£ãå®éã«è©ŠãããšããïŒ ã«ãŒã«ãçŽãã°ãã³ããŒå
ã®ãããããŸãšããŠçŽãã æã¡åž°ãæ¹ã¯ã·ã³ãã«ã§ãã AIã«ãã¡ãã®ããã°ãèªã¿èŸŒãŸããŠèªåã®ç°å¢ã§åã蟌ãã§ã¿ãŠãã ãã ã style.css ã» layouts/ ã» components/ ããã®ãŸãŸæå
ã«æ®ãã®ã§ãè²ã ãèªåã®ãã©ã³ãã«å·®ãæ¿ããã°ãããåãã·ã¹ãã ãåããŸããåå©çšã®åäœã¯ãã«ãŒã«ããããªããŠãåãå®è£
äžåŒãããããæ¥åžžã®æ¬ç·ã§ãã ãã®ããã§ããã£ãã®å®éšããããã©ãŒã«ããã¯ãèŠããŠãããŸããã ææªã CLAUDE.md ã1æåŒã£è¶ãã ãã§ãå©ãã ãå®è£
ãã¡ã€ã«ãæã¡æ©ããªããŠããã«ãŒã«ããæž¡ãã° AI ãæ®ãã建ãŠçŽããŠãããããããŸã§æ¬è³ªãã«ãŒã«ã«å®¿ã£ãŠãããšãã蚌æã§ããããŸããæ®æ®µã¯ã³ããŒã§éãããããšãªãã°ã«ãŒã«ã ãã§ã建〠ââ ããããäžžããšæã£ãŠããããã®äžèº«ã§ãã ãã1ã€ãç§»æ€ã§ãããŸã§è²ã£ããã®äžåŒïŒlayouts/ components/ styles/ïŒã¯ãSlidev ã® theme ã®ãã£ã¬ã¯ããªèŠçŽãšã»ãŒåãæ§æã§ãããè€æ°ãããžã§ã¯ãã§é
ãããããšãªã£ããšããpackage.json ã1æè¿œå ããã ãã§ theme ãšããŠåãåºããŸããæžãçŽãã¯èŠããŸããã ãtheme ãäœããããšæåããææ°èŸŒãããã䜿ã£ãŠæ°ã«å
¥ã£ããã®ã貯ããŠãäœã£ãŠå£ããŠãç¹°ãè¿ããŠãæåŸã«æ®ã£ããã®ã theme ã«èžçããããšããé çªã®ã»ããé·ç¶ãããŸããtheme ã¯åºçºç¹ãããªããŠãè²ã£ãããšã®çµæãªã®ã§ã ä»å㯔å®ç©”ã®è©±ã«æ¯ãåããŸããããããªãã§ããŒã¯ã³ã§çžãã®ïŒããåã»éšåã»ã«ãŒã«ã«è²¯ããã£ãŠã©ãããããšïŒãã£ãŠãã èšèšææ³ã®ã»ã ã¯ãé£èŒã® 第3éš ïŒãã¶ã€ã³ããŒã¯ã³ïŒãš 第4éš ïŒãã¶ã€ã³ã·ã¹ãã ã®è²ãŠæ¹ïŒã§ãã£ããæžããŠãŸããå®ç©ã§æ°ã«ãªã£ããšãããããã°ããã£ã¡ãèŠããŠã¿ãŠãã ããã ããã§ã¯ãããã¹ã©ã€ãã©ã€ããïŒ ã·ãªãŒãºïŒAIÃã¹ã©ã€ãã¥ãã AIã«äžžæããããå¶çŽãšã«ãŒã«ã§ãæå³ã©ããã®95ç¹ããæ¯åããããŠäœãã·ãªãŒãºã§ãã ã»ããã¢ããããšã¯ã¹ããŒã â æ§æãŒãã§äœã£ãŠé
ã Marp ãš Slidev ã®äœ¿ãåã â Git管çèµ·ç¹ã§ã©ã£ã¡ã䜿ã å®ç©ç·šïŒå
šéšå
¥ãïŒ ïŒç§»æ€ã§ãããã¶ã€ã³ã·ã¹ãã ãäžžããšå
¬é â âããŸãã ãã¶ã€ã³ããŒã¯ã³ç·š â ãªããæ ãã§çžãã®ãïŒå®ç©ç·šã®æ·±æãïŒ ãã¶ã€ã³ã·ã¹ãã ç·š â ãªãåã貯ããŠè²ãŠãã®ãïŒå®ç©ç·šã®æ·±æãïŒ ã芧ããã ãããããšãããããŸãïŒ ãã®æçš¿ã¯ã圹ã«ç«ã¡ãŸãããïŒ åœ¹ã«ç«ã£ã 圹ã«ç«ããªãã£ã 0人ããã®æçš¿ã¯åœ¹ã«ç«ã£ããšèšã£ãŠããŸãã The post Slidev ã®ãã¶ã€ã³ã·ã¹ãã ã CSS倿°ãš CLAUDE.md ã§äœãïŒç§»æ€ãç°¡å first appeared on SIOS Tech Lab .
åç»
該åœããã³ã³ãã³ããèŠã€ãããŸããã§ãã












