PageSourceSearch

https://ryuhei373.ryuhei-373-3.workers.dev/blog/2026-04-04

html ryuhei373.ryuhei-373-3.workers.dev collected 2026-10-03 08:10:02 UTC 36,688 bytes, 1 lines download raw bytes

1<!DOCTYPE html><html  lang="ja" prefix="og: https://ogp.me/ns#"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><style id="nuxt-ui-colors">@layer theme{:root,:host{--ui-color-primary-50:var(--color-orange-50,oklch(98% .016 73.684));--ui-color-primary-100:var(--color-orange-100,oklch(95.4% .038 75.164));--ui-color-primary-200:var(--color-orange-200,oklch(90.1% .076 70.697));--ui-color-primary-300:var(--color-orange-300,oklch(83.7% .128 66.29));--ui-color-primary-400:var(--color-orange-400,oklch(75% .183 55.934));--ui-color-primary-500:var(--color-orange-500,oklch(70.5% .213 47.604));--ui-color-primary-600:var(--color-orange-600,oklch(64.6% .222 41.116));--ui-color-primary-700:var(--color-orange-700,oklch(55.3% .195 38.402));--ui-color-primary-800:var(--color-orange-800,oklch(47% .157 37.304));--ui-color-primary-900:var(--color-orange-900,oklch(40.8% .123 38.172));--ui-color-primary-950:var(--color-orange-950,oklch(26.6% .079 36.259));--ui-color-secondary-50:var(--color-orange-50,oklch(98% .016 73.684));--ui-color-secondary-100:var(--color-orange-100,oklch(95.4% .038 75.164));--ui-color-secondary-200:var(--color-orange-200,oklch(90.1% .076 70.697));--ui-color-secondary-300:var(--color-orange-300,oklch(83.7% .128 66.29));--ui-color-secondary-400:var(--color-orange-400,oklch(75% .183 55.934));--ui-color-secondary-500:var(--color-orange-500,oklch(70.5% .213 47.604));--ui-color-secondary-600:var(--color-orange-600,oklch(64.6% .222 41.116));--ui-color-secondary-700:var(--color-orange-700,oklch(55.3% .195 38.402));--ui-color-secondary-800:var(--color-orange-800,oklch(47% .157 37.304));--ui-color-secondary-900:var(--color-orange-900,oklch(40.8% .123 38.172));--ui-color-secondary-950:var(--color-orange-950,oklch(26.6% .079 36.259));--ui-color-success-50:var(--color-green-50,oklch(98.2% .018 155.826));--ui-color-success-100:var(--color-green-100,oklch(96.2% .044 156.743));--ui-color-success-200:var(--color-green-200,oklch(92.5% .084 155.995));--ui-color-success-300:var(--color-green-300,oklch(87.1% .15 154.449));--ui-color-success-400:var(--color-green-400,oklch(79.2% .209 151.711));--ui-color-success-500:var(--color-green-500,oklch(72.3% .219 149.579));--ui-color-success-600:var(--color-green-600,oklch(62.7% .194 149.214));--ui-color-success-700:var(--color-green-700,oklch(52.7% .154 150.069));--ui-color-success-800:var(--color-green-800,oklch(44.8% .119 151.328));--ui-color-success-900:var(--color-green-900,oklch(39.3% .095 152.535));--ui-color-success-950:var(--color-green-950,oklch(26.6% .065 152.934));--ui-color-info-50:var(--color-blue-50,oklch(97% .014 254.604));--ui-color-info-100:var(--color-blue-100,oklch(93.2% .032 255.585));--ui-color-info-200:var(--color-blue-200,oklch(88.2% .059 254.128));--ui-color-info-300:var(--color-blue-300,oklch(80.9% .105 251.813));--ui-color-info-400:var(--color-blue-400,oklch(70.7% .165 254.624));--ui-color-info-500:var(--color-blue-500,oklch(62.3% .214 259.815));--ui-color-info-600:var(--color-blue-600,oklch(54.6% .245 262.881));--ui-color-info-700:var(--color-blue-700,oklch(48.8% .243 264.376));--ui-color-info-800:var(--color-blue-800,oklch(42.4% .199 265.638));--ui-color-info-900:var(--color-blue-900,oklch(37.9% .146 265.522));--ui-color-info-950:var(--color-blue-950,oklch(28.2% .091 267.935));--ui-color-warning-50:var(--color-yellow-50,oklch(98.7% .026 102.212));--ui-color-warning-100:var(--color-yellow-100,oklch(97.3% .071 103.193));--ui-color-warning-200:var(--color-yellow-200,oklch(94.5% .129 101.54));--ui-color-warning-300:var(--color-yellow-300,oklch(90.5% .182 98.111));--ui-color-warning-400:var(--color-yellow-400,oklch(85.2% .199 91.936));--ui-color-warning-500:var(--color-yellow-500,oklch(79.5% .184 86.047));--ui-color-warning-600:var(--color-yellow-600,oklch(68.1% .162 75.834));--ui-color-warning-700:var(--color-yellow-700,oklch(55.4% .135 66.442));--ui-color-warning-800:var(--color-yellow-800,oklch(47.6% .114 61.907));--ui-color-warning-900:var(--color-yellow-900,oklch(42.1% .095 57.708));--ui-color-warning-950:var(--color-yellow-950,oklch(28.6% .066 53.813));--ui-color-error-50:var(--color-red-50,oklch(97.1% .013 17.38));--ui-color-error-100:var(--color-red-100,oklch(93.6% .032 17.717));--ui-color-error-200:var(--color-red-200,oklch(88.5% .062 18.334));--ui-color-error-300:var(--color-red-300,oklch(80.8% .114 19.571));--ui-color-error-400:var(--color-red-400,oklch(70.4% .191 22.216));--ui-color-error-500:var(--color-red-500,oklch(63.7% .237 25.331));--ui-color-error-600:var(--color-red-600,oklch(57.7% .245 27.325));--ui-color-error-700:var(--color-red-700,oklch(50.5% .213 27.518));--ui-color-error-800:var(--color-red-800,oklch(44.4% .177 26.899));--ui-color-error-900:var(--color-red-900,oklch(39.6% .141 25.723));--ui-color-error-950:var(--color-red-950,oklch(25.8% .092 26.042));--ui-color-neutral-50:var(--color-flexoki-base-50,);--ui-color-neutral-100:var(--color-flexoki-base-100,);--ui-color-neutral-200:var(--color-flexoki-base-200,);--ui-color-neutral-300:var(--color-flexoki-base-300,);--ui-color-neutral-400:var(--color-flexoki-base-400,);--ui-color-neutral-500:var(--color-flexoki-base-500,);--ui-color-neutral-600:var(--color-flexoki-base-600,);--ui-color-neutral-700:var(--color-flexoki-base-700,);--ui-color-neutral-800:var(--color-flexoki-base-800,);--ui-color-neutral-900:var(--color-flexoki-base-900,);--ui-color-neutral-950:var(--color-flexoki-base-950,)}:root,:host,.light{--ui-primary:var(--ui-color-primary-500);--ui-secondary:var(--ui-color-secondary-500);--ui-success:var(--ui-color-success-500);--ui-info:var(--ui-color-info-500);--ui-warning:var(--ui-color-warning-500);--ui-error:var(--ui-color-error-500)}.dark{--ui-primary:var(--ui-color-primary-400);--ui-secondary:var(--ui-color-secondary-400);--ui-success:var(--ui-color-success-400);--ui-info:var(--ui-color-info-400);--ui-warning:var(--ui-color-warning-400);--ui-error:var(--ui-color-error-400)}}</style><title>2026年3月まとめ | ryuhei373.dev</title><meta name="twitter:card" content="summary_large_image"><meta name="twitter:image" content="https://ryuhei373.dev/_og/s/c_Site,p_Ii9ibG9nLzIwMjYtMDQtMDQi.png">
1<meta name="twitter:image:src" content="https://ryuhei373.dev/_og/s/c_Site,p_Ii9ibG9nLzIwMjYtMDQtMDQi.png"><meta property="og:image" content="https://ryuhei373.dev/_og/s/c_Site,p_Ii9ibG9nLzIwMjYtMDQtMDQi.png"><meta property="og:image:type" content="image/png"><meta property="og:image:width" content="1200"><meta name="twitter:image:width" content="1200"><meta property="og:image:height" content="600"><meta name="twitter:image:height" content="600"><link rel="stylesheet" href="/_nuxt/entry.Du4tnXyX.css" crossorigin><style>@layer base{:where(.i-ph\:moon-bold){display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask-image:var(--svg);mask-image:var(--svg);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' width='256' height='256'%3E%3Cpath fill='black' d='M236.37 139.4a12 12 0 0 0-12-3A84.07 84.07 0 0 1 119.6 31.59a12 12 0 0 0-15-15a108.86 108.86 0 0 0-54.91 38.48A108 108 0 0 0 136 228a107.1 107.1 0 0 0 64.93-21.69a108.86 108.86 0 0 0 38.44-54.94a12 12 0 0 0-3-11.97m-49.88 47.74A84 84 0 0 1 68.86 69.51a84.9 84.9 0 0 1 23.41-21.22Q92 52.13 92 56a108.12 108.12 0 0 0 108 108q3.87 0 7.71-.27a84.8 84.8 0 0 1-21.22 23.41'/%3E%3C/svg%3E")}:where(.i-ph\:sun-bold){display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask-image:var(--svg);mask-image:var(--svg);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' width='256' height='256'%3E%3Cpath fill='black' d='M116 36V20a12 12 0 0 1 24 0v16a12 12 0 0 1-24 0m80 92a68 68 0 1 1-68-68a68.07 68.07 0 0 1 68 68m-24 0a44 44 0 1 0-44 44a44.05 44.05 0 0 0 44-44M51.51 68.49a12 12 0 1 0 17-17l-12-12a12 12 0 0 0-17 17Zm0 119l-12 12a12 12 0 0 0 17 17l12-12a12 12 0 1 0-17-17M196 72a12 12 0 0 0 8.49-3.51l12-12a12 12 0 0 0-17-17l-12 12A12 12 0 0 0 196 72m8.49 115.51a12 12 0 0 0-17 17l12 12a12 12 0 0 0 17-17ZM48 128a12 12 0 0 0-12-12H20a12 12 0 0 0 0 24h16a12 12 0 0 0 12-12m80 80a12 12 0 0 0-12 12v16a12 12 0 0 0 24 0v-16a12 12 0 0 0-12-12m108-92h-16a12 12 0 0 0 0 24h16a12 12 0 0 0 0-24'/%3E%3C/svg%3E")}:where(.i-ri\:arrow-left-s-line){display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask-image:var(--svg);mask-image:var(--svg);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='m10.828 12l4.95 4.95l-1.414 1.415L8 12l6.364-6.364l1.414 1.414z'/%3E%3C/svg%3E")}:where(.i-ri\:arrow-right-s-line){display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask-image:var(--svg);mask-image:var(--svg);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='m13.172 12l-4.95-4.95l1.414-1.413L16 12l-6.364 6.364l-1.414-1.415z'/%3E%3C/svg%3E")}:where(.i-ri\:arrow-up-s-line){display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask-image:var(--svg);mask-image:var(--svg);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='m12 10.828l-4.95 4.95l-1.414-1.414L12 8l6.364 6.364l-1.414 1.414z'/%3E%3C/svg%3E")}:where(.i-ri\:bluesky-fill){display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask-image:var(--svg);mask-image:var(--svg);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M12 11.388c-.906-1.761-3.372-5.044-5.665-6.662c-2.197-1.55-3.034-1.283-3.583-1.033C2.116 3.978 2 4.955 2 5.528c0 .575.315 4.709.52 5.4c.68 2.28 3.094 3.05 5.32 2.803c-3.26.483-6.157 1.67-2.36 5.898c4.178 4.325 5.726-.927 6.52-3.59c.794 2.663 1.708 7.726 6.444 3.59c3.556-3.59.977-5.415-2.283-5.898c2.225.247 4.64-.523 5.319-2.803c.205-.69.52-4.825.52-5.399c0-.575-.116-1.55-.752-1.838c-.549-.248-1.386-.517-3.583 1.033c-2.293 1.621-4.76 4.904-5.665 6.664'/%3E%3C/svg%3E")}:where(.i-ri\:github-fill){display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask-image:var(--svg);mask-image:var(--svg);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M12.001 2c-5.525 0-10 4.475-10 10a9.99 9.99 0 0 0 6.837 9.488c.5.087.688-.213.688-.476c0-.237-.013-1.
1024-.013-1.862c-2.512.463-3.162-.612-3.362-1.175c-.113-.288-.6-1.175-1.025-1.413c-.35-.187-.85-.65-.013-.662c.788-.013 1.35.725 1.538 1.025c.9 1.512 2.337 1.087 2.912.825c.088-.65.35-1.087.638-1.337c-2.225-.25-4.55-1.113-4.55-4.938c0-1.088.387-1.987 1.025-2.687c-.1-.25-.45-1.275.1-2.65c0 0 .837-.263 2.75 1.024a9.3 9.3 0 0 1 2.5-.337c.85 0 1.7.112 2.5.337c1.913-1.3 2.75-1.024 2.75-1.024c.55 1.375.2 2.4.1 2.65c.637.7 1.025 1.587 1.025 2.687c0 3.838-2.337 4.688-4.562 4.938c.362.312.675.912.675 1.85c0 1.337-.013 2.412-.013 2.75c0 .262.188.574.688.474A10.02 10.02 0 0 0 22 12c0-5.525-4.475-10-10-10'/%3E%3C/svg%3E")}:where(.i-ri\:rss-fill){display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask-image:var(--svg);mask-image:var(--svg);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M3 3c9.941 0 18 8.059 18 18h-3c0-8.284-6.716-15-15-15zm0 7c6.075 0 11 4.925 11 11h-3a8 8 0 0 0-8-8zm0 7a4 4 0 0 1 4 4H3z'/%3E%3C/svg%3E")}:where(.i-ri\:twitter-x-fill){display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask-image:var(--svg);mask-image:var(--svg);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='m17.687 3.063l-4.996 5.711l-4.32-5.711H2.112l7.477 9.776l-7.086 8.099h3.034l5.469-6.25l4.78 6.25h6.102l-7.794-10.304l6.625-7.571zm-1.064 16.06L5.654 4.782h1.803l10.846 14.34z'/%3E%3C/svg%3E")}}</style><link rel="preload" as="fetch" crossorigin="anonymous" href="/blog/2026-04-04/_payload.json?785d4b7f-6135-4a15-babd-277b4cd8cff9"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BSfTcT_O.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C7kNYtOG.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BqVcGUur.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/KePPvqJT.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BN_7HF1G.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Cfngwzs8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BzxGVPQZ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BUx_WsXH.js">
1<script type="module" src="/_nuxt/BSfTcT_O.js" crossorigin></script>
1<meta property="og:type" content="article"><meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1"><meta name="twitter:site" content="@373_3"><meta property="og:locale" content="ja_JP"><link rel="alternate" type="application/rss+xml" title="ryuhei373.dev" href="https://ryuhei373.dev/rss.xml"><meta name="description" content="ブログ書くのを習慣化したい、といいつつ丸1ヶ月サボってしまった。"><meta property="og:title" data-infer="" content="2026年3月まとめ | ryuhei373.dev"><meta property="og:description" data-infer="" content="ブログ書くのを習慣化したい、といいつつ丸1ヶ月サボってしまった。"><link rel="canonical" href="https://ryuhei373.dev/blog/2026-04-04"><meta property="og:url" content="https://ryuhei373.dev/blog/2026-04-04"><meta property="og:site_name" content="ryuhei373.dev">
1<script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"light";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script>
1</head><body><div id="__nuxt" class="isolate"><!--[--><!--[--><!--[--><!--[--><!--[--><!--[--><!----><!----><!----><header data-slot="root" class="bg-default/75 backdrop-blur border-b border-default h-(--ui-header-height) sticky top-0 z-50"><!--[--><!--]--><div class="sm:px-6 lg:px-8 w-full max-w-(--ui-container) mx-auto px-6 py-8 flex items-center justify-between gap-3 h-full" data-slot="container"><!--[--><div data-slot="left" class="lg:flex-1 flex items-center gap-1.5"><!----><!--[--><a href="/" aria-label="ryuhei373.dev" data-slot="title" class="focus-visible:outline-primary transition-colors shrink-0 font-bold text-xl flex items-center gap-3 text-primary hover:text-secondary"><!--[--><!--[--><!--[--><span data-slot="root" class="inline-flex items-center justify-center shrink-0 select-none rounded-full align-middle bg-elevated size-8 text-base" style=""><img src="https://github.com/ryuhei373.png" alt="ryuhei373 のアバター" width="32" height="32" data-slot="image" class="h-full w-full rounded-[inherit] object-cover"></span><span>ryuhei373.dev</span><!--]--><!--]--><!--]--></a><!--]--></div><div data-slot="center" class="hidden lg:flex"><!--[--><!--]--></div><div data-slot="right" class="flex items-center justify-end lg:flex-1 gap-1.5"><!--[--><!--[--><div data-slot="root" class="relative flex items-start opacity-75"><div data-slot="container" class="flex items-center h-6"><button aria-label="Switch to dark mode" data-slot="base" class="inline-flex items-center shrink-0 rounded-full border-2 border-transparent focus-visible:outline-2 focus-visible:outline-offset-2 data-[state=unchecked]:bg-accented transition-[background] duration-200 data-[state=checked]:bg-primary focus-visible:outline-primary w-11 cursor-not-allowed" id="v-0" role="switch" type="button" value="on" aria-checked="false" aria-required="false" data-state="unchecked" data-disabled disabled><!--[--><span data-state="unchecked" data-disabled data-slot="thumb" class="group pointer-events-none rounded-full bg-default shadow-lg ring-0 transition-transform duration-200 data-[state=unchecked]:translate-x-0 data-[state=unchecked]:rtl:-translate-x-0 flex items-center justify-center size-5 data-[state=checked]:translate-x-5 data-[state=checked]:rtl:-translate-x-5"><!--[--><!--[--><span class="iconify i-ph:moon-bold absolute shrink-0 group-data-[state=unchecked]:text-dimmed opacity-0 size-10/12 transition-[color,opacity] duration-200 group-data-[state=checked]:text-primary group-data-[state=checked]:opacity-100" aria-hidden="true" style="" data-slot="icon"></span><span class="iconify i-ph:sun-bold absolute shrink-0 group-data-[state=unchecked]:text-dimmed opacity-0 size-10/12 transition-[color,opacity] duration-200 group-data-[state=checked]:text-primary group-data-[state=unchecked]:opacity-100" aria-hidden="true" style="" data-slot="icon"></span><!--]--><!--]--></span><!--]--><!--v-if--></button></div><!----></div><!--]--><!--]--><!--[--><!----><!--]--></div><!--]--></div><!--[--><!--]--></header><!--[--><!----><!----><!--v-if--><!--]--><!--]--><main class="sm:px-6 lg:px-8 w-full max-w-(--ui-container) mx-auto px-6 py-8"><!--[--><div class="max-w-2xl mx-auto"><article data-slot="root" class="flex flex-col lg:grid lg:grid-cols-10 lg:gap-10 mt-8"><!----><div data-slot="center" class="lg:col-span-10"><!--[--><div data-slot="root" class="relative border-default border-b-0 py-0"><!----><div data-slot="container" class=""><div data-slot="wrapper" class="flex flex-col lg:flex-row lg:items-center lg:justify-between gap-4"><h1 data-slot="title" class="text-[clamp(1.875rem,1.75rem+0.625vw,2.25rem)] sm:text-[clamp(1.875rem,1.75rem+0.625vw,2.25rem)] leading-tight text-pretty font-bold text-highlighted"><!--[-->2026年3月まとめ<!--]--></h1><!----></div><!----><!--[--><div class="flex items-baseline flex-wrap gap-x-4 gap-y-1"><time class="text-muted text-sm inline-block tabular-nums">2026/04/04</time><ul class="flex flex-wrap gap-x-2 gap-y-1 list-none p-0 m-0"><!--[--><li><a href="/tags/recap" class="focus-visible:outline-primary transition-colors text-muted text-sm hover:text-primary"><!--[--><!--[-->
1 #Recap<!--]--><!--]--></a></li><!--]--></ul></div><!--]--></div></div><div class="mt-8 pb-24 space-y-12"><!--[--><div><p class="my-6 leading-7"><!--[-->ブログ書くのを習慣化したい、といいつつ丸1ヶ月サボってしまった。<!--]--></p><h2 id="仕事" class="relative text-2xl text-highlighted font-bold mt-12 mb-6 scroll-mt-[calc(48px+45px+var(--ui-header-height))] lg:scroll-mt-[calc(48px+var(--ui-header-height))] [&amp;&gt;a]:focus-visible:outline-primary [&amp;&gt;a&gt;code]:border-dashed hover:[&amp;&gt;a&gt;code]:border-primary hover:[&amp;&gt;a&gt;code]:text-primary [&amp;&gt;a&gt;code]:text-xl/7 [&amp;&gt;a&gt;code]:font-bold [&amp;&gt;a&gt;code]:transition-colors"><!--[-->仕事<!--]--></h2><p class="my-6 leading-7"><!--[-->しばらくRailsとgemのバージョンアップ作業に携わっていた。想定より時間はかかってしまったものの、予定していた部分までの作業は完了し、色々と知見も得られた。今後のバージョンアップ作業はスムーズに進められそうだという自信にも繋がった。<!--]--></p><p class="my-6 leading-7"><!--[-->必要以上に恐れ、手を動かす前に延々と調査したりなどで時間を浪費していたので、「正しく恐れる、正しく進む」というのが大事なのかなと感じた。<!--]--></p><p class="my-6 leading-7"><!--[-->仕事の主は内製の管理画面の開発だが、バージョンアップ作業にかかりきりでしばらくやれていなかった。久々に利用者側の課題を解決できるタスクに取り組んだが、やはり楽しい。利用者のフィードバックをもらえると役立っている実感があり、元気が出る。<!--]--></p><p class="my-6 leading-7"><!--[-->明確な要件が決まっているタスクはAIがやはり強い。実装をこなすまでのスピードが爆速すぎて、ある程度並列化しないと実装以外がボトルネックになってしまう。そうなると、人間は常にほぼ全力でそのほかのタスク処理に取り組むことになる。ずっと仕事が楽しいのにやたら疲れる、という状態を少し体感した。<!--]--></p><h2 id="健康" class="relative text-2xl text-highlighted font-bold mt-12 mb-6 scroll-mt-[calc(48px+45px+var(--ui-header-height))] lg:scroll-mt-[calc(48px+var(--ui-header-height))] [&amp;&gt;a]:focus-visible:outline-primary [&amp;&gt;a&gt;code]:border-dashed hover:[&amp;&gt;a&gt;code]:border-primary hover:[&amp;&gt;a&gt;code]:text-primary [&amp;&gt;a&gt;code]:text-xl/7 [&amp;&gt;a&gt;code]:font-bold [&amp;&gt;a&gt;code]:transition-colors"><!--[-->健康<!--]--></h2><p class="my-6 leading-7"><!--[-->12月に健康診断を受けた際に指摘された部分の関係でやるべきだった大腸の内視鏡検査をつい先日ようやく受けてきた。<!--]--></p><p class="my-6 leading-7"><!--[-->検査前に下剤を大量に飲んで腸を洗浄するやつが本当に嫌で、日程が決まってからずっと憂鬱だったのだが、検査前日夜くらいから突然腹を括れて「かかってこいや」みたいなテンションになっていた。<!--]--></p><p class="my-6 leading-7"><!--[-->当日は投与された薬の関係でふにゃふにゃしていたらいつの間にか終わっていたというのもあり、いざ終わってるみるとあっけなく、特に異常も見つからずで安心した。<!--]--></p><p class="my-6 leading-7"><!--[-->水を飲む習慣の方はここ最近少し達成できてない日が多かったã
1®ã§ã€æ”¹ã‚ã¦ã€Œæœèµ·ããŸã‚‰ã•っさとウォーターボトルに水を詰める」という作業をするようにしている。<!--]--></p><p class="my-6 leading-7"><!--[-->近いうちにまた健康診断があるので数値の改善が見られると嬉しいな。<!--]--></p><h2 id="バンド" class="relative text-2xl text-highlighted font-bold mt-12 mb-6 scroll-mt-[calc(48px+45px+var(--ui-header-height))] lg:scroll-mt-[calc(48px+var(--ui-header-height))] [&amp;&gt;a]:focus-visible:outline-primary [&amp;&gt;a&gt;code]:border-dashed hover:[&amp;&gt;a&gt;code]:border-primary hover:[&amp;&gt;a&gt;code]:text-primary [&amp;&gt;a&gt;code]:text-xl/7 [&amp;&gt;a&gt;code]:font-bold [&amp;&gt;a&gt;code]:transition-colors"><!--[-->バンド<!--]--></h2><p class="my-6 leading-7"><!--[-->久々にバンドでスタジオに入り、スピッツの春の歌と、サカナクションの怪獣をやった。やはりバンドの皆で音を出して合わせるのはプリミティブな快感がある。<!--]--></p><p class="my-6 leading-7"><!--[-->組んでいるバンドとは別で、去年お邪魔させてもらった仙台の人たちにまた誘われたので、今年も仙台でのライブを頑張る。めちゃめちゃ楽しかったのでまたしっかり貢献したい。<!--]--></p><h2 id="超かぐや姫" class="relative text-2xl text-highlighted font-bold mt-12 mb-6 scroll-mt-[calc(48px+45px+var(--ui-header-height))] lg:scroll-mt-[calc(48px+var(--ui-header-height))] [&amp;&gt;a]:focus-visible:outline-primary [&amp;&gt;a&gt;code]:border-dashed hover:[&amp;&gt;a&gt;code]:border-primary hover:[&amp;&gt;a&gt;code]:text-primary [&amp;&gt;a&gt;code]:text-xl/7 [&amp;&gt;a&gt;code]:font-bold [&amp;&gt;a&gt;code]:transition-colors"><!--[-->超かぐや姫!<!--]--></h2><p class="my-6 leading-7"><!--[-->フォロワーが共有してたrayのMVを見たのがきっかけで気になっていた(rayが好きすぎるので)。<!--]--></p><p class="my-6 leading-7"><!--[--><!--[--><a href="https://www.youtube.com/watch?v=356MRZ6P5h0" rel="nofollow" class="border-b border-transparent hover:border-primary font-medium focus-visible:outline-primary focus-visible:has-[&gt;code]:outline-0 [&amp;&gt;code]:border-dashed hover:[&amp;&gt;code]:border-primary hover:[&amp;&gt;code]:text-primary focus-visible:[&amp;&gt;code]:border-primary focus-visible:[&amp;&gt;code]:text-primary transition-colors [&amp;&gt;code]:transition-colors text-primary hover:text-secondary underline hover:underline border-none hover:border-none"><!--[--><!--[--><!--[-->https://www.youtube.com/watch?v=356MRZ6P5h0<!--]--><!--]--><!--]--></a><!--]--><!--]--></p><p class="my-6 leading-7"><!--[-->地に足のついた仮想世界の描写が、ワクワクもありつつどこか安心感のある良い塩梅だったと思う。EDでrayが流れたときには「これ創作キャラのテーマソングつけるのが好きなオタクがrayに脳を焼かれて生まれた作品だな」と思うくらいにはrayでできている作品だった。<!--]--></p><p class="my-6 leading-7"><!--[-->逆張りオタクだったのでボカロ流行り始めの頃の曲を全然聞いておらず、まさか令和になってワールドイズマインとメルトをちゃんと聞くことになるとは思わなかった。<!--]--></p><p class="my-6 leading-7"><!--[-->総じて非常に良い体験だった。詳しい感想は後で書くかもしれないし書かないかもしれない。2月に見たピーナッツくんのバーチャルライブ「PQ」と合わせて、バーチャルライブとは、みたいなものに思いを馳せたりもした。<!--]--></p></div><!--]--></div><nav aria-label="記事ナビゲーション" class="mt-16 pt-10 border-t border-default"><div class="grid grid-cols-1 md:grid-cols-2 gap-8 md:gap-12"><a href="/blog/2026-05-07" class="focus-visible:outline-primary text-muted hover:text-default transition-colors group block"><!--[--><!--[--><span class="inline-flex items-center gap-1 text-xs tracking-wider text-muted"><span class="iconify i-ri:arrow-left-s-line size-4 transition-transform group-hover:-translate-x-0.5" aria-hidden="true" style=""></span> 新しい記事 </span>
1<h3 class="mt-2 text-lg font-bold text-highlighted leading-snug decoration-1 underline-offset-4 group-hover:text-secondary group-hover:underline">ブログを更新したかっただけなのに</h3><!--]--><!--]--></a><a href="/blog/2026-02-25" class="focus-visible:outline-primary text-muted hover:text-default transition-colors group block md:col-start-2 md:text-right"><!--[--><!--[--><span class="inline-flex items-center gap-1 text-xs tracking-wider text-muted"> 過去の記事 <span class="iconify i-ri:arrow-right-s-line size-4 transition-transform group-hover:translate-x-0.5" aria-hidden="true" style=""></span></span><h3 class="mt-2 text-lg font-bold text-highlighted leading-snug decoration-1 underline-offset-4 group-hover:text-secondary group-hover:underline">太陽から世界へ</h3><!--]--><!--]--></a></div><div class="mt-12 flex justify-center"><button type="button" class="inline-flex items-center gap-1 text-sm text-muted hover:text-secondary underline underline-offset-4"><span class="iconify i-ri:arrow-up-s-line size-4" aria-hidden="true" style=""></span> 記事の先頭へ </button></div></nav><!--]--></div><!----></article></div><!--]--></main><footer data-slot="root" class="border-t border-default mt-16 bg-elevated"><div data-slot="top" class="py-8 lg:py-12"><!--[--><div class="sm:px-6 lg:px-8 w-full max-w-(--ui-container) mx-auto px-6 grid grid-cols-1 md:grid-cols-3 gap-8 py-12"><!--[--><div><h2 class="text-sm font-semibold text-highlighted mb-3"> Archive </h2><ul class="list-none p-0 m-0 space-y-2"><!--[--><li><a href="/archive/2026" class="focus-visible:outline-primary transition-colors text-sm text-muted hover:text-secondary underline tabular-nums"><!--[--><!--[-->2026<!--]--><!--]--></a></li><li><a href="/archive/2025" class="focus-visible:outline-primary transition-colors text-sm text-muted hover:text-secondary underline tabular-nums"><!--[--><!--[-->2025<!--]--><!--]--></a></li><li><a href="/archive/2024" class="focus-visible:outline-primary transition-colors text-sm text-muted hover:text-secondary underline tabular-nums"><!--[--><!--[-->2024<!--]--><!--]--></a></li><!--]--></ul></div><div><h2 class="text-sm font-semibold text-highlighted mb-3"> Connect </h2><ul class="list-none p-0 m-0 space-y-2"><!--[--><li><!--[--><a href="https://github.com/ryuhei373" rel="noopener noreferrer" target="_blank" class="focus-visible:outline-primary transition-colors inline-flex items-center gap-2 text-sm text-muted hover:text-secondary underline"><!--[--><!--[--><span class="iconify i-ri:github-fill size-4" aria-hidden="true" style=""></span> @ryuhei373<!--]--><!--]--></a><!--]--></li><li><!--[--><a href="https://bsky.app/profile/ryuhei373.dev" rel="noopener noreferrer" target="_blank" class="focus-visible:outline-primary transition-colors inline-flex items-center gap-2 text-sm text-muted hover:text-secondary underline"><!--[--><!--[--><span class="iconify i-ri:bluesky-fill size-4" aria-hidden="true" style=""></span> @ryuhei373.dev<!--]--><!--]--></a><!--]--></li><li><!--[--><a href="https://x.com/373_3" rel="noopener noreferrer" target="_blank" class="focus-visible:outline-primary transition-colors inline-flex items-center gap-2 text-sm text-muted hover:text-secondary underline"><!--[--><!--[--><span class="iconify i-ri:twitter-x-fill size-4" aria-hidden="true" style=""></span> @373_3<!--]--><!--]--></a><!--]--></li><!--]--><li><!--[--><a href="/rss.xml" class="focus-visible:outline-primary transition-colors inline-flex items-center gap-2 text-sm text-muted hover:text-secondary underline"><!--[--><!--[--><span class="iconify i-ri:rss-fill size-4" aria-hidden="true" style=""></span> RSS <!--]--><!--]--></a><!--]--></li></ul></div><div><h2 class="text-sm font-semibold text-highlighted mb-3"> Colophon </h2><ul class="list-none p-0 m-0 space-y-2 text-sm text-muted"><li>Built with Nuxt 4 / Nuxt UI / Nuxt Content</li><li>Hosted on Cloudflare Workers</li><li> Themed with <!--[--><a href="https://stephango.com/flexoki" rel="noopener noreferrer" target="_blank" class="focus-visible:outline-primary text-muted transition-colors underline hover:text-secondary"><!--[--><!--[--> flexoki <!--]--><!--]--></a>
1<!--]--></li><li><!--[--><a href="https://github.com/ryuhei373/ryuhei373.dev" rel="noopener noreferrer" target="_blank" class="focus-visible:outline-primary text-muted transition-colors underline hover:text-secondary"><!--[--><!--[--> Source on GitHub <!--]--><!--]--></a><!--]--></li></ul></div><!--]--></div><!--]--></div><div class="sm:px-6 lg:px-8 w-full max-w-(--ui-container) mx-auto px-6 py-8 lg:py-4 lg:flex lg:items-center lg:justify-between lg:gap-x-3" data-slot="container"><!--[--><div data-slot="right" class="lg:flex-1 flex items-center justify-center lg:justify-end gap-x-1.5 lg:order-3"><!--[--><!--]--></div><div data-slot="center" class="mt-3 lg:mt-0 lg:order-2 flex items-center justify-center"><!--[--><!--]--></div><div data-slot="left" class="flex items-center justify-center lg:justify-start lg:flex-1 gap-x-1.5 mt-3 lg:mt-0 lg:order-1"><!--[--><!--]--></div><!--]--></div><!----></footer><!--]--><!--]--><!--[--><!--]--><!--v-if--><!--]--><!--[--><!--]--><!--]--><!--]--></div><div id="teleports"></div>
1<script>window.__NUXT__={};window.__NUXT__.config={public:{mdc:{components:{prose:true,map:{accordion:"ProseAccordion","accordion-item":"ProseAccordionItem",badge:"ProseBadge",callout:"ProseCallout",card:"ProseCard","card-group":"ProseCardGroup",caution:"ProseCaution","code-collapse":"ProseCodeCollapse","code-group":"ProseCodeGroup","code-icon":"ProseCodeIcon","code-preview":"ProseCodePreview","code-tree":"ProseCodeTree",collapsible:"ProseCollapsible",field:"ProseField","field-group":"ProseFieldGroup",icon:"ProseIcon",kbd:"ProseKbd",note:"ProseNote",steps:"ProseSteps",tabs:"ProseTabs","tabs-item":"ProseTabsItem",tip:"ProseTip",warning:"ProseWarning"},customElements:[]},headings:{anchorLinks:{h1:false,h2:false,h3:false,h4:false,h5:false,h6:false}},highlight:{noApiRoute:true,theme:{light:"github-light",default:"github-light",dark:"github-dark"},highlighter:"shiki",shikiEngine:"oniguruma",langs:["js","jsx","json","ts","tsx","vue","css","html","bash","md","mdc","yaml"]}},"nuxt-seo-utils-version":"8.3.3","seo-utils":{canonicalQueryWhitelist:["page","sort","filter","search","q","category","tag"],canonicalLowercase:true,tagPriority:"low",separator:"",titleSeparator:""},content:{wsUrl:""},"nuxt-robots":{version:"6.1.3",isNuxtContentV2:false,debug:false,credits:true,groups:[{userAgent:["*"],disallow:[""],allow:[],contentUsage:[],contentSignal:[],_indexable:true,_rules:[],_normalized:true}],sitemap:["/sitemap.xml"],header:true,robotsEnabledValue:"index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1",robotsDisabledValue:"noindex, nofollow",cacheControl:"max-age=14400, must-revalidate",botDetection:true,pageMetaRobots:{}},"nuxt-og-image":{defaults:{emojis:"noto",extension:"png",width:1200,height:600,cacheMaxAgeSeconds:259200},hasServerRuntime:false}},app:{baseURL:"/",buildId:"785d4b7f-6135-4a15-babd-277b4cd8cff9",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script>
1<script type="application/ld+json" data-nuxt-schema-org="true" data-hid="schema-org-graph">{"@context":"https://schema.org","@graph":[{"@id":"https://ryuhei373.dev/#website","@type":"WebSite","description":"猫2匹と暮らしているWebアプリケーション開発者。HTMLとCSSが好き。","inLanguage":"ja","name":"ryuhei373.dev","url":"https://ryuhei373.dev/"},{"@id":"https://ryuhei373.dev/blog/2026-04-04#webpage","@type":"WebPage","description":"猫2匹と暮らしているWebアプリケーション開発者。HTMLとCSSが好き。","name":"2026年3月まとめ","url":"https://ryuhei373.dev/blog/2026-04-04","isPartOf":{"@id":"https://ryuhei373.dev/#website"},"potentialAction":[{"@type":"ReadAction","target":["https://ryuhei373.dev/blog/2026-04-04"]}]}]}</script>
1<script type="application/json" data-nuxt-data="nuxt-app" data-ssr="true" id="__NUXT_DATA__" data-src="/blog/2026-04-04/_payload.json?785d4b7f-6135-4a15-babd-277b4cd8cff9">[{"state":1,"once":18,"_errors":19,"serverRendered":5,"path":21,"prerenderedAt":22},["Reactive",2],{"$scolor-mode":3,"$snuxt-seo-utils:routeRules":7,"$stoasts":8,"$ssite-config":9},{"preference":4,"value":4,"unknown":5,"forced":6},"light",true,false,{"head":-1,"seoMeta":-1},[],{"_priority":10,"defaultLocale":13,"description":14,"env":15,"name":16,"url":17},{"env":11,"url":12,"name":12,"description":12,"defaultLocale":12},-15,-3,"ja","猫2匹と暮らしているWebアプリケーション開発者。HTMLとCSSが好き。","production","ryuhei373.dev","https://ryuhei373.dev",["Set"],["ShallowReactive",20],{"/blog/2026-04-04":-1,"footer-archive-years":-1,"/blog/2026-04-04-surround":-1},"/blog/2026-04-04",1785485731836]</script>
1</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.