1<!DOCTYPE html><html lang="ja" data-astro-cid-37fxchfa> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>About | 天使ãã«ã¤ã¶ã¼ã¨å¼ã°ã㦠| 天使ãã«ã¤ã¶ã¼ã¨å¼ã°ãã¦</title><meta name="description" content="Yoichiro Tanaka ã®ãããã£ã¼ã«ãæ¸ç±ãLunakeyããµãã¼ãæ¹æ³ãã¾ã¨ãããã¼ã¸ã"><link rel="alternate" type="application/rss+xml" title="天使ãã«ã¤ã¶ã¼ã¨å¼ã°ãã¦" href="/yoichiro/feed.xml"><link rel="icon" href="/yoichiro/images/favicon.ico">
1<script> 2 (function () { 3 try { 4 var stored = localStorage.getItem('theme'); 5 } catch (_) { var stored = null; } 6 var prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches; 7 var theme = (stored === 'light' || stored === 'dark') 8 ? stored 9 : (prefersDark ? 'dark' : 'light'); 10 document.documentElement.dataset.theme = theme; 11 })(); 12 </script>
vendor: 63 bytes, line 12
12<script async src="https://www.googletagmanager.com/gtag/js?id=
12G-2VJSBFQ6TS
vendor: 11 bytes, line 12
12"></script>
12<script> 13
vendor: 145 bytes, lines 13-16
13window.dataLayer = window.dataLayer || []; 14 function gtag(){dataLayer.push(arguments);} 15 gtag('js', new Date()); 16 gtag('config', '
16G-2VJSBFQ6TS
vendor: 8 bytes, lines 16-17
16'); 17
17</script>
17<link rel="stylesheet" href="/yoichiro/_astro/index.B4ZUFRWN.css"> 18<style>article[data-astro-cid-fwdcsva6]{max-width:100%}h2[data-astro-cid-fwdcsva6]{margin-top:2em}img[data-astro-cid-fwdcsva6]{max-width:100%;height:auto;border-radius:4px}.profile-header[data-astro-cid-fwdcsva6]{display:flex;gap:20px;align-items:flex-start}.profile-header[data-astro-cid-fwdcsva6]>div[data-astro-cid-fwdcsva6]{flex:1;min-width:0}.profile-header[data-astro-cid-fwdcsva6]>div[data-astro-cid-fwdcsva6]>p[data-astro-cid-fwdcsva6]:first-child{margin-top:0}.profile-avatar[data-astro-cid-fwdcsva6]{width:120px;height:120px;border-radius:50%;object-fit:cover;flex-shrink:0}@media(max-width:480px){.profile-header[data-astro-cid-fwdcsva6]{flex-direction:column;align-items:center;text-align:center}}.books[data-astro-cid-fwdcsva6]{list-style:none;padding:0;display:flex;flex-wrap:wrap;gap:24px}.books[data-astro-cid-fwdcsva6] li[data-astro-cid-fwdcsva6]{margin:0}.books[data-astro-cid-fwdcsva6] a[data-astro-cid-fwdcsva6]{display:flex;flex-direction:column;align-items:center;gap:8px;width:160px;text-decoration:none;color:inherit}.books[data-astro-cid-fwdcsva6] img[data-astro-cid-fwdcsva6]{width:160px;height:auto;box-shadow:0 2px 8px #00000026;transition:transform .2s ease}@media(hover:hover){.books[data-astro-cid-fwdcsva6] a[data-astro-cid-fwdcsva6]:hover img[data-astro-cid-fwdcsva6]{transform:translateY(-2px)}.books[data-astro-cid-fwdcsva6] a[data-astro-cid-fwdcsva6]:hover span[data-astro-cid-fwdcsva6]{color:var(--accent)}}.books[data-astro-cid-fwdcsva6] span[data-astro-cid-fwdcsva6]{font-size:13px;text-align:center;line-height:1.4} 19</style></head> <body data-astro-cid-37fxchfa> <a href="#main" class="skip-link" data-astro-cid-37fxchfa>æ¬æã¸ã¹ããã</a> <header class="mobile-header" data-astro-cid-qlfjksao> <div class="header-inner" data-astro-cid-qlfjksao> <a href="/yoichiro/" class="brand" data-astro-cid-qlfjksao> <span class="sprout-icon" aria-hidden="true" data-astro-cid-qlfjksao>ð±</span> <span class="site-name" data-astro-cid-qlfjksao>天使ãã«ã¤ã¶ã¼ã¨å¼ã°ãã¦</span> </a> <nav class="nav-links" aria-label="ã¢ãã¤ã«ããã²ã¼ã·ã§ã³" data-astro-cid-qlfjksao> <a href="/yoichiro/archives/" data-astro-cid-qlfjksao>å¹´å¥</a> <a href="/yoichiro/search/" data-astro-cid-qlfjksao>æ¤ç´¢</a> <a href="/yoichiro/about/" class="active" data-astro-cid-qlfjksao>About</a> <button type="button" class="theme-toggle" aria-label="ãã¼ããåãæ¿ã" title="ãã¼ããåãæ¿ã" data-astro-cid-efubawbo> <svg class="icon-sun" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-efubawbo> <circle cx="12" cy="12" r="5" data-astro-cid-efubawbo></circle> <line x1="12" y1="1" x2="12" y2="3" data-astro-cid-efubawbo></line> <line x1="12" y1="21" x2="12" y2="23" data-astro-cid-efubawbo></line> <line x1="4.22" y1="4.22" x2="5.64" y2="5.64" data-astro-cid-efubawbo></line> <line x1="18.36" y1="18.36" x2="19.78" y2="19.78" data-astro-cid-efubawbo></line> <line x1="1" y1="12" x2="3" y2="12" data-astro-cid-efubawbo></line> <line x1="21" y1="12" x2="23" y2="12" data-astro-cid-efubawbo></line> <line x1="4.22" y1="19.78" x2="5.64" y2="18.36" data-astro-cid-efubawbo></line> <line x1="18.36" y1="5.64" x2="19.78" y2="4.22" data-astro-cid-efubawbo></line> </svg> <svg class="icon-moon" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-efubawbo> <path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" data-astro-cid-efubawbo></path> </svg> </button>
19<script> 20 (function () { 21 function updateAllToggles(theme) { 22 const isDark = theme === 'dark'; 23 document.querySelectorAll('.theme-toggle').forEach(function (btn) { 24 btn.setAttribute('aria-label', isDark ? 'ã©ã¤ãã¢ã¼ãã«åãæ¿ã' : 'ãã¼ã¯ã¢ã¼ãã«åãæ¿ã'); 25 btn.setAttribute('title', isDark ? 'ã©ã¤ãã¢ã¼ãã«åãæ¿ã' : 'ãã¼ã¯ã¢ã¼ãã«åãæ¿ã'); 26 const sun = btn.querySelector('.icon-sun'); 27 const moon = btn.querySelector('.icon-moon'); 28 if (sun && moon) { 29 sun.style.display = isDark ? 'block' : 'none'; 30 moon.style.display = isDark ? 'none' : 'block'; 31 } 32 }); 33 } 34 35 const currentTheme = document.documentElement.dataset.theme || 'light'; 36 updateAllToggles(currentTheme); 37 38 if (window.__themeToggleListenerAttached) return; 39 window.__themeToggleListenerAttached = true; 40 41 document.addEventListener('click', function (e) { 42 const btn = e.target.closest('.theme-toggle'); 43 if (!btn) return; 44 const cur = document.documentElement.dataset.theme || 'light'; 45 const next = cur === 'dark' ? 'light' : 'dark'; 46 47 const applyTheme = function () { 48 document.documentElement.dataset.theme = next; 49 updateAllToggles(next); 50 }; 51 52 const reduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches; 53 if (typeof document.startViewTransition === 'function' && !reduced) { 54 document.startViewTransition(applyTheme); 55 } else { 56 applyTheme(); 57 } 58 59 try { 60 localStorage.setItem('theme', next); 61 } catch (_) {} 62 }); 63 })(); 64</script>
64 </nav> </div> </header> <div class="layout-wrapper" data-astro-cid-37fxchfa> <aside class="sidebar-rail" data-astro-cid-kx45rens> <div class="rail-sticky" data-astro-cid-kx45rens> <div class="rail-brand" data-astro-cid-kx45rens> <a href="/yoichiro/" class="brand-link" data-astro-cid-kx45rens> <div class="logo-circle" aria-hidden="true" data-astro-cid-kx45rens>ð±</div> <div class="site-title" data-astro-cid-kx45rens>天使ãã«ã¤ã¶ã¼ã¨å¼ã°ãã¦</div> </a> <div class="tagline-chip" data-astro-cid-kx45rens>Google Tech, Web & Keyboards</div> </div> <nav class="rail-nav" aria-label="ã¡ã¤ã³ããã²ã¼ã·ã§ã³" data-astro-cid-kx45rens> <a href="/yoichiro/" class="nav-item" data-astro-cid-kx45rens> <span class="nav-label" data-astro-cid-kx45rens>è¨äºä¸è¦§</span> </a> <a href="/yoichiro/archives/" class="nav-item" data-astro-cid-kx45rens> <span class="nav-label" data-astro-cid-kx45rens>å¹´å¥ã¢ã¼ã«ã¤ã</span> </a> <a href="/yoichiro/search/" class="nav-item" data-astro-cid-kx45rens> <span class="nav-label" data-astro-cid-kx45rens>è¨äºæ¤ç´¢</span> </a> <a href="/yoichiro/about/" class="nav-item active" data-astro-cid-kx45rens> <span class="nav-label" data-astro-cid-kx45rens>About</span> </a> </nav> <div class="author-blurb" data-astro-cid-kx45rens> <div class="blurb-title" data-astro-cid-kx45rens>Author</div> <p class="blurb-text" data-astro-cid-kx45rens>Yoichiro Tanaka (ç°ä¸ æ´ä¸é)</p> <p class="blurb-desc" data-astro-cid-kx45rens>Google é¢é£æè¡ãWeb æ¨æºãèªä½ãã¼ãã¼ããªã©ã®éçºè¨é²ã</p> </div> <div class="rail-footer" data-astro-cid-kx45rens> <button type="button" class="theme-toggle" aria-label="ãã¼ããåãæ¿ã" title="ãã¼ããåãæ¿ã" data-astro-cid-efubawbo> <svg class="icon-sun" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-efubawbo> <circle cx="12" cy="12" r="5" data-astro-cid-efubawbo></circle> <line x1="12" y1="1" x2="12" y2="3" data-astro-cid-efubawbo></line> <line x1="12" y1="21" x2="12" y2="23" data-astro-cid-efubawbo></line> <line x1="4.22" y1="4.22" x2="5.64" y2="5.64" data-astro-cid-efubawbo></line> <line x1="18.36" y1="18.36" x2="19.78" y2="19.78" data-astro-cid-efubawbo></line> <line x1="1" y1="12" x2="3" y2="12" data-astro-cid-efubawbo></line> <line x1="21" y1="12" x2="23" y2="12" data-astro-cid-efubawbo></line> <line x1="4.22" y1="19.78" x2="5.64" y2="18.36" data-astro-cid-efubawbo></line> <line x1="18.36" y1="5.64" x2="19.78" y2="4.22" data-astro-cid-efubawbo></line> </svg> <svg class="icon-moon" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-efubawbo> <path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" data-astro-cid-efubawbo></path> </svg> </button>
64<script> 65 (function () { 66 function updateAllToggles(theme) { 67 const isDark = theme === 'dark'; 68 document.querySelectorAll('.theme-toggle').forEach(function (btn) { 69 btn.setAttribute('aria-label', isDark ? 'ã©ã¤ãã¢ã¼ãã«åãæ¿ã' : 'ãã¼ã¯ã¢ã¼ãã«åãæ¿ã'); 70 btn.setAttribute('title', isDark ? 'ã©ã¤ãã¢ã¼ãã«åãæ¿ã' : 'ãã¼ã¯ã¢ã¼ãã«åãæ¿ã'); 71 const sun = btn.querySelector('.icon-sun'); 72 const moon = btn.querySelector('.icon-moon'); 73 if (sun && moon) { 74 sun.style.display = isDark ? 'block' : 'none'; 75 moon.style.display = isDark ? 'none' : 'block'; 76 } 77 }); 78 } 79 80 const currentTheme = document.documentElement.dataset.theme || 'light'; 81 updateAllToggles(currentTheme); 82 83 if (window.__themeToggleListenerAttached) return; 84 window.__themeToggleListenerAttached = true; 85 86 document.addEventListener('click', function (e) { 87 const btn = e.target.closest('.theme-toggle'); 88 if (!btn) return; 89 const cur = document.documentElement.dataset.theme || 'light'; 90 const next = cur === 'dark' ? 'light' : 'dark'; 91 92 const applyTheme = function () { 93 document.documentElement.dataset.theme = next; 94 updateAllToggles(next); 95 }; 96 97 const reduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches; 98 if (typeof document.startViewTransition === 'function' && !reduced) { 99 document.startViewTransition(applyTheme); 100 } else { 101 applyTheme(); 102 } 103 104 try { 105 localStorage.setItem('theme', next); 106 } catch (_) {} 107 }); 108 })(); 109</script>
109 <a href="/yoichiro/feed.xml" class="rss-btn" title="RSS Feed" aria-label="RSS Feed" data-astro-cid-kx45rens> <svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-kx45rens> <path d="M4 11a9 9 0 0 1 9 9" data-astro-cid-kx45rens></path> <path d="M4 4a16 16 0 0 1 16 16" data-astro-cid-kx45rens></path> <circle cx="5" cy="19" r="1" data-astro-cid-kx45rens></circle> </svg> </a> </div> </div> </aside> <main id="main" class="main-content" data-astro-cid-37fxchfa> <div class="content-surface" data-astro-cid-37fxchfa> <article data-astro-cid-fwdcsva6> <h1 data-astro-cid-fwdcsva6>About</h1> <h2 data-astro-cid-fwdcsva6>ãããã£ã¼ã«</h2> <div class="profile-header" data-astro-cid-fwdcsva6> <img class="profile-avatar" src="/yoichiro/images/5-vol1-tanaka.jpg" alt="ç°ä¸ æ´ä¸é" width="120" height="120" loading="lazy" decoding="async" data-astro-cid-fwdcsva6> <div data-astro-cid-fwdcsva6> <p data-astro-cid-fwdcsva6> 110Yoichiro Tanaka (ç°ä¸ æ´ä¸é)ã1975 å¹´çã¾ããGoogle é¢é£æè¡ / Web æ¨æº / èªä½ãã¼ãã¼ãã«ã¤ãã¦æ¸ãã¦ã¾ãã 111 2005 å¹´ãããã®ããã°ãç¶ãã¦ã¾ãã 112</p> <p data-astro-cid-fwdcsva6> <a href="https://x.com/yoichiro" target="_blank" rel="noopener" data-astro-cid-fwdcsva6>X</a> · 113<a href="https://github.com/yoichiro" target="_blank" rel="noopener" data-astro-cid-fwdcsva6>GitHub</a> · 114<a href="https://www.facebook.com/yoichiro6642" target="_blank" rel="noopener" data-astro-cid-fwdcsva6>Facebook</a> </p> <p data-astro-cid-fwdcsva6> 115ããã«è©³ããï¼ 116<a href="/yoichiro/2005/03/post_11.html" data-astro-cid-fwdcsva6>èªå·±ç´¹ä»ï¼ãã¤ãªã°ã©ãã£ï¼</a> · 117<a href="/yoichiro/2005/03/post_12.html" data-astro-cid-fwdcsva6>çµæ´ï¼ãã¼ããã©ãªãªï¼</a> </p> </div> </div> <h2 data-astro-cid-fwdcsva6>æ¸ç±</h2> <ul class="books" data-astro-cid-fwdcsva6> <li data-astro-cid-fwdcsva6> <a href="https://amzn.to/4edb4D6" target="_blank" rel="noopener" data-astro-cid-fwdcsva6> <img src="/yoichiro/images/engineer_team_productivity.jpg" alt="ã¨ã³ã¸ãã¢ãã¼ã ã®çç£æ§åä¸" width="160" loading="lazy" decoding="async" data-astro-cid-fwdcsva6> <span data-astro-cid-fwdcsva6>ã¨ã³ã¸ãã¢ãã¼ã ã®çç£æ§åä¸</span> </a> </li> <li data-astro-cid-fwdcsva6> <a href="https://amzn.to/4fz960L" target="_blank" rel="noopener" data-astro-cid-fwdcsva6> <img src="/yoichiro/images/platform-building-guide.jpg" alt="ãã©ãããã©ã¼ã æ§ç¯ã¬ã¤ã" width="160" loading="lazy" decoding="async" data-astro-cid-fwdcsva6> <span data-astro-cid-fwdcsva6>ãã©ãããã©ã¼ã æ§ç¯ã¬ã¤ã</span> </a> </li> </ul> <h2 data-astro-cid-fwdcsva6>èªä½ãã¼ãã¼ããLunakeyãã·ãªã¼ãº</h2> <p data-astro-cid-fwdcsva6> 118ã³ã³ãã¯ããªåå²ãã¼ãã¼ããããã 119<a href="https://yoichiro.booth.pm/" target="_blank" rel="noopener" data-astro-cid-fwdcsva6>BOOTH ã¹ãã¢</a> 120ã§çºå£²ä¸ã 121</p> <p data-astro-cid-fwdcsva6> <img src="/yoichiro/images/lunakey-mini-200.jpg" alt="Lunakey Mini" width="200" data-astro-cid-fwdcsva6> </p> <h2 data-astro-cid-fwdcsva6>ãµãã¼ã</h2> <p data-astro-cid-fwdcsva6> 122ããã°ãå¿æ´ãã¦ãã ããæ¹ã¯ã 123<a href="https://github.com/sponsors/yoichiro" target="_blank" rel="noopener" data-astro-cid-fwdcsva6>GitHub Sponsors</a> 124ãããæ¯æ´ããã ãã¾ãã 125</p> </article> </div> </main> </div> <footer class="site-footer" data-astro-cid-35ed7um5> <div class="footer-inner" data-astro-cid-35ed7um5> <p class="copyright" data-astro-cid-35ed7um5> 126© 2004â2026 Yoichiro Tanaka. All rights reserved. 127</p> <div class="footer-links" data-astro-cid-35ed7um5> <a href="/yoichiro/feed.xml" class="rss-link" data-astro-cid-35ed7um5> <svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-astro-cid-35ed7um5> <path d="M4 11a9 9 0 0 1 9 9" data-astro-cid-35ed7um5></path> <path d="M4 4a16 16 0 0 1 16 16" data-astro-cid-35ed7um5></path> <circle cx="5" cy="19" r="1" data-astro-cid-35ed7um5></circle> </svg> 128RSS Feed 129</a> <a href="/yoichiro/about/" data-astro-cid-35ed7um5>About</a> </div> </div> </footer> </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.