PageSourceSearch

https://nineone-works.com/

html nineone-works.com collected 2026-10-05 22:47:44 UTC 174,750 bytes, 2 lines download raw bytes

1<!DOCTYPE html><html lang="ja" class="scroll-smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/24f6ebe2756575bd-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/36966cca54120369-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="/images/team/2401130098.jpg"/><link rel="stylesheet" href="/_next/static/css/4ba104eebffd02b6.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/258c6bfab8ff1796.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/f6e21d418ce1d9b3.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-ddafe2c6ea0be8a0.js"/>
1<script src="/_next/static/chunks/82210bd0-6b8e4ff594b46feb.js" async=""></script>
1<script src="/_next/static/chunks/288-c17c9e663fe2a077.js" async=""></script>
1<script src="/_next/static/chunks/main-app-0fb343ea80f07e5a.js" async=""></script>
1<script src="/_next/static/chunks/3425-8931cfd3330bc124.js" async=""></script>
1<script src="/_next/static/chunks/1768-8752de85dc8007f5.js" async=""></script>
1<script src="/_next/static/chunks/app/layout-f12396e608755c99.js" async=""></script>
1<script src="/_next/static/chunks/2243-1fa24cd0eda61a11.js" async=""></script>
1<script src="/_next/static/chunks/3221-0b00cf93c8ad1a2c.js" async=""></script>
1<script src="/_next/static/chunks/6055-1a000ce23b5bad74.js" async=""></script>
1<script src="/_next/static/chunks/1773-df3502ba5f559e20.js" async=""></script>
1<script src="/_next/static/chunks/app/page-1f0aed2cd607933a.js" async=""></script>
1<link rel="preload" href="https://www.googletagmanager.com/gtag/js?id=G-2GM3VG31JL" as="script"/><meta name="next-size-adjust" content=""/><title>91works | ITエンジニアが多様な選択肢を持つ、活気ある社会を目指す</title><meta name="description" content="91worksは、エンジニアの成長と幸福を第一に考え、多様なキャリアパスと選択肢を提供する企業です。心理的安全性の高い環境で、あなたの可能性を最大限に発揮しませんか。"/><meta name="author" content="91works Inc."/><link rel="manifest" href="/site.webmanifest"/><meta name="keywords" content="91works,エンジニア,SES,キャリア,IT企業,東京"/><meta name="robots" content="index, follow"/><meta property="og:title" content="91works | ITエンジニアが多様な選択肢を持つ、活気ある社会を目指す"/><meta property="og:description" content="91worksは、エンジニアの成長と幸福を第一に考え、多様なキャリアパスと選択肢を提供する企業です。"/><meta property="og:url" content="https://nineone-works.com"/><meta property="og:site_name" content="91works"/><meta property="og:locale" content="ja_JP"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="91works | ITエンジニアが多様な選択肢を持つ、活気ある社会を目指す"/><meta name="twitter:description" content="91worksは、エンジニアの成長と幸福を第一に考え、多様なキャリアパスと選択肢を提供する企業です。"/><link rel="icon" href="/favicon.ico" sizes="any"/><link rel="icon" href="/favicon-16x16.png" sizes="16x16" type="image/png"/><link rel="icon" href="/favicon-32x32.png" sizes="32x32" type="image/png"/><link rel="apple-touch-icon" href="/apple-touch-icon.png" sizes="180x180" type="image/png"/>
1<script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script>
1</head><body class="__variable_e60539 __variable_c22fe1 antialiased"><!--$!--><template data-dgst="BAILOUT_TO_CLIENT_SIDE_RENDERING"></template><!--/$-->
1<script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","name":"91works","url":"https://nineone-works.com","logo":{"@type":"ImageObject","url":"https://nineone-works.com/logo-dark.png","width":"2096","height":"1511"}}</script>
1<main class="min-h-screen"><header class="fixed top-0 left-0 right-0 z-50 transition-all duration-300 bg-white/80 backdrop-blur-sm py-5"><div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"><div class="flex items-center justify-between"><a class="flex items-center group" href="/"><img alt="91works" loading="lazy" width="140" height="180" decoding="async" data-nimg="1" class="h-12 w-auto transform group-hover:scale-105 transition-transform duration-300" style="color:transparent" src="/logo-dark.png"/></a><nav class="hidden md:flex items-center space-x-1"><a class="px-4 py-2 rounded-full text-sm font-medium transition-all duration-300 hover:bg-primary-50 hover:text-primary-600 text-neutral-700" href="/about">About</a><a class="px-4 py-2 rounded-full text-sm font-medium transition-all duration-300 hover:bg-primary-50 hover:text-primary-600 text-neutral-700" href="/company">Company</a><a class="px-4 py-2 rounded-full text-sm font-medium transition-all duration-300 hover:bg-primary-50 hover:text-primary-600 text-neutral-700" href="/recruit">Recruit</a><a class="px-4 py-2 rounded-full text-sm font-medium transition-all duration-300 hover:bg-primary-50 hover:text-primary-600 text-neutral-700" href="/blog">Blog</a><a class="px-4 py-2 rounded-full text-sm font-medium transition-all duration-300 hover:bg-primary-50 hover:text-primary-600 text-neutral-700" href="/news">News</a><div class="relative"><button type="button" class="flex items-center gap-1 px-4 py-2 rounded-full text-sm font-medium transition-all duration-300 hover:bg-primary-50 hover:text-primary-600 text-neutral-700" aria-expanded="false" aria-haspopup="true"><span>Services</span><svg class="w-3.5 h-3.5 transition-transform duration-200 " fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path></svg></button></div><button type="button" class="flex items-center gap-1.5 px-3 py-2 rounded-full text-sm font-medium text-neutral-700 hover:bg-neutral-100 transition-all duration-300" aria-label="ページやブログ記事を検索..."><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-search w-4 h-4"><circle cx="11" cy="11" r="8"></circle><path d="m21 21-4.3-4.3"></path></svg><kbd class="hidden lg:inline-flex items-center gap-0.5 px-1.5 py-0.5 text-[10px] text-neutral-400 bg-neutral-100 rounded border border-neutral-200">⌘K</kbd></button><div class="relative"><button type="button" class="flex items-center gap-1.5 px-3 py-2 rounded-full text-sm font-medium text-neutral-700 hover:bg-neutral-100 transition-all duration-300" aria-label="言語を切り替える" aria-expanded="false" aria-haspopup="listbox"><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9m-9 9a9 9 0 019-9"></path></svg><span>日本語</span><svg class="w-3.5 h-3.5 transition-transform duration-200 " fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path></svg></button></div>
1<a class="ml-2 btn-primary text-sm" href="/contact">Contact Us</a></nav><div class="md:hidden flex items-center gap-1"><button type="button" class="p-2 rounded-lg hover:bg-neutral-100 transition-colors" aria-label="ページやブログ記事を検索..."><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-search w-5 h-5 text-neutral-700"><circle cx="11" cy="11" r="8"></circle><path d="m21 21-4.3-4.3"></path></svg></button><button type="button" class="p-2 rounded-lg hover:bg-neutral-100 transition-colors" aria-label="Toggle menu"><svg class="w-6 h-6 text-neutral-700" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"></path></svg></button></div></div></div></header><section id="home" class="relative min-h-screen flex items-center overflow-hidden bg-white"><div class="relative z-10 max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 pt-28 pb-20 md:pt-32 md:pb-24 w-full"><div class="grid lg:grid-cols-12 gap-12 lg:gap-6 items-center"><div class="lg:col-span-5 text-center lg:text-left opacity-0"><div class="inline-block mb-5 h-[60px]"></div><h1 class="text-4xl md:text-5xl lg:text-6xl font-bold text-neutral-900 leading-tight mb-6"><span class="block">ITエンジニアが</span><span class="block gradient-text">多様な選択肢</span><span class="block">を持つ、</span><span class="block text-secondary-600">活気ある社会</span><span class="block">を目指す</span></h1><p class="text-lg text-neutral-500 mb-8 max-w-md mx-auto lg:mx-0 leading-relaxed">91worksは、エンジニアの成長と幸福を第一に考え、多様なキャリアパスと選択肢を提供する企業です。</p><div class="flex flex-col sm:flex-row gap-4 justify-center lg:justify-start"><a href="/about" class="btn-primary inline-flex items-center justify-center">About Us<svg class="w-5 h-5 ml-2" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 8l4 4m0 0l-4 4m4-4H3"></path></svg></a><a href="/recruit" class="btn-secondary inline-flex items-center justify-center">Join Our Team</a></div></div><div class="lg:col-span-7 relative opacity-0" style="animation-delay:0.2s"><div class="relative mx-auto" style="min-height:480px"><div class="absolute -top-6 left-[30%] right-[-5%] h-44 bg-neutral-50 border border-neutral-200/60" style="border-radius:30% 70% 60% 40% / 50% 40% 60% 50%"></div><div class="absolute top-8 -left-2 -right-2 -bottom-2 border-2 border-neutral-200/40" style="border-radius:62% 38% 28% 72% / 55% 35% 65% 45%"></div><div class="relative top-10 overflow-hidden shadow-xl" style="border-radius:60% 40% 30% 70% / 55% 30% 70% 45%;aspect-ratio:4 / 3"><div class="absolute inset-0 transition-opacity duration-1000 opacity-100"><img alt="チームメンバーの笑顔" decoding="async" data-nimg="fill" class="object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" src="/images/team/2401130098.jpg"/></div><div class="absolute inset-0 transition-opacity duration-1000 opacity-0"><img alt="オフィスでの集合写真" loading="lazy" decoding="async" data-nimg="fill" class="object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" src="/images/team/IMG_7650.jpg"/></div><div class="absolute inset-0 transition-opacity duration-1000 opacity-0"><img alt="屋外での集合写真" loading="lazy" decoding="async" data-nimg="fill" class="object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" src="/images/team/IMG_6385.jpg"/></div><div class="absolute inset-0 transition-opacity duration-1000 opacity-0"><img alt="カジュアルな作業風景" loading="lazy" decoding="async" data-nimg="fill" class="object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" src="/images/team/2401130150.jpg"/></div></div><div class="absolute bottom-[-12px] left-[5%] w-28 h-24 bg-secondary-50 border border-secondary-200/50" style="border-radius:50% 50% 40% 60% / 60% 40% 60% 40%"></div><div class="absolute top-0 left-[55%] w-8 h-8 rounded-full bg-primary-400 opacity-80"></div>
1<div class="absolute top-[35%] -right-3 w-5 h-5 rounded-full bg-secondary-500"></div><div class="absolute bottom-2 left-[35%] w-9 h-9 rounded-full bg-secondary-300/50"></div></div></div></div></div><div class="absolute bottom-20 left-1/2 transform -translate-x-1/2 z-10 flex gap-2"><button type="button" class="h-2 rounded-full transition-all duration-300 bg-primary-500 w-6" aria-label="画像を表示 1"></button><button type="button" class="h-2 rounded-full transition-all duration-300 bg-neutral-300 w-2 hover:bg-neutral-400" aria-label="画像を表示 2"></button><button type="button" class="h-2 rounded-full transition-all duration-300 bg-neutral-300 w-2 hover:bg-neutral-400" aria-label="画像を表示 3"></button><button type="button" class="h-2 rounded-full transition-all duration-300 bg-neutral-300 w-2 hover:bg-neutral-400" aria-label="画像を表示 4"></button></div><div class="absolute bottom-4 left-1/2 transform -translate-x-1/2 z-10 animate-bounce"><a href="#visions" class="flex flex-col items-center text-neutral-400 hover:text-primary-500 transition-colors"><span class="text-xs mb-1">Scroll</span><svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 14l-7 7m0 0l-7-7m7 7V3"></path></svg></a></div></section><section id="visions" class="py-20 md:py-32 bg-white relative overflow-hidden"><div class="absolute top-0 left-0 w-full h-2 bg-gradient-to-r from-primary-500 via-secondary-500 to-primary-500"></div><div class="absolute -top-40 right-0 w-80 h-80 bg-primary-100 rounded-full opacity-20 blur-3xl"></div><div class="absolute -bottom-40 left-0 w-80 h-80 bg-secondary-100 rounded-full opacity-20 blur-3xl"></div><svg aria-hidden="true" class="pointer-events-none select-none absolute top-16 right-8 w-32 h-12 opacity-30 hidden md:block" viewBox="0 0 120 40" fill="none"><path d="M3 22 C8 6, 16 34, 28 20 C36 10, 42 30, 55 18 C64 10, 70 32, 82 20 C90 12, 96 30, 108 18 C114 12, 116 26, 118 20" stroke="var(--secondary-300)" stroke-width="2.5" stroke-linecap="round"></path></svg><div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 relative z-10"><div class="text-center mb-16 opacity-0"><div class="relative inline-block"><span class="inline-block px-4 py-2 bg-primary-100 text-primary-600 rounded-full text-sm font-semibold mb-4">VISIONS</span><svg aria-hidden="true" class="pointer-events-none select-none absolute -top-4 -bottom-2 -left-5 -right-5 w-[calc(100%+40px)] h-[calc(100%+24px)] opacity-70" viewBox="0 0 100 100" fill="none" style="transform:rotate(-8deg)"><path d="M52 5 C68 3, 88 14, 95 35 C102 56, 92 80, 70 92 C48 104, 18 94, 8 72 C-2 50, 8 22, 30 10 C40 5, 48 5, 52 7" stroke="var(--primary-400)" stroke-width="2.5" stroke-linecap="round"></path></svg></div><h2 class="text-3xl md:text-4xl lg:text-5xl font-bold text-neutral-800 mb-4">「心理的安全性」と「多様な選択肢」を</h2></div><div class="relative"><svg aria-hidden="true" class="pointer-events-none select-none absolute -left-6 top-1/2 -translate-y-1/2 w-18 h-18 opacity-30 hidden md:block" viewBox="0 0 70 70" fill="none"><path d="M10 35 L60 35" stroke="transparent" stroke-width="0"></path><g style="opacity:0;transition:opacity 600ms 600ms"><g transform="rotate(12 22 14)"><line x1="22" y1="6" x2="22" y2="22" stroke="var(--primary-300)" stroke-width="2" stroke-linecap="round"></line><line x1="14" y1="14" x2="30" y2="14" stroke="var(--primary-300)" stroke-width="2" stroke-linecap="round"></line><line x1="16.8" y1="8.8" x2="27.2" y2="19.2" stroke="var(--primary-300)" stroke-width="1.4" stroke-linecap="round"></line><line x1="27.2" y1="8.8" x2="16.8" y2="19.2" stroke="var(--primary-300)" stroke-width="1.4" stroke-linecap="round"></line></g><g transform="rotate(-8 52 28)"><line x1="52" y1="22" x2="52" y2="34" stroke="var(--primary-300)" stroke-width="1.8" stroke-linecap="round"></line><line x1="46" y1="28" x2="58" y2="28" stroke="var(--primary-300)" stroke-width="1.8" stroke-linecap="round"></line><line x1="48.1" y1="24.1" x2="55.9" y2="31.9" stroke="var(--primary-300)" stroke-width="1.26" stroke-linecap="round"></line><line x1="55.9" y1="24.1" x2="48.1" y2="31.9" stroke="var(--primary-300)" stroke-width="1.26" stroke-linecap="round"></line></g><g transform="rotate(20 16 48)"><line x1="16" y1="43.5" x2="16" y2="52.5" stroke="var(--primary-300)" stroke-width="1.4" stroke-linecap="round"></line><line x1="11.5" y1="48" x2="20.5" y2="48" stroke="var(--primary-300)" stroke-width="1.4" stroke-linecap="round"></line><line x1="13.075" y1="45.075" x2="18.925" y2="50.925" stroke="var(--primary-300)" stroke-width="0.9799999999999999" stroke-linecap="round"></line><line x1="18.925" y1="45.075" x2="13.075" y2="50.925" stroke="var(--primary-300)" stroke-width="0.9799999999999999" stroke-linecap="round"></line></g><g transform="rotate(-15 48 55)"><line x1="48" y1="51.5" x2="48" y2="58.5" stroke="var(--primary-300)" stroke-width="1.2" stroke-linecap="round"></line><line x1="44.5" y1="55" x2="51.5" y2="55" stroke="var(--primary-300)" stroke-width="1.2" stroke-linecap="round"></line><line x1="45.725" y1="52.725" x2="50.275" y2="57.275" stroke="var(--primary-300)" stroke-width="0.84" stroke-linecap="round"></line><line x1="50.275" y1="52.725" x2="45.725" y2="57.275" stroke="var(--primary-300)" stroke-width="0.84" stroke-linecap="round"></line></g></g></svg><div class="grid md:grid-cols-2 gap-8 lg:gap-12"><div class="group relative bg-white rounded-3xl shadow-xl overflow-hidden card-hover opacity-0"><div class="p-8"><div class="inline-flex items-center justify-center w-16 h-16 rounded-2xl mb-6 bg-primary-100 text-primary-500"><svg class="w-12 h-12" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"></path></svg></div><h3 class="text-2xl font-bold text-neutral-800 mb-4">心理的安全性</h3><p class="text-neutral-600 leading-relaxed mb-6">失敗を恐れずチャレンジできる環境。オープンなコミュニケーションと相互尊重を大切にし、誰もが意見を自由に発言できる文化を育んでいます。</p><div class="relative w-full aspect-[16/9] rounded-2xl overflow-hidden"><img alt="心理的安全性 - 失敗を恐れずチャレンジできる環境" loading="lazy" decoding="async" data-nimg="fill" class="object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" src="/images/features-psychological-safety.png"/></div><div class="absolute top-0 right-0 w-32 h-32 rounded-bl-full transition-transform duration-500 group-hover:scale-110 bg-primary-50"></div></div></div><div class="group relative bg-white rounded-3xl shadow-xl overflow-hidden card-hover opacity-0"><div class="p-8"><div class="inline-flex items-center justify-center w-16 h-16 rounded-2xl mb-6 bg-secondary-100 text-secondary-500"><svg class="w-12 h-12" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M4 5a1 1 0 011-1h14a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zM4 13a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5a1 1 0 01-1-1v-6zM16 13a1 1 0 011-1h2a1 1 0 011 1v6a1 1 0 01-1 1h-2a1 1 0 01-1-1v-6z"></path></svg></div><h3 class="text-2xl font-bold text-neutral-800 mb-4">多様な選択肢</h3><p class="text-neutral-600 leading-relaxed mb-6">エンジニアとしてのキャリアは一つではありません。技術特化、マネジメント、独立支援など、あなたの理想に合わせた多様なキャリアパスを提供します。</p><div class="relative w-full aspect-[16/9] rounded-2xl overflow-hidden"><img alt="多様な選択肢 - 多様なキャリアパスを提供" loading="lazy" decoding="async" data-nimg="fill" class="object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" src="/images/features-diverse-options.png"/></div><div class="absolute top-0 right-0 w-32 h-32 rounded-bl-full transition-transform duration-500 group-hover:scale-110 bg-secondary-50"></div></div></div></div></div></div></section><section id="features" class="py-20 md:py-32 bg-neutral-50 relative overflow-hidden"><div class="absolute -top-40 left-0 w-80 h-80 bg-primary-100 rounded-full opacity-20 blur-3xl"></div><div class="absolute -bottom-40 right-0 w-80 h-80 bg-secondary-100 rounded-full opacity-20 blur-3xl"></div><svg aria-hidden="true" class="pointer-events-none select-none absolute top-16 right-8 w-32 h-12 opacity-30 hidden md:block" viewBox="0 0 120 40" fill="none"><path d="M3 22 C8 6, 16 34, 28 20 C36 10, 42 30, 55 18 C64 10, 70 32, 82 20 C90 12, 96 30, 108 18 C114 12, 116 26, 118 20" stroke="var(--primary-300)" stroke-width="2.5" stroke-linecap="round"></path></svg><div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 relative z-10"><div class="text-center mb-16 opacity-0"><div class="relative inline-block"><span class="inline-block px-4 py-2 bg-primary-100 text-primary-600 rounded-full text-sm font-semibold mb-4">FEATURES</span><svg aria-hidden="true" class="pointer-events-none select-none absolute -top-4 -bottom-2 -left-5 -right-5 w-[calc(100%+40px)] h-[calc(100%+24px)] opacity-70" viewBox="0 0 100 100" fill="none" style="transform:rotate(-8deg)"><path d="M52 5 C68 3, 88 14, 95 35 C102 56, 92 80, 70 92 C48 104, 18 94, 8 72 C-2 50, 8 22, 30 10 C40 5, 48 5, 52 7" stroke="var(--primary-400)" stroke-width="2.5" stroke-linecap="round"></path></svg></div><h2 class="text-3xl md:text-4xl lg:text-5xl font-bold text-neutral-800 mb-4">91worksの特徴</h2><p class="text-neutral-500 text-lg max-w-2xl mx-auto">超エンジニアファーストな環境で、あなたのキャリアをサポートします</p></div><div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4"><div class="relative px-6 py-8 sm:py-10 opacity-0"><div class="w-12 h-1 rounded-full bg-gradient-to-r from-primary-400 to-primary-500 mb-6"></div><span class="block text-4xl font-bold text-neutral-200 font-display mb-4">01</span><div class="inline-flex items-center justify-center w-12 h-12 rounded-full bg-primary-500 text-white mb-4"><svg class="w-7 h-7" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg></div><h3 class="text-lg font-bold text-neutral-800 mb-3 leading-snug">単価連動型報酬・高還元率</h3><p class="text-neutral-500 text-sm leading-relaxed">自分の単価・評価に応じて65%以上を給与に還元。社会保険料や決算賞与も含めると還元率77%以上。</p><div class="hidden lg:block absolute top-10 right-0 bottom-10 w-px bg-neutral-200"></div><div class="block sm:hidden mt-8 h-px bg-neutral-200"></div></div><div class="relative px-6 py-8 sm:py-10 opacity-0"><div class="w-12 h-1 rounded-full bg-gradient-to-r from-secondary-400 to-secondary-500 mb-6"></div><span class="block text-4xl font-bold text-neutral-200 font-display mb-4">02</span><div class="inline-flex items-center justify-center w-12 h-12 rounded-full bg-secondary-500 text-white mb-4"><svg class="w-7 h-7" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path><path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"></path></svg></div><h3 class="text-lg font-bold text-neutral-800 mb-3 leading-snug">透明性の確保</h3><p class="text-neutral-500 text-sm leading-relaxed">単価は完全公開。案件も常にエンジニアに公開し、キャリアに関わる情報をクリアに把握できる環境。</p><div class="hidden lg:block absolute top-10 right-0 bottom-10 w-px bg-neutral-200"></div><div class="block sm:hidden mt-8 h-px bg-neutral-200"></div></div><div class="relative px-6 py-8 sm:py-10 opacity-0"><div class="w-12 h-1 rounded-full bg-gradient-to-r from-primary-400 to-primary-500 mb-6"></div><span class="block text-4xl font-bold text-neutral-200 font-display mb-4">03</span><div class="inline-flex items-center justify-center w-12 h-12 rounded-full bg-primary-500 text-white mb-4"><svg class="w-7 h-7" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"></path></svg></div><h3 class="text-lg font-bold text-neutral-800 mb-3 leading-snug">待機時の給与保証</h3><p class="text-neutral-500 text-sm leading-relaxed">待機時でも給与をしっかり保証。スキルアップ支援制度も用意し、安心してキャリアを築けます。</p><div class="hidden lg:block absolute top-10 right-0 bottom-10 w-px bg-neutral-200"></div><div class="block sm:hidden mt-8 h-px bg-neutral-200"></div></div><div class="relative px-6 py-8 sm:py-10 opacity-0"><div class="w-12 h-1 rounded-full bg-gradient-to-r from-secondary-400 to-secondary-500 mb-6"></div><span class="block text-4xl font-bold text-neutral-200 font-display mb-4">04</span><div class="inline-flex items-center justify-center w-12 h-12 rounded-full bg-secondary-500 text-white mb-4"><svg class="w-7 h-7" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path></svg></div><h3 class="text-lg font-bold text-neutral-800 mb-3 leading-snug">配属決定権</h3><p class="text-neutral-500 text-sm leading-relaxed">アサインはエンジニアに選択権。自分のキャリアを自分で選ぶ自由があります。</p></div></div><div class="text-center mt-14 opacity-0"><a class="inline-flex items-center gap-2 px-8 py-4 bg-gradient-to-r from-primary-500 to-primary-600 text-white font-semibold rounded-full hover:from-primary-600 hover:to-primary-700 transition-all shadow-lg hover:shadow-xl hover:-translate-y-0.5" href="/features">詳細はこちら<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path></svg></a></div></div></section><section class="py-20 md:py-32 bg-gradient-to-br from-neutral-900 via-neutral-900 to-neutral-800 relative overflow-hidden"><div class="absolute top-0 right-0 w-96 h-96 bg-primary-500 rounded-full opacity-10 blur-[120px]"></div><div class="absolute bottom-0 left-0 w-96 h-96 bg-secondary-500 rounded-full opacity-10 blur-[120px]"></div><div class="absolute inset-0 opacity-[0.06]" style="background-image:radial-gradient(circle, #ffffff 1px, transparent 1px);background-size:32px 32px"></div><svg aria-hidden="true" class="pointer-events-none select-none absolute top-20 left-8 w-16 h-16 hidden md:block" viewBox="0 0 70 70" fill="none"><path d="M10 35 L60 35" stroke="transparent" stroke-width="0"></path><g style="opacity:0;transition:opacity 600ms 500ms"><g transform="rotate(12 22 14)"><line x1="22" y1="6" x2="22" y2="22" stroke="var(--primary-400)" stroke-width="2" stroke-linecap="round"></line><line x1="14" y1="14" x2="30" y2="14" stroke="var(--primary-400)" stroke-width="2" stroke-linecap="round"></line><line x1="16.8" y1="8.8" x2="27.2" y2="19.2" stroke="var(--primary-400)" stroke-width="1.4" stroke-linecap="round"></line><line x1="27.2" y1="8.8" x2="16.8" y2="19.2" stroke="var(--primary-400)" stroke-width="1.4" stroke-linecap="round"></line></g><g transform="rotate(-8 52 28)"><line x1="52" y1="22" x2="52" y2="34" stroke="var(--primary-400)" stroke-width="1.8" stroke-linecap="round"></line><line x1="46" y1="28" x2="58" y2="28" stroke="var(--primary-400)" stroke-width="1.8" stroke-linecap="round"></line><line x1="48.1" y1="24.1" x2="55.9" y2="31.9" stroke="var(--primary-400)" stroke-width="1.26" stroke-linecap="round"></line><line x1="55.9" y1="24.1" x2="48.1" y2="31.9" stroke="var(--primary-400)" stroke-width="1.26" stroke-linecap="round"></line></g><g transform="rotate(20 16 48)"><line x1="16" y1="43.5" x2="16" y2="52.5" stroke="var(--primary-400)" stroke-width="1.4" stroke-linecap="round"></line><line x1="11.5" y1="48" x2="20.5" y2="48" stroke="var(--primary-400)" stroke-width="1.4" stroke-linecap="round"></line><line x1="13.075" y1="45.075" x2="18.925" y2="50.925" stroke="var(--primary-400)" stroke-width="0.9799999999999999" stroke-linecap="round"></line><line x1="18.925" y1="45.075" x2="13.075" y2="50.925" stroke="var(--primary-400)" stroke-width="0.9799999999999999" stroke-linecap="round"></line></g><g transform="rotate(-15 48 55)"><line x1="48" y1="51.5" x2="48" y2="58.5" stroke="var(--primary-400)" stroke-width="1.2" stroke-linecap="round"></line><line x1="44.5" y1="55" x2="51.5" y2="55" stroke="var(--primary-400)" stroke-width="1.2" stroke-linecap="round"></line><line x1="45.725" y1="52.725" x2="50.275" y2="57.275" stroke="var(--primary-400)" stroke-width="0.84" stroke-linecap="round"></line><line x1="50.275" y1="52.725" x2="45.725" y2="57.275" stroke="var(--primary-400)" stroke-width="0.84" stroke-linecap="round"></line></g></g></svg><div class="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 relative z-10"><div class="text-center mb-16 md:mb-20 opacity-0"><span class="inline-block px-4 py-2 bg-white/10 text-white rounded-full text-sm font-semibold mb-4 backdrop-blur-sm tracking-wider">REASONS</span><h2 class="text-3xl md:text-4xl lg:text-5xl font-bold text-white mb-4">91worksを選ぶ理由</h2><p class="text-neutral-400 text-lg max-w-2xl mx-auto">エンジニアが本当に求める環境を、本気で追求しています</p></div><div class="space-y-10 md:space-y-16"><div class="grid md:grid-cols-12 gap-6 md:gap-10 items-center opacity-0"><div class="md:col-span-5 "><div class="relative rounded-3xl border border-white/10 bg-white/[0.04] backdrop-blur-sm p-8 md:p-10 overflow-hidden"><div class="absolute -top-10 -right-10 w-40 h-40 rounded-full blur-3xl op
1acity-20 bg-primary-500"></div><span class="absolute -bottom-6 -right-2 text-[120px] leading-none font-bold text-white/5 font-display select-none pointer-events-none">01</span><div class="relative"><div class="inline-flex items-center justify-center w-12 h-12 rounded-2xl mb-6 bg-primary-500/15 text-primary-400"><svg aria-hidden="true" class="w-7 h-7" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4"></path></svg></div><div class="flex items-end gap-2"><span class="text-5xl md:text-6xl font-bold bg-clip-text text-transparent bg-gradient-to-r from-primary-300 to-primary-500">10,000</span><span class="text-2xl md:text-3xl font-bold text-white mb-1">件+</span></div><p class="text-neutral-400 text-sm mt-2">1日に集まる案件情報</p></div></div></div><div class="md:col-span-7 "><div class="flex items-center gap-3 mb-3"><span class="h-px w-8 bg-primary-400"></span><span class="text-sm font-semibold tracking-widest text-primary-400">REASON<!-- --> <!-- -->01</span></div><h3 class="text-xl md:text-2xl font-bold text-white mb-4 leading-snug">圧倒的な案件数で、あなたに合う案件が見つかる</h3><p class="text-neutral-300 leading-relaxed mb-5">2,000社以上のパートナーから、1日に1万件以上の案件情報を収集。強力な営業力で、あなたのスキルや希望に本当にマッチする案件を見つけ出します。</p><ul class="space-y-3"><li class="flex items-start gap-3"><svg aria-hidden="true" class="w-5 h-5 mt-0.5 flex-shrink-0 text-primary-400" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"></path></svg><span class="text-neutral-300 leading-relaxed">2,000社以上のパートナー企業とのネットワーク</span></li></ul></div></div><div class="grid md:grid-cols-12 gap-6 md:gap-10 items-center opacity-0"><div class="md:col-span-5 md:order-2"><div class="relative rounded-3xl border border-white/10 bg-white/[0.04] backdrop-blur-sm p-8 md:p-10 overflow-hidden"><div class="absolute -top-10 -right-10 w-40 h-40 rounded-full blur-3xl op
1acity-20 bg-secondary-500"></div><span class="absolute -bottom-6 -right-2 text-[120px] leading-none font-bold text-white/5 font-display select-none pointer-events-none">02</span><div class="relative"><div class="inline-flex items-center justify-center w-12 h-12 rounded-2xl mb-6 bg-secondary-500/15 text-secondary-400"><svg aria-hidden="true" class="w-7 h-7" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M9.879 7.519c1.171-1.025 3.071-1.025 4.242 0 1.172 1.025 1.172 2.687 0 3.712-.203.179-.43.326-.67.442-.745.361-1.45.999-1.45 1.827v.75M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9 5.25h.008v.008H12v-.008z"></path></svg></div><div class="flex items-end gap-2"><span class="text-5xl md:text-6xl font-bold bg-clip-text text-transparent bg-gradient-to-r from-secondary-300 to-secondary-500">ZERO</span><span class="text-2xl md:text-3xl font-bold text-white mb-1">件</span></div><p class="text-neutral-400 text-sm mt-2">煩わしい社内業務</p></div></div></div><div class="md:col-span-7 md:order-1"><div class="flex items-center gap-3 mb-3"><span class="h-px w-8 bg-secondary-400"></span><span class="text-sm font-semibold tracking-widest text-secondary-400">REASON<!-- --> <!-- -->02</span></div><h3 class="text-xl md:text-2xl font-bold text-white mb-4 leading-snug">煩わしい社内業務はゼロ</h3><p class="text-neutral-300 leading-relaxed mb-5">代表がエンジニア時代に「煩わしい」と感じていた社内業務を全面排除。日報・週報・月報、帰社日などはありません。</p><ul class="space-y-3"><li class="flex items-start gap-3"><svg aria-hidden="true" class="w-5 h-5 mt-0.5 flex-shrink-0 text-secondary-400" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"></path></svg><span class="text-neutral-300 leading-relaxed">定期的な相談(1on1)を受付。現場やキャリアの悩み、時にはプライベートな話まで気軽に相談できます。</span></li><li class="flex items-start gap-3"><svg aria-hidden="true" class="w-5 h-5 mt-0.5 flex-shrink-0 text-secondary-400" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"></path></svg><span class="text-neutral-300 leading-relaxed">年に2回ほど一つの場所に集まり、食事をしたりオフラインで話すイベントを開催しています。</span></li></ul></div></div><div class="grid md:grid-cols-12 gap-6 md:gap-10 items-center opacity-0"><div class="md:col-span-5 "><div class="relative rounded-3xl border border-white/10 bg-white/[0.04] backdrop-blur-sm p-8 md:p-10 overflow-hidden"><div class="absolute -top-10 -right-10 w-40 h-40 rounded-full blur-3xl op
1acity-20 bg-primary-500"></div><span class="absolute -bottom-6 -right-2 text-[120px] leading-none font-bold text-white/5 font-display select-none pointer-events-none">03</span><div class="relative"><div class="inline-flex items-center justify-center w-12 h-12 rounded-2xl mb-6 bg-primary-500/15 text-primary-400"><svg aria-hidden="true" class="w-7 h-7" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 21a9 9 0 100-18 9 9 0 000 18zm0 0c2.485 0 4.5-4.03 4.5-9S14.485 3 12 3m0 18c-2.485 0-4.5-4.03-4.5-9S9.515 3 12 3m-9 9h18"></path></svg></div><div class="flex items-end gap-2"><span class="text-5xl md:text-6xl font-bold bg-clip-text text-transparent bg-gradient-to-r from-primary-300 to-primary-500">7〜8</span><span class="text-2xl md:text-3xl font-bold text-white mb-1">割</span></div><p class="text-neutral-400 text-sm mt-2">のメンバーがリモート勤務中</p></div></div></div><div class="md:col-span-7 "><div class="flex items-center gap-3 mb-3"><span class="h-px w-8 bg-primary-400"></span><span class="text-sm font-semibold tracking-widest text-primary-400">REASON<!-- --> <!-- -->03</span></div><h3 class="text-xl md:text-2xl font-bold text-white mb-4 leading-snug">場所にとらわれない、リモート推奨</h3><p class="text-neutral-300 leading-relaxed mb-5">社員は沖縄から北海道まで全国各地に。リモート推奨企業として、メンバーの約7〜8割がリモートで働いています。</p><ul class="space-y-3"><li class="flex items-start gap-3"><svg aria-hidden="true" class="w-5 h-5 mt-0.5 flex-shrink-0 text-primary-400" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"></path></svg><span class="text-neutral-300 leading-relaxed">沖縄から北海道まで、全国どこからでも働ける環境</span></li></ul></div></div><div class="grid md:grid-cols-12 gap-6 md:gap-10 items-center opacity-0"><div class="md:col-span-5 md:order-2"><div class="relative rounded-3xl border border-white/10 bg-white/[0.04] backdrop-blur-sm p-8 md:p-10 overflow-hidden"><div class="absolute -top-10 -right-10 w-40 h-40 rounded-full blur-3xl op
1acity-20 bg-secondary-500"></div><span class="absolute -bottom-6 -right-2 text-[120px] leading-none font-bold text-white/5 font-display select-none pointer-events-none">04</span><div class="relative"><div class="inline-flex items-center justify-center w-12 h-12 rounded-2xl mb-6 bg-secondary-500/15 text-secondary-400"><svg aria-hidden="true" class="w-7 h-7" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M15.59 14.37a6 6 0 01-5.84 7.38v-4.8m5.84-2.58a14.98 14.98 0 006.16-12.12A14.98 14.98 0 009.631 8.41m5.96 5.96a14.926 14.926 0 01-5.841 2.58m-.119-8.54a6 6 0 00-7.381 5.84h4.8m2.581-5.84a14.927 14.927 0 00-2.58 5.84m2.699 2.7c-.103.021-.207.041-.311.06a15.09 15.09 0 01-2.448-2.448 14.9 14.9 0 01.06-.312m-2.24 2.39a4.493 4.493 0 00-1.757 4.306 4.493 4.493 0 004.306-1.758M16.5 9a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0z"></path></svg></div><div class="flex items-end gap-2"><span class="text-5xl md:text-6xl font-bold bg-clip-text text-transparent bg-gradient-to-r from-secondary-300 to-secondary-500">事業化</span><span class="text-2xl md:text-3xl font-bold text-white mb-1">実例</span></div><p class="text-neutral-400 text-sm mt-2">社内プロジェクト発の新会社設立実績</p></div></div></div><div class="md:col-span-7 md:order-1"><div class="flex items-center gap-3 mb-3"><span class="h-px w-8 bg-secondary-400"></span><span class="text-sm font-semibold tracking-widest text-secondary-400">REASON<!-- --> <!-- -->04</span></div><h3 class="text-xl md:text-2xl font-bold text-white mb-4 leading-snug">社内プロジェクトが事業になる</h3><p class="text-neutral-300 leading-relaxed mb-5">社内プロジェクト支援制度を通じて生まれたアイデアが、実際に別会社として立ち上がり事業が進んでいるケースもあります。やりたいことを形にできる環境です。</p><ul class="space-y-3"><li class="flex items-start gap-3"><svg aria-hidden="true" class="w-5 h-5 mt-0.5 flex-shrink-0 text-secondary-400" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"></path></svg><span class="text-neutral-300 leading-relaxed">コンペを通過した素敵なアイデアには社内プロジェクトとして予算を確保</span></li></ul></div></div><div class="grid md:grid-cols-12 gap-6 md:gap-10 items-center opacity-0"><div class="md:col-span-5 "><div class="relative rounded-3xl border border-white/10 bg-white/[0.04] backdrop-blur-sm p-8 md:p-10 overflow-hidden"><div class="absolute -top-10 -right-10 w-40 h-40 rounded-full blur-3xl op
1acity-20 bg-primary-500"></div><span class="absolute -bottom-6 -right-2 text-[120px] leading-none font-bold text-white/5 font-display select-none pointer-events-none">05</span><div class="relative"><div class="inline-flex items-center justify-center w-12 h-12 rounded-2xl mb-6 bg-primary-500/15 text-primary-400"><svg aria-hidden="true" class="w-7 h-7" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M2.25 18L9 11.25l4.306 4.306a11.95 11.95 0 015.814-5.518l2.74-1.22m0 0l-5.94-2.281m5.94 2.28l-2.28 5.941"></path></svg></div><div class="flex items-end gap-2"><span class="text-5xl md:text-6xl font-bold bg-clip-text text-transparent bg-gradient-to-r from-primary-300 to-primary-500">+100</span><span class="text-2xl md:text-3xl font-bold text-white mb-1">万円</span></div><p class="text-neutral-400 text-sm mt-2">入社1年で年収UPの実例</p></div></div></div><div class="md:col-span-7 "><div class="flex items-center gap-3 mb-3"><span class="h-px w-8 bg-primary-400"></span><span class="text-sm font-semibold tracking-widest text-primary-400">REASON<!-- --> <!-- -->05</span></div><h3 class="text-xl md:text-2xl font-bold text-white mb-4 leading-snug">自由な社風、完全実力主義</h3><p class="text-neutral-300 leading-relaxed mb-5">形式や年次にとらわれない自由な社風。実力で正当に評価されるからこそ、頑張った分だけ結果が返ってきます。</p><ul class="space-y-3"><li class="flex items-start gap-3"><svg aria-hidden="true" class="w-5 h-5 mt-0.5 flex-shrink-0 text-primary-400" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"></path></svg><span class="text-neutral-300 leading-relaxed">副業OK。エンジニアの選択肢を広げる働き方を後押しします。</span></li><li class="flex items-start gap-3"><svg aria-hidden="true" class="w-5 h-5 mt-0.5 flex-shrink-0 text-primary-400" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"></path></svg><span class="text-neutral-300 leading-relaxed">実力次第では、入社1年で年収が100万円アップしたケースもあります。</span></li></ul></div></div></div></div></section><section id="careers" class="py-20 md:py-32 bg-gradient-to-br from-neutral-50 to-white relative overflow-hidden"><div class="absolute top-20 left-10 w-20 h-20 bg-primary-200 rounded-full opacity-20 blur-2xl"></div><div class="absolute bottom-20 right-10 w-32 h-32 bg-secondary-200 rounded-full opacity-20 blur-2xl"></div><div class="absolute inset-0 bg-dots-pattern opacity-30"></div><svg aria-hidden="true" class="pointer-events-none select-none absolute top-16 left-12 w-10 h-10 opacity-30 hidden md:block" viewBox="0 0 30 30" fill="none" style="transform:rotate(8deg)"><path d="M5 7 C10 10, 18 18, 24 25 M25 6 C20 10, 12 18, 6 24" stroke="var(--secondary-300)" stroke-width="2.5" stroke-linecap="round"></path></svg><div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 relative z-10"><div class="text-center mb-16 opacity-0"><span class="inline-block px-4 py-2 bg-secondary-100 text-secondary-600 rounded-full text-sm font-semibold mb-4">BENEFIT</span><h2 class="hidden md:block text-4xl lg:text-5xl font-bold text-neutral-800 mb-4"><span class="relative inline-block"><span class="relative z-10">エンジニアのための制度も充実</span><svg aria-hidden="true" class="pointer-events-none select-none absolute -bottom-1 left-0 w-full h-4" viewBox="0 0 200 16" preserveAspectRatio="none" fill="none"><path d="M3 10 C20 4, 38 14, 60 8 C82 2, 95 13, 120 7 C145 1, 162 12, 180 8 C190 6, 195 9, 198 7" stroke="var(--secondary-400)" stroke-width="4.5" stroke-linecap="round"></path></svg></span></h2><h2 class="md:hidden text-3xl font-bold text-neutral-800 mb-4"><span class="relative inline-block"><span class="relative z-10">エンジニアのための</span><svg aria-hidden="true" class="pointer-events-none select-none absolute -bottom-1 left-0 w-full h-4" viewBox="0 0 200 16" preserveAspectRatio="none" fill="none">
1<path d="M3 10 C20 4, 38 14, 60 8 C82 2, 95 13, 120 7 C145 1, 162 12, 180 8 C190 6, 195 9, 198 7" stroke="var(--secondary-400)" stroke-width="4.5" stroke-linecap="round"></path></svg></span><br/><span class="relative inline-block"><span class="relative z-10">制度も充実</span><svg aria-hidden="true" class="pointer-events-none select-none absolute -bottom-1 left-0 w-full h-4" viewBox="0 0 200 16" preserveAspectRatio="none" fill="none"><path d="M3 10 C20 4, 38 14, 60 8 C82 2, 95 13, 120 7 C145 1, 162 12, 180 8 C190 6, 195 9, 198 7" stroke="var(--secondary-400)" stroke-width="4.5" stroke-linecap="round"></path></svg></span></h2><p class="text-lg text-neutral-600 max-w-2xl mx-auto">社会保険完備や週休二日制は当たり前!その他エンジニアのための制度が充実!<br class="hidden md:block"/>もちろんその他希望があればウェルカムですので一緒に作っていきましょう!</p></div><div class="relative"><svg aria-hidden="true" class="pointer-events-none select-none absolute -top-10 left-[45%] w-14 h-14 opacity-35 hidden lg:block" viewBox="0 0 100 100" fill="none"><path d="M24 5 C20 18, 28 28, 23 42 C18 56, 26 68, 24 82 M14 70 C17 76, 21 82, 24 88 C27 82, 32 76, 36 70" stroke="var(--primary-400)" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"></path></svg></div><div class="grid sm:grid-cols-2 lg:grid-cols-3 gap-6 lg:gap-8"><div class="group relative bg-white rounded-2xl p-6 shadow-lg card-hover block opacity-0"><div class="inline-flex items-center justify-center w-14 h-14 rounded-xl mb-4 transition-transform duration-300 group-hover:scale-110 bg-gradient-to-br from-primary-100 to-primary-200 text-primary-600"><svg class="w-8 h-8" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"></path></svg></div><h3 class="text-xl font-bold text-neutral-800 mb-2">お休み取り放題</h3><p class="text-neutral-600 text-sm leading-relaxed">条件を満たせば好きなだけお休み取り放題!</p><div class="absolute top-0 right-0 w-16 h-16 rounded-bl-3xl transition-all duration-300 group-hover:w-20 group-hover:h-20 bg-primary-50"></div></div><div class="group relative bg-white rounded-2xl p-6 shadow-lg card-hover block opacity-0"><div class="inline-flex items-center justify-center w-14 h-14 rounded-xl mb-4 transition-transform duration-300 group-hover:scale-110 bg-gradient-to-br from-secondary-100 to-secondary-200 text-secondary-600"><svg class="w-8 h-8" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253"></path></svg></div><h3 class="text-xl font-bold text-neutral-800 mb-2">スキルアップ支援制度</h3><p class="text-neutral-600 text-sm leading-relaxed">参考書や動画教材を会社が代わりに購入します。</p><div class="absolute top-0 right-0 w-16 h-16 rounded-bl-3xl transition-all duration-300 group-hover:w-20 group-hover:h-20 bg-secondary-50"></div></div><div class="group relative bg-white rounded-2xl p-6 shadow-lg card-hover block opacity-0"><div class="inline-flex items-center justify-center w-14 h-14 rounded-xl mb-4 transition-transform duration-300 group-hover:scale-110 bg-gradient-to-br from-primary-100 to-primary-200 text-primary-600"><svg class="w-8 h-8" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4M7.835 4.697a3.42 3.42 0 001.946-.806 3.42 3.42 0 014.438 0 3.42 3.42 0 001.946.806 3.42 3.42 0 013.138 3.138 3.42 3.42 0 00.806 1.946 3.42 3.42 0 010 4.438 3.42 3.42 0 00-.806 1.946 3.42 3.42 0 01-3.138 3.138 3.42 3.42 0 00-1.946.806 3.42 3.42 0 01-4.438 0 3.42 3.42 0 00-1.946-.806 3.42 3.42 0 01-3.138-3.138 3.42 3.42 0 00-.806-1.946 3.42 3.42 0 010-4.438 3.42 3.42 0 00.806-1.946 3.42 3.42 0 013.138-3.138z"></path></svg></div><h3 class="text-xl font-bold text-neutral-800 mb-2">資格取得支援</h3><p class="text-neutral-600 text-sm leading-relaxed">指定の資格取得で評価、給与UP!</p><div class="absolute top-0 right-0 w-16 h-16 rounded-bl-3xl transition-all duration-300 group-hover:w-20 group-hover:h-20 bg-primary-50"></div></div><div class="group relative bg-white rounded-2xl p-6 shadow-lg card-hover block opacity-0"><div class="inline-flex items-center justify-center w-14 h-14 roun
1ded-xl mb-4 transition-transform duration-300 group-hover:scale-110 bg-gradient-to-br from-secondary-100 to-secondary-200 text-secondary-600"><svg class="w-8 h-8" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"></path></svg></div><h3 class="text-xl font-bold text-neutral-800 mb-2">社内プロジェクト支援</h3><p class="text-neutral-600 text-sm leading-relaxed">コンペを通過した素敵なアイデアには社内プロジェクトとして予算を設けます。</p><div class="absolute top-0 right-0 w-16 h-16 rounded-bl-3xl transition-all duration-300 group-hover:w-20 group-hover:h-20 bg-secondary-50"></div></div><div class="group relative bg-white rounded-2xl p-6 shadow-lg card-hover block opacity-0"><div class="inline-flex items-center justify-center w-14 h-14 rounded-xl mb-4 transition-transform duration-300 group-hover:scale-110 bg-gradient-to-br from-primary-100 to-primary-200 text-primary-600"><svg class="w-8 h-8" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 9l4-4 4 4m0 6l-4 4-4-4"></path></svg></div><h3 class="text-xl font-bold text-neutral-800 mb-2">転職・副業・複業支援</h3><p class="text-neutral-600 text-sm leading-relaxed">「エンジニアに選択肢を」転職・副業・複業を進んで斡旋します!</p><div class="absolute top-0 right-0 w-16 h-16 rounded-bl-3xl transition-all duration-300 group-hover:w-20 group-hover:h-20 bg-primary-50"></div></div><div class="group relative bg-white rounded-2xl p-6 shadow-lg card-hover block opacity-0"><div class="inline-flex items-center justify-center w-14 h-14 rounded-xl mb-4 transition-transform duration-300 group-hover:scale-110 bg-gradient-to-br from-secondary-100 to-secondary-200 text-secondary-600"><svg class="w-8 h-8" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9.75 3.104v5.714a2.25 2.25 0 01-.659 1.591L5 14.5M9.75 3.104c-.251.023-.501.05-.75.082m.75-.082a24.301 24.301 0 014.5 0m0 0v5.714a2.25 2.25 0 00.659 1.591L19 14.5M14.25 3.104c.251.023.501.05.75.082M19 14.5l-2.47 2.47a2.25 2.25 0 01-1.59.659H9.06a2.25 2.25 0 01-1.59-.659L5 14.5m14 0V9a2 2 0 00-2-2M5 14.5V9a2 2 0 012-2"></path></svg></div><h3 class="text-xl font-bold text-neutral-800 mb-2">AIツール補助</h3><p class="text-neutral-600 text-sm leading-relaxed">どのAIツールでもOK!(一部条件あり)</p><div class="absolute -top-1 -right-1 z-10 overflow-hidden w-20 h-20 pointer-events-none"><span class="absolute top-[10px] -right-[6px] block w-[100px] text-center text-[10px] font-bold text-white bg-primary-500 py-1 rotate-45 shadow-md">NEW</span></div><div class="absolute top-0 right-0 w-16 h-16 rounded-bl-3xl transition-all duration-300 group-hover:w-20 group-hover:h-20 bg-secondary-50"></div></div><div class="group relative bg-white rounded-2xl p-6 shadow-lg card-hover block opacity-0"><div class="inline-flex items-center justify-center w-14 h-14 rounded-xl mb-4 transition-transform duration-300 group-hover:scale-110 bg-gradient-to-br from-primary-100 to-primary-200 text-primary-600"><svg class="w-8 h-8" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z"></path></svg></div><h3 class="text-xl font-bold text-neutral-800 mb-2">ジム・パーソナルトレーナー補助</h3><p class="text-neutral-600 text-sm leading-relaxed">リモートワークで蓄えたわがままボディを鍛え直す!</p><div class="absolute top-0 right-0 w-16 h-16 rounded-bl-3xl transition-all duration-300 group-hover:w-20 group-hover:h-20 bg-primary-50"></div></div><div class="group relative bg-white rounded-2xl p-6 shadow-lg card-hover block opacity-0"><div class="inline-flex items-center justify-center w-14 h-14 roun
1ded-xl mb-4 transition-transform duration-300 group-hover:scale-110 bg-gradient-to-br from-secondary-100 to-secondary-200 text-secondary-600"><svg class="w-8 h-8" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4"></path></svg></div><h3 class="text-xl font-bold text-neutral-800 mb-2">コワーキングスペース補助</h3><p class="text-neutral-600 text-sm leading-relaxed">たまにはリフレッシュに外でお仕事しませんか?</p><div class="absolute top-0 right-0 w-16 h-16 rounded-bl-3xl transition-all duration-300 group-hover:w-20 group-hover:h-20 bg-secondary-50"></div></div><a class="group relative bg-white rounded-2xl p-6 shadow-lg card-hover block opacity-0" href="/news/2cc49b52-fc3a-4a6c-88ae-366fd79127d9"><div class="inline-flex items-center justify-center w-14 h-14 rounded-xl mb-4 transition-transform duration-300 group-hover:scale-110 bg-gradient-to-br from-primary-100 to-primary-200 text-primary-600"><svg class="w-8 h-8" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 3v4M3 5h4M6 17v4m-2-2h4m5-16l2.286 6.857L21 12l-5.714 2.143L13 21l-2.286-6.857L5 12l5.714-2.143L13 3z"></path></svg></div><h3 class="text-xl font-bold text-neutral-800 mb-2">ボディメンテ補助</h3><p class="text-neutral-600 text-sm leading-relaxed">マッサージ、整体、鍼灸、温泉、サウナ、プロテイン代を補助します!</p><span class="inline-flex items-center gap-1 mt-3 text-xs font-semibold text-primary-500 group-hover:text-primary-600 transition-colors">詳しくはこちら<svg class="w-3.5 h-3.5 transition-transform group-hover:translate-x-0.5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path></svg></span><div class="absolute -top-1 -right-1 z-10 overflow-hidden w-20 h-20 pointer-events-none"><span class="absolute top-[10px] -right-[6px] block w-[100px] text-center text-[10px] font-bold text-white bg-primary-500 py-1 rotate-45 shadow-md">UPDATE</span></div><div class="absolute top-0 right-0 w-16 h-16 rounded-bl-3xl transition-all duration-300 group-hover:w-20 group-hover:h-20 bg-primary-50"></div></a></div></div></section><section class="py-20 md:py-32 bg-white relative overflow-hidden"><div class="absolute top-0 left-0 w-full h-1 bg-gradient-to-r from-primary-500 via-secondary-500 to-primary-500"></div><div class="absolute -top-20 -right-20 w-60 h-60 bg-primary-100 rounded-full opacity-30 blur-3xl"></div><div class="absolute -bottom-20 -left-20 w-60 h-60 bg-secondary-100 rounded-full opacity-30 blur-3xl"></div><svg aria-hidden="true" class="pointer-events-none select-none absolute top-12 left-8 w-36 h-12 opacity-25 hidden md:block" viewBox="0 0 120 40" fill="none"><path d="M3 22 C8 6, 16 34, 28 20 C36 10, 42 30, 55 18 C64 10, 70 32, 82 20 C90 12, 96 30, 108 18 C114 12, 116 26, 118 20" stroke="var(--primary-300)" stroke-width="2.5" stroke-linecap="round"></path></svg><div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 relative z-10"><div class="text-center mb-12 relative opacity-0"><span class="inline-block px-4 py-2 bg-primary-100 text-primary-600 rounded-full text-sm font-semibold mb-4">EMPLOYEE INTERVIEWS</span><h2 class="text-3xl md:text-4xl lg:text-5xl font-bold text-neutral-800 mb-4">社員インタビュー</h2><p class="text-lg text-neutral-600">91worksで働く仲間たちの声をお届けします</p><svg aria-hidden="true" class="pointer-events-none select-none absolute -top-2 -right-4 w-18 h-18 opacity-35 hidden md:block" viewBox="0 0 70 70" fill="none"><path d="M10 35 L60 35" stroke="transparent" stroke-width="0"></path><g style="opacity:0;transition:opacity 600ms 500ms"><g transform="rotate(12 22 14)"><line x1="22" y1="6" x2="22" y2="22" stroke="var(--secondary-400)" stroke-width="2" stroke-linecap="round"></line><line x1="14" y1="14" x2="30" y2="14" stroke="var(--secondary-400)" stroke-width="2" stroke-linecap="round"></line><line x1="16.8" y1="8.8" x2="27.2" y2="19.2" stroke="var(--secondary-400)" stroke-width="1.4" stroke-linecap="round"></line><line x1="27.2" y1="8.8" x2="16.8" y2="19.2" stroke="var(--secondary-400)" stroke-width="1.4" stroke-linecap="round"></line></g><g transform="rotate(-8 52 28)"><line x1="52" y1="22" x2="52" y2="34" stroke="var(--secondary-400)" stroke-width="1.8" stroke-linecap="round"></line><line x1="46" y1="28" x2="58" y2="28" stroke="var(--secondary-400)" stroke-width="1.8" stroke-linecap="round"></line><line x1="48.1" y1="24.1" x2="55.9" y2="31.9" stroke="var(--secondary-400)" stroke-width="1.26" stroke-linecap="round"></line><line x1="55.9" y1="24.1" x2="48.1" y2="31.9" stroke="var(--secondary-400)" stroke-width="1.26" stroke-linecap="round"></line></g><g transform="rotate(20 16 48)"><line x1="16" y1="43.5" x2="16" y2="52.5" stroke="var(--secondary-400)" stroke-width="1.4" stroke-linecap="round"></line><line x1="11.5" y1="48" x2="20.5" y2="48" stroke="var(--secondary-400)" stroke-width="1.4" stroke-linecap="round"></line><line x1="13.075" y1="45.075" x2="18.925" y2="50.925" stroke="var(--secondary-400)" stroke-width="0.9799999999999999" stroke-linecap="round"></line><line x1="18.925" y1="45.075" x2="13.075" y2="50.925" stroke="var(--secondary-400)" stroke-width="0.9799999999999999" stroke-linecap="round"></line></g><g transform="rotate(-15 48 55)"><line x1="48" y1="51.5" x2="48" y2="58.5" stroke="var(--secondary-400)" stroke-width="1.2" stroke-linecap="round"></line><line x1="44.5" y1="55" x2="51.5" y2="55" stroke="var(--secondary-400)" stroke-width="1.2" stroke-linecap="round"></line><line x1="45.725" y1="52.725" x2="50.275" y2="57.275" stroke="var(--secondary-400)" stroke-width="0.84" stroke-linecap="round"></line><line x1="50.275" y1="52.725" x2="45.725" y2="57.275" stroke="var(--secondary-400)" stroke-width="0.84" stroke-linecap="round"></line></g></g></svg></div><div class="relative opacity-0"><div class="flex gap-6 overflow-x-auto pb-8 snap-x snap-mandatory scrollbar-hide" style="scrollbar-width:none;-ms-overflow-style:none"><div class="flex-shrink-0 w-80 snap-center"><div class="bg-white rounded-2xl shadow-xl p-6 border border-neutral-100 card-hover h-full"><div class="flex items-center mb-4"><div class="w-16 h-16 rounded-full bg-neutral-100 flex items-center justify-center text-4xl" role="img" aria-label="男性エンジニア">👨‍💻</div><div class="ml-4"><p class="text-sm font-semibold text-neutral-800">フロントエンドエンジニア</p><p class="text-sm text-neutral-600">男性<!-- --> <!-- -->34<!-- -->歳</p></div></div><div class="relative"><svg class="absolute -top-2 -left-2 w-8 h-8 text-primary-200" fill="currentColor" viewBox="0 0 24 24">
1<path d="M14.017 21v-7.391c0-5.704 3.731-9.57 8.983-10.609l.995 2.151c-2.432.917-3.995 3.638-3.995 5.849h4v10h-9.983zm-14.017 0v-7.391c0-5.704 3.748-9.57 9-10.609l.996 2.151c-2.433.917-3.996 3.638-3.996 5.849h3.983v10h-9.983z"></path></svg><p class="text-neutral-600 leading-relaxed pl-6">多様な案件に携わることで、技術力だけでなく視野も広がりました。チームの雰囲気も最高です。</p></div><div class="mt-4 flex justify-end"><div class="w-12 h-1 bg-gradient-to-r from-primary-400 to-secondary-400 rounded-full"></div></div></div></div><div class="flex-shrink-0 w-80 snap-center"><div class="bg-white rounded-2xl shadow-xl p-6 border border-neutral-100 card-hover h-full"><div class="flex items-center mb-4"><div class="w-16 h-16 rounded-full bg-neutral-100 flex items-center justify-center text-4xl" role="img" aria-label="女性エンジニア">👩‍💻</div><div class="ml-4"><p class="text-sm font-semibold text-neutral-800">バックエンドエンジニア</p><p class="text-sm text-neutral-600">女性<!-- --> <!-- -->28<!-- -->歳</p></div></div><div class="relative"><svg class="absolute -top-2 -left-2 w-8 h-8 text-primary-200" fill="currentColor" viewBox="0 0 24 24"><path d="M14.017 21v-7.391c0-5.704 3.731-9.57 8.983-10.609l.995 2.151c-2.432.917-3.995 3.638-3.995 5.849h4v10h-9.983zm-14.017 0v-7.391c0-5.704 3.748-9.57 9-10.609l.996 2.151c-2.433.917-3.996 3.638-3.996 5.849h3.983v10h-9.983z"></path></svg><p class="text-neutral-600 leading-relaxed pl-6">心理的安全性が高く、新しいことにチャレンジしやすい環境です。成長を実感できています。</p></div><div class="mt-4 flex justify-end"><div class="w-12 h-1 bg-gradient-to-r from-primary-400 to-secondary-400 rounded-full"></div></div></div></div><div class="flex-shrink-0 w-80 snap-center"><div class="bg-white rounded-2xl shadow-xl p-6 border border-neutral-100 card-hover h-full"><div class="flex items-center mb-4"><div class="w-16 h-16 rounded-full bg-neutral-100 flex items-center justify-center text-4xl" role="img" aria-label="男性エンジニア">👨‍💻</div><div class="ml-4"><p class="text-sm font-semibold text-neutral-800">テックリード</p><p class="text-sm text-neutral-600">男性<!-- --> <!-- -->38<!-- -->歳</p></div></div><div class="relative"><svg class="absolute -top-2 -left-2 w-8 h-8 text-primary-200" fill="currentColor" viewBox="0 0 24 24"><path d="M14.017 21v-7.391c0-5.704 3.731-9.57 8.983-10.609l.995 2.151c-2.432.917-3.995 3.638-3.995 5.849h4v10h-9.983zm-14.017 0v-7.391c0-5.704 3.748-9.57 9-10.609l.996 2.151c-2.433.917-3.996 3.638-3.996 5.849h3.983v10h-9.983z"></path></svg><p class="text-neutral-600 leading-relaxed pl-6">マネジメントか技術特化か、自分のキャリアを自分で選べるのが91worksの魅力です。</p></div><div class="mt-4 flex justify-end"><div class="w-12 h-1 bg-gradient-to-r from-primary-400 to-secondary-400 rounded-full"></div></div></div></div><div class="flex-shrink-0 w-80 snap-center"><div class="bg-white rounded-2xl shadow-xl p-6 border border-neutral-100 card-hover h-full"><div class="flex items-center mb-4"><div class="w-16 h-16 rounded-full bg-neutral-100 flex items-center justify-center text-4xl" role="img" aria-label="女性エンジニア">👩‍💻</div><div class="ml-4"><p class="text-sm font-semibold text-neutral-800">アプリケーションエンジニア</p><p class="text-sm text-neutral-600">女性<!-- --> <!-- -->31<!-- -->歳</p></div></div><div class="relative"><svg class="absolute -top-2 -left-2 w-8 h-8 text-primary-200" fill="currentColor" viewBox="0 0 24 24"><path d="M14.017 21v-7.391c0-5.704 3.731-9.57 8.983-10.609l.995 2.151c-2.432.917-3.995 3.638-3.995 5.849h4v10h-9.983zm-14.017 0v-7.391c0-5.704 3.748-9.57 9-10.609l.996 2.151c-2.433.917-3.996 3.638-3.996 5.849h3.983v10h-9.983z"></path></svg><p class="text-neutral-600 leading-relaxed pl-6">単価と案件が完全公開されているので、自分の市場価値を客観的に把握できます。交渉ではなく実績で評価される仕組みが、正直ありがたいです。</p></div><div class="mt-4 flex justify-end"><div class="w-12 h-1 bg-gradient-to-r from-primary-400 to-secondary-400 rounded-full"></div></div></div></div><div class="flex-shrink-0 w-80 snap-center"><div class="bg-white rounded-2xl shadow-xl p-6 border border-neutral-100 card-hover h-full"><div class="flex items-center mb-4"><div class="w-16 h-16 rounded-full bg-neutral-100 flex items-center justify-center text-4xl" role="img" aria-label="男性エンジニア">👨‍💻</div><div class="ml-4"><p class="text-sm font-semibold text-neutral-800">インフラエンジニア</p><p class="text-sm text-neutral-600">男性<!-- --> <!-- -->42<!-- -->歳</p></div></div><div class="relative"><svg class="absolute -top-2 -left-2 w-8 h-8 text-primary-200" fill="currentColor" viewBox="0 0 24 24">
1<path d="M14.017 21v-7.391c0-5.704 3.731-9.57 8.983-10.609l.995 2.151c-2.432.917-3.995 3.638-3.995 5.849h4v10h-9.983zm-14.017 0v-7.391c0-5.704 3.748-9.57 9-10.609l.996 2.151c-2.433.917-3.996 3.638-3.996 5.849h3.983v10h-9.983z"></path></svg><p class="text-neutral-600 leading-relaxed pl-6">ワークライフバランスを保ちながら、やりがいのある仕事ができる。理想の環境です。</p></div><div class="mt-4 flex justify-end"><div class="w-12 h-1 bg-gradient-to-r from-primary-400 to-secondary-400 rounded-full"></div></div></div></div></div><div class="flex justify-center gap-2 mt-4"><button type="button" class="w-3 h-3 rounded-full transition-all duration-300 bg-primary-500 w-8" aria-label="Go to slide 1"></button><button type="button" class="w-3 h-3 rounded-full transition-all duration-300 bg-neutral-300 hover:bg-neutral-400" aria-label="Go to slide 2"></button><button type="button" class="w-3 h-3 rounded-full transition-all duration-300 bg-neutral-300 hover:bg-neutral-400" aria-label="Go to slide 3"></button><button type="button" class="w-3 h-3 rounded-full transition-all duration-300 bg-neutral-300 hover:bg-neutral-400" aria-label="Go to slide 4"></button><button type="button" class="w-3 h-3 rounded-full transition-all duration-300 bg-neutral-300 hover:bg-neutral-400" aria-label="Go to slide 5"></button></div><button type="button" class="absolute left-0 top-1/2 -translate-y-1/2 -translate-x-4 w-12 h-12 bg-white rounded-full shadow-lg flex items-center justify-center text-neutral-600 hover:text-primary-500 hover:shadow-xl transition-all duration-300 hidden md:flex" aria-label="Previous slide"><svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19l-7-7 7-7"></path></svg></button><button type="button" class="absolute right-0 top-1/2 -translate-y-1/2 translate-x-4 w-12 h-12 bg-white rounded-full shadow-lg flex items-center justify-center text-neutral-600 hover:text-primary-500 hover:shadow-xl transition-all duration-300 hidden md:flex" aria-label="Next slide"><svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path></svg></button></div></div></section><section id="blog" class="py-20 md:py-32 bg-gradient-to-br from-neutral-900 via-neutral-800 to-neutral-900 relative overflow-hidden"><div class="absolute top-0 left-0 w-full h-1 bg-gradient-to-r from-primary-500 via-secondary-500 to-primary-500"></div><div class="absolute top-20 right-20 w-40 h-40 bg-primary-500 rounded-full opacity-10 blur-3xl"></div><div class="absolute bottom-20 left-20 w-40 h-40 bg-secondary-500 rounded-full opacity-10 blur-3xl"></div><div class="absolute inset-0 opacity-5"><div class="bg-grid-pattern h-full w-full"></div></div><div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 relative z-10"><div class="text-center mb-16 opacity-0"><span class="inline-block px-4 py-2 bg-white/10 text-white rounded-full text-sm font-semibold mb-4 backdrop-blur-sm">BLOG</span><h2 class="text-3xl md:text-4xl lg:text-5xl font-bold text-white mb-4">ブログ</h2><p class="text-lg text-neutral-300 max-w-2xl mx-auto">91worksの最新情報や技術記事をチェック</p></div><div class="grid md:grid-cols-2 gap-6 lg:gap-8"><a href="https://note.com/91works" target="_blank" rel="noopener noreferrer" class="group relative bg-white/5 backdrop-blur-sm rounded-2xl p-8 border border-white/10 transition-all duration-500 hover:bg-white/10 hover:border-white/20 hover:transform hover:-translate-y-2 opacity-0"><div class="inline-flex items-center justify-center w-16 h-16 rounded-xl mb-6 transition-transform duration-300 group-hover:scale-110 bg-gradient-to-br from-primary-500 to-primary-600 text-white"><svg class="w-8 h-8" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 20H5a2 2 0 01-2-2V6a2 2 0 012-2h10a2 2 0 012 2v1m2 13a2 2 0 01-2-2V7m2 13a2 2 0 002-2V9a2 2 0 00-2-2h-2m-4-3H9M7 16h6M7 8h6v4H7V8z"></path></svg></div><h3 class="text-xl font-bold text-white mb-2 group-hover:text-primary-400 transition-colors">COMPANY BLOG</h3><p class="text-neutral-400 text-sm leading-relaxed mb-4">会社の最新情報やイベントレポートをお届け</p><div class="flex items-center text-neutral-400 group-hover:text-primary-400 transition-colors"><span class="text-sm font-medium mr-2">View More</span><svg class="w-5 h-5 transform transition-transform duration-300 group-hover:translate-x-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 8l4 4m0 0l-4 4m4-4H3"></path></svg></div><div class="absolute inset-0 rounded-2xl opacity-0 group-hover:opacity-100 transition-opacity duration-500 pointer-events-none shadow-[0_0_40px_rgba(249,115,22,0.15)]"></div></a><a href="https://zenn.dev/p/91works" target="_blank" rel="noopener noreferrer" class="group relative bg-white/5 backdrop-blur-sm rounded-2xl p-8 border border-white/10 transition-all duration-500 hover:bg-white/10 hover:border-white/20 hover:transform hover:-translate-y-2 opacity-0"><div class="inline-flex items-center justify-center w-16 h-16 rounded-xl mb-6 transition-transform duration-300 group-hover:scale-110 bg-gradient-to-br from-secondary-500 to-secondary-600 text-white"><svg class="w-8 h-8" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4"></path></svg></div><h3 class="text-xl font-bold text-white mb-2 group-hover:text-primary-400 transition-colors">TECH BLOG</h3><p class="text-neutral-400 text-sm leading-relaxed mb-4">エンジニアによる技術記事やナレッジ共有</p><div class="flex items-center text-neutral-400 group-hover:text-primary-400 transition-colors"><span class="text-sm font-medium mr-2">View More</span><svg class="w-5 h-5 transform transition-transform duration-300 group-hover:translate-x-2" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 8l4 4m0 0l-4 4m4-4H3"></path></svg></div><div class="absolute inset-0 rounded-2xl opacity-0 group-hover:opacity-100 transition-opacity duration-500 pointer-events-none shadow-[0_0_40px_rgba(13,148,136,0.15)]"></div></a></div><div class="mt-12 opacity-0"><h3 class="text-xl font-bold text-white mb-6">最新の記事</h3><div class="grid sm:grid-cols-2 lg:grid-cols-4 gap-6"><a href="https://zenn.dev/91works/articles/f9a11f2f44cdad" target="_blank" rel="noopener noreferrer" class="group block bg-white/5 backdrop-blur-sm rounded-xl overflow-hidden border border-white/10 transition-all duration-500 hover:bg-white/10 hover:border-white/20 hover:-translate-y-1"><div class="h-32 bg-gradient-to-br from-blue-500/20 to-blue-600/10 flex items-center justify-center"><span class="text-4xl">🪶</span></div><div class="p-4"><div class="flex items-center gap-2 mb-2"><span class="text-xs px-2 py-0.5 rounded-full bg-blue-500/20 text-blue-400">Zenn</span><svg class="h-3 w-3 text-neutral-500" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg><span class="text-xs text-neutral-500">2026.08.31</span></div><h4 class="text-sm font-medium text-white leading-snug group-hover:text-blue-400 transition-colors line-clamp-2">改訂新版 これからはじめるReact実践入門で前回から追加された要素を学習した</h4></div></a><a href="https://zenn.dev/91works/articles/f1dedf6744798d" target="_blank" rel="noopener noreferrer" class="group block bg-white/5 backdrop-blur-sm rounded-xl overflow-hidden border border-white/10 transition-all duration-500 hover:bg-white/10 hover:border-white/20 hover:-translate-y-1"><div class="h-32 bg-gradient-to-br from-blue-500/20 to-blue-600/10 flex items-center justify-center"><span class="text-4xl">💭</span></div><div class="p-4"><div class="flex items-center gap-2 mb-2"><span class="text-xs px-2 py-0.5 rounded-full bg-blue-500/20 text-blue-400">Zenn</span><svg class="h-3 w-3 text-neutral-500" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg><span class="text-xs text-neutral-500">2026.08.12</span></div><h4 class="text-sm font-medium text-white leading-snug group-hover:text-blue-400 transition-colors line-clamp-2">AWS初心者がEC2・RDS・S3・CloudFrontでWebアプリを構築してみた</h4></div></a><a class="group block bg-white/5 backdrop-blur-sm rounded-xl overflow-hidden border border-white/10 transition-all duration-500 hover:bg-white/10 hover:border-white/20 hover:-translate-y-1" href="/blog/llm-knowledge-assistant-2"><div class="h-32 bg-gradient-to-br from-primary-500/20 to-secondary-600/10 flex items-center justify-center overflow-hidden"><svg class="w-10 h-10 text-white/30" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19 20H5a2 2 0 01-2-2V6a2 2 0 012-2h10a2 2 0 012 2v1m2 13a2 2 0 01-2-2V7m2 13a2 2 0 002-2V9a2 2 0 00-2-2h-2m-4-3H9M7 16h6M7 8h6v4H7V8z"></path></svg></div><div class="p-4"><div class="flex items-center gap-2 mb-2"><span class="text-xs px-2 py-0.5 rounded-full bg-primary-500/20 text-primary-400">Tech</span><span class="text-xs text-neutral-500">2026.08.12</span></div><h4 class="text-sm font-medium text-white leading-snug group-hover:text-primary-400 transition-colors line-clamp-2">ローカルLLMナレッジボットを改良して再ベンチした</h4></div></a><a class="group block bg-white/5 backdrop-blur-sm rounded-xl overflow-hidden border border-white/10 transition-all duration-500 hover:bg-white/10 hover:border-white/20 hover:-translate-y-1" href="/blog/llm-knowledgebot-scale-test"><div class="h-32 bg-gradient-to-br from-primary-500/20 to-secondary-600/10 flex items-center justify-center overflow-hidden"><svg class="w-10 h-10 text-white/30" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19 20H5a2 2 0 01-2-2V6a2 2 0 012-2h10a2 2 0 012 2v1m2 13a2 2 0 01-2-2V7m2 13a2 2 0 002-2V9a2 2 0 00-2-2h-2m-4-3H9M7 16h6M7 8h6v4H7V8z"></path></svg></div><div class="p-4"><div class="flex items-center gap-2 mb-2"><span class="text-xs px-2 py-0.5 rounded-full bg-primary-500/20 text-primary-400">Tech</span><span class="text-xs text-neutral-500">2026.08.12</span></div><h4 class="text-sm font-medium text-white leading-snug group-hover:text-primary-400 transition-colors line-clamp-2">ローカルLLMナレッジボットを「ナレッジ30倍」でスケールテストしてみた</h4></div></a></div><div class="text-center mt-10"><a class="inline-flex items-center gap-2 px-6 py-3 border-2 border-white text-white rounded-full font-medium hover:bg-white hover:text-neutral-900 transition-all duration-300" href="/blog">ブログ一覧を見る<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 8l4 4m0 0l-4 4m4-4H3"></path></svg></a></div></div></div></section><section id="news" class="py-24 bg-neutral-50"><div class="max-w-5xl mx-auto px-6"><div class="text-center mb-12"><div class="relative inline-block"><span class="inline-block text-primary-500 font-display font-semibold tracking-wider text-sm mb-4">NEWS</span><svg aria-hidden="true" class="pointer-events-none select-none absolute -top-3 -right-12 w-12 h-12 opacity-35" viewBox="0 0 70 70" fill="none"><g transform="rotate(12 22 14)"><line x1="22" y1="6" x2="22" y2="22" stroke="var(--primary-400)" stroke-width="2" stroke-linecap="round"></line><line x1="14" y1="14" x2="30" y2="14" stroke="var(--primary-400)" stroke-width="2" stroke-linecap="round"></line><line x1="16.8" y1="8.8" x2="27.2" y2="19.2" stroke="var(--primary-400)" stroke-width="1.4" stroke-linecap="round"></line><line x1="27.2" y1="8.8" x2="16.8" y2="19.2" stroke="var(--primary-400)" stroke-width="1.4" stroke-linecap="round"></line></g><g transform="rotate(-8 52 28)"><line x1="52" y1="22" x2="52" y2="34" stroke="var(--primary-400)" stroke-width="1.8" stroke-linecap="round"></line><line x1="46" y1="28" x2="58" y2="28" stroke="var(--primary-400)" stroke-width="1.8" stroke-linecap="round"></line><line x1="48.1" y1="24.1" x2="55.9" y2="31.9" stroke="var(--primary-400)" stroke-width="1.26" stroke-linecap="round"></line><line x1="55.9" y1="24.1" x2="48.1" y2="31.9" stroke="var(--primary-400)" stroke-width="1.26" stroke-linecap="round"></line></g><g transform="rotate(20 16 48)"><line x1="16" y1="43.5" x2="16" y2="52.5" stroke="var(--primary-400)" stroke-width="1.4" stroke-linecap="round"></line><line x1="11.5" y1="48" x2="20.5" y2="48" stroke="var(--primary-400)" stroke-width="1.4" stroke-linecap="round"></line><line x1="13.075" y1="45.075" x2="18.925" y2="50.925" stroke="var(--primary-400)" stroke-width="0.9799999999999999" stroke-linecap="round"></line><line x1="18.925" y1="45.075" x2="13.075" y2="50.925" stroke="var(--primary-400)" stroke-width="0.9799999999999999" stroke-linecap="round"></line></g><g transform="rotate(-15 48 55)"><line x1="48" y1="51.5" x2="48" y2="58.5" stroke="var(--primary-400)" stroke-width="1.2" stroke-linecap="round"></line><line x1="44.5" y1="55" x2="51.5" y2="55" stroke="var(--primary-400)" stroke-width="1.2" stroke-linecap="round"></line><line x1="45.725" y1="52.725" x2="50.275" y2="57.275" stroke="var(--primary-400)" stroke-width="0.84" stroke-linecap="round"></line><line x1="50.275" y1="52.725" x2="45.725" y2="57.275" stroke="var(--primary-400)" stroke-width="0.84" stroke-linecap="round"></line></g></svg></div>
1<h2 class="text-3xl md:text-4xl font-bold text-neutral-900 mb-4">お知らせ</h2><p class="text-neutral-600 max-w-2xl mx-auto">最新のニュースやイベント情報をお届けします</p></div><div class="bg-white rounded-2xl shadow-sm overflow-hidden"><ul class="divide-y divide-neutral-100"><li class="group" style="animation-delay:0s"><a class="flex flex-col md:flex-row md:items-center gap-3 md:gap-6 px-6 py-5 hover:bg-neutral-50 transition-colors duration-200" href="/news/9f53f1b9-dd60-4d0e-b4bc-211dbae1e7f3"><time class="text-sm text-neutral-400 font-display tracking-wide shrink-0 w-28">2026.06.04</time><span class="inline-flex items-center justify-center px-3 py-1 rounded text-xs font-medium shrink-0 bg-neutral-800 text-white w-20">お知らせ</span><span class="text-neutral-800 group-hover:text-primary-500 transition-colors duration-200 flex-1 line-clamp-1">TOPページに「91worksを選ぶ理由」セクションを追加しました</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right w-5 h-5 text-neutral-300 group-hover:text-primary-500 group-hover:translate-x-1 transition-all duration-200 shrink-0 hidden md:block"><path d="m9 18 6-6-6-6"></path></svg></a></li><li class="group" style="animation-delay:0.05s"><a class="flex flex-col md:flex-row md:items-center gap-3 md:gap-6 px-6 py-5 hover:bg-neutral-50 transition-colors duration-200" href="/news/2cc49b52-fc3a-4a6c-88ae-366fd79127d9"><time class="text-sm text-neutral-400 font-display tracking-wide shrink-0 w-28">2026.04.02</time><span class="inline-flex items-center justify-center px-3 py-1 rounded text-xs font-medium shrink-0 bg-neutral-800 text-white w-20">お知らせ</span><span class="text-neutral-800 group-hover:text-primary-500 transition-colors duration-200 flex-1 line-clamp-1">福利厚生の「ボディメンテ補助」の対象に新しくプロテインも含めました</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right w-5 h-5 text-neutral-300 group-hover:text-primary-500 group-hover:translate-x-1 transition-all duration-200 shrink-0 hidden md:block"><path d="m9 18 6-6-6-6"></path></svg></a></li><li class="group" style="animation-delay:0.1s"><a class="flex flex-col md:flex-row md:items-center gap-3 md:gap-6 px-6 py-5 hover:bg-neutral-50 transition-colors duration-200" href="/news/2b53d39b-9be4-4f77-b40b-f4e78e3ea5a5"><time class="text-sm text-neutral-400 font-display tracking-wide shrink-0 w-28">2026.03.19</time><span class="inline-flex items-center justify-center px-3 py-1 rounded text-xs font-medium shrink-0 bg-neutral-800 text-white w-20">お知らせ</span><span class="text-neutral-800 group-hover:text-primary-500 transition-colors duration-200 flex-1 line-clamp-1">福利厚生に「AIツール補助」を新設しました</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right w-5 h-5 text-neutral-300 group-hover:text-primary-500 group-hover:translate-x-1 transition-all duration-200 shrink-0 hidden md:block"><path d="m9 18 6-6-6-6"></path></svg></a></li><li class="group" style="animation-delay:0.15000000000000002s"><a class="flex flex-col md:flex-row md:items-center gap-3 md:gap-6 px-6 py-5 hover:bg-neutral-50 transition-colors duration-200" href="/news/8841b108-6f13-4264-8afe-c051071d76d8"><time class="text-sm text-neutral-400 font-display tracking-wide shrink-0 w-28">2026.03.11</time><span class="inline-flex items-center justify-center px-3 py-1 rounded text-xs font-medium shrink-0 bg-neutral-800 text-white w-20">お知らせ</span><span class="text-neutral-800 group-hover:text-primary-500 transition-colors duration-200 flex-1 line-clamp-1">HPをリニューアルしました</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right w-5 h-5 text-neutral-300 group-hover:text-primary-500 group-hover:translate-x-1 transition-all duration-200 shrink-0 hidden md:block"><path d="m9 18 6-6-6-6"></path></svg></a></li></ul></div><div class="text-center mt-10"><a class="inline-flex items-center gap-2 px-6 py-3 border-2 border-neutral-900 text-neutral-900 rounded-full font-medium hover:bg-neutral-900 hover:text-white transition-all duration-300" href="/news">お知らせ一覧を見る<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right w-4 h-4"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a></div></div></section><section class="py-20 md:py-32 bg-gradient-to-br from-neutral-900 via-neutral-800 to-neutral-900 relative overflow-hidden"><div class="absolute top-0 left-0 w-full h-1 bg-gradient-to-r from-primary-500 via-secondary-500 to-primary-500"></div><div class="absolute top-20 right-20 w-60 h-60 bg-primary-500 rounded-full opacity-10 blur-3xl"></div><div class="absolute bottom-20 left-20 w-60 h-60 bg-secondary-500 rounded-full opacity-10 blur-3xl"></div><div class="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 relative z-10">
1<div class="text-center mb-16 opacity-0"><span class="inline-block px-4 py-2 bg-white/10 text-white rounded-full text-sm font-semibold mb-4 backdrop-blur-sm">RECRUIT</span><h2 class="text-3xl md:text-4xl lg:text-5xl font-bold text-white mb-6"><span class="relative inline-block"><span class="relative z-10">一緒に働きませんか?</span><svg aria-hidden="true" class="pointer-events-none select-none absolute -bottom-1 left-0 w-full h-4" viewBox="0 0 200 16" preserveAspectRatio="none" fill="none"><path d="M3 10 C20 4, 38 14, 60 8 C82 2, 95 13, 120 7 C145 1, 162 12, 180 8 C190 6, 195 9, 198 7" stroke="var(--primary-400)" stroke-width="4.5" stroke-linecap="round"></path></svg></span></h2><p class="text-lg text-neutral-300 max-w-2xl mx-auto leading-relaxed">履歴書は不要です。今のメンバーもみんな最初は雑談から。<br class="hidden md:block"/>お仕事の話だけでなく、趣味や好きなことのお話で繋がりましょう!</p></div><div class="relative"><svg aria-hidden="true" class="pointer-events-none select-none absolute -top-10 left-[45%] w-14 h-14 opacity-25 hidden lg:block" viewBox="0 0 100 100" fill="none"><path d="M24 5 C20 18, 28 28, 23 42 C18 56, 26 68, 24 82 M14 70 C17 76, 21 82, 24 88 C27 82, 32 76, 36 70" stroke="var(--secondary-400)" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"></path></svg></div><div class="grid md:grid-cols-2 gap-6 lg:gap-8 opacity-0"><a href="/recruit" class="group relative bg-gradient-to-br from-primary-500 to-primary-600 rounded-2xl p-8 overflow-hidden transition-all duration-500 hover:shadow-2xl hover:shadow-primary-500/20 hover:-translate-y-1"><div class="absolute inset-0 opacity-10"><div class="absolute top-0 right-0 w-40 h-40 bg-white rounded-full -translate-y-1/2 translate-x-1/2"></div><div class="absolute bottom-0 left-0 w-32 h-32 bg-white rounded-full translate-y-1/2 -translate-x-1/2"></div></div><div class="relative z-10"><div class="w-14 h-14 bg-white/20 rounded-xl flex items-center justify-center mb-6 group-hover:scale-110 transition-transform"><svg class="w-7 h-7 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 13.255A23.931 23.931 0 0112 15c-3.183 0-6.22-.62-9-1.745M16 6V4a2 2 0 00-2-2h-4a2 2 0 00-2 2v2m4 6h.01M5 20h14a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"></path></svg></div><h3 class="text-2xl font-bold text-white mb-3">採用情報を見る</h3><p class="text-white/80 mb-6">募集職種・待遇・選考フローなど、詳しい採用情報はこちらからご確認ください。</p><div class="flex items-center text-white font-medium"><span>詳細を見る</span><svg class="w-5 h-5 ml-2 transform group-hover:translate-x-2 transition-transform" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 8l4 4m0 0l-4 4m4-4H3"></path></svg></div></div></a><a href="https://lin.ee/Ij7ul6m" target="_blank" rel="noopener noreferrer" class="group relative bg-white/5 backdrop-blur-sm rounded-2xl p-8 border border-white/10 overflow-hidden transition-all duration-500 hover:bg-white/10 hover:border-white/20 hover:-translate-y-1 block"><div class="relative z-10"><div class="w-14 h-14 bg-[#06C755] rounded-xl flex items-center justify-center mb-6 group-hover:scale-110 transition-transform"><svg class="w-8 h-8 text-white" viewBox="0 0 24 24" fill="currentColor"><path d="M19.365 9.863c.349 0 .63.285.63.631 0 .345-.281.63-.63.63H17.61v1.125h1.755c.349 0 .63.283.63.63 0 .344-.281.629-.63.629h-2.386c-.345 0-.627-.285-.627-.629V8.108c0-.345.282-.63.627-.63h2.386c.349 0 .63.285.63.63 0 .349-.281.63-.63.63H17.61v1.125h1.755zm-3.855 3.016c0 .27-.174.51-.432.596-.064.021-.133.031-.199.031-.211 0-.391-.09-.51-.25l-2.443-3.317v2.94c0 .344-.279.629-.631.629-.346 0-.626-.285-.626-.629V8.108c0-.27.173-.51.43-.595.06-.023.136-.033.194-.033.195 0 .375.104.495.254l2.462 3.33V8.108c0-.345.282-.63.63-.63.345 0 .63.285.63.63v4.771zm-5.741 0c0 .344-.282.629-.631.629-.345 0-.627-.285-.627-.629V8.108c0-.345.282-.63.627-.63.349 0 .631.285.631.63v4.771zm-2.466.629H4.917c-.345 0-.63-.285-.63-.629V8.108c0-.345.285-.63.63-.63.348 0 .63.285.63.63v4.141h1.756c.348 0 .629.283.629.63 0 .344-.281.629-.629.629M24 10.314C24 4.943 18.615.572 12 .572S0 4.943 0 10.314c0 4.811 4.27 8.842 10.035 9.608.391.082.923.258 1.058.59.12.301.079.766.038 1.08l-.164 1.02
1c-.045.301-.24 1.186 1.049.645 1.291-.539 6.916-4.078 9.436-6.975C23.176 14.393 24 12.458 24 10.314"></path></svg></div><h3 class="text-2xl font-bold text-white mb-3">LINEで気軽に相談</h3><p class="text-neutral-400 mb-6">業後や休日でも対応OK!まずは気軽にお話ししませんか?カジュアル面談も受付中です。</p><div class="flex items-center text-white font-medium group-hover:text-[#06C755] transition-colors"><span>LINEを開く</span><svg class="w-5 h-5 ml-2 transform group-hover:translate-x-2 transition-transform" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 8l4 4m0 0l-4 4m4-4H3"></path></svg></div></div><div class="absolute inset-0 rounded-2xl opacity-0 group-hover:opacity-100 transition-opacity duration-500 pointer-events-none shadow-[0_0_40px_rgba(6,199,85,0.15)]"></div></a></div><div class="mt-6 lg:mt-8 opacity-0"><a href="https://discord.gg/AQzwNpaeAZ" target="_blank" rel="noopener noreferrer" class="group relative block bg-white/5 backdrop-blur-sm rounded-2xl p-8 border border-white/10 overflow-hidden transition-all duration-500 hover:bg-white/10 hover:border-white/20 hover:-translate-y-1"><div class="relative z-10 flex flex-col md:flex-row md:items-center md:justify-between gap-6"><div class="flex items-start gap-6"><div class="w-14 h-14 bg-[#5865F2] rounded-xl flex items-center justify-center flex-shrink-0 group-hover:scale-110 transition-transform"><svg class="w-8 h-8 text-white" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M20.317 4.37a19.791 19.791 0 00-4.885-1.515.074.074 0 00-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 00-5.487 0 12.64 12.64 0 00-.617-1.25.077.077 0 00-.079-.037A19.736 19.736 0 003.677 4.37a.07.07 0 00-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 00.031.057 19.9 19.9 0 005.993 3.03.078.078 0 00.084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 00-.041-.106 13.107 13.107 0 01-1.872-.892.077.077 0 01-.008-.128 10.2 10.2 0 00.372-.292.074.074 0 01.077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 01.078.01c.12.098.246.198.373.292a.077.077 0 01-.006.127 12.299 12.299 0 01-1.873.892.077.077 0 00-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 00.084.028 19.839 19.839 0 006.002-3.03.077.077 0 00.032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 00-.031-.03z"></path></svg></div><div><h3 class="text-2xl font-bold text-white mb-2">フリーランス向けコミュニティ</h3><p class="text-neutral-400">Discordでエンジニアコミュニティに参加・交流。フリーランスの方も歓迎です!</p></div></div><div class="flex items-center text-white font-medium group-hover:text-[#5865F2] transition-colors flex-shrink-0"><span>参加する</span><svg class="w-5 h-5 ml-2 transform group-hover:translate-x-2 transition-transform" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 8l4 4m0 0l-4 4m4-4H3"></path></svg></div></div><div class="absolute inset-0 rounded-2xl opacity-0 group-hover:opacity-100 transition-opacity duration-500 pointer-events-none shadow-[0_0_40px_rgba(88,101,242,0.15)]"></div></a></div></div></section><footer id="contact" class="bg-neutral-900 text-white"><div class="border-b border-neutral-800"><div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-16"><div class="grid lg:grid-cols-2 gap-12 items-start"><div><h2 class="text-3xl md:text-4xl font-bold mb-6">お問い合わせ</h2><p class="text-neutral-400 mb-8 leading-relaxed">91worksへのお問い合わせ、ご相談はこちらからお気軽にどうぞ。採用に関するご質問も受け付けております。</p><div class="space-y-4"><div class="flex items-start"><div class="w-10 h-10 bg-primary-500/20 rounded-lg flex items-center justify-center mr-4 flex-shrink-0"><svg class="w-5 h-5 text-primary-400" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"></path><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 11a3 3 0 11-6 0 3 3 0 016 0z"></path></svg></div><div><h3 class="font-semibold text-white mb-1">住所</h3><p class="text-neutral-400 text-sm">〒150-0001<br/>東京都渋谷区神宮前六丁目23番4号 桑野ビル2階</p></div></div><div class="flex items-start"><div class="w-10 h-10 bg-secondary-500/20 rounded-lg flex items-center justify-center mr-4 flex-shrink-0"><svg class="w-5 h-5 text-secondary-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"></path></svg></div><div><h3 class="font-semibold text-white mb-1">メール</h3><p class="text-neutral-400 text-sm">[email protected]</p></div></div></div></div><form class="bg-neutral-800/50 rounded-2xl p-6 md:p-8"><div class="space-y-6"><div><label for="name" class="block text-sm font-medium text-neutral-300 mb-2">お名前</label><input type="text" id="name" required="" class="w-full px-4 py-3 bg-neutral-900 border border-neutral-700 rounded-lg text-white placeholder-neutral-500 focus:outline-none focus:border-primary-500 focus:ring-1 focus:ring-primary-500 transition-colors" placeholder="山田 太郎" value=""/></div><div><label for="email" class="block text-sm font-medium text-neutral-300 mb-2">メールアドレス</label><input type="email" id="email" required="" class="w-full px-4 py-3 bg-neutral-900 border border-neutral-700 rounded-lg text-white placeholder-neutral-500 focus:outline-none focus:border-primary-500 focus:ring-1 focus:ring-primary-500 transition-colors" placeholder="[email protected]" value=""/></div><div><label for="message" class="block text-sm font-medium text-neutral-300 mb-2">メッセージ</label><textarea id="message" required="" rows="4" class="w-full px-4 py-3 bg-neutral-900 border border-neutral-700 rounded-lg text-white placeholder-neutral-500 focus:outline-none focus:border-primary-500 focus:ring-1 focus:ring-primary-500 transition-colors resize-none" placeholder="お問い合わせ内容をご記入ください"></textarea></div><button type="submit" class="w-full btn-primary py-4 text-center disabled:opacity-50 disabled:cursor-not-allowed">送信する</button></div></form></div></div></div><div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12"><div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-5 gap-8 mb-12"><div class="sm:col-span-2 lg:col-span-2"><a class="flex items-center mb-4" href="/"><img alt="91works" loading="lazy" width="140" height="180" decoding="async" data-nimg="1" class="h-12 w-auto" style="color:transparent" src="/logo-light.png"/></a><p class="text-neutral-400 text-sm leading-relaxed">ITエンジニアが多様な選択肢を持つ、活気ある社会を目指す</p></div><div><h3 class="font-semibold text-white mb-4">Company</h3><ul class="space-y-2"><li><a class="text-neutral-400 text-sm hover:text-primary-400 transition-colors" href="/about">About Us</a></li><li><a class="text-neutral-400 text-sm hover:text-primary-400 transition-colors" href="/news">News</a></li><li><a class="text-neutral-400 text-sm hover:text-primary-400 transition-colors" href="/privacy">Privacy Policy</a></li></ul></div><div><h3 class="font-semibold text-white mb-4">Services</h3><ul class="space-y-2"><li><a href="https://www.91agent.jp/?utm_source=company_hp&amp;utm_medium=referral" target="_blank" rel="noopener noreferrer external" class="text-neutral-400 text-sm hover:text-primary-400 transition-colors inline-flex items-center gap-1">SES企業の方<svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg></a></li><li><a href="https://91freelance.jp/" target="_blank" rel="noopener noreferrer external" class="text-neutral-400 text-sm hover:text-primary-400 transition-colors inline-flex items-center gap-1">フリーランスの方<svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path></svg></a></li></ul></div><div><h3 class="font-semibold text-white mb-4">Resources</h3><ul class="space-y-2"><li><a class="text-neutral-400 text-sm hover:text-primary-400 transition-colors" href="/blog">Company Blog</a></li><li><a class="text-neutral-400 text-sm hover:text-primary-400 transition-colors" href="/blog">Tech Blog</a></li><li><a class="text-neutral-400 text-sm hover:text-primary-400 transition-colors" href="#community">Community</a></li><li><a class="text-neutral-400 text-sm hover:text-primary-400 transition-colors" href="#">
1FAQ</a></li></ul></div></div><div class="border-t border-neutral-800 pt-8 flex flex-col md:flex-row justify-between items-center"><div class="flex flex-col md:flex-row items-center gap-2 md:gap-4 mb-4 md:mb-0"><p class="text-neutral-500 text-sm">© <!-- -->2026<!-- --> 91works Inc. All rights reserved.</p><a class="text-neutral-500 text-sm hover:text-primary-400 transition-colors" href="/privacy">Privacy Policy</a></div><div class="flex items-center space-x-4"><a href="https://x.com/91_works" target="_blank" rel="noopener noreferrer" class="w-10 h-10 bg-neutral-800 rounded-full flex items-center justify-center text-neutral-400 hover:bg-primary-500 hover:text-white transition-all duration-300" aria-label="Twitter"><svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24"><path d="M8.29 20.251c7.547 0 11.675-6.253 11.675-11.675 0-.178 0-.355-.012-.53A8.348 8.348 0 0022 5.92a8.19 8.19 0 01-2.357.646 4.118 4.118 0 001.804-2.27 8.224 8.224 0 01-2.605.996 4.107 4.107 0 00-6.993 3.743 11.65 11.65 0 01-8.457-4.287 4.106 4.106 0 001.27 5.477A4.072 4.072 0 012.8 9.713v.052a4.105 4.105 0 003.292 4.022 4.095 4.095 0 01-1.853.07 4.108 4.108 0 003.834 2.85A8.233 8.233 0 012 18.407a11.616 11.616 0 006.29 1.84"></path></svg></a><a href="https://github.com/91works" target="_blank" rel="noopener noreferrer" class="w-10 h-10 bg-neutral-800 rounded-full flex items-center justify-center text-neutral-400 hover:bg-primary-500 hover:text-white transition-all duration-300" aria-label="GitHub"><svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24"><path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"></path></svg></a><a href="https://www.facebook.com/91works" target="_blank" rel="noopener noreferrer" class="w-10 h-10 bg-neutral-800 rounded-full flex items-center justify-center text-neutral-400 hover:bg-primary-500 hover:text-white transition-all duration-300" aria-label="Facebook"><svg class="w-5 h-5" fill="currentColor" viewBox="0 0 24 24"><path d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z"></path></svg></a></div></div></div></footer></main>
1<script src="/_next/static/chunks/webpack-ddafe2c6ea0be8a0.js" id="_R_" async=""></script>
1<script>(self.__next_f=self.__next_f||[]).push([0])</script>
1<script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[13572,[\"3425\",\"static/chunks/3425-8931cfd3330bc124.js\",\"1768\",\"static/chunks/1768-8752de85dc8007f5.js\",\"7177\",\"static/chunks/app/layout-f12396e608755c99.js\"],\"GoogleAnalytics\"]\n3:I[93117,[\"3425\",\"static/chunks/3425-8931cfd3330bc124.js\",\"1768\",\"static/chunks/1768-8752de85dc8007f5.js\",\"7177\",\"static/chunks/app/layout-f12396e608755c99.js\"],\"MicrosoftClarity\"]\n4:I[23494,[\"3425\",\"static/chunks/3425-8931cfd3330bc124.js\",\"1768\",\"static/chunks/1768-8752de85dc8007f5.js\",\"7177\",\"static/chunks/app/layout-f12396e608755c99.js\"],\"LocaleProvider\"]\n5:I[91768,[\"3425\",\"static/chunks/3425-8931cfd3330bc124.js\",\"1768\",\"static/chunks/1768-8752de85dc8007f5.js\",\"7177\",\"static/chunks/app/layout-f12396e608755c99.js\"],\"CommandPaletteProvider\"]\n6:I[43455,[],\"\"]\n7:I[2243,[],\"\"]\n8:I[99546,[\"3425\",\"static/chunks/3425-8931cfd3330bc124.js\",\"2243\",\"static/chunks/2243-1fa24cd0eda61a11.js\",\"3221\",\"static/chunks/3221-0b00cf93c8ad1a2c.js\",\"6055\",\"static/chunks/6055-1a000ce23b5bad74.js\",\"1768\",\"static/chunks/1768-8752de85dc8007f5.js\",\"1773\",\"static/chunks/1773-df3502ba5f559e20.js\",\"8974\",\"static/chunks/app/page-1f0aed2cd607933a.js\"],\"default\"]\n9:I[13783,[\"3425\",\"static/chunks/3425-8931cfd3330bc124.js\",\"2243\",\"static/chunks/2243-1fa24cd0eda61a11.js\",\"3221\",\"static/chunks/3221-0b00cf93c8ad1a2c.js\",\"6055\",\"static/chunks/6055-1a000ce23b5bad74.js\",\"1768\",\"static/chunks/1768-8752de85dc8007f5.js\",\"1773\",\"static/chunks/1773-df3502ba5f559e20.js\",\"8974\",\"static/chunks/app/page-1f0aed2cd607933a.js\"],\"default\"]\na:I[64820,[\"3425\",\"static/chunks/3425-8931cfd3330bc124.js\",\"2243\",\"static/chunks/2243-1fa24cd0eda61a11.js\",\"3221\",\"static/chunks/3221-0b00cf93c8ad1a2c.js\",\"6055\",\"static/chunks/6055-1a000ce23b5bad74.js\",\"1768\",\"static/chunks/1768-8752de85dc8007f5.js\",\"1773\",\"static/chunks/1773-df3502ba5f559e20.js\",\"8974\",\"static/chunks/app/page-1f0aed2cd607933a.js\"],\"default\"]\nb:I[36864,[\"3425\",\"static/chunks/3425-8931cfd3330bc124.js\",\"2243\",\"static/chunks/2243-1fa24cd0eda61a11.js\",\"3221\",\"static/chunks/3221-0b00cf93c8ad1a2c.js\",\"6055\",\"static/chun"])</script>
1<script>self.__next_f.push([1,"ks/6055-1a000ce23b5bad74.js\",\"1768\",\"static/chunks/1768-8752de85dc8007f5.js\",\"1773\",\"static/chunks/1773-df3502ba5f559e20.js\",\"8974\",\"static/chunks/app/page-1f0aed2cd607933a.js\"],\"default\"]\nc:I[56398,[\"3425\",\"static/chunks/3425-8931cfd3330bc124.js\",\"2243\",\"static/chunks/2243-1fa24cd0eda61a11.js\",\"3221\",\"static/chunks/3221-0b00cf93c8ad1a2c.js\",\"6055\",\"static/chunks/6055-1a000ce23b5bad74.js\",\"1768\",\"static/chunks/1768-8752de85dc8007f5.js\",\"1773\",\"static/chunks/1773-df3502ba5f559e20.js\",\"8974\",\"static/chunks/app/page-1f0aed2cd607933a.js\"],\"default\"]\nd:I[35262,[\"3425\",\"static/chunks/3425-8931cfd3330bc124.js\",\"2243\",\"static/chunks/2243-1fa24cd0eda61a11.js\",\"3221\",\"static/chunks/3221-0b00cf93c8ad1a2c.js\",\"6055\",\"static/chunks/6055-1a000ce23b5bad74.js\",\"1768\",\"static/chunks/1768-8752de85dc8007f5.js\",\"1773\",\"static/chunks/1773-df3502ba5f559e20.js\",\"8974\",\"static/chunks/app/page-1f0aed2cd607933a.js\"],\"default\"]\ne:I[85769,[\"3425\",\"static/chunks/3425-8931cfd3330bc124.js\",\"2243\",\"static/chunks/2243-1fa24cd0eda61a11.js\",\"3221\",\"static/chunks/3221-0b00cf93c8ad1a2c.js\",\"6055\",\"static/chunks/6055-1a000ce23b5bad74.js\",\"1768\",\"static/chunks/1768-8752de85dc8007f5.js\",\"1773\",\"static/chunks/1773-df3502ba5f559e20.js\",\"8974\",\"static/chunks/app/page-1f0aed2cd607933a.js\"],\"default\"]\n11:I[94105,[\"3425\",\"static/chunks/3425-8931cfd3330bc124.js\",\"2243\",\"static/chunks/2243-1fa24cd0eda61a11.js\",\"3221\",\"static/chunks/3221-0b00cf93c8ad1a2c.js\",\"6055\",\"static/chunks/6055-1a000ce23b5bad74.js\",\"1768\",\"static/chunks/1768-8752de85dc8007f5.js\",\"1773\",\"static/chunks/1773-df3502ba5f559e20.js\",\"8974\",\"static/chunks/app/page-1f0aed2cd607933a.js\"],\"default\"]\n12:I[50456,[\"3425\",\"static/chunks/3425-8931cfd3330bc124.js\",\"2243\",\"static/chunks/2243-1fa24cd0eda61a11.js\",\"3221\",\"static/chunks/3221-0b00cf93c8ad1a2c.js\",\"6055\",\"static/chunks/6055-1a000ce23b5bad74.js\",\"1768\",\"static/chunks/1768-8752de85dc8007f5.js\",\"1773\",\"static/chunks/1773-df3502ba5f559e20.js\",\"8974\",\"static/chunks/app/page-1f0aed2cd607933a.js\"],\"default\"]\n13:I[37078,[],\"OutletBoundary\"]\n16:I[37078,[],\"ViewportBoundary\"]\n18:I[37078,[],\"MetadataBoundary\"]\n1a:I[89797,[],\"\"]\n:HL[\"/_next/static/media/24f6ebe2756575bd-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/36966cca54120369-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/4ba104eebffd02b6.css\",\"style\"]\n:HL[\"/_next/static/css/258c6bfab8ff1796.css\",\"style\"]\n:HL[\"/_next/static/css/f6e21d418ce1d9b3.css\",\"style\"]\n0:{\"P\":null,\"b\":\"H5dj8hykDqpR43U6tl-Ph\",\"p\":\"\",\"c\":[\"\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/4ba104eebffd02b6.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/258c6bfab8ff1796.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"2\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/f6e21d418ce1d9b3.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"ja\",\"className\":\"scroll-smooth\",\"children\":[\"$\",\"body\",null,{\"className\":\"__variable_e60539 __variable_c22fe1 antialiased\",\"children\":[[\"$\",\"$L2\",null,{}],[\"$\",\"$L3\",null,{}],[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"Organization\\\",\\\"name\\\":\\\"91works\\\",\\\"url\\\":\\\"https://nineone-works.com\\\",\\\"logo\\\":{\\\"@type\\\":\\\"ImageObject\\\",\\\"url\\\":\\\"https://nineone-works.com/logo-dark.png\\\",\\\"width\\\":\\\"2096\\\",\\\"height\\\":\\\"1511\\\"}}\"}}],[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$L5\",null,{\"children\":[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetic"])</script>
1<script>self.__next_f.push([1,"a,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}]}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"main\",null,{\"className\":\"min-h-screen\",\"children\":[[\"$\",\"$L8\",null,{}],[\"$\",\"$L9\",null,{}],[\"$\",\"$La\",null,{}],[\"$\",\"$Lb\",null,{}],[\"$\",\"$Lc\",null,{}],[\"$\",\"$Ld\",null,{}],[\"$\",\"$Le\",null,{}],\"$Lf\",\"$L10\",[\"$\",\"$L11\",null,{}],[\"$\",\"$L12\",null,{}]]}],null,[\"$\",\"$L13\",null,{\"children\":[\"$L14\",\"$L15\"]}]]}],{},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$L16\",null,{\"children\":\"$L17\"}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]],[\"$\",\"$L18\",null,{\"children\":\"$L19\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$1a\",[]],\"s\":false,\"S\":true}\n"])</script>
1<script>self.__next_f.push([1,"17:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n14:null\n"])</script>
1<script>self.__next_f.push([1,"1b:I[76659,[],\"IconMark\"]\n15:null\n"])</script>
1<script>self.__next_f.push([1,"19:[[\"$\",\"title\",\"0\",{\"children\":\"91works | ITエンジニアが多様な選択肢を持つ、活気ある社会を目指す\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"91worksは、エンジニアの成長と幸福を第一に考え、多様なキャリアパスと選択肢を提供する企業です。心理的安全性の高い環境で、あなたの可能性を最大限に発揮しませんか。\"}],[\"$\",\"meta\",\"2\",{\"name\":\"author\",\"content\":\"91works Inc.\"}],[\"$\",\"link\",\"3\",{\"rel\":\"manifest\",\"href\":\"/site.webmanifest\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"meta\",\"4\",{\"name\":\"keywords\",\"content\":\"91works,エンジニア,SES,キャリア,IT企業,東京\"}],[\"$\",\"meta\",\"5\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:title\",\"content\":\"91works | ITエンジニアが多様な選択肢を持つ、活気ある社会を目指す\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:description\",\"content\":\"91worksは、エンジニアの成長と幸福を第一に考え、多様なキャリアパスと選択肢を提供する企業です。\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:url\",\"content\":\"https://nineone-works.com\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:site_name\",\"content\":\"91works\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:locale\",\"content\":\"ja_JP\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"12\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"13\",{\"name\":\"twitter:title\",\"content\":\"91works | ITエンジニアが多様な選択肢を持つ、活気ある社会を目指す\"}],[\"$\",\"meta\",\"14\",{\"name\":\"twitter:description\",\"content\":\"91worksは、エンジニアの成長と幸福を第一に考え、多様なキャリアパスと選択肢を提供する企業です。\"}],[\"$\",\"link\",\"15\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\",\"sizes\":\"any\"}],[\"$\",\"link\",\"16\",{\"rel\":\"icon\",\"href\":\"/favicon-16x16.png\",\"sizes\":\"16x16\",\"type\":\"image/png\"}],[\"$\",\"link\",\"17\",{\"rel\":\"icon\",\"href\":\"/favicon-32x32.png\",\"sizes\":\"32x32\",\"type\":\"image/png\"}],[\"$\",\"link\",\"18\",{\"rel\":\"apple-touch-icon\",\"href\":\"/apple-touch-icon.png\",\"sizes\":\"180x180\",\"type\":\"image/png\"}],[\"$\",\"$L1b\",\"19\",{}]]\n"])</script>
1<script>self.__next_f.push([1,"1c:I[11901,[\"3425\",\"static/chunks/3425-8931cfd3330bc124.js\",\"2243\",\"static/chunks/2243-1fa24cd0eda61a11.js\",\"3221\",\"static/chunks/3221-0b00cf93c8ad1a2c.js\",\"6055\",\"static/chunks/6055-1a000ce23b5bad74.js\",\"1768\",\"static/chunks/1768-8752de85dc8007f5.js\",\"1773\",\"static/chunks/1773-df3502ba5f559e20.js\",\"8974\",\"static/chunks/app/page-1f0aed2cd607933a.js\"],\"default\"]\n"])</script>
1<script>self.__next_f.push([1,"10:[\"$\",\"$L1c\",null,{\"newsList\":[{\"id\":\"9f53f1b9-dd60-4d0e-b4bc-211dbae1e7f3\",\"title\":\"TOPページに「91worksを選ぶ理由」セクションを追加しました\",\"body\":\"TOPページのセクションに「91worksを選ぶ理由」という記載を追加しました。\\n\\n求職者や訪問してくれた方々向けに、より具体的にメリットに感じてもらえるであろうポイントをまとめました。\\n\\n今後も随時アップデートしていきます!\",\"status\":\"published\",\"published_at\":\"2026-06-04T08:49:00+00:00\",\"created_at\":\"2026-06-04T08:55:50.174186+00:00\",\"updated_at\":\"2026-06-19T12:32:20.042792+00:00\",\"created_by\":\"c11bdcdd-0853-40d6-a7ab-d9ca2964226c\",\"category_id\":\"90d7aa3c-8bb4-4f48-ab7f-540521b8a488\",\"category\":{\"id\":\"90d7aa3c-8bb4-4f48-ab7f-540521b8a488\",\"name\":\"お知らせ\",\"slug\":\"announcement\",\"created_at\":\"2026-04-14T13:26:39.617678+00:00\",\"sort_order\":0}},{\"id\":\"2cc49b52-fc3a-4a6c-88ae-366fd79127d9\",\"title\":\"福利厚生の「ボディメンテ補助」の対象に新しくプロテインも含めました\",\"body\":\"エンジニアの生産性向上を支援するため、既存の福利厚生としてあった「ボディメンテ補助」の対象を拡張し、普段使用しているプロテインも対象に含めるようにしました。\\n\\n■福利厚生:ボディメンテ補助\\n■ 対象:マッサージ、整体、鍼灸、温泉、サウナ代、[new]プロテイン代\\n\\n91worksはエンジニアが働きやすくなる制度や仕組みを常にアップデートしていきます!\",\"status\":\"published\",\"published_at\":\"2026-04-02T10:00:00+00:00\",\"created_at\":\"2026-04-02T11:54:33.884078+00:00\",\"updated_at\":\"2026-04-14T13:26:39.617678+00:00\",\"created_by\":\"c11bdcdd-0853-40d6-a7ab-d9ca2964226c\",\"category_id\":\"90d7aa3c-8bb4-4f48-ab7f-540521b8a488\",\"category\":{\"id\":\"90d7aa3c-8bb4-4f48-ab7f-540521b8a488\",\"name\":\"お知らせ\",\"slug\":\"announcement\",\"created_at\":\"2026-04-14T13:26:39.617678+00:00\",\"sort_order\":0}},{\"id\":\"2b53d39b-9be4-4f77-b40b-f4e78e3ea5a5\",\"title\":\"福利厚生に「AIツール補助」を新設しました\",\"body\":\"エンジニアの生産性向上を支援するため、新たな福利厚生として「AIツール補助」を導入しました。\\n\\n■ 対象:AIツール全般(ツールの種類は問いません)\\n■ 備考:一部条件あり\\n\\nChatGPT、GitHub Copilot、Claudeなど、業務や学習に活用できるAIツールの費用を会社が補助します。\",\"status\":\"published\",\"published_at\":\"2026-03-19T10:00:00+00:00\",\"created_at\":\"2026-03-19T08:29:49.109094+00:00\",\"updated_at\":\"2026-04-14T13:26:39.617678+00:00\",\"created_by\":\"c11bdcdd-0853-40d6-a7ab-d9ca2964226c\",\"category_id\":\"90d7aa3c-8bb4-4f48-ab7f-540521b8a488\",\"category\":{\"id\":\"90d7aa3c-8bb4-4f48-ab7f-540521b8a488\",\"name\":\"お知らせ\",\"slug\":\"announcement\",\"created_at\":\"2026-04-14T13:26:39.617678+00:00\",\"sort_order\":0}},{\"id\":\"8841b108-6f13-4264-8afe-c051071d76d8\",\"title\":\"HPをリニューアルしました\",\"body\":\"ホームページをAIと一緒にリニューアルしました。\\n\\n暖かなイメージをベースに、遊び心やクリエイティブさを表現できるように構築しました。\",\"status\":\"published\",\"published_at\":\"2026-03-11T00:00:00+00:00\",\"created_at\":\"2026-02-17T12:00:38.386513+00:00\",\"updated_at\":\"2026-04-14T13:26:39.617678+00:00\",\"created_by\":\"c11bdcdd-0853-40d6-a7ab-d9ca2964226c\",\"category_id\":\"90d7aa3c-8bb4-4f48-ab7f-540521b8a488\",\"category\":{\"id\":\"90d7aa3c-8bb4-4f48-ab7f-540521b8a488\",\"name\":\"お知らせ\",\"slug\":\"announcement\",\"created_at\":\"2026-04-14T13:26:39.617678+00:00\",\"sort_order\":0}}]}]\n"])</script>
1<script>self.__next_f.push([1,"1d:I[75705,[\"3425\",\"static/chunks/3425-8931cfd3330bc124.js\",\"2243\",\"static/chunks/2243-1fa24cd0eda61a11.js\",\"3221\",\"static/chunks/3221-0b00cf93c8ad1a2c.js\",\"6055\",\"static/chunks/6055-1a000ce23b5bad74.js\",\"1768\",\"static/chunks/1768-8752de85dc8007f5.js\",\"1773\",\"static/chunks/1773-df3502ba5f559e20.js\",\"8974\",\"static/chunks/app/page-1f0aed2cd607933a.js\"],\"default\"]\n1e:T7ada,"])</script>
1<script>self.__next_f.push([1,"前回作った **みなと中央銀行ナレッジボット** の続編です。\n社内エンジニア向けの発表でいただいた質問がありました。\n\n\u003e 「これ、**ナレッジ量が増えていったらどうなるんですか?** 速度遅くなる? 最終的に全く回答が返ってこなくなる?」\n\n…確かに、ベンチで見せたのはたかが35ファイル / 16万字。中規模銀行のリアルなナレッジ群なら何千〜何万ファイルあってもおかしくない。\n\nということで今回は、**質的改良 + 量的検証** の二本立てで挑みました。\n\n- 質的改良: 前回ベンチで見えた弱点を直す(プロンプト改修 / チャンキング再設計 / HyDE 導入 / ナレッジ表現強化)\n- 量的検証: ナレッジを 30倍(28支店 × 35ファイル = **980ファイル / 約747万字**)に水増しして、検索品質と速度の劣化を実測\n- ついでに 2026年5月時点でホットな **Qwen3:8B / Gemma3:12B** を投入して世代交代の効果も測定\n\n結論から言うと:\n\n- **出典精度は 0.963 → 1.000(満点)** に到達。検索層の改良が綺麗に効いた。\n- **キーワードスコアは小幅向上**(qwen2.5:7b で +2.7pt、3b で +5pt)。\n- **Gemma3:12B が新王座** に。0.856 で Qwen2.5-7B を上回る。\n- **Qwen3:8B は「思考モード」の罠** にハマり、半数の質問で 180 秒タイムアウト。設定次第ではあるが、ベンチ用途では一筋縄ではいかない。\n- **HyDE 導入で全体的に応答時間が +5〜10秒** 程度伸びた。精度↔速度のトレードオフ案件。\n\nスケール検証編は別記事に分割します(本記事末尾で方法論だけ予告)。まずは質的改良 + 4モデルベンチの結果をどうぞ。\n\n---\n\n## 1. 前回のおさらいと、出てきた課題\n\n前回作ったのは**みなと中央銀行**(架空)の社内ナレッジボットでした。Mac メニューバー常駐の Tauri 2 アプリで、`Cmd+Shift+B` で呼び出すと数秒で社内規程を引いて答える、というやつです。\n\n完成形のシステムスタック:\n\n| レイヤ | 採用 |\n|--------|------|\n| LLM | Qwen2.5-7B-Instruct (Q4_K_M) on Ollama |\n| Embedding | multilingual-e5-base |\n| Vector DB | ChromaDB(cosine + MMR) |\n| API | FastAPI :7321 |\n| UI | Tauri 2 メニューバー常駐 |\n| ナレッジ | Markdown 35ファイル、約16万字 |\n\n前回のベンチ(30問・Qwen2.5-3B vs 7B)で次の弱点が見えていました。\n\n| # | 課題 | 例 |\n|---|------|------|\n| A | **7Bの過剰謙遜癖** | 「確認できません」と言ってから正解を続けて書く |\n| B | **3Bのハルシネーション** | Q08で「年収650万×12ヶ月=7800万円」と暴走計算 |\n| C | **検索の語彙ミスマッチ** | Q21「30日以内×1回」と文書側「2回まで救済」が埋め込み近接せず取りこぼし |\n| D | **ナレッジ表現の弱さ** | Q01「PScore満点何点?」が「0〜1000点」とだけ書かれていてヒットせず |\n| E | **採点方式の粗さ** | 部分一致のみで意味的同義を拾えない |\n\nA〜D に着手し、E は次回の宿題として残しました。\n\n---\n\n## 1.5. 改良の優先順位はどう決めたか\n\nベンチ結果を眺めて「直したい場所」をリストアップしたら12項目くらい出てきました。全部やると工数も時間もかかるので、**「インパクト × 軽さ」で優先順位を切る**ことに。\n\n| 優先 | 改良項目 | インパクト | 軽さ |\n|------|---------|----------|------|\n| 🔥 即やる | プロンプト改修(過剰謙遜・計算手順) | 中 | 軽 |\n| 🔥 即やる | MMR / Top-K チューニング | 中 | 軽 |\n| 🔥 即やる | ナレッジ表現強化(同義語併記) | 高(該当問題に直撃) | 軽 |\n| 🔥 即やる | チャンキング再設計(H3 / 小さく / 重複多く) | 中 | 中 |\n| ⚡ 次やる | **HyDE(クエリ拡張)** | 高(語彙ミスマッ"])</script>
1<script>self.__next_f.push([1,"チ根治) | 中 |\n| 🔬 次やる | Reranker 追加 | 高(スケール時) | 中 |\n| 🧪 後で | Self-RAG / 自己検証ループ | 中 | 重 |\n| 📊 後で | LLM-as-a-Judge による採点刷新 | 中(評価信頼性) | 中 |\n| 🌐 後で | 別Embeddingモデル比較(bge-m3など) | 不明 | 中 |\n| 📦 後で | PyInstaller でAPI同梱 .app化 | 配布性 | 重 |\n\n「即やる」グループだけで今回の改良パッケージは完成。\n\n---\n\n## 2. 今回の改良点ぜんぶ盛り\n\n### 改良1: システムプロンプトの全面書き換え(7条構成)\n\n過剰謙遜を**矛盾出力として禁止**、数値計算は**式抜出→代入→単位確認→照合**の4段強制にしました。\n\n```\n3. 【回答前の自己確認】質問に対する答えが参考情報の中に明確に含まれているかを最初に判定する。\n   - 含まれている場合: 前置きは一切付けず、即座に答えを書く。\n   - 含まれていない場合のみ: 「提供された情報からは確認できません」と明記し...\n   - 絶対禁止: 「確認できません」と書いたあとに正解を続けて書くこと。\n              これは矛盾した回答であり、ユーザーを混乱させる。\n\n5. 【数値計算の手順】\n   (a) 参考情報から計算式を抜き出す\n   (b) 質問の数値を式に代入する\n   (c) 単位を必ず確認する(年収は年額、月返済は月額)\n   (d) 計算結果を提示し、合格基準と照合する\n   絶対に「年収 × 12」のような誤った換算をしない。\n```\n\n### 改良2: チャンキング戦略の再設計\n\n| 観点 | Before | After |\n|------|--------|------|\n| 分割粒度 | H2 単位のみ | H2 + H3 両対応 |\n| チャンクサイズ | 512文字 | 384文字 |\n| オーバーラップ | 64文字 | 96文字 |\n| コンテキスト前置 | なし | 「【文書タイトル|セクション】」を各チャンク先頭に挿入 |\n\nチャンク数は 310 → **618** にほぼ倍増。検索粒度が細かくなり、節境界をまたぐ情報の取りこぼしも減った。\n\n### 改良3: HyDE(Hypothetical Document Embeddings)導入\n\nこれが今回の目玉。「**質問文の埋め込みベクトル**」と「**文書の埋め込みベクトル**」が離れてしまう問題(語彙ミスマッチ)に対し、**LLM に仮想文書を書かせてからクエリに連結する**手法です。\n\n```python\n# rag/hyde.py の中身(要約)\nHYDE_PROMPT = \"\"\"\nあなたは銀行の社内ナレッジ検索アシスタントです。\n以下の質問に対して、銀行の社内文書(就業規則、ローン審査基準、業務マニュアル等)の\n関連箇所が**どのように書かれているか**を、簡潔な日本語の擬似文書(200字程度)として書いてください。\n\nルール:\n- 実在の数値や条件は推測しない\n- 銀行ドキュメント風の硬めの文体で書く\n- 質問への回答ではなく、文書側の表現として書く\n\n質問: {query}\n\n擬似文書:\n\"\"\"\n\ndef expand_query_with_hyde(query):\n    # 軽量モデル (3B) で仮想文書を生成\n    hypothetical = ollama.chat(model=\"qwen2.5:3b-instruct\", ...)\n    return f\"{query}\\n\\n{hypothetical}\"\n```\n\n例えば「PScore の満点は?」という質問に対し、3B モデルが「PScore は個人ローン審査用のスコアリングモデルで、満点は◯◯点である」みたいな擬似文書を書く。これを元クエリに連結して埋め込み計算する。\n\n**狙い**: 短いクエリだけだとベクトル空間で文書から離れてしまうが、擬似文書を連結することで「文書側の語彙空間」に近づける。\n\n**コスト**: 3B モデルでの推論が1回挟まるので、検索が1問あたり **+3〜5秒** 遅くなる。\n\n### 改良4: ナレッジ表現の補強\n\n検索でハマった2件をピンポイントで救済しました。\n\n```diff\n- PScore は個人ローン審査用の自社開発スコアリングモデル。0〜1000点"])</script>
1<script>self.__next_f.push([1,"で算出し...\n+ PScore は個人ローン審査用の自社開発スコアリングモデル。**満点は1000点**\n+ (0〜1000点のスケール)で算出し...スコア上限・最高点は **1000点**。\n\n- 過去2年間に30日以内の遅延が2回以下: 要稟議だが救済可能\n+ **過去2年間に30日以内の遅延が2回以下**(つまり遅延が **0回・1回・2回** の場合):\n+ 要稟議だが救済可能。1回のみの場合も同様に救済対象とする。\n```\n\n「**満点**」「**1回も含む**」のような**質問者が使いそうな語**を文書側に追加。これだけで該当問題の検索ヒット率が変わるはず。\n\n### 🔍 コラム: 「有給制度について」と聞いた時、なぜ HR の文書が選ばれるのか?\n\nエンジニアからもう一つ質問が出ました。\n\n\u003e 「『有給制度について教えて』って聞いたら HR/01-work-regulations.md が返ってくる。**これって裏では「これは人事の質問だから HR を引け」っていう分類器ロジックが動いてるんですか?**」\n\n**答え: 分類器は存在しません**。\n\nこのシステムには「人事系→HR」「ローン系→RTL」のような明示的な振り分けロジックは1行も書いていない。代わりに動いているのは**ベクトル類似度による暗黙の選択**だけです。\n\n#### 流れ\n\n1. 「有給制度について教えて」を **multilingual-e5-base** に通す → **768個の数字(ベクトル)** に変換\n2. 事前に同じ方式でベクトル化済みの 618 個のチャンクすべてと **cosine類似度** を計算\n3. 類似度が高い順に上位30件取り出し、MMR で多様性確保しつつ上位8件選ぶ\n4. その8件を LLM のプロンプトに埋め込んで回答生成\n\n**「人事の質問」と判定しているのではなく、ベクトル空間で『有給制度について教えて』の近傍にいるチャンクが、たまたま HR/01 の節だっただけ**。\n\n#### 数値ベクトル化のイメージ\n\ne5 モデルは事前学習で「似た意味のものは近い座標、違う意味のものは遠い座標に置く」よう仕込まれているので、結果としてこういう空間ができている:\n\n```\n         休暇クラスター                     ローンクラスター\n            ★ 年休                          ★ 個人ローン\n       ★ 年次有給休暇                   ★ 住宅ローン審査\n            ★ 有給                          ★ DTI\n         ★ 産休制度\n```\n\n「有給制度について」のベクトルは左上の休暇クラスターに着地するので、近傍の HR チャンクが上位に来る。**判定ロジックを書かなくていい、というのが RAG の素晴らしいところ**。\n\n#### メリットと注意点\n\n| メリット | 注意点 |\n|---------|--------|\n| 分類ルール不要、運用が楽 | なぜ選ばれたか説明が難しい |\n| 同義語に強い(年休/有給/有休すべて拾う) | 語彙の遠いケースで取りこぼす(→今回 HyDE で補強) |\n| 新カテゴリ追加に再学習不要 | クエリが短いと埋め込みがブレやすい |\n| 多言語対応も自動(e5 は多言語事前学習済み) | 部署横断の質問は混在しがち |\n\nこのシステムが「**意味で引く検索**」と呼ばれる所以がここにあります。Google 検索が「年休」と入れて「有給」のページもヒットさせるのと同じ仕組み。\n\n---\n\n### 改良5: API/UI の機能追加\n\nベンチが回せるよう、`/chat` に `model` と `use_hyde` フラグを追加:\n\n```python\nclass ChatRequest(BaseModel):\n    query: str\n    history: List[ChatMessage] = []\n    use_hyde: bool = True\n    model: str | None = None  # ベンチ用にモデル切替可能\n```\n\n---\n\n## 3. 2026年5月時点の主要ローカルLLM\n\nベンチに投入する候補モデルを最新情報で再確認しました。M5 MacBook Air 24GB で動かせる現実的なサイズ帯(Q4_K_"])</script>
1<script>self.__next_f.push([1,"M量子化)で比較すると:\n\n| モデル | サイズ | 公開元 | 特徴 |\n|--------|------|------|------|\n| **Qwen2.5-7B-Instruct** | 5GB | Alibaba | 既存ベースライン |\n| **Qwen3-8B** | 5.5GB | Alibaba | 同クラス日本語トップとの評判(Apr 2025リリース) |\n| **Gemma 3 12B** | 8GB | Google | 128K context、140言語 |\n| Gemma 3 27B | 17GB | Google | M5 24GBにはやや重い |\n| Qwen3-14B | 9GB | Alibaba | Qwen2.5-32B相当の精度を半分のVRAMで |\n| Llama-3.1-Swallow-8B v0.2 | 5.5GB | 東工大/AIST | 日本語追加学習版 |\n\n今回は **Qwen3-8B** と **Gemma 3 12B** を投入することにしました。\n\n### なぜこの2つか\n\n選定の判断軸:\n\n1. **同クラスでサイズ感が違う**: 8B と 12B でクラス内の最強候補をそれぞれ拾う\n2. **公開元が違う**: Alibaba と Google で開発系統が異なる → 失敗モードが偏らない\n3. **特性が違う**: Qwen3 は推論強化系(Thinking モード)、Gemma3 は長コンテキスト系(128K)\n4. **M5 24GB で現実的に動く**: 14B / 27B は試したかったが Metal Shared Memory の余裕的に断念\n5. **Swallow 系(Llama 日本語追加学習版)も候補だったが、Ollama ライブラリでの取り回しが煩雑だったため今回は見送り**(次回再評価予定)\n\n「**新モデル投入の効果を見たいなら、開発系統が違うものを並べた方が知見が広い**」というのが定石。Qwen3 と Qwen2.5 は系統が同じなので Qwen2.5 → Qwen3 の差は「世代差」、Qwen2.5 → Gemma3 の差は「会社差・系統差」として読める。\n\n---\n\n## 4. 改良後の30問ベンチマーク結果\n\n4モデル × 30問(HyDE 有効)で実施。前回(2026-04-28)と同じ問題セットなので Before/After 比較ができます。\n\n### 総合スコア\n\n| モデル | キーワード | 出典精度 | 平均応答秒 |\n|--------|-----------|----------|-----------|\n| qwen2.5:3b-instruct | **0.675**(前回 0.642) | **1.000**(前回 0.963) | 14.5s(前回 8.8s) |\n| qwen2.5:7b-instruct | **0.844**(前回 0.822) | **1.000** | 27.1s(前回 21.3s) |\n| **gemma3:12b(新)** | **0.856** ★トップ | 1.000 | 68.5s |\n| qwen3:8b(新) | 0.250 ※ | 0.296 ※ | 147.6s ※ |\n\n※ qwen3:8b は途中から 180秒タイムアウトを連発したため、数値は単純比較不可。詳細後述。\n\n### 主な観察\n\n**🎯 出典精度が全モデル 1.000 達成**\n\n前回 0.963 → 今回 **1.000(パーフェクト)**。チャンキング再設計とHyDE による検索層の改良が綺麗に効いたことが分かります。「**正しい文書は引けている、あとは LLM が正しく抽出するかどうかだけの勝負**」という、RAG として理想的な状態に到達しました。\n\n**📈 キーワードスコアの伸び**\n\n| モデル | 前回 | 今回 | 差分 |\n|--------|------|------|------|\n| qwen2.5:3b | 0.642 | 0.675 | **+0.033** |\n| qwen2.5:7b | 0.822 | 0.844 | **+0.022** |\n\n地味に見えるが、伸びはピンポイント救済(Q01, Q21)と新規問題への適応の合算。ナレッジ追記とプロンプト改修が想定通り効いている。\n\n**⏱ 応答時間の悪化(HyDEの代償)**\n\n| モデル | 前回 | 今回 | 増分 |\n|--------|------|------|------|\n| qwen2.5:3b | 8.8s | 14.5s | **+5.7s** |\n| qwen2.5:7b | 21.3s | 27.1s | **+5.8s** |\n\nHyDE で 3B モデルによる仮想文書生成が挟まるため、ほぼ同等の +5〜6秒。これは想定通りで、**精度↔速度のトレードオフ**。仮想文書を作らずに HyDE をオフにすれば前回と同じ速度に戻せる。\n\n---\n\n## 5. ピンポイント救済の効果\n\n改良の効果が一番分かるのが、前回失敗していた問題が今回どうなったかです。\n\n### Q01「PScoreの満点は何点ですか?」\n\n期待キーワード: `1000`\n\n| モデル | 前回 | 今回 |\n|--------|------|------|\n| qwen2.5:3b | **0.0** | **1.0** ✓ |\n| qwen2.5:7b | **0.0** | **1.0** ✓ |\n| gem"])</script>
1<script>self.__next_f.push([1,"ma3:12b | - | 1.0 ✓ |\n\n前回両モデルが「確認できません」を返してきたのが、ナレッジに**「満点は1000点」と明記**したことで一気に救済。\n\n\u003e qwen2.5:7b の回答(今回):\n\u003e 個人ローン審査用のPScoreは**満点1000点**です。[出典: RTL/05-loan-screening-detail.md]\n\n### Q05「法人融資のCScore合格ライン、優良先は何点以上?」 ※残念な後退\n\n期待キーワード: `120`\n\n| モデル | 前回 | 今回 |\n|--------|------|------|\n| qwen2.5:7b | 1.0(ただし「確認できません」→「120点以上」の矛盾出力) | **0.0** ❌ |\n\nこれは**プロンプト改修の副作用**。前回は「確認できません + 120点以上」と矛盾出力していたものを、今回プロンプトで「**書いたあとに否定するな**」と明示的に禁じたため、7B は安全側に倒して「**確認できません**」だけで止めてしまった。\n\n\u003e 提供された情報からは確認できないため、直属の上司または担当部署にご相談ください。\n\u003e 関連部署は法人営業部 業種別チームです(内線3201〜3208)。\n\n**学び**: プロンプトで「矛盾出力禁止」を強くすると、自信のない正答すら出さなくなる。実は前回の「矛盾出力」のほうが、ユーザー体験的にはマシだった可能性すらある。**LLMの自信度の校正は深い問題**で、シンプルなプロンプトでは越えられない壁を感じた。\n\n3B/qwen3:8b/gemma3:12b は同じ問題に 1.0 で正答。**7B だけがプロンプトに過剰反応する**のは興味深い現象。\n\n### Q21「過去2年で30日以内の遅延が1回あったお客様への対応は?」\n\n期待キーワード: `要稟議, 救済, 30日以内`\n\n| モデル | 前回 | 今回 |\n|--------|------|------|\n| qwen2.5:3b | 0.33 | **0.67** |\n| qwen2.5:7b | **0.0** | **1.0** ✓ |\n| gemma3:12b | - | 1.0 ✓ |\n\nナレッジに「**0回・1回・2回 いずれも救済**」と書き換えたのが効いた典型例。\n\n---\n\n## 6. Gemma3:12B が王座を取った\n\n総合スコア **0.856** で新王座。Qwen2.5-7B を超えた。\n\n### 強み\n\n- **lookup, conditional, exception, format, industry, process, selfcheck で 1.0 多数**。とにかく「ナレッジに書いてあることを丁寧に拾う」のが上手。\n- **構造化された回答が綺麗**: 箇条書きや見出しを自然に使い、見やすい。\n\n例(Q11 産休中の住宅ローン申込):\n\n\u003e 産休中のお客様が住宅ローンを申込まれた場合の必要書類と判定方法について、以下の通りです。\n\u003e\n\u003e **必要書類:**\n\u003e - 直近1年分の源泉徴収票(産休前のフル稼働年)\n\u003e - 復職証明書(勤務先発行、復職時期と職位明記)\n\u003e - 夫婦合算所得申告書\n\u003e\n\u003e **判定方法:**\n\u003e 夫婦合算所得を「世帯収入」とみなし、復職後の単独所得でDTIを再計算...\n\nUI でそのまま表示して読みやすい体裁。\n\n### 弱み\n\n- **計算問題でややランダム**: Q08(DTI と PScore の複合計算)で年間返済額を `12.7 × 12 = 152.4万円` ではなく `(12.7+2)×12 = 172.4万円` と書いて DTI 26.5% を出してしまった(正解は 27.1%)。式の組み立てはできるが**数値間違いをすることがある**。\n- **応答時間が長い**: 平均 **68.5秒**。Qwen2.5-7B の 2.5倍。M5 24GB で 12B は Metal シェアード メモリを食うため、推論速度がやや遅くなる。\n- **ICRをLCRと混同**: Q23 で「ICRとは流動性カバレッジ比率の略称」と誤定義(正解はインタレスト・カバレッジ・レシオ)。Gemma の学習データに金融固有用語の偏りがあるかも。\n\n### 総合所感\n\n**精度では Qwen2.5-7B を上回るが、速度で劣る**。実運用なら「**通常はQwen2.5-7Bでサクサク、複雑な質問だけ Gemma3:12B で精緻に**」のような切替アーキも考えられる。\n\n---\n\n## 7. Qwen3:8B の「思考モード」沼\n\nQwe"])</script>
1<script>self.__next_f.push([1,"n3 系は **デフォルトで「Thinking」モードが有効** で、回答前に `\u003cthink\u003e...\u003c/think\u003e` ブロックで大量の推論を吐き出します。これがベンチでハマった原因。\n\n### 何が起きたか\n\n- **Q01〜Q08 までは正常応答**(しかも正答率100%、43〜74秒)\n  - PScore 満点 → 1000点 ✓\n  - DTI 計算 → 26.4% ✓\n  - 複合計算 Q08 → 27.1% / 930点 / 承認 すべて正答 ✓\n- **Q09 以降、180秒のタイムアウトを 22問連続で発生**\n- 結果としてキーワードスコア 0.25、出典精度 0.296 という見かけ上「壊滅」スコアに\n\nこれは**モデルが暴走した**わけではなく、Thinking モードで推論ステップを長く取りすぎてベンチクライアントのタイムアウト(180秒)に間に合わなかったというのが真相と思われる。Ollama 経由の Qwen3 では、**`/no_think` 指示でThinkingモードを切る**か、`num_predict` を絞るなどの設定が必要。\n\n### 答えられた問題では強い\n\nQ08 の複合計算で:\n\n\u003e DTIは27.1%、PScoreは930点と評価されます。\n\u003e DTI計算: (12.7万 + 2万)×12 ÷ 650万 = 27.1%(上限35%内)\n\u003e PScore計算: 年収170 + 勤続130 + 雇用100 + 既存債務230 + 信用300 = **930点**\n\n…と、**Qwen2.5-7B と同水準の精密回答** を返してきた。能力は十分にあるが、**インフラ側の設定で殺している**状況。\n\n### 教訓\n\n\u003e **新モデルを本番投入する前に、Thinking モードのような「デフォルト挙動」を必ず確認すること**。Qwen3 / DeepSeek-R1 / OpenAI o1 系は推論を長く取るのがデフォルト。RAG のように「短い質問に1〜数秒で答える」用途では、Thinking を切ったほうが体感が良くなる場合が多い。\n\n次回 Qwen3 を改めて評価する際は、API 側で `model_params` を渡せるようにして `/no_think` フラグや `enable_thinking=false` を明示する必要がある。\n\n---\n\n## 8. カテゴリ別の比較\n\n| カテゴリ | qwen2.5:3b | qwen2.5:7b | gemma3:12b | 備考 |\n|---------|-----------|-----------|-----------|------|\n| 単純参照 (lookup) | 1.000 | 0.800 | 1.000 | 7Bが過剰謙遜で1問落とした |\n| 計算 (calculation) | 0.444 | 0.667 | 0.611 | DTIなど数値演算は7Bが堅実 |\n| 条件分岐 (conditional) | 0.584 | **0.917** | 0.833 | 7Bが最強 |\n| 例外処理 (exception) | 0.334 | **1.000** | 1.000 | ナレッジ追記で同点に |\n| 用語説明 (explanation) | 1.000 | 1.000 | 0.834 | gemmaがICR誤定義 |\n| 形式整理 (format) | 0.000 | 1.000 | 1.000 | 3Bは構造化問題に弱い |\n| 業種別 (industry) | 0.667 | 1.000 | 1.000 | |\n| 複合推論 (multi_hop) | **0.834** | 0.541 | 0.500 | 3Bが意外な大健闘 |\n| 範囲外 (out_of_scope) | 0.611 | 0.611 | 0.611 | 全モデル同水準で適切に「分かりません」 |\n| 業務フロー (process) | 0.472 | 0.917 | 1.000 | gemmaが構造化で勝った |\n| 自己査定 (selfcheck) | 1.000 | 1.000 | 1.000 | 全員パーフェクト |\n\n### 注目ポイント\n\n- **計算系は7Bが堅実**: プロンプトの計算手順
1強制が効いている。\n- **例外処理が大幅改善**: 0.167(前回7B)→ 1.000(今回7B / gemma3)。**ナレッジ表現の改善 + HyDE** の合わせ技。\n- **複合推論で3Bが7Bを上回る逆転現象**: Q28 派遣社員問題で3Bが「派遣加点70点、必要年収859万」と具体的に答え 0.67、対して7Bは0.33。**3Bは時に大胆な推測を当てる**。\n- **out_of_scope は全モデル横並び**: 「分からない時は分かりません + 上司相談」のシステムプロンプトはモデル規模に関わらず守られる。\n\n---\n\n## 9. 結論と次のステップ\n\n### 改良のスコア\n\n| 項目 | 結果 |\n|------|------|\n| 検索層の改良(HyDE + チャンキング + ナレッジ追記) | ✅ **出典精度 100% 達成** |\n| プロンプト改修(過剰謙遜抑止 + 計算手順) | ◯ 効いたが副作用あり(Q05後退) |\n| 新モデル投"])</script>
1<script>self.__next_f.push([1,"入(Gemma3:12B) | ✅ **新王座、+1.4pt 改善** |\n| 新モデル投入(Qwen3:8B) | ❌ Thinking モード対策必要 |\n| 応答時間 | 🔻 HyDEで +5〜6秒 |\n\n### 次にやること\n\n1. **Qwen3:8B の Thinking モード対策**: `/no_think` または API 側パラメータでオフにして再ベンチ\n2. **HyDE の ON/OFF 比較ベンチ**: 改良効果のうち HyDE 単独の貢献度を切り分け\n3. **採点方式の刷新**: 部分一致 → **LLM-as-a-Judge** で意味的同義も拾う\n4. **スケールテスト本番**: 後述する 980ファイル / 747万字データセットで実測\n5. **アンサンブル戦略**: 「通常は Qwen2.5-7B、複雑な質問だけ Gemma3:12B」のような切替アーキ\n\n---\n\n## 10. エンジニアからの宿題: スケールしたら壊れるのでは?(次回予告)\n\n冒頭で触れたエンジニアからの問い「ナレッジが増えたらどうなる?」への正面回答編です。\n\n### 理論的な見立て\n\nナレッジ量を **N倍** に増やした時、各レイヤがどう振る舞うか:\n\n| レイヤ | スケーリング | 100倍時の見込み |\n|--------|------------|---------------|\n| ingest(初回取込) | O(N) 線形 | 100倍時間(1回きりなので許容) |\n| ベクトルDBサイズ | O(N) 線形 | 31000チャンクで約95MB(問題なし) |\n| ベクトル検索 | **O(log N) 対数**(HNSW) | 100倍でも検索は2倍程度しか遅くならない |\n| LLM コンテキスト | **O(1) 一定** | top_k=8 で固定、ナレッジ量と無関係 |\n| LLM 生成時間 | **O(1) 一定** | 知識量と無関係に同じ秒数 |\n\n**RAG の美しいところは、LLM に渡す情報量が常に一定なこと**。つまり「ナレッジが増えてLLMが詰まる」状況は構造的に起きない。応答時間のボトルネックは常に LLM 生成(10〜60秒)で、検索の数十ミリ秒は無視できる規模。\n\n「**全く回答が返ってこない**」も基本的に起きません。最悪「確認できません、上司にご相談ください」が返るだけ。むしろ警戒すべきは「**間違った答えを自信を持って返すハルシネーション**」のほうで、こちらは出典提示で抑止しています。\n\n### 検索精度は劣化する\n\nただし、速度は耐えても**精度は劣化します**。ナレッジが増えると:\n\n- 似た内容のチャンクが100件出てくる\n- 部署違いの似た文書が混在する\n- LLM の参照集中で関係ある1件が埋もれる\n\n対策の定石は **Reranker**(再ランキングモデル)の後段追加。Top-30 を取得 → Reranker で真の Top-5 に絞る、というアーキ変更が 1万ファイル超で必要になると言われています。\n\n### 実証データセットを用意した\n\nということで「**理屈はそうだが本当か**」を実測するため、現状35ファイルのナレッジを30倍に水増しした合成データセットを用意しました。\n\n**設計: 28支店 × 35基底ファイル = 980 ファイル**\n\n- **支店構成**: 東京10 / 神奈川6 / 千葉5 / 埼玉7(関東地盤らしい配分)\n- **各支店ごとに LLM で生成したローカルプロファイル**: 支店長名(架空)、エリア特性、内線番号体系、3〜5個のローカルルール\n- **基底ファイルからの差異化要素**:\n  - タイトルに支店名を付与(「みなと中央銀行 渋谷支店 預金商品ガイド」)\n  - 一部の固有名詞・内線番号を支店別に置換\n  - 末尾に「**支店ローカル運用**」セクションを挿入\n  - 「よくある質問」に支店固有Q\u0026Aを1〜2問追加\n\nサンプル(渋谷支店):\n\n```\n## 渋谷支店のローカル運用\n\n本セクションは渋谷支店(支店長:藤村 直人)固有の運用ルールをまとめたものです。\nエリア特性:若年層顧客が多く、SNS関連のトラブル・フィッシング被害相談が突出して多い。\n\n### 主なローカルルール\n1. 若年"])</script>
1<script>self.__next_f.push([1,"層顧客の新規口座開設時は、SNS経由の特殊詐欺・パパ活送金トラブル防止のため、\n   初回入金前に「資金移動目的確認シート(渋谷様式SBY-01)」を必ず取得する。\n2. 20代単身者の定期預金100万円超は、ヒアリングに加え役席承認を要する。\n...\n```\n\n### この設計の狙い\n\n検索の困難さは「文書数」より「**似ているがちょっと違う文書の密度**」に依存します。\nランダムに別ジャンルの文書を水増ししても本番環境を再現できない。\nだから本番に近い「**支店別運用差**」という分かりやすい同質性のデータで水増しすることで、**「鈴木店長は誰?」「渋谷支店のローカルルールは?」のような新質問の正解性**と、**「年休の申請方法は?」のような既存質問が30倍ノイズの中で正解を引けるか**の両方が測れます。\n\n**実測結果は次回記事に詳述します**。理論通り検索は1秒未満で返るのか、精度はどれくらい劣化するのか、Reranker は本当に必要になるのか、本気で測る予定。\n\n### 実用的な推奨スタック\n\n**2026年5月時点で「銀行ナレッジボット類型」を本気で組むなら:**\n\n- **検索層**: multilingual-e5-base + ChromaDB + MMR + **HyDE 必須**\n- **生成層**: \n  - 速度優先 → **Qwen2.5-7B**(速くて十分賢い)\n  - 精度優先 → **Gemma3:12B**(綺麗だが遅い)\n  - ストレッチ → **Qwen3-14B**(未試)\n- **ナレッジ表現**: 質問者が使いそうな表現を**ナレッジ側に同義語として併記**\n- **プロンプト**: 過剰謙遜対策は入れるが、安全側に倒しすぎない加減が要\n\n---\n\n## 用語ミニ集\n\n- **HyDE (Hypothetical Document Embeddings)**: クエリを LLM に渡し「もし答えがあるならどう書かれているか」の仮想文書を生成、それを検索クエリに連結する手法。語彙ミスマッチに強い。Gao et al. 2022。\n- **Thinking モード**: Qwen3 / DeepSeek-R1 系で導入された、回答前に推論ステップを長く取る挙動。`\u003cthink\u003e...\u003c/think\u003e` ブロックを生成。RAG のような短答用途では切る方が体感良いことが多い。\n- **チャンキング戦略**: 文書をどの粒度でベクトル化単位に分割するか。今回は H2 → H2+H3、512文字 → 384文字、overlap 64→96 に変更。\n\n---\n\nここまでの改良で、**RAG として「正しい文書を引く」部分はほぼ完成形**になりました。次のフロンティアは「**LLM 自身が出典を正しく扱う能力**」と「**スケールしたときの劣化耐性**」。続編に乞うご期待。1f:T49a3,前回・前々回と作ってきた **みなと中央銀行ナレッジボット**(架空銀行を題材にしたローカルLLM × RAGチャットボット)の続編です。今回は **「スケールしたらどうなる?」** という、エンジニアからの素朴な問いに **実測で正面回答** する回。\n\n結論を先に:\n\n| 仮説 | 結果 |\n|------|------|\n| ナレッジが増えると速度が遅くなる | ❌ **耐える**(30倍規模でも体感同じ) |\n| 全く回答が返ってこなくなる | ❌ **起きない**(30問全問エラーなし完答) |\n| 精度が落ちる | ✅ **起きる、ただしモデル依存** |\n\nローカルLLMのアーキテクチャ理解にとって、すごく示唆深い結果になりました。\n\n---\n\n## 1. 発端: エンジニアからの指摘\n\n前回の社内お披露目で、ローカルLLMナレッジボットを紹介したところ、エンジニアから当然と言えば当然の問いが出ました。\n\n\u003e 「これ、**ナレッジ量が増えていったらどうなるんですか?** 速度遅くなる? 最終的に全く回答が返ってこなくなる?」\n\n確かに、ベンチで見せていたのはたかが35ファイル / 16万字。\n中規模銀行のリアルなナレッジ群なら数千"])</script>
1<script>self.__next_f.push([1,"〜数万ファイルあってもおかしくない。\n**「スケール時に壊れる前提のシステム」を満足げに発表していいのか**?という当然の指摘でした。\n\n理論的な見立ては明確に出せます。\n\n| レイヤ | スケーリング特性 | 100倍時の見込み |\n|--------|--------------|---------------|\n| ingest(初回取込) | O(N) 線形 | 100倍時間(1回きりなので許容) |\n| ベクトルDBサイズ | O(N) 線形 | 31000チャンクで約95MB |\n| ベクトル検索 | **O(log N) 対数**(HNSW) | 100倍でも検索は2倍程度しか遅くならない |\n| LLM コンテキスト | **O(1) 一定** | top_k=8 で固定、ナレッジ量と無関係 |\n| LLM 生成時間 | **O(1) 一定** | 知識量と無関係に同じ秒数 |\n\nRAG の美しいところは「**LLM に渡す情報量が常に一定**」なこと。つまり構造的に「ナレッジが増えてLLMが詰まる」状況は起きない。\n\n…とはいえ、これは机上の話。**本当にそうなのか実測しないと記事として弱い**。ということで、ナレッジ量を30倍に水増しした合成データセットで本気のベンチを回しました。\n\n---\n\n## 2. 前回からの改良差分\n\nスケールテストの前に、前回ベンチ(2026-04-28)で見えた弱点を直しています。第2弾記事の重複になりますが、要点だけ:\n\n| # | 改良項目 | 中身 |\n|---|---------|------|\n| 1 | **システムプロンプト改修** | 「確認できませんと前置きしてから答える」過剰謙遜癖を禁止。数値計算は **式抽出→代入→単位確認→照合** の4段強制 |\n| 2 | **チャンキング再設計** | H2→**H2+H3** 階層化、サイズ512→**384**文字、overlap 64→**96**、各チャンク先頭に「【文書タイトル|セクション】」を前置 |\n| 3 | **HyDE 導入** | クエリを LLM に渡して「もし答えがあるならどう書かれているか」の仮想文書を生成、それを検索クエリに連結。語彙ミスマッチ対策 |\n| 4 | **ナレッジ表現の補強** | 「満点1000点」「30日以内×1回も救済」のように、質問者が使いそうな表現を文書側に同義語として併記 |\n| 5 | **モデル追加** | Qwen2.5-7B/3B に加えて **Qwen3-8B / Gemma3-12B** を投入 |\n\n通常ナレッジ (35ファイル / 16万字) でのフェーズAベンチの結果は前回記事の通り:\n\n- **出典精度 0.963 → 1.000**(パーフェクト達成)\n- キーワードスコア qwen2.5:7b 0.822 → 0.844、3b 0.642 → 0.675\n- **Gemma3:12b が新王座**(0.856)\n\nそして今回、**この強化されたパイプラインを30倍のナレッジで殴ってみる**のがフェーズB。\n\n---\n\n## 3. テストデータセットの設計\n\n「**30倍のナレッジ**」をどう作るかは設計判断の最初の山。今回採用したのは「**28支店のローカルルール展開**」というアプローチです。\n\n### 28支店 × 35基底ファイル = 980ファイル\n\n関東地盤の銀行を想定して、東京10 / 神奈川6 / 千葉5 / 埼玉7 の架空28支店を設計:\n\n```markdown\n東京: 渋谷, 新宿, 池袋, 品川, 東京駅前, 銀座, 上野, 新橋, 町田, 立川\n神奈川: 横浜, 川崎, 藤沢, 鎌倉, 厚木, 横須賀\n千葉: 千葉, 船橋, 柏, 市川, 松戸\n埼玉: 大宮, 川越, 所沢, 浦和, 川口, 越谷, 春日部\n\n```\n\n各支店ごとに **支店長名(架空)/ エリア特性 / 内線番号体系 / 3〜5個のローカルルール** を LLM に生成させ、基底35ファイルすべてを「支店版」に複製。\n\n例: 渋谷支店の `預金商品ガイド` には、以下のセクションが追加されます。\n\n```markdown\n## 渋谷支店のローカル運用\n\n本セクションは渋谷支店(支店長:藤村 直人)固有の運用ルールをまとめたものです。\nエリア特性:若年層顧客が多く、SNS関連のトラブル・フィッシング被害相談が突出して多い。\n\n### 主な"])</script>
1<script>self.__next_f.push([1,"ローカルルール\n1. 若年層顧客の新規口座開設時は、SNS経由の特殊詐欺・パパ活送金トラブル防止のため、\n   初回入金前に「資金移動目的確認シート(渋谷様式SBY-01)」を必ず取得する。\n2. 20代単身者の定期預金100万円超は、ヒアリングに加え役席承認を要する。\n...\n```\n\n### この設計の狙い\n\n検索の困難さは「文書数」より「**似ているがちょっと違う文書の密度**」に依存します。\n完全にランダムな別ジャンル文書を水増ししても本番環境は再現できない。\nそこで「**支店別運用差**」という分かりやすい同質性のデータで水増しすることで:\n\n1. 既存質問「年休の申請方法は?」が **30倍ノイズの中で正解を引けるか**\n2. 検索が**支店違いの同質ノイズ**にどれくらい引きずられるか\n3. LLM が「**みなと中央銀行 渋谷支店版**」「**みなと中央銀行 横浜支店版**」と無数の似た出典を見せられた時、どう振る舞うか\n\n…が同時に測れます。\n\n### 規模感\n\n| 指標 | 通常 | スケール | 倍率 |\n|------|------|--------|------|\n| Markdown ファイル数 | 35 | **980** | 28x |\n| 総文字数 | 約16万字 | **約747万字** | 47x |\n| Chroma チャンク数 | 618 | **20,244** | 33x |\n| Chroma DB サイズ | 数MB | 数百MB | - |\n| ingest 所要時間 | 30秒 | **3分強** | 6x |\n\ningest 時間は線形より緩やか(バッチ埋め込みの効率が効いた)、その他は概ね線形。\n\n---\n\n## 4. テスト方法\n\n前回と同じ30問のベンチマークセットを、**通常ナレッジ** と **スケールナレッジ** の両方で実行して直接比較しました。\n\n- **使用モデル**: qwen2.5:7b-instruct と gemma3:12b(前回の上位2つに絞った)\n- **質問数**: 30問(lookup / calculation / conditional / industry / selfcheck / process / exception / explanation / out_of_scope / multi_hop / format の11カテゴリ)\n- **採点方式**: 期待キーワードの部分一致率(kw_score)と期待出典が引かれたか(src_score)の2軸\n- **HyDE 有効**\n\n---\n\n## 5. 結果: 速度は耐える、精度はモデル依存で劣化する\n\n### 総合スコア\n\n通常 (618 chunks) vs スケール (20,244 chunks) の対比:\n\n| モデル | 通常 KW | スケール KW | 劣化 | 通常 src | スケール src | 通常時間 | スケール時間 |\n|--------|--------|------------|------|---------|------------|----------|------------|\n| qwen2.5:7b | 0.844 | **0.819** | **-3%** | 1.000 | 0.963 | 27.1s | **27.2s** |\n| gemma3:12b | 0.856 | **0.669** | **-22%** | 1.000 | 0.889 | 68.5s | **54.3s** |\n\n### 観察1: 速度はほぼ無感\n\n**qwen2.5:7b の平均応答時間は +0.1 秒**。30倍規模化で実質的な速度劣化ゼロ。\n**gemma3:12b に至っては -14 秒**(むしろ速くなった)。これは検索段で「広く浅く」候補を集めて MMR で散らすため、LLM への入力長がやや短くなった可能性が高い。\n\n理論的見立て通り、**検索層(HNSWベクトル検索)は対数時間でスケールする**ことが実測で裏付けられました。\n\n### 観察2: 「全く回答が返ってこない」は起きない\n\n**30問 × 2モデル = 60リクエスト すべてエラーなし**。タイムアウトもゼロ。\n最悪の場合でも「提供された情報からは確認できません」が返ってくる安全装置がプロンプトに入っているため、構造的に「無応答」は起きない。\n\n### 観察3: 精度はモデル次第で大きく違う\n\nこれが今回最大の発見。\n\n- **qwen2.5:7b: -3% の軽微な劣化** — ほぼ無影響。多くの質問で通常時と同等のスコア維持\n- **gemma3:12b: -22% の大幅劣化** — 通常時に新王座だったモデルが、スケール時には qwen2.5:7b に逆転される\n\n**通常時のチャンピオンが、スケール時にはランナーに転落する*
1*という現象が観察されました"])</script>
1<script>self.__next_f.push([1,"。\n\n---\n\n## 6. 個別の興味深いシーン\n\n### Q01 「PScoreの満点は?」 → 規模拡大が冗長性で救済\n\n両モデルとも 1.0 で即答(「PScoreの満点は1000点です」)。\n**同じ内容が28支店分書いてある**ため、検索が外れる確率が逆に下がる。**規模拡大が「冗長性による救済」として効いた**典型例。\n\n出典は **8件すべて異なる支店の同じファイル**:\n\n```markdown\n[出典: STM_URA/RTL/05-loan-screening-detail.md,\n       TKY_UEN/RTL/05-loan-screening-detail.md,\n       STM_KSK/RTL/05-loan-screening-detail.md,\n       CHB_MTD/RTL/05-loan-screening-detail.md, ...]\n```\n\n検索結果は「支店違いの同じ文書」に独占されてしまうが、本文内容はすべて同じだから LLM は正答できる。\n\n### Q02 「住宅ローンの合格スコアラインは?」 → qwen2.5:7b が過剰謙遜に逆戻り\n\n期待: `600`\n\n- qwen2.5:7b: 「**提供された情報からは確認できません**」(0.0)\n- gemma3:12b: 「住宅ローンの合格スコアラインは600点以上です」(1.0)\n\n通常時の qwen2.5:7b は正答していたのに、スケール時には**ノイズに引っ張られて自信を失った**模様。プロンプトで「確認できない時はそう書け」と強く制約しすぎた副作用が、ノイズ密度の高い状況で顕在化。\n\n### Q09 「PScore合格ライン±5%の承認者は?」 → Gemma3 が「支店ごとに違う」と過剰解釈\n\n期待: `営業店長, 本部審査部副部長, 合議`\n\n- qwen2.5:7b: 「営業店長と本部審査部副部長の合議で承認可」(1.0)✓\n- gemma3:12b: 「**春日部支店・藤沢支店の場合:合議、その他の支店:...**」(1.0 だが情報過剰)\n\n実は全支店同じルール(28支店すべてに同じ内容のファイル)。\nところが gemma3:12b は**支店ごとに違うルールがあると過剰に推論**して、「春日部支店と藤沢支店だけ言及」という珍妙な構造の回答を返した。\nスコア上は加点だが、運用としては微妙。\n\n### Q14 「建設業の与信判断で注意すべき項目を3つ」 → Gemma3 が別軸の3項目を選んだ\n\n期待: `手形`, `工事代金`, `未成工事`\n\n- qwen2.5:7b: 「工事代金回収遅延」「未成工事支出金」「手形貸付」(1.0)✓\n- gemma3:12b: 「**完工高**」「未成工事支出金の妥当性」「**公共工事比率**」(0.33)\n\nナレッジには「手形・工事代金・未成工事」が中核として書かれているが、gemma3 は**ノイズの多い中で別の3項目をピックアップ**してしまった。\n「3つ挙げて」と聞かれた時、複数の支店版から異なる項目を組み合わせてしまった可能性が高い。\n\n### Q23, Q24 explanation カテゴリ全滅 → Gemma3 の最大の弱点\n\n| 質問 | 期待KW | gemma3:12b |\n|------|------|-----------|\n| ICRとは何ですか? | インタレスト, 営業利益, 支払利息 | 0.0 |\n| 経営者保証を不要とする条件は? | 財産分離, 自己資本, 適時開示 | 0.0 |\n\n通常時は両方とも 1.0 だった用語説明系が、スケール時には**両方0点**。\ngemma3:12b は「ノイズが多い時に文書から正確に引用する」のが苦手と推測される。\n\n---\n\n## 7. 考察: なぜ gemma3:12b はスケールで弱体化したのか\n\n### 仮説1: 長コンテキスト対応モデルの皮肉な弱点\n\nGemma3 は 128K トークンの長コンテキスト対応が売り。これは大量のノイズを「飲み込めてしまう」ことを意味します。\nqwen2.5:7b(コンテキスト32K)は8件のチャンクから素直に答えを抽出する傾向だが、**gemma3 は8件の異なる支店版を「異なる情報源」と認識し、「最大公約数」「総合的な見解」を作ろうとする**。\nその結果として、Q14 のように**期待と違う情報のミックス**を返したり、Q09 のように**支店ごとに条件分岐**したり"])</script>
1<script>self.__next_f.push([1,"する。\n\n### 仮説2: LLM の「自信の校正」の壁\n\nqwen2.5:7b の Q02 「確認できません」事件は、別の問題を示唆します。\n**プロンプトで「自信がない時は確認できませんと書け」と強く制約すると、ノイズ密度が高い時に「自信を失いやすくなる」**。\nこれはモデル規模よりプロンプトエンジニアリングの問題で、対策はあります(後述)。\n\n### 仮説3: 検索結果のクラスタリング過多\n\n20,244 チャンクの中から上位8件を選ぶ時、**同じファイルの28支店版が上位を独占**します。\nMMR で多様性を確保しても、「**多様性を確保した結果として支店違いの似たチャンクが並ぶ**」という奇妙な状況が生まれる。\n本来欲しいのは「**支店違いではなく、観点違いの多様性**」。\n\n---\n\n## 8. 対策の方向性(次の改良候補)\n\nスケールテストで露呈した弱点を踏まえて、次に試したいこと:\n\n### A. メタデータフィルタの自動付与\n\n「これは個人ローンの質問だから RTL に絞る」「これは人事の質問だから HR に絞る」のような**部署絞り込みを自動で**かける。\nクエリを軽量 LLM に投げて部署を予測し、ChromaDB の `where` フィルタに渡す。\n\n```python\n# 例\npredicted_dept = classify_with_llm(query)  # \"RTL\"\nresults = collection.query(\n    query_embeddings=[vec],\n    n_results=30,\n    where={\"department\": predicted_dept}\n)\n```\n\nこれだけで「支店違いの同質ノイズが上位独占」問題は緩和される。\n\n### B. Reranker の後段追加\n\n検索の top-30 を取得 → **Reranker(jina-reranker-v2 / bge-reranker-v2-m3)でクエリと意味的に最も合うものを top-5 に絞る**。\nこれは「**スケール時の精度劣化の特効薬**」と言われている王道。M2 24GB なら Reranker を Ollama で動かせる範囲。\n\n### C. ハイブリッド検索(BM25 + ベクトル)\n\n「手形」「PScore」のような**固有語の完全一致**を BM25 で拾い、ベクトル検索と統合(RRF: Reciprocal Rank Fusion)。\nQ14 のような「期待キーワードが特定の用語の時」に強くなる。\n\n### D. プロンプト改修\n\n「確認できません」の閾値を緩める。`「ナレッジ内に明確にある場合は即答」だけでなく `「8件中過半数が同じ情報を支持していれば確信して答えて良い」` を追加。\nこれは qwen2.5:7b の Q02 過剰謙遜事件を救済する狙い。\n\n### E. モデル選定の見直し\n\n**「通常時の最強」と「スケール時の最強」が違う**ことが分かったので、用途に応じて切り替える。\n- ナレッジが小さく確実性重視 → **Gemma3:12b**\n- ナレッジが大きく安定性重視 → **qwen2.5:7b**\n\nまたは、両方を並列で叩いて回答を比較する「アンサンブル」も選択肢。\n\n---\n\n## 9. まとめ — エンジニア質問への回答\n\n\u003e 「ナレッジが増えていったらどうなる?速度遅くなる?最終的に全く回答が返ってこなくなる?」\n\n実測の答えはこうなります:\n\n| 観点 | 答え |\n|------|------|\n| 速度 | **耐える**。HNSW のおかげで 30倍規模でも応答時間に有意な差は出ない。 |\n| 「回答が返ってこなくなる」 | **起きない**。エラー率ゼロ、タイムアウトゼロ。最悪「確認できません」が返るだけ。 |\n| 精度 | **劣化する。ただしモデルとプロンプトに大きく依存する**。qwen2.5:7b は -3%、gemma3:12b は -22%。 |\n| 主要な失敗モード | (a)過剰謙遜への逆戻り、(b)支店違いの似た情報からの過剰一般化、(c)期待と違う情報のミックス選択 |\n| 対策の存在 | **ある**。メタデータフィルタ / Reranker / ハイブリッド検索 / プロンプト調整 のいずれかで救済可能。実装は中規模。 |\n\n### 最大の発見\n\n「**通常時のチャンピオ"])</script>
1<script>self.__next_f.push([1,"ンが、スケール時にはランナーに転落する**」という現象。\ngemma3:12b は通常ナレッジでは qwen2.5:7b より優れていたが、20倍規模では逆転した。\nこれは「**ベンチの数字は規模で歪む**」という当たり前だが見落とされがちな事実を、改めて突きつけてくれます。\n\n**RAG の評価は「スケール感込み」で議論しないといけない**。\n小規模ベンチで「このモデルが最強」と決めても、本番投入後にナレッジが増えていく中で順位が入れ替わる可能性がある。\n\n### 設計教訓\n\n1. **検索層をしっかり作れば、規模拡大に体感的に耐える**(HNSW + 適切なチャンキング)\n2. **LLM 選定は「スケール感込み」で評価せよ**(小規模ベンチだけで決めない)\n3. **「過剰謙遜」と「過剰一般化」はモデル特性として常に裏返し**で出る。プロンプトはそのトレードオフを意識して書く\n\n---\nこの記事は [91works Blog](https://nineone-works.com/blog/llm30?utm_source=zenn\u0026utm_medium=referral) でも公開しています。\nf:[\"$\",\"$L1d\",null,{\"articles\":[{\"id\":\"zenn:f9a11f2f44cdad\",\"title\":\"改訂新版 これからはじめるReact実践入門で前回から追加された要素を学習した\",\"slug\":\"f9a11f2f44cdad\",\"excerpt\":null,\"thumbnailUrl\":null,\"emoji\":\"🪶\",\"categoryLabel\":\"Zenn\",\"tags\":[],\"publishedAt\":\"2026-08-31T14:27:23.369+09:00\",\"updatedAt\":null,\"source\":\"zenn\",\"href\":\"https://zenn.dev/91works/articles/f9a11f2f44cdad\",\"isExternal\":true,\"authorName\":\"しま\",\"authorSlug\":null,\"authorAvatarUrl\":null,\"body\":null,\"likedCount\":0},{\"id\":\"zenn:f1dedf6744798d\",\"title\":\"AWS初心者がEC2・RDS・S3・CloudFrontでWebアプリを構築してみた\",\"slug\":\"f1dedf6744798d\",\"excerpt\":null,\"thumbnailUrl\":null,\"emoji\":\"💭\",\"categoryLabel\":\"Zenn\",\"tags\":[],\"publishedAt\":\"2026-08-12T18:19:31.646+09:00\",\"updatedAt\":null,\"source\":\"zenn\",\"href\":\"https://zenn.dev/91works/articles/f1dedf6744798d\",\"isExternal\":true,\"authorName\":\"tsunooka\",\"authorSlug\":null,\"authorAvatarUrl\":null,\"body\":null,\"likedCount\":1},{\"id\":\"supabase:528fa689-2d3a-4148-9df2-da39387fe9da\",\"title\":\"ローカルLLMナレッジボットを改良して再ベンチした\",\"slug\":\"llm-knowledge-assistant-2\",\"excerpt\":null,\"thumbnailUrl\":null,\"emoji\":null,\"categoryLabel\":\"Tech\",\"tags\":[],\"publishedAt\":\"2026-08-12T08:27:31.800713+00:00\",\"updatedAt\":\"2026-08-12T08:27:31.800713+00:00\",\"source\":\"supabase\",\"href\":\"/blog/llm-knowledge-assistant-2\",\"isExternal\":false,\"authorName\":null,\"authorSlug\":null,\"authorAvatarUrl\":null,\"body\":\"$1e\",\"likedCount\":null},{\"id\":\"supabase:1b59bef7-6651-4af8-ae75-dc7bf8b14850\",\"title\":\"ローカルLLMナレッジボットを「ナレッジ30倍」でスケールテストしてみた\",\"slug\":\"llm-knowledgebot-scale-test\",\"excerpt\":null,\"thumbnailUrl\":null,\"emoji\":null,\"categoryLabel\":\"Tech\",\"tags\":[],\"publishedAt\":\"2026-08-12T08:26:38.427788+00:00\",\"updatedAt\":\"2026-08-12T08:26:38.427788+00:00\",\"source\":\"supabase\",\"href\":\"/blog/llm-knowledgebot-scale-test\",\"isExternal\":false,\"authorName\":null,\"authorSlug\":null,\"authorAvatarUrl\":null,\"body\":\"$1f\",\"likedCount\":null}]}]\n"])</script>
1<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"140f9e46d6184c048786b03bc8eb9a91","r":1,"spa":2}' crossorigin="anonymous"></script>
vendor: 1 bytes, line 1
1
2<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:'a45ff83edf8736bb',t:'MTc5MTI0MDQ2Mw=='};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>
2</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.