{"vulnerability": "cve-2021-2333", "sightings": [{"uuid": "37fc99ea-fb06-4384-b525-14cc7f3d61e4", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2021-23337", "type": "seen", "source": "https://gist.github.com/nitinprabhakaran/9ed8a086734872b40779000797e1540b", "content": "", "creation_timestamp": "2025-07-13T12:28:05.000000Z"}, {"uuid": "a34055ef-3102-4f14-997a-9ae706438dd8", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2021-23336", "type": "seen", "source": "https://gist.github.com/GokilaSundar/1679c554e14e01bae055aadf83cc46f9", "content": "", "creation_timestamp": "2025-03-25T14:25:18.000000Z"}, {"uuid": "8b4e42e8-4889-4d95-a6dd-7f2b4ad70674", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2021-23336", "type": "seen", "source": "https://gist.github.com/shmil111/cb147d66fcae092c9e10cbd84821aadc", "content": "", "creation_timestamp": "2025-04-16T23:08:39.000000Z"}, {"uuid": "3c9e0d60-ddb2-4c24-a596-52585f35eb52", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2021-23336", "type": "seen", "source": "https://gist.github.com/konard/d7d4988d01ed5f8addd643332f0a8ee9", "content": "", "creation_timestamp": "2025-09-23T03:22:31.000000Z"}, {"uuid": "a8b190ad-c652-4480-bd6e-ce4d6ee40d32", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2021-23337", "type": "seen", "source": "https://bsky.app/profile/euvd-bot.bsky.social/post/3mif346qrs52s", "content": "", "creation_timestamp": "2026-03-31T21:01:10.857887Z"}, {"uuid": "18191a5b-6137-49ab-b642-9c8f39ffc8bc", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2021-23337", "type": "seen", "source": "https://gist.github.com/tu-trinh-scale/5a20be9ddb4b87ac1f57c14845b358a5", "content": "", "creation_timestamp": "2026-02-21T05:21:03.000000Z"}, {"uuid": "a8090785-64c2-479d-a40f-6b9e3ab0c2d9", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2021-23337", "type": "seen", "source": "https://bsky.app/profile/thehackerwire.bsky.social/post/3mifw6dxnll2s", "content": "", "creation_timestamp": "2026-04-01T05:05:35.132009Z"}, {"uuid": "62e4f2f2-a297-4ca6-8ffb-fa5e7927110a", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2021-23337", "type": "confirmed", "source": "https://github.com/projectdiscovery/nuclei-templates/tree/main/http/cves/2021/CVE-2021-23337.yaml", "content": "", "creation_timestamp": "2026-04-07T05:44:13.000000Z"}, {"uuid": "4dcbdcad-a453-4b6a-be3d-7f4b5e00471f", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2021-23338", "type": "seen", "source": "https://t.me/arpsyndicate/4905", "content": "#ExploitObserverAlert\n\nCVE-2021-23338\n\nDESCRIPTION: Exploit Observer has 7 entries in 2 file formats related to CVE-2021-23338. This affects all versions of package qlib. The workflow function in cli part of qlib was using an unsafe YAML load function.\n\nFIRST-EPSS: 0.000990000\nNVD-IS: 5.9\nNVD-ES: 1.2\nARPS-PRIORITY: 0.7771163", "creation_timestamp": "2024-05-02T21:45:04.000000Z"}, {"uuid": "7a2610fa-8771-4061-98d1-9e3de0a67d7f", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2021-23337", "type": "seen", "source": "https://bsky.app/profile/cyberhub.blog/post/3miwn6zjrp223", "content": "", "creation_timestamp": "2026-04-07T20:40:09.188769Z"}, {"uuid": "6dcfbfd8-6a4f-444b-b70c-de44d16f7cd4", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "86ecb4e1-bb32-44d5-9f39-8a4673af8385", "vulnerability": "CVE-2021-23336", "type": "seen", "source": "https://www.cert.ssi.gouv.fr/avis/CERTFR-2026-AVI-0395/", "content": "", "creation_timestamp": "2026-04-02T17:00:00.000000Z"}, {"uuid": "4b4d41e1-e606-4939-9dab-8a6a025c0ec9", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2021-23336", "type": "published-proof-of-concept", "source": "https://t.me/antichat/9957", "content": "#api #params\n\n&gt; \u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u043e\u0433\u0443 \u043d\u0430\u0439\u0442\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435, \u043c\u043e\u0436\u0435\u0442 \u0435\u0449\u0451 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c?\n\n\u0418\u043d\u043e\u0433\u0434\u0430 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u0439\u0442, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a. \u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0432\u0441\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0431\u044b\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u044b \u043d\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438, \u0430 \u0432 \u0447\u0435\u043a-\u043b\u0438\u0441\u0442\u0435 \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u044b \u043b\u044e\u0431\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u0438\u043d\u044a\u0435\u043a\u0446\u0438\u0438 \u0438 \u043b\u043e\u0433\u0438\u043a\u0443.\n\n\u041e\u0434\u043d\u0430\u043a\u043e, \u0431\u044b\u0432\u0430\u044e\u0442 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0432\u0438\u0434\u043d\u044b \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0432\u0437\u0433\u043b\u044f\u0434\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 (CAPEC-460) HTTP Parameter Pollution \u0438\u043b\u0438 (CWE-472) External Control of Assumed-Immutable Web Parameter. \u0414\u0430\u043d\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u0438\u0437-\u0437\u0430 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432.\n\n\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0435\u0440\u0432\u0443\u044e \u0430\u0442\u0430\u043a\u0443 HTTP Parameter Pollution, \u043e\u043d\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u0439 \u0437\u0430\u043f\u0440\u043e\u0441\u0430.\n\n\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443 \u043d\u0430\u0441 \u043e\u0442\u043a\u0440\u044b\u0442 \u0441\u0430\u0439\u0442 \u043f\u043e \u043f\u0440\u043e\u0434\u0430\u0436\u0435 \u0430\u0440\u0431\u0443\u0437\u043e\u0432 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435\n\n\ud83c\udf10 example.com/profile.jsp?client_id=1\n\n\u0414\u043b\u044f \u043a\u043d\u043e\u043f\u043a\u0438 \"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044c\" \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 \u043e\u0442\u0432\u0435\u0442\u0435 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 html:\n\n \u0438 XSS \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \ud83d\udca3\n\n\u041f\u043e\u043c\u0438\u043c\u043e \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u0432, \u043d\u0443\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f\u0445 \u0434\u043b\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0439 &amp; (\u0430\u043c\u043f\u0435\u0440\u0441\u0430\u043d\u0434) \u0438 , (\u0437\u0430\u043f\u044f\u0442\u0430\u044f)  \u043d\u043e \u0438 \u0440\u044f\u0434 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0442\u0443\u0442 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430\u043c \u0438 \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044c (rfc6570) URI Template \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 Path-Style Parameter\n\n\u041e\u0431\u044b\u0447\u043d\u044b\u0439 URL \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c:\n\nexample.com/users?role=admin&amp;firstName=N\n\n\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0435\u0433\u043e \u0432 \u0432\u0438\u0434 Path-Style:\n\nexample.com/users;role=admin;firstName=N\n\n\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f ; (\u0442\u043e\u0447\u043a\u0438 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439) \u043d\u0435 \u043f\u043e\u0432\u0441\u0435\u043c\u0435\u0441\u0442\u043d\u043e. \u042d\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430\u0445 \u0438 \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 \u043a \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044f\u043c, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u044b\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430\u0445:  \n\n\u2022 CVE-2021-23336 \u2014 Python \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 urllib.parse.parse_qsl \u043d\u0435 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 \u0442\u043e\u0447\u043a\u0443 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439.\n\n\u2022 ParseThru \u2014 Go \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 net/url \u043d\u0435 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 \u0442\u043e\u0447\u043a\u0443 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 http: URL query contains semicolon...\n\n\u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c HTTP Parameter Pollution \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 URL, \u043d\u043e \u0438 \u0432 \u043b\u044e\u0431\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 POST/GET \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432 \u0442\u0435\u043b\u0435 JSON.\n\n{\"client_id\":4, \"client_id\":17, \"action\":\"delete\"}", "creation_timestamp": "2022-08-15T15:16:39.000000Z"}, {"uuid": "12965ef1-d322-4a46-8386-f0b2afcc8eb8", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2021-23336", "type": "published-proof-of-concept", "source": "https://t.me/arm1tage/283", "content": "#api #params\n\n&gt; \u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u043e\u0433\u0443 \u043d\u0430\u0439\u0442\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435, \u043c\u043e\u0436\u0435\u0442 \u0435\u0449\u0451 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c?\n\n\u0418\u043d\u043e\u0433\u0434\u0430 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u0439\u0442, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a. \u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0432\u0441\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0431\u044b\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u044b \u043d\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438, \u0430 \u0432 \u0447\u0435\u043a-\u043b\u0438\u0441\u0442\u0435 \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u044b \u043b\u044e\u0431\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u0438\u043d\u044a\u0435\u043a\u0446\u0438\u0438 \u0438 \u043b\u043e\u0433\u0438\u043a\u0443.\n\n\u041e\u0434\u043d\u0430\u043a\u043e, \u0431\u044b\u0432\u0430\u044e\u0442 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0432\u0438\u0434\u043d\u044b \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0432\u0437\u0433\u043b\u044f\u0434\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 (CAPEC-460) HTTP Parameter Pollution \u0438\u043b\u0438 (CWE-472) External Control of Assumed-Immutable Web Parameter. \u0414\u0430\u043d\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u0438\u0437-\u0437\u0430 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432.\n\n\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0435\u0440\u0432\u0443\u044e \u0430\u0442\u0430\u043a\u0443 HTTP Parameter Pollution, \u043e\u043d\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u0439 \u0437\u0430\u043f\u0440\u043e\u0441\u0430.\n\n\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443 \u043d\u0430\u0441 \u043e\u0442\u043a\u0440\u044b\u0442 \u0441\u0430\u0439\u0442 \u043f\u043e \u043f\u0440\u043e\u0434\u0430\u0436\u0435 \u0430\u0440\u0431\u0443\u0437\u043e\u0432 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435\n\n\ud83c\udf10 example.com/profile.jsp?client_id=1\n\n\u0414\u043b\u044f \u043a\u043d\u043e\u043f\u043a\u0438 \"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044c\" \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 \u043e\u0442\u0432\u0435\u0442\u0435 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 html:\n\n \u0438 XSS \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \ud83d\udca3\n\n\u041f\u043e\u043c\u0438\u043c\u043e \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u0432, \u043d\u0443\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f\u0445 \u0434\u043b\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0439 &amp; (\u0430\u043c\u043f\u0435\u0440\u0441\u0430\u043d\u0434) \u0438 , (\u0437\u0430\u043f\u044f\u0442\u0430\u044f)  \u043d\u043e \u0438 \u0440\u044f\u0434 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0442\u0443\u0442 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430\u043c \u0438 \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044c (rfc6570) URI Template \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 Path-Style Parameter\n\n\u041e\u0431\u044b\u0447\u043d\u044b\u0439 URL \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c:\n\nexample.com/users?role=admin&amp;firstName=N\n\n\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0435\u0433\u043e \u0432 \u0432\u0438\u0434 Path-Style:\n\nexample.com/users;role=admin;firstName=N\n\n\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f ; (\u0442\u043e\u0447\u043a\u0438 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439) \u043d\u0435 \u043f\u043e\u0432\u0441\u0435\u043c\u0435\u0441\u0442\u043d\u043e. \u042d\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430\u0445 \u0438 \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 \u043a \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044f\u043c, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u044b\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430\u0445:  \n\n\u2022 CVE-2021-23336 \u2014 Python \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 urllib.parse.parse_qsl \u043d\u0435 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 \u0442\u043e\u0447\u043a\u0443 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439.\n\n\u2022 ParseThru \u2014 Go \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 net/url \u043d\u0435 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 \u0442\u043e\u0447\u043a\u0443 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 http: URL query contains semicolon...\n\n\u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c HTTP Parameter Pollution \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 URL, \u043d\u043e \u0438 \u0432 \u043b\u044e\u0431\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 POST/GET \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432 \u0442\u0435\u043b\u0435 JSON.\n\n{\"client_id\":4, \"client_id\":17, \"action\":\"delete\"}", "creation_timestamp": "2022-08-15T16:54:12.000000Z"}, {"uuid": "5a95acc4-3ed5-47e1-8106-02fb2832743d", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2021-23336", "type": "published-proof-of-concept", "source": "https://t.me/postImpact/13", "content": "#api #params\n\n&gt; \u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u043e\u0433\u0443 \u043d\u0430\u0439\u0442\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435, \u043c\u043e\u0436\u0435\u0442 \u0435\u0449\u0451 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c?\n\n\u0418\u043d\u043e\u0433\u0434\u0430 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u0439\u0442, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a. \u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0432\u0441\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0431\u044b\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u044b \u043d\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438, \u0430 \u0432 \u0447\u0435\u043a-\u043b\u0438\u0441\u0442\u0435 \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u044b \u043b\u044e\u0431\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u0438\u043d\u044a\u0435\u043a\u0446\u0438\u0438 \u0438 \u043b\u043e\u0433\u0438\u043a\u0443.\n\n\u041e\u0434\u043d\u0430\u043a\u043e, \u0431\u044b\u0432\u0430\u044e\u0442 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0432\u0438\u0434\u043d\u044b \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0432\u0437\u0433\u043b\u044f\u0434\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 (CAPEC-460) HTTP Parameter Pollution \u0438\u043b\u0438 (CWE-472) External Control of Assumed-Immutable Web Parameter. \u0414\u0430\u043d\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u0438\u0437-\u0437\u0430 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432.\n\n\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0435\u0440\u0432\u0443\u044e \u0430\u0442\u0430\u043a\u0443 HTTP Parameter Pollution, \u043e\u043d\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u0439 \u0437\u0430\u043f\u0440\u043e\u0441\u0430.\n\n\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443 \u043d\u0430\u0441 \u043e\u0442\u043a\u0440\u044b\u0442 \u0441\u0430\u0439\u0442 \u043f\u043e \u043f\u0440\u043e\u0434\u0430\u0436\u0435 \u0430\u0440\u0431\u0443\u0437\u043e\u0432 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435\n\n\ud83c\udf10 example.com/profile.jsp?client_id=1\n\n\u0414\u043b\u044f \u043a\u043d\u043e\u043f\u043a\u0438 \"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044c\" \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 \u043e\u0442\u0432\u0435\u0442\u0435 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 html:\n\n \u0438 XSS \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \ud83d\udca3\n\n\u041f\u043e\u043c\u0438\u043c\u043e \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u0432, \u043d\u0443\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f\u0445 \u0434\u043b\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0439 &amp; (\u0430\u043c\u043f\u0435\u0440\u0441\u0430\u043d\u0434) \u0438 , (\u0437\u0430\u043f\u044f\u0442\u0430\u044f)  \u043d\u043e \u0438 \u0440\u044f\u0434 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0442\u0443\u0442 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430\u043c \u0438 \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044c (rfc6570) URI Template \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 Path-Style Parameter\n\n\u041e\u0431\u044b\u0447\u043d\u044b\u0439 URL \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c:\n\nexample.com/users?role=admin&amp;firstName=N\n\n\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0435\u0433\u043e \u0432 \u0432\u0438\u0434 Path-Style:\n\nexample.com/users;role=admin;firstName=N\n\n\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f ; (\u0442\u043e\u0447\u043a\u0438 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439) \u043d\u0435 \u043f\u043e\u0432\u0441\u0435\u043c\u0435\u0441\u0442\u043d\u043e. \u042d\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430\u0445 \u0438 \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 \u043a \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044f\u043c, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u044b\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430\u0445:  \n\n\u2022 CVE-2021-23336 \u2014 Python \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 urllib.parse.parse_qsl \u043d\u0435 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 \u0442\u043e\u0447\u043a\u0443 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439.\n\n\u2022 ParseThru \u2014 Go \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 net/url \u043d\u0435 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 \u0442\u043e\u0447\u043a\u0443 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 http: URL query contains semicolon...\n\n\u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c HTTP Parameter Pollution \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 URL, \u043d\u043e \u0438 \u0432 \u043b\u044e\u0431\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 POST/GET \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432 \u0442\u0435\u043b\u0435 JSON.\n\n{\"client_id\":4, \"client_id\":17, \"action\":\"delete\"}", "creation_timestamp": "2022-08-15T09:37:41.000000Z"}, {"uuid": "b150d740-7577-4116-b61d-0334ea1c4ebe", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2021-23337", "type": "seen", "source": "https://bsky.app/profile/beikokucyber.bsky.social/post/3miz6wtrnrb2p", "content": "", "creation_timestamp": "2026-04-08T21:03:02.958796Z"}, {"uuid": "834a51c0-7d7f-440e-aa3e-fa6467f305a4", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2021-23337", "type": "seen", "source": "Telegram/OA0BhF0tC6EPmRi9BAj0aaRm3q83l75bwQVc9b2koDj48CY", "content": "", "creation_timestamp": "2026-03-31T21:19:34.000000Z"}, {"uuid": "5b240bfc-66c5-4ad4-9bbb-d189bc4c70c1", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2021-23336", "type": "published-proof-of-concept", "source": "https://t.me/poxek/2280", "content": "#api #params\n\n&gt; \u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u043e\u0433\u0443 \u043d\u0430\u0439\u0442\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435, \u043c\u043e\u0436\u0435\u0442 \u0435\u0449\u0451 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c?\n\n\u0418\u043d\u043e\u0433\u0434\u0430 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u0439\u0442, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a. \u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0432\u0441\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0431\u044b\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u044b \u043d\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438, \u0430 \u0432 \u0447\u0435\u043a-\u043b\u0438\u0441\u0442\u0435 \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u044b \u043b\u044e\u0431\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u0438\u043d\u044a\u0435\u043a\u0446\u0438\u0438 \u0438 \u043b\u043e\u0433\u0438\u043a\u0443.\n\n\u041e\u0434\u043d\u0430\u043a\u043e, \u0431\u044b\u0432\u0430\u044e\u0442 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0432\u0438\u0434\u043d\u044b \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0432\u0437\u0433\u043b\u044f\u0434\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 (CAPEC-460) HTTP Parameter Pollution \u0438\u043b\u0438 (CWE-472) External Control of Assumed-Immutable Web Parameter. \u0414\u0430\u043d\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u0438\u0437-\u0437\u0430 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432.\n\n\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0435\u0440\u0432\u0443\u044e \u0430\u0442\u0430\u043a\u0443 HTTP Parameter Pollution, \u043e\u043d\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u0439 \u0437\u0430\u043f\u0440\u043e\u0441\u0430.\n\n\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443 \u043d\u0430\u0441 \u043e\u0442\u043a\u0440\u044b\u0442 \u0441\u0430\u0439\u0442 \u043f\u043e \u043f\u0440\u043e\u0434\u0430\u0436\u0435 \u0430\u0440\u0431\u0443\u0437\u043e\u0432 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435\n\n\ud83c\udf10 example.com/profile.jsp?client_id=1\n\n\u0414\u043b\u044f \u043a\u043d\u043e\u043f\u043a\u0438 \"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044c\" \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 \u043e\u0442\u0432\u0435\u0442\u0435 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 html:\n\n \u0438 XSS \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \ud83d\udca3\n\n\u041f\u043e\u043c\u0438\u043c\u043e \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u0432, \u043d\u0443\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f\u0445 \u0434\u043b\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0439 &amp; (\u0430\u043c\u043f\u0435\u0440\u0441\u0430\u043d\u0434) \u0438 , (\u0437\u0430\u043f\u044f\u0442\u0430\u044f)  \u043d\u043e \u0438 \u0440\u044f\u0434 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0442\u0443\u0442 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430\u043c \u0438 \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044c (rfc6570) URI Template \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 Path-Style Parameter\n\n\u041e\u0431\u044b\u0447\u043d\u044b\u0439 URL \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c:\n\nexample.com/users?role=admin&amp;firstName=N\n\n\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0435\u0433\u043e \u0432 \u0432\u0438\u0434 Path-Style:\n\nexample.com/users;role=admin;firstName=N\n\n\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f ; (\u0442\u043e\u0447\u043a\u0438 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439) \u043d\u0435 \u043f\u043e\u0432\u0441\u0435\u043c\u0435\u0441\u0442\u043d\u043e. \u042d\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430\u0445 \u0438 \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 \u043a \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044f\u043c, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u044b\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430\u0445:  \n\n\u2022 CVE-2021-23336 \u2014 Python \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 urllib.parse.parse_qsl \u043d\u0435 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 \u0442\u043e\u0447\u043a\u0443 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439.\n\n\u2022 ParseThru \u2014 Go \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 net/url \u043d\u0435 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 \u0442\u043e\u0447\u043a\u0443 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 http: URL query contains semicolon...\n\n\u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c HTTP Parameter Pollution \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 URL, \u043d\u043e \u0438 \u0432 \u043b\u044e\u0431\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 POST/GET \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432 \u0442\u0435\u043b\u0435 JSON.\n\n{\"client_id\":4, \"client_id\":17, \"action\":\"delete\"}", "creation_timestamp": "2022-08-16T09:48:00.000000Z"}, {"uuid": "eb9bdb95-2932-4a7b-91c4-597d9c95dff2", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2021-23337", "type": "seen", "source": "https://t.me/cibsecurity/29721", "content": "\u203c CVE-2021-41720 \u203c\n\nA command injection vulnerability in Lodash in 4.17.21 allows attackers to arbitrary code execution via the template function. NOTE: this is a different parameter, method, and version than CVE-2021-23337.\n\n\ud83d\udcd6 Read\n\nvia \"National Vulnerability Database\".", "creation_timestamp": "2021-09-30T18:13:21.000000Z"}, {"uuid": "2862f1d4-6104-43fb-ae03-9723f78268a8", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2021-23336", "type": "exploited", "source": "https://t.me/S_E_Reborn/2608", "content": "#api #params\n\n&gt; \u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u043e\u0433\u0443 \u043d\u0430\u0439\u0442\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435, \u043c\u043e\u0436\u0435\u0442 \u0435\u0449\u0451 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c?\n\n\u0418\u043d\u043e\u0433\u0434\u0430 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u0439\u0442, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a. \u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0432\u0441\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0431\u044b\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u044b \u043d\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438, \u0430 \u0432 \u0447\u0435\u043a-\u043b\u0438\u0441\u0442\u0435 \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u044b \u043b\u044e\u0431\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u0438\u043d\u044a\u0435\u043a\u0446\u0438\u0438 \u0438 \u043b\u043e\u0433\u0438\u043a\u0443.\n\n\u041e\u0434\u043d\u0430\u043a\u043e, \u0431\u044b\u0432\u0430\u044e\u0442 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0432\u0438\u0434\u043d\u044b \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0432\u0437\u0433\u043b\u044f\u0434\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 (CAPEC-460) HTTP Parameter Pollution \u0438\u043b\u0438 (CWE-472) External Control of Assumed-Immutable Web Parameter. \u0414\u0430\u043d\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u0438\u0437-\u0437\u0430 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432.\n\n\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0435\u0440\u0432\u0443\u044e \u0430\u0442\u0430\u043a\u0443 HTTP Parameter Pollution, \u043e\u043d\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u0439 \u0437\u0430\u043f\u0440\u043e\u0441\u0430.\n\n\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443 \u043d\u0430\u0441 \u043e\u0442\u043a\u0440\u044b\u0442 \u0441\u0430\u0439\u0442 \u043f\u043e \u043f\u0440\u043e\u0434\u0430\u0436\u0435 \u0430\u0440\u0431\u0443\u0437\u043e\u0432 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435\n\n\ud83c\udf10 example.com/profile.jsp?client_id=1\n\n\u0414\u043b\u044f \u043a\u043d\u043e\u043f\u043a\u0438 \"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044c\" \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 \u043e\u0442\u0432\u0435\u0442\u0435 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 html:\n\n \u0438 XSS \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \ud83d\udca3\n\n\u041f\u043e\u043c\u0438\u043c\u043e \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u0432, \u043d\u0443\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f\u0445 \u0434\u043b\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0439 &amp; (\u0430\u043c\u043f\u0435\u0440\u0441\u0430\u043d\u0434) \u0438 , (\u0437\u0430\u043f\u044f\u0442\u0430\u044f)  \u043d\u043e \u0438 \u0440\u044f\u0434 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0442\u0443\u0442 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430\u043c \u0438 \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044c (rfc6570) URI Template \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 Path-Style Parameter\n\n\u041e\u0431\u044b\u0447\u043d\u044b\u0439 URL \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c:\n\nexample.com/users?role=admin&amp;firstName=N\n\n\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0435\u0433\u043e \u0432 \u0432\u0438\u0434 Path-Style:\n\nexample.com/users;role=admin;firstName=N\n\n\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f ; (\u0442\u043e\u0447\u043a\u0438 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439) \u043d\u0435 \u043f\u043e\u0432\u0441\u0435\u043c\u0435\u0441\u0442\u043d\u043e. \u042d\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430\u0445 \u0438 \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 \u043a \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044f\u043c, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u044b\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430\u0445:  \n\n\u2022 CVE-2021-23336 \u2014 Python \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 urllib.parse.parse_qsl \u043d\u0435 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 \u0442\u043e\u0447\u043a\u0443 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439.\n\n\u2022 ParseThru \u2014 Go \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 net/url \u043d\u0435 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 \u0442\u043e\u0447\u043a\u0443 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 http: URL query contains semicolon...\n\n\u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c HTTP Parameter Pollution \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 URL, \u043d\u043e \u0438 \u0432 \u043b\u044e\u0431\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 POST/GET \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432 \u0442\u0435\u043b\u0435 JSON.\n\n{\"client_id\":4, \"client_id\":17, \"action\":\"delete\"}", "creation_timestamp": "2022-08-15T18:43:08.000000Z"}, {"uuid": "bc69d893-7b69-4e78-a64a-23404c51a3f5", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2021-23338", "type": "seen", "source": "https://t.me/cibsecurity/23604", "content": "\u203c CVE-2021-23338 \u203c\n\nThis affects all versions of package qlib. The workflow function in cli part of qlib was using an unsafe YAML load function.\n\n\ud83d\udcd6 Read\n\nvia \"National Vulnerability Database\".", "creation_timestamp": "2021-02-15T18:46:50.000000Z"}, {"uuid": "051af884-8001-42e7-acdc-804fe9f170b6", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2021-23337", "type": "seen", "source": "https://t.me/cibsecurity/23593", "content": "\u203c CVE-2021-23337 \u203c\n\nAll versions of package lodash; all versions of package org.fujion.webjars:lodash are vulnerable to Command Injection via template.\n\n\ud83d\udcd6 Read\n\nvia \"National Vulnerability Database\".", "creation_timestamp": "2021-02-15T16:46:44.000000Z"}, {"uuid": "bd34e799-1ff4-41a3-bbc7-0908def54c35", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2021-23334", "type": "published-proof-of-concept", "source": "https://t.me/cibsecurity/23429", "content": "\u203c CVE-2021-23334 \u203c\n\nAll versions of package static-eval are vulnerable to Arbitrary Code Execution using FunctionExpressions and TemplateLiterals. PoC: var evaluate = require('static-eval'); var parse = require('esprima').parse; var src=\"(function (x) { return ${eval(\"console.log(global.process.mainModule.constructor._load('child_process').execSync('ls').toString())\")} })()\" var ast = parse(src).body[0].expression; evaluate(ast)\n\n\ud83d\udcd6 Read\n\nvia \"National Vulnerability Database\".", "creation_timestamp": "2021-02-11T14:42:21.000000Z"}, {"uuid": "a548ddeb-29fc-4a79-8e05-0516dec26e47", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2021-23336", "type": "seen", "source": "https://t.me/cibsecurity/23594", "content": "\u203c CVE-2021-23336 \u203c\n\nThe package python/cpython from 0 and before 3.6.13, from 3.7.0 and before 3.7.10, from 3.8.0 and before 3.8.8, from 3.9.0 and before 3.9.2 are vulnerable to Web Cache Poisoning via urllib.parse.parse_qsl and urllib.parse.parse_qs by using a vector called parameter cloaking. When the attacker can separate query parameters using a semicolon (;), they can cause a difference in the interpretation of the request between the proxy (running with default configuration) and the server. This can result in malicious requests being cached as completely safe ones, as the proxy would usually not see the semicolon as a separator, and therefore would not include it in a cache key of an unkeyed parameter.\n\n\ud83d\udcd6 Read\n\nvia \"National Vulnerability Database\".", "creation_timestamp": "2021-02-15T16:46:45.000000Z"}, {"uuid": "b73fe7f5-cc60-48f3-9f73-fb80392827bb", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2021-23330", "type": "seen", "source": "https://t.me/cibsecurity/22895", "content": "\u203c CVE-2021-23330 \u203c\n\nAll versions of package launchpad are vulnerable to Command Injection via stop.\n\n\ud83d\udcd6 Read\n\nvia \"National Vulnerability Database\".", "creation_timestamp": "2021-02-01T19:25:09.000000Z"}, {"uuid": "8c56bb50-3223-4658-8d12-5a8e619c7365", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2021-23337", "type": "seen", "source": "https://gist.github.com/joemocha/fe552c9601dc58c4f9731982ab0d1f8c", "content": "From 87a213729aba7bd86b4cb07a5e6630fdd0cdef19 Mon Sep 17 00:00:00 2001\nFrom: Samuel Obukwelu \nDate: Mon, 18 May 2026 21:35:28 -0400\nSubject: [PATCH] Add Block 3 audience materials\n\n---\n .pi/extensions/inspect-verify.ts              | 111 ++++++++++++++++++\n .pi/skills/architecture-verifier/SKILL.md     |  54 +++++++++\n .pi/skills/performance-verifier/SKILL.md      |  53 +++++++++\n .pi/skills/project-inspector/SKILL.md         |  53 +++++++++\n .pi/skills/project-verifier/SKILL.md          |  89 ++++++++++++++\n AGENTS.md                                     |  47 ++++++++\n README.md                                     |  16 ++-\n SYSTEM.md                                     |  11 ++\n block3/README.md                              |  57 +++++++++\n fixtures/agentic-target-sample/README.md      |  59 ++++++++++\n .../components/Header.vue                     |  16 +++\n .../composables/useExample.ts                 |   4 +\n fixtures/agentic-target-sample/nuxt.config.ts |  14 +++\n fixtures/agentic-target-sample/package.json   |  24 ++++\n .../agentic-target-sample/pages/about.vue     |  14 +++\n .../agentic-target-sample/pages/index.vue     |  14 +++\n 16 files changed, 634 insertions(+), 2 deletions(-)\n create mode 100644 .pi/extensions/inspect-verify.ts\n create mode 100644 .pi/skills/architecture-verifier/SKILL.md\n create mode 100644 .pi/skills/performance-verifier/SKILL.md\n create mode 100644 .pi/skills/project-inspector/SKILL.md\n create mode 100644 .pi/skills/project-verifier/SKILL.md\n create mode 100644 AGENTS.md\n create mode 100644 SYSTEM.md\n create mode 100644 block3/README.md\n create mode 100644 fixtures/agentic-target-sample/README.md\n create mode 100644 fixtures/agentic-target-sample/components/Header.vue\n create mode 100644 fixtures/agentic-target-sample/composables/useExample.ts\n create mode 100644 fixtures/agentic-target-sample/nuxt.config.ts\n create mode 100644 fixtures/agentic-target-sample/package.json\n create mode 100644 fixtures/agentic-target-sample/pages/about.vue\n create mode 100644 fixtures/agentic-target-sample/pages/index.vue\n\ndiff --git a/.pi/extensions/inspect-verify.ts b/.pi/extensions/inspect-verify.ts\nnew file mode 100644\nindex 0000000..9105826\n--- /dev/null\n+++ b/.pi/extensions/inspect-verify.ts\n@@ -0,0 +1,111 @@\n+/**\n+ * inspect-verify \u2014 Block 3 Pi extension\n+ *\n+ * Implements ARCH-A (sequential pipeline) on top of `project-inspector` and\n+ * `project-verifier` skills. Two invocation paths, each with a different\n+ * pedagogical purpose:\n+ *\n+ *   1. `/audit ` \u2014 explicit slash command. Injects a single coordinated\n+ *      prompt that asks the agent to run inspector then verifier in one turn.\n+ *      Works in BOTH interactive and non-interactive (-p / --print) modes.\n+ *      This is the primary, reliable path attendees install and use.\n+ *\n+ *   2. `agent_end` listener \u2014 when a turn ends and the output looks like a\n+ *      project-inspector structural briefing (JSON with `\"architecture\"` and\n+ *      `\"entry_points\"`), the extension calls `sendUserMessage` to queue a\n+ *      verifier follow-up. Works in INTERACTIVE mode only \u2014 `-p` mode exits\n+ *      after the first `agent_end` and ignores queued messages. The ambient\n+ *      lesson: once the pattern is wired, the system catches itself without\n+ *      the user remembering to invoke the verifier by name.\n+ *\n+ * Pedagogical thesis: a working engineer composes skills into self-checking\n+ * systems instead of running each skill by hand. Inspector finds architecture;\n+ * Verifier flags supply-chain risk; the extension wires them together. No\n+ * single skill catches everything \u2014 that's why we compose.\n+ */\n+\n+import type {\n+  AgentMessage,\n+  ExtensionAPI,\n+} from \"@earendil-works/pi-coding-agent\";\n+\n+const VERIFIER_FOLLOWUP_PROMPT =\n+  \"The previous response looks like a project-inspector structural briefing. \" +\n+  \"Now run the project-verifier skill on the same target. Read the \" +\n+  \"dependency manifest (package.json, pyproject.toml, go.mod, etc.) of the \" +\n+  \"repository you just inspected, identify pinned exact versions, and use web \" +\n+  \"search to look up known CVE / GHSA advisories per pinned version. Emit the \" +\n+  \"verifier's JSON report \u2014 do not produce another structural briefing.\";\n+\n+const AUDIT_COMMAND_PROMPT = (target: string) =&gt;\n+  `Audit the repository at \\`${target}\\`. ` +\n+  `Step 1 \u2014 run the project-inspector skill: produce a structural briefing in the inspector's JSON shape. ` +\n+  `Step 2 \u2014 run the project-verifier skill on the same target: read the dependency manifest, identify pinned versions, look up CVE / GHSA advisories per pinned version, emit the verifier's JSON shape. ` +\n+  `Return both JSON outputs in order, separated by a \"---\" line.`;\n+\n+/**\n+ * Extract plain text from an assistant message's content blocks.\n+ * AssistantMessage.content is (TextContent | ThinkingContent | ToolCall)[].\n+ */\n+function assistantText(message: AgentMessage): string {\n+  if (message.role !== \"assistant\") return \"\";\n+  const content = message.content;\n+  if (typeof content === \"string\") return content;\n+  if (!Array.isArray(content)) return \"\";\n+  return content\n+    .filter((block: any) =&gt; block &amp;&amp; block.type === \"text\")\n+    .map((block: any) =&gt; (typeof block.text === \"string\" ? block.text : \"\"))\n+    .join(\"\\n\");\n+}\n+\n+/**\n+ * Heuristic: does the text look like a project-inspector output?\n+ * Matches the inspector's documented JSON schema.\n+ */\n+function looksLikeInspectorBriefing(text: string): boolean {\n+  return (\n+    text.includes('\"architecture\"') &amp;&amp;\n+    text.includes('\"entry_points\"') &amp;&amp;\n+    // Quick exclusion: don't re-fire on verifier output\n+    !text.includes('\"lens\"') &amp;&amp;\n+    !text.includes('\"findings\"') &amp;&amp;\n+    !text.includes('\"missed_by_structural_briefing\"')\n+  );\n+}\n+\n+export default function (pi: ExtensionAPI) {\n+  // De-dupe: only fire the verifier once per distinct inspector output within\n+  // a single session. The fingerprint is the first ~200 chars of the output;\n+  // good enough for one session's worth of turns.\n+  const firedFingerprints = new Set();\n+\n+  pi.on(\"agent_end\", async (event) =&gt; {\n+    const lastAssistant = [...event.messages]\n+      .reverse()\n+      .find((m: AgentMessage) =&gt; m.role === \"assistant\");\n+    if (!lastAssistant) return;\n+\n+    const text = assistantText(lastAssistant);\n+    if (!looksLikeInspectorBriefing(text)) return;\n+\n+    const fingerprint = text.slice(0, 200);\n+    if (firedFingerprints.has(fingerprint)) return;\n+    firedFingerprints.add(fingerprint);\n+\n+    // Inject the verifier follow-up. `deliverAs: \"followUp\"` queues this for\n+    // the next turn so it doesn't fight an in-flight stream.\n+    pi.sendUserMessage(VERIFIER_FOLLOWUP_PROMPT, { deliverAs: \"followUp\" });\n+  });\n+\n+  // Explicit, loop-safe path: `/audit ` triggers inspector + verifier\n+  // in a single coordinated prompt. Useful when the auto-detect heuristic\n+  // misses or when the user wants the pipeline by name.\n+  pi.registerCommand(\"audit\", {\n+    description:\n+      \"Run project-inspector then project-verifier on the given repository path.\",\n+    handler: async (args, _ctx) =&gt; {\n+      const target = args.trim() || \".\";\n+      pi.sendUserMessage(AUDIT_COMMAND_PROMPT(target));\n+    },\n+  });\n+}\ndiff --git a/.pi/skills/architecture-verifier/SKILL.md b/.pi/skills/architecture-verifier/SKILL.md\nnew file mode 100644\nindex 0000000..713a636\n--- /dev/null\n+++ b/.pi/skills/architecture-verifier/SKILL.md\n@@ -0,0 +1,54 @@\n+---\n+name: architecture-verifier\n+description: Audit a codebase against architectural and structural quality concerns that a feature-focused briefing misses. Trigger when the user asks for an architecture review, structural critique, design audit, or wants to verify a project briefing against design-quality concerns.\n+---\n+\n+# Architecture Verifier\n+\n+You are a staff-level architect reviewing a codebase for structural and design-quality concerns that a feature-focused inspector typically misses. Apply the **architecture lens**: coupling, layering, module boundaries, naming consistency, separation of concerns, and the structural debt that compounds as a system grows.\n+\n+## When you run\n+\n+You run alongside other verifiers (security, performance) as part of a multi-lens audit composed by a deliberator agent. Your output is one slice of a composed verification report.\n+\n+You may also run standalone when a user asks to architecturally review a codebase.\n+\n+## Process\n+\n+1. **Map the module boundaries.** Identify directories that represent layers (e.g., `pages/` vs `components/` vs `composables/` vs `server/`). Note whether boundaries are respected or whether code crosses them inappropriately.\n+2. **Check coupling.** Sample a few entry points; trace their imports. Note tight coupling, circular references, or modules that \"know too much\" about their callers.\n+3. **Naming + conventions.** Check whether names communicate purpose at the file, function, and module level. Flag inconsistencies (e.g., camelCase mixed with kebab-case in similar-purpose files).\n+4. **Missing abstractions.** Look for repeated patterns that should be extracted (3+ near-duplicate handlers, recurring fetch-then-transform shapes, etc.).\n+5. **Premature abstractions.** Look for the inverse: indirection that doesn't earn its keep \u2014 single-impl interfaces, factories that wrap one constructor, config layers nobody configures.\n+6. **Test architecture.** If tests exist, note whether they exercise behavior or implementation. If they don't, flag the absence as architectural risk.\n+7. **Score severity.** For each finding: severity (critical / high / moderate / low), one-sentence description, one-sentence recommendation.\n+\n+## Output format\n+\n+Return **only** valid JSON in the following shape \u2014 no prose before or after the JSON block:\n+\n+```json\n+{\n+  \"verified\": false,\n+  \"target\": \"\",\n+  \"lens\": \"architecture\",\n+  \"findings\": [\n+    {\n+      \"concern\": \"\",\n+      \"severity\": \"critical | high | moderate | low\",\n+      \"summary\": \"\",\n+      \"recommendation\": \"\"\n+    }\n+  ],\n+  \"recommendation\": \"&lt;2\u20133 sentence summary of architectural posture&gt;\"\n+}\n+```\n+\n+Set `verified: true` only when there are zero findings of severity `high` or `critical`.\n+\n+## Constraints\n+\n+- **Be specific.** Generic findings (\"could be more modular\") help no one. Cite file paths or directory names.\n+- **Honest scoping.** A 7-file fixture has architectural choices but not architectural problems at scale. Don't manufacture findings to look thorough. If the project is genuinely clean, say so.\n+- **One lens only.** This skill is architecture-focused. Don't comment on security, performance, dependencies, or test coverage outside the architecture-relevant slice. The composed audit covers those concerns through other verifiers.\n+- **No fabrication.** Only reference patterns you can verify by reading the code.\ndiff --git a/.pi/skills/performance-verifier/SKILL.md b/.pi/skills/performance-verifier/SKILL.md\nnew file mode 100644\nindex 0000000..75b6389\n--- /dev/null\n+++ b/.pi/skills/performance-verifier/SKILL.md\n@@ -0,0 +1,53 @@\n+---\n+name: performance-verifier\n+description: Audit a codebase for performance and bundle-hygiene concerns that a structural briefing does not surface. Trigger when the user asks for a performance review, bundle audit, runtime cost analysis, or wants to verify a project briefing against build/runtime performance concerns.\n+---\n+\n+# Performance Verifier\n+\n+You are a senior engineer reviewing a codebase for performance and bundle-hygiene concerns that a structural inspector typically misses. Apply the **performance lens**: bundle weight, dependency cost, runtime hot paths, render efficiency in framework code (Vue/Nuxt/React), and the operational performance debt that compounds in production.\n+\n+## When you run\n+\n+You run alongside other verifiers (security, architecture) as part of a multi-lens audit composed by a deliberator agent. Your output is one slice of a composed verification report.\n+\n+You may also run standalone when a user asks to performance-review a codebase.\n+\n+## Process\n+\n+1. **Read the dependency manifest.** Identify heavyweight deps (Lodash full import, Moment, large UI libs, AWS SDK monoliths). Note tree-shakable vs not.\n+2. **Check the bundler config.** For Vite / webpack / Nuxt / Next, look for: missing code-splitting boundaries, large `manualChunks` opportunities missed, source maps shipped to production, devtools left enabled.\n+3. **Sample a hot path.** For a framework like Nuxt/Vue, inspect a representative page. Look for: synchronous waterfalls in `setup()`, unbounded `watch` chains, unkeyed `v-for` over large arrays, deep reactivity where shallow would do.\n+4. **Asset hygiene.** Note images &gt; 200KB, unbounded fonts, CDN-vs-local mismatches in obvious places.\n+5. **Build-time cost.** Note signals of slow builds: large `tsconfig` includes, missing `paths` aliases, `node_modules` directly imported from source.\n+6. **Score severity.** For each finding: severity (critical / high / moderate / low), one-sentence description, one-sentence recommendation.\n+\n+## Output format\n+\n+Return **only** valid JSON in the following shape \u2014 no prose before or after the JSON block:\n+\n+```json\n+{\n+  \"verified\": false,\n+  \"target\": \"\",\n+  \"lens\": \"performance\",\n+  \"findings\": [\n+    {\n+      \"concern\": \"\",\n+      \"severity\": \"critical | high | moderate | low\",\n+      \"summary\": \"\",\n+      \"recommendation\": \"\"\n+    }\n+  ],\n+  \"recommendation\": \"&lt;2\u20133 sentence summary of performance posture&gt;\"\n+}\n+```\n+\n+Set `verified: true` only when there are zero findings of severity `high` or `critical`.\n+\n+## Constraints\n+\n+- **Be quantitative when possible.** \"Lodash full import\" \u2192 cite the file. \"Large asset\" \u2192 estimate the kB. Vague findings degrade the audit.\n+- **Workshop-fixture awareness.** Small fixtures (&lt;10 files) won't have many real performance findings. Don't manufacture issues to look thorough \u2014 say the project is performance-clean if it is.\n+- **One lens only.** Performance-focused. Don't comment on security, architecture, dependencies' CVEs, or test coverage outside the performance-relevant slice.\n+- **No fabrication.** Only reference patterns you can verify by reading the code.\ndiff --git a/.pi/skills/project-inspector/SKILL.md b/.pi/skills/project-inspector/SKILL.md\nnew file mode 100644\nindex 0000000..044a595\n--- /dev/null\n+++ b/.pi/skills/project-inspector/SKILL.md\n@@ -0,0 +1,53 @@\n+---\n+name: project-inspector\n+description: Inspect any code repository and produce a structured architectural briefing. Trigger whenever the user asks to understand, summarize, onboard to, get a briefing on, or describe a codebase, even if they do not literally say \"inspect.\" Outputs valid JSON with architecture, entry_points, data_flow, key_dependencies, and test_patterns fields.\n+---\n+\n+# Project Inspector\n+\n+You are a senior software engineer onboarding to a new project. Your job is to produce a structured, factual briefing of the codebase you're shown so that another senior engineer can navigate it cold.\n+\n+## Process (think step-by-step)\n+\n+1. **Scan the directory structure.** Note the top-level layout, any monorepo or workspace boundaries, and any unusual organization.\n+2. **Identify the framework.** Read `package.json`, `pyproject.toml`, `go.mod`, or equivalent. Note the runtime, the framework, and the major libraries. If multiple frameworks are present, report them all.\n+3. **Locate the entry points.** Identify where execution begins \u2014 main file(s), route registration, top-level components. List at least three when present.\n+4. **Trace data flow.** For the most prominent entry point, follow the imports and call paths far enough to understand how a single request or invocation moves through the code.\n+5. **Note test patterns.** Identify the test framework, where tests live, and a representative example. If tests are missing, say so.\n+6. **Summarize.** Produce the structured output below.\n+\n+## Output format\n+\n+Return **only** valid JSON in the following shape \u2014 no prose before or after the JSON block:\n+\n+```json\n+{\n+  \"architecture\": \"&lt;2\u20134 sentence summary of the overall shape and framework&gt;\",\n+  \"entry_points\": [\"\", \"\", \"\"],\n+  \"data_flow\": \"&lt;2\u20133 sentence trace of how a request/invocation moves through the most prominent entry point&gt;\",\n+  \"key_dependencies\": [\"\", \"\", \"...\"],\n+  \"test_patterns\": \"&lt;1\u20132 sentence note on test framework, location, conventions; or 'No tests detected.'&gt;\"\n+}\n+```\n+\n+## Example\n+\n+For a small Express app:\n+\n+```json\n+{\n+  \"architecture\": \"Node.js HTTP service built on Express 4. Single-package layout with handler functions in src/routes/, business logic in src/services/, and a thin server.ts entry point.\",\n+  \"entry_points\": [\"src/server.ts\", \"src/routes/index.ts\", \"src/routes/users.ts\"],\n+  \"data_flow\": \"HTTP request enters src/server.ts which mounts route handlers from src/routes/. Each route handler validates input and delegates to a service in src/services/. Services use a shared db client from src/db.ts.\",\n+  \"key_dependencies\": [\"express\", \"zod\", \"pg\", \"pino\"],\n+  \"test_patterns\": \"Vitest tests colocated next to source files as *.test.ts. One example: src/services/users.test.ts.\"\n+}\n+```\n+\n+## Constraints\n+\n+- **Never invent file paths.** Only reference files you can observe in the input. If a path is unclear, omit it rather than guess.\n+- **Never echo secrets.** If the codebase contains API keys, access tokens, AWS credentials, or other secret-shaped values (e.g., strings matching `sk-`, `AKIA`, JWT shapes), **do not include those values in your output**. Note that secrets are present but redact the values themselves.\n+- **Be honest about ambiguity.** If the framework is unclear (e.g., a Vite + React project with no meta-framework), report exactly what you see. Do not assert a framework that isn't there.\n+- **If the input is not a codebase** \u2014 e.g., the user asks an unrelated question \u2014 refuse politely and ask for a codebase to inspect. Do not produce a briefing for non-repo input.\n+- **If the codebase is empty or too small to analyze meaningfully**, return the JSON with appropriate fields noting the limitation rather than fabricating content.\ndiff --git a/.pi/skills/project-verifier/SKILL.md b/.pi/skills/project-verifier/SKILL.md\nnew file mode 100644\nindex 0000000..6d5a780\n--- /dev/null\n+++ b/.pi/skills/project-verifier/SKILL.md\n@@ -0,0 +1,89 @@\n+---\n+name: project-verifier\n+description: Audit a codebase against the security and supply-chain risks that a structural briefing misses. Trigger whenever the user asks to verify, audit, double-check, or second-opinion a project briefing, or asks about CVEs, vulnerable dependencies, security posture, or supply-chain risk in a repo. Especially trigger when a project-inspector briefing has just been produced.\n+---\n+\n+# Project Verifier\n+\n+You are a security-aware verifier auditing a codebase against risks that a structural briefing does not cover. Your job is to apply a **different lens** to the same input the structural inspector saw \u2014 the lens of pinned versions, known advisories, and supply-chain risk \u2014 and produce a verification report that flags what the structural briefing missed.\n+\n+## When you run\n+\n+You run after a structural inspector (e.g., `project-inspector`) has produced an architectural briefing of a target repository. Your input is the target repository path. Your output is a verification report.\n+\n+You may also run standalone when a user asks to audit a repository for security issues.\n+\n+## Process (think step-by-step)\n+\n+1. **Locate the dependency manifest.** Read `package.json`, `pyproject.toml`, `go.mod`, `Cargo.toml`, or equivalent from the target repo. If none is found, report that and exit.\n+2. **Extract pinned versions.** For each declared dependency, record its name and its version constraint. Note which are pinned to **exact** versions (no `^`, `~`, or range operators) vs. which are floating.\n+3. **Look up known advisories.** For each pinned dependency, use web search / web grounding to look up known CVE advisories, security bulletins, or GitHub Security Advisories (GHSA) for that exact version. Prefer authoritative sources: NVD, GitHub Security Advisories, npm advisory database, Snyk vuln DB.\n+4. **Cross-reference with `npm audit`** when available. If the target repo has a `package-lock.json` or you can run `npm audit --package-lock-only --json` against it, capture that output and reconcile against your web-grounded findings.\n+5. **Score severity.** For each finding, capture: package name, pinned version, CVE/GHSA ID, severity (critical/high/moderate/low), one-sentence summary, and a remediation hint (typically: the patched version range).\n+6. **Disagreement check.** If a structural-briefing input is provided (e.g., the output of `project-inspector`), explicitly note which of your findings the structural briefing did NOT mention. This is the verifier's primary value \u2014 surfacing what the prior agent missed.\n+7. **Emit the report.**\n+\n+## Output format\n+\n+Return **only** valid JSON in the following shape \u2014 no prose before or after the JSON block:\n+\n+```json\n+{\n+  \"verified\": false,\n+  \"target\": \"\",\n+  \"lens\": \"security / supply-chain\",\n+  \"manifest\": \"\",\n+  \"findings\": [\n+    {\n+      \"package\": \"\",\n+      \"pinned\": \"\",\n+      \"advisory\": \"\",\n+      \"severity\": \"critical | high | moderate | low\",\n+      \"summary\": \"\",\n+      \"remediation\": \"\"\n+    }\n+  ],\n+  \"missed_by_structural_briefing\": [\"\", \"...\"],\n+  \"recommendation\": \"&lt;2\u20133 sentence summary of risk posture and what to do next&gt;\"\n+}\n+```\n+\n+Set `verified: true` only when there are zero findings of severity `high` or `critical`. Otherwise `verified: false`.\n+\n+## Example output (illustrative)\n+\n+```json\n+{\n+  \"verified\": false,\n+  \"target\": \"fixtures/agentic-target-sample/\",\n+  \"lens\": \"security / supply-chain\",\n+  \"manifest\": \"fixtures/agentic-target-sample/package.json\",\n+  \"findings\": [\n+    {\n+      \"package\": \"axios\",\n+      \"pinned\": \"0.21.0\",\n+      \"advisory\": \"CVE-2020-28168\",\n+      \"severity\": \"high\",\n+      \"summary\": \"Server-Side Request Forgery via maliciously-crafted URLs in axios &lt;0.21.1.\",\n+      \"remediation\": \"Upgrade to axios &gt;=0.21.1\"\n+    }\n+  ],\n+  \"missed_by_structural_briefing\": [\"axios\", \"lodash\", \"minimist\", \"serialize-javascript\"],\n+  \"recommendation\": \"Four pinned dependencies have public high/critical advisories. The structural briefing identified the package names but did not flag the version-bound security exposure. Upgrade or pin to the indicated remediation ranges before shipping.\"\n+}\n+```\n+\n+## Constraints\n+\n+- **Never fabricate CVEs.** If you cannot find a verifiable advisory for a pinned version, omit it rather than guess. It is better to under-report than to fabricate.\n+- **Cite the advisory ID.** Every finding must reference a real, lookup-able advisory ID (CVE or GHSA). If no ID is available, do not include the finding.\n+- **Pinned-exact-versions are the focus.** Range-constrained deps (`^1.2.3`, `~4.5.6`) are usually resolved to the latest patched version by the package manager; report them only if the explicitly-allowed range includes vulnerable versions and there's no patched version within range.\n+- **Be honest about limits.** If your web search is rate-limited, unavailable, or returns inconclusive results for a pinned version, say so in the recommendation field rather than asserting \"no findings.\"\n+- **Do not echo secrets.** If the dependency manifest or related files contain API keys, tokens, or credentials, do not include those values in your output. This skill audits dependencies, not secret-handling.\n+- **Do not modify the target repo.** This skill is read-only with respect to the target.\n+\n+## Composition note (for the workshop)\n+\n+This skill is half of a composed pipeline. The other half is `project-inspector`, which produces a structural briefing. Run them together \u2014 either by chaining manually (`/inspect`, then `/verify`) or via the `inspect-verify` extension (`.pi/extensions/inspect-verify.ts`), which triggers this skill automatically after an inspector run.\n+\n+The pedagogical point: *no single skill catches everything.* The Inspector's spec doesn't ask for security posture. The Verifier's spec doesn't ask for architecture. Composed, they cover what either alone would miss. That's agentic engineering at the workflow altitude.\ndiff --git a/AGENTS.md b/AGENTS.md\nnew file mode 100644\nindex 0000000..9494243\n--- /dev/null\n+++ b/AGENTS.md\n@@ -0,0 +1,47 @@\n+# AGENTS.md \u2014 AI Engineering Workshop\n+\n+&gt; Project instructions loaded automatically by Pi (`pi.dev`) at session start. Pi reads `AGENTS.md` from `~/.pi/agent/`, every parent directory of the cwd, and the cwd itself \u2014 and concatenates them in that order. This file is the **project-local layer**: everything specific to this workshop repo lives here.\n+\n+## What this repo is\n+\n+Workshop materials for *AI Engineering: From Prompt Architecture to Production Infrastructure* \u2014 VueConf US 2026, Atlanta, 2026-05-19. Four blocks (see [README.md](README.md)). Block 3 is the Pi / agentic-engineering block; the `.pi/` directory below holds its skills + extensions.\n+\n+## Where things live\n+\n+| Path | What |\n+|------|------|\n+| `.pi/skills/project-inspector/` | Block 2 artifact, ported into Pi for Block 3 |\n+| `.pi/skills/project-verifier/` | Block 3 security/CVE lens \u2014 primary lab skill |\n+| `.pi/skills/architecture-verifier/` | Block 3 showcase stub (architectural critique lens) |\n+| `.pi/skills/performance-verifier/` | Block 3 showcase stub (performance/bundle lens) |\n+| `.pi/extensions/inspect-verify.ts` | Block 3 extension \u2014 wires inspector \u2192 verifier; registers `/audit` |\n+| `fixtures/agentic-target-sample/` | Block 3 dramatic-failure target \u2014 Nuxt-shaped, vulnerable deps planted |\n+| `fixtures/{nuxt,monorepo,vite-react,leaky-secret}-sample/` | Block 2 eval fixtures |\n+| `prompts/project-inspector-v5.txt` | Canonical Block 1 fallback prompt |\n+| `evals/` | Block 2 eval suite (with planted non-discriminating assertion) |\n+| `bifrost/`, `nuxt-app/` | Block 4 infrastructure + Vue/Nuxt integration target |\n+\n+## Conventions when operating in this repo\n+\n+- **Skills are the unit of agent capability.** A new lens (security / architecture / performance / etc.) lives as a new skill under `.pi/skills//`. Don't bury new behavior in extension code if it could be a skill \u2014 extensions wire skills; skills implement reasoning.\n+- **Extensions wire, skills reason.** Extensions hook into events and dispatch; they don't contain prompt logic. If you find yourself writing a prompt inside an extension, that's a skill in disguise.\n+- **One JSON shape per verifier.** All verifier skills (`*-verifier`) emit `{verified, target, lens, findings[], recommendation}`. Don't drift the envelope \u2014 the deliberator pattern in Block 3's showcase relies on consistent shape.\n+- **Never echo secrets.** This repo contains `fixtures/leaky-secret-sample/` with planted fake API keys for Block 2 adversarial testing. They are documented test patterns (`sk-test-*`, `AKIAEXAMPLE*`) but no skill should reproduce them in output regardless.\n+- **Honest scoping.** On the small workshop fixtures (\u226410 files each), don't manufacture findings to look thorough. A clean lens is a valid result.\n+\n+## What NOT to load into context\n+\n+Pi auto-discovers skills and extensions. Be deliberate about what runs:\n+\n+- `node_modules/`, `.nuxt/`, `.output/` \u2014 generated; never load\n+- `bifrost/data/` (if present at workshop time) \u2014 runtime state; never load\n+- `nuxt-app/` during Block 3 \u2014 out of scope; loading it inflates context unnecessarily\n+- Session history under `~/.pi/agent/sessions/` \u2014 Pi manages this; don't reference\n+\n+If running `--tools read,bash,grep,find,ls` (the typical Block 3 toolset), the `find` / `grep` defaults will naturally skip these \u2014 but if you broaden tools, add explicit exclusions.\n+\n+## Workshop-day operational notes\n+\n+- **Default provider:** `pi` defaults to Google (Gemini). Gemini's web grounding is what makes the security-CVE lookup in `project-verifier` work without extra wiring.\n+- **Print mode (`-p`) caveat:** `--print` exits after one `agent_end`. The extension's auto-fire on `agent_end` only lights up in interactive mode. The `/audit` slash command works in both modes \u2014 use it when scripting.\n+- **Pre-staged extensions:** `.pi/extensions/inspect-verify.ts` is auto-loaded by Pi when run from the repo root. Override with `-e ` if loading from elsewhere.\ndiff --git a/README.md b/README.md\nindex 8d69258..d4d1d49 100644\n--- a/README.md\n+++ b/README.md\n@@ -12,7 +12,7 @@ Workshop materials for four blocks of hands-on AI engineering:\n |---|---|---|\n | **1** | Foundations | Write a v5 prompt for the Project Inspector running example |\n | **2** | Build &amp; Eval a Skill | Promote the prompt to a working skill via the `skill-creator` plugin; run the eval loop; learn to *evaluate the eval* |\n-| **3** | Vibe Coding \u2192 Agentic Engineering | (Instructor's separate materials) |\n+| **3** | Vibe Coding \u2192 Agentic Engineering | Port your Block 2 skill into Pi; compose it with a verifier skill and a hook extension; watch the system catch what one skill alone misses |\n | **4** | AI Gateway (Production) | Configure Bifrost; tour the production-gateway surface; integrate with a Vue/Nuxt app |\n \n ## Quick start\n@@ -34,17 +34,26 @@ See the [Prerequisites](#) (handed out separately). Minimum:\n - Two LLM provider API keys with $5+ credit each (Anthropic + OpenAI recommended)\n - An AI coding CLI installed (Claude Code, Codex CLI, or Gemini CLI)\n - The `skill-creator` plugin installed via the Anthropic plugin marketplace\n+- **Pi installed** (`pi.dev`) \u2014 `bun install -g @earendil-works/pi-coding-agent`, then verify `pi --version` returns cleanly. (Block 3 runtime.)\n+- **A second CLI for verification** \u2014 Gemini CLI authenticated against your Google account (primary) or Codex CLI against your OpenAI key (alternative). Used by Block 3's verifier skill.\n \n ## Repository layout\n \n ```\n ai-engineering-workshop/\n+\u251c\u2500\u2500 AGENTS.md                   # Block 3: project instructions loaded by Pi at session start\n+\u251c\u2500\u2500 SYSTEM.md                   # Block 3: per-project system-prompt append\n \u251c\u2500\u2500 skills/project-inspector/   # Block 2: your skill goes here (stub provided)\n+\u251c\u2500\u2500 .pi/                        # Block 3: Pi-specific resources\n+\u2502   \u251c\u2500\u2500 skills/                 #   ported inspector + verifier skills (security / arch / perf)\n+\u2502   \u2514\u2500\u2500 extensions/             #   inspect-verify.ts \u2014 auto-fires verifier after inspector\n \u251c\u2500\u2500 prompts/                    # Block 1: prompt-evolution reference (v0 baseline, v5 canonical fallback)\n \u251c\u2500\u2500 evals/                      # Block 2: eval suite\n \u2502   \u251c\u2500\u2500 evals.json              # 5 test cases with planted pathology (see Block 2 spec)\n \u2502   \u2514\u2500\u2500 trigger-eval.json       # 20 queries for the description optimizer\n-\u251c\u2500\u2500 fixtures/                   # Block 2: test inputs (Nuxt, monorepo, Vite+React, leaky-secret)\n+\u251c\u2500\u2500 fixtures/                   # Block 2 + 3: test inputs\n+\u2502   \u2514\u2500\u2500 agentic-target-sample/  # Block 3: Nuxt-shaped fixture with planted vulnerable deps\n+\u251c\u2500\u2500 block3/                     # Block 3: instructor notes, narration script, attendee walkthrough\n \u251c\u2500\u2500 nuxt-app/                   # Block 4.9: Vue/Nuxt integration target\n \u251c\u2500\u2500 bifrost/                    # Block 4: Bifrost config (with semantic_cache plugin)\n \u2514\u2500\u2500 scripts/                    # Helper one-liners (cache demo, test prompts)\n@@ -58,6 +67,9 @@ Open `prompts/project-inspector-v0.txt` and walk it through the 5-layer enhancem\n **Block 2 \u2014 Build &amp; Eval a Skill (morning, after break)**\n Open `skills/project-inspector/SKILL.md`. Paste your v5 from Block 1. Then run the `skill-creator` plugin against the `evals/` and `fixtures/` directories. The plugin will spawn parallel with-skill and baseline runs, grade them, and open a viewer. **Watch the Benchmark tab.** Something's planted in case 0 \u2014 the analyzer pass will tell you what.\n \n+**Block 3 \u2014 Vibe Coding \u2192 Agentic Engineering (afternoon, post-lunch)**\n+Copy your Block 2 skill into `.pi/skills/project-inspector/`. Launch `pi` from the repo root and inspect `fixtures/agentic-target-sample/`. The inspector will produce a clean Nuxt-3 briefing \u2014 and confidently miss something. We'll find the lie together, install the verifier skill, wire the `.pi/extensions/inspect-verify.ts` hook so the verifier fires automatically, and finish with the `AGENTS.md` / `SYSTEM.md` hygiene primitives. Attendee-facing walkthrough lives at [`block3/README.md`](block3/README.md).\n+\n **Block 4 \u2014 AI Gateway (afternoon)**\n Boot Bifrost: `npm run bifrost`. Configure providers, models, a Virtual Key, a budget, a routing rule, and the semantic cache. Then `cd nuxt-app &amp;&amp; npm install &amp;&amp; npm run dev` and wire the Vue app to your gateway.\n \ndiff --git a/SYSTEM.md b/SYSTEM.md\nnew file mode 100644\nindex 0000000..ad712c3\n--- /dev/null\n+++ b/SYSTEM.md\n@@ -0,0 +1,11 @@\n+# SYSTEM.md \u2014 AI Engineering Workshop\n+\n+&gt; Optional per-project system-prompt **append** for Pi. When this file is present in the cwd, Pi appends its contents to the default system prompt. Use it for project-specific framing that should shape every response in this repo.\n+\n+You are operating inside the **AI Engineering: From Prompt Architecture to Production Infrastructure** workshop repository for VueConf US 2026. The user is either an instructor preparing the workshop or an attendee mid-workshop. Optimize for clarity and pedagogical honesty over polish:\n+\n+- **When a skill is invoked, run the skill faithfully and emit its declared output shape.** Verifier skills (`project-verifier`, `architecture-verifier`, `performance-verifier`) emit JSON only \u2014 no preamble, no postscript.\n+- **When composing skills (e.g., via `/audit`), run them in declared order and present each output verbatim.** Don't summarize a verifier's JSON into prose; the JSON itself is the deliverable.\n+- **Honest scoping over performative thoroughness.** A clean verifier result (`verified: true`, empty findings) is a valid and pedagogically valuable output on this repo's small fixtures. Don't manufacture concerns to look diligent.\n+- **Cite, never fabricate, advisories.** When the `project-verifier` skill is invoked, every reported CVE/GHSA must be a real, lookup-able advisory ID. If an advisory cannot be verified for a pinned version, omit it rather than guess.\n+- **Skill boundaries are pedagogical, not legal.** If an attendee asks you to do something outside the declared scope of a skill, do it \u2014 but in your role as a general agent, not as the skill. Note the role shift briefly so attendees see the boundary working.\ndiff --git a/block3/README.md b/block3/README.md\nnew file mode 100644\nindex 0000000..08dafd2\n--- /dev/null\n+++ b/block3/README.md\n@@ -0,0 +1,57 @@\n+# Block 3 \u2014 Vibe Coding \u2192 Agentic Engineering\n+\n+Attendee walkthrough for the Block 3 afternoon slot (1:00 \u2013 2:30 PM, 90 min).\n+\n+&gt; **Thesis:** How working engineers move from vibe coding to agentic engineering. Same skill, new altitude.\n+\n+## What you'll do\n+\n+1. **Port** your Block 2 Project Inspector skill into Pi\n+2. **Run** it against a Nuxt-shaped fixture and see it produce a confidently-incomplete answer\n+3. **Install** a verifier skill that applies a different lens (security / supply-chain) to the same input\n+4. **Wire** a Pi extension (`.ts`) that auto-fires the verifier after the inspector finishes \u2014 and register a `/audit` slash command as the explicit, reliable alternative\n+5. **Drop in** `AGENTS.md` and `SYSTEM.md` \u2014 Pi's project-scoped hygiene primitives\n+6. **Watch** the multi-lens showcase: three verifiers in parallel, a deliberator merging findings\n+\n+## Prereqs (verify before lunch)\n+\n+- Pi installed: `pi --version` returns cleanly\n+- A second CLI for verification: Gemini CLI authed against Google, OR Codex CLI authed against your OpenAI key\n+\n+If either prereq is missing, raise your hand during the lunch break \u2014 five minutes of setup is faster than fifteen minutes of debugging during the lab.\n+\n+## Files you'll touch\n+\n+| Path | What |\n+|------|------|\n+| `.pi/skills/project-inspector/SKILL.md` | Where you copy your Block 2 skill |\n+| `.pi/skills/project-verifier/SKILL.md` | Pre-staged \u2014 the security/CVE lens |\n+| `.pi/extensions/inspect-verify.ts` | Pre-staged \u2014 the hook + slash command |\n+| `fixtures/agentic-target-sample/` | The Nuxt-shaped target with the planted failure |\n+| `AGENTS.md`, `SYSTEM.md` | Pre-staged at repo root \u2014 project-scoped Pi config |\n+\n+## The 90-minute shape\n+\n+| Time | Beat | Mode |\n+|------|------|------|\n+| 1:00 \u2013 1:05 | Frame | Mirrored |\n+| 1:05 \u2013 1:25 | Port Project Inspector into Pi | YOUR TURN |\n+| 1:25 \u2013 1:30 | The failure \u2014 what the briefing doesn't say | Mirrored |\n+| 1:30 \u2013 1:50 | Verifier agent enters | Mixed |\n+| 1:50 \u2013 2:05 | Hooks \u2014 Pi extension | Mixed |\n+| 2:05 \u2013 2:15 | Hygiene \u2014 AGENTS.md + SYSTEM.md | Mixed |\n+| 2:15 \u2013 2:23 | Showcase \u2014 pattern extended (3 verifiers + deliberator) | Demo |\n+| 2:23 \u2013 2:27 | Showcase \u2014 roundtable cameo | Demo |\n+| 2:27 \u2013 2:30 | Q&amp;A | Conversation |\n+\n+## What you take home\n+\n+A repo you can use as a template:\n+\n+- One inspector skill + one verifier skill + one extension that wires them\n+- An `AGENTS.md` and `SYSTEM.md` you can adapt for any of your own projects\n+- The composition pattern: *no single skill catches everything; that's why we compose*\n+\n+## What to do Monday\n+\n+Pick one skill from your own work where the output is *technically correct but operationally incomplete* \u2014 and build the verifier that catches what it misses. Same pattern. Same primitives. Different domain.\ndiff --git a/fixtures/agentic-target-sample/README.md b/fixtures/agentic-target-sample/README.md\nnew file mode 100644\nindex 0000000..468efe0\n--- /dev/null\n+++ b/fixtures/agentic-target-sample/README.md\n@@ -0,0 +1,59 @@\n+# agentic-target-sample\n+\n+&gt; \u26a0\ufe0f **Instructor-facing.** Do NOT share this README with attendees pre-workshop. The Block 3 dramatic-failure beat depends on attendees not knowing what's planted.\n+\n+A Nuxt-shaped fixture used as the **Block 3 \"skills can lie\" target.** Structurally identical to `nuxt-sample/`; differs only in `package.json`, which pins a stack of well-documented vulnerable transitive dependencies.\n+\n+## Structure\n+\n+```\n+agentic-target-sample/\n+\u251c\u2500\u2500 package.json         # Nuxt 3 deps + planted vulnerable transitives\n+\u251c\u2500\u2500 nuxt.config.ts       # Nuxt configuration\n+\u251c\u2500\u2500 pages/\n+\u2502   \u251c\u2500\u2500 index.vue\n+\u2502   \u2514\u2500\u2500 about.vue\n+\u251c\u2500\u2500 components/\n+\u2502   \u2514\u2500\u2500 Header.vue\n+\u2514\u2500\u2500 composables/\n+    \u2514\u2500\u2500 useExample.ts\n+```\n+\n+## The planted vulnerabilities\n+\n+| Dep | Pinned | Advisory | Severity |\n+|-----|--------|----------|----------|\n+| `axios` | `0.21.0` | CVE-2020-28168 (SSRF) | High |\n+| `lodash` | `4.17.20` | CVE-2021-23337 (command injection) | High |\n+| `minimist` | `1.2.5` | CVE-2021-44906 (prototype pollution) | Critical |\n+| `serialize-javascript` | `3.0.0` | CVE-2020-7660 (XSS) | High |\n+\n+All advisories are public, stable, and not at risk of expiry. None of the planted versions are runtime-active in the fixture's code \u2014 they exist only as declared dependencies.\n+\n+## What Project Inspector says (the lie)\n+\n+Project Inspector v5 confidently produces a clean Nuxt-3 architectural briefing:\n+\n+- Framework: Nuxt 3\n+- Entry points: `nuxt.config.ts`, `pages/index.vue`, `pages/about.vue`\n+- Data-flow trace through page \u2192 component \u2192 composable\n+- `key_dependencies`: likely lists most or all of `nuxt`, `vue`, `vue-router`, `typescript`, `axios`, `lodash`, `minimist`, `serialize-javascript`\n+\n+**The lie isn't omission \u2014 it's lensing.** Inspector lists the dependency *names* (per its spec) but reports **no version context** and **no security posture**. Its output schema is `[\"\", ...]` \u2014 names only. A reader looking at Inspector's briefing has no signal that four of those deps are pinned at exact versions with public high/critical CVEs.\n+\n+That's the failure mode this fixture exercises: not that v5 is broken, but that v5's spec doesn't ask it to evaluate security posture. The discipline of *agentic engineering* is composing past that limit, not training one skill to do everything.\n+\n+## What Project Verifier catches\n+\n+`.pi/skills/project-verifier/` reads `package.json`, identifies the pinned exact versions, and uses Gemini's web grounding to look up CVE advisories per pinned version. Output flags all four planted vulns with severity and advisory ID.\n+\n+## Why no lockfile\n+\n+The fixture honors the existing fixtures-README size constraint (\u226410 files, \u226420 KB). A real `package-lock.json` for a Nuxt project would blow the budget. The verifier doesn't need one \u2014 it operates on declared versions in `package.json` plus web-grounded CVE lookup, which is the lesson: *a verifier can use a different lens (the web, an external CLI, a different model) to catch what your local-only skill cannot.*\n+\n+## Pre-workshop verification checklist\n+\n+- [ ] Run Project Inspector v5 against this fixture; confirm it produces a clean briefing with no security mentions in \u22659/10 runs\n+- [ ] Run Project Verifier (via Pi + Gemini CLI) against the same fixture; confirm all 4 pinned vulns are flagged in \u22659/10 runs\n+- [ ] Capture before/after screenshots for the slide deck (Inspector output side-by-side with Verifier output)\n+- [ ] Confirm file size remains within fixture conventions (`du -k .`)\ndiff --git a/fixtures/agentic-target-sample/components/Header.vue b/fixtures/agentic-target-sample/components/Header.vue\nnew file mode 100644\nindex 0000000..ce316ba\n--- /dev/null\n+++ b/fixtures/agentic-target-sample/components/Header.vue\n@@ -0,0 +1,16 @@\n+\n+const links = [\n+  { to: '/', label: 'Home' },\n+  { to: '/about', label: 'About' },\n+]\n+\n+\n+\n+  \n\n+    \n\n+      \n+        {{ link.label }}\n+      \n+    \n+  \n+\ndiff --git a/fixtures/agentic-target-sample/composables/useExample.ts b/fixtures/agentic-target-sample/composables/useExample.ts\nnew file mode 100644\nindex 0000000..54ecd8c\n--- /dev/null\n+++ b/fixtures/agentic-target-sample/composables/useExample.ts\n@@ -0,0 +1,4 @@\n+export const useExample = () =&gt; {\n+  const greeting = ref('Hello from the Nuxt sample fixture')\n+  return { greeting }\n+}\ndiff --git a/fixtures/agentic-target-sample/nuxt.config.ts b/fixtures/agentic-target-sample/nuxt.config.ts\nnew file mode 100644\nindex 0000000..0b5183f\n--- /dev/null\n+++ b/fixtures/agentic-target-sample/nuxt.config.ts\n@@ -0,0 +1,14 @@\n+// https://nuxt.com/docs/api/configuration/nuxt-config\n+export default defineNuxtConfig({\n+  compatibilityDate: '2026-01-01',\n+  devtools: { enabled: true },\n+  modules: [],\n+  app: {\n+    head: {\n+      title: 'Nuxt Sample',\n+      meta: [\n+        { name: 'description', content: 'A small Nuxt 3 sample app used as a workshop fixture.' },\n+      ],\n+    },\n+  },\n+})\ndiff --git a/fixtures/agentic-target-sample/package.json b/fixtures/agentic-target-sample/package.json\nnew file mode 100644\nindex 0000000..bb34d2e\n--- /dev/null\n+++ b/fixtures/agentic-target-sample/package.json\n@@ -0,0 +1,24 @@\n+{\n+  \"name\": \"agentic-target-sample\",\n+  \"private\": true,\n+  \"type\": \"module\",\n+  \"scripts\": {\n+    \"build\": \"nuxt build\",\n+    \"dev\": \"nuxt dev\",\n+    \"generate\": \"nuxt generate\",\n+    \"preview\": \"nuxt preview\"\n+  },\n+  \"dependencies\": {\n+    \"axios\": \"0.21.0\",\n+    \"lodash\": \"4.17.20\",\n+    \"minimist\": \"1.2.5\",\n+    \"serialize-javascript\": \"3.0.0\"\n+  },\n+  \"devDependencies\": {\n+    \"@nuxt/devtools\": \"latest\",\n+    \"nuxt\": \"^3.13.0\",\n+    \"typescript\": \"^5.5.0\",\n+    \"vue\": \"^3.5.0\",\n+    \"vue-router\": \"^4.4.0\"\n+  }\n+}\ndiff --git a/fixtures/agentic-target-sample/pages/about.vue b/fixtures/agentic-target-sample/pages/about.vue\nnew file mode 100644\nindex 0000000..7be546c\n--- /dev/null\n+++ b/fixtures/agentic-target-sample/pages/about.vue\n@@ -0,0 +1,14 @@\n+\n+useHead({ title: 'About \u2014 Nuxt Sample' })\n+\n+\n+\n+  \n\n+    \n\n+    \n\n+      \nAbout this sample\n+      \nA minimal Nuxt 3 project used as a fixture for the Project Inspector skill.\n+      Home\n+    \n+  \n+\ndiff --git a/fixtures/agentic-target-sample/pages/index.vue b/fixtures/agentic-target-sample/pages/index.vue\nnew file mode 100644\nindex 0000000..a847a1b\n--- /dev/null\n+++ b/fixtures/agentic-target-sample/pages/index.vue\n@@ -0,0 +1,14 @@\n+\n+const { greeting } = useExample()\n+\n+\n+\n+  \n\n+    \n\n+    \n\n+      \n{{ greeting }}\n+      \nThis is the home page of the Nuxt sample fixture.\n+      About\n+    \n+  \n+\n-- \n2.43.0\n\n", "creation_timestamp": "2026-05-19T01:47:50.000000Z"}, {"uuid": "3dc4d444-c2b6-49a4-850d-889b981b3a61", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2021-23337", "type": "seen", "source": "https://gist.github.com/fuuuuuuma/d3be325acdce29a682e90b988c51624f", "content": "# Google I/O 2026 \u5b8c\u5168\u30ac\u30a4\u30c9\uff1aGoogle\u306eAI\u6700\u65b0\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u7dcf\u307e\u3068\u3081\uff082026\u5e745\u6708\uff09\n\n&gt; **\u4f5c\u6210\u65e5**: 2026\u5e745\u670820\u65e5  \n&gt; **\u5bfe\u8c61\u30a4\u30d9\u30f3\u30c8**: Google I/O 2026\uff082026\u5e745\u670819\u65e5\u301c\uff09  \n&gt; **\u6587\u66f8\u6982\u8981**: Google I/O 2026\u3067\u767a\u8868\u3055\u308c\u305fAI\u30fb\u30d7\u30ed\u30c0\u30af\u30c8\u30fb\u958b\u767a\u8005\u5411\u3051\u306e\u5168\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3092\u4f53\u7cfb\u7684\u306b\u6574\u7406\u3057\u3001\u5404\u6a5f\u80fd\u306e\u6982\u8981\u30fb\u5177\u4f53\u7684\u306a\u7528\u9014\u30fb\u30d7\u30ed\u30f3\u30d7\u30c8\u4f8b\u3092\u89e3\u8aac\u3059\u308b\u5b9f\u8df5\u7684\u30ac\u30a4\u30c9\u3067\u3059\u3002\n\n---\n\n## \u76ee\u6b21\n\n1. [Google I/O 2026 \u5168\u4f53\u50cf\u3068\u80cc\u666f](#1-google-io-2026-\u5168\u4f53\u50cf\u3068\u80cc\u666f)\n2. [Gemini 3.5 Flash\uff1a\u30d5\u30ed\u30f3\u30c6\u30a3\u30a2\u306e\u901f\u5ea6\u9769\u547d](#2-gemini-35-flash)\n3. [Gemini 2.5 Pro Deep Think\uff1a\u6700\u9ad8\u96e3\u5ea6\u306e\u63a8\u8ad6\u30e2\u30fc\u30c9](#3-gemini-25-pro-deep-think)\n4. [Google AI \u30d7\u30e9\u30f3\u518d\u7de8\uff1a$250\u2192$200 + \u65b0$100\u30d7\u30e9\u30f3](#4-google-ai\u30d7\u30e9\u30f3\u518d\u7de8)\n5. [Gemini Spark\uff1a\u521d\u306e\u672c\u683c\u30d1\u30fc\u30bd\u30ca\u30ebAI\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8](#5-gemini-spark)\n6. [Gemini\u30a8\u30af\u30b9\u30da\u30ea\u30a8\u30f3\u30b9\u518d\u8a2d\u8a08\uff08Neural Expressive\uff09](#6-gemini\u30a8\u30af\u30b9\u30da\u30ea\u30a8\u30f3\u30b9\u518d\u8a2d\u8a08)\n7. [Gemini Omni\uff1a\u30de\u30eb\u30c1\u30e2\u30fc\u30c0\u30eb\u5275\u9020\u30a8\u30f3\u30b8\u30f3](#7-gemini-omni)\n8. [Daily Brief\uff1a\u30d1\u30fc\u30bd\u30ca\u30e9\u30a4\u30ba\u3055\u308c\u305f\u6bce\u65e5\u306eAI\u30c0\u30a4\u30b8\u30a7\u30b9\u30c8](#8-daily-brief)\n9. [Gemini\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u30a2\u30d7\u30ea\u5f37\u5316](#9-gemini\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u30a2\u30d7\u30ea\u5f37\u5316)\n10. [Antigravity 2.0\uff1a\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u30d5\u30a1\u30fc\u30b9\u30c8\u958b\u767a\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0](#10-antigravity-20)\n11. [Google AI Studio \u00d7 Google Workspace \u7d71\u5408](#11-google-ai-studio--google-workspace-\u7d71\u5408)\n12. [Android XR \u30b9\u30de\u30fc\u30c8\u30a2\u30a4\u30a6\u30a7\u30a2](#12-android-xr-\u30b9\u30de\u30fc\u30c8\u30a2\u30a4\u30a6\u30a7\u30a2)\n13. [Google Flow 2.0\uff1aAI\u52d5\u753b\u5236\u4f5c\u306e\u9032\u5316](#13-google-flow-20)\n14. [Stitch by Google\uff1a\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0AI\u30c7\u30b6\u30a4\u30f3\u30c4\u30fc\u30eb](#14-stitch-by-google)\n15. [Google Pics\uff1aWorkspace\u5185\u306e\u753b\u50cf\u751f\u6210\u30fb\u7de8\u96c6](#15-google-pics)\n16. [Universal Cart\uff1aAI\u30b7\u30e7\u30c3\u30d4\u30f3\u30b0\u4f53\u9a13](#16-universal-cart)\n17. [Google Search AI Mode \u5f37\u5316](#17-google-search-ai-mode-\u5f37\u5316)\n18. [Ask YouTube\uff1aAI\u304c\u52d5\u753b\u3092\u63a8\u85a6\u30fb\u8981\u7d04](#18-ask-youtube)\n19. [Android 17 / Gemini Intelligence\uff1aAI\u30cd\u30a4\u30c6\u30a3\u30d6OS\u5316](#19-android-17--gemini-intelligence)\n20. [Jules\uff1a\u975e\u540c\u671f\u81ea\u5f8b\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8](#20-jules)\n21. [Google Vids / Veo 3.1 / Lyria 3\uff1aWorkspace\u306e\u52d5\u753b\u5236\u4f5c\u9769\u547d](#21-google-vids--veo-31--lyria-3)\n22. [NotebookLM\uff1aAI\u30ea\u30b5\u30fc\u30c1\u30d1\u30fc\u30c8\u30ca\u30fc\u306e\u9032\u5316](#22-notebooklm)\n23. [\u307e\u3068\u3081\uff1aGoogle I/O 2026\u304c\u793a\u3059AI\u306e\u672a\u6765](#23-\u307e\u3068\u3081)\n\n---\n\n## 1. Google I/O 2026 \u5168\u4f53\u50cf\u3068\u80cc\u666f\n\n### 1.1 \u30a4\u30d9\u30f3\u30c8\u6982\u8981\n\n2026\u5e745\u670819\u65e5\u306b\u958b\u5e55\u3057\u305fGoogle I/O 2026\u306f\u3001Google\u304c\u6bce\u5e74\u958b\u50ac\u3059\u308b\u958b\u767a\u8005\u5411\u3051\u306e\u6700\u5927\u30a4\u30d9\u30f3\u30c8\u3067\u3059\u3002\u4eca\u5e74\u306eGoogle I/O\u306f\u4f8b\u5e74\u306b\u3082\u5897\u3057\u3066\u6fc3\u5bc6\u306a\u767a\u8868\u304c\u76f8\u6b21\u304e\u3001AI\u30e2\u30c7\u30eb\u306e\u6027\u80fd\u9769\u65b0\u3001\u30d7\u30ed\u30c0\u30af\u30c8\u306e\u5927\u5e45\u30ea\u30c7\u30b6\u30a4\u30f3\u3001\u65b0\u305f\u306a\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u6a5f\u80fd\u3001\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u53c2\u5165\u3068\u5e45\u5e83\u3044\u5206\u91ce\u306b\u308f\u305f\u308a\u307e\u3057\u305f\u3002\n\n\u30ad\u30fc\u30ce\u30fc\u30c8\u3067CEO\u306eSundar Pichai\u6c0f\u304c\u767b\u58c7\u3057\u3001\u300cAI\u30d5\u30a1\u30fc\u30b9\u30c8\u306e\u6642\u4ee3\u304b\u3089\u3001AI\u30cd\u30a4\u30c6\u30a3\u30d6\u306e\u6642\u4ee3\u3078\u300d\u3068\u3044\u3046\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u6253\u3061\u51fa\u3057\u307e\u3057\u305f\u3002\u5358\u306a\u308b\u30a2\u30b7\u30b9\u30bf\u30f3\u30c8\u304b\u3089\u300c\u3042\u306a\u305f\u306b\u4ee3\u308f\u3063\u3066\u884c\u52d5\u3059\u308b\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u300d\u3078\u3068\u3044\u3046\u8ee2\u63db\u304c\u4eca\u5e74\u306e\u6700\u5927\u306e\u30c6\u30fc\u30de\u3067\u3059\u3002\n\n### 1.2 \u4eca\u5e74\u306e3\u5927\u30c6\u30fc\u30de\n\n**\u30c6\u30fc\u30de1\uff1a\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u5316\uff08Agentic AI\uff09**  \nGoogle\u306fGemini\u3092\u30b7\u30f3\u30d7\u30eb\u306a\u8cea\u554f\u5fdc\u7b54AI\u304b\u3089\u3001\u30e1\u30fc\u30eb\u3092\u9001\u308a\u3001\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u3092\u7ba1\u7406\u3057\u3001PC\u3092\u64cd\u4f5c\u3059\u308b\u300c\u81ea\u5f8b\u7684\u306a\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u300d\u3078\u3068\u9032\u5316\u3055\u305b\u308b\u3053\u3068\u3092\u6700\u512a\u5148\u8ab2\u984c\u3068\u3057\u3066\u3044\u307e\u3059\u3002Gemini Spark\u306f\u305d\u306e\u8c61\u5fb4\u7684\u30d7\u30ed\u30c0\u30af\u30c8\u3067\u3059\u3002\n\n**\u30c6\u30fc\u30de2\uff1a\u30de\u30eb\u30c1\u30e2\u30fc\u30c0\u30eb\u306e\u6df1\u5316**  \n\u30c6\u30ad\u30b9\u30c8\u30fb\u753b\u50cf\u30fb\u97f3\u58f0\u30fb\u52d5\u753b\u3092\u6a2a\u65ad\u3057\u3066\u5165\u51fa\u529b\u3067\u304d\u308b\u80fd\u529b\u304c\u683c\u6bb5\u306b\u5411\u4e0a\u3057\u307e\u3057\u305f\u3002Gemini Omni\u306f\u300c\u4f55\u3067\u3082\u5165\u529b\u3057\u3066\u3001\u4f55\u3067\u3082\u51fa\u529b\u3067\u304d\u308b\u300d\u30e2\u30c7\u30eb\u3068\u3057\u3066\u8a2d\u8a08\u3055\u308c\u3066\u3044\u307e\u3059\u3002\n\n**\u30c6\u30fc\u30de3\uff1a\u958b\u767a\u8005\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u306e\u62e1\u5f35**  \nAntigravity 2.0\u3068AI Studio\u306e\u7d71\u5408\u306b\u3088\u308a\u3001\u30d7\u30ed\u30c8\u30bf\u30a4\u30d7\u304b\u3089\u672c\u756a\u904b\u7528\u307e\u3067\u4e00\u6c17\u901a\u8cab\u3067\u958b\u767a\u3067\u304d\u308b\u74b0\u5883\u304c\u6574\u3044\u307e\u3057\u305f\u3002Google Workspace\u3068\u306e\u6df1\u3044\u9023\u643a\u3082\u5b9f\u73fe\u3057\u3066\u3044\u307e\u3059\u3002\n\n### 1.3 Gemini\u30a2\u30d7\u30ea\u306e\u30e6\u30fc\u30b6\u30fc\u898f\u6a21\n\nGoogle\u306fI/O 2026\u306e\u58c7\u4e0a\u3067Gemini\u30a2\u30d7\u30ea\u306e\u6708\u9593\u30a2\u30af\u30c6\u30a3\u30d6\u30e6\u30fc\u30b6\u30fc\u304c**9\u5104\u4eba**\u3092\u7a81\u7834\u3057\u305f\u3068\u767a\u8868\u3057\u307e\u3057\u305f\u3002\u308f\u305a\u304b\u6570\u5e74\u3067\u9a5a\u7570\u7684\u306a\u666e\u53ca\u3092\u9042\u3052\u3066\u304a\u308a\u3001ChatGPT\u3068\u306e\u7af6\u4e89\u306b\u304a\u3044\u3066\u3082\u5b58\u5728\u611f\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002\n\n### 1.4 \u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u4f7f\u3044\u65b9\n\n\u5404\u30bb\u30af\u30b7\u30e7\u30f3\u306f\u72ec\u7acb\u3057\u3066\u8aad\u3081\u308b\u3088\u3046\u8a2d\u8a08\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u958b\u767a\u8005\u5411\u3051\u306e\u6280\u8853\u8a73\u7d30\uff08Antigravity\u3001AI Studio\uff09\u304b\u3089\u3001\u4e00\u822c\u30e6\u30fc\u30b6\u30fc\u5411\u3051\u306e\u65b0\u6a5f\u80fd\uff08Spark\u3001Daily Brief\uff09\u307e\u3067\u3001\u76ee\u7684\u306b\u5fdc\u3058\u305f\u7ae0\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002\u307e\u305f\u5404\u6a5f\u80fd\u306b\u306f**\u30d7\u30ed\u30f3\u30d7\u30c8\u4f8b**\u3084**\u5177\u4f53\u7684\u306a\u6d3b\u7528\u30b7\u30fc\u30f3**\u3092\u63b2\u8f09\u3057\u3066\u3044\u307e\u3059\u306e\u3067\u3001\u5b9f\u969b\u306e\u696d\u52d9\u3084\u5275\u4f5c\u6d3b\u52d5\u3078\u306e\u5fdc\u7528\u306b\u304a\u5f79\u7acb\u3066\u304f\u3060\u3055\u3044\u3002\n\n---\n\n## 2. Gemini 3.5 Flash\n\n### 2.1 \u6982\u8981\n\nGemini 3.5 Flash\u306f\u30012026\u5e745\u670819\u65e5\uff08I/O\u5f53\u65e5\uff09\u306b\u6b63\u5f0f\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u305f\u3001Gemini 3.5\u30b7\u30ea\u30fc\u30ba\u306e\u6700\u521d\u306e\u30e2\u30c7\u30eb\u3067\u3059\u3002Google\u304c\u6253\u3061\u51fa\u3059\u3053\u306e\u30e2\u30c7\u30eb\u306e\u6700\u5927\u306e\u7279\u5fb4\u306f\u300c\u30d5\u30ed\u30f3\u30c6\u30a3\u30a2\u306e\u77e5\u6027\u3092\u3001Flash\u306e\u901f\u5ea6\u3068\u30b3\u30b9\u30c8\u3067\u300d\u3068\u3044\u3046\u70b9\u306b\u3042\u308a\u307e\u3059\u3002\u5f93\u6765\u306eFlash\u30b7\u30ea\u30fc\u30ba\u304c\u300c\u901f\u304f\u3066\u5b89\u3044\u304c\u6027\u80fd\u306f\u4e00\u6b69\u52a3\u308b\u300d\u3068\u3044\u3046\u4f4d\u7f6e\u4ed8\u3051\u3060\u3063\u305f\u306e\u306b\u5bfe\u3057\u30013.5 Flash\u306fGemini 3.1 Pro\u3092\u8907\u6570\u306e\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u3067\u8d85\u3048\u306a\u304c\u3089\u3001\u51e6\u7406\u901f\u5ea6\u306f\u7af6\u5408\u6700\u5148\u7aef\u30e2\u30c7\u30eb\u306e4\u500d\u3068\u3044\u3046\u9a5a\u7570\u7684\u306a\u30b9\u30da\u30c3\u30af\u3092\u8a87\u308a\u307e\u3059\u3002\n\n### 2.2 \u30d9\u30f3\u30c1\u30de\u30fc\u30af\u8a73\u7d30\n\n| \u30d9\u30f3\u30c1\u30de\u30fc\u30af | Gemini 3.5 Flash | Gemini 3.1 Pro | \u5099\u8003 |\n|------------|:----------------:|:--------------:|------|\n| Terminal-Bench 2.1 | **76.2%** | 70.3% | \u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u80fd\u529b |\n| MCP Atlas | **83.6%** | \u2014 | \u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u6027\u80fd |\n| CharXiv Reasoning | **84.2%** | \u2014 | \u6570\u5b66\u7684\u63a8\u8ad6 |\n| GDPval-AA | **1,656** | 1,317 | \u6c4e\u7528\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8 |\n| \u51e6\u7406\u901f\u5ea6 | **289 tokens/\u79d2** | \u2014 | \u7af6\u5408\u6bd44\u500d |\n| \u30b5\u30a4\u30d0\u30fc\u30d9\u30f3\u30c1\uff08\u9577\u8ddd\u96e2\uff09 | **+42%** | \u2014 | \u9577\u6587\u51e6\u7406 |\n| \u30c8\u30fc\u30af\u30f3\u4f7f\u7528\u52b9\u7387 | **-72%** | \u2014 | \u30b3\u30b9\u30c8\u52b9\u7387 |\n\n### 2.3 \u4fa1\u683c\n\n- **\u5165\u529b**: $1.50 / 1M\u30c8\u30fc\u30af\u30f3\n- **\u51fa\u529b**: $9.00 / 1M\u30c8\u30fc\u30af\u30f3\n\nGemini 3.1 Pro\u3068\u6bd4\u8f03\u3059\u308b\u3068\u5165\u529b\u3067\u7d0440%\u3001\u51fa\u529b\u3067\u3082\u7d0440%\u5b89\u304f\u3001\u30b3\u30b9\u30c8\u52b9\u7387\u304c\u5927\u5e45\u306b\u5411\u4e0a\u3057\u3066\u3044\u307e\u3059\u3002\n\n### 2.4 \u5229\u7528\u53ef\u80fd\u306a\u74b0\u5883\n\n- Gemini \u30a2\u30d7\u30ea\uff08iOS / Android / Web\uff09\n- Google AI Studio\n- Antigravity\n- Gemini API\uff08\u76f4\u63a5\u547c\u3073\u51fa\u3057\uff09\n- Google Search \u306e AI Mode\n\n### 2.5 \u5177\u4f53\u7684\u306a\u6d3b\u7528\u30b7\u30fc\u30f3\n\n**\u30b7\u30fc\u30f31: \u5927\u91cf\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u51e6\u7406**  \n\u6cd5\u52d9\u3001\u91d1\u878d\u3001\u533b\u7642\u306a\u3069\u306e\u30c9\u30e1\u30a4\u30f3\u3067\u81a8\u5927\u306a\u5951\u7d04\u66f8\u3084\u5831\u544a\u66f8\u3092\u9ad8\u901f\u306b\u89e3\u6790\u30fb\u8981\u7d04\u3059\u308b\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306b\u6700\u9069\u3067\u3059\u30024\u500d\u306e\u901f\u5ea6\u306b\u3088\u308a\u3001\u51e6\u7406\u5f85\u3061\u6642\u9593\u304c\u5287\u7684\u306b\u77ed\u7e2e\u3055\u308c\u307e\u3059\u3002\n\n**\u30b7\u30fc\u30f32: \u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u30e2\u30c7\u30eb**  \nSpark\u306a\u3069\u306e\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u304c\u8907\u6570\u306e\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u9023\u7d9a\u5b9f\u884c\u3059\u308b\u969b\u3001\u5404\u30b9\u30c6\u30c3\u30d7\u3067Flash 3.5\u3092\u547c\u3073\u51fa\u3059\u3053\u3068\u3067\u9ad8\u901f\u306a\u30ec\u30b9\u30dd\u30f3\u30b9\u304c\u7dad\u6301\u3067\u304d\u307e\u3059\u3002\n\n**\u30b7\u30fc\u30f33: \u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u4f1a\u8a71\u30a2\u30d7\u30ea**  \n\u30c1\u30e3\u30c3\u30c8\u30dc\u30c3\u30c8\u3084\u30ab\u30b9\u30bf\u30de\u30fc\u30b5\u30dd\u30fc\u30c8AI\u306a\u3069\u3001\u4f4e\u30ec\u30a4\u30c6\u30f3\u30b7\u304c\u6c42\u3081\u3089\u308c\u308b\u5bfe\u8a71\u578b\u30a2\u30d7\u30ea\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002\n\n**\u30b7\u30fc\u30f34: \u5927\u91cf\u30d0\u30c3\u30c1\u51e6\u7406**  \nSNS\u6295\u7a3f\u306e\u30e2\u30c7\u30ec\u30fc\u30b7\u30e7\u30f3\u3001\u5546\u54c1\u8aac\u660e\u306e\u81ea\u52d5\u751f\u6210\u3001\u6559\u80b2\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u500b\u5225\u5316\u306a\u3069\u3001\u30b9\u30b1\u30fc\u30eb\u304c\u5fc5\u8981\u306a\u51e6\u7406\u3067\u771f\u4fa1\u3092\u767a\u63ee\u3057\u307e\u3059\u3002\n\n### 2.6 \u30d7\u30ed\u30f3\u30d7\u30c8\u4f8b\n\n**\u4f8b1: \u9577\u6587\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u9ad8\u901f\u8981\u7d04**\n```\n\u4ee5\u4e0b\u306e\u5951\u7d04\u66f8\u5168\u6587\u3092\u8aad\u307f\u3001\n1. \u4e3b\u8981\u306a\u7fa9\u52d9\u4e8b\u9805\uff08\u7532\u30fb\u4e59\u305d\u308c\u305e\u308c\uff09\n2. \u6ce8\u610f\u3059\u3079\u304d\u7279\u7d04\u6761\u9805\n3. \u30ea\u30b9\u30af\u306e\u9ad8\u3044\u6761\u6587\uff083\u3064\u4ee5\u5185\uff09\n\u3092JSON\u5f62\u5f0f\u3067\u51fa\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\n[\u5951\u7d04\u66f8\u5168\u6587\u3092\u3053\u3053\u306b\u8cbc\u308a\u4ed8\u3051]\n```\n\n**\u4f8b2: \u30de\u30eb\u30c1\u30b9\u30c6\u30c3\u30d7\u306e\u30c7\u30fc\u30bf\u5206\u6790**\n```\n\u4ee5\u4e0b\u306eCSV\u30c7\u30fc\u30bf\u3092\u3082\u3068\u306b\uff1a\n1. \u6708\u5225\u58f2\u4e0a\u30c8\u30ec\u30f3\u30c9\u3092\u5206\u6790\n2. \u524d\u5e74\u540c\u671f\u6bd4\u3092\u8a08\u7b97\n3. \u6b21\u306e\u56db\u534a\u671f\u306e\u4e88\u6e2c\u3092\u7d71\u8a08\u7684\u624b\u6cd5\u3067\u5c0e\u51fa\n4. \u7d4c\u55b6\u5224\u65ad\u306b\u5fc5\u8981\u306a\u30a4\u30f3\u30b5\u30a4\u30c8\u30923\u70b9\u6319\u3052\u3088\n\n[CSV\u30c7\u30fc\u30bf]\n```\n\n**\u4f8b3: \u30b3\u30fc\u30c9\u751f\u6210\uff0b\u30c6\u30b9\u30c8\u4f5c\u6210**\n```\nNext.js 15\u3067\u30e6\u30fc\u30b6\u30fc\u8a8d\u8a3cAPI\u3092\u5b9f\u88c5\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\u8981\u4ef6:\n- JWT + Refresh Token\u65b9\u5f0f\n- \u30ec\u30fc\u30c8\u5236\u9650\uff081\u5206\u9593\u306b10\u30ea\u30af\u30a8\u30b9\u30c8\u307e\u3067\uff09\n- \u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u5b8c\u5099\n- Jest\u306b\u3088\u308b\u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8\u3082\u540c\u6642\u306b\u751f\u6210\nTypeScript\u4f7f\u7528\u3001\u30b3\u30e1\u30f3\u30c8\u306f\u82f1\u8a9e\u3067\u8a18\u8ff0\n```\n\n---\n\n## 3. Gemini 2.5 Pro Deep Think\n\n### 3.1 \u6982\u8981\n\nGemini 2.5 Pro Deep Think\u306fGemini 2.5 Pro\u306b\u642d\u8f09\u3055\u308c\u308b\u62e1\u5f35\u63a8\u8ad6\u30e2\u30fc\u30c9\u3067\u3059\u3002\u901a\u5e38\u306e\u5fdc\u7b54\u3068\u7570\u306a\u308a\u3001\u8907\u6570\u306e\u4eee\u8aac\u3092\u4e26\u884c\u3057\u3066\u691c\u8a0e\u3057\u3001\u6700\u3082\u4fe1\u983c\u6027\u306e\u9ad8\u3044\u89e3\u7b54\u3092\u5c0e\u304d\u51fa\u3059\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3092\u6301\u3061\u307e\u3059\u3002Google\u306eDeepMind\u30c1\u30fc\u30e0\u304c\u958b\u767a\u3057\u305f\u6700\u5148\u7aef\u306e\u300c\u601d\u8003\u30fb\u63a8\u8ad6\u30c6\u30af\u30cb\u30c3\u30af\u300d\u304c\u4f7f\u308f\u308c\u3066\u304a\u308a\u3001\u8907\u96d1\u306a\u6570\u5b66\u554f\u984c\u3001\u7af6\u6280\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u3001\u30de\u30eb\u30c1\u30e2\u30fc\u30c0\u30eb\u63a8\u8ad6\u306b\u304a\u3044\u3066\u696d\u754c\u30c8\u30c3\u30d7\u30af\u30e9\u30b9\u306e\u6027\u80fd\u3092\u793a\u3057\u307e\u3059\u3002\n\n### 3.2 \u30d9\u30f3\u30c1\u30de\u30fc\u30af\n\n| \u30d9\u30f3\u30c1\u30de\u30fc\u30af | \u30b9\u30b3\u30a2 | \u5185\u5bb9 |\n|------------|:------:|------|\n| 2025 USAMO | \u6700\u4e0a\u4f4d\u30af\u30e9\u30b9 | \u7c73\u56fd\u6570\u5b66\u30aa\u30ea\u30f3\u30d4\u30c3\u30af\uff08\u6700\u96e3\u95a2\u306e\u4e00\u3064\uff09 |\n| LiveCodeBench | \u30c8\u30c3\u30d7 | \u7af6\u6280\u30ec\u30d9\u30eb\u306e\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0 |\n| MMMU | **84.0%** | \u30de\u30eb\u30c1\u30e2\u30fc\u30c0\u30eb\u63a8\u8ad6 |\n\n### 3.3 \u601d\u8003\u4e88\u7b97\uff08Thinking Budget\uff09\n\nDeep Think\u30e2\u30fc\u30c9\u3067\u306f**\u6700\u592732K\u30c8\u30fc\u30af\u30f3**\u306e\u300c\u601d\u8003\u30c8\u30fc\u30af\u30f3\u300d\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u300cThinking Budget\u300d\u306f\u8abf\u6574\u53ef\u80fd\u3067\u3001\u30bf\u30b9\u30af\u306e\u8907\u96d1\u3055\u306b\u5fdc\u3058\u3066\u30b3\u30b9\u30c8\u3068\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u30d0\u30e9\u30f3\u30b9\u3092\u6700\u9069\u5316\u3067\u304d\u307e\u3059\u3002\n\n- **\u4f4e\u601d\u8003\u4e88\u7b97\uff08\u301c8K\uff09**: \u65e5\u5e38\u7684\u306a\u8cea\u554f\u3001\u8efd\u5ea6\u306e\u63a8\u8ad6\n- **\u4e2d\u601d\u8003\u4e88\u7b97\uff088K\u301c16K\uff09**: \u8907\u96d1\u306a\u30b3\u30fc\u30c9\u3001\u8a73\u7d30\u306a\u5206\u6790\n- **\u9ad8\u601d\u8003\u4e88\u7b97\uff0816K\u301c32K\uff09**: \u6570\u5b66\u8a3c\u660e\u3001\u7814\u7a76\u8ad6\u6587\u30ec\u30d9\u30eb\u306e\u63a8\u8ad6\n\n### 3.4 \u601d\u8003\u30b5\u30de\u30ea\u30fc\uff08Thought Summaries\uff09\u6a5f\u80fd\n\nDeep Think\u306e\u5927\u304d\u306a\u7279\u5fb4\u306e\u4e00\u3064\u304c\u300c\u601d\u8003\u30b5\u30de\u30ea\u30fc\u300d\u6a5f\u80fd\u3067\u3059\u3002\u30e2\u30c7\u30eb\u306e\u751f\u306e\u601d\u8003\u30d7\u30ed\u30bb\u30b9\uff08\u30c4\u30fc\u30eb\u4f7f\u7528\u306e\u8a73\u7d30\u3092\u542b\u3080\uff09\u3092\u69cb\u9020\u5316\u3055\u308c\u305f\u5f62\u5f0f\u306b\u6574\u7406\u3057\u3066\u51fa\u529b\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\uff1a\n\n- \u8907\u96d1\u306aAI\u30bf\u30b9\u30af\u306e**\u691c\u8a3c\u30fb\u76e3\u67fb**\u304c\u53ef\u80fd\n- \u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u3068\u306e**\u6574\u5408\u6027\u78ba\u8a8d**\u304c\u5bb9\u6613\n- \u30c7\u30d0\u30c3\u30b0\u4f5c\u696d\u306e**\u5927\u5e45\u306a\u7c21\u7565\u5316**\n- \u5224\u65ad\u6839\u62e0\u306e**\u900f\u660e\u6027\u78ba\u4fdd**\n\n### 3.5 \u5177\u4f53\u7684\u306a\u6d3b\u7528\u30b7\u30fc\u30f3\n\n**\u30b7\u30fc\u30f31: \u9ad8\u96e3\u5ea6\u6570\u5b66\u30fb\u79d1\u5b66\u554f\u984c**  \n\u7814\u7a76\u6a5f\u95a2\u3084\u6559\u80b2\u6a5f\u95a2\u3067\u3001\u5b66\u90e8\u301c\u5927\u5b66\u9662\u30ec\u30d9\u30eb\u306e\u6570\u5b66\u8a3c\u660e\u3084\u7269\u7406\u8a08\u7b97\u306b\u6d3b\u7528\u3067\u304d\u307e\u3059\u3002\n\n**\u30b7\u30fc\u30f32: \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8106\u5f31\u6027\u306e\u5206\u6790**  \n\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30c1\u30fc\u30e0\u304c\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u3084\u30b7\u30b9\u30c6\u30e0\u8a2d\u8a08\u3092\u7cbe\u67fb\u3057\u3001\u6f5c\u5728\u7684\u306a\u8106\u5f31\u6027\u3092\u8ad6\u7406\u7684\u306b\u63a2\u7d22\u3059\u308b\u7528\u9014\u3002\n\n**\u30b7\u30fc\u30f33: \u6cd5\u5f8b\u6587\u66f8\u30fb\u5951\u7d04\u66f8\u306e\u9ad8\u5ea6\u306a\u89e3\u91c8**  \n\u8907\u6570\u306e\u6cd5\u5f8b\u6761\u6587\u3092\u53c2\u7167\u3057\u306a\u304c\u3089\u3001\u8907\u96d1\u306a\u6cd5\u7684\u5224\u65ad\u3092\u884c\u3046\u30ea\u30fc\u30ac\u30eb\u30c6\u30c3\u30af\u5206\u91ce\u3002\n\n**\u30b7\u30fc\u30f34: \u7af6\u6280\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30fb\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u8a2d\u8a08**  \n\u52d5\u7684\u8a08\u753b\u6cd5\u3001\u30b0\u30e9\u30d5\u7406\u8ad6\u3001\u7d44\u307f\u5408\u308f\u305b\u6700\u9069\u5316\u306a\u3069\u3001\u9ad8\u5ea6\u306a\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u554f\u984c\u306e\u89e3\u6cd5\u8a2d\u8a08\u3002\n\n### 3.6 \u30d7\u30ed\u30f3\u30d7\u30c8\u4f8b\n\n**\u4f8b1: \u6570\u5b66\u8a3c\u660e\u306e\u8981\u6c42**\n```\n\u4ee5\u4e0b\u306e\u547d\u984c\u3092\u53b3\u5bc6\u306b\u8a3c\u660e\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u8a3c\u660e\u306e\u5404\u30b9\u30c6\u30c3\u30d7\u3067\u4f7f\u7528\u3057\u305f\u5b9a\u7406\u3084\u88dc\u984c\u3092\u660e\u793a\u3057\u3001\n\u3069\u306e\u6bb5\u968e\u3067\u3069\u306e\u3088\u3046\u306a\u4eee\u5b9a\u3092\u7528\u3044\u3066\u3044\u308b\u304b\u3092\u660e\u78ba\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\n\u547d\u984c\uff1a\u300c\u4efb\u610f\u306e\u7d20\u6570 p \u306b\u5bfe\u3057\u3066\u3001p^(p-1) \u2261 1 (mod p) \u304c\u6210\u7acb\u3059\u308b\u300d\n\uff08\u30d5\u30a7\u30eb\u30de\u30fc\u306e\u5c0f\u5b9a\u7406\uff09\n\n\u8a3c\u660e\u306b\u306f\u6574\u6570\u8ad6\u306e\u57fa\u790e\u5b9a\u7406\u306e\u307f\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3002\n```\n\n**\u4f8b2: \u8907\u96d1\u306a\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u8a2d\u8a08**\n```\nN\u500b\u306e\u90fd\u5e02\u3092\u8a2a\u554f\u3059\u308b\u5de1\u56de\u30bb\u30fc\u30eb\u30b9\u30de\u30f3\u554f\u984c\u306b\u304a\u3044\u3066\u3001\u4ee5\u4e0b\u306e\u5236\u7d04\u3092\u6301\u3064\n\u8fd1\u4f3c\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u8a2d\u8a08\u3057\u3066\u304f\u3060\u3055\u3044\uff1a\n\n\u5236\u7d04:\n- \u5b9f\u884c\u6642\u9593: O(N\u00b2log N)\u4ee5\u4e0b\n- \u8fd1\u4f3c\u6bd4: 1.5\u4ee5\u5185\uff08\u7406\u8ad6\u7684\u4fdd\u8a3c\u3042\u308a\uff09\n- \u5b9f\u88c5\u8a00\u8a9e: Python\n- \u52d5\u7684\u30b0\u30e9\u30d5\u66f4\u65b0\u306b\u5bfe\u5fdc\uff08\u9802\u70b9\u30fb\u8fba\u306e\u8ffd\u52a0/\u524a\u9664\uff09\n\n\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u6b63\u78ba\u6027\u306e\u8a3c\u660e\u3068\u8a08\u7b97\u91cf\u5206\u6790\u3082\u542b\u3081\u308b\u3053\u3068\u3002\n```\n\n---\n\n## 4. Google AI\u30d7\u30e9\u30f3\u518d\u7de8\n\n### 4.1 \u30d7\u30e9\u30f3\u4f53\u7cfb\u306e\u5237\u65b0\n\nGoogle I/O 2026\u306b\u304a\u3044\u3066\u3001Google\u306fAI\u30b5\u30d6\u30b9\u30af\u30ea\u30d7\u30b7\u30e7\u30f3\u30d7\u30e9\u30f3\u3092\u5927\u5e45\u306b\u518d\u7de8\u3057\u307e\u3057\u305f\u3002\u5f93\u6765\u306e\u6700\u9ad8\u30b0\u30ec\u30fc\u30c9\u300cGoogle AI Ultra\u300d\u304c\u6708\u984d$250\u3060\u3063\u305f\u306e\u306b\u5bfe\u3057\u3001\u4eca\u56de\u306e\u767a\u8868\u3067\u306f\uff1a\n\n1. **\u65e2\u5b58\u306eUltra\u3092\u5024\u4e0b\u3052**: $250 \u2192 $200\uff08\u6708\u984d\uff09\n2. **\u65b0\u3057\u3044\u4e2d\u9593\u30d7\u30e9\u30f3\u3092\u8ffd\u52a0**: $100\uff08\u6708\u984d\uff09\u306e\u65b0Ultra\u30d7\u30e9\u30f3\u3092\u65b0\u8a2d\n\n\u3053\u308c\u306b\u3088\u308a\u3001Google\u30fbOpenAI\u30fbAnthropic\u306e3\u793e\u304c\u3044\u305a\u308c\u3082**$20 / $100 / $200**\u3068\u3044\u3046\u540c\u4e00\u4fa1\u683c\u5e2f\u306b\u63c3\u3046\u5f62\u3068\u306a\u308a\u3001AI\u696d\u754c\u306e\u30b5\u30d6\u30b9\u30af\u30ea\u30d7\u30b7\u30e7\u30f3\u69cb\u9020\u304c\u6a19\u6e96\u5316\u3055\u308c\u307e\u3057\u305f\u3002\n\n### 4.2 \u30d7\u30e9\u30f3\u6bd4\u8f03\u8868\n\n| \u30d7\u30e9\u30f3 | \u6708\u984d | \u4e3b\u8981\u7279\u5178 |\n|--------|:----:|--------|\n| **Google AI Free** | $0 | \u57fa\u672c\u7684\u306aGemini\u6a5f\u80fd |\n| **Google AI Pro** | $20 | Gemini 3.1 Pro\u3001\u65e7AI Premium\u76f8\u5f53 |\n| **Google AI Ultra\uff08\u65b0$100\u30d7\u30e9\u30f3\uff09** | $100 | 5\u500d\u4f7f\u7528\u67a0\u300120TB \u30b9\u30c8\u30ec\u30fc\u30b8\u3001YouTube Premium\u3001Gemini 3.5 Flash\u30c6\u30b9\u30c8\u512a\u5148\u3001Antigravity\u30a2\u30af\u30bb\u30b9 |\n| **Google AI Ultra\uff08\u65e2\u5b58$200\u30d7\u30e9\u30f3\uff09** | $200 | Pro\u306e20\u500d\u4f7f\u7528\u67a0\u3001\u6700\u5148\u7aef\u30e2\u30c7\u30eb\u3078\u306e\u6700\u512a\u5148\u30a2\u30af\u30bb\u30b9\u3001Project Marineer\u306e\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u30e2\u30fc\u30c9 |\n\n### 4.3 \u65b0$100\u30d7\u30e9\u30f3\u306e\u8a73\u7d30\n\n$100\u30d7\u30e9\u30f3\u306f**\u958b\u767a\u8005\u30fb\u30c6\u30af\u30cb\u30ab\u30eb\u30ea\u30fc\u30c9\u30fb\u77e5\u8b58\u52b4\u50cd\u8005\u30fb\u4e0a\u7d1a\u30af\u30ea\u30a8\u30a4\u30bf\u30fc**\u3092\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u8a2d\u8a08\u3055\u308c\u3066\u3044\u307e\u3059\u3002\n\n\u4e3b\u306a\u7279\u5178\uff1a\n- **5\u500d\u306e\u4f7f\u7528\u67a0**\uff08Pro\u30d7\u30e9\u30f3\u3068\u306e\u6bd4\u8f03\uff09\n- **20TB \u306e\u30af\u30e9\u30a6\u30c9\u30b9\u30c8\u30ec\u30fc\u30b8**\n- **YouTube Premium\u500b\u4eba\u30d7\u30e9\u30f3**\n- **Google Antigravity\u3078\u306e\u512a\u5148\u30a2\u30af\u30bb\u30b9**\n- **Gemini 3.5 Flash\u306e\u30c6\u30b9\u30c8\u30fb\u30c7\u30d0\u30c3\u30b0\u74b0\u5883**\n\n### 4.4 \u3069\u306e\u30d7\u30e9\u30f3\u3092\u9078\u3076\u3079\u304d\u304b\n\n**Free\u3067\u5341\u5206\u306a\u4eba**\n- \u65e5\u5e38\u7684\u306a\u8cea\u554f\u3084\u7c21\u5358\u306a\u30bf\u30b9\u30af\n- \u6708\u306b\u6570\u56de\u7a0b\u5ea6\u306eAI\u5229\u7528\n\n**Pro\u304c\u304a\u3059\u3059\u3081\u306e\u4eba\uff08$20\uff09**\n- \u6bce\u65e5Gemini\u3092\u6d3b\u7528\u3059\u308b\u30d3\u30b8\u30cd\u30b9\u30d1\u30fc\u30bd\u30f3\n- \u30b3\u30f3\u30c6\u30f3\u30c4\u5236\u4f5c\u3001\u30e1\u30fc\u30eb\u4f5c\u6210\u3001\u60c5\u5831\u53ce\u96c6\n\n**\u65b0Ultra $100\u304c\u304a\u3059\u3059\u3081\u306e\u4eba**\n- API\u3092\u4f7f\u3063\u3066\u958b\u767a\u3059\u308b\u30a8\u30f3\u30b8\u30cb\u30a2\u30fb\u30b9\u30bf\u30fc\u30c8\u30a2\u30c3\u30d7\n- Antigravity\u3067\u672c\u683c\u7684\u306b\u30a2\u30d7\u30ea\u958b\u767a\u3057\u305f\u3044\u4eba\n- \u5927\u91cf\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u51e6\u7406\u3084\u5206\u6790\u696d\u52d9\n\n**\u65e2\u5b58Ultra $200\u304c\u304a\u3059\u3059\u3081\u306e\u4eba**\n- AI\u306e\u6700\u524d\u7dda\u6a5f\u80fd\u3092\u3044\u3061\u65e9\u304f\u8a66\u3057\u305f\u3044\u4eba\n- \u5927\u898f\u6a21\u306aAgent\u30e2\u30fc\u30c9\u3092\u696d\u52d9\u306b\u7d44\u307f\u8fbc\u307f\u305f\u3044\u4f01\u696d\u62c5\u5f53\u8005\n- Gemini Spark\u3092\u6700\u512a\u5148\u3067\u4f7f\u3044\u305f\u3044\u30d1\u30ef\u30fc\u30e6\u30fc\u30b6\u30fc\n\n---\n\n## 5. Gemini Spark\n\n### 5.1 \u6982\u8981\n\nGemini Spark\u306f\u3001Google I/O 2026\u306b\u304a\u3051\u308b\u6700\u5927\u306e\u767a\u8868\u306e\u4e00\u3064\u3067\u3059\u3002\u300c\u3042\u306a\u305f\u306e\u30d1\u30fc\u30bd\u30ca\u30eb\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u300d\u3068\u3057\u3066\u8a2d\u8a08\u3055\u308c\u3066\u304a\u308a\u3001Gemini\u3092\u3053\u308c\u307e\u3067\u306e\u300c\u8cea\u554f\u306b\u7b54\u3048\u308bAI\u300d\u304b\u3089\u300c\u3042\u306a\u305f\u306b\u4ee3\u308f\u3063\u3066\u884c\u52d5\u3059\u308bAI\u300d\u3078\u3068\u9032\u5316\u3055\u305b\u307e\u3059\u3002\n\nSpark\u306e\u6838\u5fc3\u306f**\u5e38\u6642\u30d0\u30c3\u30af\u30b0\u30e9\u30a6\u30f3\u30c9\u52d5\u4f5c**\u306b\u3042\u308a\u307e\u3059\u3002\u30e6\u30fc\u30b6\u30fc\u304cGemini\u30a2\u30d7\u30ea\u3092\u958b\u3044\u3066\u3044\u306a\u304f\u3066\u3082\u3001Spark\u306fGmail\u30fbGoogle Calendar\u30fbGoogle Tasks\u305d\u3057\u3066\u63a5\u7d9a\u3055\u308c\u305f\u30b5\u30fc\u30c9\u30d1\u30fc\u30c6\u30a3\u30a2\u30d7\u30ea\u3092\u5e38\u6642\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u3057\u3001\u5fc5\u8981\u306a\u30bf\u30a4\u30df\u30f3\u30b0\u3067\u81ea\u5f8b\u7684\u306b\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\n\n### 5.2 \u30c7\u30e2\u3067\u62ab\u9732\u3055\u308c\u305f\u80fd\u529b\n\nI/O\u306e\u30b9\u30c6\u30fc\u30b8\u3067\u5b9f\u969b\u306b\u30c7\u30e2\u304c\u884c\u308f\u308c\u305f\u6a5f\u80fd\uff1a\n\n1. **\u97f3\u58f0\u3067\u30e1\u30fc\u30eb\u9001\u4fe1\uff08macOS\uff09**: \u300c\u7530\u4e2d\u3055\u3093\u306b\u660e\u65e5\u306e\u30df\u30fc\u30c6\u30a3\u30f3\u30b0\u3092\u78ba\u8a8d\u3059\u308b\u30e1\u30fc\u30eb\u3092\u9001\u3063\u3066\u300d\u3068\u58f0\u3067\u6307\u793a\u3059\u308b\u3060\u3051\u3067\u3001Spark\u304c\u30e1\u30fc\u30eb\u3092\u8d77\u8349\u30fb\u9001\u4fe1\n2. **\u671d\u306e\u30d6\u30ea\u30fc\u30d5\u30a3\u30f3\u30b0\u6e96\u5099**: \u4eca\u65e5\u306e\u30ab\u30ec\u30f3\u30c0\u30fc\u3001\u672a\u8aad\u306e\u91cd\u8981\u30e1\u30fc\u30eb\u3001TODO\u3092\u307e\u3068\u3081\u305f\u97f3\u58f0\u30d6\u30ea\u30fc\u30d5\u30a3\u30f3\u30b0\u3092\u81ea\u52d5\u751f\u6210\n3. **\u30de\u30eb\u30c1\u30b9\u30c6\u30c3\u30d7\u306e\u30b9\u30b1\u30b8\u30e5\u30fc\u30ea\u30f3\u30b0**: \u8907\u6570\u306e\u53c2\u52a0\u8005\u306e\u7a7a\u304d\u6642\u9593\u3092\u78ba\u8a8d\u3057\u3001\u4f1a\u8b70\u3092\u8a2d\u5b9a\u3057\u3066\u30ab\u30ec\u30f3\u30c0\u30fc\u3078\u767b\u9332\n\n### 5.3 \u9023\u643a\u30a2\u30d7\u30ea\uff08\u73fe\u5728\u301c\u4eca\u5f8c\uff09\n\n**\u73fe\u5728\u5bfe\u5fdc\uff08\u30ea\u30ea\u30fc\u30b9\u5f53\u521d\uff09**\n- Gmail\n- Google Docs\n- Google Calendar\n- Google Tasks\n- Google Drive\n\n**\u4eca\u5f8c\uff082026\u5e74\u590f\u4ee5\u964d\u3001MCP\u3067\u62e1\u5f35\uff09**\n- Slack\n- Notion\n- Zoom\n- Salesforce\n- \u305d\u306e\u4ed6\u30b5\u30fc\u30c9\u30d1\u30fc\u30c6\u30a3\u30a2\u30d7\u30ea\uff08MCP\u7d4c\u7531\uff09\n\n### 5.4 Mac\u7248Spark\u306e\u7279\u5fb4\n\nGemini Spark\u306f2026\u5e74\u590f\u306bGemini Mac\u7248\u30a2\u30d7\u30ea\u3068\u3057\u3066\u63d0\u4f9b\u4e88\u5b9a\u3067\u3001\u30ed\u30fc\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u3092\u542b\u3080\u64cd\u4f5c\u3068\u300c\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u5168\u4f53\u306b\u308f\u305f\u308b\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u81ea\u52d5\u5316\u300d\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u3053\u308c\u306fApple\u306e\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8\u3084Microsoft\u306eCopilot\u3092\u76f4\u63a5\u8105\u304b\u3059\u6a5f\u80fd\u3067\u3059\u3002\n\n### 5.5 \u53ef\u7528\u6027\n\n- **\u521d\u671f\u30ea\u30ea\u30fc\u30b9**: 2026\u5e745\u6708\u672b\u301c6\u6708\uff08\u7c73\u56fd\u306eAI Ultra $200\u52a0\u5165\u8005\u304b\u3089\uff09\n- **\u62e1\u5f35**: \u6bb5\u968e\u7684\u306bPro\u52a0\u5165\u8005\u3078\u5c55\u958b\u4e88\u5b9a\n\n### 5.6 \u5177\u4f53\u7684\u306a\u6d3b\u7528\u30b7\u30fc\u30f3\n\n**\u30b7\u30fc\u30f31: \u30d0\u30c3\u30af\u30aa\u30d5\u30a3\u30b9\u696d\u52d9\u306e\u81ea\u52d5\u5316**\n\u7d4c\u8cbb\u7cbe\u7b97\u306e\u96c6\u8a08\u3001\u5b9a\u578b\u30ec\u30dd\u30fc\u30c8\u306e\u4f5c\u6210\u30fb\u9001\u4ed8\u3001\u4f1a\u8b70\u306e\u8b70\u4e8b\u9332\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u5316\u306a\u3069\u3001\u7e70\u308a\u8fd4\u3057\u767a\u751f\u3059\u308b\u4e8b\u52d9\u4f5c\u696d\u3092Spark\u306b\u59d4\u4efb\u3067\u304d\u307e\u3059\u3002\n\n**\u30b7\u30fc\u30f32: \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30de\u30cd\u30b8\u30e1\u30f3\u30c8\u652f\u63f4**\n\u30bf\u30b9\u30af\u306e\u7de0\u5207\u30a2\u30e9\u30fc\u30c8\u3001\u9032\u6357\u306e\u81ea\u52d5\u30d5\u30a9\u30ed\u30fc\u30a2\u30c3\u30d7\u30e1\u30fc\u30eb\u3001\u9031\u6b21\u30ec\u30dd\u30fc\u30c8\u306e\u81ea\u52d5\u751f\u6210\u306a\u3069\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\n\n**\u30b7\u30fc\u30f33: \u30bb\u30fc\u30eb\u30b9\u30fb\u30ab\u30b9\u30bf\u30de\u30fc\u30b5\u30af\u30bb\u30b9**\n\u30ea\u30fc\u30c9\u3078\u306e\u30d5\u30a9\u30ed\u30fc\u30a2\u30c3\u30d7\u30e1\u30fc\u30eb\u306e\u81ea\u52d5\u9001\u4fe1\u3001CRM\uff08Salesforce\u9023\u643a\u5f8c\uff09\u3078\u306e\u30c7\u30fc\u30bf\u5165\u529b\u3001\u9867\u5ba2\u3068\u306e\u30df\u30fc\u30c6\u30a3\u30f3\u30b0\u5f8c\u306e\u81ea\u52d5\u30b5\u30de\u30ea\u30fc\u9001\u4ed8\u306a\u3069\u3002\n\n**\u30b7\u30fc\u30f34: \u30b3\u30f3\u30c6\u30f3\u30c4\u30af\u30ea\u30a8\u30a4\u30bf\u30fc**\nSNS\u6295\u7a3f\u306e\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u78ba\u8a8d\u3001\u30b3\u30e9\u30dc\u4f9d\u983c\u30e1\u30fc\u30eb\u306e\u81ea\u52d5\u8fd4\u4fe1\u3001\u30d6\u30e9\u30f3\u30c9\u6848\u4ef6\u306e\u30ab\u30ec\u30f3\u30c0\u30fc\u7ba1\u7406\u3002\n\n### 5.7 \u30d7\u30ed\u30f3\u30d7\u30c8\u4f8b\uff08Spark\u3078\u306e\u6307\u793a\uff09\n\n**\u4f8b1: \u671d\u306e\u30eb\u30fc\u30c6\u30a3\u30f3\u8a2d\u5b9a**\n```\n\u6bce\u671d8\u6642\u306b\u4ee5\u4e0b\u3092\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\uff1a\n1. \u4eca\u65e5\u306e\u30ab\u30ec\u30f3\u30c0\u30fc\u3092\u30c1\u30a7\u30c3\u30af\n2. \u6628\u591c\u304b\u3089\u306e\u672a\u8aad\u30e1\u30fc\u30eb\u3092\u91cd\u8981\u5ea6\u9806\u306b3\u4ef6\u30d4\u30c3\u30af\u30a2\u30c3\u30d7\n3. \u4e0a\u8a18\u3092\u307e\u3068\u3081\u305f\u97f3\u58f0\u30d6\u30ea\u30fc\u30d5\u30a3\u30f3\u30b0\u3092\u518d\u751f\n4. \u4eca\u65e5\u306e\u6700\u512a\u5148\u30bf\u30b9\u30af\u3092\u78ba\u8a8d\u3057\u3066\u30a2\u30e9\u30fc\u30c8\u3092\u8a2d\u5b9a\n```\n\n**\u4f8b2: \u81ea\u52d5\u30d5\u30a9\u30ed\u30fc\u30a2\u30c3\u30d7**\n```\n\u300c\u30d7\u30ed\u30b8\u30a7\u30af\u30c8X\u306e\u30ad\u30c3\u30af\u30aa\u30d5\u30df\u30fc\u30c6\u30a3\u30f3\u30b0\u300d\u304c\u7d42\u308f\u3063\u305f\u3089\u3001\n\u81ea\u52d5\u7684\u306b\u4ee5\u4e0b\u3092\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\uff1a\n- \u53c2\u52a0\u8005\u5168\u54e1\u306b\u8b70\u4e8b\u9332\uff08Docs\uff09\u3092\u5171\u6709\n- \u6b21\u56de\u30df\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u5019\u88dc\u30923\u30d1\u30bf\u30fc\u30f3\u63d0\u793a\u3059\u308b\u30e1\u30fc\u30eb\u3092\u9001\u4fe1\n- \u30bf\u30b9\u30af\u5272\u308a\u5f53\u3066\u3092Google Tasks\u306b\u767b\u9332\n```\n\n**\u4f8b3: \u53d7\u4fe1\u30c8\u30ec\u30a4\u306e\u81ea\u52d5\u6574\u7406**\n```\nGmail\u306e\u53d7\u4fe1\u30c8\u30ec\u30a4\u3092\u6bce\u65e517\u6642\u306b\u6574\u7406\u3057\u3066\u304f\u3060\u3055\u3044\uff1a\n- \u30cb\u30e5\u30fc\u30b9\u30ec\u30bf\u30fc \u2192 \"\u30cb\u30e5\u30fc\u30b9\u30ec\u30bf\u30fc\"\u30e9\u30d9\u30eb\u306b\u79fb\u52d5\n- \u8acb\u6c42\u66f8\u30fb\u9818\u53ce\u66f8 \u2192 \"\u7d4c\u7406\"\u30e9\u30d9\u30eb\u306b\u79fb\u52d5\n- \u8981\u8fd4\u4fe1\u306e\u30e1\u30fc\u30eb \u2192 \u30b9\u30bf\u30fc\u4ed8\u304d\u306b\u3057\u3066\"\u672c\u65e5\u5bfe\u5fdc\"\u30ea\u30b9\u30c8\u306b\u8ffd\u52a0\n- 3\u65e5\u4ee5\u4e0a\u7d4c\u904e\u3057\u305f\u672a\u8aad\u30d7\u30ed\u30e2\u30fc\u30b7\u30e7\u30f3\u306f\u65e2\u8aad\u306b\u3057\u3066\u30a2\u30fc\u30ab\u30a4\u30d6\n```\n\n---\n\n## 6. Gemini\u30a8\u30af\u30b9\u30da\u30ea\u30a8\u30f3\u30b9\u518d\u8a2d\u8a08\n\n### 6.1 Neural Expressive\uff1a\u65b0\u30c7\u30b6\u30a4\u30f3\u8a00\u8a9e\n\nGoogle\u306f\u4eca\u56de\u306eI/O\u3067Gemini\u30a2\u30d7\u30ea\u306e\u30c7\u30b6\u30a4\u30f3\u3092\u5168\u9762\u5237\u65b0\u3057\u307e\u3057\u305f\u3002\u65b0\u30c7\u30b6\u30a4\u30f3\u8a00\u8a9e\u300c**Neural Expressive**\u300d\u306f\u3001AI\u3068\u306e\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u3088\u308a\u81ea\u7136\u30fb\u76f4\u611f\u7684\u306b\u306a\u308b\u3053\u3068\u3092\u76ee\u6307\u3057\u3066\u3044\u307e\u3059\u3002I/O\u5f53\u65e5\u304b\u3089Android\u30fbiOS\u30fbWeb\u306e\u5168\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u9806\u6b21\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u958b\u59cb\u3067\u3059\u3002\n\n### 6.2 \u4e3b\u306a\u30c7\u30b6\u30a4\u30f3\u5909\u66f4\u70b9\n\n**\u30d3\u30b8\u30e5\u30a2\u30eb\u9762**\n- \u6d41\u52d5\u7684\u306a\u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3\uff08\u30ec\u30b9\u30dd\u30f3\u30b9\u751f\u6210\u4e2d\u306e\u52d5\u304d\u304c\u6709\u6a5f\u7684\u306b\uff09\n- \u9bae\u3084\u304b\u306a\u30ab\u30e9\u30fc\u30d1\u30ec\u30c3\u30c8\uff08\u3088\u308a\u611f\u60c5\u7684\u30fb\u76f4\u611f\u7684\u306a\u8868\u73fe\uff09\n- \u65b0\u3057\u3044\u30bf\u30a4\u30dd\u30b0\u30e9\u30d5\u30a3\u30b7\u30b9\u30c6\u30e0\n- \u89e6\u899a\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af\uff08\u30e2\u30d0\u30a4\u30eb\uff09\n\n**UI\u30ec\u30a4\u30a2\u30a6\u30c8**\n- \u30d7\u30ed\u30f3\u30d7\u30c8\u5165\u529b\u30dc\u30c3\u30af\u30b9\u304c\u300c\u30d4\u30eb\u578b\uff08\u4e38\u307f\u3092\u5e2f\u3073\u305f\u9577\u65b9\u5f62\uff09\u300d\u30c7\u30b6\u30a4\u30f3\u306b\u5909\u66f4\n- \u30e2\u30d0\u30a4\u30eb\u3067\u306f\u300c+\u300d\u30e1\u30cb\u30e5\u30fc\u304b\u3089\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u65b9\u6cd5\u3092\u30ab\u30eb\u30fc\u30bb\u30eb\u8868\u793a\n- \u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u30c9\u30ed\u30ef\u30fc\u304c\u5168\u753b\u9762\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306b\u5909\u66f4\n- \u9805\u76ee: \u65b0\u3057\u3044\u30c1\u30e3\u30c3\u30c8\u30fb\u30c1\u30e3\u30c3\u30c8\u691c\u7d22\u30fb\u30e9\u30a4\u30d6\u30e9\u30ea\uff08\u65e7\uff1a\u30de\u30a4\u30b9\u30bf\u30c3\u30d5\uff09\u30fbGems\n\n**\u30ec\u30b9\u30dd\u30f3\u30b9\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u5237\u65b0**\n\u3053\u308c\u307e\u3067Gemini\u306e\u56de\u7b54\u306f\u300c\u30c6\u30ad\u30b9\u30c8\u306e\u58c1\u300d\u306b\u306a\u308a\u304c\u3061\u3067\u3057\u305f\u3002Neural Expressive\u3067\u306f\uff1a\n- **\u6700\u91cd\u8981\u60c5\u5831\u3092\u6700\u4e0a\u90e8\u30fb\u592a\u5b57\u3067\u8868\u793a**\n- \u30a4\u30f3\u30e9\u30a4\u30f3\u753b\u50cf\u306e\u81ea\u7136\u306a\u633f\u5165\n- \u30ca\u30ec\u30fc\u30b7\u30e7\u30f3\u4ed8\u304d\u52d5\u753b\uff08Omni\u9023\u643a\uff09\n- \u30bf\u30a4\u30e0\u30e9\u30a4\u30f3\u8868\u793a\n- \u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u306a\u53ef\u8996\u5316\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\n\n### 6.3 Gemini Live\u306e\u6539\u5584\n\nGemini Live\u304c\u30d5\u30eb\u30b9\u30af\u30ea\u30fc\u30f3\u8868\u793a\u304b\u3089**\u30a4\u30f3\u30e9\u30a4\u30f3\u8868\u793a**\u306b\u5909\u66f4\u3055\u308c\u307e\u3057\u305f\u3002\u30e2\u30fc\u30c9\u3092\u660e\u793a\u7684\u306b\u5207\u308a\u66ff\u3048\u306a\u304f\u3066\u3082\u3001\u4f1a\u8a71\u306e\u6d41\u308c\u306e\u4e2d\u3067\u30b7\u30fc\u30e0\u30ec\u30b9\u306bLive\u6a5f\u80fd\u304c\u4f7f\u3048\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002\n\n### 6.4 \u306a\u305c\u3053\u306e\u30ea\u30c7\u30b6\u30a4\u30f3\u304c\u91cd\u8981\u304b\n\nAI\u30c4\u30fc\u30eb\u306eUX\u306b\u304a\u3044\u3066\u3001\u300c\u60c5\u5831\u3092\u3069\u3046\u898b\u305b\u308b\u304b\u300d\u306f\u5229\u7528\u7d99\u7d9a\u7387\u306b\u76f4\u7d50\u3057\u307e\u3059\u3002\u30c6\u30ad\u30b9\u30c8\u306e\u58c1\u306f\u8a8d\u77e5\u8ca0\u8377\u304c\u9ad8\u304f\u3001\u30e6\u30fc\u30b6\u30fc\u304c\u60c5\u5831\u3092\u6d88\u5316\u3057\u306b\u304f\u304f\u306a\u308a\u307e\u3059\u3002Neural Expressive\u306f\uff1a\n\n- **\u30b9\u30ad\u30e3\u30ca\u30d3\u30ea\u30c6\u30a3**\uff08\u4e00\u76ee\u3067\u91cd\u8981\u60c5\u5831\u3092\u628a\u63e1\u3067\u304d\u308b\uff09\n- **\u30a8\u30f3\u30b2\u30fc\u30b8\u30e1\u30f3\u30c8**\uff08\u8996\u899a\u7684\u306b\u8c4a\u304b\u306a\u30ec\u30b9\u30dd\u30f3\u30b9\u304c\u95a2\u5fc3\u3092\u6301\u7d9a\uff09\n- **\u4fe1\u983c\u6027**\uff08\u6574\u7406\u3055\u308c\u305f\u60c5\u5831\u63d0\u793a\u304c\u5224\u65ad\u306e\u8cea\u3092\u5411\u4e0a\uff09\n\n\u3068\u3044\u30463\u70b9\u3092\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u3092\u76ee\u7684\u3068\u3057\u3066\u3044\u307e\u3059\u3002\n\n---\n\n## 7. Gemini Omni\n\n### 7.1 \u6982\u8981\n\nGemini Omni\u306f\u300c\u3042\u3089\u3086\u308b\u5165\u529b\u304b\u3089\u3001\u3042\u3089\u3086\u308b\u3082\u306e\u3092\u5275\u9020\u3067\u304d\u308b\u300d\u30e2\u30c7\u30eb\u3068\u3057\u3066\u767a\u8868\u3055\u308c\u307e\u3057\u305f\u3002\u30c6\u30ad\u30b9\u30c8\u30fb\u753b\u50cf\u30fb\u97f3\u58f0\u30fb\u52d5\u753b\u306e\u30a4\u30f3\u30d7\u30c3\u30c8\u3092\u53d7\u3051\u53d6\u308a\u3001**\u52d5\u753b\u3092\u542b\u3080**\u30de\u30eb\u30c1\u30e2\u30fc\u30c0\u30eb\u306a\u30a2\u30a6\u30c8\u30d7\u30c3\u30c8\u3092\u751f\u6210\u3067\u304d\u307e\u3059\u3002I/O\u5f53\u65e5\u304b\u3089Google AI Plus\u30fbPro\u30fbUltra\u306e\u52a0\u5165\u8005\u306b\u9806\u6b21\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u304c\u958b\u59cb\u3055\u308c\u307e\u3057\u305f\uff08Omni Flash\u7248\uff09\u3002\n\n### 7.2 \u5165\u51fa\u529b\u306e\u7d44\u307f\u5408\u308f\u305b\n\n| \u30a4\u30f3\u30d7\u30c3\u30c8 | \u30a2\u30a6\u30c8\u30d7\u30c3\u30c8 |\n|-----------|------------|\n| \u30c6\u30ad\u30b9\u30c8 | \u30c6\u30ad\u30b9\u30c8\u3001\u753b\u50cf\u3001\u52d5\u753b |\n| \u753b\u50cf | \u30c6\u30ad\u30b9\u30c8\u3001\u753b\u50cf\u3001\u52d5\u753b |\n| \u97f3\u58f0 | \u30c6\u30ad\u30b9\u30c8\u3001\u97f3\u58f0\u3001\u52d5\u753b |\n| \u52d5\u753b | \u30c6\u30ad\u30b9\u30c8\u3001\u753b\u50cf\u3001\u52d5\u753b |\n| \u30c6\u30ad\u30b9\u30c8 + \u753b\u50cf | \u52d5\u753b\uff08\u65b0\u6a5f\u80fd\uff09 |\n| \u30c6\u30ad\u30b9\u30c8 + \u97f3\u58f0 | \u97f3\u58f0\uff08\u3088\u308a\u81ea\u7136\u306a\u4f1a\u8a71\uff09 |\n\n### 7.3 \u30cd\u30a4\u30c6\u30a3\u30d6\u97f3\u58f0\u51fa\u529b\n\nGemini 2.5 Pro/Flash\u3067\u3082\u5bfe\u5fdc\u304c\u9032\u3093\u3067\u3044\u307e\u3059\u304c\u3001Omni\u3067\u306f\u30cd\u30a4\u30c6\u30a3\u30d6\u97f3\u58f0\u51fa\u529b\u304c\u3088\u308a\u81ea\u7136\u306b\u306a\u308a\u307e\u3059\u3002\u3053\u308c\u307e\u3067\u306eTTS\uff08Text-to-Speech\uff09\u5909\u63db\u3067\u306f\u306a\u304f\u3001\u30e2\u30c7\u30eb\u81ea\u4f53\u304c\u97f3\u58f0\u3092\u76f4\u63a5\u751f\u6210\u3059\u308b\u305f\u3081\uff1a\n- \u611f\u60c5\u306e\u8d77\u4f0f\u304c\u81ea\u7136\n- \u8a71\u901f\u306e\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u304c\u7cbe\u7dfb\n- \u591a\u8a00\u8a9e\u3067\u306e\u81ea\u7136\u306a\u767a\u97f3\n\n### 7.4 \u5177\u4f53\u7684\u306a\u6d3b\u7528\u30b7\u30fc\u30f3\n\n**\u30b7\u30fc\u30f31: \u52d5\u753b\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u8d85\u9ad8\u901f\u5236\u4f5c**\n\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u5165\u529b\u3059\u308b\u3060\u3051\u3067\u3001\u30ca\u30ec\u30fc\u30b7\u30e7\u30f3\u4ed8\u304d\u306e\u52d5\u753b\u3092\u81ea\u52d5\u751f\u6210\u3002YouTube\u3084Reels\u5411\u3051\u306e\u30b7\u30e7\u30fc\u30c8\u30b3\u30f3\u30c6\u30f3\u30c4\u5236\u4f5c\u30b3\u30b9\u30c8\u3092\u5927\u5e45\u524a\u6e1b\u3002\n\n**\u30b7\u30fc\u30f32: \u591a\u8a00\u8a9e\u6559\u6750\u306e\u81ea\u52d5\u751f\u6210**\n\u30c6\u30ad\u30b9\u30c8\u6559\u6750\u3092\u30a4\u30f3\u30d7\u30c3\u30c8\u3057\u3066\u3001\u5404\u8a00\u8a9e\u306e\u97f3\u58f0\u30ca\u30ec\u30fc\u30b7\u30e7\u30f3\u4ed8\u304d\u52d5\u753b\u6559\u6750\u3092\u81ea\u52d5\u751f\u6210\u3002\n\n**\u30b7\u30fc\u30f33: \u30d7\u30ed\u30c0\u30af\u30c8\u30c7\u30e2\u52d5\u753b**\n\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u3084\u4ed5\u69d8\u66f8\u3092\u30a4\u30f3\u30d7\u30c3\u30c8\u3057\u3066\u3001\u30d7\u30ed\u30c0\u30af\u30c8\u306e\u30c7\u30e2\u52d5\u753b\u3092\u81ea\u52d5\u4f5c\u6210\u3002\n\n**\u30b7\u30fc\u30f34: SNS\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u591a\u5f62\u5f0f\u5c55\u958b**\n1\u3064\u306e\u30d6\u30ed\u30b0\u8a18\u4e8b\u304b\u3089\u3001\u30c6\u30ad\u30b9\u30c8\u8981\u7d04\u30fb\u753b\u50cf\u30a4\u30f3\u30d5\u30a9\u30b0\u30e9\u30d5\u30a3\u30c3\u30af\u30fb\u30b7\u30e7\u30fc\u30c8\u52d5\u753b\u3092\u540c\u6642\u751f\u6210\u3002\n\n### 7.5 \u30d7\u30ed\u30f3\u30d7\u30c8\u4f8b\n\n**\u4f8b1: \u30c6\u30ad\u30b9\u30c8\u304b\u3089\u52d5\u753b\u751f\u6210**\n```\n\u4ee5\u4e0b\u306e\u30d6\u30ed\u30b0\u8a18\u4e8b\u3092\u3082\u3068\u306b\u300160\u79d2\u306eYouTube Shorts\u7528\u52d5\u753b\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\uff1a\n\n\u8981\u4ef6\uff1a\n- \u30ca\u30ec\u30fc\u30b7\u30e7\u30f3\u4ed8\u304d\uff08\u65e5\u672c\u8a9e\u3001\u660e\u308b\u3044\u30c8\u30fc\u30f3\uff09\n- 3\u3064\u306e\u30ad\u30fc\u30dd\u30a4\u30f3\u30c8\u3092\u8996\u899a\u7684\u306b\u5f37\u8abf\n- \u6700\u5f8c\u306bCTA\uff08\u30c1\u30e3\u30f3\u30cd\u30eb\u767b\u9332\uff09\u3092\u633f\u5165\n- BGM\u306f\u4e0d\u8981\n\n[\u30d6\u30ed\u30b0\u8a18\u4e8b\u672c\u6587]\n```\n\n**\u4f8b2: \u753b\u50cf\u2192\u52d5\u753b\u5909\u63db**\n```\n\u6dfb\u4ed8\u306e\u5546\u54c1\u753b\u50cf5\u679a\u3092\u4f7f\u3063\u3066\u3001EC\u30b5\u30a4\u30c8\u5411\u3051\u306e30\u79d2\u30d7\u30ed\u30e2\u30fc\u30b7\u30e7\u30f3\u52d5\u753b\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\u5404\u5546\u54c1\u304c3-5\u79d2\u305a\u3064\u8868\u793a\u3055\u308c\u3001\u5546\u54c1\u540d\u3068\u4fa1\u683c\u304c\u30c6\u30ad\u30b9\u30c8\u30aa\u30fc\u30d0\u30fc\u30ec\u30a4\u3067\u8868\u793a\u3055\u308c\u308b\u3088\u3046\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\u6700\u5f8c\u306e\u30b7\u30fc\u30f3\u306b\u306f\u30d6\u30e9\u30f3\u30c9\u30ed\u30b4\u3092\u5165\u308c\u3066\u304f\u3060\u3055\u3044\u3002\n```\n\n**\u4f8b3: \u30de\u30eb\u30c1\u30e2\u30fc\u30c0\u30eb\u8981\u7d04**\n```\n\u3053\u306e\u4f1a\u8b70\u306e\u9332\u97f3\uff08\u97f3\u58f0\u30d5\u30a1\u30a4\u30eb\uff09\u3068\u53c2\u7167\u8cc7\u6599\uff08PDF\uff09\u3092\u5408\u308f\u305b\u3066\u5206\u6790\u3057\u3001\n\u4ee5\u4e0b\u3092\u51fa\u529b\u3057\u3066\u304f\u3060\u3055\u3044\uff1a\n1. 3\u5206\u4ee5\u5185\u3067\u8aad\u3081\u308b\u8b70\u4e8b\u9332\u30c6\u30ad\u30b9\u30c8\n2. \u6c7a\u5b9a\u4e8b\u9805\u3068\u6b21\u306e\u30a2\u30af\u30b7\u30e7\u30f3\u30a2\u30a4\u30c6\u30e0\u4e00\u89a7\n3. \u8b70\u8ad6\u304c\u7d1b\u7cfe\u3057\u305f\u30dd\u30a4\u30f3\u30c8\u3068\u305d\u306e\u89e3\u6c7a\u7b56\n```\n\n---\n\n## 8. Daily Brief\n\n### 8.1 \u6982\u8981\n\nDaily Brief\u306f\u3001\u305d\u306e\u65e5\u306e\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u3084\u72b6\u6cc1\u306b\u57fa\u3065\u3044\u3066\u3001\u30d1\u30fc\u30bd\u30ca\u30e9\u30a4\u30ba\u3055\u308c\u305f\u4e00\u65e5\u306e\u6982\u8981\u3092\u63d0\u4f9b\u3059\u308bAI\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u6a5f\u80fd\u3067\u3059\u3002Google\u304c\u4ee5\u524d\u304b\u3089Google Labs\u3067\u5b9f\u9a13\u3057\u3066\u3044\u305f\u3082\u306e\u304c\u3001\u672c\u683c\u7684\u306a\u30b5\u30fc\u30d3\u30b9\u3068\u3057\u3066\u5b9f\u88c5\u3055\u308c\u307e\u3057\u305f\u3002I/O\u5f53\u65e5\u304b\u3089\u7c73\u56fd\u306eGoogle AI Plus\u30fbPro\u30fbUltra\u52a0\u5165\u8005\u306b\u9806\u6b21\u63d0\u4f9b\u958b\u59cb\u3067\u3059\u3002\n\n### 8.2 \u5f93\u6765\u306e\u300c\u307e\u3068\u3081\u6a5f\u80fd\u300d\u3068\u306e\u9055\u3044\n\n\u5f93\u6765\u306eAI\u304c\u63d0\u4f9b\u3059\u308b\u30c0\u30a4\u30b8\u30a7\u30b9\u30c8\u6a5f\u80fd\u3068\u6700\u5927\u306e\u9055\u3044\u306f\u3001Daily Brief\u306f\u305f\u3060\u307e\u3068\u3081\u308b\u3060\u3051\u3067\u306a\u304fAI\u304c\u80fd\u52d5\u7684\u306b**\u512a\u5148\u9806\u4f4d\u4ed8\u3051\u30fb\u6574\u7406\u30fb\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u63d0\u6848**\u3092\u884c\u3046\u70b9\u3067\u3059\u3002\n\n| \u5f93\u6765\u306e\u307e\u3068\u3081\u6a5f\u80fd | Daily Brief |\n|----------------|------------|\n| \u53d7\u4fe1\u30e1\u30fc\u30eb\u3092\u6642\u7cfb\u5217\u3067\u8868\u793a | \u91cd\u8981\u5ea6\u30fb\u7dca\u6025\u5ea6\u3067\u512a\u5148\u9806\u4f4d\u4ed8\u3051 |\n| \u30ab\u30ec\u30f3\u30c0\u30fc\u306e\u30a4\u30d9\u30f3\u30c8\u3092\u7f85\u5217 | \u79fb\u52d5\u6642\u9593\u30fb\u6e96\u5099\u3092\u8003\u616e\u3057\u305f\u884c\u52d5\u63d0\u6848 |\n| \u60c5\u5831\u306e\u7f85\u5217 | \u300c\u4f55\u3092\u6700\u521d\u306b\u3084\u308b\u3079\u304d\u304b\u300d\u306e\u6307\u793a |\n| \u624b\u52d5\u3067\u30c8\u30ea\u30ac\u30fc | \u6bce\u671d\u81ea\u52d5\u751f\u6210 |\n\n### 8.3 Daily Brief\u304c\u53c2\u7167\u3059\u308b\u60c5\u5831\u6e90\n\n- Gmail\uff08\u91cd\u8981\u30e1\u30fc\u30eb\u30fb\u8fd4\u4fe1\u5f85\u3061\uff09\n- Google Calendar\uff08\u4eca\u65e5\u30fb\u660e\u65e5\u306e\u30a4\u30d9\u30f3\u30c8\uff09\n- Google Tasks\uff08\u7de0\u5207\u304c\u8fd1\u3044\u30bf\u30b9\u30af\uff09\n- Google Drive\uff08\u6700\u8fd1\u30a2\u30af\u30bb\u30b9\u3057\u305f\u30d5\u30a1\u30a4\u30eb\uff09\n- \u5929\u6c17\u30fb\u4ea4\u901a\u60c5\u5831\uff08\u5916\u51fa\u4e88\u5b9a\u304c\u3042\u308b\u5834\u5408\uff09\n- \uff08Spark\u9023\u643a\u5f8c\uff09\u30b5\u30fc\u30c9\u30d1\u30fc\u30c6\u30a3\u30a2\u30d7\u30ea\u306e\u30c7\u30fc\u30bf\n\n### 8.4 \u30a2\u30a6\u30c8\u30d7\u30c3\u30c8\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\n\nDaily Brief\u306f\u97f3\u58f0\u30fb\u30c6\u30ad\u30b9\u30c8\u30fb\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u30ab\u30fc\u30c9\u306e\u3044\u305a\u308c\u304b\u306e\u5f62\u5f0f\u3067\u53d7\u3051\u53d6\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff1a\n\n- **\u97f3\u58f0\u5f62\u5f0f**: \u901a\u52e4\u4e2d\u306b\u8033\u3067\u8074\u304f\uff08Gemini Live\u3068\u9023\u643a\uff09\n- **\u30c6\u30ad\u30b9\u30c8\u5f62\u5f0f**: \u671d\u30a4\u30c1\u306eSlack\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u3088\u3046\u306b\u6d41\u308c\u3092\u78ba\u8a8d\n- **\u30ab\u30fc\u30c9\u5f62\u5f0f**: Neural Expressive\u30c7\u30b6\u30a4\u30f3\u3067\u3001\u30bf\u30c3\u30d7\u3057\u3066\u8a73\u7d30\u3092\u78ba\u8a8d\u3067\u304d\u308bUI\n\n### 8.5 \u5177\u4f53\u7684\u306a\u6d3b\u7528\u30b7\u30fc\u30f3\n\n**\u30b7\u30fc\u30f31: \u671d\u306e\u751f\u7523\u6027\u6700\u5927\u5316**\n\u6bce\u671d\u30b9\u30de\u30fc\u30c8\u30d5\u30a9\u30f3\u3092\u958b\u3044\u305f\u3068\u304d\u3001\u305d\u306e\u65e5\u3084\u308b\u3079\u304d\u3053\u3068\u306eTOP3\u3068\u63a8\u5968\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u300c\u4eca\u65e5\u306e\u6700\u512a\u5148\u4e8b\u9805\u306f\u7530\u4e2d\u3055\u3093\u3078\u306e\u63d0\u6848\u66f8\uff0813\u6642\u7de0\u5207\uff09\u300d\u3068\u3044\u3046\u5177\u4f53\u7684\u306a\u6307\u793a\u306b\u3088\u3063\u3066\u3001\u671d\u306e\u6642\u9593\u306e\u4f7f\u3044\u65b9\u304c\u5287\u7684\u306b\u6539\u5584\u3057\u307e\u3059\u3002\n\n**\u30b7\u30fc\u30f32: \u4f1a\u8b70\u524d\u6e96\u5099**\n30\u5206\u5f8c\u306b\u3042\u308b\u91cd\u8981\u306a\u4f1a\u8b70\u306e\u524d\u306b\u3001Daily Brief\u304c\u30a2\u30b8\u30a7\u30f3\u30c0\u306e\u78ba\u8a8d\u30fb\u524d\u56de\u306e\u8b70\u4e8b\u9332\u306e\u8981\u7d04\u30fb\u53c2\u52a0\u8005\u306e\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u30fb\u6e96\u5099\u3059\u3079\u304d\u8cea\u554f\u306e\u63d0\u6848\u3092\u307e\u3068\u3081\u3066\u63d0\u793a\u3057\u307e\u3059\u3002\n\n**\u30b7\u30fc\u30f33: \u51fa\u5f35\u30fb\u5916\u51fa\u306e\u7ba1\u7406**\n\u5916\u51fa\u304c\u5165\u3063\u3066\u3044\u308b\u65e5\u306f\u3001\u5929\u6c17\u30fb\u4ea4\u901a\u60c5\u5831\u30fb\u51fa\u767a\u6642\u523b\u306e\u63a8\u5968\u3092\u542b\u3080\u30d6\u30ea\u30fc\u30d5\u30a3\u30f3\u30b0\u3092\u751f\u6210\u3057\u307e\u3059\u3002\n\n**\u30b7\u30fc\u30f34: \u9031\u660e\u3051\u306e\u30ad\u30e3\u30c3\u30c1\u30a2\u30c3\u30d7**\n\u6708\u66dc\u65e5\u306e\u30d6\u30ea\u30fc\u30d5\u30a3\u30f3\u30b0\u306f\u7279\u5225\u306b\u62e1\u5f35\u3055\u308c\u3001\u5148\u9031\u306e\u672a\u89e3\u6c7a\u4e8b\u9805\u30fb\u4eca\u9031\u306e\u91cd\u8981\u30de\u30a4\u30eb\u30b9\u30c8\u30fc\u30f3\u30fb\u7a4d\u307f\u6b8b\u3057\u306e\u30e1\u30fc\u30eb\u8fd4\u4fe1\u3092\u4e00\u89a7\u5316\u3057\u307e\u3059\u3002\n\n### 8.6 \u8a2d\u5b9a\u30fb\u30d7\u30ed\u30f3\u30d7\u30c8\u4f8b\n\n**Daily Brief\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u8a2d\u5b9a**\n```\n\u79c1\u306eDaily Brief\u3092\u4ee5\u4e0b\u306e\u8a2d\u5b9a\u306b\u3057\u3066\u304f\u3060\u3055\u3044\uff1a\n\n\u751f\u6210\u30bf\u30a4\u30df\u30f3\u30b0\uff1a\u6bce\u671d7:00\uff08JST\uff09\n\u5f62\u5f0f\uff1a\u97f3\u58f0 + \u30c6\u30ad\u30b9\u30c8\u4e21\u65b9\n\u91cd\u70b9\u9805\u76ee\uff1a\n1. \u7de0\u5207\u304c\u672c\u65e5\u30fb\u7fcc\u65e5\u306e\u30bf\u30b9\u30af\u3092\u6700\u512a\u5148\n2. \u672a\u8fd4\u4fe1\u30e1\u30fc\u30eb\uff0824\u6642\u9593\u4ee5\u5185\uff09\n3. \u4eca\u65e5\u306e\u4f1a\u8b70\u30ea\u30b9\u30c8\uff08\u79fb\u52d5\u6642\u9593\u3082\u542b\u3080\uff09\n\u9664\u5916\uff1a\u30d7\u30ed\u30e2\u30fc\u30b7\u30e7\u30f3\u30e1\u30fc\u30eb\u3001\u30cb\u30e5\u30fc\u30b9\u30ec\u30bf\u30fc\n\u8a00\u8a9e\uff1a\u65e5\u672c\u8a9e\n\u30d6\u30ea\u30fc\u30d5\u30a3\u30f3\u30b0\u6642\u9593\uff1a3\u5206\u4ee5\u5185\n```\n\n---\n\n## 9. Gemini\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u30a2\u30d7\u30ea\u5f37\u5316\n\n### 9.1 \u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u30a2\u30d7\u30ea\u306e\u73fe\u72b6\u3068\u5f37\u5316\n\nGemini\u306e\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u30a2\u30d7\u30ea\u306fmacOS\u30fbWindows\u3067\u63d0\u4f9b\u3055\u308c\u3066\u304a\u308a\u3001\u4eca\u56de\u306eI/O\u3067\u5927\u5e45\u306a\u6a5f\u80fd\u62e1\u5f35\u304c\u767a\u8868\u3055\u308c\u307e\u3057\u305f\u3002Neural Expressive\u30c7\u30b6\u30a4\u30f3\u3078\u306e\u5237\u65b0\u306f\u5f53\u65e5\u304b\u3089\u9069\u7528\u3055\u308c\u3066\u304a\u308a\u3001\u30e2\u30d0\u30a4\u30eb\u3068\u540c\u7b49\u306e\u8c4a\u304b\u306a\u8868\u73fe\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\n\n### 9.2 Spark\u306e\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u7d71\u5408\uff082026\u5e74\u590f\u4e88\u5b9a\uff09\n\n\u6700\u5927\u306e\u65b0\u6a5f\u80fd\u306f**Gemini Spark\u306e\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u30a2\u30d7\u30ea\u3078\u306e\u7d71\u5408**\u3067\u3059\u3002Mac\u7248\u30a2\u30d7\u30ea\u306bSpark\u304c\u642d\u8f09\u3055\u308c\u308b\u3068\uff1a\n\n- **\u30ed\u30fc\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u3078\u306e\u30a2\u30af\u30bb\u30b9**: \u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u4e0a\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u76f4\u63a5\u64cd\u4f5c\n- **\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u81ea\u52d5\u5316**: \u30a2\u30d7\u30ea\u3092\u6a2a\u65ad\u3057\u305f\u4f5c\u696d\u3092\u81ea\u52d5\u5b9f\u884c\n- **\u30b7\u30b9\u30c6\u30e0\u5168\u4f53\u306e\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8**: macOS\u306e\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8\u306b\u8fd1\u3044\u5f62\u3067\u30b7\u30b9\u30c6\u30e0\u30ec\u30d9\u30eb\u306e\u64cd\u4f5c\u304c\u53ef\u80fd\n\n### 9.3 Gemini Live \u306e\u9032\u5316\n\n\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u30a2\u30d7\u30ea\u3067\u306eGemini Live\u3082\u5f37\u5316\u3055\u308c\u307e\u3059\uff1a\n\n- **\u753b\u9762\u5171\u6709\u6a5f\u80fd**: \u73fe\u5728\u753b\u9762\u306b\u8868\u793a\u3055\u308c\u3066\u3044\u308b\u3082\u306e\u306b\u3064\u3044\u3066Gemini\u3068\u4f1a\u8a71\n- **\u30d5\u30a1\u30a4\u30eb\u53c2\u7167\u3057\u306a\u304c\u3089\u4f1a\u8a71**: \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u958b\u304d\u306a\u304c\u3089\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u3067\u8cea\u554f\n- **\u30a4\u30f3\u30e9\u30a4\u30f3\u8868\u793a**: \u30d5\u30eb\u30b9\u30af\u30ea\u30fc\u30f3\u4e0d\u8981\u3067\u4f1a\u8a71\u7d99\u7d9a\n\n### 9.4 \u5177\u4f53\u7684\u306a\u6d3b\u7528\u30b7\u30fc\u30f3\n\n**\u30b7\u30fc\u30f31: \u30e9\u30a4\u30c6\u30a3\u30f3\u30b0\u652f\u63f4**\n\u30d6\u30ed\u30b0\u30fb\u30ec\u30dd\u30fc\u30c8\u30fb\u30d7\u30ec\u30bc\u30f3\u8cc7\u6599\u3092\u66f8\u304d\u306a\u304c\u3089\u3001\u753b\u9762\u5171\u6709\u3067Gemini\u306b\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306e\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af\u3092\u6c42\u3081\u308b\u3002\u300c\u4eca\u66f8\u3044\u3066\u3044\u308b\u3053\u306e\u6bb5\u843d\u3001\u3082\u3063\u3068\u8aac\u5f97\u529b\u3092\u6301\u305f\u305b\u308b\u306b\u306f\uff1f\u300d\n\n**\u30b7\u30fc\u30f32: \u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc**\nIDE\u3092\u958b\u304d\u306a\u304c\u3089Gemini\u3068\u4f1a\u8a71\u3057\u3001\u30b3\u30fc\u30c9\u306e\u554f\u984c\u70b9\u3092\u6307\u6458\u3057\u3066\u3082\u3089\u3046\u3002VSCode\u306e\u62e1\u5f35\u6a5f\u80fd\u3068\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u304c\u6df1\u307e\u308b\u3002\n\n**\u30b7\u30fc\u30f33: \u30d7\u30ec\u30bc\u30f3\u6e96\u5099**\n\u30b9\u30e9\u30a4\u30c9\u3092\u898b\u306a\u304c\u3089\u300c\u3053\u306e\u30b9\u30e9\u30a4\u30c9\u306e\u8aac\u660e\u304c\u5f31\u3044\u300d\u300c\u7af6\u5408\u3068\u306e\u6bd4\u8f03\u30c7\u30fc\u30bf\u3092\u8ffd\u52a0\u3059\u3079\u304d\u300d\u3068\u3044\u3063\u305f\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af\u3092\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u3067\u53d7\u3051\u53d6\u308b\u3002\n\n---\n\n## 10. Antigravity 2.0\n\n### 10.1 \u6982\u8981\n\nGoogle Antigravity\u306f\u3001Google\u306e\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u30d5\u30a1\u30fc\u30b9\u30c8\u958b\u767a\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u3059\u30022.0\u3067\u306f\u30b9\u30bf\u30f3\u30c9\u30a2\u30ed\u30f3\u306e\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u30a2\u30d7\u30ea\u3068\u3057\u3066\u751f\u307e\u308c\u5909\u308f\u308a\u3001\u5358\u306a\u308b\u30b3\u30fc\u30c9\u88dc\u5b8c\u30c4\u30fc\u30eb\u3092\u8d85\u3048\u305f\u300c\u30a2\u30a4\u30c7\u30a2\u3092\u672c\u756a\u74b0\u5883\u307e\u3067\u4e00\u6c17\u901a\u8cab\u3067\u5c4a\u3051\u308b\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u300d\u3068\u3057\u3066\u518d\u8a2d\u8a08\u3055\u308c\u307e\u3057\u305f\u3002I/O 2026\u3067\u306e\u767a\u8868\u5185\u5bb9\u306f\u3001\u958b\u767a\u8005\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306b\u5927\u304d\u306a\u885d\u6483\u3092\u4e0e\u3048\u307e\u3057\u305f\u3002\n\nGoogle\u306f\u30c7\u30e2\u3067\u300cAntigravity 2.0\u3067\u30aa\u30da\u30ec\u30fc\u30c6\u30a3\u30f3\u30b0\u30b7\u30b9\u30c6\u30e0\u309212\u6642\u9593\u3067\u4f5c\u6210\u3057\u305f\u300d\u3068\u767a\u8868\u3057\u3001\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u99c6\u52d5\u958b\u767a\u306e\u53ef\u80fd\u6027\u3092\u9bae\u70c8\u306b\u793a\u3057\u307e\u3057\u305f\u3002\n\n### 10.2 \u4e3b\u8981\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\n\n**Antigravity 2.0\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u30a2\u30d7\u30ea**\n- \u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u30aa\u30fc\u30b1\u30b9\u30c8\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u6838\u5fc3\u306b\u8a2d\u8a08\u3055\u308c\u305f\u30b9\u30bf\u30f3\u30c9\u30a2\u30ed\u30f3\u30a2\u30d7\u30ea\n- Google AI Studio\u304b\u3089Antigravity\u3078\u306e\u30b7\u30fc\u30e0\u30ec\u30b9\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u79fb\u884c\n- Android\u30a2\u30d7\u30ea\u958b\u767a: \u30d7\u30ed\u30f3\u30d7\u30c8\u3060\u3051\u3067\u9ad8\u54c1\u8cea\u306aAndroid\u30a2\u30d7\u30ea\u3092\u751f\u6210\n- \u30d3\u30b8\u30e5\u30a2\u30eb\u306a\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u8a2d\u8a08\n\n**Antigravity CLI**\n```bash\n# Antigravity CLI\u306e\u57fa\u672c\u30b3\u30de\u30f3\u30c9\u4f8b\nantigravity init my-project --template=next-app\nantigravity agent create --name=email-processor --trigger=gmail\nantigravity deploy --env=production\nantigravity agent list\nantigravity logs --agent=email-processor --tail=100\n```\n\n**Antigravity SDK**\n```python\n# Python SDK\u306b\u3088\u308b\u30de\u30cd\u30fc\u30b8\u30c9\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u4f8b\nfrom antigravity import Agent, Tool, WorkspaceIntegration\n\n# Gmail\u51e6\u7406\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u5b9a\u7fa9\nemail_agent = Agent(\n    name=\"email_prioritizer\",\n    model=\"gemini-3.5-flash\",\n    description=\"\u91cd\u8981\u30e1\u30fc\u30eb\u3092\u81ea\u52d5\u5206\u985e\u30fb\u8fd4\u4fe1\u6848\u3092\u751f\u6210\u3059\u308b\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\",\n    tools=[\n        Tool.gmail_read(),\n        Tool.gmail_send(),\n        Tool.calendar_check(),\n    ],\n    integrations=[\n        WorkspaceIntegration.gmail(\n            scopes=[\"read\", \"send\"],\n            filters={\"from\": \"@important-client.com\"}\n        )\n    ]\n)\n\n# \u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u5b9f\u884c\nresult = await email_agent.run(\n    trigger=\"new_email\",\n    instructions=\"\"\"\n    \u53d7\u4fe1\u3057\u305f\u30e1\u30fc\u30eb\u3092\u4ee5\u4e0b\u306e\u57fa\u6e96\u3067\u51e6\u7406\u3057\u3066\u304f\u3060\u3055\u3044:\n    1. \u7dca\u6025\u5ea6\uff08\u9ad8/\u4e2d/\u4f4e\uff09\u3092\u5224\u65ad\n    2. \u8fd4\u4fe1\u304c\u5fc5\u8981\u306a\u5834\u5408\u3001\u8349\u7a3f\u3092\u4f5c\u6210\n    3. \u30ab\u30ec\u30f3\u30c0\u30fc\u3068\u306e\u6574\u5408\u3092\u78ba\u8a8d\n    \"\"\"\n)\n```\n\n**Gemini API\u4e0a\u306eManaged Agents**\n\u30af\u30e9\u30a6\u30c9\u4e0a\u3067\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u7ba1\u7406\u30fb\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u305f\u3081\u306e\u30de\u30cd\u30fc\u30b8\u30c9\u30b5\u30fc\u30d3\u30b9\u3002\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u30fb\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u30fb\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u304cGoogle\u306e\u30a4\u30f3\u30d5\u30e9\u3067\u5b8c\u7d50\u3057\u307e\u3059\u3002\n\n**Gemini Enterprise Agent Platform**\n\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u5411\u3051\u306e\u9ad8\u5ea6\u306a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30fb\u30b3\u30f3\u30d7\u30e9\u30a4\u30a2\u30f3\u30b9\u6a5f\u80fd\u3092\u5099\u3048\u305f\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u5b9f\u884c\u74b0\u5883\u3002SOC 2\u30fbISO 27001\u6e96\u62e0\u3002\n\n### 10.3 Google Workspace\u3068\u306e\u76f4\u63a5\u9023\u643a\n\nAntigravity\u304b\u3089\u69cb\u7bc9\u3057\u305f\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u304c\u3001Google Workspace\u306e\u5404API\u3092**\u30cd\u30a4\u30c6\u30a3\u30d6\u306b\u547c\u3073\u51fa\u305b\u308b**\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002\n\n```python\n# Workspace\u9023\u643a\u306e\u4f8b\uff1aSheets\u30c7\u30fc\u30bf\u306b\u57fa\u3065\u304f\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u751f\u6210\nfrom antigravity.workspace import Sheets, Docs, Drive\n\ndashboard_agent = Agent(\n    name=\"quarterly_dashboard\",\n    tools=[\n        Sheets.read(spreadsheet_id=\"YOUR_SHEET_ID\"),\n        Docs.create(),\n        Drive.share()\n    ]\n)\n\n# \u56db\u534a\u671f\u30ec\u30dd\u30fc\u30c8\u306e\u81ea\u52d5\u751f\u6210\u30fb\u914d\u5e03\nawait dashboard_agent.run(\"\"\"\nQ3\u306e\u58f2\u4e0a\u30c7\u30fc\u30bf\uff08Sheets\uff09\u3092\u5206\u6790\u3057\u3001\nKPI\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\uff08Docs\uff09\u3092\u4f5c\u6210\u3057\u3001\n\u7d4c\u55b6\u9663\u306e\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3078\u5171\u6709\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\"\"\")\n```\n\n### 10.4 Google AI Studio \u2192 Antigravity\u306e\u30b7\u30fc\u30e0\u30ec\u30b9\u79fb\u884c\n\n```\n[AI Studio \u3067\u30d7\u30ed\u30c8\u30bf\u30a4\u30d7\u4f5c\u6210]\n       \u2193 \u30ef\u30f3\u30af\u30ea\u30c3\u30af\n[Antigravity \u3078\u5168\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u79fb\u884c]\n       \u2193\n[\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u30fb\u30c6\u30b9\u30c8]\n       \u2193\n[\u672c\u756a\u30c7\u30d7\u30ed\u30a4]\n```\n\n### 10.5 \u5177\u4f53\u7684\u306a\u6d3b\u7528\u30b7\u30fc\u30f3\n\n**\u30b7\u30fc\u30f31: SaaS\u30d7\u30ed\u30c0\u30af\u30c8\u306e\u7206\u901f\u958b\u767a**\n\u30a2\u30a4\u30c7\u30a2\u3092AI Studio\u3067\u30d7\u30ed\u30c8\u30bf\u30a4\u30d7\u3057\u3001Antigravity\u3067\u672c\u756a\u54c1\u8cea\u306b\u78e8\u304d\u4e0a\u3052\u3001Vercel\u306a\u3069\u306b\u30c7\u30d7\u30ed\u30a4\u3002\u5f93\u6765\u306e\u958b\u767a\u30b5\u30a4\u30af\u30eb\u3092\u6570\u5206\u306e\u4e00\u306b\u77ed\u7e2e\u3002\n\n**\u30b7\u30fc\u30f32: \u793e\u5185\u696d\u52d9\u81ea\u52d5\u5316\u30c4\u30fc\u30eb**\nWorkspace\u3068\u9023\u643a\u3057\u305f\u30ab\u30b9\u30bf\u30e0\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3067\u3001\u793e\u5185\u306e\u30ec\u30dd\u30fc\u30c6\u30a3\u30f3\u30b0\u30fb\u30c7\u30fc\u30bf\u96c6\u8a08\u30fb\u901a\u77e5\u306a\u3069\u3092\u81ea\u52d5\u5316\u3002\n\n**\u30b7\u30fc\u30f33: Android\u30a2\u30d7\u30ea\u306e\u6c11\u4e3b\u5316**\n\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u7d4c\u9a13\u304c\u6d45\u3044\u30af\u30ea\u30a8\u30a4\u30bf\u30fc\u3067\u3082\u3001\u81ea\u7136\u8a00\u8a9e\u3067\u6307\u793a\u3059\u308b\u3060\u3051\u3067Android\u30a2\u30d7\u30ea\u3092\u4f5c\u6210\u30fb\u516c\u958b\u3067\u304d\u308b\u3002\n\n---\n\n## 11. Google AI Studio \u00d7 Google Workspace \u7d71\u5408\n\n### 11.1 \u6982\u8981\n\nGoogle AI Studio\u306fAI\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u767a\u3059\u308b\u305f\u3081\u306eIDE\u3067\u3059\u3002\u4eca\u56de\u306eI/O\u3067\u6700\u5927\u306e\u5909\u5316\u306f\u3001**Google Workspace\u306e\u30c7\u30fc\u30bf\u306bAI Studio\u304b\u3089\u76f4\u63a5\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b**\u3088\u3046\u306b\u306a\u3063\u305f\u3053\u3068\u3067\u3059\u3002\n\n### 11.2 \u4e3b\u8981\u306a\u7d71\u5408\u6a5f\u80fd\n\n**Sheets\u3078\u306e\u30a2\u30af\u30bb\u30b9**\n```javascript\n// AI Studio\u5185\u3067Sheets\u30c7\u30fc\u30bf\u3092\u76f4\u63a5\u30af\u30a8\u30ea\nconst salesData = await workspace.sheets.query({\n  spreadsheetId: 'SHEET_ID',\n  range: 'A1:Z100',\n  filter: { quarter: 'Q3_2026' }\n});\n\n// Gemini API\u3067\u30c7\u30fc\u30bf\u3092\u5206\u6790\nconst analysis = await gemini.analyze(salesData, {\n  prompt: '\u7570\u5e38\u5024\u3068\u50be\u5411\u5206\u6790\u3092\u884c\u3044\u3001\u30a2\u30af\u30b7\u30e7\u30f3\u53ef\u80fd\u306a\u30a4\u30f3\u30b5\u30a4\u30c8\u3092\u63d0\u4f9b\u3057\u3066\u304f\u3060\u3055\u3044'\n});\n```\n\n**Drive\u306e\u6d3b\u7528**\n\u30c1\u30fc\u30e0\u5168\u4f53\u304c\u4f7f\u7528\u3059\u308bGoogle\u30c9\u30e9\u30a4\u30d6\u5185\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u30fb\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u30fbPDF\u7fa4\u3092\u6a2a\u65ad\u7684\u306b\u691c\u7d22\u30fb\u6d3b\u7528\u3059\u308b\u30a2\u30d7\u30ea\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002\n\n**Docs\u30fbSlides\u3078\u306e\u66f8\u304d\u51fa\u3057**\n\u5206\u6790\u7d50\u679c\u3084\u751f\u6210\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u76f4\u63a5Docs\u306b\u66f8\u304d\u8fbc\u3093\u3060\u308a\u3001Slides\u306e\u30d7\u30ec\u30bc\u30f3\u8cc7\u6599\u3068\u3057\u3066\u51fa\u529b\u3057\u305f\u308a\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3002\n\n### 11.3 Google AI Studio\u30e2\u30d0\u30a4\u30eb\u30a2\u30d7\u30ea\n\n\u30d7\u30ec\u30ec\u30b8\u30b9\u30c8\u53d7\u4ed8\u304c\u958b\u59cb\u3055\u308c\u305fGoogle AI Studio\u306e\u30e2\u30d0\u30a4\u30eb\u30a2\u30d7\u30ea\u306b\u3088\u308a\u3001\u5916\u51fa\u5148\u3067\u30a2\u30a4\u30c7\u30a2\u3092\u30ad\u30e3\u30d7\u30c1\u30e3\u3057\u3001\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u306b\u623b\u3063\u305f\u3068\u304d\u306b\u306f\u52d5\u4f5c\u3059\u308b\u30d7\u30ed\u30c8\u30bf\u30a4\u30d7\u304c\u5b8c\u6210\u3057\u3066\u3044\u308b\u3001\u3068\u3044\u3046\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u304c\u5b9f\u73fe\u3057\u307e\u3059\u3002\n\n### 11.4 \u5177\u4f53\u7684\u306a\u6d3b\u7528\u30b7\u30fc\u30f3\n\n**\u30b7\u30fc\u30f31: \u7d4c\u55b6\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u306e\u81ea\u52d5\u5316**\n\u8907\u6570\u306eGoogle\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u3092\u7d71\u5408\u3057\u3001\u81ea\u52d5\u66f4\u65b0\u3055\u308c\u308b\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u3092AI Studio\u3067\u30d7\u30ed\u30c8\u30bf\u30a4\u30d7\u2192Antigravity\u3067\u672c\u756a\u5316\u3002\n\n**\u30b7\u30fc\u30f32: \u793e\u5185\u30ca\u30ec\u30c3\u30b8\u30d9\u30fc\u30b9Q&amp;A**\nGoogle Drive\u5185\u306e\u793e\u5185\u6587\u66f8\u3092RAG\u306e\u30bd\u30fc\u30b9\u3068\u3057\u3001\u300c\u3053\u306e\u88fd\u54c1\u306e\u8fd4\u54c1\u30dd\u30ea\u30b7\u30fc\u306f\uff1f\u300d\u3068\u3044\u3063\u305f\u8cea\u554f\u306b\u7b54\u3048\u308b\u30c1\u30e3\u30c3\u30c8\u30dc\u30c3\u30c8\u3092\u69cb\u7bc9\u3002\n\n**\u30b7\u30fc\u30f33: \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7ba1\u7406\u30c4\u30fc\u30eb**\nGoogle Sheets\u306e\u30bf\u30b9\u30af\u30ea\u30b9\u30c8\u3001Calendar\u306e\u4f1a\u8b70\u3001Gmail\u306e\u3084\u308a\u3068\u308a\u3092AI\u304c\u7d71\u5408\u3057\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u5065\u5168\u6027\u3092\u53ef\u8996\u5316\u3059\u308b\u30c4\u30fc\u30eb\u3002\n\n---\n\n## 12. Android XR \u30b9\u30de\u30fc\u30c8\u30a2\u30a4\u30a6\u30a7\u30a2\n\n### 12.1 \u6982\u8981\n\nGoogle I/O 2026\u306b\u304a\u3044\u3066\u3001Google\u306fSamsung\u3068\u30d5\u30a1\u30c3\u30b7\u30e7\u30f3\u30d6\u30e9\u30f3\u30c9\uff08Gentle Monster\u30fbWarby Parker\uff09\u3068\u306e\u5354\u696d\u3067\u3001Android XR\u3092\u642d\u8f09\u3057\u305f\u30b9\u30de\u30fc\u30c8\u30a2\u30a4\u30a6\u30a7\u30a2\u3092\u767a\u8868\u3057\u307e\u3057\u305f\u30022026\u5e74\u79cb\u306e\u767a\u58f2\u4e88\u5b9a\u3067\u3001AI\u6a5f\u80fd\u3068\u30d5\u30a1\u30c3\u30b7\u30e7\u30f3\u6027\u3092\u4e21\u7acb\u3055\u305b\u308b\u3053\u3068\u3092\u76ee\u6307\u3057\u3066\u3044\u307e\u3059\u3002\n\n### 12.2 2\u7a2e\u985e\u306e\u30a2\u30a4\u30a6\u30a7\u30a2\n\n**1. \u30aa\u30fc\u30c7\u30a3\u30aa\u30b0\u30e9\u30b9\uff08\u5148\u884c\u767a\u58f2\uff09**\n- \u898b\u305f\u76ee\u306f\u901a\u5e38\u306e\u30e1\u30ac\u30cd\u3068\u5909\u308f\u3089\u306a\u3044\n- \u30b9\u30d4\u30fc\u30ab\u30fc\u304c\u5185\u8535\u3055\u308c\u3001Gemini\u306e\u56de\u7b54\u3092\u8033\u3067\u8074\u304f\n- \u30ab\u30e1\u30e9\u306a\u3057\n- \u30d0\u30c3\u30c6\u30ea\u30fc\u6301\u7d9a\u6642\u9593\u304c\u9577\u3044\n- 2026\u5e74\u79cb\u306b\u6700\u521d\u306b\u767a\u58f2\n\n**2. \u30c7\u30a3\u30b9\u30d7\u30ec\u30a4\u30b0\u30e9\u30b9\uff08\u5f8c\u7d9a\uff09**\n- \u5fc5\u8981\u306a\u60c5\u5831\u3092\u8996\u91ce\u306b\u30aa\u30fc\u30d0\u30fc\u30ec\u30a4\u8868\u793a\n- AR\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3\u30fb\u7ffb\u8a33\u30fb\u60c5\u5831\u691c\u7d22\u304c\u8996\u91ce\u5185\u3067\u5b8c\u7d50\n- \u9ad8\u5ea6\u306a\u30aa\u30d7\u30c6\u30a3\u30af\u30b9\u6280\u8853\u304c\u5fc5\u8981\u306a\u305f\u3081\u5f8c\u767a\n\n### 12.3 Gemini\u9023\u643a\u6a5f\u80fd\n\n**\u898b\u3066\u3044\u308b\u3082\u306e\u306b\u3064\u3044\u3066\u8cea\u554f**\n```\n[\u524d\u3092\u5411\u3044\u305f\u307e\u307e\u3067\u97f3\u58f0\u64cd\u4f5c]\n\u30e6\u30fc\u30b6\u30fc: \u300c\u3053\u306e\u30ec\u30b9\u30c8\u30e9\u30f3\u3001\u8a55\u5224\u306f\u3069\u3046\uff1f\u300d\nGemini: \u300cGoogle\u8a55\u4fa14.3\u70b9\u3001\u30b3\u30b9\u30d1\u25ce\u306e\u30a4\u30bf\u30ea\u30a2\u30f3\u3002\n\u4eba\u6c17\u30e1\u30cb\u30e5\u30fc\u306f\u30ab\u30eb\u30dc\u30ca\u30fc\u30e9\u3067\u3001\u4e88\u7d04\u306f\u63a8\u5968\u3067\u3059\u3002\u300d\n```\n\n**\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3**\n- \u73fe\u5728\u5730\u3068\u5411\u3044\u3066\u3044\u308b\u65b9\u5411\u3092\u628a\u63e1\u3057\u305f\u4e0a\u3067\u306e\u30bf\u30fc\u30f3\u30d0\u30a4\u30bf\u30fc\u30f3\u30ca\u30d3\n- \u300c\u6b21\u306e\u4ea4\u5dee\u70b9\u3092\u53f3\u300d\u3068\u3044\u3046\u97f3\u58f0\u30ac\u30a4\u30c9\u304cAR\u8868\u793a\u3068\u540c\u671f\n\n**\u30c6\u30ad\u30b9\u30c8\u7ffb\u8a33**\n- \u8996\u91ce\u5185\u306e\u30c6\u30ad\u30b9\u30c8\uff08\u770b\u677f\u30fb\u30e1\u30cb\u30e5\u30fc\u306a\u3069\uff09\u3092\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u7ffb\u8a33\n- \u7ffb\u8a33\u7d50\u679c\u3092\u30aa\u30fc\u30d0\u30fc\u30ec\u30a4\u8868\u793a or \u97f3\u58f0\u3067\u8aad\u307f\u4e0a\u3052\n\n**\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u652f\u63f4**\n- \u30cf\u30f3\u30ba\u30d5\u30ea\u30fc\u3067\u901a\u8a71\u30fb\u30e1\u30c3\u30bb\u30fc\u30b8\u7ba1\u7406\n- Gemini\u304c\u4e0d\u5728\u7740\u4fe1\u3084\u672a\u8aad\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u97f3\u58f0\u3067\u8981\u7d04\n\n**Galaxy\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u9023\u643a\uff08Samsung\u7248\uff09**\n- \u30b9\u30de\u30fc\u30c8\u30d5\u30a9\u30f3\u306e\u30ab\u30e1\u30e9\u64cd\u4f5c\n- Galaxy Watch / Home\u3068\u306e\u9023\u643a\n\n### 12.4 \u60f3\u5b9a\u3055\u308c\u308b\u6d3b\u7528\u30b7\u30fc\u30f3\n\n**\u30d7\u30ed\u30d5\u30a7\u30c3\u30b7\u30e7\u30ca\u30eb\u5411\u3051**\n- \u73fe\u5834\u4f5c\u696d\u8005\uff1a\u76ee\u306e\u524d\u306e\u6a5f\u5668\u306b\u3064\u3044\u3066\u300c\u6545\u969c\u30b3\u30fc\u30c9XX2\u306f\u3069\u3046\u5bfe\u51e6\uff1f\u300d\u3068\u8cea\u554f\u3057\u306a\u304c\u3089\u4e21\u624b\u3092\u4f7f\u3063\u305f\u4f5c\u696d\u3092\u7d99\u7d9a\n- \u55b6\u696d\u30d1\u30fc\u30bd\u30f3\uff1a\u5546\u8ac7\u76f8\u624b\u306e\u540d\u523a\u3092\u898b\u306a\u304c\u3089\u300c\u3053\u306e\u4f1a\u793e\u306e\u6700\u65b0\u30d7\u30ec\u30b9\u30ea\u30ea\u30fc\u30b9\u306f\uff1f\u300d\u3092\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u78ba\u8a8d\n- \u533b\u7642\u5f93\u4e8b\u8005\uff1a\u60a3\u8005\u306e\u9854\u3092\u898b\u306a\u304c\u3089\u96fb\u5b50\u30ab\u30eb\u30c6\u306e\u30b5\u30de\u30ea\u30fc\u3092AR\u30aa\u30fc\u30d0\u30fc\u30ec\u30a4\u8868\u793a\uff08\u5c06\u6765\u7684\uff09\n\n**\u4e00\u822c\u30e6\u30fc\u30b6\u30fc\u5411\u3051**\n- \u89b3\u5149\uff1a\u8a2a\u308c\u305f\u5efa\u7269\u30fb\u6599\u7406\u30fb\u690d\u7269\u306b\u3064\u3044\u3066\u5373\u5ea7\u306b\u60c5\u5831\u53d6\u5f97\n- \u8a9e\u5b66\u5b66\u7fd2\uff1a\u5916\u56fd\u8a9e\u306e\u770b\u677f\u30fb\u4f1a\u8a71\u306e\u7ffb\u8a33\u3092\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u3067\n- \u30b7\u30e7\u30c3\u30d4\u30f3\u30b0\uff1a\u5546\u54c1\u306e\u30d0\u30fc\u30b3\u30fc\u30c9\u30b9\u30ad\u30e3\u30f3\u3067\u4fa1\u683c\u6bd4\u8f03\u30fb\u30ec\u30d3\u30e5\u30fc\u78ba\u8a8d\n\n---\n\n## 13. Google Flow 2.0\n\n### 13.1 \u6982\u8981\n\nGoogle Flow\u306fAI\u3092\u6d3b\u7528\u3057\u305f\u52d5\u753b\u751f\u6210\u30fb\u7de8\u96c6\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u3001\u4eca\u56de\u306eI/O\u3067\u5927\u5e45\u306a\u6a5f\u80fd\u62e1\u5f35\u304c\u767a\u8868\u3055\u308c\u307e\u3057\u305f\u3002\u300cFlow 2.0\u300d\u3067\u306f\u3001Gemini Omni\u306e\u7d71\u5408\u30fbAI\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306b\u3088\u308b\u591a\u91cd\u30a2\u30af\u30b7\u30e7\u30f3\u30fbFlow Tools\u3068\u3044\u3046\u30ab\u30b9\u30bf\u30e0\u30c4\u30fc\u30eb\u6a5f\u80fd\u30fb\u97f3\u697d\u751f\u6210\u6a5f\u80fd\u304c\u8ffd\u52a0\u3055\u308c\u307e\u3059\u3002\n\n### 13.2 Gemini Omni\u7d71\u5408\n\nFlow\u5185\u3067Gemini Omni\u304c\u5229\u7528\u53ef\u80fd\u306b\u306a\u308b\u3053\u3068\u3067\uff1a\n- \u30c6\u30ad\u30b9\u30c8\u30d7\u30ed\u30f3\u30d7\u30c8\u304b\u3089\u65b0\u3057\u3044\u30ad\u30e3\u30e9\u30af\u30bf\u30fc\u30fb\u8981\u7d20\u3092\u751f\u6210\u3057\u52d5\u753b\u306b\u633f\u5165\n- \u65e2\u5b58\u306e\u30b7\u30fc\u30f3\u3092\u5225\u306e\u30b9\u30bf\u30a4\u30eb\u306b\u5909\u63db\n- \u97f3\u58f0\u30fb\u753b\u50cf\u30fb\u30c6\u30ad\u30b9\u30c8\u3092\u7d44\u307f\u5408\u308f\u305b\u305f\u52d5\u753b\u5236\u4f5c\u304c\u53ef\u80fd\n\n### 13.3 AI\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306b\u3088\u308b\u591a\u91cd\u30a2\u30af\u30b7\u30e7\u30f3\n\n\u5f93\u6765\u306f1\u30b9\u30c6\u30c3\u30d7\u305a\u3064\u884c\u3063\u3066\u3044\u305f\u52d5\u753b\u7de8\u96c6\u304c\u3001\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306b\u3088\u3063\u3066\u4e26\u884c\u51e6\u7406\u3055\u308c\u307e\u3059\uff1a\n\n```\n\u5358\u4e00\u30d7\u30ed\u30f3\u30d7\u30c8\u304b\u3089\u306e\u591a\u91cd\u5b9f\u884c\u4f8b:\n\n\u5165\u529b: \"\u3053\u306e1\u679a\u306e\u5199\u771f\u304b\u3089\u30013\u3064\u306e\u7570\u306a\u308b\u30ab\u30e1\u30e9\u30a2\u30f3\u30b0\u30eb\u3067\n      \u52d5\u304f\u6620\u50cf\u30af\u30ea\u30c3\u30d7\u3092\u751f\u6210\u3057\u3001\u305d\u308c\u305e\u308c\u306bBGM\u3092\u4ed8\u3051\u3066\n      \u7e26\u578b\u30fb\u6a2a\u578b\u30fb\u6b63\u65b9\u5f62\u306e3\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306b\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3057\u3066\u304f\u3060\u3055\u3044\"\n\nAI\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u304c\u540c\u6642\u5b9f\u884c:\n\u251c\u2500\u2500 \u30af\u30ea\u30c3\u30d7A\uff08\u6b63\u9762\u30a2\u30f3\u30b0\u30eb\uff09\u751f\u6210\n\u251c\u2500\u2500 \u30af\u30ea\u30c3\u30d7B\uff08\u659c\u308145\u5ea6\uff09\u751f\u6210  \n\u251c\u2500\u2500 \u30af\u30ea\u30c3\u30d7C\uff08\u4fef\u77b0\u8996\u70b9\uff09\u751f\u6210\n\u251c\u2500\u2500 \u5404\u30af\u30ea\u30c3\u30d7\u306bBGM\u8ffd\u52a0\n\u251c\u2500\u2500 \u7e26\u578b\uff089:16\uff09\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 \u00d7 3\n\u251c\u2500\u2500 \u6a2a\u578b\uff0816:9\uff09\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 \u00d7 3\n\u2514\u2500\u2500 \u6b63\u65b9\u5f62\uff081:1\uff09\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 \u00d7 3\n```\n\n### 13.4 Flow Tools\uff08\u30ab\u30b9\u30bf\u30e0\u30c4\u30fc\u30eb\uff09\n\n\u958b\u767a\u8005\u304cFlow\u306e\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306b\u30ab\u30b9\u30bf\u30e0\u30c4\u30fc\u30eb\u3092\u8ffd\u52a0\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u4f8b\u3048\u3070\uff1a\n- \u81ea\u793e\u306e\u30d6\u30e9\u30f3\u30c9\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u306b\u57fa\u3065\u304f\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u30c4\u30fc\u30eb\n- \u7279\u5b9a\u306e\u30a2\u30fc\u30ab\u30a4\u30d6\u6620\u50cf\u30e9\u30a4\u30d6\u30e9\u30ea\u3078\u306e\u30a2\u30af\u30bb\u30b9\u30c4\u30fc\u30eb\n- \u52d5\u753b\u3092SNS\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306b\u76f4\u63a5\u6295\u7a3f\u3059\u308b\u30c4\u30fc\u30eb\n\n### 13.5 \u97f3\u697d\u751f\u6210\u6a5f\u80fd\n\n\u52d5\u753b\u306b\u5408\u308f\u305b\u305f\u30aa\u30ea\u30b8\u30ca\u30eb\u697d\u66f2\u3092AI\u304c\u751f\u6210\u3057\u307e\u3059\u3002\u65e2\u5b58\u306e\u97f3\u697d\u751f\u6210AI\u3068\u6bd4\u3079\u3001\u52d5\u753b\u306e**\u6620\u50cf\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u7406\u89e3\u3057\u3066**\u6700\u9069\u306aBGM\u3092\u4f5c\u6210\u3059\u308b\u70b9\u304c\u7279\u5fb4\u3067\u3059\u3002\n\n### 13.6 \u5177\u4f53\u7684\u306a\u6d3b\u7528\u30b7\u30fc\u30f3\n\n**\u30b7\u30fc\u30f31: \u30b7\u30e7\u30fc\u30c8\u30d5\u30a9\u30fc\u30e0\u52d5\u753b\u306e\u5927\u91cf\u751f\u6210**\nEC\u30b5\u30a4\u30c8\u304c\u5546\u54c1\u5199\u771f1\u679a\u304b\u3089\u8907\u6570\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u52d5\u753b\u5e83\u544a\u3092\u81ea\u52d5\u751f\u6210\u3002\u5e83\u544a\u7d20\u6750\u5236\u4f5c\u30b3\u30b9\u30c8\u3092\u5927\u5e45\u524a\u6e1b\u3002\n\n**\u30b7\u30fc\u30f32: \u30cb\u30e5\u30fc\u30b9\u30fb\u6559\u80b2\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u6620\u50cf\u5316**\n\u30c6\u30ad\u30b9\u30c8\u8a18\u4e8b\u3092\u5165\u529b\u3059\u308b\u3060\u3051\u3067\u3001\u89e3\u8aac\u30ca\u30ec\u30fc\u30b7\u30e7\u30f3\u4ed8\u304d\u306e\u52d5\u753b\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u81ea\u52d5\u751f\u6210\u3002\n\n**\u30b7\u30fc\u30f33: \u500b\u4eba\u30af\u30ea\u30a8\u30a4\u30bf\u30fc\u306e\u5236\u4f5c\u52b9\u7387\u5316**\nYouTube\u30af\u30ea\u30a8\u30a4\u30bf\u30fc\u304cA\u30d5\u30c3\u30c6\u30fc\u30b8\uff08\u672c\u7de8\u6620\u50cf\uff09\u3092\u6e21\u3059\u3060\u3051\u3067\u3001B\u30ed\u30fc\u30eb\u30fbBGM\u30fb\u30c6\u30ad\u30b9\u30c8\u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3\u304c\u81ea\u52d5\u751f\u6210\u3055\u308c\u308b\u3002\n\n### 13.7 \u30d7\u30ed\u30f3\u30d7\u30c8\u4f8b\n\n**\u4f8b1: \u5546\u54c1\u52d5\u753b\u306e\u81ea\u52d5\u751f\u6210**\n```\n\u4ee5\u4e0b\u306e\u5546\u54c1\u5199\u771f\uff083\u679a\uff09\u3092\u4f7f\u3063\u3066\u3001Instagram Reels\u5411\u3051\u306e\n15\u79d2\u30d7\u30ed\u30e2\u30fc\u30b7\u30e7\u30f3\u52d5\u753b\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\uff1a\n\n\u30b9\u30bf\u30a4\u30eb: \u30df\u30cb\u30de\u30eb\u3001\u30e2\u30c0\u30f3\n\u30c6\u30ad\u30b9\u30c8\u30aa\u30fc\u30d0\u30fc\u30ec\u30a4: \u5546\u54c1\u540d\u30fb\u4fa1\u683c\u30fb\u300c\u4eca\u3059\u3050\u8cfc\u5165\u300dCTA\nBGM: \u8efd\u5feb\u306a\u30dd\u30c3\u30d7\u7cfb\uff08\u8457\u4f5c\u6a29\u30d5\u30ea\u30fc\uff09\n\u30d5\u30a9\u30fc\u30de\u30c3\u30c8: 9:16\u7e26\u578b\n\u30af\u30aa\u30ea\u30c6\u30a3: 1080p\u4ee5\u4e0a\n\n\u5404\u5199\u771f\u306f5\u79d2\u305a\u3064\u8868\u793a\u3057\u3001\u30b9\u30e0\u30fc\u30ba\u306a\u30ba\u30fc\u30e0\u30a4\u30f3\u30fb\u30a2\u30a6\u30c8\u3067\u52d5\u304d\u3092\u4ed8\u3051\u3066\u304f\u3060\u3055\u3044\u3002\n```\n\n**\u4f8b2: \u6559\u80b2\u52d5\u753b\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u751f\u6210**\n```\n\u300c\u91cf\u5b50\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30fc\u306e\u57fa\u790e\u300d\u306b\u3064\u3044\u3066\u3001\n\u4ee5\u4e0b\u306e\u8981\u4ef6\u30673\u5206\u9593\u306e\u89e3\u8aac\u52d5\u753b\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\uff1a\n\n\u5bfe\u8c61: \u9ad8\u6821\u751f\u4ee5\u4e0a\u306e\u4e00\u822c\u8996\u8074\u8005\n\u30ca\u30ec\u30fc\u30b7\u30e7\u30f3: \u65e5\u672c\u8a9e\u3001\u843d\u3061\u7740\u3044\u305f\u30c8\u30fc\u30f3\n\u30d3\u30b8\u30e5\u30a2\u30eb: \u30a2\u30cb\u30e1\u30fc\u30b7\u30e7\u30f3\u3067\u6982\u5ff5\u3092\u53ef\u8996\u5316\n\u5b57\u5e55: \u65e5\u672c\u8a9e\u5b57\u5e55\u81ea\u52d5\u8ffd\u52a0\n\u69cb\u6210:\n1. \u5c0e\u5165\uff0830\u79d2\uff09\n2. \u53e4\u5178\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30fc\u3068\u306e\u9055\u3044\uff0860\u79d2\uff09\n3. \u91cf\u5b50\u30d3\u30c3\u30c8\u306e\u4ed5\u7d44\u307f\uff0860\u79d2\uff09\n4. \u5b9f\u7528\u4f8b\uff0830\u79d2\uff09\n```\n\n---\n\n## 14. Stitch by Google\n\n### 14.1 \u6982\u8981\n\nStitch by Google\u306f\u3001Google\u306eFigma\u7af6\u5408\u30dd\u30b8\u30b7\u30e7\u30f3\u3068\u3082\u8a00\u3048\u308bAI\u30d5\u30a1\u30fc\u30b9\u30c8\u306e\u30c7\u30b6\u30a4\u30f3\u30c4\u30fc\u30eb\u3067\u3059\u3002\u4eca\u56de\u306eI/O\u3067\u306f\u300cStitch Agent\u300d\u3068\u547c\u3070\u308c\u308bAI\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u304c\u8ffd\u52a0\u3055\u308c\u3001\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u3067\u5354\u50cd\u3057\u306a\u304c\u3089\u30ec\u30a4\u30a2\u30a6\u30c8\u3092\u8a2d\u8a08\u30fb\u8abf\u6574\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002\n\n### 14.2 \u4e3b\u8981\u65b0\u6a5f\u80fd\n\n**\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u30b3\u30e9\u30dc\u30ec\u30fc\u30c6\u30a3\u30d6\u30c7\u30b6\u30a4\u30f3\uff08Stitch Agent\uff09**\n\u30e6\u30fc\u30b6\u30fc\u304c\u30c6\u30ad\u30b9\u30c8\u3067\u6307\u793a\u3092\u51fa\u3059\u3068\u3001Stitch Agent\u304c\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u3067\u30c7\u30b6\u30a4\u30f3\u3092\u751f\u6210\u30fb\u4fee\u6b63\u3057\u307e\u3059\u3002\u300c\u3082\u3063\u3068\u30df\u30cb\u30de\u30eb\u306b\u300d\u300c\u30d8\u30c3\u30c0\u30fc\u3092\u5927\u304d\u304f\u300d\u300c\u30c0\u30fc\u30af\u30e2\u30fc\u30c9\u30d0\u30fc\u30b8\u30e7\u30f3\u3082\u4f5c\u3063\u3066\u300d\u3068\u3044\u3046\u81ea\u7136\u8a00\u8a9e\u3067\u306e\u6307\u793a\u306b\u5fdc\u7b54\u3057\u307e\u3059\u3002\n\n**\u30e9\u30a4\u30d6\u30ea\u30d5\u30ed\u30fc**\n\u30ec\u30a4\u30a2\u30a6\u30c8\u3092\u30c9\u30e9\u30c3\u30b0\u3057\u306a\u304c\u3089\u3001AI\u304c\u305d\u308c\u306b\u5fdc\u3058\u3066\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u81ea\u52d5\u518d\u914d\u7f6e\u3002\u30ec\u30b9\u30dd\u30f3\u30b7\u30d6\u30c7\u30b6\u30a4\u30f3\u304c\u76f4\u611f\u7684\u306b\u4f5c\u6210\u3067\u304d\u307e\u3059\u3002\n\n**Antigravity\u3078\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8**\n\u30c7\u30b6\u30a4\u30f3\u3092\u30ef\u30f3\u30af\u30ea\u30c3\u30af\u3067Antigravity\u306b\u6301\u3061\u8fbc\u307f\u3001\u305d\u306e\u307e\u307e\u30b3\u30fc\u30c9\u5316\u2192\u30c7\u30d7\u30ed\u30a4\u3067\u304d\u307e\u3059\u3002Figma\u304b\u3089\u306e\u76f4\u63a5\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3068\u6bd4\u3079\u3001\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\uff08\u30c7\u30b6\u30a4\u30f3\u30c8\u30fc\u30af\u30f3\u3001\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u4ed5\u69d8\u306a\u3069\uff09\u304c\u5b8c\u5168\u306b\u5f15\u304d\u7d99\u304c\u308c\u307e\u3059\u3002\n\n**Netlify\u3078\u306e\u76f4\u63a5\u30d1\u30d6\u30ea\u30c3\u30b7\u30e5**\n\u30c7\u30b6\u30a4\u30f3\u3092Netlify\u306b\u76f4\u63a5\u30c7\u30d7\u30ed\u30a4\u3002\u30c7\u30b6\u30a4\u30f3\u2192\u672c\u756a\u516c\u958b\u306e\u30b5\u30a4\u30af\u30eb\u304c\u6975\u3081\u3066\u77ed\u7e2e\u3055\u308c\u307e\u3059\u3002\n\n### 14.3 Figma\u3068\u306e\u6bd4\u8f03\n\n| \u6a5f\u80fd | Stitch | Figma |\n|------|--------|-------|\n| AI\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u7d71\u5408 | \u2705 \u30cd\u30a4\u30c6\u30a3\u30d6 | \u9650\u5b9a\u7684\uff08\u30d7\u30e9\u30b0\u30a4\u30f3\uff09 |\n| Google\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u9023\u643a | \u2705 \u6df1\u3044\u9023\u643a | \u8981\u8a2d\u5b9a |\n| \u30b3\u30fc\u30c9\u51fa\u529b\u306e\u7cbe\u5ea6 | \u2705 \u9ad8\u54c1\u8cea | \u8981\u8abf\u6574\u304c\u591a\u3044 |\n| \u30ea\u30a2\u30eb\u30bf\u30a4\u30e0AI\u30ea\u30d5\u30ed\u30fc | \u2705 | \u274c |\n| \u65e2\u5b58\u30e6\u30fc\u30b6\u30fc\u30d9\u30fc\u30b9 | \u65b0\u8208 | \u2705 \u5727\u5012\u7684\u591a\u6570 |\n| \u30c7\u30b6\u30a4\u30f3\u30b7\u30b9\u30c6\u30e0\u6210\u719f\u5ea6 | \u767a\u5c55\u4e2d | \u2705 \u6210\u719f |\n\n### 14.4 \u5177\u4f53\u7684\u306a\u6d3b\u7528\u30b7\u30fc\u30f3\n\n**\u30b7\u30fc\u30f31: \u30d7\u30ed\u30c8\u30bf\u30a4\u30d7\u306e\u7206\u901f\u4f5c\u6210**\n\u300cEC\u30b5\u30a4\u30c8\u306e\u30c8\u30c3\u30d7\u30da\u30fc\u30b8\u3001\u30e1\u30a4\u30f3\u30ab\u30e9\u30fc\u306f\u30cd\u30a4\u30d3\u30fc\u3001\u30bf\u30fc\u30b2\u30c3\u30c8\u306f30\u4ee3\u5973\u6027\u5411\u3051\u300d\u3068\u5165\u529b\u3059\u308b\u3060\u3051\u3067\u3001\u30c7\u30b6\u30a4\u30f3\u6848\u304c\u6570\u79d2\u3067\u5b8c\u6210\u3002\n\n**\u30b7\u30fc\u30f32: \u30c7\u30b6\u30a4\u30f3\u3068\u30b3\u30fc\u30c9\u306e\u540c\u671f**\n\u30c7\u30b6\u30a4\u30ca\u30fc\u3068\u30a8\u30f3\u30b8\u30cb\u30a2\u304c\u540c\u3058Stitch\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u3044\u3001\u30c7\u30b6\u30a4\u30f3\u5909\u66f4\u304c\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u3067\u30b3\u30fc\u30c9\u306b\u53cd\u6620\u3055\u308c\u308b\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3002\n\n**\u30b7\u30fc\u30f33: \u30e9\u30f3\u30c7\u30a3\u30f3\u30b0\u30da\u30fc\u30b8\u306e\u91cf\u7523**\nA/B\u30c6\u30b9\u30c8\u7528\u306e\u30d0\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u3092\u3001AI\u304c\u6570\u30d1\u30bf\u30fc\u30f3\u81ea\u52d5\u751f\u6210\u3002\u7d20\u6750\uff08\u30b3\u30d4\u30fc\u30fb\u30ab\u30e9\u30fc\u30fb\u30ec\u30a4\u30a2\u30a6\u30c8\uff09\u3092\u5165\u529b\u3059\u308b\u3060\u3051\u3002\n\n---\n\n## 15. Google Pics\n\n### 15.1 \u6982\u8981\n\nGoogle Pics\u306f\u3001Google Workspace\u5185\u3067\u4f7f\u3048\u308b\u65b0\u3057\u3044\u753b\u50cf\u751f\u6210\u30fb\u7de8\u96c6\u30c4\u30fc\u30eb\u3067\u3059\u3002Canva\u306e\u3088\u3046\u306a\u64cd\u4f5c\u611f\u3067\u3001\u30dd\u30b9\u30bf\u30fc\u30fb\u30d5\u30e9\u30a4\u30e4\u30fc\u30fb\u30a4\u30f3\u30d5\u30a9\u30b0\u30e9\u30d5\u30a3\u30c3\u30af\u30fb\u30d0\u30ca\u30fc\u306a\u3069\u3092\u4f5c\u6210\u3067\u304d\u307e\u3059\u30022026\u5e74\u590f\u306b\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u4e88\u5b9a\u3067\u3001Google Docs\u30fbSlides\u30fbSites\u304b\u3089\u76f4\u63a5\u547c\u3073\u51fa\u305b\u307e\u3059\u3002\n\n### 15.2 \u4e3b\u8981\u6a5f\u80fd\n\n**\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u304b\u3089\u306e\u751f\u6210**\n\u8c4a\u5bcc\u306a\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3068\u3001Google\u306e\u30d6\u30e9\u30f3\u30c9\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\uff08\u4f1a\u793e\u306e\u30ab\u30e9\u30fc\u30fb\u30d5\u30a9\u30f3\u30c8\u306a\u3069\uff09\u306b\u57fa\u3065\u3044\u305f\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u304c\u53ef\u80fd\u3002\n\n**\u30c6\u30ad\u30b9\u30c8\u6307\u793a\u306b\u3088\u308b\u751f\u6210**\n```\n\u30d7\u30ed\u30f3\u30d7\u30c8\u4f8b:\n\u300c\u6765\u6708\u306e\u793e\u5185\u7814\u4fee\u306e\u544a\u77e5\u30d5\u30e9\u30a4\u30e4\u30fc\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\u65e5\u6642: 2026\u5e746\u670815\u65e5\uff08\u6708\uff0910:00\u301c17:00\n\u5834\u6240: \u6771\u4eac\u30aa\u30d5\u30a3\u30b9\u4f1a\u8b70\u5ba4A\n\u30c6\u30fc\u30de: AI\u30ea\u30c6\u30e9\u30b7\u30fc\u5411\u4e0a\n\u30b9\u30bf\u30a4\u30eb: \u30d7\u30ed\u30d5\u30a7\u30c3\u30b7\u30e7\u30ca\u30eb\u3060\u304c\u89aa\u3057\u307f\u3084\u3059\u3044\n\u30ab\u30e9\u30fc: \u4f1a\u793e\u306e\u30b3\u30fc\u30dd\u30ec\u30fc\u30c8\u30ab\u30e9\u30fc\uff08\u9752\u30fb\u767d\uff09\u3092\u4f7f\u7528\u300d\n```\n\n**Imagen 4\u306b\u3088\u308b\u9ad8\u54c1\u8cea\u753b\u50cf\u751f\u6210**\nGoogle\u306eImagen 4\u3092\u642d\u8f09\u3057\u3066\u304a\u308a\u3001\u5199\u771f\u54c1\u8cea\u306e\u30ea\u30a2\u30eb\u306a\u753b\u50cf\u3084\u3001\u591a\u69d8\u306a\u30a2\u30fc\u30c8\u30b9\u30bf\u30a4\u30eb\u306e\u753b\u50cf\u3092\u751f\u6210\u3067\u304d\u307e\u3059\u3002\n\n**\u80cc\u666f\u524a\u9664\u30fb\u5207\u308a\u629c\u304d**\nAI\u306b\u3088\u308b\u9ad8\u7cbe\u5ea6\u306a\u88ab\u5199\u4f53\u8a8d\u8b58\u3067\u30011\u30af\u30ea\u30c3\u30af\u3067\u80cc\u666f\u3092\u900f\u904e\u30fb\u524a\u9664\u3067\u304d\u307e\u3059\u3002\n\n**Docs\u3078\u306e\u30a4\u30f3\u30e9\u30a4\u30f3\u633f\u5165**\nDocs\u3067\u6587\u66f8\u3092\u66f8\u304d\u306a\u304c\u3089\u300c\u3053\u306e\u6bb5\u843d\u306b\u5408\u3046\u56f3\u89e3\u3092\u751f\u6210\u3057\u3066\u300d\u3068AI\u306b\u4f9d\u983c\u3057\u3001\u305d\u306e\u5834\u3067Pics\u3092\u8d77\u52d5\u3057\u3066\u753b\u50cf\u3092\u751f\u6210\u30fb\u633f\u5165\u3002\n\n### 15.3 Canva\u3068\u306e\u6bd4\u8f03\n\nGoogle Pics\u306e\u6700\u5927\u306e\u5f37\u307f\u306f**Workspace\u3068\u306e\u6df1\u3044\u7d71\u5408**\u306b\u3042\u308a\u307e\u3059\u3002\n\n| \u6a5f\u80fd | Google Pics | Canva |\n|------|------------|-------|\n| Google\u30b5\u30fc\u30d3\u30b9\u9023\u643a | \u2705 \u30cd\u30a4\u30c6\u30a3\u30d6 | \u9650\u5b9a\u7684 |\n| Imagen 4 | \u2705 | \u274c |\n| Docs\u5185\u3067\u306e\u76f4\u63a5\u7de8\u96c6 | \u2705 | \u274c |\n| \u30c7\u30b6\u30a4\u30f3\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u6570 | \u767a\u5c55\u4e2d | \u2705 \u81a8\u5927 |\n| \u30d6\u30e9\u30f3\u30c9\u30ad\u30c3\u30c8\u7ba1\u7406 | \u2705 Workspace\u9023\u643a | \u2705 \u72ec\u7acb\u6a5f\u80fd |\n| \u4fa1\u683c | Workspace\u5185\u5305 | \u7121\u6599\u301c\u6709\u6599 |\n\n### 15.4 \u5177\u4f53\u7684\u306a\u6d3b\u7528\u30b7\u30fc\u30f3\n\n**\u30b7\u30fc\u30f31: \u30de\u30fc\u30b1\u30c6\u30a3\u30f3\u30b0\u7d20\u6750\u306e\u4e00\u5143\u7ba1\u7406**\n\u4f1a\u793e\u306e\u30d6\u30e9\u30f3\u30c9\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u30fb\u30ed\u30b4\u30fb\u30ab\u30e9\u30fc\u3092Workspace\u306b\u767b\u9332\u3057\u3001\u8ab0\u304c\u4f5c\u3063\u3066\u3082\u7d71\u4e00\u3055\u308c\u305f\u30d6\u30e9\u30f3\u30c9\u306e\u30c7\u30b6\u30a4\u30f3\u304c\u4e00\u77ac\u3067\u5b8c\u6210\u3002\n\n**\u30b7\u30fc\u30f32: \u793e\u5185\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u8cc7\u6599**\n\u4f1a\u8b70\u306e\u8b70\u4e8b\u9332\u30fb\u7814\u4fee\u8cc7\u6599\u30fb\u793e\u5185\u5831\u306a\u3069\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306b\u3001\u9069\u5207\u306a\u30a4\u30f3\u30d5\u30a9\u30b0\u30e9\u30d5\u30a3\u30c3\u30af\u3084\u30d3\u30b8\u30e5\u30a2\u30eb\u3092AI\u304c\u81ea\u52d5\u63d0\u6848\u30fb\u633f\u5165\u3002\n\n**\u30b7\u30fc\u30f33: SNS\u904b\u7528\u306e\u52b9\u7387\u5316**\nDocs\u3067\u30b3\u30f3\u30c6\u30f3\u30c4\u30ab\u30ec\u30f3\u30c0\u30fc\u3092\u7ba1\u7406\u3057\u306a\u304c\u3089\u3001Pics\u3067\u5404\u6295\u7a3f\u7528\u306e\u753b\u50cf\u3092\u751f\u6210\u3002Google\u306e\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u5185\u3067SNS\u904b\u7528\u304c\u5b8c\u7d50\u3002\n\n### 15.5 \u30d7\u30ed\u30f3\u30d7\u30c8\u4f8b\n\n**\u4f8b1: \u5831\u544a\u66f8\u7528\u30a4\u30f3\u30d5\u30a9\u30b0\u30e9\u30d5\u30a3\u30c3\u30af**\n```\n\u4ee5\u4e0b\u306e\u30c7\u30fc\u30bf\u3092\u3082\u3068\u306b\u3001\u7d4c\u55b6\u4f1a\u8b70\u5411\u3051\u306e\u30a4\u30f3\u30d5\u30a9\u30b0\u30e9\u30d5\u30a3\u30c3\u30af\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\uff1a\n\nQ2\u58f2\u4e0a: 1\u51042,000\u4e07\u5186\uff08\u524d\u5e74\u6bd4+23%\uff09\n\u65b0\u898f\u9867\u5ba2\u6570: 45\u793e\uff08\u524d\u5e74\u6bd4+31%\uff09\n\u9867\u5ba2\u6e80\u8db3\u5ea6\u30b9\u30b3\u30a2: 4.6/5.0\n\n\u30c7\u30b6\u30a4\u30f3\u8981\u4ef6\uff1a\n- A4\u6a2a\u5411\u304d\n- \u6570\u5b57\u3092\u5927\u304d\u304f\u30fb\u8996\u899a\u7684\u306b\u5f37\u8abf\n- \u30b3\u30fc\u30dd\u30ec\u30fc\u30c8\u30ab\u30e9\u30fc\uff08\u7d3a\u30fb\u91d1\uff09\u4f7f\u7528\n- \u30a8\u30b0\u30bc\u30af\u30c6\u30a3\u30d6\u30b5\u30de\u30ea\u30fc\u30b9\u30da\u30fc\u30b9\u3092\u4e0b\u90e8\u306b\u78ba\u4fdd\n```\n\n**\u4f8b2: \u30a4\u30d9\u30f3\u30c8\u544a\u77e5\u753b\u50cf**\n```\nInstagram\u306e\u30d5\u30a3\u30fc\u30c9\u6295\u7a3f\uff081:1\u6b63\u65b9\u5f62\uff09\u7528\u306e\n\u30a6\u30a7\u30d3\u30ca\u30fc\u544a\u77e5\u753b\u50cf\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\uff1a\n\n\u30bf\u30a4\u30c8\u30eb: \u300cAI\u3067\u5909\u308f\u308b\u3001\u3053\u308c\u304b\u3089\u306e\u50cd\u304d\u65b9\u300d\n\u65e5\u6642: 2026\u5e747\u67081\u65e5\uff08\u6c34\uff0919:00\u301c20:30\n\u767b\u58c7\u8005: \u7530\u4e2d\u82b1\u5b50\uff08AI\u30b3\u30f3\u30b5\u30eb\u30bf\u30f3\u30c8\uff09\n\u53c2\u52a0\u8cbb: \u7121\u6599\uff08\u8981\u4e8b\u524d\u767b\u9332\uff09\n\u30b9\u30bf\u30a4\u30eb: \u30c6\u30c3\u30af\u611f\u306e\u3042\u308b\u30e2\u30c0\u30f3\u30c7\u30b6\u30a4\u30f3\n\u914d\u8272: \u30c0\u30fc\u30af\u30d0\u30c3\u30af\u30b0\u30e9\u30a6\u30f3\u30c9\u306b\u30cd\u30aa\u30f3\u7cfb\u30a2\u30af\u30bb\u30f3\u30c8\n```\n\n---\n\n## 16. Universal Cart\n\n### 16.1 \u6982\u8981\n\nGoogle\u306f\u300cUniversal Cart\u300d\u3068\u3044\u3046\u5168\u304f\u65b0\u3057\u3044AI\u30b7\u30e7\u30c3\u30d4\u30f3\u30b0\u4f53\u9a13\u3092\u767a\u8868\u3057\u307e\u3057\u305f\u3002\u3053\u308c\u306fGoogle\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u6a2a\u65ad\u3057\u305f\u7d71\u4e00\u30ab\u30fc\u30c8\u3067\u3042\u308a\u3001Search\u30fbGemini\u30fbYouTube\u30fbGmail\u3067\u30b7\u30e7\u30c3\u30d4\u30f3\u30b0\u3092\u3057\u306a\u304c\u3089\u5546\u54c1\u3092\u3072\u3068\u3064\u306e\u30ab\u30fc\u30c8\u306b\u8ffd\u52a0\u3067\u304d\u307e\u3059\u3002Google\u306f\u300c\u30a8\u30fc\u30b8\u30a7\u30f3\u30c6\u30a3\u30c3\u30af\u30fb\u30b3\u30de\u30fc\u30b9\u300d\u3078\u306e\u5927\u304d\u306a\u4e00\u6b69\u3068\u4f4d\u7f6e\u4ed8\u3051\u3066\u3044\u307e\u3059\u3002\n\n### 16.2 Universal Cart\u306e\u4ed5\u7d44\u307f\n\n```\n\u3010\u5546\u54c1\u306e\u767a\u898b\u3011\n     \u2193\nGoogle Search \u3067\u691c\u7d22\u4e2d\u306b\u5546\u54c1\u3092\u767a\u898b\n\u307e\u305f\u306f\nGemini\u3068\u4f1a\u8a71\u3057\u306a\u304c\u3089\u5546\u54c1\u3092\u63a8\u85a6\u3057\u3066\u3082\u3089\u3046\n\u307e\u305f\u306f\nYouTube\u3067\u5546\u54c1\u7d39\u4ecb\u52d5\u753b\u3092\u8996\u8074\u4e2d\n\u307e\u305f\u306f\nGmail\u306e\u30d7\u30ed\u30e2\u30fc\u30b7\u30e7\u30f3\u30e1\u30fc\u30eb\u3092\u78ba\u8a8d\u4e2d\n     \u2193\n\u300c\u30ab\u30fc\u30c8\u306b\u8ffd\u52a0\u300d\u3092\u30bf\u30c3\u30d7\n     \u2193\n\u3010Universal Cart\u306b\u84c4\u7a4d\u3011\n     \u2193\nAI\u304c\u81ea\u52d5\u3067\u63d0\u4f9b\u3059\u308b\u6a5f\u80fd:\n- \u6700\u5b89\u5024\u306e\u30ea\u30c6\u30fc\u30e9\u30fc\u691c\u7d22\n- \u4fa1\u683c\u63a8\u79fb\u306e\u30b0\u30e9\u30d5\n- \u5728\u5eab\u72b6\u6cc1\u306e\u30a2\u30e9\u30fc\u30c8\n- \u985e\u4f3c\u5546\u54c1\u30fb\u30ec\u30d3\u30e5\u30fc\u306e\u30b5\u30de\u30ea\u30fc\n- \u95a2\u9023\u5546\u54c1\u306e\u30af\u30ed\u30b9\u30bb\u30eb\u63d0\u6848\n     \u2193\n\u3010\u8cfc\u5165\u30d5\u30ed\u30fc\u3011\n\u53c2\u52a0\u30de\u30fc\u30c1\u30e3\u30f3\u30c8\u306e\u30b5\u30a4\u30c8\u306b\u9077\u79fb\u3057\u3066\u8cfc\u5165\n\uff08\u5c06\u6765\u7684\u306b\u306fGoogle\u5185\u3067\u5b8c\u7d50\u3059\u308b\u8cfc\u5165\u6a5f\u80fd\u3082\uff09\n```\n\n### 16.3 AI\u306b\u3088\u308b\u8cfc\u8cb7\u5224\u65ad\u652f\u63f4\n\nUniversal Cart\u306e\u771f\u4fa1\u306fAI\u306b\u3088\u308b\u8cfc\u8cb7\u30b5\u30dd\u30fc\u30c8\u6a5f\u80fd\u306b\u3042\u308a\u307e\u3059\uff1a\n\n**\u4fa1\u683c\u30a2\u30e9\u30fc\u30c8**\n\u300c\u3053\u306e\u30d8\u30c3\u30c9\u30d5\u30a9\u30f3\u304c\u00a530,000\u4ee5\u4e0b\u306b\u306a\u3063\u305f\u3089\u901a\u77e5\u3057\u3066\u300d\u3068\u8a2d\u5b9a\u3059\u308b\u3068\u3001Gemini\u304c\u4fa1\u683c\u3092\u7d99\u7d9a\u76e3\u8996\u3057\u3001\u6761\u4ef6\u3092\u6e80\u305f\u3057\u305f\u6642\u70b9\u3067Gmail/Gemini\u30a2\u30d7\u30ea\u306b\u901a\u77e5\u3057\u307e\u3059\u3002\n\n**\u4fa1\u683c\u5c65\u6b74\u30a4\u30f3\u30b5\u30a4\u30c8**\n\u5546\u54c1\u306e\u904e\u53bb6\u30f6\u6708\u306e\u4fa1\u683c\u5c65\u6b74\u3092\u53ef\u8996\u5316\u3057\u3001\u300c\u4eca\u306f\u9ad8\u3081\u3001\u30bb\u30fc\u30eb\u6642\u671f\u306f11\u6708\u9803\u304c\u591a\u3044\u300d\u3068\u3044\u3063\u305f\u30a4\u30f3\u30b5\u30a4\u30c8\u3092\u63d0\u4f9b\u3002\u885d\u52d5\u8cb7\u3044\u3092\u9632\u3050\u8cfc\u8cb7\u5224\u65ad\u652f\u63f4\u3068\u3057\u3066\u6a5f\u80fd\u3057\u307e\u3059\u3002\n\n**\u5728\u5eab\u30a2\u30e9\u30fc\u30c8**\n\u5728\u5eab\u50c5\u5c11\u30fb\u518d\u5165\u8377\u6642\u306b\u81ea\u52d5\u901a\u77e5\u3002\n\n### 16.4 \u30a8\u30fc\u30b8\u30a7\u30f3\u30c6\u30a3\u30c3\u30af\u30fb\u30b3\u30de\u30fc\u30b9\u306e\u610f\u5473\n\nUniversal Cart\u306f\u5358\u306a\u308b\u300c\u30ab\u30fc\u30c8\u306e\u7d71\u5408\u300d\u3067\u306f\u306a\u304f\u3001AI\u304c\u8cfc\u8cb7\u6c7a\u5b9a\u306e\u30d7\u30ed\u30bb\u30b9\u5168\u4f53\u3092\u652f\u63f4\u3059\u308b\u3068\u3044\u3046\u300c\u30a8\u30fc\u30b8\u30a7\u30f3\u30c6\u30a3\u30c3\u30af\u30fb\u30b3\u30de\u30fc\u30b9\u300d\u306e\u7b2c\u4e00\u6b69\u3067\u3059\u3002\u5c06\u6765\u7684\u306b\u306fGemini Spark\u3068\u9023\u643a\u3057\u3001\u300c\u5148\u9031Amazon\u3067\u898b\u3066\u3044\u305f\u30b9\u30cb\u30fc\u30ab\u30fc\u304c\u30bb\u30fc\u30eb\u306b\u306a\u3063\u305f\u306e\u3067\u8cfc\u5165\u3057\u307e\u3059\u304b\uff1f\u300d\u3068\u3044\u3046\u81ea\u5f8b\u7684\u306a\u30b7\u30e7\u30c3\u30d4\u30f3\u30b0\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3078\u306e\u767a\u5c55\u304c\u898b\u8fbc\u307e\u308c\u307e\u3059\u3002\n\n### 16.5 \u5177\u4f53\u7684\u306a\u6d3b\u7528\u30b7\u30fc\u30f3\n\n**\u30b7\u30fc\u30f31: \u30d7\u30e9\u30a4\u30b9\u30a6\u30a9\u30c3\u30c1\u30f3\u30b0**\n\u5bb6\u96fb\u30fb\u65c5\u884c\u30fb\u30d5\u30a1\u30c3\u30b7\u30e7\u30f3\u306a\u3069\u4fa1\u683c\u5909\u52d5\u304c\u5927\u304d\u3044\u5546\u54c1\u3092\u8907\u6570\u30a6\u30a9\u30c3\u30c1\u3057\u3001\u6700\u9069\u306a\u30bf\u30a4\u30df\u30f3\u30b0\u3067\u8cfc\u5165\u3059\u308b\u4fa1\u683c\u6700\u9069\u5316\u306e\u5b9f\u73fe\u3002\n\n**\u30b7\u30fc\u30f32: \u30ae\u30d5\u30c8\u9078\u3073\u306e\u52b9\u7387\u5316**\n\u300c\u304a\u4e16\u8a71\u306b\u306a\u3063\u305f\u4e0a\u53f8\u3078\u306e1\u4e07\u5186\u524d\u5f8c\u306e\u30ae\u30d5\u30c8\u300d\u3068Gemini\u306b\u76f8\u8ac7\u3057\u306a\u304c\u3089\u5019\u88dc\u3092\u9078\u3073\u3001\u3072\u3068\u3064\u306e\u30ab\u30fc\u30c8\u306b\u307e\u3068\u3081\u3066\u6bd4\u8f03\u691c\u8a0e\u3002\n\n**\u30b7\u30fc\u30f33: \u30d3\u30b8\u30cd\u30b9\u5099\u54c1\u306e\u4e00\u62ec\u8abf\u9054**\n\u30c1\u30fc\u30e0\u306e\u5099\u54c1\u3092\u30e1\u30f3\u30d0\u30fc\u304c\u305d\u308c\u305e\u308c\u30ab\u30fc\u30c8\u306b\u8ffd\u52a0\u3057\u3001\u62c5\u5f53\u8005\u304cUniversal Cart\u3067\u4e00\u62ec\u78ba\u8a8d\u30fb\u627f\u8a8d\u3057\u3066\u8cfc\u5165\u3059\u308b\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\uff08Workspace\u9023\u643a\u5f8c\uff09\u3002\n\n---\n\n## 17. Google Search AI Mode \u5f37\u5316\n\n### 17.1 \u6982\u8981\n\nGoogle\u306eAI Mode\u306f\u3001\u5f93\u6765\u306e10\u9752\u3044\u30ea\u30f3\u30af\u3092\u8fd4\u3059\u691c\u7d22\u304b\u3089\u3001AI\u304c\u6df1\u304f\u601d\u8003\u30fb\u7d71\u5408\u3057\u3066\u304f\u308c\u308b\u5bfe\u8a71\u578b\u691c\u7d22\u4f53\u9a13\u3078\u306e\u79fb\u884c\u3092\u8c61\u5fb4\u3059\u308b\u6a5f\u80fd\u3067\u3059\u3002I/O 2026\u306b\u304a\u3044\u3066\u3001AI Mode\u306f\u3059\u3067\u306b**\u7c73\u56fd\u5168\u30e6\u30fc\u30b6\u30fc**\u306b\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8\u304c\u5b8c\u4e86\u3057\u3066\u304a\u308a\u3001\u4eca\u56de\u306e\u767a\u8868\u3067\u306f\u3055\u3089\u306a\u308b\u6a5f\u80fd\u5f37\u5316\u304c\u767a\u8868\u3055\u308c\u307e\u3057\u305f\u3002\n\n### 17.2 \u4e3b\u8981\u306a\u65b0\u6a5f\u80fd\n\n**\u30ab\u30b9\u30bf\u30e0\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u30fb\u30c8\u30e9\u30c3\u30ab\u30fc**\n\u7d99\u7d9a\u7684\u306a\u30bf\u30b9\u30af\u7528\u306e\u300c\u30df\u30cb\u30a2\u30d7\u30ea\u300d\u3092Search\u5185\u306b\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002\u4f8b\uff1a\n- \u300c\u30b9\u30bf\u30fc\u30c8\u30a2\u30c3\u30d7\u306e\u8cc7\u91d1\u8abf\u9054\u72b6\u6cc1\u3092\u6bce\u65e5\u30a6\u30a9\u30c3\u30c1\u300d\n- \u300c\u7279\u5b9a\u306e\u7af6\u5408\u4ed6\u793e\u306e\u65b0\u7740\u60c5\u5831\u3092\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u300d\n- \u300c\u7279\u5b9a\u306e\u682a\u4fa1\u30fb\u70ba\u66ff\u30ec\u30fc\u30c8\u306e\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u300d\n\n*2026\u5e74\u5185\u306b\u7c73\u56fd\u306eAI Pro\u30fbUltra\u52a0\u5165\u8005\u5411\u3051\u306b\u63d0\u4f9b\u4e88\u5b9a*\n\n**\u30d1\u30fc\u30bd\u30ca\u30eb\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u7d71\u5408**\nGmail\u306e\u30c7\u30fc\u30bf\u3092\u53c2\u7167\u3057\u305f\u300c\u3042\u306a\u305f\u306b\u5408\u308f\u305b\u305f\u691c\u7d22\u7d50\u679c\u300d\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u4f8b\u3048\u3070\u300c\u3044\u3064\u3082\u3069\u304a\u308a\u306b\u99c5\u307e\u3067\u884c\u304f\u65b9\u6cd5\u300d\u3068\u691c\u7d22\u3059\u308b\u3068\u3001Gmail\u304b\u3089\u904e\u53bb\u306e\u30eb\u30fc\u30c8\u30fb\u6642\u523b\u3092\u53c2\u7167\u3057\u3066\u63a8\u5968\u30eb\u30fc\u30c8\u3092\u63d0\u793a\u3057\u307e\u3059\u3002\n\n**\u30ab\u30b9\u30bf\u30e0\u30c1\u30e3\u30fc\u30c8\u30fb\u30b0\u30e9\u30d5\u751f\u6210**\n\u30b9\u30dd\u30fc\u30c4\u3084\u91d1\u878d\u30af\u30a8\u30ea\u3067\u3001AI\u304c\u81ea\u52d5\u7684\u306b\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u306a\u30b0\u30e9\u30d5\u30fb\u30c1\u30e3\u30fc\u30c8\u3092\u751f\u6210\u3057\u307e\u3059\u3002\u300c2026\u5e74NBA\u6771\u5730\u533a\u306e\u52dd\u7387\u63a8\u79fb\u300d\u3092\u30b0\u30e9\u30d5\u3067\u53ef\u8996\u5316\u3059\u308b\u3001\u3068\u3044\u3063\u305f\u4f7f\u3044\u65b9\u304c\u53ef\u80fd\u3002\n\n**\u30b7\u30e7\u30c3\u30d4\u30f3\u30b0\u30d1\u30cd\u30eb**\n\u691c\u7d22\u3092\u6df1\u6398\u308a\u3057\u306a\u304c\u3089\u95a2\u9023\u5546\u54c1\u304c\u53f3\u30b5\u30a4\u30c9\u30d1\u30cd\u30eb\u306b\u81ea\u52d5\u8868\u793a\u3055\u308c\u307e\u3059\uff08Universal Cart\u3068\u9023\u643a\uff09\u3002\n\n### 17.3 AI Overview\u3068\u306e\u9055\u3044\n\n| | AI Overviews | AI Mode |\n|--|-------------|---------|\n| \u8868\u793a\u65b9\u6cd5 | \u691c\u7d22\u7d50\u679c\u4e0a\u90e8\u306b\u8981\u7d04 | \u5bfe\u8a71\u578b\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9 |\n| \u65b0\u6a5f\u80fd | AI Mode\u3067\u8a66\u9a13\u5f8c\u306b\u5c55\u958b | \u6700\u65b0\u6a5f\u80fd\u304c\u6700\u521d\u306b\u767b\u5834 |\n| \u6df1\u3055 | \u7c21\u6f54\u306a\u8981\u7d04 | \u8a73\u7d30\u306a\u5bfe\u8a71\u30fb\u30d5\u30a9\u30ed\u30fc\u30a2\u30c3\u30d7 |\n| \u500b\u4eba\u5316 | \u9650\u5b9a\u7684 | Gmail\u7b49\u3068\u306e\u6df1\u3044\u7d71\u5408 |\n\n### 17.4 \u5177\u4f53\u7684\u306a\u6d3b\u7528\u30b7\u30fc\u30f3\n\n**\u30b7\u30fc\u30f31: \u7d99\u7d9a\u7684\u306a\u5e02\u5834\u8abf\u67fb**\n\u300cAI\u30b9\u30bf\u30fc\u30c8\u30a2\u30c3\u30d7\u306e\u56fd\u5185\u8cc7\u91d1\u8abf\u9054\u52d5\u5411\u300d\u3092\u30c8\u30e9\u30c3\u30ab\u30fc\u3068\u3057\u3066\u8a2d\u5b9a\u3057\u3001\u6bce\u9031\u81ea\u52d5\u66f4\u65b0\u3055\u308c\u308b\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u3067\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u3002\n\n**\u30b7\u30fc\u30f32: \u7af6\u5408\u5206\u6790\u306e\u81ea\u52d5\u5316**\n\u7af6\u5408\u4ed6\u793e\u540d\u3092\u30c8\u30e9\u30c3\u30ab\u30fc\u306b\u8a2d\u5b9a\u3057\u3001\u30d7\u30ec\u30b9\u30ea\u30ea\u30fc\u30b9\u30fb\u63a1\u7528\u60c5\u5831\u30fb\u30e1\u30c7\u30a3\u30a2\u63b2\u8f09\u3092\u4e00\u5143\u7ba1\u7406\u3002\n\n**\u30b7\u30fc\u30f33: \u5b66\u7fd2\u30fb\u7814\u7a76**\n\u8907\u96d1\u306a\u30c8\u30d4\u30c3\u30af\u3092\u968e\u5c64\u7684\u306b\u6df1\u6398\u308a\u3059\u308b\u3002\u300c\u91cf\u5b50\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u30fc\u306e\u5546\u7528\u5316\u52d5\u5411\u300d\u304b\u3089\u300c\u4e3b\u8981\u30d7\u30ec\u30a4\u30e4\u30fc\u6bd4\u8f03\u300d\u2192\u300c\u6280\u8853\u7684\u969c\u58c1\u300d\u2192\u300c\u6295\u8cc7\u52d5\u5411\u300d\u3068\u3044\u3046\u6d41\u308c\u3067\u5bfe\u8a71\u7684\u306b\u30ea\u30b5\u30fc\u30c1\u3002\n\n### 17.5 \u30d7\u30ed\u30f3\u30d7\u30c8\u4f8b\n\n**\u4f8b1: \u5e02\u5834\u8abf\u67fb\u30c8\u30e9\u30c3\u30ab\u30fc\u306e\u8a2d\u5b9a**\n```\n\u300c\u751f\u6210AI\u3092\u6d3b\u7528\u3057\u305fHR\u30c6\u30c3\u30af\u300d\u5206\u91ce\u306b\u3064\u3044\u3066\u3001\n\u4ee5\u4e0b\u306e\u60c5\u5831\u3092\u6bce\u9031\u6708\u66dc\u65e5\u306b\u307e\u3068\u3081\u3066\u304f\u3060\u3055\u3044\uff1a\n\n- \u65b0\u898f\u8cc7\u91d1\u8abf\u9054\uff081\u5104\u5186\u4ee5\u4e0a\uff09\n- \u4e3b\u8981\u30d7\u30ec\u30a4\u30e4\u30fc\u306e\u88fd\u54c1\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\n- \u6ce8\u76ee\u306e\u8ad6\u6587\u30fb\u7814\u7a76\u767a\u8868\n- M&amp;A\u30fb\u30d1\u30fc\u30c8\u30ca\u30fc\u30b7\u30c3\u30d7\u60c5\u5831\n\n\u30a4\u30f3\u30d5\u30a9\u30b0\u30e9\u30d5\u30a3\u30c3\u30af\u307e\u305f\u306f\u8868\u5f62\u5f0f\u3067\u307e\u3068\u3081\u3001\n\u91cd\u8981\u5ea6\u30b9\u30b3\u30a2\uff081-5\uff09\u3092\u4ed8\u3051\u3066\u304f\u3060\u3055\u3044\u3002\n```\n\n**\u4f8b2: \u591a\u89d2\u7684\u306a\u7af6\u5408\u5206\u6790**\n```\n\u5f53\u793e\uff08SaaS\u578b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7ba1\u7406\u30c4\u30fc\u30eb\uff09\u306e\u4e3b\u8981\u7af6\u54085\u793e\u3092\u5206\u6790\u3057\u3001\n\u4ee5\u4e0b\u306e\u89b3\u70b9\u3067\u6bd4\u8f03\u8868\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\uff1a\n\n- \u6a5f\u80fd\u30bb\u30c3\u30c8\uff08\u30b3\u30a2\u6a5f\u80fd10\u9805\u76ee\uff09\n- \u4fa1\u683c\u30e2\u30c7\u30eb\uff08Free/\u30b9\u30bf\u30fc\u30bf\u30fc\u30d7\u30e9\u30f3/\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\uff09\n- \u6700\u8fd16\u30f6\u6708\u306e\u4e3b\u8981\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\n- \u9867\u5ba2\u30ec\u30d3\u30e5\u30fc\u306b\u304a\u3051\u308b\u5f37\u307f/\u5f31\u307f\uff08G2\u30fbCapterra\u53c2\u7167\uff09\n- \u30bf\u30fc\u30b2\u30c3\u30c8\u30bb\u30b0\u30e1\u30f3\u30c8\n\n\u6700\u5f8c\u306b\u3001\u7af6\u5408\u304c\u624b\u8584\u306a\u5e02\u5834\u6a5f\u4f1a\u30923\u70b9\u6319\u3052\u3066\u304f\u3060\u3055\u3044\u3002\n```\n\n---\n\n## 18. Ask YouTube\n\n### 18.1 \u6982\u8981\n\nAsk YouTube\u306fYouTube\u306bAI\u691c\u7d22\u6a5f\u80fd\u3092\u7d71\u5408\u3057\u305f\u65b0\u6a5f\u80fd\u3067\u3059\u3002\u5f93\u6765\u306e\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u3067\u306f\u306a\u304f\u3001\u8cea\u554f\u3092\u5165\u529b\u3059\u308b\u3068**AI\u304c\u8cea\u554f\u306e\u610f\u56f3\u3092\u7406\u89e3\u3057\u3001\u6700\u3082\u95a2\u9023\u6027\u306e\u9ad8\u3044\u52d5\u753b\u5185\u306e\u7279\u5b9a\u30b7\u30fc\u30f3\u3092\u629c\u304d\u51fa\u3057\u3066**\u56de\u7b54\u3057\u3066\u304f\u308c\u307e\u3059\u3002\u300cHow-to\u7cfb\u306e\u8cea\u554f\u3092\u52d5\u753b\u3067\u76f4\u63a5\u7b54\u3048\u308b\u300d\u3068\u3044\u3046\u4f7f\u3044\u65b9\u304c\u4e3b\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u3067\u3059\u3002\n\n### 18.2 \u4ed5\u7d44\u307f\n\n```\n\u30e6\u30fc\u30b6\u30fc\u304c\u8cea\u554f\u3092\u5165\u529b\n\u2193\nAI\u304c\u8cea\u554f\u306e\u610f\u56f3\u30fb\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092\u89e3\u6790\n\u2193\nYouTube\u52d5\u753b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u6a2a\u65ad\u691c\u7d22\n\u2193\n\u95a2\u9023\u30b7\u30fc\u30f3\uff08\u30af\u30ea\u30c3\u30d7\uff09\u3092\u7279\u5b9a\n\u2193\n\u8907\u6570\u52d5\u753b\u304b\u3089\u6700\u9069\u306a\u30b7\u30fc\u30f3\u3092\u30d4\u30c3\u30af\u30a2\u30c3\u30d7\n\u2193\n\u7c21\u6f54\u306a\u52d5\u753b\u30af\u30ea\u30c3\u30d7\u3068AI\u8981\u7d04\u3092\u63d0\u793a\n```\n\n### 18.3 \u5f93\u6765\u306e\u691c\u7d22\u3068\u306e\u9055\u3044\n\n| \u5f93\u6765\u306eYouTube\u691c\u7d22 | Ask YouTube |\n|----------------|------------|\n| \u30ad\u30fc\u30ef\u30fc\u30c9\u306b\u57fa\u3065\u304f\u30bf\u30a4\u30c8\u30eb\u30fb\u30bf\u30b0\u691c\u7d22 | \u610f\u56f3\u7406\u89e3\u306b\u3088\u308b\u5185\u5bb9\u30ec\u30d9\u30eb\u306e\u691c\u7d22 |\n| \u95a2\u9023\u52d5\u753b\u306e\u30ea\u30b9\u30c8\u8868\u793a | \u8cea\u554f\u3078\u306e\u76f4\u63a5\u56de\u7b54\u30af\u30ea\u30c3\u30d7 |\n| \u30e6\u30fc\u30b6\u30fc\u304c\u8996\u8074\u3057\u3066\u5224\u65ad | AI\u304c\u8981\u70b9\u3092\u8981\u7d04 |\n| \u52d5\u753b\u5168\u4f53\u3092\u8996\u8074\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b | \u5fc5\u8981\u306a\u90e8\u5206\u3060\u3051\u3092\u63d0\u793a |\n\n### 18.4 \u5177\u4f53\u7684\u306a\u6d3b\u7528\u30b7\u30fc\u30f3\n\n**\u30b7\u30fc\u30f31: \u30cf\u30a6\u30c4\u30fc\u30fbDIY**\n\u300ciPhone 15\u306eSIM\u30ab\u30fc\u30c9\u4ea4\u63db\u65b9\u6cd5\u300d\u2192 \u6700\u3082\u5206\u304b\u308a\u3084\u3059\u3044\u30af\u30ea\u30c3\u30d7\u3092\u8907\u6570\u52d5\u753b\u304b\u3089\u629c\u304d\u51fa\u3057\u3066\u3001\u30b9\u30c6\u30c3\u30d7\u30d0\u30a4\u30b9\u30c6\u30c3\u30d7\u3067\u63d0\u793a\n\n**\u30b7\u30fc\u30f32: \u8a9e\u5b66\u5b66\u7fd2**\n\u300c\u82f1\u8a9e\u3067\u65ad\u308b\u3068\u304d\u306e\u81ea\u7136\u306a\u8868\u73fe\u300d\u2192 \u5b9f\u969b\u306b\u4f7f\u308f\u308c\u3066\u3044\u308b\u30b7\u30fc\u30f3\u306e\u30af\u30ea\u30c3\u30d7\u96c6\u3092\u30d4\u30c3\u30af\u30a2\u30c3\u30d7\n\n**\u30b7\u30fc\u30f33: \u30b9\u30ad\u30eb\u7fd2\u5f97**\n\u300cExcel\u306e\u30d4\u30dc\u30c3\u30c8\u30c6\u30fc\u30d6\u30eb\u306e\u4f7f\u3044\u65b9\u300d\u2192 \u521d\u5fc3\u8005\u5411\u3051\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306e\u6838\u5fc3\u90e8\u5206\u3060\u3051\u3092\u7d20\u65e9\u304f\u30ad\u30e3\u30c3\u30c1\n\n**\u30b7\u30fc\u30f34: \u30cb\u30e5\u30fc\u30b9\u30fb\u89e3\u8aac\u30b3\u30f3\u30c6\u30f3\u30c4**\n\u300cAI\u30b9\u30bf\u30fc\u30c8\u30a2\u30c3\u30d7\u306e\u8cc7\u91d1\u8abf\u9054\u30c8\u30ec\u30f3\u30c92026\u5e74\u300d\u2192 \u8907\u6570\u306e\u89e3\u8aac\u52d5\u753b\u304b\u3089\u4e3b\u8981\u30dd\u30a4\u30f3\u30c8\u3092\u62bd\u51fa\n\n### 18.5 \u30af\u30ea\u30a8\u30a4\u30bf\u30fc\u3078\u306e\u5f71\u97ff\n\nAsk YouTube\u306f\u52d5\u753b\u30af\u30ea\u30a8\u30a4\u30bf\u30fc\u306b\u3068\u3063\u3066\u3001**\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u6d88\u8cbb\u65b9\u6cd5\u3092\u6839\u672c\u7684\u306b\u5909\u3048\u308b**\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\n\n**\u30c1\u30e3\u30f3\u30b9\u3068\u306a\u308b\u5074\u9762**\n- \u52d5\u753b\u306e\u7279\u5b9a\u30b7\u30fc\u30f3\u304c\u300c\u7b54\u3048\u300d\u3068\u3057\u3066\u63d0\u793a\u3055\u308c\u308b\u3053\u3068\u3067\u3001\u5c0f\u3055\u306a\u30c1\u30e3\u30f3\u30cd\u30eb\u3067\u3082\u95a2\u9023\u30b3\u30f3\u30c6\u30f3\u30c4\u306a\u3089\u9732\u51fa\u6a5f\u4f1a\u304c\u5897\u3048\u308b\n- \u5b57\u5e55\u30fb\u30e1\u30bf\u30c7\u30fc\u30bf\u306e\u8cea\u304c\u691c\u7d22\u7cbe\u5ea6\u306b\u76f4\u7d50\u3059\u308b\u305f\u3081\u3001SEO\u7684\u306a\u4fa1\u5024\u304c\u5897\u3059\n\n**\u5bfe\u5fdc\u3059\u3079\u304d\u5074\u9762**\n- \u30b7\u30e7\u30fc\u30c8\u5c3a\u3067\u660e\u78ba\u306a\u7b54\u3048\u3092\u8fd4\u3059\u52d5\u753b\u69cb\u6210\u304c\u3088\u308a\u91cd\u8981\u306b\n- \u7ae0\u7acb\u3066\uff08\u30c1\u30e3\u30d7\u30bf\u30fc\u8a2d\u5b9a\uff09\u306e\u7cbe\u7dfb\u5316\u304c\u5fc5\u9808\n- \u8a73\u7d30\u306a\u5b57\u5e55\u3068\u8aac\u660e\u6587\u306e\u54c1\u8cea\u5411\u4e0a\n\n---\n\n## 23. \u307e\u3068\u3081\n\n### 23.1 Google I/O 2026\u304c\u793a\u3059AI\u306e\u672a\u6765\n\n2026\u5e74\u306eGoogle\u306f\u3001AI\u6226\u7565\u306b\u304a\u3044\u3066\u4e00\u3064\u306e\u5927\u304d\u306a\u8ee2\u63db\u70b9\u3092\u8fce\u3048\u307e\u3057\u305f\u3002\u305d\u308c\u306f\u300cAI\u306f\u805e\u304b\u308c\u305f\u3089\u7b54\u3048\u308b\u9053\u5177\u300d\u304b\u3089\u300cAI\u306f\u983c\u307e\u308c\u306a\u304f\u3066\u3082\u884c\u52d5\u3059\u308b\u30d1\u30fc\u30c8\u30ca\u30fc\u300d\u3078\u306e\u9032\u5316\u3067\u3059\u3002\n\n\u4eca\u56de\u306eI/O\u3067\u767a\u8868\u3055\u308c\u305f\u5404\u6a5f\u80fd\u3092\u4fef\u77b0\u3059\u308b\u3068\u3001\u3044\u304f\u3064\u304b\u306e\u660e\u78ba\u306a\u30d9\u30af\u30c8\u30eb\u304c\u6d6e\u304b\u3073\u4e0a\u304c\u308a\u307e\u3059\uff1a\n\n**\u30d9\u30af\u30c8\u30eb1: \u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u5316\u306e\u6df1\u5316**\nGemini Spark\u306f\u5358\u306a\u308b\u6a5f\u80fd\u306e\u8ffd\u52a0\u3067\u306f\u306a\u304f\u3001Google\u306eAI\u6226\u7565\u306e\u6839\u672c\u7684\u306a\u8ee2\u63db\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002\u30d0\u30c3\u30af\u30b0\u30e9\u30a6\u30f3\u30c9\u3067\u5e38\u6642\u52d5\u4f5c\u3057\u3001\u30e6\u30fc\u30b6\u30fc\u306e\u6307\u793a\u306a\u3057\u306b\u9069\u5207\u306a\u30bf\u30a4\u30df\u30f3\u30b0\u3067\u884c\u52d5\u3059\u308b\u2500\u2500\u3053\u308c\u306f\u300c\u30d7\u30ed\u30a2\u30af\u30c6\u30a3\u30d6AI\u300d\u306e\u5e55\u958b\u3051\u3067\u3059\u3002Daily Brief\u3084Search AI Mode\u306e\u30c8\u30e9\u30c3\u30ab\u30fc\u6a5f\u80fd\u3082\u540c\u3058\u30d9\u30af\u30c8\u30eb\u306b\u4e57\u3063\u3066\u3044\u307e\u3059\u3002\n\n**\u30d9\u30af\u30c8\u30eb2: Google\u5168\u30b5\u30fc\u30d3\u30b9\u306e\u7d71\u5408**\nAI Studio\u304b\u3089\u30c9\u30e9\u30a4\u30d6\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3001Stitch \u3067\u4f5c\u3063\u305f\u30c7\u30b6\u30a4\u30f3\u3092Antigravity\u306b\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3057\u3001Universal Cart\u3067Search\u30fbGmail\u30fbYouTube\u3092\u307e\u305f\u3044\u3067\u30b7\u30e7\u30c3\u30d4\u30f3\u30b0\u3059\u308b\u2500\u2500\u3042\u3089\u3086\u308bGoogle\u30b5\u30fc\u30d3\u30b9\u304c\u300cAI\u3068\u3044\u3046\u4e2d\u67a2\u795e\u7d4c\u300d\u3067\u3064\u306a\u304c\u308b\u7d71\u5408\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u304c\u5b8c\u6210\u3057\u3064\u3064\u3042\u308a\u307e\u3059\u3002\n\n**\u30d9\u30af\u30c8\u30eb3: \u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u3078\u306e\u672c\u683c\u53c2\u5165**\nAndroid XR\u30a2\u30a4\u30a6\u30a7\u30a2\u306f\u3001Google\u304c\u30b9\u30de\u30fc\u30c8\u30d5\u30a9\u30f3\u3068\u3044\u3046UI\u30d1\u30e9\u30c0\u30a4\u30e0\u3092\u8d85\u3048\u3001\u5e38\u6642\u88c5\u7740\u30c7\u30d0\u30a4\u30b9\u3068\u3057\u3066\u306e\u300c\u6b21\u306e\u753b\u9762\u300d\u3092\u771f\u5263\u306b\u53d6\u308a\u7d44\u3093\u3067\u3044\u308b\u3053\u3068\u3092\u793a\u3057\u307e\u3059\u3002Meta\u306e Ray-Ban Smart Glasses\u3001Apple\u306eVision Pro\u3001Samsung\u3068\u306e\u5354\u696d\u306b\u3088\u308bAndroid XR\u304c\u63c3\u3063\u305f\u3053\u3068\u3067\u3001\u30b9\u30de\u30fc\u30c8\u30b0\u30e9\u30b9\u5e02\u5834\u306f\u6025\u901f\u306b\u7acb\u3061\u4e0a\u304c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\n\n**\u30d9\u30af\u30c8\u30eb4: \u958b\u767a\u8005\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u306e\u6c11\u4e3b\u5316**\nAntigravity 2.0\u30fbAI Studio\u30fbStitch\u30fbGoogle Pics\u306f\u3044\u305a\u308c\u3082\u3001\u300c\u30b3\u30fc\u30c9\u3092\u66f8\u3051\u306a\u304f\u3066\u3082\u9ad8\u54c1\u8cea\u306a\u30d7\u30ed\u30c0\u30af\u30c8\u3092\u4f5c\u308c\u308b\u300d\u74b0\u5883\u3092\u6574\u5099\u3059\u308b\u3082\u306e\u3067\u3059\u3002\u958b\u767a\u306e\u6c11\u4e3b\u5316\u304c\u9032\u3080\u3053\u3068\u3067\u3001\u65b0\u3057\u3044\u30ab\u30c6\u30b4\u30ea\u306e\u30af\u30ea\u30a8\u30a4\u30bf\u30fc\u30fb\u8d77\u696d\u5bb6\u304c\u767b\u5834\u3059\u308b\u3053\u3068\u304c\u671f\u5f85\u3055\u308c\u307e\u3059\u3002\n\n### 23.2 \u5404\u6a5f\u80fd\u306e\u5b9f\u7528\u958b\u59cb\u6642\u671f\u307e\u3068\u3081\n\n| \u6a5f\u80fd | \u63d0\u4f9b\u958b\u59cb\u6642\u671f | \u5bfe\u8c61\u30e6\u30fc\u30b6\u30fc |\n|------|------------|------------|\n| Gemini 3.5 Flash | 2026\u5e745\u670819\u65e5\uff08\u5373\u6642\uff09 | API\u30fb\u5168\u30d7\u30e9\u30f3 |\n| Neural Expressive\uff08UI\u5237\u65b0\uff09 | 2026\u5e745\u670819\u65e5\uff08\u5373\u6642\uff09 | \u5168\u30e6\u30fc\u30b6\u30fc |\n| Gemini Omni\uff08Flash\u7248\uff09 | 2026\u5e745\u670819\u65e5\u301c | Plus\u30fbPro\u30fbUltra |\n| Daily Brief | 2026\u5e745\u670819\u65e5\u301c | Plus\u30fbPro\u30fbUltra\uff08\u7c73\u56fd\uff09 |\n| Google AI Ultra $100\u30d7\u30e9\u30f3 | 2026\u5e745\u670819\u65e5\u301c | \u65b0\u898f\u52a0\u5165\u8005 |\n| Gemini Spark | 2026\u5e745\u6708\u672b\u301c6\u6708\uff08\u7c73\u56fd\uff09 | Ultra $200 |\n| Android AI Studio \u30a2\u30d7\u30ea | \u30d7\u30ec\u30ec\u30b8\u958b\u59cb\uff08\u8fd1\u65e5\uff09 | \u958b\u767a\u8005 |\n| Google Pics | 2026\u5e74\u590f | Workspace\u30e6\u30fc\u30b6\u30fc |\n| Stitch Agent | 2026\u5e74\u590f | \u958b\u767a\u8005\u30fb\u30c7\u30b6\u30a4\u30ca\u30fc |\n| Spark for Mac | 2026\u5e74\u590f | Ultra $200 |\n| Spark\uff08\u30b5\u30fc\u30c9\u30d1\u30fc\u30c6\u30a3\u9023\u643a\uff09 | 2026\u5e74\u590f\u4ee5\u964d\uff08MCP\uff09 | Ultra\u52a0\u5165\u8005 |\n| Android XR\u30a2\u30a4\u30a6\u30a7\u30a2 | 2026\u5e74\u79cb | \u4e00\u822c\u8ca9\u58f2 |\n| Search AI\u30c8\u30e9\u30c3\u30ab\u30fc | 2026\u5e74\u5185\uff08\u7c73\u56fd\uff09 | Pro\u30fbUltra |\n\n### 23.3 \u65e5\u672c\u30e6\u30fc\u30b6\u30fc\u3078\u306e\u6ce8\u610f\u4e8b\u9805\n\n\u4eca\u56de\u767a\u8868\u3055\u308c\u305f\u591a\u304f\u306e\u6a5f\u80fd\u306f**\u7c73\u56fd\u30e6\u30fc\u30b6\u30fc\u512a\u5148\u306e\u30ed\u30fc\u30eb\u30a2\u30a6\u30c8**\u3067\u3059\u3002\u7279\u306bGemini Spark\u30fbDaily Brief\u30fbUniversal Cart\u306b\u3064\u3044\u3066\u306f\u3001\u65e5\u672c\u8a9e\u30fb\u65e5\u672c\u5e02\u5834\u3078\u306e\u5bfe\u5fdc\u6642\u671f\u306f\u672a\u5b9a\u3067\u3059\u3002\u305f\u3060\u3057\u3001Gemini 3.5 Flash\u306eAPI\u3084Antigravity 2.0\u306e\u3088\u3046\u306a\u958b\u767a\u8005\u5411\u3051\u30c4\u30fc\u30eb\u306f\u4e16\u754c\u540c\u6642\u5c55\u958b\u304c\u591a\u304f\u3001\u65e5\u672c\u304b\u3089\u3067\u3082\u7a4d\u6975\u7684\u306b\u6d3b\u7528\u3067\u304d\u307e\u3059\u3002\n\n### 23.4 \u7af6\u5408\u4ed6\u793e\u3068\u306e\u6bd4\u8f03\n\n| \u6a5f\u80fd\u30ab\u30c6\u30b4\u30ea | Google\uff08Gemini\uff09 | OpenAI\uff08ChatGPT\uff09 | Anthropic\uff08Claude\uff09 |\n|------------|:---------------:|:----------------:|:-------------------:|\n| \u30a8\u30fc\u30b8\u30a7\u30f3\u30c8 | \u2705 Spark\uff08\u5148\u9032\u7684\uff09 | \u2705 Operator | \u2705 Claude Projects |\n| \u30e2\u30c7\u30eb\u901f\u5ea6 | \u2705 3.5 Flash\uff084\u500d\uff09 | GPT-4o | Haiku 3.7 |\n| \u30de\u30eb\u30c1\u30e2\u30fc\u30c0\u30eb\u52d5\u753b\u51fa\u529b | \u2705 Omni | \u9650\u5b9a\u7684 | \u274c |\n| \u30cf\u30fc\u30c9\u30a6\u30a7\u30a2 | \u2705 XR\u773c\u93e1 | \u274c | \u274c |\n| \u30b7\u30e7\u30c3\u30d4\u30f3\u30b0\u9023\u643a | \u2705 Universal Cart | \u274c | \u274c |\n| \u958b\u767a\u8005\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0 | \u2705 Antigravity 2.0 | \u2705 OpenAI Platform | \u2705 Claude API |\n| \u4fa1\u683c\u4f53\u7cfb | $0/$20/$100/$200 | $0/$20/$200 | $0/$20/$100/$200 |\n\nGoogle\u306fI/O 2026\u3067\u3001AI\u30b7\u30f3\u30b0\u30eb\u30d7\u30ed\u30c0\u30af\u30c8\uff08Gemini\uff09\u306e\u6df1\u5316\u3060\u3051\u3067\u306a\u304f\u3001\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u5168\u4f53\uff08Search\u30fbWorkspace\u30fbYouTube\u30fbChrome\u30fbAndroid\uff09\u306bAI\u3092\u7e54\u308a\u8fbc\u3080\u6226\u7565\u3067\u3001\u4ed6\u306e\u8ffd\u968f\u3092\u8a31\u3055\u306a\u3044\u5dee\u5225\u5316\u3092\u56f3\u3063\u3066\u3044\u307e\u3059\u3002\n\n### 23.5 \u4eca\u5f8c\u306e\u6ce8\u76ee\u30dd\u30a4\u30f3\u30c8\n\n1. **Gemini Spark\u306e\u5b9f\u529b**: \u30c7\u30e2\u901a\u308a\u306b\u6a5f\u80fd\u3059\u308b\u304b\u3001\u5b9f\u7528\u30ec\u30d9\u30eb\u306b\u9054\u3057\u3066\u3044\u308b\u304b\u304c\u666e\u53ca\u306e\u9375\n2. **Antigravity 2.0\u306e\u958b\u767a\u8005\u63a1\u7528**: Firebase\u3001Vercel\u3001AWS Amplify\u3068\u6bd4\u8f03\u3057\u3066\u3069\u308c\u307b\u3069\u4f7f\u3044\u3084\u3059\u3044\u304b\n3. **Android XR\u30a2\u30a4\u30a6\u30a7\u30a2\u306e\u30d5\u30a9\u30fc\u30e0\u30d5\u30a1\u30af\u30bf\u30fc**: \u30d0\u30c3\u30c6\u30ea\u30fc\u6301\u7d9a\u30fb\u91cd\u91cf\u30fb\u4fa1\u683c\u304c\u53d7\u3051\u5165\u308c\u3089\u308c\u308b\u304b\n4. **\u65e5\u672c\u8a9e\u5bfe\u5fdc\u306e\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3**: Spark\u3084\u97f3\u58f0\u7cfb\u6a5f\u80fd\u306e\u65e5\u672c\u8a9e\u54c1\u8cea\n5. **\u30d7\u30e9\u30a4\u30d0\u30b7\u30fc\u3078\u306e\u61f8\u5ff5**: Spark\u304c\u5e38\u6642\u30e1\u30fc\u30eb\u30fb\u30ab\u30ec\u30f3\u30c0\u30fc\u3092\u76e3\u8996\u3059\u308b\u3053\u3068\u3078\u306e\u30e6\u30fc\u30b6\u30fc\u53d7\u5bb9\u6027\n\n---\n\n---\n\n## 19. Android 17 / Gemini Intelligence\n\n### 19.1 \u6982\u8981\n\nAndroid 17\u306f\u5358\u306a\u308bOS\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u30a2\u30c3\u30d7\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002Google\u306fAndroid 17\u3092\u300cAI\u30a4\u30f3\u30c6\u30ea\u30b8\u30a7\u30f3\u30b9\u30b7\u30b9\u30c6\u30e0\u300d\u3068\u3057\u3066\u518d\u5b9a\u7fa9\u3057\u3001\u30b9\u30de\u30fc\u30c8\u30d5\u30a9\u30f3\u3092AI\u81ea\u5f8b\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u52d5\u4f5c\u57fa\u76e4\u3078\u3068\u8ee2\u63db\u3059\u308b\u3053\u3068\u3092\u516c\u5f0f\u306b\u8868\u660e\u3057\u307e\u3057\u305f\u3002\u30aa\u30f3\u30c7\u30d0\u30a4\u30b9AI\u3092\u4e2d\u6838\u306b\u636e\u3048\u3001\u300cGemini Intelligence\u300d\u3068\u3044\u3046\u65b0\u3057\u3044\u30b7\u30b9\u30c6\u30e0\u6982\u5ff5\u3092Android\u5168\u4f53\u306b\u9069\u7528\u3057\u307e\u3059\u3002\n\n### 19.2 Gemini Intelligence\u3068\u306f\n\nGemini Intelligence\u306f\u3001Android\u306e\u5404UI\u30ec\u30a4\u30e4\u30fc\u306bGemini\u306e\u80fd\u529b\u3092\u76f4\u63a5\u7d44\u307f\u8fbc\u3080\u8a2d\u8a08\u601d\u60f3\u3067\u3059\u3002\u30a2\u30d7\u30ea\u3092\u307e\u305f\u3044\u3060\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u7406\u89e3\u3001\u97f3\u58f0\u3068\u306e\u81ea\u7136\u306a\u3084\u308a\u3068\u308a\u3001\u72b6\u6cc1\u306b\u5fdc\u3058\u305f\u5148\u8aad\u307f\u63d0\u6848\u304c\u7aef\u672b\u30ed\u30fc\u30ab\u30eb\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002\u30af\u30e9\u30a6\u30c9\u3078\u306e\u901a\u4fe1\u304c\u4e0d\u8981\u306a\u305f\u3081\u3001\u30d7\u30e9\u30a4\u30d0\u30b7\u30fc\u304c\u4fdd\u305f\u308c\u3001\u30aa\u30d5\u30e9\u30a4\u30f3\u74b0\u5883\u3067\u3082\u6a5f\u80fd\u3057\u307e\u3059\u3002\n\n### 19.3 \u4e3b\u8981\u306a\u65b0\u6a5f\u80fd\n\n**Create My Widget\uff08\u30a6\u30a3\u30b8\u30a7\u30c3\u30c8\u81ea\u52d5\u751f\u6210\uff09**\n\u300c\u5929\u6c17\u3068\u4eca\u65e5\u306e\u4e88\u5b9a\u3068\u672a\u8aad\u30e1\u30fc\u30eb\u6570\u3092\u4e00\u753b\u9762\u3067\u898b\u305f\u3044\u300d\u3068\u97f3\u58f0\u3067\u4f1d\u3048\u308b\u3060\u3051\u3067\u3001AI\u304c\u30ab\u30b9\u30bf\u30e0\u30a6\u30a3\u30b8\u30a7\u30c3\u30c8\u3092\u305d\u306e\u5834\u3067\u751f\u6210\u3057\u3066\u30db\u30fc\u30e0\u753b\u9762\u306b\u914d\u7f6e\u3057\u307e\u3059\u3002\u5f93\u6765\u306e\u30a6\u30a3\u30b8\u30a7\u30c3\u30c8\u8a2d\u5b9a\u306e\u8907\u96d1\u3055\u3092\u5b8c\u5168\u306b\u6392\u9664\u3057\u305fAI\u751f\u6210UI\u3067\u3059\u3002\n\n```\n\u4f7f\u7528\u4f8b:\n\u30e6\u30fc\u30b6\u30fc\uff08\u97f3\u58f0\uff09: \u300c\u30e9\u30f3\u30cb\u30f3\u30b0\u7528\u306e\u30a6\u30a3\u30b8\u30a7\u30c3\u30c8\u3092\u4f5c\u3063\u3066\u3002\n                   \u6b69\u6570\u8a08\u30fb\u5fc3\u62cd\u6570\u30fb\u4eca\u65e5\u306e\u5929\u6c17\u30fb\u6b21\u306e\u4e88\u5b9a\u3092\u4e00\u3064\u306b\u307e\u3068\u3081\u3066\u300d\nAndroid 17:       \u6570\u79d2\u3067\u30ab\u30b9\u30bf\u30e0\u30a6\u30a3\u30b8\u30a7\u30c3\u30c8\u3092\u751f\u6210 \u2192 \u30db\u30fc\u30e0\u753b\u9762\u306b\u8ffd\u52a0\n```\n\n**Rambler in Gboard\uff08\u30b9\u30de\u30fc\u30c8\u30ad\u30fc\u30dc\u30fc\u30c9\u62e1\u5f35\uff09**\nGboard\u306b\u7d44\u307f\u8fbc\u307e\u308c\u305fAI\u6a5f\u80fd\u3067\u3001\u9577\u6587\u306e\u97f3\u58f0\u5165\u529b\u3092\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u3067\u6587\u7ae0\u5316\u30fb\u6574\u5f62\u3057\u307e\u3059\u3002\u300c\u3048\u30fc\u3068\u300d\u300c\u3042\u306e\u300d\u306a\u3069\u306e\u30d5\u30a3\u30e9\u30fc\u3092\u81ea\u52d5\u9664\u53bb\u3057\u3001\u8a71\u3057\u8a00\u8449\u3092\u9069\u5207\u306a\u66f8\u304d\u8a00\u8449\u306b\u5909\u63db\u3059\u308b\u300cRambler\u300d\u30e2\u30fc\u30c9\u304c\u8ffd\u52a0\u3055\u308c\u307e\u3059\u3002\n\n```\n\u6d3b\u7528\u30b7\u30fc\u30f3:\n- \u79fb\u52d5\u4e2d\u306b\u982d\u306b\u6d6e\u304b\u3093\u3060\u30a2\u30a4\u30c7\u30a2\u3092\u53e3\u982d\u3067\u5439\u304d\u8fbc\u3080\n- \u30e1\u30fc\u30eb\u306e\u8fd4\u4fe1\u3092\u97f3\u58f0\u3067\u9ad8\u901f\u5165\u529b\n- \u8b70\u4e8b\u9332\u3092\u4f1a\u8b70\u4e2d\u306b\u97f3\u58f0\u3067\u53d6\u308a\u306a\u304c\u3089\u6574\u5f62\u6e08\u307f\u30c6\u30ad\u30b9\u30c8\u3092\u5373\u6642\u53d6\u5f97\n```\n\n**Pause Point\uff08\u96c6\u4e2d\u30e2\u30fc\u30c9\u5f37\u5316\uff09**\nAI\u304c\u901a\u77e5\u306e\u91cd\u8981\u5ea6\u3092\u5224\u65ad\u3057\u3001\u4f5c\u696d\u306e\u59a8\u3052\u306b\u306a\u3089\u306a\u3044\u30bf\u30a4\u30df\u30f3\u30b0\u3067\u901a\u77e5\u3092\u5c4a\u3051\u307e\u3059\u3002\u5358\u7d14\u306a\u30b5\u30a4\u30ec\u30f3\u30c8\u30e2\u30fc\u30c9\u3067\u306f\u306a\u304f\u3001\u300c\u3053\u306e\u901a\u77e5\u306f\u3059\u3050\u898b\u306a\u304f\u3066\u3044\u3044\u300d\u300c\u3053\u308c\u306f\u7dca\u6025\u300d\u3092\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u5224\u65ad\u3057\u307e\u3059\u3002\n\n**Gemini on Android\uff08\u6df1\u5316\uff09**\n- \u753b\u9762\u4e0a\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u7406\u89e3\u3057\u305f\u4e0a\u3067\u306e\u8cea\u554f\u5fdc\u7b54\uff08\u753b\u9762\u5171\u6709\u4e0d\u8981\uff09\n- \u30a2\u30d7\u30ea\u3092\u307e\u305f\u3044\u3060\u60c5\u5831\u7d71\u5408\uff08\u4f8b: \u30ab\u30ec\u30f3\u30c0\u30fc\u306e\u4e88\u5b9a + Gmail\u306e\u95a2\u9023\u30e1\u30fc\u30eb + Maps\u306e\u7d4c\u8def\u3092\u5408\u308f\u305b\u3066\u63d0\u793a\uff09\n- \u8907\u6570\u30a2\u30d7\u30ea\u3092\u9023\u643a\u3057\u305f\u8907\u5408\u30bf\u30b9\u30af\u306e\u5b9f\u884c\n\n### 19.4 \u30aa\u30f3\u30c7\u30d0\u30a4\u30b9AI\u306e\u6280\u8853\u7684\u610f\u7fa9\n\nGemini Nano\u304c\u30d9\u30fc\u30b9\u3068\u306a\u308b\u30aa\u30f3\u30c7\u30d0\u30a4\u30b9\u63a8\u8ad6\u306f\uff1a\n- **\u30ec\u30a4\u30c6\u30f3\u30b7**: \u30af\u30e9\u30a6\u30c9\u547c\u3073\u51fa\u3057\u4e0d\u8981\u3067\u6570\u5341ms\u4ee5\u5185\u306e\u5fdc\u7b54\n- **\u30d7\u30e9\u30a4\u30d0\u30b7\u30fc**: \u500b\u4eba\u30c7\u30fc\u30bf\u304c\u7aef\u672b\u5916\u306b\u51fa\u306a\u3044\n- **\u30aa\u30d5\u30e9\u30a4\u30f3\u5bfe\u5fdc**: \u6a5f\u5185\u30fb\u570f\u5916\u3067\u3082\u57fa\u672c\u6a5f\u80fd\u304c\u52d5\u4f5c\n- **\u30d0\u30c3\u30c6\u30ea\u30fc\u52b9\u7387**: Google\u72ec\u81ea\u306e\u30aa\u30f3\u30c7\u30d0\u30a4\u30b9\u6700\u9069\u5316\u30c1\u30c3\u30d7\u6d3b\u7528\n\n### 19.5 \u5177\u4f53\u7684\u306a\u6d3b\u7528\u30b7\u30fc\u30f3\n\n**\u30b7\u30fc\u30f31: \u901a\u52e4\u4e2d\u306e\u60c5\u5831\u7ba1\u7406**\n\u96fb\u8eca\u306e\u4e2d\u3067\u30a4\u30e4\u30db\u30f3\u3092\u3057\u306a\u304c\u3089\u300c\u4eca\u65e5\u306e\u91cd\u8981\u306a\u9023\u7d61\u4e8b\u9805\u306f\uff1f\u300d\u3068\u8a71\u3057\u304b\u3051\u308b\u3068\u3001Gmail\u3068Calendar\u3092\u53c2\u7167\u3057\u305f\u97f3\u58f0\u30d6\u30ea\u30fc\u30d5\u30a3\u30f3\u30b0\u304c\u6d41\u308c\u308b\uff08\u30af\u30e9\u30a6\u30c9\u63a5\u7d9a\u306a\u3057\uff09\u3002\n\n**\u30b7\u30fc\u30f32: \u5916\u51fa\u4e2d\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u4f5c\u6210**\n\u300c\u3055\u3063\u304d\u306e\u4f1a\u8b70\u306e\u30dd\u30a4\u30f3\u30c8\u3092\u30e1\u30e2\u3057\u3066\u300d\u3068\u8a00\u3046\u3060\u3051\u3067\u3001Gemini\u304cRambler\u30e2\u30fc\u30c9\u3067\u97f3\u58f0\u3092Doc\u306b\u66f8\u304d\u8d77\u3053\u3057\u3001\u7b87\u6761\u66f8\u304d\u306b\u6574\u5f62\u3057\u3066Drive\u306b\u4fdd\u5b58\u3002\n\n**\u30b7\u30fc\u30f33: \u30ab\u30b9\u30bf\u30e0\u30a6\u30a3\u30b8\u30a7\u30c3\u30c8\u306e\u6d3b\u7528**\n\u5728\u5b85\u30ef\u30fc\u30ab\u30fc\u304c\u300cNotion\u30fbSlack\u672a\u8aad\u6570\u30fb\u4eca\u65e5\u306e\u30bf\u30b9\u30af\u6570\u30fb\u5929\u6c17\u300d\u3092\u4e00\u753b\u9762\u306b\u96c6\u7d04\u3057\u305f\u30a6\u30a3\u30b8\u30a7\u30c3\u30c8\u3092\u97f3\u58f0\u306730\u79d2\u3067\u4f5c\u6210\u3002\n\n---\n\n## 20. Jules\n\n### 20.1 \u6982\u8981\n\nJules\u306fGoogle\u304c\u958b\u767a\u3057\u305f**\u975e\u540c\u671f\u30fb\u81ea\u5f8b\u578b\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8**\u3067\u3059\u3002Google Labs\u3067\u958b\u767a\u3055\u308c\u3001\u30d1\u30d6\u30ea\u30c3\u30af\u30d9\u30fc\u30bf\u671f\u9593\u4e2d\u306b14\u4e07\u4ef6\u4ee5\u4e0a\u306e\u516c\u958b\u30b3\u30fc\u30c9\u30b3\u30f3\u30c8\u30ea\u30d3\u30e5\u30fc\u30b7\u30e7\u30f3\u3092\u751f\u6210\u3057\u305f\u5b9f\u7e3e\u3092\u6301\u3061\u307e\u3059\u3002I/O 2026\u3092\u6a5f\u306b\u6b63\u5f0f\u30ea\u30ea\u30fc\u30b9\uff08\u30d9\u30fc\u30bf\u5352\u696d\uff09\u304c\u767a\u8868\u3055\u308c\u307e\u3057\u305f\u3002\n\n\u5f93\u6765\u306eAI\u30b3\u30fc\u30c9\u88dc\u5b8c\u30c4\u30fc\u30eb\uff08GitHub Copilot\u3001Gemini Code Assist\uff09\u304c\u300c\u66f8\u3044\u3066\u3044\u308b\u6700\u4e2d\u306b\u88dc\u52a9\u3059\u308b\u300d\u306e\u306b\u5bfe\u3057\u3001Jules\u306f\u300c\u3042\u306a\u305f\u304c\u5225\u306e\u4f5c\u696d\u3092\u3057\u3066\u3044\u308b\u9593\u306b\u3001\u30bf\u30b9\u30af\u3092\u4e38\u3054\u3068\u5b8c\u4e86\u3055\u305b\u3066PR\u3092\u9001\u3063\u3066\u304f\u308b\u300d\u3068\u3044\u3046\u6839\u672c\u7684\u306b\u7570\u306a\u308b\u30a2\u30d7\u30ed\u30fc\u30c1\u3092\u53d6\u308a\u307e\u3059\u3002\n\n### 20.2 \u52d5\u4f5c\u306e\u4ed5\u7d44\u307f\n\n```\n[\u958b\u767a\u8005\u304c\u30bf\u30b9\u30af\u3092\u6307\u793a]\n\u300c\u3053\u306eAPI\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306e\u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8\u3092\u66f8\u3044\u3066\u300d\n         \u2193\n[Jules\u304cGitHub/GitLab\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u30af\u30ed\u30fc\u30f3]\nGoogle Cloud\u306e\u4eee\u60f3\u30de\u30b7\u30f3\u4e0a\u3067\u9694\u96e2\u5b9f\u884c\n         \u2193\n[\u81ea\u5f8b\u7684\u306b\u30b3\u30fc\u30c9\u3092\u5206\u6790\u30fb\u5b9f\u88c5]\n\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u306e\u6587\u8108\u3092\u7406\u89e3\u3057\u305f\u4e0a\u3067\u5b9f\u88c5\n\u30c6\u30b9\u30c8\u3092\u8d70\u3089\u305b\u3066\u52d5\u4f5c\u3092\u78ba\u8a8d\n         \u2193\n[\u958b\u767a\u8005\u306bPull Request\u3092\u9001\u4fe1]\n\u5dee\u5206\u30fb\u5909\u66f4\u7406\u7531\u30fb\u30c6\u30b9\u30c8\u7d50\u679c\u3092\u6dfb\u4ed8\n         \u2193\n[\u958b\u767a\u8005\u304c\u30ec\u30d3\u30e5\u30fc\u30fb\u30de\u30fc\u30b8\u3092\u5224\u65ad]\n\u4eba\u9593\u304c\u6700\u7d42\u627f\u8a8d\n```\n\n### 20.3 \u4e3b\u306a\u6a5f\u80fd\n\n**\u975e\u540c\u671f\u5b9f\u884c**\nJules\u306f\u30d0\u30c3\u30af\u30b0\u30e9\u30a6\u30f3\u30c9\u3067\u52d5\u4f5c\u3059\u308b\u305f\u3081\u3001\u6307\u793a\u3092\u51fa\u3057\u305f\u5f8c\u306b\u958b\u767a\u8005\u306f\u5225\u306e\u4f5c\u696d\u3092\u7d9a\u3051\u3089\u308c\u307e\u3059\u3002\u5b8c\u4e86\u3059\u308b\u3068GitHub/Slack\u3067\u901a\u77e5\u3002\n\n**\u65e2\u5b58\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u6df1\u3044\u7406\u89e3**\nJules\u306f\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u3092Gemini\u304c\u5206\u6790\u3057\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u56fa\u6709\u306e\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u898f\u7d04\u30fb\u8a2d\u8a08\u30d1\u30bf\u30fc\u30f3\u30fb\u4f9d\u5b58\u95a2\u4fc2\u3092\u7406\u89e3\u3057\u305f\u4e0a\u3067\u30b3\u30fc\u30c9\u3092\u751f\u6210\u3057\u307e\u3059\u3002\n\n**\u5bfe\u5fdc\u30bf\u30b9\u30af**\n- \u30d0\u30b0\u4fee\u6b63\uff08\u30a8\u30e9\u30fc\u30ed\u30b0\u3092\u6e21\u3059\u3060\u3051\u3067\u539f\u56e0\u7279\u5b9a \u2192 \u4fee\u6b63 \u2192 \u30c6\u30b9\u30c8\uff09\n- \u30c6\u30b9\u30c8\u8ffd\u52a0\uff08\u30ab\u30d0\u30ec\u30c3\u30b8\u306e\u4f4e\u3044\u90e8\u5206\u3092\u81ea\u52d5\u7279\u5b9a\uff09\n- \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u751f\u6210\uff08\u30b3\u30fc\u30c9\u304b\u3089\u81ea\u52d5\u3067JSDoc/docstring\u4f5c\u6210\uff09\n- \u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\uff08\u6307\u5b9a\u3057\u305f\u57fa\u6e96\u306b\u6cbf\u3063\u3066\u81ea\u52d5\u6574\u7406\uff09\n- \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30d1\u30c3\u30c1\uff08CVE\u304c\u516c\u958b\u3055\u308c\u305f\u4f9d\u5b58\u95a2\u4fc2\u306e\u81ea\u52d5\u66f4\u65b0\uff09\n\n**\u30de\u30eb\u30c1\u30b9\u30c6\u30c3\u30d7\u30bf\u30b9\u30af**\n\u5358\u7d14\u306a1\u30d5\u30a1\u30a4\u30eb\u7de8\u96c6\u3067\u306f\u306a\u304f\u3001\u8907\u6570\u30d5\u30a1\u30a4\u30eb\u3092\u6a2a\u65ad\u3057\u305f\u8907\u96d1\u306a\u5909\u66f4\u306b\u3082\u5bfe\u5fdc\u3002\n\n### 20.4 \u7af6\u5408\u3068\u306e\u6bd4\u8f03\n\n| \u30c4\u30fc\u30eb | \u52d5\u4f5c\u65b9\u5f0f | \u7279\u5fb4 |\n|--------|---------|------|\n| Jules (Google) | \u975e\u540c\u671f\u30fb\u81ea\u5f8b | GitHub/GitLab\u7d71\u5408\u3001PR\u81ea\u52d5\u751f\u6210 |\n| Claude Code | \u540c\u671f\u30fb\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6 | \u6df1\u3044\u5bfe\u8a71\u3001\u8907\u96d1\u306a\u8a2d\u8a08\u5224\u65ad |\n| GitHub Copilot Workspace | \u6e96\u81ea\u5f8b | GitHub\u7d71\u5408\u3001\u30a4\u30f3\u30e9\u30a4\u30f3UI |\n| OpenAI Codex | \u975e\u540c\u671f | OpenAI\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0 |\n\nJules\u306e\u5f37\u307f\u306f\u300c\u5b8c\u5168\u306b\u624b\u3092\u96e2\u305b\u308b\u300d\u975e\u540c\u671f\u6027\u3068\u3001GitHub/GitLab\u3068\u306e\u30b7\u30fc\u30e0\u30ec\u30b9\u306a\u7d71\u5408\u306b\u3042\u308a\u307e\u3059\u3002\n\n### 20.5 Gemini Code Assist\u3068\u306e\u7d71\u5408\n\nI/O 2026\u3067\u306e\u767a\u8868\u306b\u3088\u308a\u3001Jules\u306fAntigravity CLI\u3068\u3082\u9023\u643a\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002Antigravity\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u5185\u3067\u300c\u3053\u306e\u30bf\u30b9\u30af\u3092Jules\u306b\u975e\u540c\u671f\u3067\u4f9d\u983c\u300d\u3068\u3044\u3046\u5f62\u3067\u306e\u7d71\u5408\u304c\u53ef\u80fd\u3067\u3059\u3002\n\n\u306a\u304a\u3001Gemini Code Assist\u306fAntigravity\u3078\u306e\u7d71\u5408\u306b\u5411\u3051\u3066\u6bb5\u968e\u7684\u306b\u79fb\u884c\u304c\u9032\u3093\u3067\u3044\u307e\u3059\uff082026\u5e746\u670818\u65e5\u4ee5\u964d\u3001\u500b\u4eba\u30fbPro\u30fbUltra\u3067\u306e\u30b9\u30bf\u30f3\u30c9\u30a2\u30ed\u30fc\u30f3\u63d0\u4f9b\u3092\u7d42\u4e86\u3057\u3001Antigravity CLI\u306b\u7d71\u5408\uff09\u3002\n\n### 20.6 \u5177\u4f53\u7684\u306a\u6d3b\u7528\u30b7\u30fc\u30f3\n\n**\u30b7\u30fc\u30f31: \u30c6\u30b9\u30c8\u8ca7\u8005\u306e\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u3092\u4e00\u6383**\n\u300csrc/api/\u4ee5\u4e0b\u306e\u30ab\u30d0\u30ec\u30c3\u30b8\u304c50%\u4ee5\u4e0b\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u30ea\u30b9\u30c8\u30a2\u30c3\u30d7\u3057\u3001\u5168\u3066\u306b\u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8\u3092\u8ffd\u52a0\u3057\u3066\u300d\u3068Jules\u306b\u6307\u793a\u3002\u6570\u6642\u9593\u5f8c\u306bPR\u304c\u5c4a\u304f\u3002\n\n**\u30b7\u30fc\u30f32: \u4f9d\u5b58\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u81ea\u52d5\u66f4\u65b0**\n\u300cpackage.json\u306e\u5168\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30e1\u30b8\u30e3\u30fc\u30d0\u30fc\u30b8\u30e7\u30f3\u30a2\u30c3\u30d7\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u7834\u58ca\u7684\u5909\u66f4\u306f\u79fb\u884c\u30ac\u30a4\u30c9\u3092\u53c2\u7167\u3057\u3066\u5bfe\u5fdc\u3057\u3001\u5168\u30c6\u30b9\u30c8\u3092\u30d1\u30b9\u3055\u305b\u3066\u304f\u3060\u3055\u3044\u300d\n\n**\u30b7\u30fc\u30f33: \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u8ca0\u50b5\u306e\u89e3\u6d88**\n\u300c\u3053\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u5168\u4f53\u306e\u30d1\u30d6\u30ea\u30c3\u30af\u95a2\u6570\u306bJSDoc\u30b3\u30e1\u30f3\u30c8\u3092\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u65e2\u5b58\u306e\u30b3\u30e1\u30f3\u30c8\u304c\u3042\u308b\u5834\u5408\u306f\u66f4\u65b0\u3057\u3066\u304f\u3060\u3055\u3044\u300d\n\n### 20.7 \u6307\u793a\u30d7\u30ed\u30f3\u30d7\u30c8\u4f8b\n\n**\u4f8b1: \u30d0\u30b0\u4fee\u6b63\u306e\u4f9d\u983c**\n```\n\u4ee5\u4e0b\u306e\u30a8\u30e9\u30fc\u30ed\u30b0\u3092\u53c2\u7167\u3057\u3066\u3001\u3053\u306e\u30d0\u30b0\u3092\u4fee\u6b63\u3057\u3066\u304f\u3060\u3055\u3044\uff1a\n\n\u30a8\u30e9\u30fc: TypeError: Cannot read properties of undefined (reading 'userId')\n\u767a\u751f\u7b87\u6240: src/auth/middleware.ts:47\n\u518d\u73fe\u6761\u4ef6: \u30ed\u30b0\u30a4\u30f3\u6e08\u307f\u30e6\u30fc\u30b6\u30fc\u304c\u30bb\u30c3\u30b7\u30e7\u30f3\u5207\u308c\u5f8c\u306bAPI\u3092\u53e9\u3044\u305f\u5834\u5408\n\n\u4fee\u6b63\u65b9\u91dd:\n1. \u6839\u672c\u539f\u56e0\u3092\u7279\u5b9a\n2. \u9632\u5fa1\u7684\u306anull\u30c1\u30a7\u30c3\u30af\u3092\u8ffd\u52a0\n3. \u30bb\u30c3\u30b7\u30e7\u30f3\u5207\u308c\u6642\u306f401\u3092\u8fd4\u3059\n4. \u540c\u69d8\u306e\u30d1\u30bf\u30fc\u30f3\u304c\u4ed6\u30d5\u30a1\u30a4\u30eb\u306b\u3042\u308c\u3070\u5408\u308f\u305b\u3066\u4fee\u6b63\n5. \u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u3092\u8ffd\u52a0\uff08\u30bb\u30c3\u30b7\u30e7\u30f3\u5207\u308c\u306e\u30b7\u30ca\u30ea\u30aa\uff09\n```\n\n**\u4f8b2: \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5f37\u5316**\n```\nnpm audit \u3067\u5831\u544a\u3055\u308c\u305f\u4ee5\u4e0b\u306eCritical\u8106\u5f31\u6027\u3092\u4fee\u6b63\u3057\u3066\u304f\u3060\u3055\u3044\uff1a\n\n- lodash &lt; 4.17.21 (CVE-2021-23337)\n- axios &lt; 0.21.2 (CVE-2021-3749)\n\n\u5404\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3057\u3001\nAPI\u306e\u5909\u66f4\u70b9\u304c\u3042\u308c\u3070\u5bfe\u5fdc\u30b3\u30fc\u30c9\u3082\u4fee\u6b63\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\u5168\u30c6\u30b9\u30c8\u304c\u30d1\u30b9\u3059\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304b\u3089PR\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n```\n\n---\n\n## 21. Google Vids / Veo 3.1 / Lyria 3\n\n### 21.1 \u6982\u8981\n\n2026\u5e744\u67082\u65e5\uff08I/O\u524d\u306e\u4e8b\u524d\u767a\u8868\uff09\u306b\u3001Google\u306fWorkspace\u306e\u30d3\u30c7\u30aa\u5236\u4f5c\u30c4\u30fc\u30eb\u300cGoogle Vids\u300d\u3092\u5927\u5e45\u5f37\u5316\u3057\u307e\u3057\u305f\u3002\u6700\u5148\u7aef\u306e\u52d5\u753b\u751f\u6210\u30e2\u30c7\u30eb\u300cVeo 3.1\u300d\u3068\u97f3\u697d\u751f\u6210\u30e2\u30c7\u30eb\u300cLyria 3\u300d\u3092\u7d71\u5408\u3057\u3001AI\u30a2\u30d0\u30bf\u30fc\u6a5f\u80fd\u3082\u8ffd\u52a0\u3002\u300c\u52d5\u753b\u5236\u4f5c\u306e\u6c11\u4e3b\u5316\u300d\u3092Workspace\u30e6\u30fc\u30b6\u30fc\u306b\u5c4a\u3051\u308b\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3067\u3059\u3002\n\n### 21.2 Veo 3.1\n\n**Veo\uff08\u30d9\u30aa\uff09**\u306fGoogle\u306eAI\u52d5\u753b\u751f\u6210\u30e2\u30c7\u30eb\u30b7\u30ea\u30fc\u30ba\u3067\u3059\u30023.1\u306f\u524d\u30d0\u30fc\u30b8\u30e7\u30f3\u3068\u6bd4\u3079\u3001\u30ad\u30e3\u30e9\u30af\u30bf\u30fc\u306e\u4e00\u8cab\u6027\u30fb\u6620\u50cf\u306e\u5275\u9020\u6027\u30fb\u7d30\u304b\u3044\u5236\u5fa1\u7cbe\u5ea6\u304c\u5411\u4e0a\u3057\u3066\u3044\u307e\u3059\u3002\n\n**\u63d0\u4f9b\u5185\u5bb9**\n\n| \u30d7\u30e9\u30f3 | \u6708\u9593\u751f\u6210\u6570 | \u5099\u8003 |\n|--------|:--------:|------|\n| \u7121\u6599Google\u30a2\u30ab\u30a6\u30f3\u30c8 | 10\u56de | Veo 3.1\u306e\u7121\u6599\u63d0\u4f9b\u306f\u696d\u754c\u521d |\n| Google AI Pro | \u8ffd\u52a0\u30af\u30ec\u30b8\u30c3\u30c8 | \u9ad8\u54c1\u8cea\u8a2d\u5b9a |\n| Google AI Ultra | \u6700\u59271,000\u56de | |\n| Workspace AI Ultra | \u6700\u59271,000\u56de | \u6cd5\u4eba\u5229\u7528 |\n\n**\u4e3b\u306a\u7279\u5fb4**\n- \u540c\u3058\u30ad\u30e3\u30e9\u30af\u30bf\u30fc\u3092\u7570\u306a\u308b\u30b7\u30fc\u30f3\u3067\u4e00\u8cab\u3057\u3066\u63cf\u5199\uff08\u30ad\u30e3\u30e9\u30af\u30bf\u30fc\u7d99\u7d9a\u6027\uff09\n- \u30c6\u30ad\u30b9\u30c8\u30d7\u30ed\u30f3\u30d7\u30c8\u304b\u3089\u6620\u50cf\u30b9\u30bf\u30a4\u30eb\u30fb\u69cb\u56f3\u30fb\u30ab\u30e1\u30e9\u30ef\u30fc\u30af\u3092\u7d30\u304b\u304f\u6307\u5b9a\u53ef\u80fd\n- \u8907\u6570\u30af\u30ea\u30c3\u30d7\u3092\u751f\u6210\u3057\u3066\u7de8\u96c6\u53ef\u80fd\n\n### 21.3 Lyria 3\n\n**Lyria\uff08\u30ea\u30ea\u30a2\uff09**\u306fGoogle\u306eAI\u97f3\u697d\u751f\u6210\u30e2\u30c7\u30eb\u3067\u3059\u3002Lyria 3\u306fGoogle AI Pro\u30fbUltra\u52a0\u5165\u8005\u5411\u3051\u306b\u3001Google Vids\u5185\u3067\u30aa\u30ea\u30b8\u30ca\u30eb\u697d\u66f2\u3092\u4f5c\u6210\u3067\u304d\u307e\u3059\u3002\n\n**\u6a5f\u80fd\u8a73\u7d30**\n- **\u751f\u6210\u9577**: 30\u79d2\u301c3\u5206\u306e\u30aa\u30ea\u30b8\u30ca\u30eb\u697d\u66f2\n- **\u30b9\u30bf\u30a4\u30eb\u5236\u5fa1**: \u30b8\u30e3\u30f3\u30eb\u30fb\u30c6\u30f3\u30dd\u30fb\u30dc\u30fc\u30ab\u30eb\u306e\u6709\u7121\u30fb\u697d\u5668\u69cb\u6210\u3092\u6307\u5b9a\n- **Lyria 3 Pro**: Ultra\u52a0\u5165\u8005\u5411\u3051\u306e\u9ad8\u54c1\u8cea\u7248\uff08\u3088\u308a\u30ea\u30c3\u30c1\u306a\u30a2\u30ec\u30f3\u30b8\u30fb\u9577\u5c3a\u5bfe\u5fdc\uff09\n- **\u8457\u4f5c\u6a29\u30d5\u30ea\u30fc**: \u751f\u6210\u3057\u305f\u697d\u66f2\u306fYouTube\u7b49\u3067\u5546\u7528\u5229\u7528\u53ef\u80fd\uff08SynthID\u900f\u304b\u3057\u5165\u308a\uff09\n\n**\u30d7\u30ed\u30f3\u30d7\u30c8\u4f8b**\n```\n\u660e\u308b\u304f\u30dd\u30b8\u30c6\u30a3\u30d6\u306a\u30b3\u30fc\u30dd\u30ec\u30fc\u30c8\u30d3\u30c7\u30aa\u5411\u3051BGM\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\u30b8\u30e3\u30f3\u30eb: \u30a2\u30b3\u30fc\u30b9\u30c6\u30a3\u30c3\u30af\u30dd\u30c3\u30d7\n\u30c6\u30f3\u30dd: \u4e2d\u7a0b\u5ea6\uff08BPM 100-110\uff09\n\u697d\u5668: \u30a2\u30b3\u30fc\u30b9\u30c6\u30a3\u30c3\u30af\u30ae\u30bf\u30fc\u3001\u30d4\u30a2\u30ce\u3001\u8efd\u3044\u30d1\u30fc\u30ab\u30c3\u30b7\u30e7\u30f3\n\u30dc\u30fc\u30ab\u30eb: \u306a\u3057\n\u9577\u3055: 90\u79d2\uff0830\u79d2\u30a4\u30f3\u30c8\u30ed + 60\u79d2\u30e1\u30a4\u30f3\u30eb\u30fc\u30d7\uff09\n```\n\n### 21.4 AI\u30a2\u30d0\u30bf\u30fc\n\nGoogle AI Pro\u30fbUltra\u52a0\u5165\u8005\u306f\u3001Veo 3.1\u3067\u52d5\u304b\u305b\u308b\u300c\u6307\u793a\u53ef\u80fd\u306aAI\u30a2\u30d0\u30bf\u30fc\u300d\u304c\u5229\u7528\u53ef\u80fd\u3067\u3059\u3002\n\n**\u7279\u5fb4**\n- \u30ea\u30a2\u30eb\u7cfb\u30fb\u30a2\u30cb\u30e1\u7cfb\u306e2\u30b9\u30bf\u30a4\u30eb\n- 8\u8a00\u8a9e\u5bfe\u5fdc\uff08\u65e5\u672c\u8a9e\u542b\u3080\uff09\n- \u30a2\u30d0\u30bf\u30fc\u3092\u7279\u5b9a\u306e\u30b7\u30fc\u30f3\u306b\u914d\u7f6e\u3057\u3001\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3068\u300c\u30a4\u30f3\u30bf\u30e9\u30af\u30b7\u30e7\u30f3\u300d\u3055\u305b\u308b\u3053\u3068\u304c\u53ef\u80fd\n- \u5916\u898b\u30fb\u670d\u88c5\u30fb\u52d5\u4f5c\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\n\n**\u6d3b\u7528\u4f8b**\n```\n\u6d3b\u7528\u30b7\u30fc\u30f3\u4f8b\uff1a\n- \u88fd\u54c1\u30ec\u30d3\u30e5\u30fc\u52d5\u753b\uff1a\u30a2\u30d0\u30bf\u30fc\u304c\u5546\u54c1\u3092\u6301\u3063\u3066\u8aac\u660e\n- \u6559\u80b2\u30b3\u30f3\u30c6\u30f3\u30c4\uff1aAI\u30ad\u30e3\u30e9\u30af\u30bf\u30fc\u304c\u6388\u696d\u5f62\u5f0f\u3067\u89e3\u8aac\n- \u591a\u8a00\u8a9e\u30b3\u30f3\u30c6\u30f3\u30c4\u5c55\u958b\uff1a\u540c\u4e00\u30a2\u30d0\u30bf\u30fc\u304c\u8907\u6570\u8a00\u8a9e\u3067\u540c\u3058\u5185\u5bb9\u3092\u8aac\u660e\n- SNS\u767a\u4fe1\uff1a\u81ea\u5206\u306e\u5206\u8eab\u30a2\u30d0\u30bf\u30fc\u304c\u4ee3\u308f\u308a\u306b\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u914d\u4fe1\n```\n\n### 21.5 \u305d\u306e\u4ed6Google Vids\u306e\u65b0\u6a5f\u80fd\n\n**Chrome\u62e1\u5f35\u6a5f\u80fd\u306b\u3088\u308b\u753b\u9762\u9332\u753b**\n\u30d6\u30e9\u30a6\u30b6\u304b\u3089\u76f4\u63a5\u753b\u9762\u9332\u753b\u3092\u8d77\u52d5\u3057\u3001Google Vids\u3067\u5373\u5ea7\u306b\u7de8\u96c6\u958b\u59cb\u3002Loom\u7b49\u306e\u5916\u90e8\u30c4\u30fc\u30eb\u3092\u4f7f\u308f\u305a\u306bWorkspace\u5185\u3067\u5b8c\u7d50\u3002\n\n**YouTube\u3078\u306e\u76f4\u63a5\u30d1\u30d6\u30ea\u30c3\u30b7\u30e5**\nGoogle Vids\u304b\u3089YouTube\u30c1\u30e3\u30f3\u30cd\u30eb\u3078\u306e\u76f4\u63a5\u6295\u7a3f\u304c\u53ef\u80fd\u306b\u3002\u52d5\u753b\u5236\u4f5c\u304b\u3089\u516c\u958b\u307e\u3067\u4e00\u6c17\u901a\u8cab\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3002\n\n### 21.6 \u5177\u4f53\u7684\u306a\u6d3b\u7528\u30b7\u30fc\u30f3\n\n**\u30b7\u30fc\u30f31: \u4f01\u696d\u7d39\u4ecb\u30fb\u63a1\u7528\u52d5\u753b**\n\u300c\u4f1a\u793e\u306e\u30ab\u30eb\u30c1\u30e3\u30fc\u3092\u7d39\u4ecb\u3059\u308b2\u5206\u9593\u306e\u63a1\u7528\u52d5\u753b\u300d\u3092\u30c6\u30ad\u30b9\u30c8\u30d7\u30ed\u30f3\u30d7\u30c8\u3068\u3057\u3066\u5165\u529b\u3057\u3001Veo 3.1\u3067\u30d3\u30b8\u30e5\u30a2\u30eb\u3092\u751f\u6210\u3001Lyria 3\u3067BGM\u3092\u4f5c\u6210\u3001AI\u30a2\u30d0\u30bf\u30fc\u304c\u30ca\u30ec\u30fc\u30b7\u30e7\u30f3\u62c5\u5f53\u3002\u52d5\u753b\u5236\u4f5c\u4f1a\u793e\u3078\u306e\u5916\u6ce8\u30b3\u30b9\u30c8\u3092\u30bc\u30ed\u306b\u8fd1\u3065\u3051\u308b\u3002\n\n**\u30b7\u30fc\u30f32: e\u30e9\u30fc\u30cb\u30f3\u30b0\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u91cf\u7523**\n\u5f93\u6765\u306f1\u672c\u306e\u6559\u80b2\u52d5\u753b\u306b\u6570\u65e5\u304b\u304b\u3063\u3066\u3044\u305f\u3068\u3053\u308d\u3001\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u5165\u529b\u3059\u308b\u3060\u3051\u3067AI\u304c\u6620\u50cf\u30fbBGM\u30fb\u30a2\u30d0\u30bf\u30fc\u8b1b\u5e2b\u3092\u81ea\u52d5\u751f\u6210\u3002\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u591a\u8a00\u8a9e\u5c55\u958b\u3082\u540c\u3058\u30a2\u30d0\u30bf\u30fc\u3092\u4f7f\u3063\u3066\u8fc5\u901f\u306b\u5bfe\u5fdc\u3002\n\n**\u30b7\u30fc\u30f33: SNS\u30de\u30fc\u30b1\u30c6\u30a3\u30f3\u30b0\u52d5\u753b\u306e\u81ea\u52d5\u5316**\n\u5546\u54c1\u753b\u50cf\u3068\u30b3\u30d4\u30fc\u3092\u5165\u529b\u3059\u308b\u3060\u3051\u3067\u3001TikTok\u30fbReels\u30fbYouTube Shorts\u5411\u3051\u306e\u7e26\u578b\u52d5\u753b\u3092\u81ea\u52d5\u751f\u6210\u3002A/B\u30c6\u30b9\u30c8\u7528\u306b\u8907\u6570\u30d0\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u3082\u4e00\u62ec\u751f\u6210\u3002\n\n**\u30b7\u30fc\u30f34: \u793e\u5185\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u52d5\u753b\u5316**\n\u91cd\u8981\u306a\u30a2\u30ca\u30a6\u30f3\u30b9\u3084\u30de\u30cb\u30e5\u30a2\u30eb\u3092\u52d5\u753b\u3067\u4f1d\u3048\u305f\u3044\u304c\u5236\u4f5c\u30ea\u30bd\u30fc\u30b9\u304c\u306a\u3044\u5834\u5408\u3001\u30c6\u30ad\u30b9\u30c8\u3092Vids\u3067\u7c21\u5358\u306b\u52d5\u753b\u5316\u3002AI\u30a2\u30d0\u30bf\u30fc\u304c\u8aac\u660e\u5f79\u3092\u62c5\u3046\u3002\n\n---\n\n## 22. NotebookLM\n\n### 22.1 \u6982\u8981\n\nNotebookLM\u306fGoogle\u304c\u63d0\u4f9b\u3059\u308bAI\u99c6\u52d5\u306e\u30ea\u30b5\u30fc\u30c1\u30fb\u30ca\u30ec\u30c3\u30b8\u6574\u7406\u30c4\u30fc\u30eb\u3067\u3059\u3002PDF\u3084\u8a18\u4e8b\u3001\u97f3\u58f0\u306a\u3069\u3092\u30a4\u30f3\u30d7\u30c3\u30c8\u3068\u3057\u3066\u767b\u9332\u3057\u3001Gemini\u304c\u305d\u306e\u5185\u5bb9\u3092\u6df1\u304f\u7406\u89e3\u3057\u305f\u4e0a\u3067\u8cea\u554f\u5fdc\u7b54\u30fb\u8981\u7d04\u30fb\u30dd\u30c3\u30c9\u30ad\u30e3\u30b9\u30c8\u751f\u6210\u3092\u884c\u3044\u307e\u3059\u3002I/O 2026\u524d\u5f8c\u3067\u8907\u6570\u306e\u5927\u578b\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u304c\u767a\u8868\u30fb\u5c55\u958b\u3055\u308c\u3066\u3044\u307e\u3059\u3002\n\n### 22.2 Audio Overview\uff08\u97f3\u58f0\u30dd\u30c3\u30c9\u30ad\u30e3\u30b9\u30c8\u751f\u6210\uff09\n\nNotebookLM\u306e\u6700\u5927\u306e\u7279\u5fb4\u3068\u3082\u3044\u3048\u308b\u6a5f\u80fd\u304c\u300cAudio Overview\u300d\u3067\u3059\u3002\u767b\u9332\u3057\u305f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3084\u8cc7\u6599\u3092\u3082\u3068\u306b\u3001**AI\u30db\u30b9\u30c82\u540d\u304c\u639b\u3051\u5408\u3044\u306a\u304c\u3089\u89e3\u8aac\u3059\u308b\u30dd\u30c3\u30c9\u30ad\u30e3\u30b9\u30c8**\u3092\u81ea\u52d5\u751f\u6210\u3057\u307e\u3059\u3002\n\n**\u7279\u5fb4**\n- \u5358\u7d14\u306a\u8981\u7d04\u3067\u306f\u306a\u304f\u30012\u4eba\u306eAI\u30db\u30b9\u30c8\u304c\u300c\u306a\u305c\u91cd\u8981\u304b\u300d\u300c\u3069\u3046\u5fdc\u7528\u3067\u304d\u308b\u304b\u300d\u307e\u3067\u81ea\u7136\u306a\u4f1a\u8a71\u3067\u8b70\u8ad6\n- \u751f\u6210\u3055\u308c\u305f\u97f3\u58f0\u306f\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u30aa\u30d5\u30e9\u30a4\u30f3\u3067\u3082\u8074\u53d6\u53ef\u80fd\n- \u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u53ef\u80fd\u306a\u5f62\u5f0f\uff08\u5f8c\u8ff0\uff09\n\n**\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30aa\u30d7\u30b7\u30e7\u30f3**\n```\n\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u9078\u629e:\n- Deep Dive\uff08\u6df1\u6398\u308a\uff09: 1\u3064\u306e\u30c8\u30d4\u30c3\u30af\u3092\u5fb9\u5e95\u89e3\u8aac\n- Brief\uff08\u30d6\u30ea\u30fc\u30d5\uff09: \u8981\u70b9\u3060\u3051\u3092\u77ed\u6642\u9593\u3067\n- Critique\uff08\u6279\u5224\u7684\u8003\u5bdf\uff09: \u8ad6\u70b9\u30fb\u554f\u984c\u70b9\u306b\u7126\u70b9\n- Debate\uff08\u8b70\u8ad6\u5f62\u5f0f\uff09: \u8cdb\u5426\u4e21\u8ad6\u3092\u5c55\u958b\n\n\u30ab\u30b9\u30bf\u30e0\u8a2d\u5b9a\u9805\u76ee:\n- \u8a00\u8a9e\uff08\u65e5\u672c\u8a9e\u5bfe\u5fdc\uff09\n- \u5c3a\uff08\u77ed/\u4e2d/\u9577\uff09\n- \u91cd\u70b9\u30c6\u30fc\u30de: \u300c\u3053\u306e\u30a8\u30d4\u30bd\u30fc\u30c9\u3067\u7279\u306b\u3007\u3007\u3092\u6398\u308a\u4e0b\u3052\u3066\u304f\u3060\u3055\u3044\u300d\n```\n\n**\u30d7\u30ed\u30f3\u30d7\u30c8\u4f8b**\n```\n\u4ee5\u4e0b\u306e3\u3064\u306e\u8ad6\u6587\u3092\u3082\u3068\u306bAudio Overview\u3092\u751f\u6210\u3057\u3066\u304f\u3060\u3055\u3044\uff1a\n[\u8ad6\u65871: \u5927\u898f\u6a21\u8a00\u8a9e\u30e2\u30c7\u30eb\u306e\u7701\u30a8\u30cd\u30eb\u30ae\u30fc\u5316]\n[\u8ad6\u65872: \u30aa\u30f3\u30c7\u30d0\u30a4\u30b9AI\u306e\u6700\u65b0\u52d5\u5411]\n[\u8ad6\u65873: AI\u306e\u74b0\u5883\u8ca0\u8377\u306b\u3064\u3044\u3066\u306e\u8abf\u67fb]\n\n\u30d5\u30a9\u30fc\u30de\u30c3\u30c8: Debate\uff08\u8b70\u8ad6\u5f62\u5f0f\uff09\n\u91cd\u70b9\u30c6\u30fc\u30de: \u300c\u4f01\u696d\u304cAI\u5c0e\u5165\u3092\u9032\u3081\u308b\u4e0a\u3067\u3001\u74b0\u5883\u30b3\u30b9\u30c8\u3068\u3069\u3046\u5411\u304d\u5408\u3046\u3079\u304d\u304b\u300d\n\u8a00\u8a9e: \u65e5\u672c\u8a9e\n\u5c3a: 20\u5206\u7a0b\u5ea6\n```\n\n### 22.3 \u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u30e2\u30fc\u30c9\n\nAudio Overview\u306e\u30ea\u30b9\u30cb\u30f3\u30b0\u4e2d\u306b\u300c\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u30e2\u30fc\u30c9\u300d\u3092\u30aa\u30f3\u306b\u3059\u308b\u3068\u3001**\u30ea\u30b9\u30cb\u30f3\u30b0\u3057\u306a\u304c\u3089AI\u30db\u30b9\u30c8\u306b\u5272\u308a\u8fbc\u3093\u3067\u8cea\u554f**\u3067\u304d\u307e\u3059\u3002\n\n```\n\u6d3b\u7528\u4f8b:\n\u30dd\u30c3\u30c9\u30ad\u30e3\u30b9\u30c8\u518d\u751f\u4e2d...\n\u30e6\u30fc\u30b6\u30fc: \u300c\u4eca\u306e\u8aac\u660e\u3001\u3082\u3046\u5c11\u3057\u8a73\u3057\u304f\u6559\u3048\u3066\u300d\nAI\u30db\u30b9\u30c8: \u300c\u3044\u3044\u8cea\u554f\u3067\u3059\u306d\u3002\u3053\u306e\u70b9\u306b\u3064\u3044\u3066\u306f\u3067\u3059\u306d...\u300d\n\uff08\u30dd\u30c3\u30c9\u30ad\u30e3\u30b9\u30c8\u306b\u623b\u308b or \u4f1a\u8a71\u3092\u7d9a\u3051\u308b\uff09\n```\n\n### 22.4 Podcast API\uff08\u958b\u767a\u8005\u5411\u3051\uff09\n\nNotebookLM Enterprise\u3067\u63d0\u4f9b\u3055\u308c\u3066\u3044\u308bPodcast API\u3092\u4f7f\u3048\u3070\u3001\u958b\u767a\u8005\u304c\u72ec\u81ea\u306e\u30a2\u30d7\u30ea\u306bAI\u30dd\u30c3\u30c9\u30ad\u30e3\u30b9\u30c8\u751f\u6210\u6a5f\u80fd\u3092\u7d44\u307f\u8fbc\u3081\u307e\u3059\u3002\n\n```python\nimport google.generativeai as genai\n\n# Podcast API\u306e\u57fa\u672c\u7684\u306a\u4f7f\u7528\u4f8b\npodcast_response = genai.create_podcast(\n    context=[\n        {\"type\": \"text\", \"content\": \"\u7814\u7a76\u8ad6\u6587\u306e\u30c6\u30ad\u30b9\u30c8\u5168\u6587...\"},\n        {\"type\": \"url\", \"url\": \"https://arxiv.org/abs/XXXX.XXXXX\"},\n        {\"type\": \"pdf\", \"path\": \"/path/to/report.pdf\"}\n    ],\n    format=\"deep_dive\",\n    language=\"ja\",\n    duration_minutes=15,\n    focus_prompt=\"\u30d3\u30b8\u30cd\u30b9\u30d1\u30fc\u30bd\u30f3\u304c\u5b9f\u8df5\u3067\u4f7f\u3048\u308b\u30a4\u30f3\u30b5\u30a4\u30c8\u3092\u4e2d\u5fc3\u306b\"\n)\n\n# \u97f3\u58f0\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\nwith open(\"podcast_output.mp3\", \"wb\") as f:\n    f.write(podcast_response.audio_content)\n```\n\n### 22.5 Google AI Pro\u3068\u306e\u7d71\u5408\n\n- **Google AI Pro\u30d7\u30e9\u30f3\u306b\u7121\u6599\u3067NotebookLM\u304c\u7d71\u5408**\uff08\u5225\u9014\u8ab2\u91d1\u4e0d\u8981\uff09\n- AI\u30aa\u30fc\u30c8\u30e1\u30fc\u30b7\u30e7\u30f3\u306e\u30b9\u30c6\u30c3\u30d7\u3068\u3057\u3066\u300cAsk NotebookLM\u300d\u3092\u4f7f\u7528\u53ef\u80fd\uff08\u81ea\u5206\u306e\u30ce\u30fc\u30c8\u30d6\u30c3\u30af\u3092AI\u30ca\u30ec\u30c3\u30b8\u30bd\u30fc\u30b9\u3068\u3057\u3066\u6d3b\u7528\uff09\n- Workspace\u3068\u306e\u9023\u643a\u3067Drive\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u76f4\u63a5\u30ce\u30fc\u30c8\u30d6\u30c3\u30af\u306b\u8ffd\u52a0\n\n### 22.6 \u4e3b\u306a\u6d3b\u7528\u30b7\u30fc\u30f3\n\n**\u30b7\u30fc\u30f31: \u5b66\u8853\u30ea\u30b5\u30fc\u30c1\u306e\u52b9\u7387\u5316**\n\u8907\u6570\u306e\u8ad6\u6587\u30fb\u66f8\u7c4d\u3092\u767b\u9332\u3057\u3001\u300c\u3053\u306e\u5206\u91ce\u306e\u4e3b\u8981\u306a\u8ad6\u70b9\u306f\uff1f\u300d\u300c\u8457\u8005A\u3068\u8457\u8005B\u306e\u898b\u89e3\u306e\u76f8\u9055\u70b9\u306f\uff1f\u300d\u3068\u3044\u3046\u6a2a\u65ad\u7684\u306a\u8cea\u554f\u306b\u7b54\u3048\u3066\u3082\u3089\u3046\u3002Audio Overview\u3067\u901a\u52e4\u4e2d\u306b\u8074\u304f\u5f62\u5f0f\u306b\u3082\u5909\u63db\u3002\n\n**\u30b7\u30fc\u30f32: \u30d3\u30b8\u30cd\u30b9\u30a4\u30f3\u30c6\u30ea\u30b8\u30a7\u30f3\u30b9**\n\u7af6\u5408\u4ed6\u793e\u306e\u30d7\u30ec\u30b9\u30ea\u30ea\u30fc\u30b9\u30fb\u6c7a\u7b97\u767a\u8868\u30fb\u30ec\u30dd\u30fc\u30c8\u3092NotebookLM\u306b\u767b\u9332\u3057\u3001\u300c\u7af6\u5408\u5404\u793e\u306e\u6226\u7565\u306e\u9055\u3044\u3092\u6559\u3048\u3066\u300d\u3068\u3044\u3046\u5206\u6790\u8cea\u554f\u3092\u884c\u3046\u3002\n\n**\u30b7\u30fc\u30f33: \u793e\u5185\u30ca\u30ec\u30c3\u30b8\u306e\u97f3\u58f0\u5316**\n\u793e\u5185\u898f\u5b9a\u30fb\u30de\u30cb\u30e5\u30a2\u30eb\u30fb\u7814\u4fee\u8cc7\u6599\u3092NotebookLM\u306b\u767b\u9332\u3057\u3001\u300c\u65b0\u5165\u793e\u54e1\u5411\u3051\u306e\u30aa\u30f3\u30dc\u30fc\u30c7\u30a3\u30f3\u30b0\u30dd\u30c3\u30c9\u30ad\u30e3\u30b9\u30c8\u300d\u3092\u81ea\u52d5\u751f\u6210\u3002\u66f4\u65b0\u304c\u3042\u308c\u3070\u518d\u751f\u6210\u3059\u308b\u3060\u3051\u3002\n\n**\u30b7\u30fc\u30f34: \u30b3\u30f3\u30c6\u30f3\u30c4\u30ea\u30d1\u30fc\u30d1\u30b7\u30f3\u30b0**\nYouTube\u306e\u53ce\u9332\u539f\u7a3f\u30fb\u30d6\u30ed\u30b0\u8a18\u4e8b\u3092NotebookLM\u306b\u5165\u308c\u3066\u3001Debate\u5f62\u5f0f\u306e\u30dd\u30c3\u30c9\u30ad\u30e3\u30b9\u30c8\u3092\u751f\u6210\u2192\u5225\u306e\u5a92\u4f53\u30b3\u30f3\u30c6\u30f3\u30c4\u3068\u3057\u3066\u6d41\u7528\u3002\n\n**\u30b7\u30fc\u30f35: \u8aad\u66f8\u30b5\u30dd\u30fc\u30c8**\n\u9577\u3044\u672c\u3084\u5831\u544a\u66f8\u3092PDF\u3067\u767b\u9332\u3057\u3001\u300cChapter 3\u306e\u8981\u70b9\u30925\u5206\u306e\u30dd\u30c3\u30c9\u30ad\u30e3\u30b9\u30c8\u306b\u3057\u3066\u300d\u3068\u6307\u5b9a\u3059\u308b\u3053\u3068\u3067\u3001\u52b9\u7387\u7684\u306a\u30a4\u30f3\u30d7\u30c3\u30c8\u304c\u5b9f\u73fe\u3002\n\n---\n\n## \u53c2\u8003\u30ea\u30f3\u30af\u30fb\u51fa\u5178\n\n- [Google I/O 2026 \u516c\u5f0f\u30b5\u30a4\u30c8](https://io.google/2026/)\n- [9to5Google: Google I/O 2026 \u5168\u767a\u8868\u307e\u3068\u3081](https://9to5google.com/2026/05/19/google-io-2026-news/)\n- [Google Blog: Sundar Pichai keynote I/O 2026](https://blog.google/innovation-and-ai/sundar-pichai-io-2026/)\n- [Google DeepMind: Gemini 3.5 Flash](https://deepmind.google/models/gemini/flash/)\n- [Google Blog: Gemini app \u306e\u9032\u5316](https://blog.google/innovation-and-ai/products/gemini-app/next-evolution-gemini-app/)\n- [Google Blog: Antigravity 2.0 \u958b\u767a\u8005\u5411\u3051\u30cf\u30a4\u30e9\u30a4\u30c8](https://blog.google/innovation-and-ai/technology/developers-tools/google-io-2026-developer-highlights/)\n- [Google Blog: AI Studio I/O 2026](https://blog.google/innovation-and-ai/technology/developers-tools/google-ai-studio-io-2026/)\n- [Google Blog: Android XR \u30a2\u30a4\u30a6\u30a7\u30a2](https://blog.google/products-and-platforms/platforms/android/android-xr-io-2026/)\n- [Google Blog: Universal Cart](https://blog.google/products-and-platforms/products/shopping/google-shopping-cart/)\n- [Android Authority: Gemini Spark\u30fbDaily Brief\u30fbNeural Expressive](https://www.androidauthority.com/google-gemini-neural-expressive-gemini-spark-daily-brief-omni-updates-3668384/)\n- [CNBC: Gemini 3.5 Flash\u30fbGemini Spark](https://www.cnbc.com/2026/05/19/google-ai-ultra-gemini-spark-omni.html)\n- [MarkTechPost: Antigravity 2.0 \u8a73\u7d30](https://www.marktechpost.com/2026/05/19/google-launches-antigravity-2-0-at-i-o-2026/)\n- [TechTimes: Google AI Ultra $100\u30d7\u30e9\u30f3](https://www.techtimes.com/articles/316853/20260519/google-cuts-ai-ultra-100-launches-gemini-spark-agent-android-xr-glasses-i-o-2026.htm)\n- [Google Blog: Android Show I/O Edition 2026](https://blog.google/products-and-platforms/platforms/android/android-show-io-edition-2026/)\n- [Google Blog: Jules \u6b63\u5f0f\u30ea\u30ea\u30fc\u30b9](https://blog.google/technology/google-labs/jules-now-available/)\n- [Google Blog: Google Vids\uff08Veo 3.1 + Lyria 3\uff09](https://blog.google/products-and-platforms/products/workspace/google-vids-updates-lyria-veo/)\n- [Google DeepMind: Veo 3.1](https://deepmind.google/models/veo/)\n- [Google NotebookLM Audio Overview](https://notebooklm.google/audio)\n- [Gizbot: Google I/O 2026 AI\u5168\u4f53\u307e\u3068\u3081](https://www.gizbot.com/artificial-intelligence/google-i-o-2026-ai-shift-gemini-spark-agents-and-ai-workspace-014-125689.html)\n\n---\n\n*\u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306f2026\u5e745\u670820\u65e5\u6642\u70b9\u306e\u60c5\u5831\u306b\u57fa\u3065\u3044\u3066\u3044\u307e\u3059\u3002\u5404\u6a5f\u80fd\u306e\u63d0\u4f9b\u6642\u671f\u30fb\u4ed5\u69d8\u306f\u4eca\u5f8c\u5909\u66f4\u3055\u308c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u6700\u65b0\u60c5\u5831\u306fGoogle\u306e\u516c\u5f0f\u30b5\u30a4\u30c8\u30fb\u30d6\u30ed\u30b0\u3092\u3054\u78ba\u8a8d\u304f\u3060\u3055\u3044\u3002*\n", "creation_timestamp": "2026-05-19T21:05:08.000000Z"}, {"uuid": "67cb9649-7758-4d54-9295-325116792faf", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2021-23336", "type": "seen", "source": "Telegram/1XUVzdlnKLcC8-JTFaJFHRtrcYkjaCfs5k0ZWuQ2acx1c18", "content": "", "creation_timestamp": "2022-08-16T02:34:42.000000Z"}, {"uuid": "0833ec97-592c-428d-ae57-b552be213dd9", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2021-23336", "type": "seen", "source": "https://gist.github.com/xinhongwang138-hue/6b83f89fed135d1aad9c8de5c574e471", "content": "import re\nfrom typing import TYPE_CHECKING, TypeVar\n\nfrom .typedefs import Handler, Middleware\nfrom .web_exceptions import HTTPMove, HTTPPermanentRedirect\nfrom .web_request import Request\nfrom .web_response import StreamResponse\nfrom .web_urldispatcher import SystemRoute\n\n__all__ = (\n    \"middleware\",\n    \"normalize_path_middleware\",\n)\n\nif TYPE_CHECKING:\n    from .web_app import Application\n\n_Func = TypeVar(\"_Func\")\n\n\nasync def _check_request_resolves(request: Request, path: str) -&gt; tuple[bool, Request]:\n    alt_request = request.clone(rel_url=path)\n\n    match_info = await request.app.router.resolve(alt_request)\n    alt_request._match_info = match_info\n\n    if match_info.http_exception is None:\n        return True, alt_request\n\n    return False, request\n\n\ndef middleware(f: _Func) -&gt; _Func:\n    f.__middleware_version__ = 1  # type: ignore[attr-defined]\n    return f\n\n\ndef normalize_path_middleware(\n    *,\n    append_slash: bool = True,\n    remove_slash: bool = False,\n    merge_slashes: bool = True,\n    redirect_class: type[HTTPMove] = HTTPPermanentRedirect,\n) -&gt; Middleware:\n    \"\"\"Factory for producing a middleware that normalizes the path of a request.\n\n    Normalizing means:\n        - Add or remove a trailing slash to the path.\n        - Double slashes are replaced by one.\n\n    The middleware returns as soon as it finds a path that resolves\n    correctly. The order if both merge and append/remove are enabled is\n        1) merge slashes\n        2) append/remove slash\n        3) both merge slashes and append/remove slash.\n    If the path resolves with at least one of those conditions, it will\n    redirect to the new path.\n\n    Only one of `append_slash` and `remove_slash` can be enabled. If both\n    are `True` the factory will raise an assertion error\n\n    If `append_slash` is `True` the middleware will append a slash when\n    needed. If a resource is defined with trailing slash and the request\n    comes without it, it will append it automatically.\n\n    If `remove_slash` is `True`, `append_slash` must be `False`. When enabled\n    the middleware will remove trailing slashes and redirect if the resource\n    is defined\n\n    If merge_slashes is True, merge multiple consecutive slashes in the\n    path into one.\n    \"\"\"\n    correct_configuration = not (append_slash and remove_slash)\n    assert correct_configuration, \"Cannot both remove and append slash\"\n\n    @middleware\n    async def impl(request: Request, handler: Handler) -&gt; StreamResponse:\n        if isinstance(request.match_info.route, SystemRoute):\n            paths_to_check = []\n            if \"?\" in request.raw_path:\n                path, query = request.raw_path.split(\"?\", 1)\n                query = \"?\" + query\n            else:\n                query = \"\"\n                path = request.raw_path\n\n            if merge_slashes:\n                paths_to_check.append(re.sub(\"//+\", \"/\", path))\n            if append_slash and not request.path.endswith(\"/\"):\n                paths_to_check.append(path + \"/\")\n            if remove_slash and request.path.endswith(\"/\"):\n                paths_to_check.append(path[:-1])\n            if merge_slashes and append_slash:\n                paths_to_check.append(re.sub(\"//+\", \"/\", path + \"/\"))\n            if merge_slashes and remove_slash:\n                merged_slashes = re.sub(\"//+\", \"/\", path)\n                paths_to_check.append(merged_slashes[:-1])\n\n            for path in paths_to_check:\n                path = re.sub(\"^//+\", \"/\", path)  # SECURITY: GHSA-v6wp-4m6f-gcjg\n                resolves, request = await _check_request_resolves(request, path)\n                if resolves:\n                    raise redirect_class(request.raw_path + query)\n\n        return await handler(request)\n\n    return impl\n\n\ndef _fix_request_current_app(app: \"Application\") -&gt; Middleware:\n    @middleware\n    async def impl(request: Request, handler: Handler) -&gt; StreamResponse:\n        match_info = request.match_info\n        prev = match_info.current_app\n        match_info.current_app = app\n        try:\n            return await handler(request)\n        finally:\n            match_info.current_app = prev\n\n    return impl\n\n\n\"\"\"Http related parsers and protocol.\"\"\"\n\nimport asyncio\nimport re\nimport sys\nfrom typing import (  # noqa\n    TYPE_CHECKING,\n    Any,\n    Awaitable,\n    Callable,\n    Iterable,\n    List,\n    NamedTuple,\n    Optional,\n)\n\nfrom multidict import CIMultiDict\n\nfrom .abc import AbstractStreamWriter\nfrom .base_protocol import BaseProtocol\nfrom .client_exceptions import ClientConnectionResetError\nfrom .compression_utils import ZLibCompressor\nfrom .helpers import NO_EXTENSIONS\n\n__all__ = (\"StreamWriter\", \"HttpVersion\", \"HttpVersion10\", \"HttpVersion11\")\n\nif sys.version_info &gt;= (3, 12):\n    from collections.abc import Buffer\nelse:\n    from typing import Union\n\n    Buffer = Union[bytes, bytearray, \"memoryview[int]\", \"memoryview[bytes]\"]\n\n\nMIN_PAYLOAD_FOR_WRITELINES = 2048\nIS_PY313_BEFORE_313_2 = (3, 13, 0) &lt;= sys.version_info &lt; (3, 13, 2)\nIS_PY_BEFORE_312_9 = sys.version_info &lt; (3, 12, 9)\nSKIP_WRITELINES = IS_PY313_BEFORE_313_2 or IS_PY_BEFORE_312_9\n# writelines is not safe for use\n# on Python 3.12+ until 3.12.9\n# on Python 3.13+ until 3.13.2\n# and on older versions it not any faster than write\n# CVE-2024-12254: https://github.com/python/cpython/pull/127656\n\n\nclass HttpVersion(NamedTuple):\n    major: int\n    minor: int\n\n\nHttpVersion10 = HttpVersion(1, 0)\nHttpVersion11 = HttpVersion(1, 1)\n\n\n_T_OnChunkSent = Optional[Callable[[Buffer], Awaitable[None]]]\n_T_OnHeadersSent = Optional[Callable[[\"CIMultiDict[str]\"], Awaitable[None]]]\n\n\nclass StreamWriter(AbstractStreamWriter):\n\n    length: int | None = None\n    chunked: bool = False\n    _eof: bool = False\n    _compress: ZLibCompressor | None = None\n\n    def __init__(\n        self,\n        protocol: BaseProtocol,\n        loop: asyncio.AbstractEventLoop,\n        on_chunk_sent: _T_OnChunkSent = None,\n        on_headers_sent: _T_OnHeadersSent = None,\n    ) -&gt; None:\n        self._protocol = protocol\n        self.loop = loop\n        self._on_chunk_sent: _T_OnChunkSent = on_chunk_sent\n        self._on_headers_sent: _T_OnHeadersSent = on_headers_sent\n        self._headers_buf: bytes | None = None\n        self._headers_written: bool = False\n\n    @property\n    def transport(self) -&gt; asyncio.Transport | None:\n        return self._protocol.transport\n\n    @property\n    def protocol(self) -&gt; BaseProtocol:\n        return self._protocol\n\n    def enable_chunking(self) -&gt; None:\n        self.chunked = True\n\n    def enable_compression(\n        self, encoding: str = \"deflate\", strategy: int | None = None\n    ) -&gt; None:\n        self._compress = ZLibCompressor(encoding=encoding, strategy=strategy)\n\n    def _write(self, chunk: Buffer) -&gt; None:\n        size = len(chunk)\n        self.buffer_size += size\n        self.output_size += size\n        transport = self._protocol.transport\n        if transport is None or transport.is_closing():\n            raise ClientConnectionResetError(\"Cannot write to closing transport\")\n        transport.write(chunk)\n\n    def _writelines(self, chunks: Iterable[Buffer]) -&gt; None:\n        size = 0\n        for chunk in chunks:\n            size += len(chunk)\n        self.buffer_size += size\n        self.output_size += size\n        transport = self._protocol.transport\n        if transport is None or transport.is_closing():\n            raise ClientConnectionResetError(\"Cannot write to closing transport\")\n        if SKIP_WRITELINES or size &lt; MIN_PAYLOAD_FOR_WRITELINES:\n            transport.write(b\"\".join(chunks))\n        else:\n            transport.writelines(chunks)\n\n    def _write_chunked_payload(self, chunk: Buffer) -&gt; None:\n        \"\"\"Write a chunk with proper chunked encoding.\"\"\"\n        chunk_len_pre = f\"{len(chunk):x}\\r\\n\".encode(\"ascii\")\n        self._writelines((chunk_len_pre, chunk, b\"\\r\\n\"))\n\n    def _send_headers_with_payload(self, chunk: Buffer, is_eof: bool) -&gt; None:\n        \"\"\"Send buffered headers with payload, coalescing into single write.\"\"\"\n        # Mark headers as written\n        self._headers_written = True\n        headers_buf = self._headers_buf\n        self._headers_buf = None\n\n        if TYPE_CHECKING:\n            # Safe because callers (write() and write_eof()) only invoke this method\n            # after checking that self._headers_buf is truthy\n            assert headers_buf is not None\n\n        if not self.chunked:\n            # Non-chunked: coalesce headers with body\n            if chunk:\n                self._writelines((headers_buf, chunk))\n            else:\n                self._write(headers_buf)\n            return\n\n        # Coalesce headers with chunked data\n        if chunk:\n            chunk_len_pre = f\"{len(chunk):x}\\r\\n\".encode(\"ascii\")\n            if is_eof:\n                self._writelines((headers_buf, chunk_len_pre, chunk, b\"\\r\\n0\\r\\n\\r\\n\"))\n            else:\n                self._writelines((headers_buf, chunk_len_pre, chunk, b\"\\r\\n\"))\n        elif is_eof:\n            self._writelines((headers_buf, b\"0\\r\\n\\r\\n\"))\n        else:\n            self._write(headers_buf)\n\n    async def write(\n        self, chunk: Buffer, *, drain: bool = True, LIMIT: int = 0x10000\n    ) -&gt; None:\n        \"\"\"\n        Writes chunk of data to a stream.\n\n        write_eof() indicates end of stream.\n        writer can't be used after write_eof() method being called.\n        write() return drain future.\n        \"\"\"\n        if self._on_chunk_sent is not None:\n            await self._on_chunk_sent(chunk)\n\n        if isinstance(chunk, memoryview):\n            if chunk.nbytes != len(chunk):\n                # just reshape it\n                chunk = chunk.cast(\"c\")\n\n        if self._compress is not None:\n            chunk = await self._compress.compress(chunk)\n            if not chunk:\n                return\n\n        if self.length is not None:\n            chunk_len = len(chunk)\n            if self.length &gt;= chunk_len:\n                self.length = self.length - chunk_len\n            else:\n                chunk = chunk[: self.length]\n                self.length = 0\n                if not chunk:\n                    return\n\n        # Handle buffered headers for small payload optimization\n        if self._headers_buf and not self._headers_written:\n            self._send_headers_with_payload(chunk, False)\n            if drain and self.buffer_size &gt; LIMIT:\n                self.buffer_size = 0\n                await self.drain()\n            return\n\n        if chunk:\n            if self.chunked:\n                self._write_chunked_payload(chunk)\n            else:\n                self._write(chunk)\n\n            if drain and self.buffer_size &gt; LIMIT:\n                self.buffer_size = 0\n                await self.drain()\n\n    async def write_headers(\n        self, status_line: str, headers: \"CIMultiDict[str]\"\n    ) -&gt; None:\n        \"\"\"Write headers to the stream.\"\"\"\n        if self._on_headers_sent is not None:\n            await self._on_headers_sent(headers)\n        # status + headers\n        buf = _serialize_headers(status_line, headers)\n        self._headers_written = False\n        self._headers_buf = buf\n\n    def send_headers(self) -&gt; None:\n        \"\"\"Force sending buffered headers if not already sent.\"\"\"\n        if not self._headers_buf or self._headers_written:\n            return\n\n        self._headers_written = True\n        headers_buf = self._headers_buf\n        self._headers_buf = None\n\n        if TYPE_CHECKING:\n            # Safe because we only enter this block when self._headers_buf is truthy\n            assert headers_buf is not None\n\n        self._write(headers_buf)\n\n    def set_eof(self) -&gt; None:\n        \"\"\"Indicate that the message is complete.\"\"\"\n        if self._eof:\n            return\n\n        # If headers haven't been sent yet, send them now\n        # This handles the case where there's no body at all\n        if self._headers_buf and not self._headers_written:\n            self._headers_written = True\n            headers_buf = self._headers_buf\n            self._headers_buf = None\n\n            if TYPE_CHECKING:\n                # Safe because we only enter this block when self._headers_buf is truthy\n                assert headers_buf is not None\n\n            # Combine headers and chunked EOF marker in a single write\n            if self.chunked:\n                self._writelines((headers_buf, b\"0\\r\\n\\r\\n\"))\n            else:\n                self._write(headers_buf)\n        elif self.chunked and self._headers_written:\n            # Headers already sent, just send the final chunk marker\n            self._write(b\"0\\r\\n\\r\\n\")\n\n        self._eof = True\n\n    async def write_eof(self, chunk: bytes = b\"\") -&gt; None:\n        if self._eof:\n            return\n\n        if chunk and self._on_chunk_sent is not None:\n            await self._on_chunk_sent(chunk)\n\n        # Handle body/compression\n        if self._compress:\n            chunks: list[bytes] = []\n            chunks_len = 0\n            if chunk and (compressed_chunk := await self._compress.compress(chunk)):\n                chunks_len = len(compressed_chunk)\n                chunks.append(compressed_chunk)\n\n            flush_chunk = self._compress.flush()\n            chunks_len += len(flush_chunk)\n            chunks.append(flush_chunk)\n            assert chunks_len\n\n            # Send buffered headers with compressed data if not yet sent\n            if self._headers_buf and not self._headers_written:\n                self._headers_written = True\n                headers_buf = self._headers_buf\n                self._headers_buf = None\n\n                if self.chunked:\n                    # Coalesce headers with compressed chunked data\n                    chunk_len_pre = f\"{chunks_len:x}\\r\\n\".encode(\"ascii\")\n                    self._writelines(\n                        (headers_buf, chunk_len_pre, *chunks, b\"\\r\\n0\\r\\n\\r\\n\")\n                    )\n                else:\n                    # Coalesce headers with compressed data\n                    self._writelines((headers_buf, *chunks))\n                await self.drain()\n                self._eof = True\n                return\n\n            # Headers already sent, just write compressed data\n            if self.chunked:\n                chunk_len_pre = f\"{chunks_len:x}\\r\\n\".encode(\"ascii\")\n                self._writelines((chunk_len_pre, *chunks, b\"\\r\\n0\\r\\n\\r\\n\"))\n            elif len(chunks) &gt; 1:\n                self._writelines(chunks)\n            else:\n                self._write(chunks[0])\n            await self.drain()\n            self._eof = True\n            return\n\n        # No compression - send buffered headers if not yet sent\n        if self._headers_buf and not self._headers_written:\n            # Use helper to send headers with payload\n            self._send_headers_with_payload(chunk, True)\n            await self.drain()\n            self._eof = True\n            return\n\n        # Handle remaining body\n        if self.chunked:\n            if chunk:\n                # Write final chunk with EOF marker\n                self._writelines(\n                    (f\"{len(chunk):x}\\r\\n\".encode(\"ascii\"), chunk, b\"\\r\\n0\\r\\n\\r\\n\")\n                )\n            else:\n                self._write(b\"0\\r\\n\\r\\n\")\n            await self.drain()\n            self._eof = True\n            return\n\n        if chunk:\n            self._write(chunk)\n            await self.drain()\n\n        self._eof = True\n\n    async def drain(self) -&gt; None:\n        \"\"\"Flush the write buffer.\n\n        The intended use is to write\n\n          await w.write(data)\n          await w.drain()\n        \"\"\"\n        protocol = self._protocol\n        if protocol.transport is not None and protocol._paused:\n            await protocol._drain_helper()\n\n\n# https://www.rfc-editor.org/info/rfc9110/#section-5.5-5\n# https://www.rfc-editor.org/info/rfc9112/#section-4-3\n_FORBIDDEN_HEADER_CHARS_RE = re.compile(r\"[\\x00-\\x08\\x0a-\\x1f\\x7f]\")\n\n\ndef _safe_header(string: str) -&gt; str:\n    if _FORBIDDEN_HEADER_CHARS_RE.search(string) is not None:\n        raise ValueError(\n            \"Forbidden control character detected in headers. \"\n            \"Potential header injection attack.\"\n        )\n    return string\n\n\ndef _py_serialize_headers(status_line: str, headers: \"CIMultiDict[str]\") -&gt; bytes:\n    _safe_header(status_line)\n    headers_gen = (_safe_header(k) + \": \" + _safe_header(v) for k, v in headers.items())\n    line = status_line + \"\\r\\n\" + \"\\r\\n\".join(headers_gen) + \"\\r\\n\\r\\n\"\n    return line.encode(\"utf-8\")\n\n\n_serialize_headers = _py_serialize_headers\n\ntry:\n    import aiohttp._http_writer as _http_writer  # type: ignore[import-not-found]\n\n    _c_serialize_headers = _http_writer._serialize_headers\n    if not NO_EXTENSIONS:\n        _serialize_headers = _c_serialize_headers\nexcept ImportError:\n    pass\n\n\nMetadata-Version: 2.4\nName: yarl\nVersion: 1.24.2\nSummary: Yet another URL library\nHome-page: https://github.com/aio-libs/yarl\nAuthor: Andrew Svetlov\nAuthor-email: andrew.svetlov@gmail.com\nMaintainer: aiohttp team \nMaintainer-email: team@aiohttp.org\nLicense: Apache-2.0\nProject-URL: Chat: Matrix, https://matrix.to/#/#aio-libs:matrix.org\nProject-URL: Chat: Matrix Space, https://matrix.to/#/#aio-libs-space:matrix.org\nProject-URL: CI: GitHub Workflows, https://github.com/aio-libs/yarl/actions?query=branch:master\nProject-URL: Code of Conduct, https://github.com/aio-libs/.github/blob/master/CODE_OF_CONDUCT.md\nProject-URL: Coverage: codecov, https://codecov.io/github/aio-libs/yarl\nProject-URL: Docs: Changelog, https://yarl.aio-libs.org/en/latest/changes/\nProject-URL: Docs: RTD, https://yarl.aio-libs.org\nProject-URL: GitHub: issues, https://github.com/aio-libs/yarl/issues\nProject-URL: GitHub: repo, https://github.com/aio-libs/yarl\nKeywords: cython,cext,yarl\nClassifier: Development Status :: 5 - Production/Stable\nClassifier: Intended Audience :: Developers\nClassifier: Programming Language :: Cython\nClassifier: Programming Language :: Python\nClassifier: Programming Language :: Python :: 3\nClassifier: Programming Language :: Python :: 3.10\nClassifier: Programming Language :: Python :: 3.11\nClassifier: Programming Language :: Python :: 3.12\nClassifier: Programming Language :: Python :: 3.13\nClassifier: Programming Language :: Python :: 3.14\nClassifier: Topic :: Internet :: WWW/HTTP\nClassifier: Topic :: Software Development :: Libraries :: Python Modules\nRequires-Python: &gt;=3.10\nDescription-Content-Type: text/x-rst\nLicense-File: LICENSE\nLicense-File: NOTICE\nRequires-Dist: idna&gt;=2.0\nRequires-Dist: multidict&gt;=4.0\nRequires-Dist: propcache&gt;=0.2.1\nDynamic: license-file\n\nyarl\n====\n\nThe module provides handy URL class for URL parsing and changing.\n\n.. image:: https://github.com/aio-libs/yarl/workflows/CI/badge.svg\n   :target: https://github.com/aio-libs/yarl/actions?query=workflow%3ACI\n   :align: right\n\n.. image:: https://codecov.io/gh/aio-libs/yarl/graph/badge.svg?flag=pytest\n   :target: https://app.codecov.io/gh/aio-libs/yarl?flags[]=pytest\n   :alt: Codecov coverage for the pytest-driven measurements\n\n.. image:: https://img.shields.io/endpoint?url=https://codspeed.io/badge.json\n   :target: https://codspeed.io/aio-libs/yarl\n\n.. image:: https://badge.fury.io/py/yarl.svg\n   :target: https://badge.fury.io/py/yarl\n\n.. image:: https://readthedocs.org/projects/yarl/badge/?version=latest\n   :target: https://yarl.aio-libs.org\n\n.. image:: https://img.shields.io/pypi/pyversions/yarl.svg\n   :target: https://pypi.python.org/pypi/yarl\n\n.. image:: https://img.shields.io/matrix/aio-libs:matrix.org?label=Discuss%20on%20Matrix%20at%20%23aio-libs%3Amatrix.org&amp;logo=matrix&amp;server_fqdn=matrix.org&amp;style=flat\n   :target: https://matrix.to/#/%23aio-libs:matrix.org\n   :alt: Matrix Room \u2014 #aio-libs:matrix.org\n\n.. image:: https://img.shields.io/matrix/aio-libs-space:matrix.org?label=Discuss%20on%20Matrix%20at%20%23aio-libs-space%3Amatrix.org&amp;logo=matrix&amp;server_fqdn=matrix.org&amp;style=flat\n   :target: https://matrix.to/#/%23aio-libs-space:matrix.org\n   :alt: Matrix Space \u2014 #aio-libs-space:matrix.org\n\n\nIntroduction\n------------\n\nUrl is constructed from ``str``:\n\n.. code-block:: pycon\n\n   &gt;&gt;&gt; from yarl import URL\n   &gt;&gt;&gt; url = URL('https://www.python.org/~guido?arg=1#frag')\n   &gt;&gt;&gt; url\n   URL('https://www.python.org/~guido?arg=1#frag')\n\nAll url parts: *scheme*, *user*, *password*, *host*, *port*, *path*,\n*query* and *fragment* are accessible by properties:\n\n.. code-block:: pycon\n\n   &gt;&gt;&gt; url.scheme\n   'https'\n   &gt;&gt;&gt; url.host\n   'www.python.org'\n   &gt;&gt;&gt; url.path\n   '/~guido'\n   &gt;&gt;&gt; url.query_string\n   'arg=1'\n   &gt;&gt;&gt; url.query\n   \n   &gt;&gt;&gt; url.fragment\n   'frag'\n\nAll url manipulations produce a new url object:\n\n.. code-block:: pycon\n\n   &gt;&gt;&gt; url = URL('https://www.python.org')\n   &gt;&gt;&gt; url / 'foo' / 'bar'\n   URL('https://www.python.org/foo/bar')\n   &gt;&gt;&gt; url / 'foo' % {'bar': 'baz'}\n   URL('https://www.python.org/foo?bar=baz')\n\nStrings passed to constructor and modification methods are\nautomatically encoded giving canonical representation as result:\n\n.. code-block:: pycon\n\n   &gt;&gt;&gt; url = URL('https://www.python.org/\u0448\u043b\u044f\u0445')\n   &gt;&gt;&gt; url\n   URL('https://www.python.org/%D1%88%D0%BB%D1%8F%D1%85')\n\nRegular properties are *percent-decoded*, use ``raw_`` versions for\ngetting *encoded* strings:\n\n.. code-block:: pycon\n\n   &gt;&gt;&gt; url.path\n   '/\u0448\u043b\u044f\u0445'\n\n   &gt;&gt;&gt; url.raw_path\n   '/%D1%88%D0%BB%D1%8F%D1%85'\n\nHuman readable representation of URL is available as ``.human_repr()``:\n\n.. code-block:: pycon\n\n   &gt;&gt;&gt; url.human_repr()\n   'https://www.python.org/\u0448\u043b\u044f\u0445'\n\nFor full documentation please read https://yarl.aio-libs.org.\n\n\nInstallation\n------------\n\n::\n\n   $ pip install yarl\n\nThe library is Python 3 only!\n\nPyPI contains binary wheels for Linux, Windows and MacOS.  If you want to install\n``yarl`` on another operating system where wheels are not provided,\nthe tarball will be used to compile the library from\nthe source code. It requires a C compiler and and Python headers installed.\n\nTo skip the compilation you must explicitly opt-in by using a PEP 517\nconfiguration setting ``pure-python``, or setting the ``YARL_NO_EXTENSIONS``\nenvironment variable to a non-empty value, e.g.:\n\n.. code-block:: console\n\n   $ pip install yarl --config-settings=pure-python=false\n\nPlease note that the pure-Python (uncompiled) version is much slower. However,\nPyPy always uses a pure-Python implementation, and, as such, it is unaffected\nby this variable.\n\nDependencies\n------------\n\nYARL requires multidict_ and propcache_ libraries.\n\n\nAPI documentation\n------------------\n\nThe documentation is located at https://yarl.aio-libs.org.\n\n\nWhy isn't boolean supported by the URL query API?\n-------------------------------------------------\n\nThere is no standard for boolean representation of boolean values.\n\nSome systems prefer ``true``/``false``, others like ``yes``/``no``, ``on``/``off``,\n``Y``/``N``, ``1``/``0``, etc.\n\n``yarl`` cannot make an unambiguous decision on how to serialize ``bool`` values because\nit is specific to how the end-user's application is built and would be different for\ndifferent apps.  The library doesn't accept booleans in the API; a user should convert\nbools into strings using own preferred translation protocol.\n\n\nComparison with other URL libraries\n------------------------------------\n\n* furl (https://pypi.python.org/pypi/furl)\n\n  The library has rich functionality but the ``furl`` object is mutable.\n\n  I'm afraid to pass this object into foreign code: who knows if the\n  code will modify my url in a terrible way while I just want to send URL\n  with handy helpers for accessing URL properties.\n\n  ``furl`` has other non-obvious tricky things but the main objection\n  is mutability.\n\n* URLObject (https://pypi.python.org/pypi/URLObject)\n\n  URLObject is immutable, that's pretty good.\n\n  Every URL change generates a new URL object.\n\n  But the library doesn't do any decode/encode transformations leaving the\n  end user to cope with these gory details.\n\n\nSource code\n-----------\n\nThe project is hosted on GitHub_\n\nPlease file an issue on the `bug tracker\n`_ if you have found a bug\nor have some suggestion in order to improve the library.\n\nDiscussion list\n---------------\n\n*aio-libs* google group: https://groups.google.com/forum/#!forum/aio-libs\n\nFeel free to post your questions and ideas here.\n\n\nAuthors and License\n-------------------\n\nThe ``yarl`` package is written by Andrew Svetlov.\n\nIt's *Apache 2* licensed and freely available.\n\n\n.. _GitHub: https://github.com/aio-libs/yarl\n\n.. _multidict: https://github.com/aio-libs/multidict\n\n.. _propcache: https://github.com/aio-libs/propcache\n\n=========\nChangelog\n=========\n\n..\n    You should *NOT* be adding new change log entries to this file, this\n    file is managed by towncrier. You *may* edit previous change logs to\n    fix problems like typo corrections or such.\n    To add a new change log entry, please see\n    https://pip.pypa.io/en/latest/development/#adding-a-news-entry\n    we named the news folder \"changes\".\n\n    WARNING: Don't drop the next directive!\n\n.. towncrier release notes start\n\nv1.24.2\n=======\n\n*(2026-05-19)*\n\n\nContributor-facing changes\n--------------------------\n\n- Switched the aarch64 and armv7l wheel builds to GitHub's native ARM\n  runners. The aarch64 wheels now build without QEMU emulation, and\n  armv7l runs on aarch64 hosts so its 32-bit ARM execution is far\n  cheaper than the previous aarch64-on-x86_64 path\n  -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1724 `__.\n\n- Restored per-runner native arches in the Windows wheel matrix on tag\n  releases. The previous ``CIBW_ARCHS_WINDOWS=AMD64 ARM64`` setting made\n  both ``windows-latest`` and ``windows-11-arm`` cross-compile the other\n  arch, producing two artifacts with identically-named wheels whose\n  bytes differed; the deploy job's ``download-artifact ... merge-multiple``\n  step tore those writes together, yielding a wheel that PyPI rejected\n  with ``400 Invalid distribution file. ZIP archive not accepted:\n  Mis-matched data size`` during the 1.24.0 and 1.24.1 releases\n  -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1725 `__.\n\n\n----\n\n\nv1.24.1\n=======\n\n*(2026-05-19)*\n\n\nContributor-facing changes\n--------------------------\n\n- Allowed re-running the deploy job after a partial release failure: the\n  ``Make Release`` step now skips when the GitHub Release already exists,\n  and the PyPI publish step uses ``skip-existing`` so dists that were\n  already uploaded on a prior attempt do not break the retry\n  -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1721 `__.\n\n\n----\n\n\nv1.24.0\n=======\n\n*(2026-05-19)*\n\n\nBug fixes\n---------\n\n- Delayed importing pydantic until it's needed to avoid increased import time -- by `@Dreamsorcerer `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1607 `__, `#1702 `__.\n\n- Fixed pickling of ``~yarl.URL`` on Python 3.15, where ``SplitResult``\n  gained a ``__getstate__`` that requires attributes set by ``__init__``.\n  ``__getstate__`` now returns the raw 5-tuple instead of a ``SplitResult``\n  built via ``tuple.__new__``, so pickling no longer touches ``SplitResult``\n  serialization at all. Pickles produced by older yarl releases (which embed\n  a ``SplitResult``) continue to load unchanged\n  -- by `@befeleme `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1632 `__, `#1642 `__, `#1687 `__.\n\n- Fixed a parsing issue where URLs containing text before an opening bracket\n  in the host component (e.g. ``http://127.0.0.1[aa::ff]``) were silently accepted\n  instead of being rejected as strictly invalid per RFC 3986\n  -- by `@rodrigobnogueira `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1654 `__.\n\n- Raise ``ValueError`` when a URL's authority component contains a\n  backslash, which is not a valid character per ``3986``\n  -- by `@rodrigobnogueira `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1659 `__.\n\n- Fixed a host-confusion parsing bug where URLs containing multiple bracket\n  characters in the host component (e.g. ``http://[:localhost[]].google:80``)\n  were silently parsed as an unintended host. Both ``split_url()`` and\n  ``split_netloc()`` now raise ``ValueError`` when more than one ``[`` or\n  ``]`` is found in the authority, or when ``[`` does not appear at the start of\n  the host subcomponent, in compliance with ``3986`` -- by\n  `@rodrigobnogueira `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1661 `__.\n\n- Fixed a parser/serializer inconsistency where percent-encoded characters in\n  the scheme portion of a URL (e.g. ``ht%74p://...``) were decoded by the\n  requoter, causing ``str()`` and ``yarl.URL.human_repr()`` to emit an\n  absolute URL with a scheme and host while the parsed properties\n  (``~yarl.URL.scheme``, ``~yarl.URL.host``, ``~yarl.URL.absolute``)\n  reported a relative, hostless URL. The fix preserves the percent-encoding of\n  the colon (``%3A``) in relative paths whenever decoding it would materialize a\n  URL scheme -- by `@rodrigobnogueira `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1669 `__.\n\n- Fixed a parsing issue where URLs containing text after the closing bracket\n  of an IP-literal host (e.g. ``http://[::1]allowed.example:1/``) were silently\n  accepted and normalized to the bracketed IP address (``http://[::1]:1/``),\n  dropping the trailing suffix and changing the effective host identity.\n  Per RFC 3986, after the closing ``]`` only ``:`` followed by a port number or\n  end-of-authority is valid\n  -- by `@rodrigobnogueira `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1672 `__.\n\n\nFeatures\n--------\n\n- Start building and shipping riscv64 wheels\n  -- by `@justeph `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1626 `__.\n\n\nRemovals and backward incompatible breaking changes\n---------------------------------------------------\n\n- Dropped support for the experimental free-threaded build of Python 3.13 -- by `@ngoldbaum `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1667 `__.\n\n\nImproved documentation\n----------------------\n\n- Added a note in the ``yarl.URL.with_query()`` documentation explaining\n  that types implementing ``__int__`` (e.g. ``~uuid.UUID``) are\n  converted to integers, and advising users to cast to ``str`` when the\n  human-readable representation is needed -- by `@r266-tech `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1638 `__, `#1645 `__.\n\n\nContributor-facing changes\n--------------------------\n\n- Resolved a ruff ``ISC004`` violation in the PEP 517 build backend so the\n  pre-commit ``ruff-check`` hook passes again\n  -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1674 `__.\n\n- Renamed the ``actions/checkout`` ``depth`` input to ``fetch-depth`` in the\n  reusable codspeed workflow so the actionlint pre-commit hook passes and the\n  intended shallow clone actually takes effect\n  -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1676 `__.\n\n- Bumped the pinned ``pyupgrade`` pre-commit hook to ``v3.21.2`` so it stops\n  crashing on Python 3.14, which made ``tokenize.cookie_re`` bytes-only\n  -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1677 `__.\n\n- The type preciseness coverage report generated by `MyPy\n  `__ is now uploaded to `Coveralls\n  `__ and\n  will not be included in the `Codecov views\n  `__ going forward\n  -- by `@webknjaz `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1680 `__.\n\n- Raised the per-matrix-cell timeout of the CI ``Test`` job from\n  5 to 10 minutes to prevent false failures on slower runners\n  -- by `@aiolibsbot `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1683 `__.\n\n- Added an ``AGENTS.md`` orientation file at the repository root,\n  covering the pull request template, ``CHANGES/`` news fragment\n  conventions, draft-PR workflow, and the Cython quoter layout, so\n  LLM contributors land changes that match project style\n  -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1685 `__.\n\n- Documented in ``AGENTS.md`` that the coverage gate also\n  applies to test code, so unreachable defensive ``raise`` guards\n  and one-sided cleanup branches in tests will fail CI\n  -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1689 `__.\n\n- Shrunk the CI wheel-build matrix on pull requests and non-tag pushes by\n  restricting ``CIBW_ARCHS_MACOS`` to ``arm64``, ``CIBW_ARCHS_WINDOWS`` to\n  ``AMD64``, and skipping the ``windows-11-arm`` runner -- the test matrix only\n  exercises those architectures, so the previously-built ``x86_64`` macOS and\n  ``ARM64`` Windows wheels were never installed. Tag releases still build the\n  full architecture set\n  -- by `@aiolibsbot `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1692 `__.\n\n- Documented the docs spell check (``make doc-spelling``) in\n  ``AGENTS.md`` as a pre-push gate, mirroring\n  `aio-libs/multidict#1345\n  `__. The\n  spell checker reads every ``CHANGES/*.rst`` fragment as part\n  of the docs build, so an unknown technical word in a news\n  fragment fails CI before a human sees the PR\n  -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1693 `__.\n\n- Added a ``CLAUDE.md`` at the repository root that imports\n  ``AGENTS.md`` via Claude Code's ``@``-syntax, so the\n  project's LLM contributor rules load automatically when\n  working in Claude Code\n  -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1696 `__.\n\n- Enforced top-level imports across ``yarl`` and ``tests`` via the ruff\n  ``PLC0415`` rule, wired through a new ``ruff-check`` pre-commit hook.\n  Function-scoped imports must now opt in with ``# noqa: PLC0415`` plus\n  a comment explaining the import-time reason. Dropped the ``yesqa``\n  hook, which could not recognize ruff-only codes and stripped the new\n  ``noqa`` comments as stale; a wider migration off flake8 onto ruff\n  will follow separately\n  -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1697 `__.\n\n- Migrated the main tree from standalone ``black`` and ``isort``\n  pre-commit hooks to ``ruff format`` and the ruff ``I`` lint rule,\n  sharing the existing ``[tool.ruff]`` config in ``pyproject.toml``.\n  ``ruff-check`` now runs with ``--fix`` so import-order fixes apply\n  on commit, and the orphan ``[isort]`` block in ``setup.cfg`` was\n  removed. The ``packaging/pep517_backend/`` subtree keeps its own\n  ``.ruff.toml`` and is unaffected\n  -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1698 `__.\n\n- Switched the ``cibuildwheel`` build frontend to ``build[uv]`` so\n  that ``uv`` provisions every build and test virtual environment\n  in the wheel matrix. Test-dependency installation in particular\n  drops from a multi-second ``pip install`` per ABI to a roughly\n  sub-second ``uv`` resolve\n  -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1699 `__.\n\n- Restructured the root ``CLAUDE.md`` to import contributor\n  context from a shared ``aio-libs`` layer\n  (``~/.claude/aio-libs/context.md``), a project-specific layer\n  (``~/.claude/aio-libs/yarl/context.md``), the in-tree\n  ``AGENTS.md``, and an optional per-checkout\n  ``CLAUDE.local.md`` override (added to ``.gitignore``),\n  so shared ``aio-libs`` guidance can live outside the repository\n  while project rules continue to load automatically in Claude\n  Code -- by `@aiolibsbot `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1700 `__, `#1701 `__.\n\n- Switched CI/CD to ``tox-dev/workflow``'s ``reusable-tox.yml``\n  driven by an in-tree ``tox.ini``. The ``build``,\n  ``metadata-validation`` and ``lint`` (``pre-commit``,\n  ``spellcheck-docs``, ``build-docs``) jobs all run through the\n  reusable workflow; MyPy coverage uploads to Coveralls from a\n  ``post-tox-job`` hook\n  -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1711 `__.\n\n- Switched the CI ``test`` job from ``actions/setup-python`` to\n  ``astral-sh/setup-uv`` with ``uv pip install``. Pre-release\n  interpreters skip the wheel cache so each run resolves freshly\n  against the current snapshot\n  -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1715 `__.\n\n- Switched the ``Aiohttp`` workflow that runs the aiohttp test\n  suite against the in-tree yarl checkout from\n  ``actions/setup-python`` to ``astral-sh/setup-uv`` with ``uv\n  pip install``\n  -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1716 `__.\n\n- Switched the ``Aiohttp`` workflow's ``make .develop`` step to\n  install aiohttp's dev env through ``uv pip`` by passing\n  ``PIP=\"uv pip\"``\n  -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1717 `__.\n\n\n----\n\n\n1.23.0\n======\n\n*(2025-12-16)*\n\n\nFeatures\n--------\n\n- Added support for ``pydantic``, the ``~yarl.URL`` could be used as a\n  field type in ``pydantic`` models seamlessly.\n\n  *Related issues and pull requests on GitHub:*\n  `#1607 `__.\n\n\nPackaging updates and notes for downstreams\n-------------------------------------------\n\n- The CI has been set up to notify Codecov about upload completion\n  -- by `@webknjaz `__.\n\n  With this, Codecov no longer needs to guess whether it received all\n  the intended coverage reports or not.\n\n  *Related issues and pull requests on GitHub:*\n  `#1577 `__.\n\n- The in-tree build backend allows the end-users appending\n  ``CFLAGS`` and ``LDFLAGS`` by setting respective environment\n  variables externally.\n\n  It additionally sets up default compiler flags to perform\n  building with maximum optimization in release mode. This\n  makes the resulting artifacts shipped to PyPI smaller.\n\n  When line tracing is requested, the compiler and linker\n  flags are configured to include as much information as\n  possible for debugging and coverage tracking. The\n  development builds are therefore smaller.\n\n  -- by `@webknjaz `__\n\n  *Related issues and pull requests on GitHub:*\n  `#1586 `__.\n\n- The `PEP 517 `__ build backend now supports a new config\n  setting for controlling whether to build the project in-tree\n  or in a temporary directory. It only affects wheels and is\n  set up to build in a temporary directory by default. It does\n  not affect editable wheel builds \u2014 they will keep being\n  built in-tree regardless.\n\n  -- by `@webknjaz `__\n\n  Here's an example of using this setting:\n\n  .. code-block:: console\n\n     $ python -m build \\\n         --config-setting=build-inplace=true\n\n  *Related issues and pull requests on GitHub:*\n  `#1590 `__.\n\n- Starting this version, when building the wheels is happening\n  in an automatically created temporary directory, the build\n  backend makes an effort to normalize the respective file\n  system path to a deterministic source checkout directory.\n\n  -- by `@webknjaz `__\n\n  It does so by injecting the ``-ffile-prefix-map`` compiler\n  option into the ``CFLAGS`` environment variable as suggested\n  by known `reproducible build practices\n  `__.\n\n  The effect is that downstreams will get more reproducible\n  build results.\n\n  *Related issues and pull requests on GitHub:*\n  `#1591 `__.\n\n- Dropped Python 3.9 support; Python 3.10 is the minimal supported Python version\n  -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1609 `__.\n\n\nContributor-facing changes\n--------------------------\n\n- The deprecated license classifier was removed from ``setup.cfg``\n  -- by `@yegorich `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1550 `__.\n\n- The in-tree build backend allows the end-users appending\n  ``CFLAGS`` and ``LDFLAGS`` by setting respective environment\n  variables externally.\n\n  It additionally sets up default compiler flags to perform\n  building with maximum optimization in release mode. This\n  makes the resulting artifacts shipped to PyPI smaller.\n\n  When line tracing is requested, the compiler and linker\n  flags are configured to include as much information as\n  possible for debugging and coverage tracking. The\n  development builds are therefore smaller.\n\n  -- by `@webknjaz `__\n\n  *Related issues and pull requests on GitHub:*\n  `#1586 `__.\n\n- The CI has been updated to consistently benchmark optimized\n  release builds -- by `@webknjaz `__.\n\n  When the release workflow is triggered, the pre-built wheels\n  ready to hit PyPI are being tested. Otherwise, the job\n  builds the project from source, while the rest of the\n  workflow uses debug builds for line tracing and coverage\n  collection.\n\n  *Related issues and pull requests on GitHub:*\n  `#1587 `__.\n\n\n----\n\n\n1.22.0\n======\n\n*(2025-10-05)*\n\n\nFeatures\n--------\n\n- Added arm64 Windows wheel builds\n  -- by `@finnagin `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1516 `__.\n\n\n----\n\n\n1.21.0\n======\n\n*(2025-10-05)*\n\n\nContributor-facing changes\n--------------------------\n\n- The ``reusable-cibuildwheel.yml`` workflow has been refactored to\n  be more generic and ``ci-cd.yml`` now holds all the configuration\n  toggles -- by `@webknjaz `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1535 `__.\n\n- When building wheels, the source distribution is now passed directly\n  to the ``cibuildwheel`` invocation -- by `@webknjaz `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1536 `__.\n\n- Added CI for Python 3.14 -- by `@kumaraditya303 `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1560 `__.\n\n\n----\n\n\n1.20.1\n======\n\n*(2025-06-09)*\n\n\nBug fixes\n---------\n\n- Started raising a ``ValueError`` exception raised for corrupted\n  IPv6 URL values.\n\n  These fixes the issue where exception ``IndexError`` was\n  leaking from the internal code because of not being handled and\n  transformed into a user-facing error. The problem was happening\n  under the following conditions: empty IPv6 URL, brackets in\n  reverse order.\n\n  -- by `@MaelPic `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1512 `__.\n\n\nPackaging updates and notes for downstreams\n-------------------------------------------\n\n- Updated to use Cython 3.1 universally across the build path -- by `@lysnikolaou `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1514 `__.\n\n- Made Cython line tracing opt-in via the ``with-cython-tracing`` build config setting -- by `@bdraco `__.\n\n  Previously, line tracing was enabled by default in ``pyproject.toml``, which caused build issues for some users and made wheels nearly twice as slow.\n  Now line tracing is only enabled when explicitly requested via ``pip install . --config-setting=with-cython-tracing=true`` or by setting the ``YARL_CYTHON_TRACING`` environment variable.\n\n  *Related issues and pull requests on GitHub:*\n  `#1521 `__.\n\n\n----\n\n\n1.20.0\n======\n\n*(2025-04-16)*\n\n\nFeatures\n--------\n\n- Implemented support for the free-threaded build of CPython 3.13 -- by `@lysnikolaou `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1456 `__.\n\n\nPackaging updates and notes for downstreams\n-------------------------------------------\n\n- Started building wheels for the free-threaded build of CPython 3.13 -- by `@lysnikolaou `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1456 `__.\n\n\n----\n\n\n1.19.0\n======\n\n*(2025-04-05)*\n\n\nBug fixes\n---------\n\n- Fixed entire name being re-encoded when using ``yarl.URL.with_suffix()`` -- by `@NTFSvolume `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1468 `__.\n\n\nFeatures\n--------\n\n- Started building armv7l wheels for manylinux -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1495 `__.\n\n\nContributor-facing changes\n--------------------------\n\n- GitHub Actions CI/CD is now configured to manage caching pip-ecosystem\n  dependencies using `re-actors/cache-python-deps`_ -- an action by\n  `@webknjaz `__ that takes into account ABI stability and the exact\n  version of Python runtime.\n\n  .. _`re-actors/cache-python-deps`:\n     https://github.com/marketplace/actions/cache-python-deps\n\n  *Related issues and pull requests on GitHub:*\n  `#1471 `__.\n\n- Increased minimum `propcache`_ version to 0.2.1 to fix failing tests -- by `@bdraco `__.\n\n  .. _`propcache`:\n     https://github.com/aio-libs/propcache\n\n  *Related issues and pull requests on GitHub:*\n  `#1479 `__.\n\n- Added all hidden folders to pytest's ``norecursedirs`` to prevent it\n  from trying to collect tests there -- by `@lysnikolaou `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1480 `__.\n\n\nMiscellaneous internal changes\n------------------------------\n\n- Improved accuracy of type annotations -- by `@Dreamsorcerer `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1484 `__.\n\n- Improved performance of parsing query strings -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1493 `__, `#1497 `__.\n\n- Improved performance of the C unquoter -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1496 `__, `#1498 `__.\n\n\n----\n\n\n1.18.3\n======\n\n*(2024-12-01)*\n\n\nBug fixes\n---------\n\n- Fixed uppercase ASCII hosts being rejected by ``URL.build()()`` and ``yarl.URL.with_host()`` -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#954 `__, `#1442 `__.\n\n\nMiscellaneous internal changes\n------------------------------\n\n- Improved performances of multiple path properties on cache miss -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1443 `__.\n\n\n----\n\n\n1.18.2\n======\n\n*(2024-11-29)*\n\n\nNo significant changes.\n\n\n----\n\n\n1.18.1\n======\n\n*(2024-11-29)*\n\n\nMiscellaneous internal changes\n------------------------------\n\n- Improved cache performance when ``~yarl.URL`` objects are constructed from ``yarl.URL.build()`` with ``encoded=True`` -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1432 `__.\n\n- Improved cache performance for operations that produce a new ``~yarl.URL`` object -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1434 `__, `#1436 `__.\n\n\n----\n\n\n1.18.0\n======\n\n*(2024-11-21)*\n\n\nFeatures\n--------\n\n- Added ``keep_query`` and ``keep_fragment`` flags in the ``yarl.URL.with_path()``, ``yarl.URL.with_name()`` and ``yarl.URL.with_suffix()`` methods, allowing users to optionally retain the query string and fragment in the resulting URL when replacing the path -- by `@paul-nameless `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#111 `__, `#1421 `__.\n\n\nContributor-facing changes\n--------------------------\n\n- Started running downstream ``aiohttp`` tests in CI -- by `@Cycloctane `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1415 `__.\n\n\nMiscellaneous internal changes\n------------------------------\n\n- Improved performance of converting ``~yarl.URL`` to a string -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1422 `__.\n\n\n----\n\n\n1.17.2\n======\n\n*(2024-11-17)*\n\n\nBug fixes\n---------\n\n- Stopped implicitly allowing the use of Cython pre-release versions when\n  building the distribution package -- by `@ajsanchezsanz `__ and\n  `@markgreene74 `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1411 `__, `#1412 `__.\n\n- Fixed a bug causing ``~yarl.URL.port`` to return the default port when the given port was zero\n  -- by `@gmacon `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1413 `__.\n\n\nFeatures\n--------\n\n- Make error messages include details of incorrect type when ``port`` is not int in ``yarl.URL.build()``.\n  -- by `@Cycloctane `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1414 `__.\n\n\nPackaging updates and notes for downstreams\n-------------------------------------------\n\n- Stopped implicitly allowing the use of Cython pre-release versions when\n  building the distribution package -- by `@ajsanchezsanz `__ and\n  `@markgreene74 `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1411 `__, `#1412 `__.\n\n\nMiscellaneous internal changes\n------------------------------\n\n- Improved performance of the ``yarl.URL.joinpath()`` method -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1418 `__.\n\n\n----\n\n\n1.17.1\n======\n\n*(2024-10-30)*\n\n\nMiscellaneous internal changes\n------------------------------\n\n- Improved performance of many ``~yarl.URL`` methods -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1396 `__, `#1397 `__, `#1398 `__.\n\n- Improved performance of passing a `dict` or `str` to ``yarl.URL.extend_query()`` -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1401 `__.\n\n\n----\n\n\n1.17.0\n======\n\n*(2024-10-28)*\n\n\nFeatures\n--------\n\n- Added ``~yarl.URL.host_port_subcomponent`` which returns the ``3986#section-3.2.2`` host and ``3986#section-3.2.3`` port subcomponent -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1375 `__.\n\n\n----\n\n\n1.16.0\n======\n\n*(2024-10-21)*\n\n\nBug fixes\n---------\n\n- Fixed blocking I/O to load Python code when creating a new ``~yarl.URL`` with non-ascii characters in the network location part -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1342 `__.\n\n\nRemovals and backward incompatible breaking changes\n---------------------------------------------------\n\n- Migrated to using a single cache for encoding hosts -- by `@bdraco `__.\n\n  Passing ``ip_address_size`` and ``host_validate_size`` to ``yarl.cache_configure()`` is deprecated in favor of the new ``encode_host_size`` parameter and will be removed in a future release. For backwards compatibility, the old parameters affect the ``encode_host`` cache size.\n\n  *Related issues and pull requests on GitHub:*\n  `#1348 `__, `#1357 `__, `#1363 `__.\n\n\nMiscellaneous internal changes\n------------------------------\n\n- Improved performance of constructing ``~yarl.URL`` -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1336 `__.\n\n- Improved performance of calling ``yarl.URL.build()`` and constructing unencoded ``~yarl.URL`` -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1345 `__.\n\n- Reworked the internal encoding cache to improve performance on cache hit -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1369 `__.\n\n\n----\n\n\n1.15.5\n======\n\n*(2024-10-18)*\n\n\nMiscellaneous internal changes\n------------------------------\n\n- Improved performance of the ``yarl.URL.joinpath()`` method -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1304 `__.\n\n- Improved performance of the ``yarl.URL.extend_query()`` method -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1305 `__.\n\n- Improved performance of the ``yarl.URL.origin()`` method -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1306 `__.\n\n- Improved performance of the ``yarl.URL.with_path()`` method -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1307 `__.\n\n- Improved performance of the ``yarl.URL.with_query()`` method -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1308 `__, `#1328 `__.\n\n- Improved performance of the ``yarl.URL.update_query()`` method -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1309 `__, `#1327 `__.\n\n- Improved performance of the ``yarl.URL.join()`` method -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1313 `__.\n\n- Improved performance of ``~yarl.URL`` equality checks -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1315 `__.\n\n- Improved performance of ``~yarl.URL`` methods that modify the network location -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1316 `__.\n\n- Improved performance of the ``yarl.URL.with_fragment()`` method -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1317 `__.\n\n- Improved performance of calculating the hash of ``~yarl.URL`` objects -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1318 `__.\n\n- Improved performance of the ``yarl.URL.relative()`` method -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1319 `__.\n\n- Improved performance of the ``yarl.URL.with_name()`` method -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1320 `__.\n\n- Improved performance of ``~yarl.URL.parent`` -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1321 `__.\n\n- Improved performance of the ``yarl.URL.with_scheme()`` method -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1322 `__.\n\n\n----\n\n\n1.15.4\n======\n\n*(2024-10-16)*\n\n\nMiscellaneous internal changes\n------------------------------\n\n- Improved performance of the quoter when all characters are safe -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1288 `__.\n\n- Improved performance of unquoting strings -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1292 `__, `#1293 `__.\n\n- Improved performance of calling ``yarl.URL.build()`` -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1297 `__.\n\n\n----\n\n\n1.15.3\n======\n\n*(2024-10-15)*\n\n\nBug fixes\n---------\n\n- Fixed ``yarl.URL.build()`` failing to validate paths must start with a ``/`` when passing ``authority`` -- by `@bdraco `__.\n\n  The validation only worked correctly when passing ``host``.\n\n  *Related issues and pull requests on GitHub:*\n  `#1265 `__.\n\n\nRemovals and backward incompatible breaking changes\n---------------------------------------------------\n\n- Removed support for Python 3.8 as it has reached end of life -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1203 `__.\n\n\nMiscellaneous internal changes\n------------------------------\n\n- Improved performance of constructing ``~yarl.URL`` when the net location is only the host -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1271 `__.\n\n\n----\n\n\n1.15.2\n======\n\n*(2024-10-13)*\n\n\nMiscellaneous internal changes\n------------------------------\n\n- Improved performance of converting ``~yarl.URL`` to a string -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1234 `__.\n\n- Improved performance of ``yarl.URL.joinpath()`` -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1248 `__, `#1250 `__.\n\n- Improved performance of constructing query strings from ``~multidict.MultiDict`` -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1256 `__.\n\n- Improved performance of constructing query strings with ``int`` values -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1259 `__.\n\n\n----\n\n\n1.15.1\n======\n\n*(2024-10-12)*\n\n\nMiscellaneous internal changes\n------------------------------\n\n- Improved performance of calling ``yarl.URL.build()`` -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1222 `__.\n\n- Improved performance of all ``~yarl.URL`` methods that create new ``~yarl.URL`` objects -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1226 `__.\n\n- Improved performance of ``~yarl.URL`` methods that modify the network location -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1229 `__.\n\n\n----\n\n\n1.15.0\n======\n\n*(2024-10-11)*\n\n\nBug fixes\n---------\n\n- Fixed validation with ``yarl.URL.with_scheme()`` when passed scheme is not lowercase -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1189 `__.\n\n\nFeatures\n--------\n\n- Started building ``armv7l`` wheels -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1204 `__.\n\n\nMiscellaneous internal changes\n------------------------------\n\n- Improved performance of constructing unencoded ``~yarl.URL`` objects -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1188 `__.\n\n- Added a cache for parsing hosts to reduce overhead of encoding ``~yarl.URL`` -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1190 `__.\n\n- Improved performance of constructing query strings from ``~collections.abc.Mapping`` -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1193 `__.\n\n- Improved performance of converting ``~yarl.URL`` objects to strings -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1198 `__.\n\n\n----\n\n\n1.14.0\n======\n\n*(2024-10-08)*\n\n\nPackaging updates and notes for downstreams\n-------------------------------------------\n\n- Switched to using the ``propcache`` package for property caching\n  -- by `@bdraco `__.\n\n  The ``propcache`` package is derived from the property caching\n  code in ``yarl`` and has been broken out to avoid maintaining it for multiple\n  projects.\n\n  *Related issues and pull requests on GitHub:*\n  `#1169 `__.\n\n\nContributor-facing changes\n--------------------------\n\n- Started testing with Hypothesis -- by `@webknjaz `__ and `@bdraco `__.\n\n  Special thanks to `@Zac-HD `__ for helping us get started with this framework.\n\n  *Related issues and pull requests on GitHub:*\n  `#860 `__.\n\n\nMiscellaneous internal changes\n------------------------------\n\n- Improved performance of ``yarl.URL.is_default_port()`` when no explicit port is set -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1168 `__.\n\n- Improved performance of converting ``~yarl.URL`` to a string when no explicit port is set -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1170 `__.\n\n- Improved performance of the ``yarl.URL.origin()`` method -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1175 `__.\n\n- Improved performance of encoding hosts -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1176 `__.\n\n\n----\n\n\n1.13.1\n======\n\n*(2024-09-27)*\n\n\nMiscellaneous internal changes\n------------------------------\n\n- Improved performance of calling ``yarl.URL.build()`` with ``authority`` -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1163 `__.\n\n\n----\n\n\n1.13.0\n======\n\n*(2024-09-26)*\n\n\nBug fixes\n---------\n\n- Started rejecting ASCII hostnames with invalid characters. For host strings that\n  look like authority strings, the exception message includes advice on what to do\n  instead -- by `@mjpieters `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#880 `__, `#954 `__.\n\n- Fixed IPv6 addresses missing brackets when the ``~yarl.URL`` was converted to a string -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1157 `__, `#1158 `__.\n\n\nFeatures\n--------\n\n- Added ``~yarl.URL.host_subcomponent`` which returns the ``3986#section-3.2.2`` host subcomponent -- by `@bdraco `__.\n\n  The only current practical difference between ``~yarl.URL.raw_host`` and ``~yarl.URL.host_subcomponent`` is that IPv6 addresses are returned bracketed.\n\n  *Related issues and pull requests on GitHub:*\n  `#1159 `__.\n\n\n----\n\n\n1.12.1\n======\n\n*(2024-09-23)*\n\n\nNo significant changes.\n\n\n----\n\n\n1.12.0\n======\n\n*(2024-09-23)*\n\n\nFeatures\n--------\n\n- Added ``~yarl.URL.path_safe`` to be able to fetch the path without ``%2F`` and ``%25`` decoded -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1150 `__.\n\n\nRemovals and backward incompatible breaking changes\n---------------------------------------------------\n\n- Restore decoding ``%2F`` (``/``) in ``URL.path`` -- by `@bdraco `__.\n\n  This change restored the behavior before `#1057 `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1151 `__.\n\n\nMiscellaneous internal changes\n------------------------------\n\n- Improved performance of processing paths -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1143 `__.\n\n\n----\n\n\n1.11.1\n======\n\n*(2024-09-09)*\n\n\nBug fixes\n---------\n\n- Allowed scheme replacement for relative URLs if the scheme does not require a host -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#280 `__, `#1138 `__.\n\n- Allowed empty host for URL schemes other than the special schemes listed in the WHATWG URL spec -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1136 `__.\n\n\nFeatures\n--------\n\n- Loosened restriction on integers as query string values to allow classes that implement ``__int__`` -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1139 `__.\n\n\nMiscellaneous internal changes\n------------------------------\n\n- Improved performance of normalizing paths -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1137 `__.\n\n\n----\n\n\n1.11.0\n======\n\n*(2024-09-08)*\n\n\nFeatures\n--------\n\n- Added ``URL.extend_query()()`` method, which can be used to extend parameters without replacing same named keys -- by `@bdraco `__.\n\n  This method was primarily added to replace the inefficient hand rolled method currently used in ``aiohttp``.\n\n  *Related issues and pull requests on GitHub:*\n  `#1128 `__.\n\n\nMiscellaneous internal changes\n------------------------------\n\n- Improved performance of the Cython ``cached_property`` implementation -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1122 `__.\n\n- Simplified computing ports by removing unnecessary code -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1123 `__.\n\n- Improved performance of encoding non IPv6 hosts -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1125 `__.\n\n- Improved performance of ``URL.build()()`` when the path, query string, or fragment is an empty string -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1126 `__.\n\n- Improved performance of the ``URL.update_query()()`` method -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1130 `__.\n\n- Improved performance of processing query string changes when arguments are ``str`` -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1131 `__.\n\n\n----\n\n\n1.10.0\n======\n\n*(2024-09-06)*\n\n\nBug fixes\n---------\n\n- Fixed joining a path when the existing path was empty -- by `@bdraco `__.\n\n  A regression in ``URL.join()()`` was introduced in `#1082 `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1118 `__.\n\n\nFeatures\n--------\n\n- Added ``URL.without_query_params()()`` method, to drop some parameters from query string -- by `@hongquan `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#774 `__, `#898 `__, `#1010 `__.\n\n- The previously protected types ``_SimpleQuery``, ``_QueryVariable``, and ``_Query`` are now available for use externally as ``SimpleQuery``, ``QueryVariable``, and ``Query`` -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1050 `__, `#1113 `__.\n\n\nContributor-facing changes\n--------------------------\n\n- Replaced all ``~typing.Optional`` with ``~typing.Union`` -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1095 `__.\n\n\nMiscellaneous internal changes\n------------------------------\n\n- Significantly improved performance of parsing the network location -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1112 `__.\n\n- Added internal types to the cache to prevent future refactoring errors -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1117 `__.\n\n\n----\n\n\n1.9.11\n======\n\n*(2024-09-04)*\n\n\nBug fixes\n---------\n\n- Fixed a ``TypeError`` with ``MultiDictProxy`` and Python 3.8 -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1084 `__, `#1105 `__, `#1107 `__.\n\n\nMiscellaneous internal changes\n------------------------------\n\n- Improved performance of encoding hosts -- by `@bdraco `__.\n\n  Previously, the library would unconditionally try to parse a host as an IP Address. The library now avoids trying to parse a host as an IP Address if the string is not in one of the formats described in ``3986#section-3.2.2``.\n\n  *Related issues and pull requests on GitHub:*\n  `#1104 `__.\n\n\n----\n\n\n1.9.10\n======\n\n*(2024-09-04)*\n\n\nBug fixes\n---------\n\n- ``URL.join()()`` has been changed to match\n  ``3986`` and align with\n  ``/ operation()`` and ``URL.joinpath()()``\n  when joining URLs with empty segments.\n  Previously ``urllib.parse.urljoin`` was used,\n  which has known issues with empty segments\n  (`python/cpython#84774 `_).\n\n  Due to the semantics of ``URL.join()()``, joining an\n  URL with scheme requires making it relative, prefixing with ``./``.\n\n  .. code-block:: pycon\n\n     &gt;&gt;&gt; URL(\"https://web.archive.org/web/\").join(URL(\"./https://github.com/aio-libs/yarl\"))\n     URL('https://web.archive.org/web/https://github.com/aio-libs/yarl')\n\n\n  Empty segments are honored in the base as well as the joined part.\n\n  .. code-block:: pycon\n\n     &gt;&gt;&gt; URL(\"https://web.archive.org/web/https://\").join(URL(\"github.com/aio-libs/yarl\"))\n     URL('https://web.archive.org/web/https://github.com/aio-libs/yarl')\n\n\n\n  -- by `@commonism `__\n\n  This change initially appeared in 1.9.5 but was reverted in 1.9.6 to resolve a problem with query string handling.\n\n  *Related issues and pull requests on GitHub:*\n  `#1039 `__, `#1082 `__.\n\n\nFeatures\n--------\n\n- Added ``~yarl.URL.absolute`` which is now preferred over ``URL.is_absolute()`` -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1100 `__.\n\n\n----\n\n\n1.9.9\n=====\n\n*(2024-09-04)*\n\n\nBug fixes\n---------\n\n- Added missing type on ``~yarl.URL.port`` -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1097 `__.\n\n\n----\n\n\n1.9.8\n=====\n\n*(2024-09-03)*\n\n\nFeatures\n--------\n\n- Covered the ``~yarl.URL`` object with types -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1084 `__.\n\n- Cache parsing of IP Addresses when encoding hosts -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1086 `__.\n\n\nContributor-facing changes\n--------------------------\n\n- Covered the ``~yarl.URL`` object with types -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1084 `__.\n\n\nMiscellaneous internal changes\n------------------------------\n\n- Improved performance of handling ports -- by `@bdraco `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1081 `__.\n\n\n----\n\n\n1.9.7\n=====\n\n*(2024-09-01)*\n\n\nRemovals and backward incompatible breaking changes\n---------------------------------------------------\n\n- Removed support ``3986#section-3.2.3`` port normalization when the scheme is not one of ``http``, ``https``, ``wss``, or ``ws`` -- by `@bdraco `__.\n\n  Support for port normalization was recently added in `#1033 `__ and contained code that would do blocking I/O if the scheme was not one of the four listed above. The code has been removed because this library is intended to be safe for usage with ``asyncio``.\n\n  *Related issues and pull requests on GitHub:*\n  `#1076 `__.\n\n\nMiscellaneous internal changes\n------------------------------\n\n- Improved performance of property caching -- by `@bdraco `__.\n\n  The ``reify`` implementation from ``aiohttp`` was adapted to replace the internal ``cached_property`` implementation.\n\n  *Related issues and pull requests on GitHub:*\n  `#1070 `__.\n\n\n----\n\n\n1.9.6\n=====\n\n*(2024-08-30)*\n\n\nBug fixes\n---------\n\n- Reverted ``3986`` compatible ``URL.join()()`` honoring empty segments which was introduced in `#1039 `__.\n\n  This change introduced a regression handling query string parameters with joined URLs. The change was reverted to maintain compatibility with the previous behavior.\n\n  *Related issues and pull requests on GitHub:*\n  `#1067 `__.\n\n\n----\n\n\n1.9.5\n=====\n\n*(2024-08-30)*\n\n\nBug fixes\n---------\n\n- Joining URLs with empty segments has been changed\n  to match ``3986``.\n\n  Previously empty segments would be removed from path,\n  breaking use-cases such as\n\n  .. code-block:: python\n\n     URL(\"https://web.archive.org/web/\") / \"https://github.com/\"\n\n  Now ``/ operation()`` and ``URL.joinpath()()``\n  keep empty segments, but do not introduce new empty segments.\n  e.g.\n\n  .. code-block:: python\n\n     URL(\"https://example.org/\") / \"\"\n\n  does not introduce an empty segment.\n\n  -- by `@commonism `__ and `@youtux `__\n\n  *Related issues and pull requests on GitHub:*\n  `#1026 `__.\n\n- The default protocol ports of well-known URI schemes are now taken into account\n  during the normalization of the URL string representation in accordance with\n  ``3986#section-3.2.3``.\n\n  Specified ports are removed from the ``str`` representation of a ``~yarl.URL``\n  if the port matches the scheme's default port -- by `@commonism `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1033 `__.\n\n- ``URL.join()()`` has been changed to match\n  ``3986`` and align with\n  ``/ operation()`` and ``URL.joinpath()()``\n  when joining URLs with empty segments.\n  Previously ``urllib.parse.urljoin`` was used,\n  which has known issues with empty segments\n  (`python/cpython#84774 `_).\n\n  Due to the semantics of ``URL.join()()``, joining an\n  URL with scheme requires making it relative, prefixing with ``./``.\n\n  .. code-block:: pycon\n\n     &gt;&gt;&gt; URL(\"https://web.archive.org/web/\").join(URL(\"./https://github.com/aio-libs/yarl\"))\n     URL('https://web.archive.org/web/https://github.com/aio-libs/yarl')\n\n\n  Empty segments are honored in the base as well as the joined part.\n\n  .. code-block:: pycon\n\n     &gt;&gt;&gt; URL(\"https://web.archive.org/web/https://\").join(URL(\"github.com/aio-libs/yarl\"))\n     URL('https://web.archive.org/web/https://github.com/aio-libs/yarl')\n\n\n\n  -- by `@commonism `__\n\n  *Related issues and pull requests on GitHub:*\n  `#1039 `__.\n\n\nRemovals and backward incompatible breaking changes\n---------------------------------------------------\n\n- Stopped decoding ``%2F`` (``/``) in ``URL.path``, as this could lead to code incorrectly treating it as a path separator\n  -- by `@Dreamsorcerer `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1057 `__.\n\n- Dropped support for Python 3.7 -- by `@Dreamsorcerer `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1016 `__.\n\n\nImproved documentation\n----------------------\n\n- On the ``Contributing docs`` page,\n  a link to the ``Towncrier philosophy`` has been fixed.\n\n  *Related issues and pull requests on GitHub:*\n  `#981 `__.\n\n- The pre-existing ``/ magic method()``\n  has been documented in the API reference -- by `@commonism `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1026 `__.\n\n\nPackaging updates and notes for downstreams\n-------------------------------------------\n\n- A flaw in the logic for copying the project directory into a\n  temporary folder that led to infinite recursion when ``TMPDIR``\n  was set to a project subdirectory path. This was happening in Fedora\n  and its downstream due to the use of `pyproject-rpm-macros\n  `__. It was\n  only reproducible with ``pip wheel`` and was not affecting the\n  ``pyproject-build`` users.\n\n  -- by `@hroncok `__ and `@webknjaz `__\n\n  *Related issues and pull requests on GitHub:*\n  `#992 `__, `#1014 `__.\n\n- Support Python 3.13 and publish non-free-threaded wheels\n\n  *Related issues and pull requests on GitHub:*\n  `#1054 `__.\n\n\nContributor-facing changes\n--------------------------\n\n- The CI/CD setup has been updated to test ``arm64`` wheels\n  under macOS 14, except for Python 3.7 that is unsupported\n  in that environment -- by `@webknjaz `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1015 `__.\n\n- Removed unused type ignores and casts -- by `@hauntsaninja `__.\n\n  *Related issues and pull requests on GitHub:*\n  `#1031 `__.\n\n\nMiscellaneous internal changes\n------------------------------\n\n- ``port``, ``scheme``, and ``raw_host`` are now ``cached_property`` -- by `@bdraco `__.\n\n  ``aiohttp`` accesses these properties quite often, which cause ``urllib`` to build the ``_hostinfo`` property every time. ``port``, ``scheme``, and ``raw_host`` are now cached properties, which will improve performance.\n\n  *Related issues and pull requests on GitHub:*\n  `#1044 `__, `#1058 `__.\n\n\n----\n\n\n1.9.4 (2023-12-06)\n==================\n\nBug fixes\n---------\n\n- Started raising ``TypeError`` when a string value is passed into\n  ``yarl.URL.build()`` as the ``port`` argument  -- by `@commonism `__.\n\n  Previously the empty string as port would create malformed URLs when rendered as string representations. (`#883 `__)\n\n\nPackaging updates and notes for downstreams\n-------------------------------------------\n\n- The leading ``--`` has been dropped from the `PEP 517 `__ in-tree build\n  backend config setting names. ``--pure-python`` is now just ``pure-python``\n  -- by `@webknjaz `__.\n\n  The usage now looks as follows:\n\n  .. code-block:: console\n\n      $ python -m build \\\n          --config-setting=pure-python=true \\\n          --config-setting=with-cython-tracing=true\n\n  (`#963 `__)\n\n\nContributor-facing changes\n--------------------------\n\n- A step-by-step ``Release Guide`` guide has\n  been added, describing how to release *yarl* -- by `@webknjaz `__.\n\n  This is primarily targeting maintainers. (`#960 `__)\n- Coverage collection has been implemented for the Cython modules\n  -- by `@webknjaz `__.\n\n  It will also be reported to Codecov from any non-release CI jobs.\n\n  To measure coverage in a development environment, *yarl* can be\n  installed in editable mode:\n\n  .. code-block:: console\n\n      $ python -Im pip install -e .\n\n  Editable install produces C-files required for the Cython coverage\n  plugin to map the measurements back to the PYX-files.\n\n  `#961 `__\n\n- It is now possible to request line tracing in Cython builds using the\n  ``with-cython-tracing`` `PEP 517 `__ config setting\n  -- `@webknjaz `__.\n\n  This can be used in CI and development environment to measure coverage\n  on Cython modules, but is not normally useful to the end-users or\n  downstream packagers.\n\n  Here's a usage example:\n\n  .. code-block:: console\n\n      $ python -Im pip install . --config-settings=with-cython-tracing=true\n\n  For editable installs, this setting is on by default. Otherwise, it's\n  off unless requested explicitly.\n\n  The following produces C-files required for the Cython coverage\n  plugin to map the measurements back to the PYX-files:\n\n  .. code-block:: console\n\n      $ python -Im pip install -e .\n\n  Alternatively, the ``YARL_CYTHON_TRACING=1`` environment variable\n  can be set to do the same as the `PEP 517 `__ config setting.\n\n  `#962 `__\n\n\n1.9.3 (2023-11-20)\n==================\n\nBug fixes\n---------\n\n- Stopped dropping trailing slashes in ``yarl.URL.joinpath()`` -- by `@gmacon `__. (`#862 `__, `#866 `__)\n- Started accepting string subclasses in ``yarl.URL.__truediv__()`` operations (``URL / segment``) -- by `@mjpieters `__. (`#871 `__, `#884 `__)\n- Fixed the human representation of URLs with square brackets in usernames and passwords -- by `@mjpieters `__. (`#876 `__, `#882 `__)\n- Updated type hints to include ``URL.missing_port()``, ``URL.__bytes__()``\n  and the ``encoding`` argument to ``yarl.URL.joinpath()``\n  -- by `@mjpieters `__. (`#891 `__)\n\n\nPackaging updates and notes for downstreams\n-------------------------------------------\n\n- Integrated Cython 3 to enable building *yarl* under Python 3.12 -- by `@mjpieters `__. (`#829 `__, `#881 `__)\n- Declared modern ``setuptools.build_meta`` as the `PEP 517 `__ build\n  backend in ``pyproject.toml`` explicitly -- by `@webknjaz `__. (`#886 `__)\n- Converted most of the packaging setup into a declarative ``setup.cfg``\n  config -- by `@webknjaz `__. (`#890 `__)\n- The packaging is replaced from an old-fashioned ``setup.py`` to an\n  in-tree `PEP 517 `__ build backend -- by `@webknjaz `__.\n\n  Whenever the end-users or downstream packagers need to build ``yarl`` from\n  source (a Git checkout or an sdist), they may pass a ``config_settings``\n  flag ``--pure-python``. If this flag is not set, a C-extension will be built\n  and included into the distribution.\n\n  Here is how this can be done with ``pip``:\n\n  .. code-block:: console\n\n      $ python -m pip install . --config-settings=--pure-python=false\n\n  This will also work with ``-e | --editable``.\n\n  The same can be achieved via ``pypa/build``:\n\n  .. code-block:: console\n\n      $ python -m build --config-setting=--pure-python=false\n\n  Adding ``-w | --wheel`` can force ``pypa/build`` produce a wheel from source\n  directly, as opposed to building an ``sdist`` and then building from it. (`#893 `__)\n\n  .. attention::\n\n     v1.9.3 was the only version using the ``--pure-python`` setting name.\n     Later versions dropped the ``--`` prefix, making it just ``pure-python``.\n\n- Declared Python 3.12 supported officially in the distribution package metadata\n  -- by `@edgarrmondragon `__. (`#942 `__)\n\n\nContributor-facing changes\n--------------------------\n\n- A regression test for no-host URLs was added per `#821 `__\n  and ``3986`` -- by `@kenballus `__. (`#821 `__, `#822 `__)\n- Started testing *yarl* against Python 3.12 in CI -- by `@mjpieters `__. (`#881 `__)\n- All Python 3.12 jobs are now marked as required to pass in CI\n  -- by `@edgarrmondragon `__. (`#942 `__)\n- MyST is now integrated in Sphinx -- by `@webknjaz `__.\n\n  This allows the contributors to author new documents in Markdown\n  when they have difficulties with going straight RST. (`#953 `__)\n\n\n1.9.2 (2023-04-25)\n==================\n\nBugfixes\n--------\n\n- Fix regression with ``yarl.URL.__truediv__()`` and absolute URLs with empty paths causing the raw path to lack the leading ``/``.\n  (`#854 `_)\n\n\n1.9.1 (2023-04-21)\n==================\n\nBugfixes\n--------\n\n- Marked tests that fail on older Python patch releases (&lt; 3.7.10, &lt; 3.8.8 and &lt; 3.9.2) as expected to fail due to missing a security fix for CVE-2021-23336. (`#850 `_)\n\n\n1.9.0 (2023-04-19)\n==================\n\nThis release was never published to PyPI, due to issues with the build process.\n\nFeatures\n--------\n\n- Added ``URL.joinpath(*elements)``, to create a new URL appending multiple path elements. (`#704 `_)\n- Made ``URL.__truediv__()()`` return ``NotImplemented`` if called with an\n  unsupported type \u2014 by `@michaeljpeters `__.\n  (`#832 `_)\n\n\nBugfixes\n--------\n\n- Path normalization for absolute URLs no longer raises a ValueError exception\n  when ``..`` segments would otherwise go beyond the URL path root.\n  (`#536 `_)\n- Fixed an issue with update_query() not getting rid of the query when argument is None. (`#792 `_)\n- Added some input restrictions on with_port() function to prevent invalid boolean inputs or out of valid port inputs; handled incorrect 0 port representation. (`#793 `_)\n- Made ``yarl.URL.build()`` raise a ``TypeError`` if the ``host`` argument is ``None`` \u2014 by `@paulpapacz `__. (`#808 `_)\n- Fixed an issue with ``update_query()`` getting rid of the query when the argument\n  is empty but not ``None``. (`#845 `_)\n\n\nMisc\n----\n\n- `#220 `_\n\n\n1.8.2 (2022-12-03)\n==================\n\nThis is the first release that started shipping wheels for Python 3.11.\n\n\n1.8.1 (2022-08-01)\n==================\n\nMisc\n----\n\n- `#694 `_, `#699 `_, `#700 `_, `#701 `_, `#702 `_, `#703 `_, `#739 `_\n\n\n1.8.0 (2022-08-01)\n==================\n\nFeatures\n--------\n\n- Added ``URL.raw_suffix``, ``URL.suffix``, ``URL.raw_suffixes``, ``URL.suffixes``, ``URL.with_suffix``. (`#613 `_)\n\n\nImproved Documentation\n----------------------\n\n- Fixed broken internal references to ``yarl.URL.human_repr()``.\n  (`#665 `_)\n- Fixed broken external references to ``multidict:index`` docs. (`#665 `_)\n\n\nDeprecations and Removals\n-------------------------\n\n- Dropped Python 3.6 support. (`#672 `_)\n\n\nMisc\n----\n\n- `#646 `_, `#699 `_, `#701 `_\n\n\n1.7.2 (2021-11-01)\n==================\n\nBugfixes\n--------\n\n- Changed call in ``with_port()`` to stop reencoding parts of the URL that were already encoded. (`#623 `_)\n\n\n1.7.1 (2021-10-07)\n==================\n\nBugfixes\n--------\n\n- Fix 1.7.0 build error\n\n1.7.0 (2021-10-06)\n==================\n\nFeatures\n--------\n\n- Add ``__bytes__()`` magic method so that ``bytes(url)`` will work and use optimal ASCII encoding.\n  (`#582 `_)\n- Started shipping platform-specific arm64 wheels for Apple Silicon. (`#622 `_)\n- Started shipping platform-specific wheels with the ``musl`` tag targeting typical Alpine Linux runtimes. (`#622 `_)\n- Added support for Python 3.10. (`#622 `_)\n\n\n1.6.3 (2020-11-14)\n==================\n\nBugfixes\n--------\n\n- No longer loose characters when decoding incorrect percent-sequences (like ``%e2%82%f8``). All non-decodable percent-sequences are now preserved.\n  `#517 `_\n- Provide x86 Windows wheels.\n  `#535 `_\n\n\n----\n\n\n1.6.2 (2020-10-12)\n==================\n\n\nBugfixes\n--------\n\n- Provide generated ``.c`` files in TarBall distribution.\n  `#530  `_\n\n1.6.1 (2020-10-12)\n==================\n\nFeatures\n--------\n\n- Provide wheels for ``aarch64``, ``i686``, ``ppc64le``, ``s390x`` architectures on\n  Linux as well as ``x86_64``.\n  `#507  `_\n- Provide wheels for Python 3.9.\n  `#526 `_\n\nBugfixes\n--------\n\n- ``human_repr()`` now always produces valid representation equivalent to the original URL (if the original URL is valid).\n  `#511 `_\n- Fixed  requoting a single percent followed by a percent-encoded character in the Cython implementation.\n  `#514 `_\n- Fix ValueError when decoding ``%`` which is not followed by two hexadecimal digits.\n  `#516 `_\n- Fix decoding ``%`` followed by a space and hexadecimal digit.\n  `#520 `_\n- Fix annotation of ``with_query()``/``update_query()`` methods for ``key=[val1, val2]`` case.\n  `#528 `_\n\nRemoval\n-------\n\n- Drop Python 3.5 support; Python 3.6 is the minimal supported Python version.\n\n\n----\n\n\n1.6.0 (2020-09-23)\n==================\n\nFeatures\n--------\n\n- Allow for int and float subclasses in query, while still denying bool.\n  `#492 `_\n\n\nBugfixes\n--------\n\n- Do not requote arguments in ``URL.build()``, ``with_xxx()`` and in ``/`` operator.\n  `#502 `_\n- Keep IPv6 brackets in ``origin()``.\n  `#504 `_\n\n\n----\n\n\n1.5.1 (2020-08-01)\n==================\n\nBugfixes\n--------\n\n- Fix including relocated internal ``yarl._quoting_c`` C-extension into published PyPI dists.\n  `#485 `_\n\n\nMisc\n----\n\n- `#484 `_\n\n\n----\n\n\n1.5.0 (2020-07-26)\n==================\n\nFeatures\n--------\n\n- Convert host to lowercase on URL building.\n  `#386 `_\n- Allow using ``mod`` operator (``%``) for updating query string (an alias for ``update_query()`` method).\n  `#435 `_\n- Allow use of sequences such as ``list`` and ``tuple`` in the values\n  of a mapping such as ``dict`` to represent that a key has many values::\n\n      url = URL(\"http://example.com\")\n      assert url.with_query({\"a\": [1, 2]}) == URL(\"http://example.com/?a=1&amp;a=2\")\n\n  `#443 `_\n- Support ``URL.build()`` with scheme and path (creates a relative URL).\n  `#464 `_\n- Cache slow IDNA encode/decode calls.\n  `#476 `_\n- Add ``@final`` / ``Final`` type hints\n  `#477 `_\n- Support URL authority/raw_authority properties and authority argument of ``URL.build()`` method.\n  `#478 `_\n- Hide the library implementation details, make the exposed public list very clean.\n  `#483 `_\n\n\nBugfixes\n--------\n\n- Fix tests with newer Python (3.7.6, 3.8.1 and 3.9.0+).\n  `#409 `_\n- Fix a bug where query component, passed in a form of mapping or sequence, is unquoted in unexpected way.\n  `#426 `_\n- Hide ``Query`` and ``QueryVariable`` type aliases in ``__init__.pyi``, now they are prefixed with underscore.\n  `#431 `_\n- Keep IPv6 brackets after updating port/user/password.\n  `#451 `_\n\n\n----\n\n\n1.4.2 (2019-12-05)\n==================\n\nFeatures\n--------\n\n- Workaround for missing ``str.isascii()`` in Python 3.6\n  `#389 `_\n\n\n----\n\n\n1.4.1 (2019-11-29)\n==================\n\n* Fix regression, make the library work on Python 3.5 and 3.6 again.\n\n1.4.0 (2019-11-29)\n==================\n\n* Distinguish an empty password in URL from a password not provided at all (#262)\n\n* Fixed annotations for optional parameters of ``URL.build`` (#309)\n\n* Use None as default value of ``user`` parameter of ``URL.build`` (#309)\n\n* Enforce building C Accelerated modules when installing from source tarball, use\n  ``YARL_NO_EXTENSIONS`` environment variable for falling back to (slower) Pure Python\n  implementation (#329)\n\n* Drop Python 3.5 support\n\n* Fix quoting of plus in path by pure python version (#339)\n\n* Don't create a new URL if fragment is unchanged (#292)\n\n* Included in error message the path that produces starting slash forbidden error (#376)\n\n* Skip slow IDNA encoding for ASCII-only strings (#387)\n\n\n1.3.0 (2018-12-11)\n==================\n\n* Fix annotations for ``query`` parameter (#207)\n\n* An incoming query sequence can have int variables (the same as for\n  Mapping type) (#208)\n\n* Add ``URL.explicit_port`` property (#218)\n\n* Give a friendlier error when port can't be converted to int (#168)\n\n* ``bool(URL())`` now returns ``False`` (#272)\n\n1.2.6 (2018-06-14)\n==================\n\n* Drop Python 3.4 trove classifier (#205)\n\n1.2.5 (2018-05-23)\n==================\n\n* Fix annotations for ``build`` (#199)\n\n1.2.4 (2018-05-08)\n==================\n\n* Fix annotations for ``cached_property`` (#195)\n\n1.2.3 (2018-05-03)\n==================\n\n* Accept ``str`` subclasses in ``URL`` constructor (#190)\n\n1.2.2 (2018-05-01)\n==================\n\n* Fix build\n\n1.2.1 (2018-04-30)\n==================\n\n* Pin minimal required Python to 3.5.3 (#189)\n\n1.2.0 (2018-04-30)\n==================\n\n* Forbid inheritance, replace ``__init__`` with ``__new__`` (#171)\n\n* Support PEP-561 (provide type hinting marker) (#182)\n\n1.1.1 (2018-02-17)\n==================\n\n* Fix performance regression: don't encode empty ``netloc`` (#170)\n\n1.1.0 (2018-01-21)\n==================\n\n* Make pure Python quoter consistent with Cython version (#162)\n\n1.0.0 (2018-01-15)\n==================\n\n* Use fast path if quoted string does not need requoting (#154)\n\n* Speed up quoting/unquoting by ``_Quoter`` and ``_Unquoter`` classes (#155)\n\n* Drop ``yarl.quote`` and ``yarl.unquote`` public functions (#155)\n\n* Add custom string writer, reuse static buffer if available (#157)\n  Code is 50-80 times faster than Pure Python version (was 4-5 times faster)\n\n* Don't recode IP zone (#144)\n\n* Support ``encoded=True`` in ``yarl.URL.build()`` (#158)\n\n* Fix updating query with multiple keys (#160)\n\n0.18.0 (2018-01-10)\n===================\n\n* Fallback to IDNA 2003 if domain name is not IDNA 2008 compatible (#152)\n\n0.17.0 (2017-12-30)\n===================\n\n* Use IDNA 2008 for domain name processing (#149)\n\n0.16.0 (2017-12-07)\n===================\n\n* Fix raising ``TypeError`` by ``url.query_string()`` after\n  ``url.with_query({})`` (empty mapping) (#141)\n\n0.15.0 (2017-11-23)\n===================\n\n* Add ``raw_path_qs`` attribute (#137)\n\n0.14.2 (2017-11-14)\n===================\n\n* Restore ``strict`` parameter as no-op in ``quote`` / ``unquote``\n\n0.14.1 (2017-11-13)\n===================\n\n* Restore ``strict`` parameter as no-op for sake of compatibility with\n  aiohttp 2.2\n\n0.14.0 (2017-11-11)\n===================\n\n* Drop strict mode (#123)\n\n* Fix ``\"ValueError: Unallowed PCT %\"`` when there's a ``\"%\"`` in the URL (#124)\n\n0.13.0 (2017-10-01)\n===================\n\n* Document ``encoded`` parameter (#102)\n\n* Support relative URLs like ``'?key=value'`` (#100)\n\n* Unsafe encoding for QS fixed. Encode ``;`` character in value parameter (#104)\n\n* Process passwords without user names (#95)\n\n0.12.0 (2017-06-26)\n===================\n\n* Properly support paths without leading slash in ``URL.with_path()`` (#90)\n\n* Enable type annotation checks\n\n0.11.0 (2017-06-26)\n===================\n\n* Normalize path (#86)\n\n* Clear query and fragment parts in ``.with_path()`` (#85)\n\n0.10.3 (2017-06-13)\n===================\n\n* Prevent double URL arguments unquoting (#83)\n\n0.10.2 (2017-05-05)\n===================\n\n* Unexpected hash behavior (#75)\n\n\n0.10.1 (2017-05-03)\n===================\n\n* Unexpected compare behavior (#73)\n\n* Do not quote or unquote + if not a query string. (#74)\n\n\n0.10.0 (2017-03-14)\n===================\n\n* Added ``URL.build`` class method (#58)\n\n* Added ``path_qs`` attribute (#42)\n\n\n0.9.8 (2017-02-16)\n==================\n\n* Do not quote ``:`` in path\n\n\n0.9.7 (2017-02-16)\n==================\n\n* Load from pickle without _cache (#56)\n\n* Percent-encoded pluses in path variables become spaces (#59)\n\n\n0.9.6 (2017-02-15)\n==================\n\n* Revert backward incompatible change (BaseURL)\n\n\n0.9.5 (2017-02-14)\n==================\n\n* Fix BaseURL rich comparison support\n\n\n0.9.4 (2017-02-14)\n==================\n\n* Use BaseURL\n\n\n0.9.3 (2017-02-14)\n==================\n\n* Added BaseURL\n\n\n0.9.2 (2017-02-08)\n==================\n\n* Remove debug print\n\n\n0.9.1 (2017-02-07)\n==================\n\n* Do not lose tail chars (#45)\n\n\n0.9.0 (2017-02-07)\n==================\n\n* Allow to quote ``%`` in non strict mode (#21)\n\n* Incorrect parsing of query parameters with %3B (;) inside (#34)\n\n* Fix core dumps (#41)\n\n* ``tmpbuf`` - compiling error (#43)\n\n* Added ``URL.update_path()`` method\n\n* Added ``URL.update_query()`` method (#47)\n\n\n0.8.1 (2016-12-03)\n==================\n\n* Fix broken aiohttp: revert back ``quote`` / ``unquote``.\n\n\n0.8.0 (2016-12-03)\n==================\n\n* Support more verbose error messages in ``.with_query()`` (#24)\n\n* Don't percent-encode ``@`` and ``:`` in path (#32)\n\n* Don't expose ``yarl.quote`` and ``yarl.unquote``, these functions are\n  part of private API\n\n0.7.1 (2016-11-18)\n==================\n\n* Accept not only ``str`` but all classes inherited from ``str`` also (#25)\n\n0.7.0 (2016-11-07)\n==================\n\n* Accept ``int`` as value for ``.with_query()``\n\n0.6.0 (2016-11-07)\n==================\n\n* Explicitly use UTF8 encoding in ``setup.py`` (#20)\n* Properly unquote non-UTF8 strings (#19)\n\n0.5.3 (2016-11-02)\n==================\n\n* Don't use ``typing.NamedTuple`` fields but indexes on URL construction\n\n0.5.2 (2016-11-02)\n==================\n\n* Inline ``_encode`` class method\n\n0.5.1 (2016-11-02)\n==================\n\n* Make URL construction faster by removing extra classmethod calls\n\n0.5.0 (2016-11-02)\n==================\n\n* Add Cython optimization for quoting/unquoting\n* Provide binary wheels\n\n0.4.3 (2016-09-29)\n==================\n\n* Fix typing stubs\n\n0.4.2 (2016-09-29)\n==================\n\n* Expose ``quote()`` and ``unquote()`` as public API\n\n0.4.1 (2016-09-28)\n==================\n\n* Support empty values in query (``'/path?arg'``)\n\n0.4.0 (2016-09-27)\n==================\n\n* Introduce ``relative()`` (#16)\n\n0.3.2 (2016-09-27)\n==================\n\n* Typo fixes #15\n\n0.3.1 (2016-09-26)\n==================\n\n* Support sequence of pairs as ``with_query()`` parameter\n\n0.3.0 (2016-09-26)\n==================\n\n* Introduce ``is_default_port()``\n\n0.2.1 (2016-09-26)\n==================\n\n* Raise ValueError for URLs like 'http://:8080/'\n\n0.2.0 (2016-09-18)\n==================\n\n* Avoid doubling slashes when joining paths (#13)\n\n* Appending path starting from slash is forbidden (#12)\n\n0.1.4 (2016-09-09)\n==================\n\n* Add ``kwargs`` support for ``with_query()`` (#10)\n\n0.1.3 (2016-09-07)\n==================\n\n* Document ``with_query()``, ``with_fragment()`` and ``origin()``\n\n* Allow ``None`` for ``with_query()`` and ``with_fragment()``\n\n0.1.2 (2016-09-07)\n==================\n\n* Fix links, tune docs theme.\n\n0.1.1 (2016-09-06)\n==================\n\n* Update README, old version used obsolete API\n\n0.1.0 (2016-09-06)\n==================\n\n* The library was deeply refactored, bytes are gone away but all\n  accepted strings are encoded if needed.\n\n0.0.1 (2016-08-30)\n==================\n\n* The first release.\n", "creation_timestamp": "2026-06-05T08:53:16.000000Z"}]}