cloudflare
tcp/443 tcp/80 tcp/8443
Open service 2606:4700:3037::6815:5c1d:80 · kohski.dev
2026-01-24 14:23
HTTP/1.1 301 Moved Permanently
Date: Sat, 24 Jan 2026 14:23:50 GMT
Content-Length: 0
Connection: close
Location: https://kohski.dev/
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=wU2aygmc4tlu51IYvxUe0LToMC3G1ViSH7sft4uPx9cxygzlRQbRkQZicfj2IkTpKksDBF7ngc%2FL7LZpJDLzOG0Yplvy5yVJqH8Q8Ad5lj6lXAR0Td0%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server-Timing: cfEdge;dur=11,cfOrigin;dur=0
Server: cloudflare
CF-RAY: 9c3030e73eceeccd-BOM
Open service 104.21.92.29:443 · kohski.dev
2026-01-24 14:23
HTTP/1.1 200 OK
Date: Sat, 24 Jan 2026 14:23:51 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: close
Access-Control-Allow-Origin: *
Cache-Control: public, max-age=0, must-revalidate
cf-cache-status: DYNAMIC
referrer-policy: strict-origin-when-cross-origin
x-content-type-options: nosniff
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=GYEyhvn31kYlr9ohy6gPyYU0Y6Cj3wRQY4qgbY34H%2Fec3j8v1PNwxW8f77ODMqIipIiE299n%2FMjjBBq3ZbwylmE23PlSx2cq"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
Server-Timing: cfCacheStatus;desc="DYNAMIC"
Server-Timing: cfEdge;dur=26,cfOrigin;dur=227
CF-RAY: 9c3030e8b8b8ec6e-SIN
alt-svc: h3=":443"; ma=86400
Page title: kohski's blog
<!doctype html><html lang=en dir=auto><head><meta name=generator content="Hugo 0.118.2"><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>kohski's blog</title><meta name=keywords content="Blog,Tech,AWS,TypeScript,JavaScript,Python,Serverless"><meta name=description content="しがないアラサーエンジニアのブログ"><meta name=author content="kohski"><link rel=canonical href=https://kohski.dev/><meta name=google-site-verification content="XYZabc"><link crossorigin=anonymous href=/assets/css/stylesheet.b609c58d5c11bb90b1a54e04005d74ad1ddf22165eb79f5533967e57df9c3b50.css integrity="sha256-tgnFjVwRu5CxpU4EAF10rR3fIhZet59VM5Z+V9+cO1A=" rel="preload stylesheet" as=style><link rel=icon href=https://kohski.dev/logos/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://kohski.dev/logs/favicon-16.png><link rel=icon type=image/png sizes=32x32 href=https://kohski.dev/logos/favicon-32.png><link rel=apple-touch-icon href=https://kohski.dev/apple-touch-icon.png><link rel=mask-icon href=https://kohski.dev/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://kohski.dev/index.xml><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51)}.list{background:var(--theme)}.list:not(.dark)::-webkit-scrollbar-track{background:0 0}.list:not(.dark)::-webkit-scrollbar-thumb{border-color:var(--theme)}}</style></noscript><meta property="og:title" content="kohski's blog"><meta property="og:description" content="しがないアラサーエンジニアのブログ"><meta property="og:type" content="website"><meta property="og:url" content="https://kohski.dev/"><meta property="og:image" content="https://kohski.dev/logos/favicon-48.png"><meta property="og:site_name" content="kohski's blog"><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="https://kohski.dev/logos/favicon-48.png"><meta name=twitter:title content="kohski's blog"><meta name=twitter:description content="しがないアラサーエンジニアのブログ"><script type=application/ld+json>{"@context":"https://schema.org","@type":"Organization","name":"kohski's blog","url":"https://kohski.dev/","description":"しがないアラサーエンジニアのブログ","thumbnailUrl":"https://kohski.dev/logos/favicon.ico","sameAs":["https://x.com/kos_kim_8","https://github.com/kohski"]}</script></head><body class=list id=top><script>localStorage.getItem("pref-theme")==="dark"?document.body.classList.add("dark"):localStorage.getItem("pref-theme")==="light"?document.body.classList.remove("dark"):window.matchMedia("(prefers-color-scheme: dark)").matches&&document.body.classList.add("dark")</script><header class=header><nav class=nav><div class=logo><a href=https://kohski.dev/ accesskey=h title="kohski's blog (Alt + H)">kohski's blog</a><div class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)"><svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/>
Open service 2606:4700:3031::ac43:b959:80 · kohski.dev
2026-01-24 14:23
HTTP/1.1 301 Moved Permanently
Date: Sat, 24 Jan 2026 14:23:50 GMT
Content-Length: 0
Connection: close
Location: https://kohski.dev/
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=i0trf7VX6nfs33737z6WiiXRcDsEizv48cQkEqhiJlOvaFEfBn%2BQhHddWOoVLlqJ%2BDhA43uEGIBOfPZw1jay6iU39Tj6fmLv2FP28lD6BLQ5MMT1Mb8%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server-Timing: cfEdge;dur=16,cfOrigin;dur=0
Server: cloudflare
CF-RAY: 9c3030e6cf55ce68-SJC
Open service 172.67.185.89:8443 · kohski.dev
2026-01-24 14:23
HTTP/1.1 200 OK
Date: Sat, 24 Jan 2026 14:23:50 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: close
Access-Control-Allow-Origin: *
Cache-Control: public, max-age=0, must-revalidate
cf-cache-status: DYNAMIC
referrer-policy: strict-origin-when-cross-origin
x-content-type-options: nosniff
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=o2qfsUjLmMENQ1zSSGLo1Ga2XbcnMJW1iWuHIwVIunfDxto3KJSI5EXEIlM03uzIuYeN9JkyU5bOMDOkh82FirqaIH5BBLpbt%2BY%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
Server-Timing: cfCacheStatus;desc="DYNAMIC"
Server-Timing: cfEdge;dur=8,cfOrigin;dur=34
CF-RAY: 9c3030e71fedf31f-SJC
alt-svc: h3=":8443"; ma=86400
Page title: kohski's blog
<!doctype html><html lang=en dir=auto><head><meta name=generator content="Hugo 0.118.2"><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>kohski's blog</title><meta name=keywords content="Blog,Tech,AWS,TypeScript,JavaScript,Python,Serverless"><meta name=description content="しがないアラサーエンジニアのブログ"><meta name=author content="kohski"><link rel=canonical href=https://kohski.dev/><meta name=google-site-verification content="XYZabc"><link crossorigin=anonymous href=/assets/css/stylesheet.b609c58d5c11bb90b1a54e04005d74ad1ddf22165eb79f5533967e57df9c3b50.css integrity="sha256-tgnFjVwRu5CxpU4EAF10rR3fIhZet59VM5Z+V9+cO1A=" rel="preload stylesheet" as=style><link rel=icon href=https://kohski.dev/logos/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://kohski.dev/logs/favicon-16.png><link rel=icon type=image/png sizes=32x32 href=https://kohski.dev/logos/favicon-32.png><link rel=apple-touch-icon href=https://kohski.dev/apple-touch-icon.png><link rel=mask-icon href=https://kohski.dev/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://kohski.dev/index.xml><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51)}.list{background:var(--theme)}.list:not(.dark)::-webkit-scrollbar-track{background:0 0}.list:not(.dark)::-webkit-scrollbar-thumb{border-color:var(--theme)}}</style></noscript><meta property="og:title" content="kohski's blog"><meta property="og:description" content="しがないアラサーエンジニアのブログ"><meta property="og:type" content="website"><meta property="og:url" content="https://kohski.dev/"><meta property="og:image" content="https://kohski.dev/logos/favicon-48.png"><meta property="og:site_name" content="kohski's blog"><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="https://kohski.dev/logos/favicon-48.png"><meta name=twitter:title content="kohski's blog"><meta name=twitter:description content="しがないアラサーエンジニアのブログ"><script type=application/ld+json>{"@context":"https://schema.org","@type":"Organization","name":"kohski's blog","url":"https://kohski.dev/","description":"しがないアラサーエンジニアのブログ","thumbnailUrl":"https://kohski.dev/logos/favicon.ico","sameAs":["https://x.com/kos_kim_8","https://github.com/kohski"]}</script></head><body class=list id=top><script>localStorage.getItem("pref-theme")==="dark"?document.body.classList.add("dark"):localStorage.getItem("pref-theme")==="light"?document.body.classList.remove("dark"):window.matchMedia("(prefers-color-scheme: dark)").matches&&document.body.classList.add("dark")</script><header class=header><nav class=nav><div class=logo><a href=https://kohski.dev/ accesskey=h title="kohski's blog (Alt + H)">kohski's blog</a><div class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)"><svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/>
Open service 172.67.185.89:80 · kohski.dev
2026-01-24 14:23
HTTP/1.1 301 Moved Permanently
Date: Sat, 24 Jan 2026 14:23:50 GMT
Content-Length: 0
Connection: close
Location: https://kohski.dev/
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=jpwGmiKYYcPZO2fXsY%2B%2F0sIpROWiAL9TS3Fv2cfZm3hkvJosUep%2Fz%2BeL0ip9aVy3mapMPzEyE%2BDqa8LQzpWk8qsKkbpvYiTCHOI%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server-Timing: cfEdge;dur=9,cfOrigin;dur=0
Server: cloudflare
CF-RAY: 9c3030e69aa31a24-YYZ
Open service 104.21.92.29:8443 · kohski.dev
2026-01-24 14:23
HTTP/1.1 200 OK
Date: Sat, 24 Jan 2026 14:23:50 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: close
Access-Control-Allow-Origin: *
Cache-Control: public, max-age=0, must-revalidate
cf-cache-status: DYNAMIC
referrer-policy: strict-origin-when-cross-origin
x-content-type-options: nosniff
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=%2Fr185YDfVtxvZkp3vOrY9mPDhn8Dkj5vmdSyi%2BmMmSOJgymOkPOAwpn7jeWO64udkla18YIlqnaKi4IWN5v1W%2FRJrJTZows50B8%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
Server-Timing: cfCacheStatus;desc="DYNAMIC"
Server-Timing: cfEdge;dur=10,cfOrigin;dur=46
CF-RAY: 9c3030e6edf236c3-YYZ
alt-svc: h3=":8443"; ma=86400
Page title: kohski's blog
<!doctype html><html lang=en dir=auto><head><meta name=generator content="Hugo 0.118.2"><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>kohski's blog</title><meta name=keywords content="Blog,Tech,AWS,TypeScript,JavaScript,Python,Serverless"><meta name=description content="しがないアラサーエンジニアのブログ"><meta name=author content="kohski"><link rel=canonical href=https://kohski.dev/><meta name=google-site-verification content="XYZabc"><link crossorigin=anonymous href=/assets/css/stylesheet.b609c58d5c11bb90b1a54e04005d74ad1ddf22165eb79f5533967e57df9c3b50.css integrity="sha256-tgnFjVwRu5CxpU4EAF10rR3fIhZet59VM5Z+V9+cO1A=" rel="preload stylesheet" as=style><link rel=icon href=https://kohski.dev/logos/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://kohski.dev/logs/favicon-16.png><link rel=icon type=image/png sizes=32x32 href=https://kohski.dev/logos/favicon-32.png><link rel=apple-touch-icon href=https://kohski.dev/apple-touch-icon.png><link rel=mask-icon href=https://kohski.dev/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://kohski.dev/index.xml><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51)}.list{background:var(--theme)}.list:not(.dark)::-webkit-scrollbar-track{background:0 0}.list:not(.dark)::-webkit-scrollbar-thumb{border-color:var(--theme)}}</style></noscript><meta property="og:title" content="kohski's blog"><meta property="og:description" content="しがないアラサーエンジニアのブログ"><meta property="og:type" content="website"><meta property="og:url" content="https://kohski.dev/"><meta property="og:image" content="https://kohski.dev/logos/favicon-48.png"><meta property="og:site_name" content="kohski's blog"><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="https://kohski.dev/logos/favicon-48.png"><meta name=twitter:title content="kohski's blog"><meta name=twitter:description content="しがないアラサーエンジニアのブログ"><script type=application/ld+json>{"@context":"https://schema.org","@type":"Organization","name":"kohski's blog","url":"https://kohski.dev/","description":"しがないアラサーエンジニアのブログ","thumbnailUrl":"https://kohski.dev/logos/favicon.ico","sameAs":["https://x.com/kos_kim_8","https://github.com/kohski"]}</script></head><body class=list id=top><script>localStorage.getItem("pref-theme")==="dark"?document.body.classList.add("dark"):localStorage.getItem("pref-theme")==="light"?document.body.classList.remove("dark"):window.matchMedia("(prefers-color-scheme: dark)").matches&&document.body.classList.add("dark")</script><header class=header><nav class=nav><div class=logo><a href=https://kohski.dev/ accesskey=h title="kohski's blog (Alt + H)">kohski's blog</a><div class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)"><svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/>
Open service 2606:4700:3037::6815:5c1d:443 · kohski.dev
2026-01-24 14:23
HTTP/1.1 200 OK
Date: Sat, 24 Jan 2026 14:23:50 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: close
Access-Control-Allow-Origin: *
Cache-Control: public, max-age=0, must-revalidate
cf-cache-status: DYNAMIC
referrer-policy: strict-origin-when-cross-origin
x-content-type-options: nosniff
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=sbDkdfgKL4P5jgD%2BMJLG8VFku3VrVF2R1iOK%2B%2B6nTmA7B%2FBdROsZO0k%2BVhO%2FfHYq015WD9sliYIn0c5tjr%2F2CiSdl3eIpVVuhz9VZj80hglQWPx1GHY%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
Server-Timing: cfCacheStatus;desc="DYNAMIC"
Server-Timing: cfEdge;dur=9,cfOrigin;dur=31
CF-RAY: 9c3030e6da9a37a1-YYZ
alt-svc: h3=":443"; ma=86400
Page title: kohski's blog
<!doctype html><html lang=en dir=auto><head><meta name=generator content="Hugo 0.118.2"><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>kohski's blog</title><meta name=keywords content="Blog,Tech,AWS,TypeScript,JavaScript,Python,Serverless"><meta name=description content="しがないアラサーエンジニアのブログ"><meta name=author content="kohski"><link rel=canonical href=https://kohski.dev/><meta name=google-site-verification content="XYZabc"><link crossorigin=anonymous href=/assets/css/stylesheet.b609c58d5c11bb90b1a54e04005d74ad1ddf22165eb79f5533967e57df9c3b50.css integrity="sha256-tgnFjVwRu5CxpU4EAF10rR3fIhZet59VM5Z+V9+cO1A=" rel="preload stylesheet" as=style><link rel=icon href=https://kohski.dev/logos/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://kohski.dev/logs/favicon-16.png><link rel=icon type=image/png sizes=32x32 href=https://kohski.dev/logos/favicon-32.png><link rel=apple-touch-icon href=https://kohski.dev/apple-touch-icon.png><link rel=mask-icon href=https://kohski.dev/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://kohski.dev/index.xml><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51)}.list{background:var(--theme)}.list:not(.dark)::-webkit-scrollbar-track{background:0 0}.list:not(.dark)::-webkit-scrollbar-thumb{border-color:var(--theme)}}</style></noscript><meta property="og:title" content="kohski's blog"><meta property="og:description" content="しがないアラサーエンジニアのブログ"><meta property="og:type" content="website"><meta property="og:url" content="https://kohski.dev/"><meta property="og:image" content="https://kohski.dev/logos/favicon-48.png"><meta property="og:site_name" content="kohski's blog"><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="https://kohski.dev/logos/favicon-48.png"><meta name=twitter:title content="kohski's blog"><meta name=twitter:description content="しがないアラサーエンジニアのブログ"><script type=application/ld+json>{"@context":"https://schema.org","@type":"Organization","name":"kohski's blog","url":"https://kohski.dev/","description":"しがないアラサーエンジニアのブログ","thumbnailUrl":"https://kohski.dev/logos/favicon.ico","sameAs":["https://x.com/kos_kim_8","https://github.com/kohski"]}</script></head><body class=list id=top><script>localStorage.getItem("pref-theme")==="dark"?document.body.classList.add("dark"):localStorage.getItem("pref-theme")==="light"?document.body.classList.remove("dark"):window.matchMedia("(prefers-color-scheme: dark)").matches&&document.body.classList.add("dark")</script><header class=header><nav class=nav><div class=logo><a href=https://kohski.dev/ accesskey=h title="kohski's blog (Alt + H)">kohski's blog</a><div class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)"><svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/>
Open service 172.67.185.89:443 · kohski.dev
2026-01-24 14:23
HTTP/1.1 200 OK
Date: Sat, 24 Jan 2026 14:23:50 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: close
Access-Control-Allow-Origin: *
Cache-Control: public, max-age=0, must-revalidate
cf-cache-status: DYNAMIC
referrer-policy: strict-origin-when-cross-origin
x-content-type-options: nosniff
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=VX2FT8xoo1JRLxJHgdxWSvumnVfUQn%2BnLWjxv%2FqCb3QqnZ6eYYOm7%2BGopNvBuukAa5hZ33NzxbUNZJ17QL9A3Btxru5q9EciQp8%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
Server-Timing: cfCacheStatus;desc="DYNAMIC"
Server-Timing: cfEdge;dur=11,cfOrigin;dur=40
CF-RAY: 9c3030e6ea50aadc-YYZ
alt-svc: h3=":443"; ma=86400
Page title: kohski's blog
<!doctype html><html lang=en dir=auto><head><meta name=generator content="Hugo 0.118.2"><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>kohski's blog</title><meta name=keywords content="Blog,Tech,AWS,TypeScript,JavaScript,Python,Serverless"><meta name=description content="しがないアラサーエンジニアのブログ"><meta name=author content="kohski"><link rel=canonical href=https://kohski.dev/><meta name=google-site-verification content="XYZabc"><link crossorigin=anonymous href=/assets/css/stylesheet.b609c58d5c11bb90b1a54e04005d74ad1ddf22165eb79f5533967e57df9c3b50.css integrity="sha256-tgnFjVwRu5CxpU4EAF10rR3fIhZet59VM5Z+V9+cO1A=" rel="preload stylesheet" as=style><link rel=icon href=https://kohski.dev/logos/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://kohski.dev/logs/favicon-16.png><link rel=icon type=image/png sizes=32x32 href=https://kohski.dev/logos/favicon-32.png><link rel=apple-touch-icon href=https://kohski.dev/apple-touch-icon.png><link rel=mask-icon href=https://kohski.dev/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://kohski.dev/index.xml><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51)}.list{background:var(--theme)}.list:not(.dark)::-webkit-scrollbar-track{background:0 0}.list:not(.dark)::-webkit-scrollbar-thumb{border-color:var(--theme)}}</style></noscript><meta property="og:title" content="kohski's blog"><meta property="og:description" content="しがないアラサーエンジニアのブログ"><meta property="og:type" content="website"><meta property="og:url" content="https://kohski.dev/"><meta property="og:image" content="https://kohski.dev/logos/favicon-48.png"><meta property="og:site_name" content="kohski's blog"><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="https://kohski.dev/logos/favicon-48.png"><meta name=twitter:title content="kohski's blog"><meta name=twitter:description content="しがないアラサーエンジニアのブログ"><script type=application/ld+json>{"@context":"https://schema.org","@type":"Organization","name":"kohski's blog","url":"https://kohski.dev/","description":"しがないアラサーエンジニアのブログ","thumbnailUrl":"https://kohski.dev/logos/favicon.ico","sameAs":["https://x.com/kos_kim_8","https://github.com/kohski"]}</script></head><body class=list id=top><script>localStorage.getItem("pref-theme")==="dark"?document.body.classList.add("dark"):localStorage.getItem("pref-theme")==="light"?document.body.classList.remove("dark"):window.matchMedia("(prefers-color-scheme: dark)").matches&&document.body.classList.add("dark")</script><header class=header><nav class=nav><div class=logo><a href=https://kohski.dev/ accesskey=h title="kohski's blog (Alt + H)">kohski's blog</a><div class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)"><svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/>
Open service 2606:4700:3037::6815:5c1d:8443 · kohski.dev
2026-01-24 14:23
HTTP/1.1 200 OK
Date: Sat, 24 Jan 2026 14:23:50 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: close
Access-Control-Allow-Origin: *
Cache-Control: public, max-age=0, must-revalidate
cf-cache-status: DYNAMIC
referrer-policy: strict-origin-when-cross-origin
x-content-type-options: nosniff
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=mD17NzsjS88OiVbNmdUXucbHWFrVzOEm0bDxi5IWyzcpbnxcQhEhhwTNjuRNSLASJBpQL7%2FTpZNuhrR02Ik%2FMCJl9WB%2BMkv%2FmUYCw%2BqIFaEhFor6pQk%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
Server-Timing: cfCacheStatus;desc="DYNAMIC"
Server-Timing: cfEdge;dur=7,cfOrigin;dur=33
CF-RAY: 9c3030e6de7ef46c-YYZ
alt-svc: h3=":8443"; ma=86400
Page title: kohski's blog
<!doctype html><html lang=en dir=auto><head><meta name=generator content="Hugo 0.118.2"><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>kohski's blog</title><meta name=keywords content="Blog,Tech,AWS,TypeScript,JavaScript,Python,Serverless"><meta name=description content="しがないアラサーエンジニアのブログ"><meta name=author content="kohski"><link rel=canonical href=https://kohski.dev/><meta name=google-site-verification content="XYZabc"><link crossorigin=anonymous href=/assets/css/stylesheet.b609c58d5c11bb90b1a54e04005d74ad1ddf22165eb79f5533967e57df9c3b50.css integrity="sha256-tgnFjVwRu5CxpU4EAF10rR3fIhZet59VM5Z+V9+cO1A=" rel="preload stylesheet" as=style><link rel=icon href=https://kohski.dev/logos/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://kohski.dev/logs/favicon-16.png><link rel=icon type=image/png sizes=32x32 href=https://kohski.dev/logos/favicon-32.png><link rel=apple-touch-icon href=https://kohski.dev/apple-touch-icon.png><link rel=mask-icon href=https://kohski.dev/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://kohski.dev/index.xml><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51)}.list{background:var(--theme)}.list:not(.dark)::-webkit-scrollbar-track{background:0 0}.list:not(.dark)::-webkit-scrollbar-thumb{border-color:var(--theme)}}</style></noscript><meta property="og:title" content="kohski's blog"><meta property="og:description" content="しがないアラサーエンジニアのブログ"><meta property="og:type" content="website"><meta property="og:url" content="https://kohski.dev/"><meta property="og:image" content="https://kohski.dev/logos/favicon-48.png"><meta property="og:site_name" content="kohski's blog"><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="https://kohski.dev/logos/favicon-48.png"><meta name=twitter:title content="kohski's blog"><meta name=twitter:description content="しがないアラサーエンジニアのブログ"><script type=application/ld+json>{"@context":"https://schema.org","@type":"Organization","name":"kohski's blog","url":"https://kohski.dev/","description":"しがないアラサーエンジニアのブログ","thumbnailUrl":"https://kohski.dev/logos/favicon.ico","sameAs":["https://x.com/kos_kim_8","https://github.com/kohski"]}</script></head><body class=list id=top><script>localStorage.getItem("pref-theme")==="dark"?document.body.classList.add("dark"):localStorage.getItem("pref-theme")==="light"?document.body.classList.remove("dark"):window.matchMedia("(prefers-color-scheme: dark)").matches&&document.body.classList.add("dark")</script><header class=header><nav class=nav><div class=logo><a href=https://kohski.dev/ accesskey=h title="kohski's blog (Alt + H)">kohski's blog</a><div class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)"><svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/>
Open service 2606:4700:3031::ac43:b959:443 · kohski.dev
2026-01-24 14:23
HTTP/1.1 200 OK
Date: Sat, 24 Jan 2026 14:23:50 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: close
Access-Control-Allow-Origin: *
Cache-Control: public, max-age=0, must-revalidate
cf-cache-status: DYNAMIC
referrer-policy: strict-origin-when-cross-origin
x-content-type-options: nosniff
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=N%2BlqpCRDcu9LYxAIyF3J%2BAV72O1nR2h85%2FIcKkSPjDvtpiRlHFJCSCXmfZzmUwow%2BDc1yp1RoxfjjXtMz1WsUAoKQCJxFEJ0fHiKjI%2F%2F%2FPD7ntbbIpk%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
Server-Timing: cfCacheStatus;desc="DYNAMIC"
Server-Timing: cfEdge;dur=9,cfOrigin;dur=39
CF-RAY: 9c3030e6ebb1ab5a-YYZ
alt-svc: h3=":443"; ma=86400
Page title: kohski's blog
<!doctype html><html lang=en dir=auto><head><meta name=generator content="Hugo 0.118.2"><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>kohski's blog</title><meta name=keywords content="Blog,Tech,AWS,TypeScript,JavaScript,Python,Serverless"><meta name=description content="しがないアラサーエンジニアのブログ"><meta name=author content="kohski"><link rel=canonical href=https://kohski.dev/><meta name=google-site-verification content="XYZabc"><link crossorigin=anonymous href=/assets/css/stylesheet.b609c58d5c11bb90b1a54e04005d74ad1ddf22165eb79f5533967e57df9c3b50.css integrity="sha256-tgnFjVwRu5CxpU4EAF10rR3fIhZet59VM5Z+V9+cO1A=" rel="preload stylesheet" as=style><link rel=icon href=https://kohski.dev/logos/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://kohski.dev/logs/favicon-16.png><link rel=icon type=image/png sizes=32x32 href=https://kohski.dev/logos/favicon-32.png><link rel=apple-touch-icon href=https://kohski.dev/apple-touch-icon.png><link rel=mask-icon href=https://kohski.dev/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://kohski.dev/index.xml><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51)}.list{background:var(--theme)}.list:not(.dark)::-webkit-scrollbar-track{background:0 0}.list:not(.dark)::-webkit-scrollbar-thumb{border-color:var(--theme)}}</style></noscript><meta property="og:title" content="kohski's blog"><meta property="og:description" content="しがないアラサーエンジニアのブログ"><meta property="og:type" content="website"><meta property="og:url" content="https://kohski.dev/"><meta property="og:image" content="https://kohski.dev/logos/favicon-48.png"><meta property="og:site_name" content="kohski's blog"><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="https://kohski.dev/logos/favicon-48.png"><meta name=twitter:title content="kohski's blog"><meta name=twitter:description content="しがないアラサーエンジニアのブログ"><script type=application/ld+json>{"@context":"https://schema.org","@type":"Organization","name":"kohski's blog","url":"https://kohski.dev/","description":"しがないアラサーエンジニアのブログ","thumbnailUrl":"https://kohski.dev/logos/favicon.ico","sameAs":["https://x.com/kos_kim_8","https://github.com/kohski"]}</script></head><body class=list id=top><script>localStorage.getItem("pref-theme")==="dark"?document.body.classList.add("dark"):localStorage.getItem("pref-theme")==="light"?document.body.classList.remove("dark"):window.matchMedia("(prefers-color-scheme: dark)").matches&&document.body.classList.add("dark")</script><header class=header><nav class=nav><div class=logo><a href=https://kohski.dev/ accesskey=h title="kohski's blog (Alt + H)">kohski's blog</a><div class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)"><svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/>
Open service 104.21.92.29:80 · kohski.dev
2026-01-24 14:23
HTTP/1.1 301 Moved Permanently
Date: Sat, 24 Jan 2026 14:23:50 GMT
Content-Length: 0
Connection: close
Location: https://kohski.dev/
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=YmDiPKV6ZF9TUxZ%2BXcO1kYky54J40Bt3Q1nGCSbouVQABmakKVj7oC5YFGfkM0fChF9rz1I3CME0PLE8GbIcMapoVTqtCUUoi18%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server-Timing: cfEdge;dur=8,cfOrigin;dur=0
Server: cloudflare
CF-RAY: 9c3030e6a9a964a6-YYZ
Open service 2606:4700:3031::ac43:b959:8443 · kohski.dev
2026-01-24 14:23
HTTP/1.1 200 OK
Date: Sat, 24 Jan 2026 14:23:50 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: close
Access-Control-Allow-Origin: *
Cache-Control: public, max-age=0, must-revalidate
cf-cache-status: DYNAMIC
referrer-policy: strict-origin-when-cross-origin
x-content-type-options: nosniff
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=JgiHg8aru2JVdErREkmdTn%2FDMxz3UCgfyG%2Bd3Am7YosacY5NteKfZrNFWAqmQ%2FPXXOHv6vFEfbPo7LgPOMJwct%2BkCRXFnI14MDU6IfkWx8UeSzj52D8%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
Server-Timing: cfCacheStatus;desc="DYNAMIC"
Server-Timing: cfEdge;dur=7,cfOrigin;dur=36
CF-RAY: 9c3030e6df2d5017-EWR
alt-svc: h3=":8443"; ma=86400
Page title: kohski's blog
<!doctype html><html lang=en dir=auto><head><meta name=generator content="Hugo 0.118.2"><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>kohski's blog</title><meta name=keywords content="Blog,Tech,AWS,TypeScript,JavaScript,Python,Serverless"><meta name=description content="しがないアラサーエンジニアのブログ"><meta name=author content="kohski"><link rel=canonical href=https://kohski.dev/><meta name=google-site-verification content="XYZabc"><link crossorigin=anonymous href=/assets/css/stylesheet.b609c58d5c11bb90b1a54e04005d74ad1ddf22165eb79f5533967e57df9c3b50.css integrity="sha256-tgnFjVwRu5CxpU4EAF10rR3fIhZet59VM5Z+V9+cO1A=" rel="preload stylesheet" as=style><link rel=icon href=https://kohski.dev/logos/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://kohski.dev/logs/favicon-16.png><link rel=icon type=image/png sizes=32x32 href=https://kohski.dev/logos/favicon-32.png><link rel=apple-touch-icon href=https://kohski.dev/apple-touch-icon.png><link rel=mask-icon href=https://kohski.dev/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate type=application/rss+xml href=https://kohski.dev/index.xml><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51)}.list{background:var(--theme)}.list:not(.dark)::-webkit-scrollbar-track{background:0 0}.list:not(.dark)::-webkit-scrollbar-thumb{border-color:var(--theme)}}</style></noscript><meta property="og:title" content="kohski's blog"><meta property="og:description" content="しがないアラサーエンジニアのブログ"><meta property="og:type" content="website"><meta property="og:url" content="https://kohski.dev/"><meta property="og:image" content="https://kohski.dev/logos/favicon-48.png"><meta property="og:site_name" content="kohski's blog"><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="https://kohski.dev/logos/favicon-48.png"><meta name=twitter:title content="kohski's blog"><meta name=twitter:description content="しがないアラサーエンジニアのブログ"><script type=application/ld+json>{"@context":"https://schema.org","@type":"Organization","name":"kohski's blog","url":"https://kohski.dev/","description":"しがないアラサーエンジニアのブログ","thumbnailUrl":"https://kohski.dev/logos/favicon.ico","sameAs":["https://x.com/kos_kim_8","https://github.com/kohski"]}</script></head><body class=list id=top><script>localStorage.getItem("pref-theme")==="dark"?document.body.classList.add("dark"):localStorage.getItem("pref-theme")==="light"?document.body.classList.remove("dark"):window.matchMedia("(prefers-color-scheme: dark)").matches&&document.body.classList.add("dark")</script><header class=header><nav class=nav><div class=logo><a href=https://kohski.dev/ accesskey=h title="kohski's blog (Alt + H)">kohski's blog</a><div class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)"><svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/>