1<!DOCTYPE html><html lang="ja"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width"><meta name="theme-color" content="#7B8CFF"><link rel="manifest" href="/brand/manifest.ja.webmanifest"><link rel="icon" href="/favicon.ico" sizes="32x32"><link rel="apple-touch-icon" href="/brand/apple-icon.png"><title>ããã° | hsb.horse</title><meta name="description" content="æè¡ã¡ã¢ãéçºã®ç¥è¦ãã¾ã¨ããè¨äºä¸è¦§ã§ãã"><meta name="robots" content="index,follow,max-image-preview:large"><meta name="googlebot" content="index,follow,max-image-preview:large"><link rel="canonical" href="https://hsb.horse/blog/"><link rel="alternate" type="application/rss+xml" title="hsb.horse RSS" href="https://hsb.horse/rss.xml"><link rel="alternate" hreflang="ja" href="https://hsb.horse/blog/"><link rel="alternate" hreflang="en" href="https://hsb.horse/en/blog/"><link rel="alternate" hreflang="ko" href="https://hsb.horse/ko/blog/"><link rel="alternate" hreflang="x-default" href="https://hsb.horse/blog/"><meta property="og:type" content="website"><meta property="og:title" content="ããã° | hsb.horse"><meta property="og:description" content="æè¡ã¡ã¢ãéçºã®ç¥è¦ãã¾ã¨ããè¨äºä¸è¦§ã§ãã"><meta property="og:url" content="https://hsb.horse/blog/"><meta property="og:site_name" content="hsb.horse"><meta property="og:locale" content="ja_JP"><meta property="og:locale:alternate" content="en_US"><meta property="og:locale:alternate" content="ko_KR"><meta property="og:image" content="https://hsb.horse/brand/og.jpg"><meta property="og:image:secure_url" content="https://hsb.horse/brand/og.jpg"><meta property="og:image:type" content="image/jpeg"><meta property="og:image:width" content="1200"><meta property="og:image:height" content="630"><meta property="og:image:alt" content="ããã° | hsb.horse"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="ããã° | hsb.horse"><meta name="twitter:description" content="æè¡ã¡ã¢ãéçºã®ç¥è¦ãã¾ã¨ããè¨äºä¸è¦§ã§ãã"><meta name="twitter:image" content="https://hsb.horse/brand/og.jpg"><meta name="twitter:image:alt" content="ããã° | hsb.horse">
1<script type="application/ld+json">{"@context":"https://schema.org","@type":"WebSite","name":"hsb.horse","url":"https://hsb.horse","potentialAction":{"@type":"SearchAction","target":"https://hsb.horse/search?q={search_term_string}","query-input":"required name=search_term_string"}}</script>
1<script type="application/ld+json">{"@context":"https://schema.org","@type":"Person","name":"馬ããã¹","alternateName":"mktbsh","description":"Software Engineer in Tokyo, Japan.","url":"https://hsb.horse","sameAs":["https://github.com/mktbsh","https://x.com/hsb_horse","https://instagram.com/hsbhorse","https://bsky.app/profile/hsb.horse","https://note.com/hsb_horse","https://www.youtube.com/@hsb_horse"]}</script>
1<script> 2if (window.location.hostname === 'hsb.horse') { 3 window.dataLayer = window.dataLayer || []; 4} 5</script>
vendor: 85 bytes, line 5
5<script type="text/partytown" async src="https://www.googletagmanager.com/gtag/js?id=
5G-WZ3RT34EZZ
vendor: 11 bytes, line 5
5"></script>
5<script type="text/partytown"> 6if (window.location.hostname === 'hsb.horse') { 7
vendor: 133 bytes, lines 7-10
7window.dataLayer = window.dataLayer || []; 8 function gtag(){dataLayer.push(arguments);} 9 gtag('js', new Date()); 10 gtag('config', '
10G-WZ3RT34EZZ
vendor: 4 bytes, line 10
10');
11} 12</script>
12<script type="application/ld+json">{"@context":"https://schema.org","@type":"CollectionPage","name":"ããã°","description":"æè¡ã¡ã¢ãéçºã®ç¥è¦ãã¾ã¨ããè¨äºä¸è¦§ã§ãã","url":"https://hsb.horse/blog/","inLanguage":"ja","isPartOf":{"@type":"WebSite","name":"hsb.horse","url":"https://hsb.horse"}}</script>
12<link rel="stylesheet" href="/_astro/Layout.C_Dl0_B8.css">
12<script type="module" src="/_astro/page.CmFj6_gu.js"></script>
12<script>!(function(w,p,f,c){if(!window.crossOriginIsolated && !navigator.serviceWorker) return;c=w[p]=Object.assign(w[p]||{},{"lib":"/~partytown/","debug":false});c[f]=(c[f]||[]).concat(["dataLayer.push"])})(window,'partytown','forward');/* Partytown 0.13.2 - MIT QwikDev */ 13const t={preserveBehavior:!1},e=e=>{if("string"==typeof e)return[e,t];const[n,r=t]=e;return[n,{...t,...r}]},n=Object.freeze((t=>{const e=new Set;let n=[];do{Object.getOwnPropertyNames(n).forEach((t=>{"function"==typeof n[t]&&e.add(t)}))}while((n=Object.getPrototypeOf(n))!==Object.prototype);return Array.from(e)})());!function(t,r,o,i,a,s,c,l,d,p,u=t,f){function h(){f||(f=1,"/"==(c=(s.lib||"/~partytown/")+(s.debug?"debug/":""))[0]&&(d=r.querySelectorAll('script[type="text/partytown"]'),i!=t?i.dispatchEvent(new CustomEvent("pt1",{detail:t})):(l=setTimeout(v,(null==s?void 0:s.fallbackTimeout)||1e4),r.addEventListener("pt0",w),a?y(1):o.serviceWorker?o.serviceWorker.register(c+(s.swPath||"partytown-sw.js"),{scope:c}).then((function(t){t.active?y():t.installing&&t.installing.addEventListener("statechange",(function(t){"activated"==t.target.state&&y()}))}),console.error):v())))}function y(e){p=r.createElement(e?"script":"iframe"),t._pttab=Date.now(),e||(p.style.display="block",p.style.width="0",p.style.height="0",p.style.border="0",p.style.visibility="hidden",p.setAttribute("aria-hidden",!0)),p.src=c+"partytown-"+(e?"atomics.js?v=0.13.2":"sandbox-sw.html?"+t._pttab),r.querySelector(s.sandboxParent||"body").appendChild(p)}function v(n,o){for(w(),i==t&&(s.forward||[]).map((function(n){const[r]=e(n);delete t[r.split(".")[0]]})),n=0;n<d.length;n++)(o=r.createElement("script")).innerHTML=d[n].innerHTML,o.nonce=s.nonce,r.head.appendChild(o);p&&p.parentNode.removeChild(p)}function w(){clearTimeout(l)}s=t.partytown||{},i==t&&(s.forward||[]).map((function(r){const[o,{preserveBehavior:i}]=e(r);u=t,o.split(".").map((function(e,r,o){var a;u=u[o[r]]=r+1<o.length?u[o[r]]||(a=o[r+1],n.includes(a)?[]:{}):(()=>{let e=null;if(i){const{methodOrProperty:n,thisObject:r}=((t,e)=>{let n=t;for(let t=0;t<e.length-1;t+=1)n=n[e[t]];return{thisObject:n,methodOrProperty:e.length>0?n[e[e.length-1]]:void 0}})(t,o);"function"==typeof n&&(e=(...t)=>n.apply(r,...t))}return function(){let n;return e&&(n=e(arguments)),(t._ptf=t._ptf||[]).push(o,arguments),n}})()}))})),"complete"==r.readyState?h():(t.addEventListener("DOMContentLoaded",h),t.addEventListener("load",h))}(window,document,navigator,top,window.crossOriginIsolated);;(e=>{e.addEventListener("astro:before-swap",e=>{let r=document.body.querySelector("iframe[src*='/~partytown/']");if(r)e.newDocument.body.append(r)})})(document);</script>
13</head><body class="ds-body"><div class="sticky top-0 w-full z-50"><header class="ds-header-bg h-25 flex w-full flex-col border-b border-white/10 text-white"><!-- Upper Header: 52px --><div class="h-13 flex items-center justify-between px-4"><!-- Left: Site Name --><a href="/" class="flex items-center gap-2 text-xl font-bold tracking-tight"><img src="/_astro/logo.BfjYuCVe_2m1qjO.webp" alt="logo" fetchpriority="high" loading="eager" decoding="async" width="128" height="128" class="size-10 object-cover">hsb.horse</a><!-- Right: Search Icon & User Avatar --><div class="flex items-center gap-4"><a href="/search/" aria-label="æ¤ç´¢" class="ds-icon-button"><svg width="20" height="20" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" aria-hidden="true" viewBox="0 0 24 24"><circle cx="11" cy="11" r="8" /><path d="m21 21-4.3-4.3" /></svg></a><!-- Language Switcher Dropdown --><div class="relative"><button type="button" id="lang-menu-btn" aria-label="è¨èªã鏿" class="ds-nav-button flex items-center gap-1"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><title>Language</title><circle cx="12" cy="12" r="10"></circle><line x1="2" x2="22" y1="12" y2="12"></line><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"></path></svg><span class="uppercase">ja</span><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="mt-0.5"><title>Dropdown</title><path d="m6 9 6 6 6-6"></path></svg></button><!-- Dropdown Menu --><div id="lang-menu" class="ds-menu-surface absolute right-0 top-full z-50 mt-1 hidden w-32 origin-top-right transform transition-all duration-200"><a href="/blog/" class="ds-menu-item text-blue-600 font-medium bg-blue-50/50">æ¥æ¬èª</a><a href="/en/blog/" class="ds-menu-item text-gray-700">è±èª</a><a href="/ko/blog/" class="ds-menu-item text-gray-700">éå½èª</a></div></div><div class="relative"><button type="button" id="user-menu-btn" aria-haspopup="menu" aria-expanded="false" aria-controls="user-menu-menu" class="rounded-full overflow-hidden size-8 bg-gray-200 border border-gray-300 cursor-pointer" aria-label="ã¦ã¼ã¶ã¼ã¡ãã¥ã¼"><img src="/_astro/avatar.3IxvIyEM_Z2r67Eu.webp" alt="avatar" decoding="async" loading="lazy" width="150" height="150" class="size-full object-cover"></button><div id="user-menu-menu" role="menu" class="ds-menu-surface fixed min-w-40 hidden z-50 origin-top-left transform transition-all duration-200 w-44"><a href="/about/me/" role="menuitem" class="ds-menu-item">About</a><div class="my-1 border-t border-gray-100"></div><a href="https://github.com/mktbsh" target="_blank" rel="noopener noreferrer" role="menuitem" class="ds-menu-item">GitHub</a><a href="https://x.com/hsb_horse" target="_blank" rel="noopener noreferrer" role="menuitem" class="ds-menu-item">X</a><a href="https://instagram.com/hsbhorse" target="_blank" rel="noopener noreferrer" role="menuitem" class="ds-menu-item">Instagram</a><a href="https://bsky.app/profile/hsb.horse" target="_blank" rel="noopener noreferrer" role="menuitem" class="ds-menu-item">Bluesky</a><a href="https://note.com/hsb_horse" target="_blank" rel="noopener noreferrer" role="menuitem" class="ds-menu-item">Note</a><a href="https://www.youtube.com/@hsb_horse" target="_blank" rel="noopener noreferrer" role="menuitem" class="ds-menu-item">YouTube</a></div></div>
13<script>(function(){const buttonId = "user-menu-btn"; 14const menuId = "user-menu-menu"; 15const align = "right"; 16const offsetY = 8; 17 18const menuBtn = document.getElementById(buttonId); 19const menu = document.getElementById(menuId); 20 21const closeMenu = () => { 22 if (!menuBtn || !menu) return; 23 menu.classList.add('hidden'); 24 menuBtn.setAttribute('aria-expanded', 'false'); 25}; 26 27const positionMenu = () => { 28 if (!menuBtn || !menu) return; 29 const wasHidden = menu.classList.contains('hidden'); 30 if (wasHidden) { 31 menu.classList.remove('hidden'); 32 menu.style.visibility = 'hidden'; 33 } 34 35 const rect = menuBtn.getBoundingClientRect(); 36 const menuRect = menu.getBoundingClientRect(); 37 let left = rect.left; 38 39 if (align === 'right') { 40 left = rect.right - menuRect.width; 41 } 42 43 left = Math.max(8, Math.min(left, window.innerWidth - menuRect.width - 8)); 44 let top = rect.bottom + offsetY; 45 46 if (top + menuRect.height > window.innerHeight - 8) { 47 top = Math.max(8, rect.top - menuRect.height - offsetY); 48 } 49 50 menu.style.left = `${Math.round(left)}px`; 51 menu.style.top = `${Math.round(top)}px`; 52 53 if (wasHidden) { 54 menu.classList.add('hidden'); 55 menu.style.visibility = ''; 56 } 57}; 58 59if (menuBtn && menu) { 60 menuBtn.addEventListener('click', (event) => { 61 event.stopPropagation(); 62 const isHidden = menu.classList.contains('hidden'); 63 if (isHidden) { 64 menu.classList.remove('hidden'); 65 positionMenu(); 66 menuBtn.setAttribute('aria-expanded', 'true'); 67 return; 68 } 69 closeMenu(); 70 }); 71 72 menu.addEventListener('click', (event) => { 73 const target = event.target; 74 if (target instanceof HTMLElement && target.closest('a')) { 75 closeMenu(); 76 } 77 }); 78 79 document.addEventListener('click', (event) => { 80 const target = event.target; 81 if (!(target instanceof Node)) return; 82 if (!menuBtn.contains(target) && !menu.contains(target)) { 83 closeMenu(); 84 } 85 }); 86 87 document.addEventListener('keydown', (event) => { 88 if (event.key === 'Escape') { 89 closeMenu(); 90 } 91 }); 92 93 window.addEventListener('resize', () => { 94 if (!menu.classList.contains('hidden')) { 95 positionMenu(); 96 } 97 }); 98 window.addEventListener('scroll', closeMenu, true); 99} 100})();</script>
100</div></div><!-- Lower Header: 48px --><div class="h-12 flex items-center px-4 overflow-hidden gap-4"><!-- Mobile Sidebar Toggle (Visible relative to mobile/desktop, logic needed) --><button type="button" id="nav-toggle-btn" aria-label="ããã²ã¼ã·ã§ã³ãåãæ¿ã" class="ds-nav-button hidden"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><title>Menu</title><line x1="4" x2="20" y1="12" y2="12"></line><line x1="4" x2="20" y1="6" y2="6"></line><line x1="4" x2="20" y1="18" y2="18"></line></svg></button><!-- Navigation --><nav class="flex-1 overflow-x-auto overflow-y-visible no-scrollbar"><ul class="flex items-center gap-6 whitespace-nowrap text-sm font-medium text-slate-300 [&_li]:text-white"><li><a href="/">ãã¼ã </a></li><li><a href="/about/me/">About</a></li><li><a href="/blog/">ããã°</a></li><li><a href="/snippets/">ã¹ãããã</a></li><li><a href="/glossary/">ç¨èªé</a></li><li><a href="/tools/">ãã¼ã«</a></li><li><a href="/oss/">OSS</a></li><li><a href="/changelog/">æ´æ°å±¥æ´</a></li><li><div class="relative"><button type="button" id="tags-nav-menu-btn" aria-haspopup="menu" aria-expanded="false" aria-controls="tags-nav-menu-menu" class="inline-flex items-center gap-1 cursor-pointer transition-colors" aria-label="ã¿ã°"><span>ã¿ã°</span><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="mt-0.5" aria-hidden="true"><title>ã¿ã° menu</title><path d="m6 9 6 6 6-6"></path></svg></button><div id="tags-nav-menu-menu" role="menu" class="ds-menu-surface fixed min-w-40 hidden z-50 origin-top-left transform transition-all duration-200"><a href="/tags/" role="menuitem" class="ds-menu-item">ã¿ã°</a><a href="/blog/tags/" role="menuitem" class="ds-menu-item">ããã°ã¿ã°</a><a href="/snippets/tags/" role="menuitem" class="ds-menu-item">ã¹ããããã¿ã°</a><a href="/glossary/tags/" role="menuitem" class="ds-menu-item">ç¨èªéã¿ã°</a></div></div>
100<script>(function(){const buttonId = "tags-nav-menu-btn"; 101const menuId = "tags-nav-menu-menu"; 102const align = "left"; 103const offsetY = 8; 104 105const menuBtn = document.getElementById(buttonId); 106const menu = document.getElementById(menuId); 107 108const closeMenu = () => { 109 if (!menuBtn || !menu) return; 110 menu.classList.add('hidden'); 111 menuBtn.setAttribute('aria-expanded', 'false'); 112}; 113 114const positionMenu = () => { 115 if (!menuBtn || !menu) return; 116 const wasHidden = menu.classList.contains('hidden'); 117 if (wasHidden) { 118 menu.classList.remove('hidden'); 119 menu.style.visibility = 'hidden'; 120 } 121 122 const rect = menuBtn.getBoundingClientRect(); 123 const menuRect = menu.getBoundingClientRect(); 124 let left = rect.left; 125 126 if (align === 'right') { 127 left = rect.right - menuRect.width; 128 } 129 130 left = Math.max(8, Math.min(left, window.innerWidth - menuRect.width - 8)); 131 let top = rect.bottom + offsetY; 132 133 if (top + menuRect.height > window.innerHeight - 8) { 134 top = Math.max(8, rect.top - menuRect.height - offsetY); 135 } 136 137 menu.style.left = `${Math.round(left)}px`; 138 menu.style.top = `${Math.round(top)}px`; 139 140 if (wasHidden) { 141 menu.classList.add('hidden'); 142 menu.style.visibility = ''; 143 } 144}; 145 146if (menuBtn && menu) { 147 menuBtn.addEventListener('click', (event) => { 148 event.stopPropagation(); 149 const isHidden = menu.classList.contains('hidden'); 150 if (isHidden) { 151 menu.classList.remove('hidden'); 152 positionMenu(); 153 menuBtn.setAttribute('aria-expanded', 'true'); 154 return; 155 } 156 closeMenu(); 157 }); 158 159 menu.addEventListener('click', (event) => { 160 const target = event.target; 161 if (target instanceof HTMLElement && target.closest('a')) { 162 closeMenu(); 163 } 164 }); 165 166 document.addEventListener('click', (event) => { 167 const target = event.target; 168 if (!(target instanceof Node)) return; 169 if (!menuBtn.contains(target) && !menu.contains(target)) { 170 closeMenu(); 171 } 172 }); 173 174 document.addEventListener('keydown', (event) => { 175 if (event.key === 'Escape') { 176 closeMenu(); 177 } 178 }); 179 180 window.addEventListener('resize', () => { 181 if (!menu.classList.contains('hidden')) { 182 positionMenu(); 183 } 184 }); 185 window.addEventListener('scroll', closeMenu, true); 186} 187})();</script>
187</li></ul></nav></div></header>
187<script type="module">var e=`navPosition`,t=document.getElementById(`nav-toggle-btn`);function n(n){t&&(n===`right`?t.classList.add(`order-last`):t.classList.remove(`order-last`),localStorage.setItem(e,n))}var r=localStorage.getItem(e)||`left`;r&&n(r);var i=document.getElementById(`lang-menu-btn`),a=document.getElementById(`lang-menu`);i&&a&&(i.addEventListener(`click`,e=>{e.stopPropagation(),a.classList.toggle(`hidden`)}),document.addEventListener(`click`,e=>{let t=e.target;t instanceof Node&&!i.contains(t)&&!a.contains(t)&&a.classList.add(`hidden`)}));</script>
187</div><main class="flex-1"><section class="ds-page">
187<script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"ãã¼ã ","item":"https://hsb.horse/"},{"@type":"ListItem","position":2,"name":"ããã°","item":"https://hsb.horse/blog/"}]}</script>
187<p class="ds-heading-eyebrow">ããã°</p><h1 class="ds-heading-title">ããã°</h1><p class="ds-heading-description">æè¡ã¡ã¢ãéçºã®ç¥è¦ãã¾ã¨ããè¨äºä¸è¦§ã§ãã</p><a href="/blog/tags/" class="ds-action-link">ããã°ã¿ã°</a><ol class="ds-list-stack"><li class="ds-list-card"><time class="ds-list-meta" datetime="2026-07-18T00:00:00.000Z">2026-07-18</time><a href="/blog/header-relay-published/" class="ds-list-title">MV3ã§ã¬ã¹ãã³ã¹ãããã¼ã次ã®ãªã¯ã¨ã¹ãã¸ä¸ç¶ããChromeæ¡å¼µãHeader Relayããå
¬éãã</a><p class="ds-list-description">APIéçºã¨æ¤è¨¼ã®ããã®Chromeæ¡å¼µ Header Relay ãå
¬éãã¾ãããã¬ã¹ãã³ã¹ãããã¼ããå¤ããã£ããã£ãã¦ã以éã®å¯¾è±¡originã¸ã®ãªã¯ã¨ã¹ãã«èªåã§ä»ä¸ããæ¡å¼µã§ããä»çµã¿ã ãèãã¨ç°¡åããã§ãããManifest V3ã«ã¯ãããããããã®ç´ ç´ãªå®è£
ææ®µãæåããåå¨ãã¾ããããã®è¨äºã§ã¯ãä½ã解決ãããã®ãããã®å¶ç´ä¸ã§ã©ãè¨è¨ããããæ¸ãã¾ãã</p><div class="ds-tag-list"><a href="/tags/webext/" class="ds-tag-link">#webext</a><a href="/tags/productivity/" class="ds-tag-link">#productivity</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2026-04-23T00:00:00.000Z">2026-04-23</time><a href="/blog/microcms-cli/" class="ds-list-title">Go ã§ microCMS CLI ãä½ã£ã</a><p class="ds-list-description">管çç»é¢ãéããã«ã¿ã¼ããã«ãã microCMS ã®ã³ã³ãã³ããæä½ã§ãã CLI ãã¼ã«ã Go ã§ä½ã£ããè¤æ°ãµã¼ãã¹ç®¡çã»ã¹ãã£ã³ãã£ãã·ã¥ã»ããã¯ã¢ãããªã©ä¸»è¦æ©è½ã¨ãè¨è¨ã§å¤æãããã¨ãã¾ã¨ããã</p><div class="ds-tag-list"><a href="/tags/go/" class="ds-tag-link">#Go</a><a href="/tags/cli/" class="ds-tag-link">#CLI</a><a href="/tags/microcms/" class="ds-tag-link">#microCMS</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2026-03-13T00:00:00.000Z">2026-03-13</time><a href="/blog/golang-api-server-implementation-guidelines/" class="ds-list-title">Golangã§APIãµã¼ããå®è£
ããã¨ãã®åºæ¬æ¹é</a><p class="ds-list-description">åä¸ãã¤ã㪠+ cobraãOperationä¸å¿ãHTTP/CLIåé¢ãsecure error handlingãgraceful shutdown ã¾ã§ãGoã§APIãµã¼ããæ¸ãã¨ãã®èªåç¨ã®åºæ¬æ¹éãæ´çããã</p><div class="ds-tag-list"><a href="/tags/golang/" class="ds-tag-link">#golang</a><a href="/tags/api/" class="ds-tag-link">#api</a><a href="/tags/architecture/" class="ds-tag-link">#architecture</a><a href="/tags/http/" class="ds-tag-link">#http</a><a href="/tags/graceful-shutdown/" class="ds-tag-link">#graceful-shutdown</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2026-03-12T00:00:00.000Z">2026-03-12</time><a href="/blog/ios-screen-time-api-self-control-app-guide/" class="ds-list-title">iOS ã»ã«ãã³ã³ããã¼ã«ã¢ããªã Screen Time API ã§ä½ãããã®è¨è¨ã¬ã¤ã</a><p class="ds-list-description">NEDNSProxyProviderã®è½ã¨ãç©´ããFamilyControls+ManagedSettingsã®è¨è¨ãShield Extension 2æ¬æ§æãApp Groupã¢ã³ããã¯ãã³ããªããPersonal Teamå¶éã¾ã§ãScreen Time APIã使ã£ãiOSãããã¯ã¢ããªéçºã®å
¨ä½åãã¾ã¨ããã</p><div class="ds-tag-list"><a href="/tags/ios/" class="ds-tag-link">#iOS</a><a href="/tags/swift/" class="ds-tag-link">#Swift</a><a href="/tags/screen-time-api/" class="ds-tag-link">#Screen Time API</a><a href="/tags/familycontrols/" class="ds-tag-link">#FamilyControls</a><a href="/tags/managedsettings/" class="ds-tag-link">#ManagedSettings</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2026-03-12T00:00:00.000Z">2026-03-12</time><a href="/blog/kpop-for-it-engineers/" class="ds-list-title">ITã¨ã³ã¸ãã¢ãèãã¹ãK-POP楽æ²</a><p class="ds-list-description">ITç¨èªããµã¤ãã¼ã³ã³ã»ãããåãå
¥ããããããK-POP5é¸ãaespaã®ã¡ã¿ãã¼ã¹ãNCT DREAMã®ã°ãªãããSTAYCã®ãGPTããªã©ãè¦è¦ã¨ãµã¦ã³ãã§ãã¯ããã¸ã¼ãæããæ¥½æ²ãããã¯ã¢ããã</p><div class="ds-tag-list"><a href="/tags/k-pop/" class="ds-tag-link">#K-POP</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2026-03-12T00:00:00.000Z">2026-03-12</time><a href="/blog/typescript-monorepo-best-practice-2026/" class="ds-list-title">
187TypeScript Monorepo æé©è§£ãæ´çãã 2026å¹´ç</a><p class="ds-list-description">pnpm workspaceãTurborepoãTypeScript Project ReferencesãBiomeãWXT ã®å½¹å²ãæ´çããæ±ç¨ã®ç¡é£è§£ã¨ 4 ããã±ã¼ã¸æ§æã§ã®å®åè§£ãåãã¦ã¾ã¨ããã</p><div class="ds-tag-list"><a href="/tags/typescript/" class="ds-tag-link">#TypeScript</a><a href="/tags/monorepo/" class="ds-tag-link">#Monorepo</a><a href="/tags/pnpm/" class="ds-tag-link">#pnpm</a><a href="/tags/turborepo/" class="ds-tag-link">#Turborepo</a><a href="/tags/biome/" class="ds-tag-link">#Biome</a><a href="/tags/wxt/" class="ds-tag-link">#WXT</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2026-03-11T00:00:00.000Z">2026-03-11</time><a href="/blog/app-group-unlock-handoff/" class="ds-list-title">Shield Extensionããã¡ã¤ã³ã¢ããªã¸ã®ã¢ã³ããã¯ãApp Groupçµç±ã§å®è£
ãã</a><p class="ds-list-description">ShieldActionDelegateããã¡ã¤ã³ã¢ããªãç´æ¥èµ·åãããã¨ã¯ã§ããªããApp Groupã®å
±æã¹ãã¬ã¼ã¸ã«ãã¢ã³ããã¯è¦æ±ããæ¸ãè¾¼ã¿ãã¢ããªå´ã§èªã¿åããã³ããªããã¿ã¼ã³ã®è¨è¨ãæ´çããã</p><div class="ds-tag-list"><a href="/tags/ios/" class="ds-tag-link">#iOS</a><a href="/tags/swift/" class="ds-tag-link">#Swift</a><a href="/tags/managedsettings/" class="ds-tag-link">#ManagedSettings</a><a href="/tags/shieldactiondelegate/" class="ds-tag-link">#ShieldActionDelegate</a><a href="/tags/app-group/" class="ds-tag-link">#App Group</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2026-03-11T00:00:00.000Z">2026-03-11</time><a href="/blog/family-controls-managed-settings-basics/" class="ds-list-title">FamilyControls + ManagedSettings ã§ iOS ã®èªå·±å¶éãããã¯ãè¨è¨ãã</a><p class="ds-list-description">AuthorizationCenterãFamilyActivityPickerãManagedSettingsã®3è¦ç´ ãã©ãçµã¿åãããããããªã¼ããã¹ãã®ãã¡ã¤ã³å
¥åã§ã¯ãªããã¼ã¯ã³ãã¼ã¹è¨è¨ã«ãã¹ãçç±ã¨ããã®å®è£
ã®éª¨æ ¼ãæ´çããã</p><div class="ds-tag-list"><a href="/tags/ios/" class="ds-tag-link">#iOS</a><a href="/tags/swift/" class="ds-tag-link">#Swift</a><a href="/tags/familycontrols/" class="ds-tag-link">#FamilyControls</a><a href="/tags/managedsettings/" class="ds-tag-link">#ManagedSettings</a><a href="/tags/screen-time-api/" class="ds-tag-link">#Screen Time API</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2026-03-11T00:00:00.000Z">2026-03-11</time><a href="/blog/nednsproxyprovider-wrong-choice-for-app-store/" class="ds-list-title">iOSã§ãµã¤ããããã¯ãä½ãã¨ããNEDNSProxyProviderãé¸ãã§ã¯ãããªã</a><p class="ds-list-description">App Storeé
å¸ã®ã»ã«ãã³ã³ããã¼ã«ç³»iOSã¢ããªã§NEDNSProxyProviderã使ããã¨ãæè¡çã»ããªã·ã¼çã«ã©ãåé¡ãªã®ããScreen Time APIã¸ã®ç§»è¡å¤æã«è³ãã¾ã§ã®èª¿æ»ãè¨é²ããã</p><div class="ds-tag-list"><a href="/tags/ios/" class="ds-tag-link">#iOS</a><a href="/tags/swift/" class="ds-tag-link">#Swift</a><a href="/tags/networkextension/" class="ds-tag-link">#NetworkExtension</a><a href="/tags/nednsproxyprovider/" class="ds-tag-link">#NEDNSProxyProvider</a><a href="/tags/screen-time-api/" class="ds-tag-link">#Screen Time API</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2026-03-11T00:00:00.000Z">2026-03-11</time><a href="/blog/personal-team-family-controls-limitation/" class="ds-list-title">Personal Team ã§ã¯ Family Controls ã®å®æ©ãã¹ããã§ããªã</a><p class="ds-list-description">ç¡åã®Personal Teamã¢ã«ã¦ã³ãã§ã¯Family Controls Developmentã¨ã³ã¿ã¤ãã«ã¡ã³ããåå¾ã§ããªããApple Developer Programã¸ã®å å
¥ã宿©ãã¹ãã®åææ¡ä»¶ã«ãªãçç±ã¨å½±é¿ç¯å²ãæ´çããã</p><div class="ds-tag-list"><a href="/tags/ios/" class="ds-tag-link">#iOS</a><a href="/tags/xcode/" class="ds-tag-link">#Xcode</a><a href="/tags/familycontrols/" class="ds-tag-link">
187#FamilyControls</a><a href="/tags/apple-developer-program/" class="ds-tag-link">#Apple Developer Program</a><a href="/tags/30b3-30fc-30c9-7f72-540d/" class="ds-tag-link">#ã³ã¼ãç½²å</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2026-03-11T00:00:00.000Z">2026-03-11</time><a href="/blog/shield-extension-two-targets/" class="ds-list-title">iOS Shield Extension ã¯1æ¬ã§ã¯ãªã2æ¬å¿
è¦ã¨ãã話</a><p class="ds-list-description">ManagedSettingsã§ãããã¯ãè¨å®ããã¨ã表示ãããã·ã¼ã«ãç»é¢ã¯ãAction Extensionã¨Configuration Extensionã®2ã¤ã®å¥ã¿ã¼ã²ããã§æãç«ã£ã¦ãããæ£ããNSExtensionPointIdentifierã¨ããªã³ã·ãã«ã¯ã©ã¹ãæ´çããã</p><div class="ds-tag-list"><a href="/tags/ios/" class="ds-tag-link">#iOS</a><a href="/tags/swift/" class="ds-tag-link">#Swift</a><a href="/tags/managedsettings/" class="ds-tag-link">#ManagedSettings</a><a href="/tags/managedsettingsui/" class="ds-tag-link">#ManagedSettingsUI</a><a href="/tags/shieldactiondelegate/" class="ds-tag-link">#ShieldActionDelegate</a><a href="/tags/shieldconfigurationdatasource/" class="ds-tag-link">#ShieldConfigurationDataSource</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2026-03-07T00:00:00.000Z">2026-03-07</time><a href="/blog/solidjs-best-practices-skill-on-skills-sh/" class="ds-list-title">SolidJSã®ãã¹ããã©ã¯ãã£ã¹ãskills.shã§ã¹ãã«ã¨ãã¦å
¬éãã</a><p class="ds-list-description">Claude Codeã®ã¹ãã«æ©è½ã使ããSolidJSã®ãã¹ããã©ã¯ãã£ã¹ãskills.shã§å
¬éããè¨é²ãdescriptionã®ç²¾åº¦ãããªã¬ã¼ç²¾åº¦ã決ãããã¨ãwith/withoutãã¹ãã§å·®åã確èªããããã»ã¹ã«ã¤ãã¦æ¸ããã</p><div class="ds-tag-list"><a href="/tags/claude/" class="ds-tag-link">#claude</a><a href="/tags/ai/" class="ds-tag-link">#ai</a><a href="/tags/solidjs/" class="ds-tag-link">#solidjs</a><a href="/tags/skills-sh/" class="ds-tag-link">#skills-sh</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2026-03-05T00:00:00.000Z">2026-03-05</time><a href="/blog/2026-02-21-mac-mini-setup/" class="ds-list-title">M4 Mac Miniã»ããã¢ãã</a><p class="ds-list-description">Amazonã®è¬ã»ã¼ã«ã§M4 Mac miniãå®ããªã£ã¦ããã®ã§è²¯ã¾ã£ã¦ãããã¤ã³ãã使ã£ã¦ããã«å¤å¼ããã¦è²·ã£ã¦ãã¾ã£ããNixOSãã¼ã¹ã®ç®¡çãè¦æ®ãã¦è²ã
使¥ããè¨é²ãããã«æ®ãã</p><div class="ds-tag-list"><a href="/tags/mac/" class="ds-tag-link">#mac</a><a href="/tags/setup/" class="ds-tag-link">#setup</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2026-03-05T00:00:00.000Z">2026-03-05</time><a href="/blog/npm-publish-web-stream-extras/" class="ds-list-title">@hsblabs/web-stream-extras ã npm publish ããã¾ã§ã«è©°ã¾ã£ãã¨ããå
¨é¨</a><p class="ds-list-description">æå publish ãã GitHub Actions + npm Trusted Publisher ã¸ã®ç§»è¡ã§å®éã«è¸ãã 失æãæç³»åã§ã¾ã¨ãããprovenance ã® 422ãtag 㨠version ã®é åºãpublish åæ¤è¨¼ã®æ´åã¾ã§ã</p><div class="ds-tag-list"><a href="/tags/npm/" class="ds-tag-link">#npm</a><a href="/tags/github-actions/" class="ds-tag-link">#GitHub Actions</a><a href="/tags/oss/" class="ds-tag-link">#OSS</a><a href="/tags/ci-cd/" class="ds-tag-link">#CI/CD</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2026-03-05T00:00:00.000Z">2026-03-05</time><a href="/blog/web-stream-extras/" class="ds-list-title">@hsblabs/web-stream-extras ããªãªã¼ã¹ãã</a><p class="ds-list-description">ãã©ã¦ã¶ã¨ Node.js ã§ ReadableStream<Uint8Array> ãæ±ãããã®å°ã㪠TypeScript ã¦ã¼ãã£ãªãã£ã©ã¤ãã©ãªããã¤ã夿ãã«ãã¼ããã©ã³ã¹ãã©ã¼ã ã¹ããªã¼ã ãWeb Crypto API ã使ã£ãã¹ããªã¼ã æå·åã¾ã§ã</p><div class="ds-tag-list"><a href="/tags/npm/" class="ds-tag-link">#npm</a><a href="/tags/typescript/" class="ds-tag-link">#TypeScript</a><a href="/tags/oss/" class="ds-tag-link">#OSS</a><a href="/tags/webstreams/" class="ds-tag-link">#WebStreams</a><a href="/tags/webcrypto/" class="ds-tag-link">#WebCrypto</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2026-03-05T00:00:00.000Z">2026-03-05</time><a href="/blog/web-stream-extras-encryption/" class="ds-list-title">Web Crypto ã§ãã¤ãã¹ããªã¼ã ããã©ã¦ã¶ä¸ã§æå·åãã</a><p class="ds-list-description">Web Crypto ã¯å¼·åãªæå·ããªããã£ããæä¾ããããã¹ããªã¼ã åãã®ã¤ã³ã¿ã¼ãã§ã¼ã¹ã¯ãªãã@hsblabs/web-stream-extras ã® encryption ãµããã¹ã使ã£ã¦ ReadableStream<Uint8Array> ãæå·åããæ¹æ³ â ãã¡ã¤ã«æå·åãã¹ããªã¼ã ãã¨ã®éµç®¡çããã¤ãã©ã¤ã³åæã¾ã§ã</p><div class="ds-tag-list"><a href="/tags/typescript/" class="ds-tag-link">#TypeScript</a><a href="/tags/webstreams/" class="ds-tag-link">#WebStreams</a><a href="/tags/webcrypto/" class="ds-tag-link">#WebCrypto</a><a href="/tags/security/" class="ds-tag-link">#Security</a><a href="/tags/oss/" class="ds-tag-link">#OSS</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2026-03-05T00:00:00.000Z">2026-03-05</time><a href="/blog/web-stream-extras-why/" class="ds-list-title">åã Web Streams ã®ãã¤ã©ã¼ãã¬ã¼ããæ¸ãç¶ããã®ã«é£½ãã</a><p class="ds-list-description">ä½åº¦ãæ¸ãç´ãã¦ãã ReadableStream<Uint8Array> ã®ã¦ã¼ãã£ãªãã£ã @hsblabs/web-stream-extras ã«ã¾ã¨ããçç±ãç¹°ãè¿ãæ¸ãã¦ãã3ã¤ã®ãã¿ã¼ã³ãByteTransformStream åºåºã¯ã©ã¹ãWeb Crypto ã使ã£ãã¹ããªã¼ã æå·åã¾ã§ã</p><div class="ds-tag-list"><a href="/tags/typescript/" class="ds-tag-link">#TypeScript</a><a href="/tags/webstreams/" class="ds-tag-link">#WebStreams</a><a href="/tags/webcrypto/" class="ds-tag-link">#WebCrypto</a><a href="/tags/oss/" class="ds-tag-link">#OSS</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2026-02-17T00:00:00.000Z">2026-02-17</time><a href="/blog/aws-cross-region-vpc-peering-peer-region-trap/" class="ds-list-title">AWSã¯ãã¹ãªã¼ã¸ã§ã³VPCãã¢ãªã³ã° 失æãã°</a><p class="ds-list-description">
187大éª-æ±äº¬éã®VPCãã¢ãªã³ã°è¨å®ã§ããã£ãã--peer-regionå¿ãã§failedç¶æ
ã«ãªããåé¤ãã§ããªããªã£ãä»¶ã</p><div class="ds-tag-list"><a href="/tags/aws/" class="ds-tag-link">#aws</a><a href="/tags/vpc-peering/" class="ds-tag-link">#vpc-peering</a><a href="/tags/cross-region/" class="ds-tag-link">#cross-region</a><a href="/tags/troubleshooting/" class="ds-tag-link">#troubleshooting</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2026-02-17T00:00:00.000Z">2026-02-17</time><a href="/blog/cache-control-micro-caching-strategy/" class="ds-list-title">Cache-Control: max-age=3, must-revalidateãèªåãªãã«æ´çãã</a><p class="ds-list-description">ãã¤ã¯ããã£ãã·ã³ã°ã¨å¼ã°ããCache-Controlè¨å®ã®æåãæ´çãmax-age=3ã¨must-revalidateã®çµã¿åããããããã广ãæç³»åã§ã®åä½ããã¼ãå
·ä½çãªã¦ã¼ã¹ã±ã¼ã¹ãã¾ã¨ããã</p><div class="ds-tag-list"><a href="/tags/http/" class="ds-tag-link">#http</a><a href="/tags/cache/" class="ds-tag-link">#cache</a><a href="/tags/performance/" class="ds-tag-link">#performance</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2026-02-14T00:00:00.000Z">2026-02-14</time><a href="/blog/astro-live-editor-implementation/" class="ds-list-title">Astroããã¸ã§ã¯ãã«éçºå°ç¨Liveã¨ãã£ã¿ãå®è£
ãã</a><p class="ds-list-description">Astroã§éçºã¢ã¼ãéå®ã®ãã©ã¦ã¶ã¨ãã£ã¿ãå®è£
ããæ¹æ³ãViteããã«ã¦ã§ã¢ã¨Reactã§ãæ¬çªãã«ãã«ä¸åå½±é¿ãåã¼ããã«ãéçºä¸ã®ã³ã³ãã³ã管çãå¿«é©ã«ããæé ãæ´çã</p><div class="ds-tag-list"><a href="/tags/astro/" class="ds-tag-link">#astro</a><a href="/tags/react/" class="ds-tag-link">#react</a><a href="/tags/typescript/" class="ds-tag-link">#typescript</a><a href="/tags/vite/" class="ds-tag-link">#vite</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2026-02-14T00:00:00.000Z">2026-02-14</time><a href="/blog/mobile-app-metadata-config-approach/" class="ds-list-title">Webã¨ã³ã¸ãã¢ãèããã¢ãã¤ã«ã¢ããªã®è¨å®ç®¡çï¼èµ·åæã¡ã¿ãã¼ã¿åå¾ã¢ããã¼ã</a><p class="ds-list-description">Webããã³ãã¨ã³ãã¨ã¤ã³ãã©ã®çµé¨ãããã¢ãã¤ã«ã¢ããªã®ãã¡ã¤ã³ç®¡çããã¼ã¸ã§ãã³ã°ã®èª²é¡ãæ´çãCloudFront+S3ã«ããèµ·åæã¡ã¿ãã¼ã¿å徿¹å¼ãææ¡ããFirebase Remote Configãªã©ã®æ¢åã½ãªã¥ã¼ã·ã§ã³ã¨ã®æ¯è¼ã交ãã¦èå¯ããã</p><div class="ds-tag-list"><a href="/tags/mobile/" class="ds-tag-link">#mobile</a><a href="/tags/infrastructure/" class="ds-tag-link">#infrastructure</a><a href="/tags/aws/" class="ds-tag-link">#aws</a><a href="/tags/architecture/" class="ds-tag-link">#architecture</a><a href="/tags/app-configuration/" class="ds-tag-link">#app-configuration</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2026-02-07T00:00:00.000Z">2026-02-07</time><a href="/blog/astro-dev-blog-404-directory-collision/" class="ds-list-title">Astro + bun dev ã§ /blog ã 404 ã«ãªãåå ã¨è§£æ±ºæé </a><p class="ds-list-description">Astro + bun dev ã§ /blog ã 404 ã«ãªãåé¡ãããªã³ã¯ç¢ºèªã»ã«ã¼ãçæã»é
ä¿¡çµè·¯ã®é ã§åãåãã¦ããã£ã¬ã¯ããªåè¡çªãåå ã§ãã£ããã¨ãçªãæ¢ããã¾ã§ã</p><div class="ds-tag-list"><a href="/tags/astro/" class="ds-tag-link">#astro</a><a href="/tags/bun/" class="ds-tag-link">#bun</a><a href="/tags/troubleshooting/" class="ds-tag-link">#troubleshooting</a><a href="/tags/routing/" class="ds-tag-link">#routing</a><a href="/tags/i18n/" class="ds-tag-link">#i18n</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2026-02-07T00:00:00.000Z">2026-02-07</time><a href="/blog/codex-cloud-mise-bun-troubleshooting/" class="ds-list-title">Codex Cloudã§miseã®ãã¼ã¸ã§ã³åºå®ãå¹ããªãæã®å¯¾å¦æ³</a><p class="ds-list-description">Codex Cloudã§mise install bunãæåãã¦ãcommand not foundã«ãªãåå ã¨ãsetup.shã§mise use -gã¨mise activateã使ã£ã¦è§£æ±ºããæé ã®è¨é²ã</p><div class="ds-tag-list"><a href="/tags/codex/" class="ds-tag-link">#codex</a><a href="/tags/mise/" class="ds-tag-link">#mise</a><a href="/tags/bun/" class="ds-tag-link">#bun</a><a href="/tags/troubleshooting/" class="ds-tag-link">#troubleshooting</a><a href="/tags/devenv/" class="ds-tag-link">#devenv</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2026-02-06T00:00:00.000Z">2026-02-06</time><a href="/blog/lefthook-introduction-procedure/" class="ds-list-title">lefthookå°å
¥æé : pre-commitã¨pre-pushã§Biomeãèªåå®è¡ãã</a><p class="ds-list-description">lefthook ã使ã£ã¦ãã³ãããæã¨Pushæã« Biome ã®ãã©ã¼ãããã¨ãªã³ããèªåå®è¡ããå°å
¥æé ãæ´çãADR使ããè¨å®ãã¤ã³ã¹ãã¼ã«ãåä½ç¢ºèªã¾ã§ã®æµãã1æ¬ã§è¿½ããã</p><div class="ds-tag-list"><a href="/tags/lefthook/" class="ds-tag-link">#lefthook</a><a href="/tags/git-hook/" class="ds-tag-link">#git-hook</a><a href="/tags/biome/" class="ds-tag-link">#biome</a><a href="/tags/bun/" class="ds-tag-link">#bun</a><a href="/tags/quality/" class="ds-tag-link">#quality</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2026-02-01T00:00:00.000Z">2026-02-01</time><a href="/blog/golang-analyze-deps-included-build-artifacts/" class="ds-list-title">ãã«ãææç©ã«å«ã¾ããä¾åé¢ä¿ã調ã¹ã</a><p class="ds-list-description">Goã§ãã«ãããããã¤ããªã«ã¯ã使ç¨ãããä¾åé¢ä¿ããã«ãè¨å®ã®æ
å ±ãåãè¾¼ã¾ãã¦ããã</p><div class="ds-tag-list"><a href="/tags/golang/" class="ds-tag-link">#golang</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2026-01-26T00:00:00.000Z">2026-01-26</time><a href="/blog/personality-analyzer-skill-for-claude/" class="ds-list-title">Claudeç¨æ§æ ¼åæã¹ãã«personality-analyzerãä½ã£ã話</a><p class="ds-list-description">Claudeã¨ã®ãã£ããå
容ããHEXACOã»MBTIã¹ã³ã¢ãYAMLå½¢å¼ã§åºåããã¹ãã«ã®éçºè¨é²ãAIã¨ã®ä¼è©±ããæ§æ ¼ç¹æ§ãå®éåãã試ã¿ã</p><div class="ds-tag-list"><a href="/tags/claude/" class="ds-tag-link">#claude</a><a href="/tags/ai/" class="ds-tag-link">#ai</a><a href="/tags/personality-analysis/" class="ds-tag-link">#personality-analysis</a><a href="/tags/hexaco/" class="ds-tag-link">#hexaco</a><a href="/tags/mbti/" class="ds-tag-link">#mbti</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2026-01-18T00:00:00.000Z">2026-01-18</time><a href="/blog/age-tar-encrypted-backup/" class="ds-list-title">age-tarã§ãã£ã¬ã¯ããªåä½ã®æå·åããã¯ã¢ãããèªååãã</a><p class="ds-list-description">ageã¨tarãçµã¿åããã¦ããµããã£ã¬ã¯ããªãã¨ã«æå·åã¢ã¼ã«ã¤ããä½ãã·ã§ã«ã¹ã¯ãªãããæ¥æ¬èªãã£ã¬ã¯ããªåãå«ãéç¨ã§ãCLIäºææ§ãä¿ã¦ãã</p><div class="ds-tag-list"><a href="/tags/shell/" class="ds-tag-link">#shell</a><a href="/tags/age/" class="ds-tag-link">#age</a><a href="/tags/encryption/" class="ds-tag-link">#encryption</a><a href="/tags/backup/" class="ds-tag-link">#backup</a><a href="/tags/cli/" class="ds-tag-link">#cli</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2026-01-10T00:00:00.000Z">2026-01-10</time><a href="/blog/uuid-v7/" class="ds-list-title">UUID v7 å®è£
ã¬ã¤ã: JavaScriptã»Goã»Shellã§ä½ã</a><p class="ds-list-description">UUID v7 ã®ãããæ§é ãversion/variant ã®ãããè¨å®ãJavaScriptã»Goã»Shellã§ã®æå°å®è£
ãå®è£
æã
187®ãã§ãã¯é
ç®ãRFCã®åç
§å
ã1ãã¼ã¸ã§æ´çãæç³»åã½ã¼ãããããIDãå®å
¨ã«å°å
¥ãããéçºè
åãã«ãçæãã¸ãã¯ã®ç¢ºèªãã¤ã³ããã¾ã¨ããå®è·µã¬ã¤ããå®è£
åã®ç¢ºèªã«ä½¿ããã</p><div class="ds-tag-list"><a href="/tags/uuid/" class="ds-tag-link">#uuid</a><a href="/tags/javascript/" class="ds-tag-link">#javascript</a><a href="/tags/golang/" class="ds-tag-link">#golang</a><a href="/tags/shell/" class="ds-tag-link">#shell</a><a href="/tags/cli/" class="ds-tag-link">#cli</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2025-12-21T00:00:00.000Z">2025-12-21</time><a href="/blog/glossary-vs-dictionary/" class="ds-list-title">Glossaryã¨Dictionaryã®éããæ´çãã</a><p class="ds-list-description">Glossary(ç¨èªé)ã¨Dictionary(è¾æ¸)ã®éããã対象ç¯å²ãç®çãæ²è¼ãããè¨èã使è
ã®è¦³ç¹ããæ¯è¼æ´çã</p><div class="ds-tag-list"><a href="/tags/terminology/" class="ds-tag-link">#terminology</a><a href="/tags/documentation/" class="ds-tag-link">#documentation</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2025-12-07T00:00:00.000Z">2025-12-07</time><a href="/blog/esbuild-vite-remove-license-comments/" class="ds-list-title">esbuild/Viteã§ã©ã¤ã»ã³ã¹ã³ã¡ã³ãããã³ãã«JSããåé¤ãã</a><p class="ds-list-description">esbuildãViteã§ãã«ãããã¨ãããã³ãã«ãã¡ã¤ã«ã«å«ã¾ããã©ã¤ã»ã³ã¹ã³ã¡ã³ããåé¤ãã¦ãã¡ã¤ã«ãµã¤ãºã忏ããæ¹æ³ã</p><div class="ds-tag-list"><a href="/tags/esbuild/" class="ds-tag-link">#esbuild</a><a href="/tags/vite/" class="ds-tag-link">#vite</a><a href="/tags/optimization/" class="ds-tag-link">#optimization</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2025-12-07T00:00:00.000Z">2025-12-07</time><a href="/blog/wxt-enable-react-compiler/" class="ds-list-title">WXTã§React Compilerãæå¹åããè¨å®æé </a><p class="ds-list-description">WXTãã¬ã¼ã ã¯ã¼ã¯ã§React Compilerãæå¹åããèªåæé©åãè¡ãè¨å®æ¹æ³ãbabel-plugin-react-compilerã®ã¤ã³ã¹ãã¼ã«ã¨è¨å®ãæ´çã</p><div class="ds-tag-list"><a href="/tags/react/" class="ds-tag-link">#react</a><a href="/tags/wxt/" class="ds-tag-link">#wxt</a><a href="/tags/optimization/" class="ds-tag-link">#optimization</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2025-11-28T00:00:00.000Z">2025-11-28</time><a href="/blog/cloudflare-workers-subdirectory-routing/" class="ds-list-title">Cloudflare Workersã§ãµããã£ã¬ã¯ããªãã«ã¼ãã£ã³ã°ããè¨å®æ¹æ³</a><p class="ds-list-description">Cloudflare Workersã§ãµããã£ã¬ã¯ããªé
ä¸ã«Astroããã¸ã§ã¯ãããããã¤ããéã®è¨å®æé ãwrangler.jsonã¨astro.configã®èª¿æ´æ¹æ³ãæ´çã</p><div class="ds-tag-list"><a href="/tags/cloudflare/" class="ds-tag-link">#cloudflare</a><a href="/tags/astro/" class="ds-tag-link">#astro</a><a href="/tags/deployment/" class="ds-tag-link">#deployment</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2025-11-28T00:00:00.000Z">2025-11-28</time><a href="/blog/sh-c-behavior-and-zsh-config-loading/" class="ds-list-title">sh -cã®æåã¨zshè¨å®ãã¡ã¤ã«ã®èªã¿è¾¼ã¿ã«ã¼ã«</a><p class="ds-list-description">sh -cã³ãã³ãã®æåãç°å¢å¤æ°ã®ç¶æ¿ã«ã¼ã«ãshebangã®æå¹æ§ãzshè¨å®ãã¡ã¤ã«(.zshrc, .zshenvç)ãã¹ã¯ãªããå®è¡æã«ã©ãèªã¿è¾¼ã¾ããããæ´çã</p><div class="ds-tag-list"><a href="/tags/shell/" class="ds-tag-link">#shell</a><a href="/tags/zsh/" class="ds-tag-link">#zsh</a><a href="/tags/unix/" class="ds-tag-link">#unix</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2025-11-23T00:00:00.000Z">2025-11-23</time><a href="/blog/typescript-crc32-implementation/" class="ds-list-title">TypeScriptã§CRC32ããã·ã¥ãå®è£
ãã</a><p class="ds-list-description">CRC32ããã·ã¥ã¢ã«ã´ãªãºã ãTypeScriptã§å®è£
ããæé ãã«ãã¯ã¢ãããã¼ãã«ã使ã£ãé«éåææ³ã¨ãå®éã®ä½¿ç¨ä¾ãæ´çã</p><div class="ds-tag-list"><a href="/tags/typescript/" class="ds-tag-link">#typescript</a><a href="/tags/algorithm/" class="ds-tag-link">#algorithm</a><a href="/tags/hash/" class="ds-tag-link">#hash</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2025-11-22T00:00:00.000Z">2025-11-22</time><a href="/blog/biome-disable-unused-warnings-for-frameworks/" class="ds-list-title">Biomeã®æªä½¿ç¨å¤æ°è¦åãAstro/Vue/Svelteãã¡ã¤ã«ã§ç¡å¹åãã</a><p class="ds-list-description">AstroãVueãSvelteãã¡ã¤ã«ã§çºçããBiomeã®æªä½¿ç¨ã¤ã³ãã¼ãã»å¤æ°è¦åããoverridesè¨å®ã§ç¡å¹åããæ¹æ³ã</p><div class="ds-tag-list"><a href="/tags/biome/" class="ds-tag-link">#biome</a><a href="/tags/astro/" class="ds-tag-link">#astro</a><a href="/tags/vue/" class="ds-tag-link">#vue</a><a href="/tags/svelte/" class="ds-tag-link">#svelte</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2025-11-22T00:00:00.000Z">2025-11-22</time><a href="/blog/golang-web-framework-and-tools/" class="ds-list-title">Goã®ç°å¢æ§ç¯ã¡ã¢: Webãã¬ã¼ã ã¯ã¼ã¯ã¨Dev Tools</a><p class="ds-list-description">Goã®éçºç°å¢æ§ç¯æã«èª¿ã¹ãWebãã¬ã¼ã ã¯ã¼ã¯ã¨éçºãã¼ã«ã®ã¡ã¢ãEchoãã¬ã¼ã ã¯ã¼ã¯ã¨Air(Live Reload)ã
187«ã¤ãã¦æ´çã</p><div class="ds-tag-list"><a href="/tags/golang/" class="ds-tag-link">#golang</a><a href="/tags/echo/" class="ds-tag-link">#echo</a><a href="/tags/air/" class="ds-tag-link">#air</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2025-11-22T00:00:00.000Z">2025-11-22</time><a href="/blog/libavif-image-conversion/" class="ds-list-title">libavifã§ç»åãAVIFå½¢å¼ã«å¤æãã</a><p class="ds-list-description">Homebrewã§libavifãã¤ã³ã¹ãã¼ã«ãã¦JPEG/PNGãAVIFå½¢å¼ã«å¤æããæ¹æ³ãã·ã³ã°ã«å¤æã¨ãããå¦çã«å¯¾å¿ã</p><div class="ds-tag-list"><a href="/tags/avif/" class="ds-tag-link">#avif</a><a href="/tags/image/" class="ds-tag-link">#image</a><a href="/tags/macos/" class="ds-tag-link">#macos</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2025-11-22T00:00:00.000Z">2025-11-22</time><a href="/blog/macos-launchd-cron-like/" class="ds-list-title">macOS Launchdã§å®æå®è¡ã¹ã¯ãªãããåãã</a><p class="ds-list-description">macOS Launchdã§Cronã®ããã«æ¯åå®è¡ããã¹ã¯ãªãããæ§ç¯ããæ¹æ³ãç°å¢å¤æ°ã®åé¡ãåé¿ãããã°ç®¡çãå«ããã»ããã¢ããæé ã</p><div class="ds-tag-list"><a href="/tags/macos/" class="ds-tag-link">#macos</a><a href="/tags/launchd/" class="ds-tag-link">#launchd</a><a href="/tags/automation/" class="ds-tag-link">#automation</a><a href="/tags/shell/" class="ds-tag-link">#shell</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2025-11-22T00:00:00.000Z">2025-11-22</time><a href="/blog/zabrze-shell-abbreviation-introduction/" class="ds-list-title">zabrzeã§å§ããã·ã§ã«ç¥èªå±é: zsh-abbrããã·ã³ãã«ãªé¸æè¢</a><p class="ds-list-description">ã·ã§ã«ã®ç¥èªå±éãã¼ã«zabrzeã®å°å
¥æé ã¨ä½¿ãæ¹ãzsh-abbrã®ä»£æ¿ã¨ãã¦ãããã·ã³ãã«ãªè¨å®ã§å¹ççãªã³ãã³ãå
¥åãå®ç¾ããæ¹æ³ãç´¹ä»ã</p><div class="ds-tag-list"><a href="/tags/cli/" class="ds-tag-link">#cli</a><a href="/tags/zsh/" class="ds-tag-link">#zsh</a><a href="/tags/productivity/" class="ds-tag-link">#productivity</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2025-02-14T00:00:00.000Z">2025-02-14</time><a href="/blog/line-split-transform-stream/" class="ds-list-title">TransformStreamã§è¡åä½ã®ããã¹ãåå²ãå®è£
: LineSplitTransform</a><p class="ds-list-description">ã¹ããªã¼ã ããåãåã£ããã¤ããªãã¼ã¿ãè¡åä½ã«åå²ããTransformStreamå®è£
ããã°ãã¡ã¤ã«ãããã¹ããã¡ã¤ã«ã®é次å¦çã«æ´»ç¨ã§ããææ³ãæ´çã</p><div class="ds-tag-list"><a href="/tags/typescript/" class="ds-tag-link">#typescript</a><a href="/tags/streams/" class="ds-tag-link">#streams</a><a href="/tags/text-processing/" class="ds-tag-link">#text-processing</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2025-01-18T00:00:00.000Z">2025-01-18</time><a href="/blog/offscreencanvas-web-worker-image-processing/" class="ds-list-title">OffscreenCanvasã¨Web Workerã§ç»åå¦çãå®è£
ãã</a><p class="ds-list-description">Web Workerã¨offscreen Canvasã使ã£ã¦ãã¡ã¤ã³ã¹ã¬ããããããã¯ããã«ç»åå¦çãè¡ãå®è£
æ¹æ³ãWebP夿ã®å®ä¾ãæ´çã</p><div class="ds-tag-list"><a href="/tags/webworker/" class="ds-tag-link">#webworker</a><a href="/tags/canvas/" class="ds-tag-link">#canvas</a><a href="/tags/image-processing/" class="ds-tag-link">#image-processing</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2024-09-21T00:00:00.000Z">2024-09-21</time><a href="/blog/to-readablestream-utility-typescript/" class="ds-list-title">å¤ãReadableStreamã«å¤æããTypeScriptã¦ã¼ãã£ãªãã£é¢æ°</a><p class="ds-list-description">Stringããªãã¸ã§ã¯ããªã©ãReadableStreamã«å¤æããã¦ã¼ãã£ãªãã£é¢æ°ãBlobçµç±ã§ã¯ãªãä»»æã®åã§ã¹ããªã¼ã ãæ±ãå®è£
ãæ´çã</p><div class="ds-tag-list"><a href="/tags/typescript/" class="ds-tag-link">#typescript</a><a href="/tags/streams/" class="ds-tag-link">#streams</a><a href="/tags/utility/" class="ds-tag-link">#utility</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2024-09-11T00:00:00.000Z">2024-09-11</time><a href="/blog/typescript-cidr-ip-address-validation/" class="ds-list-title">TypeScriptã§CIDRç¯å²ã®IPã¢ãã¬ã¹å¤å®ãå®è£
ãã</a><p class="ds-list-description">CloudFront Functionãªã©å¤é¨ã¢ã¸ã¥ã¼ã«ã使ããªãç°å¢åãã«ãCIDRç¯å²å
ã®IPã¢ãã¬ã¹å¤å®ãèªåå®è£
ããããæ¼ç®ã使ã£ãã¯ã©ã¹æ§æã®å®è£
ãæ´çã</p><div class="ds-tag-list"><a href="/tags/typescript/" class="ds-tag-link">#typescript</a><a href="/tags/networking/" class="ds-tag-link">#networking</a><a href="/tags/cloudfront/" class="ds-tag-link">#cloudfront</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2024-09-08T00:00:00.000Z">2024-09-08</time><a href="/blog/bun-hono-api-on-aws-lambda/" class="ds-list-title">Bun+Honoã§ãã«ãããAPIãµã¼ããAWS Lambdaã§åããæ¹æ³</a><p class="ds-list-description">Bunã©ã³ã¿ã¤ã ã§Hono APIãµã¼ããAWS Lambdaä¸ã§åä½ãããæé ãSingle File Executableã¨ãã¦ã³ã³ãã¤ã«ããLambda Web Adapterã§åããæ§æã解説ã</p><div class="ds-tag-list"><a href="/tags/bun/" class="ds-tag-link">#bun</a><a href="/tags/hono/" class="ds-tag-link">#hono</a><a href="/tags/aws/" class="ds-tag-link">#aws</a><a href="/tags/lambda/" class="ds-tag-link">#lambda</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2024-09-07T00:00:00.000Z">2024-09-07</time><a href="/blog/generate-project-summary-bun-typescript/" class="ds-list-title">generate-project-summary.pyãBun+TypeScriptã§åå®è£
ãã話</a><p class="ds-list-description">Pythonã§æ¸ãããããã¸ã§ã¯ãæ§é è¦ç´ã¹ã¯ãªããããBun+TypeScriptã§åå®è£
ãLLMã«ãªãã¸ããªå
¨ä½ãèªã¾ããããã®å®è¡å¯è½ãã¤ããªä½æã®çµç·¯ã¨å®è£
ãç´¹ä»ã</p><div class="ds-tag-list"><a href="/tags/typescript/" class="ds-tag-link">#typescript</a><a href="/tags/bun/" class="ds-tag-link">#bun</a><a href="/tags/llm/" class="ds-tag-link">#llm</a><a href="/tags/cli/" class="ds-tag-link">#cli</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2024-09-07T00:00:00.000Z">2024-09-07</time><a href="/blog/sort-media-by-resolution-typescript/" class="ds-list-title">ã¡ãã£ã¢ãã¡ã¤ã«ãè§£å度ã§ã½ã¼ãããTypeScriptå®è£
</a><p class="ds-list-description">
187åç»ãç»åã®è§£å度(å¹
Ãé«ã)ã§ã½ã¼ãããç°¡æ½ãªTypeScriptå®è£
ãTwitteråç»ã¡ãã£ã¢ã®ã½ã¼ãå¦çã«æ´»ç¨ã</p><div class="ds-tag-list"><a href="/tags/typescript/" class="ds-tag-link">#typescript</a><a href="/tags/media/" class="ds-tag-link">#media</a><a href="/tags/sorting/" class="ds-tag-link">#sorting</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2024-09-03T00:00:00.000Z">2024-09-03</time><a href="/blog/cloudfront-s3-spa-deployment-script/" class="ds-list-title">CloudFront + S3ã§SPAãé
ä¿¡ãããããã¤ã¹ã¯ãªãã</a><p class="ds-list-description">CloudFrontçµç±ã§S3ã«ãã¹ãããSPAãé
ä¿¡ããéã®ãããã¤ã¹ã¯ãªããããã£ãã·ã¥ã³ã³ããã¼ã«è¨å®ããã«ã¼ã°ãªã¼ã³ãããã¤ãåãæ»ãæé ãæ´çã</p><div class="ds-tag-list"><a href="/tags/aws/" class="ds-tag-link">#aws</a><a href="/tags/cloudfront/" class="ds-tag-link">#cloudfront</a><a href="/tags/s3/" class="ds-tag-link">#s3</a><a href="/tags/deployment/" class="ds-tag-link">#deployment</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2024-08-29T00:00:00.000Z">2024-08-29</time><a href="/blog/athena-drop-database-cascade/" class="ds-list-title">AWS Athenaã§ç©ºã§ãªããã¼ã¿ãã¼ã¹ãåé¤ããæ¹æ³</a><p class="ds-list-description">AWS Athenaã§ç©ºã§ãªããã¼ã¿ãã¼ã¹ãåé¤ãããã¨ãã¦ã¨ã©ã¼ã«ãªã£ãã¨ãã®å¯¾å¦æ³ãDROP DATABASE CASCADEã³ãã³ãã®ä½¿ãæ¹ã</p><div class="ds-tag-list"><a href="/tags/aws/" class="ds-tag-link">#aws</a><a href="/tags/athena/" class="ds-tag-link">#athena</a><a href="/tags/sql/" class="ds-tag-link">#sql</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2024-08-29T00:00:00.000Z">2024-08-29</time><a href="/blog/typescript-lotto-number-generator/" class="ds-list-title">TypeScriptã§ãã6ã»ãã7ã®æ½é¸æ°åãçæãã</a><p class="ds-list-description">ã¡ã«ã»ã³ãã»ãã¤ã¹ã¿ã¼ã使ã£ã¦ãã6ã»ãã7ã®æ½é¸çªå·ãçæããTypeScriptå®è£
ãç似乱æ°çæå¨ã®å®è·µä¾ã</p><div class="ds-tag-list"><a href="/tags/typescript/" class="ds-tag-link">#typescript</a><a href="/tags/algorithm/" class="ds-tag-link">#algorithm</a><a href="/tags/random/" class="ds-tag-link">#random</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2024-08-28T00:00:00.000Z">2024-08-28</time><a href="/blog/api-gateway-iam-auth-typescript-request/" class="ds-list-title">IAMèªè¨¼æå¹ãªAPI Gatewayã«TypeScriptã§ãªã¯ã¨ã¹ãããå®è£
</a><p class="ds-list-description">AWS SDK for JavaScriptã®SigV4ã使ã£ã¦ãIAMèªè¨¼ãæå¹ãªAPI Gatewayã«ãã¼ã«ã«ç°å¢ããTypeScriptã§ãªã¯ã¨ã¹ãããå®è£
æé ã</p><div class="ds-tag-list"><a href="/tags/aws/" class="ds-tag-link">#aws</a><a href="/tags/typescript/" class="ds-tag-link">#typescript</a><a href="/tags/api-gateway/" class="ds-tag-link">#api-gateway</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2024-08-28T00:00:00.000Z">2024-08-28</time><a href="/blog/markdown-confluence-cli-sync/" class="ds-list-title">markdown-confluence CLIã§MarkdownãConfluenceã«åæããéç¨</a><p class="ds-list-description">Gitãªãã¸ããªå
ã®Markdownããã¥ã¡ã³ããConfluenceã«åæãã@markdown-confluence/cliã®å°å
¥ã¨éç¨æ¹æ³ãADRãããã¥ã¡ã³ããConfluenceã§å
±æããæé ãæ´çã</p><div class="ds-tag-list"><a href="/tags/confluence/" class="ds-tag-link">#confluence</a><a href="/tags/markdown/" class="ds-tag-link">#markdown</a><a href="/tags/documentation/" class="ds-tag-link">#documentation</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2024-08-28T00:00:00.000Z">2024-08-28</time><a href="/blog/vue-global-state-without-pinia/" class="ds-list-title">Piniaãªãã§ã°ãã¼ãã«ã¹ãã¼ãã管çããVue Composable</a><p class="ds-list-description">Piniaã使ããã«Vueã®reactiveã¨toRefsã§ã°ãã¼ãã«ã¹ãã¼ã管çãå®ç¾ãã軽éãªå®è£
æ¹æ³ã</p><div class="ds-tag-list"><a href="/tags/vue/" class="ds-tag-link">#vue</a><a href="/tags/composable/" class="ds-tag-link">#composable</a><a href="/tags/state-management/" class="ds-tag-link">#state-management</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2024-08-28T00:00:00.000Z">2024-08-28</time><a href="/blog/vue-strategy-pattern-dynamic-component/" class="ds-list-title">Vueã§v-ifã®åå²ãå¢ãããã¹ãã©ãã¸ã¼ãã¿ã¼ã³ãæ¤è¨ãã</a><p class="ds-list-description">v-ifã«ããæ¡ä»¶åå²ã3ãã¿ã¼ã³ä»¥ä¸ã«ãªã£ãããã¹ãã©ãã¸ã¼ãã¿ã¼ã³ã§ã³ã³ãã¼ãã³ããåçã«åãæ¿ããå®è£
ãæ¤è¨ãå¯èªæ§ã¨ã¡ã³ããã³ã¹æ§ã®åä¸ã</p><div class="ds-tag-list"><a href="/tags/vue/" class="ds-tag-link">#vue</a><a href="/tags/design-pattern/" class="ds-tag-link">#design-pattern</a><a href="/tags/best-practice/" class="ds-tag-link">#best-practice</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2024-08-25T00:00:00.000Z">2024-08-25</time><a href="/blog/generate-image-from-html-video-element/" class="ds-list-title">HTMLVideoElementããç»åãçæããTypeScriptå®è£
</a><p class="ds-list-description">Canvasã¨VideoElementã使ã£ã¦ãåç»ã®ç¾å¨ãã¬ã¼ã ãç»åã¨ãã¦æ½åºããTypeScriptå®è£
ãPromiseãã¼ã¹ã§blobçæããæ¹æ³ãæ´çã</p><div class="ds-tag-list"><a href="/tags/typescript/" class="ds-tag-link">#typescript</a><a href="/tags/canvas/" class="ds-tag-link">#canvas</a><a href="/tags/video/" class="ds-tag-link">#video</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2024-08-25T00:00:00.000Z">2024-08-25</time><a href="/blog/pm2-cron-job-setup/" class="ds-list-title">PM2ã§Cronã¸ã§ãã使ãã: launchdã®ä»£æ¿ã¨ãã¦</a><p class="ds-list-description">macOSã§launchdã®ä»£ããã«PM2ã使ã£ã¦Cronã¸ã§ãã使ããæ¹æ³ãè¨å®ãã¡ã¤ã«ã¨Bunã使ã£ã宿å®è¡ã®å®è£
ä¾ãæ´çã</p><div class="ds-tag-list"><a href="/tags/pm2/" class="ds-tag-link">#pm2</a><a href="/tags/cron/" class="ds-tag-link">#cron</a><a href="/tags/nodejs/" class="ds-tag-link">#nodejs</a><a href="/tags/bun/" class="ds-tag-link">#bun</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2024-08-19T00:00:00.000Z">2024-08-19</time><a href="/blog/my-first-vite-plugin-implementation/" class="ds-list-title">åãã¦ã®Viteãã©ã°ã¤ã³å®è£
: ãã«ãã¡ã¿ãã¼ã¿ãèªåçæãã</a><p class="ds-list-description">Vite Plugin APIã使ã£ã¦ãã«ãã©ã¤ããµã¤ã¯ã«ã«ç¬èªå¦çãçµã¿è¾¼ãæ¹æ³ãæå»ãã¼ã¹ã®ã»ãã³ãã£ãã¯ãã¼ã¸ã§ã³ãçæãããã©ã°ã¤ã³å®è£
ãéãã¦å¦ã¶ã</p><div class="ds-tag-list"><a href="/tags/vite/" class="ds-tag-link">#vite</a><a href="/tags/typescript/" class="ds-tag-link">#typescript</a><a href="/tags/build-tool/" class="ds-tag-link">#build-tool</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2024-08-19T00:00:00.000Z">2024-08-19</time><a href="/blog/starlight-obsidian-vault-root-directory/" class="ds-list-title">starlight-obsidianãã©ã°ã¤ã³ã§Vaultã®ã³ãã¼å
ãã«ã¼ãã«å¤æ´ãã</a><p class="ds-list-description">starlight-obsidianãã©ã°ã¤ã³ã®ããã©ã«ãåä½ã夿´ããObsidian Vaultãsrc/content/docsç´ä¸ã«ã³ãã¼ããæ¹æ³ããµã¤ããã¼é層æ§é ã®å·®ç°ãè§£æ¶ããå®è£
ãæ´çã</p><div class="ds-tag-list"><a href="/tags/astro/" class="ds-tag-link">#astro</a><a href="/tags/starlight/" class="ds-tag-link">#starlight</a><a href="/tags/obsidian/" class="ds-tag-link">#obsidian</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2024-08-19T00:00:00.000Z">2024-08-19</time><a href="/blog/variation-selectors-steganography-typescript/" class="ds-list-title">ç°ä½åã»ã¬ã¯ã¿ã¼ã使ã£ãã¹ãã¬ãã°ã©ãã£ã®TypeScriptå®è£
</a><p class="ds-list-description">Unicodeã®ç°ä½åã»ã¬ã¯ã¿ã¼ãæ´»ç¨ãã¦ãè¦ãç®ã«ã¯è¦ããªãç§å¯ã®æååãããã¹ãã«åãè¾¼ãã¹ãã¬ãã°ã©ãã£ææ³ã®TypeScriptå®è£
ã</p><div class="ds-tag-list"><a href="/tags/typescript/" class="ds-tag-link">#typescript</a><a href="/tags/unicode/" class="ds-tag-link">#unicode</a><a href="/tags/steganography/" class="ds-tag-link">#steganography</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2024-08-17T00:00:00.000Z">2024-08-17</time><a href="/blog/extract-video-size-from-twitter-url/" class="ds-list-title">Twitteråç»URLãããµã¤ãºæ
å ±ãæ½åºããTypeScriptå®è£
</a><p class="ds-list-description">Twitter(X)ã®åç»URLã«å«ã¾ããè§£å度æ
å ±ãæ£è¦è¡¨ç¾ã§æ½åºããTypeScriptå®è£
ãURLãã¿ã¼ã³ã®è§£æã¨ãµã¤ãºå徿¹æ³ãæ´çã</p><div class="ds-tag-list"><a href="/tags/typescript/" class="ds-tag-link">#typescript</a><a href="/tags/regex/" class="ds-tag-link">#regex</a><a href="/tags/twitter/" class="ds-tag-link">#twitter</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2024-01-27T00:00:00.000Z">2024-01-27</time><a href="/blog/fetch-google-fonts-in-browser-failed/" class="ds-list-title">ãã©ã¦ã¶ã§Google FontsããWOFFãã¡ã¤ã«ãåå¾ãããã¨ãã¦å¤±æããåå¿é²</a><p class="ds-list-description">ã¯ã©ã¤ã¢ã³ããµã¤ãã§Google Fontsããttf/otf/woffãã¡ã¤ã«ãåå¾ãã¦@vercel/satoriã§ä½¿ããã¨ãã試è¡é¯èª¤ã®è¨é²ãUser
187-Agentãããã¼å¶éã¨woff2é対å¿åé¡ã«ã¤ãã¦æ´çã</p><div class="ds-tag-list"><a href="/tags/google-fonts/" class="ds-tag-link">#google-fonts</a><a href="/tags/satori/" class="ds-tag-link">#satori</a><a href="/tags/browser/" class="ds-tag-link">#browser</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2024-01-21T00:00:00.000Z">2024-01-21</time><a href="/blog/bitbucket-pipelines-yarn-v4-pnp/" class="ds-list-title">Bitbucket Pipelinesã§Yarn v4 (PnPã¢ã¼ã)ãåããè¨å®</a><p class="ds-list-description">Bitbucket Pipelinesã§Yarn v4ã®PnPã¢ã¼ãã使ã£ãããã¸ã§ã¯ãããã«ãããè¨å®æ¹æ³ããã£ãã·ã¥è¨å®ã¨corepackã®æå¹åæé ãæ´çã</p><div class="ds-tag-list"><a href="/tags/bitbucket/" class="ds-tag-link">#bitbucket</a><a href="/tags/yarn/" class="ds-tag-link">#yarn</a><a href="/tags/ci-cd/" class="ds-tag-link">#ci-cd</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2023-11-15T00:00:00.000Z">2023-11-15</time><a href="/blog/pagefind-cloudflare-pages-rocket-loader-issue/" class="ds-list-title">Pagefindæ¤ç´¢ãCloudflare Pagesã§åããªãåé¡: Rocket Loaderãåå ã ã£ã</a><p class="ds-list-description">Astro+PagefindãCloudflare Pagesã«ãããã¤ããéã«æ¤ç´¢æ©è½ãåä½ããªãåé¡ã®åå ã¨è§£æ±ºçãRocket Loaderè¨å®ã®å½±é¿ã«ã¤ãã¦æ´çã</p><div class="ds-tag-list"><a href="/tags/pagefind/" class="ds-tag-link">#pagefind</a><a href="/tags/cloudflare/" class="ds-tag-link">#cloudflare</a><a href="/tags/astro/" class="ds-tag-link">#astro</a><a href="/tags/troubleshooting/" class="ds-tag-link">#troubleshooting</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2023-02-26T00:00:00.000Z">2023-02-26</time><a href="/blog/eagle-app-review-and-purchase-reasons/" class="ds-list-title">ç»å管çã¢ããªEagleãè³¼å
¥ãã¦æãããã¨</a><p class="ds-list-description">è²·ãåãåã®ç»å管çã¢ããªEagleãè³¼å
¥ããçç±ã¨ã¬ãã¥ã¼ãMac/Win両対å¿ãã©ã¤ãã©ãªç®¡çããã©ã¦ã¶æ¡å¼µæ©è½ã®ä½¿ãåæãç´¹ä»ã</p><div class="ds-tag-list"><a href="/tags/eagle/" class="ds-tag-link">#eagle</a><a href="/tags/productivity/" class="ds-tag-link">#productivity</a><a href="/tags/tool-review/" class="ds-tag-link">#tool-review</a></div></li><li class="ds-list-card"><time class="ds-list-meta" datetime="2022-12-26T00:00:00.000Z">2022-12-26</time><a href="/blog/svelte-spa-on-gas-webapp/" class="ds-list-title">Svelteã§Google Apps Scriptã®é«æ©è½Webã¢ããªãä½ã</a><p class="ds-list-description">Google Apps Scriptã®Webã¢ããªå
¬éæ©è½ã¨Svelteãçµã¿åããã¦ãã¹ãã¬ããã·ã¼ãããã¼ã¿ãã¼ã¹ã¨ãã髿©è½SPAãæ§ç¯ããæ¹æ³ã</p><div class="ds-tag-list"><a href="/tags/google-apps-script/" class="ds-tag-link">#google-apps-script</a><a href="/tags/svelte/" class="ds-tag-link">#svelte</a><a href="/tags/vite/" class="ds-tag-link">#vite</a></div></li></ol></section></main><footer class="border-t border-white/10 bg-canvas text-slate-400"><div class="max-w-4xl mx-auto px-6 py-8 flex flex-col gap-3 md:flex-row md:items-center md:justify-between"><p class="text-xs">© 2026 hsb.horse. All rights reserved.</p><a href="/legal/" class="ds-link-subtle text-xs"> æ³çæ
å ± </a></div></footer>
187<script> 188 if ('modelContext' in navigator) { 189 const mc = navigator.modelContext; 190 mc.registerTool({ 191 name: 'site-search', 192 description: 193 'Search blog posts, code snippets, glossary entries, and tools on hsb.horse using full-text search.', 194 inputSchema: { 195 type: 'object', 196 properties: { 197 query: { type: 'string', description: 'Search query' }, 198 }, 199 required: ['query'], 200 }, 201 async execute({ query }) { 202 const pf = await import('/pagefind/pagefind.js'); 203 await pf.init(); 204 const { results } = await pf.search(query); 205 const items = await Promise.all( 206 results.slice(0, 10).map((r) => r.data()), 207 ); 208 return items.map((d) => ({ 209 title: d.meta?.title, 210 url: d.url, 211 excerpt: d.excerpt, 212 })); 213 }, 214 }); 215 mc.registerTool({ 216 name: 'list-sections', 217 description: 218 'List the main content sections of hsb.horse with their paths.', 219 inputSchema: { type: 'object', properties: {} }, 220 async execute() { 221 return [ 222 { name: 'Blog', path: '/blog', description: 'Technical articles' }, 223 { 224 name: 'Snippets', 225 path: '/snippets', 226 description: 'Reusable code patterns', 227 }, 228 { 229 name: 'Glossary', 230 path: '/glossary', 231 description: 'Developer terminology', 232 }, 233 { 234 name: 'Tools', 235 path: '/tools/', 236 description: 'Browser-based utilities', 237 }, 238 { 239 name: 'Tags', 240 path: '/tags', 241 description: 'Cross-section tag navigation', 242 }, 243 ]; 244 }, 245 }); 246 } 247 </script>
247<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a43ccee67c1abcbc',t:'MTc5MDg3MTc2OA=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
247</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.