<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Shinonome Tech Blog]]></title><description><![CDATA[株式会社Shinonomeの技術ブログ]]></description><link>http://blog.shinonome.io/</link><image><url>http://blog.shinonome.io/favicon.png</url><title>Shinonome Tech Blog</title><link>http://blog.shinonome.io/</link></image><generator>Ghost 4.48</generator><lastBuildDate>Fri, 10 Apr 2026 20:11:49 GMT</lastBuildDate><atom:link href="http://blog.shinonome.io/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Reactの発明とフロントエンド思想の変遷]]></title><description><![CDATA[フロントエンド技術の歴史は、「何が辛かったか」の連鎖だ。その中で、Reactはかつてフロントエンド開発の景色を一変させた。

しかし今、htmxやHotwireといった新たな選択肢が注目を集める中で、「Reactはもう不要だ」という声が増えている。

はたしてReactは本当に不要なのだろうか。それとも、私たちはReactが何を解決したのかを忘れてしまっただけなのだろうか。

本記事では、Web黎明期から現代に至るフロントエンド技術の変遷を辿り直し、各技術の功罪と、技術選定において本当に問うべきことを考える。]]></description><link>http://blog.shinonome.io/react-and-frontend-philosophy/</link><guid isPermaLink="false">69b13e9910c4420422a2036b</guid><category><![CDATA[PlayGround]]></category><category><![CDATA[フロントエンド]]></category><dc:creator><![CDATA[PlayGround]]></dc:creator><pubDate>Sat, 14 Mar 2026 15:35:53 GMT</pubDate><media:content url="http://blog.shinonome.io/content/images/2026/03/Gemini_Generated_Image_giggh7giggh7gigg.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="http://blog.shinonome.io/content/images/2026/03/Gemini_Generated_Image_giggh7giggh7gigg.png" alt="React&#x306E;&#x767A;&#x660E;&#x3068;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x601D;&#x60F3;&#x306E;&#x5909;&#x9077;"><p>&#x3053;&#x3093;&#x306B;&#x3061;&#x306F;&#x3002;PlayGround&#x3067;Next.js&#x3092;&#x7528;&#x3044;&#x305F;web&#x958B;&#x767A;&#x306E;&#x30BC;&#x30DF;&#x3092;&#x904B;&#x55B6;&#x3057;&#x3066;&#x3044;&#x308B;luck&#x3067;&#x3059;&#x3002;&#x3088;&#x308D;&#x3057;&#x304F;&#x3002;</p>
<p>&#x6628;&#x4ECA;&#x306E;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x754C;&#x9688;&#x3067;&#x306F;&#x3001;htmx&#x3084;Hotwire&#x3068;&#x3044;&#x3063;&#x305F;React&#x4EE5;&#x5916;&#x306E;&#x9078;&#x629E;&#x80A2;&#x304C;&#x6CE8;&#x76EE;&#x3092;&#x96C6;&#x3081;&#x308B;&#x3088;&#x3046;&#x306B;&#x306A;&#x308A;&#x3001;&#x305D;&#x306E;&#x6D41;&#x308C;&#x306E;&#x4E2D;&#x3067;&#x300C;<a href="https://zenn.dev/shuent/articles/9fb5b1e18edace">React&#x4E0D;&#x8981;&#x8AD6;2026</a>&#x300D;&#x306A;&#x3069;&#x306E;&#x8A18;&#x4E8B;&#x3082;&#x51FA;&#x3066;&#x304D;&#x3066;&#x3001;&#x4F53;&#x611F;&#x3068;&#x3057;&#x3066;&#x3001;React&#x3078;&#x306E;&#x98A8;&#x5F53;&#x305F;&#x308A;&#x306F;&#x304B;&#x306A;&#x308A;&#x5F37;&#x304F;&#x306A;&#x3063;&#x3066;&#x304D;&#x3066;&#x3044;&#x308B;&#x3068;&#x611F;&#x3058;&#x308B;&#x3002;</p>
<p>React&#x306F;&#x3082;&#x3061;&#x308D;&#x3093;&#x9280;&#x306E;&#x5F3E;&#x4E38;&#x3067;&#x306F;&#x306A;&#x3044;&#x3002;&#x3057;&#x304B;&#x3057;&#x3001;htmx&#x3084;Hotwire&#x3067;&#x300C;&#x4EE3;&#x66FF;&#x300D;&#x3055;&#x308C;&#x308B;&#x3088;&#x3046;&#x306A;&#x3082;&#x306E;&#x3067;&#x3082;&#x306A;&#x3044;&#x3002;&#x305D;&#x308C;&#x305E;&#x308C;&#x304C;&#x89E3;&#x3053;&#x3046;&#x3068;&#x3057;&#x3066;&#x3044;&#x308B;&#x554F;&#x3044;&#x304C;&#x9055;&#x3046;&#x3002;</p>
<p>&#x305D;&#x3057;&#x3066;&#x3001;React&#x6279;&#x5224;&#x306E;&#x591A;&#x304F;&#x306B;&#x5171;&#x901A;&#x3057;&#x3066;&#x3044;&#x308B;&#x306E;&#x306F;&#x3001;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x304C;&#x3069;&#x306E;&#x3088;&#x3046;&#x306A;&#x6B74;&#x53F2;&#x3092;&#x7D4C;&#x3066;&#x4ECA;&#x306E;&#x5F62;&#x306B;&#x305F;&#x3069;&#x308A;&#x7740;&#x3044;&#x305F;&#x306E;&#x304B;&#x3092;&#x8E0F;&#x307E;&#x3048;&#x3066;&#x3044;&#x306A;&#x3044;&#x3053;&#x3068;&#x3060;&#x3002;&#x30D0;&#x30CB;&#x30E9;JS&#x3084;jQuery&#x306E;&#x6642;&#x4EE3;&#x306B;&#x4F55;&#x304C;&#x8F9B;&#x304F;&#x3001;&#x306A;&#x305C;React&#x304C;&#x5FC5;&#x8981;&#x3068;&#x3055;&#x308C;&#x305F;&#x306E;&#x304B;&#x2014;&#x2014;&#x305D;&#x306E;&#x6587;&#x8108;&#x304C;&#x629C;&#x3051;&#x843D;&#x3061;&#x305F;&#x307E;&#x307E;&#x300C;React&#x306F;&#x4E0D;&#x8981;&#x3060;&#x300D;&#x3068;&#x8A00;&#x308F;&#x308C;&#x3066;&#x3044;&#x308B;&#x3002;&#x4EBA;&#x985E;&#x306F;React&#x306E;&#x767A;&#x660E;&#x3092;&#x5FD8;&#x308C;&#x3066;&#x3057;&#x307E;&#x3063;&#x305F;&#x3088;&#x3046;&#x3067;&#x3042;&#x308B;&#x3002;</p>
<p>&#x3053;&#x306E;&#x8A18;&#x4E8B;&#x3067;&#x306F;&#x3001;Web&#x9ECE;&#x660E;&#x671F;&#x304B;&#x3089;React&#x3001;&#x305D;&#x3057;&#x3066;&#x30DD;&#x30B9;&#x30C8;React&#x6642;&#x4EE3;&#x306B;&#x81F3;&#x308B;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x6280;&#x8853;&#x306E;&#x5909;&#x9077;&#x3092;&#x8FBF;&#x308A;&#x76F4;&#x3059;&#x3002;&#x4ECA;&#x4E00;&#x5EA6;&#x3001;React&#x306F;&#x306A;&#x305C;&#x3053;&#x3053;&#x307E;&#x3067;&#x6D78;&#x900F;&#x3057;&#x305F;&#x306E;&#x304B;&#x3001;&#x305D;&#x306E;&#x8CA2;&#x732E;&#x3068;&#x306F;&#x4F55;&#x3060;&#x3063;&#x305F;&#x306E;&#x304B;&#x3092;&#x601D;&#x3044;&#x51FA;&#x305D;&#x3046;&#x3002;</p>
<hr>
<h1 id="%E7%AC%AC1%E9%83%A8-react%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%82%8B%E3%81%BE%E3%81%A7-%E2%80%94-%E4%BD%95%E3%81%8C%E8%BE%9B%E3%81%8B%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%8B">&#x7B2C;1&#x90E8;: React&#x304C;&#x751F;&#x307E;&#x308C;&#x308B;&#x307E;&#x3067; &#x2014; &#x4F55;&#x304C;&#x8F9B;&#x304B;&#x3063;&#x305F;&#x306E;&#x304B;</h1>
<h2 id="%E5%89%8D%E6%8F%90%E7%9F%A5%E8%AD%98-web%E3%81%AE%E6%AD%B4%E5%8F%B2">&#x524D;&#x63D0;&#x77E5;&#x8B58;: web&#x306E;&#x6B74;&#x53F2;</h2>
<p>&#x307E;&#x305A;&#x306F;web&#x306E;&#x6B74;&#x53F2;&#x3092;&#x62BC;&#x3055;&#x3048;&#x3066;&#x304A;&#x3053;&#x3046;&#x3002;&#x305D;&#x306E;&#x524D;&#x306B;&#x3001;&#x305D;&#x3082;&#x305D;&#x3082;Web&#x304C;&#x3069;&#x3046;&#x3084;&#x3063;&#x3066;&#x30DA;&#x30FC;&#x30B8;&#x3092;&#x8868;&#x793A;&#x3057;&#x3066;&#x3044;&#x308B;&#x304B;&#x3092;&#x78BA;&#x8A8D;&#x3057;&#x3066;&#x304A;&#x304F;&#x3002;</p>
<h3 id="web%E3%81%AE%E5%9F%BA%E6%9C%AC%E7%9A%84%E3%81%AA%E4%BB%95%E7%B5%84%E3%81%BF">Web&#x306E;&#x57FA;&#x672C;&#x7684;&#x306A;&#x4ED5;&#x7D44;&#x307F;</h3>
<p>&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x306B;URL&#x3092;&#x5165;&#x529B;&#x3057;&#x3066;&#x30DA;&#x30FC;&#x30B8;&#x304C;&#x8868;&#x793A;&#x3055;&#x308C;&#x308B;&#x307E;&#x3067;&#x306B;&#x3001;&#x88CF;&#x5074;&#x3067;&#x306F;&#x4EE5;&#x4E0B;&#x306E;&#x3053;&#x3068;&#x304C;&#x8D77;&#x304D;&#x3066;&#x3044;&#x308B;&#x3002;</p>
<pre><code>1. URL&#x304B;&#x3089;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x306E;&#x5834;&#x6240;&#x3092;&#x7279;&#x5B9A;&#x3059;&#x308B;
   &#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x306F;&#x300C;example.com&#x300D;&#x3068;&#x3044;&#x3046;&#x30C9;&#x30E1;&#x30A4;&#x30F3;&#x540D;&#x3092;&#x3001;DNS&#xFF08;Domain Name System&#xFF09;&#x3068;&#x3044;&#x3046;
   &#x4ED5;&#x7D44;&#x307F;&#x3092;&#x4F7F;&#x3063;&#x3066;&#x300C;93.184.216.34&#x300D;&#x306E;&#x3088;&#x3046;&#x306A;IP&#x30A2;&#x30C9;&#x30EC;&#x30B9;&#x306B;&#x5909;&#x63DB;&#x3059;&#x308B;&#x3002;
   IP&#x30A2;&#x30C9;&#x30EC;&#x30B9;&#x306F;&#x30A4;&#x30F3;&#x30BF;&#x30FC;&#x30CD;&#x30C3;&#x30C8;&#x4E0A;&#x306E;&#x30B3;&#x30F3;&#x30D4;&#x30E5;&#x30FC;&#x30BF;&#x30FC;&#x306E;&#x4F4F;&#x6240;&#x306E;&#x3088;&#x3046;&#x306A;&#x3082;&#x306E;&#x3067;&#x3001;
   &#x3053;&#x308C;&#x306B;&#x3088;&#x308A;&#x300C;&#x3069;&#x306E;&#x30B3;&#x30F3;&#x30D4;&#x30E5;&#x30FC;&#x30BF;&#x30FC;&#x306B;&#x554F;&#x3044;&#x5408;&#x308F;&#x305B;&#x308C;&#x3070;&#x3044;&#x3044;&#x304B;&#x300D;&#x304C;&#x5206;&#x304B;&#x308B;&#x3002;

2. &#x305D;&#x306E;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x306B;&#x30EA;&#x30AF;&#x30A8;&#x30B9;&#x30C8;&#x3092;&#x9001;&#x308B;
   &#x300C;https://example.com/about &#x306E;&#x30DA;&#x30FC;&#x30B8;&#x3092;&#x304F;&#x3060;&#x3055;&#x3044;&#x300D;

3. &#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x304C;HTML&#x3092;&#x8FD4;&#x3059;
   &#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x3068;&#x306F;&#x3001;&#x30EA;&#x30AF;&#x30A8;&#x30B9;&#x30C8;&#x3092;&#x53D7;&#x3051;&#x53D6;&#x3063;&#x3066;&#x30C7;&#x30FC;&#x30BF;&#x3092;&#x8FD4;&#x3059;&#x30B3;&#x30F3;&#x30D4;&#x30E5;&#x30FC;&#x30BF;&#x30FC;&#x306E;&#x3053;&#x3068;&#x3060;&#x3002;
   &#x4E16;&#x754C;&#x4E2D;&#x306E;&#x3069;&#x3053;&#x304B;&#x306B;&#x3042;&#x308B;&#x30B3;&#x30F3;&#x30D4;&#x30E5;&#x30FC;&#x30BF;&#x30FC;&#x304C;24&#x6642;&#x9593;&#x7A3C;&#x50CD;&#x3057;&#x3066;&#x3044;&#x3066;&#x3001;
   &#x30EA;&#x30AF;&#x30A8;&#x30B9;&#x30C8;&#x304C;&#x6765;&#x308B;&#x305F;&#x3073;&#x306B;&#x5BFE;&#x5FDC;&#x3059;&#x308B;HTML&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x3092;&#x8FD4;&#x3059;&#x3002;
   &#x300C;&lt;html&gt;&lt;body&gt;&lt;h1&gt;About&lt;/h1&gt;&lt;p&gt;...&lt;/p&gt;&lt;/body&gt;&lt;/html&gt; &#x3092;&#x3069;&#x3046;&#x305E;&#x300D;

4. &#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x304C;HTML&#x3092;&#x89E3;&#x91C8;&#x3057;&#x3066;&#x753B;&#x9762;&#x306B;&#x63CF;&#x753B;&#x3059;&#x308B;
   &#x30C6;&#x30AD;&#x30B9;&#x30C8;&#x3001;&#x753B;&#x50CF;&#x3001;&#x30EA;&#x30F3;&#x30AF;&#x306A;&#x3069;&#x304C;&#x8868;&#x793A;&#x3055;&#x308C;&#x308B;
</code></pre>
<p><img src="http://blog.shinonome.io/content/images/2026/03/diagram.jpg" alt="React&#x306E;&#x767A;&#x660E;&#x3068;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x601D;&#x60F3;&#x306E;&#x5909;&#x9077;" loading="lazy"></p>
<p>&#x3064;&#x307E;&#x308A;Web&#x3068;&#x306F;&#x3001;<strong>&#x3042;&#x306A;&#x305F;&#x306E;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#xFF08;&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#xFF09;&#x304C;&#x3001;&#x4E16;&#x754C;&#x306E;&#x3069;&#x3053;&#x304B;&#x306B;&#x3042;&#x308B;&#x30B3;&#x30F3;&#x30D4;&#x30E5;&#x30FC;&#x30BF;&#x30FC;&#xFF08;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#xFF09;&#x306B;&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x3092;&#x8981;&#x6C42;&#x3057;&#x3001;&#x53D7;&#x3051;&#x53D6;&#x3063;&#x305F;HTML&#x3092;&#x8868;&#x793A;&#x3059;&#x308B;&#x4ED5;&#x7D44;&#x307F;</strong>&#x3060;&#x3002;&#x3053;&#x306E;&#x57FA;&#x672C;&#x69CB;&#x9020;&#x306F;1990&#x5E74;&#x4EE3;&#x304B;&#x3089;&#x5909;&#x308F;&#x3063;&#x3066;&#x3044;&#x306A;&#x3044;&#x3002;</p>
<p>&#x3057;&#x304B;&#x3057;&#x3001;&#x300C;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x304C;&#x4F55;&#x3092;&#x8FD4;&#x3059;&#x304B;&#x300D;&#x300C;&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x304C;&#x53D7;&#x3051;&#x53D6;&#x3063;&#x305F;&#x3082;&#x306E;&#x3092;&#x3069;&#x3046;&#x6271;&#x3046;&#x304B;&#x300D;&#x306F;&#x3001;&#x6280;&#x8853;&#x306E;&#x767A;&#x5C55;&#x3068;&#x3068;&#x3082;&#x306B;&#x5927;&#x304D;&#x304F;&#x5909;&#x5316;&#x3057;&#x3066;&#x304D;&#x305F;&#x3002;</p>
<pre><code>1990&#x5E74;&#x4EE3;  &#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x304C;&#x9759;&#x7684;HTML&#x3092;&#x8FD4;&#x3059; &#x2192; &#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x304C;&#x305D;&#x306E;&#x307E;&#x307E;&#x8868;&#x793A;&#x3059;&#x308B;
2000&#x5E74;&#x4EE3;  &#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x304C;HTML&#x3092;&#x8FD4;&#x3059; &#x2192; &#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x4E0A;&#x306E;JavaScript&#x304C;&#x4E00;&#x90E8;&#x3092;&#x66F8;&#x304D;&#x63DB;&#x3048;&#x308B;&#xFF08;Ajax&#xFF09;
2010&#x5E74;&#x4EE3;  &#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x304C;JSON&#x30C7;&#x30FC;&#x30BF;&#x3092;&#x8FD4;&#x3059; &#x2192; &#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x4E0A;&#x306E;JavaScript&#x304C;UI&#x3092;&#x4E38;&#x3054;&#x3068;&#x69CB;&#x7BC9;&#x3059;&#x308B;&#xFF08;SPA&#xFF09;
2020&#x5E74;&#x4EE3;  &#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x304C;UI&#x306E;&#x8A2D;&#x8A08;&#x56F3;&#x3092;&#x8FD4;&#x3059; &#x2192; &#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x304C;&#x6700;&#x5C0F;&#x9650;&#x306E;JS&#x3067;&#x7D44;&#x307F;&#x7ACB;&#x3066;&#x308B;&#xFF08;RSC&#xFF09;
          &#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x304C;HTML&#x65AD;&#x7247;&#x3092;&#x8FD4;&#x3059; &#x2192; &#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x304C;&#x8A72;&#x5F53;&#x7B87;&#x6240;&#x3060;&#x3051;&#x5DEE;&#x3057;&#x66FF;&#x3048;&#x308B;&#xFF08;htmx/Hotwire&#xFF09;
</code></pre>
<p>&#x3053;&#x306E;&#x8A18;&#x4E8B;&#x306F;&#x3001;&#x3053;&#x306E;&#x30A2;&#x30FC;&#x30AD;&#x30C6;&#x30AF;&#x30C1;&#x30E3;&#x306E;&#x5909;&#x9077;&#x3092;&#x300C;&#x306A;&#x305C;&#x305D;&#x3046;&#x5909;&#x308F;&#x3063;&#x305F;&#x306E;&#x304B;&#x300D;&#x3068;&#x3044;&#x3046;&#x5FC5;&#x7136;&#x6027;&#x3068;&#x3068;&#x3082;&#x306B;&#x8FBF;&#x308B;&#x3082;&#x306E;&#x3060;&#x3002;</p>
<h3 id="web%E9%BB%8E%E6%98%8E%E6%9C%9F-%E2%80%94-%E3%80%8C%E6%96%87%E6%9B%B8%E3%82%92%E8%AA%AD%E3%82%80%E3%80%8D%E3%81%9F%E3%82%81%E3%81%AE%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0">Web&#x9ECE;&#x660E;&#x671F; &#x2014; &#x300C;&#x6587;&#x66F8;&#x3092;&#x8AAD;&#x3080;&#x300D;&#x305F;&#x3081;&#x306E;&#x30D7;&#x30E9;&#x30C3;&#x30C8;&#x30D5;&#x30A9;&#x30FC;&#x30E0;</h3>
<p>1990&#x5E74;&#x4EE3;&#x524D;&#x534A;&#x306E;Web&#x306F;&#x3001;&#x7814;&#x7A76;&#x8005;&#x304C;&#x8AD6;&#x6587;&#x3084;&#x30C9;&#x30AD;&#x30E5;&#x30E1;&#x30F3;&#x30C8;&#x3092;&#x5171;&#x6709;&#x3059;&#x308B;&#x305F;&#x3081;&#x306E;&#x4ED5;&#x7D44;&#x307F;&#x3060;&#x3063;&#x305F;&#x3002;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x306F;&#x300C;HTML&#x3067;&#x66F8;&#x304B;&#x308C;&#x305F;&#x6587;&#x66F8;&#x3092;&#x8868;&#x793A;&#x3059;&#x308B;&#x300D;&#x3060;&#x3051;&#x306E;&#x9053;&#x5177;&#x3067;&#x3001;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x306B;&#x3067;&#x304D;&#x308B;&#x3053;&#x3068;&#x306F;&#x30EA;&#x30F3;&#x30AF;&#x3092;&#x30AF;&#x30EA;&#x30C3;&#x30AF;&#x3057;&#x3066;&#x5225;&#x306E;&#x30DA;&#x30FC;&#x30B8;&#x306B;&#x98DB;&#x3076;&#x3053;&#x3068;&#x3060;&#x3051;&#x3060;&#x3063;&#x305F;&#x3002;&#x30DA;&#x30FC;&#x30B8;&#x306E;&#x898B;&#x305F;&#x76EE;&#x3092;&#x5909;&#x3048;&#x305F;&#x3051;&#x308C;&#x3070;&#x3001;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x306B;&#x30EA;&#x30AF;&#x30A8;&#x30B9;&#x30C8;&#x3092;&#x9001;&#x308A;&#x3001;&#x65B0;&#x3057;&#x3044;HTML&#x3092;&#x4E38;&#x3054;&#x3068;&#x53D7;&#x3051;&#x53D6;&#x3063;&#x3066;&#x3001;&#x30DA;&#x30FC;&#x30B8;&#x5168;&#x4F53;&#x3092;&#x8AAD;&#x307F;&#x8FBC;&#x307F;&#x76F4;&#x3059;&#x3002;&#x3053;&#x306E;&#x300C;&#x30AF;&#x30EA;&#x30C3;&#x30AF; &#x2192; &#x753B;&#x9762;&#x304C;&#x771F;&#x3063;&#x767D;&#x306B;&#x306A;&#x308B; &#x2192; &#x65B0;&#x3057;&#x3044;&#x30DA;&#x30FC;&#x30B8;&#x304C;&#x8868;&#x793A;&#x3055;&#x308C;&#x308B;&#x300D;&#x3068;&#x3044;&#x3046;&#x30B5;&#x30A4;&#x30AF;&#x30EB;&#x304C;Web&#x306E;&#x57FA;&#x672C;&#x52D5;&#x4F5C;&#x3060;&#x3063;&#x305F;&#x3002;</p>
<h3 id="1995%E5%B9%B4-%E2%80%94-javascript%E8%AA%95%E7%94%9F">1995&#x5E74; &#x2014; JavaScript&#x8A95;&#x751F;</h3>
<p>Netscape&#x793E;&#x306E;Brendan Eich&#x304C;&#x3001;&#x308F;&#x305A;&#x304B;10&#x65E5;&#x9593;&#x3067;JavaScript&#x3092;&#x8A2D;&#x8A08;&#x3057;&#x305F;&#x3002;&#x5F53;&#x521D;&#x306E;&#x7528;&#x9014;&#x306F;&#x300C;&#x3061;&#x3087;&#x3063;&#x3068;&#x3057;&#x305F;&#x52D5;&#x304D;&#x300D;&#x3092;Web&#x30DA;&#x30FC;&#x30B8;&#x306B;&#x52A0;&#x3048;&#x308B;&#x3053;&#x3068;&#x2014;&#x2014;&#x30D5;&#x30A9;&#x30FC;&#x30E0;&#x306E;&#x5165;&#x529B;&#x30C1;&#x30A7;&#x30C3;&#x30AF;&#xFF08;&#x9001;&#x4FE1;&#x524D;&#x306B;&#x300C;&#x30E1;&#x30FC;&#x30EB;&#x30A2;&#x30C9;&#x30EC;&#x30B9;&#x306E;&#x5F62;&#x5F0F;&#x304C;&#x6B63;&#x3057;&#x3044;&#x304B;&#x300D;&#x3092;&#x78BA;&#x8A8D;&#x3059;&#x308B;&#x7B49;&#xFF09;&#x3001;&#x30DE;&#x30A6;&#x30B9;&#x30AA;&#x30FC;&#x30D0;&#x30FC;&#x3067;&#x753B;&#x50CF;&#x3092;&#x5909;&#x3048;&#x308B;&#x3001;&#x30A2;&#x30E9;&#x30FC;&#x30C8;&#x30C0;&#x30A4;&#x30A2;&#x30ED;&#x30B0;&#x3092;&#x51FA;&#x3059;&#x3001;&#x3068;&#x3044;&#x3063;&#x305F;&#x7A0B;&#x5EA6;&#x3060;&#x3063;&#x305F;&#x3002;</p>
<p>&#x3053;&#x306E;&#x6642;&#x70B9;&#x306E;JavaScript&#x306F;&#x3001;&#x3042;&#x304F;&#x307E;&#x3067;HTML&#x3068;&#x3044;&#x3046;&#x300C;&#x6587;&#x66F8;&#x300D;&#x306B;&#x6DFB;&#x3048;&#x308B;&#x88DC;&#x52A9;&#x7684;&#x306A;&#x30B9;&#x30AF;&#x30EA;&#x30D7;&#x30C8;&#x306B;&#x904E;&#x304E;&#x306A;&#x304B;&#x3063;&#x305F;&#x3002;</p>
<h3 id="1999%E3%80%9C2005%E5%B9%B4-%E2%80%94-ajax%E3%81%AE%E7%99%BB%E5%A0%B4%E3%81%A8web%E3%81%AE%E8%BB%A2%E6%8F%9B">1999&#x301C;2005&#x5E74; &#x2014; Ajax&#x306E;&#x767B;&#x5834;&#x3068;Web&#x306E;&#x8EE2;&#x63DB;</h3>
<p><strong>1999&#x5E74;</strong>&#x3001;Microsoft&#x304C;Internet Explorer 5&#x3067; <strong>XMLHttpRequest</strong> &#x3068;&#x3044;&#x3046;API&#x3092;&#x5C0E;&#x5165;&#x3059;&#x308B;&#x3002;&#x3053;&#x308C;&#x306F;&#x5730;&#x5473;&#x3060;&#x304C;&#x9769;&#x547D;&#x7684;&#x306A;&#x6A5F;&#x80FD;&#x3060;&#x3063;&#x305F;&#x3002;</p>
<p>&#x305D;&#x308C;&#x307E;&#x3067;&#x306E;Web&#x3067;&#x306F;&#x3001;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x304B;&#x3089;&#x65B0;&#x3057;&#x3044;&#x60C5;&#x5831;&#x3092;&#x5F97;&#x308B;&#x306B;&#x306F;&#x5FC5;&#x305A;&#x300C;&#x30DA;&#x30FC;&#x30B8;&#x5168;&#x4F53;&#x3092;&#x518D;&#x8AAD;&#x307F;&#x8FBC;&#x307F;&#x300D;&#x3059;&#x308B;&#x5FC5;&#x8981;&#x304C;&#x3042;&#x3063;&#x305F;&#x3002;XMLHttpRequest&#x306F;&#x3001;<strong>&#x30DA;&#x30FC;&#x30B8;&#x3092;&#x518D;&#x8AAD;&#x307F;&#x8FBC;&#x307F;&#x305B;&#x305A;&#x306B;&#x3001;&#x88CF;&#x5074;&#x3067;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x3068;&#x901A;&#x4FE1;&#x3057;&#x3066;&#x30C7;&#x30FC;&#x30BF;&#x3060;&#x3051;&#x3092;&#x53D7;&#x3051;&#x53D6;&#x308B;</strong>&#x3053;&#x3068;&#x3092;&#x53EF;&#x80FD;&#x306B;&#x3057;&#x305F;&#x3002;</p>
<pre><code class="language-javascript">// XMLHttpRequest&#xFF08;Ajax&#xFF09;&#x306E;&#x57FA;&#x672C;&#x7684;&#x306A;&#x4ED5;&#x7D44;&#x307F;
var xhr = new XMLHttpRequest();
xhr.open(&quot;GET&quot;, &quot;/api/notifications&quot;); // &#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x3078;&#x306E;&#x30EA;&#x30AF;&#x30A8;&#x30B9;&#x30C8;&#x3092;&#x6E96;&#x5099;
xhr.onreadystatechange = function () {
  // &#x30EC;&#x30B9;&#x30DD;&#x30F3;&#x30B9;&#x304C;&#x8FD4;&#x3063;&#x3066;&#x304D;&#x305F;&#x3089;&#x5B9F;&#x884C;&#x3059;&#x308B;&#x95A2;&#x6570;&#x3092;&#x767B;&#x9332;
  if (xhr.readyState === 4 &amp;&amp; xhr.status === 200) { // 4=&#x901A;&#x4FE1;&#x5B8C;&#x4E86;, 200=&#x6210;&#x529F;
    var data = JSON.parse(xhr.responseText);
    // &#x2190; &#x3053;&#x3053;&#x3067;&#x53D7;&#x3051;&#x53D6;&#x3063;&#x305F;&#x30C7;&#x30FC;&#x30BF;&#x3092;&#x4F7F;&#x3063;&#x3066;DOM&#x3092;&#x66F4;&#x65B0;&#x3059;&#x308B;
    //    &#x30DA;&#x30FC;&#x30B8;&#x5168;&#x4F53;&#x306E;&#x518D;&#x8AAD;&#x307F;&#x8FBC;&#x307F;&#x306F;&#x8D77;&#x304D;&#x306A;&#x3044;&#xFF01;
  }
};
xhr.send(); // &#x30EA;&#x30AF;&#x30A8;&#x30B9;&#x30C8;&#x3092;&#x9001;&#x4FE1;
</code></pre>
<p>&#x3053;&#x306E;&#x6280;&#x8853;&#x304C;&#x771F;&#x4FA1;&#x3092;&#x767A;&#x63EE;&#x3057;&#x305F;&#x306E;&#x306F;2004&#x301C;2005&#x5E74;&#x3060;&#x3002;</p>
<ul>
<li><strong>2004&#x5E74;: Gmail&#x516C;&#x958B;</strong> &#x2014; &#x30DA;&#x30FC;&#x30B8;&#x9077;&#x79FB;&#x306A;&#x3057;&#x3067;&#x30E1;&#x30FC;&#x30EB;&#x306E;&#x95B2;&#x89A7;&#x30FB;&#x9001;&#x4FE1;&#x30FB;&#x691C;&#x7D22;&#x304C;&#x3067;&#x304D;&#x308B;&#x3002;&#x5F53;&#x6642;&#x306E;Web&#x30E1;&#x30FC;&#x30EB;&#xFF08;Hotmail&#x7B49;&#xFF09;&#x304C;&#x30DA;&#x30FC;&#x30B8;&#x9077;&#x79FB;&#x3060;&#x3089;&#x3051;&#x3060;&#x3063;&#x305F;&#x306E;&#x3068;&#x6BD4;&#x3079;&#x3066;&#x3001;&#x307E;&#x308B;&#x3067;&#x30C7;&#x30B9;&#x30AF;&#x30C8;&#x30C3;&#x30D7;&#x30A2;&#x30D7;&#x30EA;&#x306E;&#x3088;&#x3046;&#x306A;&#x64CD;&#x4F5C;&#x611F;&#x3060;&#x3063;&#x305F;</li>
<li><strong>2005&#x5E74;: Google Maps&#x516C;&#x958B;</strong> &#x2014; &#x5730;&#x56F3;&#x3092;&#x30DE;&#x30A6;&#x30B9;&#x3067;&#x30C9;&#x30E9;&#x30C3;&#x30B0;&#x3057;&#x3066;&#x30B9;&#x30AF;&#x30ED;&#x30FC;&#x30EB;&#x3067;&#x304D;&#x308B;&#x3002;&#x30B9;&#x30AF;&#x30ED;&#x30FC;&#x30EB;&#x3059;&#x308B;&#x305F;&#x3073;&#x306B;&#x3001;&#x88CF;&#x5074;&#x3067;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x304B;&#x3089;&#x5730;&#x56F3;&#x30BF;&#x30A4;&#x30EB;&#x3092;&#x53D6;&#x5F97;&#x3057;&#x3066;&#x753B;&#x9762;&#x3092;&#x66F8;&#x304D;&#x63DB;&#x3048;&#x3066;&#x3044;&#x305F;&#x3002;&#x3053;&#x308C;&#x306F;&#x5F53;&#x6642;&#x306E;Web&#x4F53;&#x9A13;&#x3068;&#x3057;&#x3066;&#x885D;&#x6483;&#x7684;&#x3060;&#x3063;&#x305F;</li>
</ul>
<p>&#x540C;&#x5E74;&#x3001;Jesse James Garrett&#x304C;&#x3053;&#x306E;&#x6280;&#x8853;&#x3092; <strong>&#x300C;Ajax&#x300D;&#xFF08;Asynchronous JavaScript and XML&#xFF09;</strong> &#x3068;&#x547D;&#x540D;&#x3057;&#x305F;&#x3002;&#x300C;&#x975E;&#x540C;&#x671F;JavaScript&#x3068;XML&#x300D;&#x2014;&#x2014;&#x30DA;&#x30FC;&#x30B8;&#x3092;&#x518D;&#x8AAD;&#x307F;&#x8FBC;&#x307F;&#x305B;&#x305A;&#xFF08;&#x975E;&#x540C;&#x671F;&#x306B;&#xFF09;&#x3001;JavaScript&#x3067;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x3068;&#x901A;&#x4FE1;&#x3057;&#x3066;&#x30C7;&#x30FC;&#x30BF;&#xFF08;&#x5F53;&#x6642;&#x306F;XML&#x5F62;&#x5F0F;&#x304C;&#x591A;&#x304B;&#x3063;&#x305F;&#x3002;&#x4ECA;&#x3067;&#x306F;JSON&#x304C;&#x4E3B;&#x6D41;&#xFF09;&#x3092;&#x53D7;&#x3051;&#x53D6;&#x308A;&#x3001;&#x753B;&#x9762;&#x306E;&#x4E00;&#x90E8;&#x3060;&#x3051;&#x3092;&#x66F8;&#x304D;&#x63DB;&#x3048;&#x308B;&#x6280;&#x8853;&#x306E;&#x7DCF;&#x79F0;&#x3060;&#x3002;</p>
<p>&#x3053;&#x308C;&#x3092;&#x304D;&#x3063;&#x304B;&#x3051;&#x306B; <strong>Web 2.0</strong> &#x3068;&#x547C;&#x3070;&#x308C;&#x308B;&#x30E0;&#x30FC;&#x30D6;&#x30E1;&#x30F3;&#x30C8;&#x304C;&#x8D77;&#x304D;&#x305F;&#x3002;Web&#x304C;&#x300C;&#x8AAD;&#x3080;&#x3082;&#x306E;&#x300D;&#x304B;&#x3089;&#x300C;&#x4F7F;&#x3046;&#x3082;&#x306E;&#x300D;&#x3078;&#x3001;&#x6587;&#x66F8;&#x30D7;&#x30E9;&#x30C3;&#x30C8;&#x30D5;&#x30A9;&#x30FC;&#x30E0;&#x304B;&#x3089;&#x30A2;&#x30D7;&#x30EA;&#x30B1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x30D7;&#x30E9;&#x30C3;&#x30C8;&#x30D5;&#x30A9;&#x30FC;&#x30E0;&#x3078;&#x3068;&#x5909;&#x8C8C;&#x3057;&#x59CB;&#x3081;&#x305F;&#x77AC;&#x9593;&#x3060;&#x3002;</p>
<hr>
<h4 id="%E3%82%B3%E3%83%A9%E3%83%A0-flash%E3%81%A8%E3%81%84%E3%81%86%E3%80%8C%E3%82%82%E3%81%86%E4%B8%80%E3%81%A4%E3%81%AE%E9%81%93%E3%80%8D">&#x30B3;&#x30E9;&#x30E0;: Flash&#x3068;&#x3044;&#x3046;&#x300C;&#x3082;&#x3046;&#x4E00;&#x3064;&#x306E;&#x9053;&#x300D;</h4>
<p>Ajax&#x304C;&#x767B;&#x5834;&#x3059;&#x308B;&#x4EE5;&#x524D;&#x304B;&#x3089;&#x3001;&#x52D5;&#x7684;&#x3067;&#x30EA;&#x30C3;&#x30C1;&#x306A;Web&#x4F53;&#x9A13;&#x3092;&#x5B9F;&#x73FE;&#x3059;&#x308B;&#x6280;&#x8853;&#x304C;&#x3082;&#x3046;&#x4E00;&#x3064;&#x5B58;&#x5728;&#x3057;&#x3066;&#x3044;&#x305F;&#x3002;<strong>Adobe Flash</strong>&#xFF08;&#x65E7;Macromedia Flash&#xFF09;&#x3060;&#x3002;</p>
<p>Flash&#x306E;&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;&#x306F;&#x3001;JavaScript&#x3068;&#x306F;&#x6839;&#x672C;&#x7684;&#x306B;&#x7570;&#x306A;&#x3063;&#x3066;&#x3044;&#x305F;&#x3002;JavaScript&#x304C;&#x300C;HTML&#x306E;&#x4E2D;&#x306B;&#x57CB;&#x3081;&#x8FBC;&#x307E;&#x308C;&#x305F;&#x30B9;&#x30AF;&#x30EA;&#x30D7;&#x30C8;&#x300D;&#x3068;&#x3057;&#x3066;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x306E;&#x6A5F;&#x80FD;&#x3092;&#x62E1;&#x5F35;&#x3059;&#x308B;&#x306E;&#x306B;&#x5BFE;&#x3057;&#x3001;Flash&#x306F;<strong>&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x306E;&#x4E2D;&#x306B;&#x30D7;&#x30E9;&#x30B0;&#x30A4;&#x30F3;&#xFF08;&#x8FFD;&#x52A0;&#x30BD;&#x30D5;&#x30C8;&#x30A6;&#x30A7;&#x30A2;&#xFF09;&#x3068;&#x3057;&#x3066;&#x5225;&#x306E;&#x5B9F;&#x884C;&#x74B0;&#x5883;&#x3092;&#x4E38;&#x3054;&#x3068;&#x8F09;&#x305B;&#x308B;</strong>&#x3068;&#x3044;&#x3046;&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;&#x3060;&#x3063;&#x305F;&#x3002;</p>
<pre><code>JavaScript&#x306E;&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;:
  HTML + CSS + JavaScript &#x2192; &#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x304C;&#x76F4;&#x63A5;&#x89E3;&#x91C8;&#x30FB;&#x5B9F;&#x884C;
  Web&#x306E;&#x6A19;&#x6E96;&#x6280;&#x8853;&#x306E;&#x4E0A;&#x306B;&#x69CB;&#x7BC9;&#x3059;&#x308B;

Flash&#x306E;&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;:
  Flash&#x30D7;&#x30E9;&#x30B0;&#x30A4;&#x30F3;&#xFF08;Flash Player&#xFF09;&#x3092;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x306B;&#x30A4;&#x30F3;&#x30B9;&#x30C8;&#x30FC;&#x30EB;
  &#x2192; HTML&#x306E;&#x4E2D;&#x306B; &lt;object&gt; &#x30BF;&#x30B0;&#x3067;&#x300C;Flash&#x306E;&#x518D;&#x751F;&#x9818;&#x57DF;&#x300D;&#x3092;&#x57CB;&#x3081;&#x8FBC;&#x3080;
  &#x2192; &#x305D;&#x306E;&#x9818;&#x57DF;&#x5185;&#x3067;&#x306F;Flash&#x72EC;&#x81EA;&#x306E;&#x4E16;&#x754C;&#x304C;&#x52D5;&#x304F;
  &#x2192; ActionScript&#xFF08;Flash&#x5C02;&#x7528;&#x306E;&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30DF;&#x30F3;&#x30B0;&#x8A00;&#x8A9E;&#xFF09;&#x3067;&#x958B;&#x767A;
  Web&#x306E;&#x6A19;&#x6E96;&#x3068;&#x306F;&#x5225;&#x306E;&#x72EC;&#x81EA;&#x30D7;&#x30E9;&#x30C3;&#x30C8;&#x30D5;&#x30A9;&#x30FC;&#x30E0;&#x4E0A;&#x306B;&#x69CB;&#x7BC9;&#x3059;&#x308B;
</code></pre>
<p>Flash Player&#x5185;&#x306E;&#x4E16;&#x754C;&#x3067;&#x306F;&#x3001;&#x30D9;&#x30AF;&#x30BF;&#x30FC;&#x30B0;&#x30E9;&#x30D5;&#x30A3;&#x30C3;&#x30AF;&#x30B9;&#x3001;&#x30A2;&#x30CB;&#x30E1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x3001;&#x97F3;&#x58F0;&#x30FB;&#x52D5;&#x753B;&#x518D;&#x751F;&#x3001;&#x30EA;&#x30C3;&#x30C1;&#x306A;UI&#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#x2014;&#x2014;&#x5F53;&#x6642;&#x306E;HTML/CSS/JavaScript&#x3067;&#x306F;&#x5230;&#x5E95;&#x5B9F;&#x73FE;&#x3067;&#x304D;&#x306A;&#x304B;&#x3063;&#x305F;&#x8868;&#x73FE;&#x304C;&#x53EF;&#x80FD;&#x3060;&#x3063;&#x305F;&#x3002;2000&#x5E74;&#x4EE3;&#x524D;&#x534A;&#x3001;Flash&#x3067;&#x4F5C;&#x3089;&#x308C;&#x305F;&#x5168;&#x753B;&#x9762;&#x30A2;&#x30CB;&#x30E1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x306E;Web&#x30B5;&#x30A4;&#x30C8;&#x3084;&#x3001;Flash&#x30B2;&#x30FC;&#x30E0;&#x3001;&#x52D5;&#x753B;&#x30D7;&#x30EC;&#x30A4;&#x30E4;&#x30FC;&#xFF08;YouTube&#x521D;&#x671F;&#x3082;Flash Player&#x3092;&#x4F7F;&#x7528;&#x3057;&#x3066;&#x3044;&#x305F;&#xFF09;&#x306F;&#x5927;&#x6D41;&#x884C;&#x3057;&#x305F;&#x3002;<br>
&#x79C1;&#x306E;&#x7236;&#x306F;&#x3082;&#x3046;50&#x306B;&#x306A;&#x308B;&#x304C;&#x3001;&#x5F7C;&#x306F;&#x5927;&#x5B66;&#x751F;&#x306E;&#x6642;&#x306B;Flash&#x3092;&#x4F7F;&#x3063;&#x3066;web&#x30A8;&#x30F3;&#x30B8;&#x30CB;&#x30A2;&#x3092;&#x3057;&#x3066;&#x3044;&#x305F;&#x3002;</p>
<p>&#x3057;&#x304B;&#x3057;Flash&#x306F;&#x3001;&#x3044;&#x304F;&#x3064;&#x304B;&#x306E;&#x69CB;&#x9020;&#x7684;&#x306A;&#x554F;&#x984C;&#x3092;&#x62B1;&#x3048;&#x3066;&#x3044;&#x305F;&#x3002;</p>
<ul>
<li><strong>&#x30D7;&#x30E9;&#x30B0;&#x30A4;&#x30F3;&#x4F9D;&#x5B58;</strong>: Flash Player&#x3092;&#x30A4;&#x30F3;&#x30B9;&#x30C8;&#x30FC;&#x30EB;&#x3057;&#x3066;&#x3044;&#x306A;&#x3044;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x3067;&#x306F;&#x4E00;&#x5207;&#x52D5;&#x304B;&#x306A;&#x3044;&#x3002;&#x691C;&#x7D22;&#x30A8;&#x30F3;&#x30B8;&#x30F3;&#x306E;&#x30AF;&#x30ED;&#x30FC;&#x30E9;&#x30FC;&#x3082;Flash&#x306E;&#x4E2D;&#x8EAB;&#x3092;&#x8AAD;&#x3081;&#x306A;&#x3044;&#x305F;&#x3081;&#x3001;SEO&#x306B;&#x4E0D;&#x5229;&#x3060;&#x3063;&#x305F;</li>
<li><strong>&#x30BB;&#x30AD;&#x30E5;&#x30EA;&#x30C6;&#x30A3;&#x8106;&#x5F31;&#x6027;</strong>: Flash Player&#x306B;&#x6DF1;&#x523B;&#x306A;&#x30BB;&#x30AD;&#x30E5;&#x30EA;&#x30C6;&#x30A3;&#x30DB;&#x30FC;&#x30EB;&#x304C;&#x7E70;&#x308A;&#x8FD4;&#x3057;&#x767A;&#x898B;&#x3055;&#x308C;&#x305F;</li>
<li><strong>&#x30E2;&#x30D0;&#x30A4;&#x30EB;&#x975E;&#x5BFE;&#x5FDC;</strong>: 2010&#x5E74;&#x306B;Apple&#x306E;Steve Jobs&#x304C;&#x300C;iOS&#x30C7;&#x30D0;&#x30A4;&#x30B9;&#xFF08;iPhone&#x30FB;iPad&#x7B49;&#xFF09;&#x3067;Flash&#x3092;&#x30B5;&#x30DD;&#x30FC;&#x30C8;&#x3057;&#x306A;&#x3044;&#x300D;&#x3068;&#x516C;&#x958B;&#x66F8;&#x7C21;&#x3067;&#x5BA3;&#x8A00;&#x3002;&#x30D0;&#x30C3;&#x30C6;&#x30EA;&#x30FC;&#x6D88;&#x8CBB;&#x3001;&#x30D1;&#x30D5;&#x30A9;&#x30FC;&#x30DE;&#x30F3;&#x30B9;&#x3001;&#x30BB;&#x30AD;&#x30E5;&#x30EA;&#x30C6;&#x30A3;&#x3092;&#x7406;&#x7531;&#x306B;&#x6319;&#x3052;&#x305F;&#x3002;&#x30B9;&#x30DE;&#x30FC;&#x30C8;&#x30D5;&#x30A9;&#x30F3;&#x306E;&#x6025;&#x901F;&#x306A;&#x666E;&#x53CA;&#x306E;&#x4E2D;&#x3067;&#x3001;&#x3053;&#x308C;&#x304C;&#x6C7A;&#x5B9A;&#x6253;&#x3068;&#x306A;&#x3063;&#x305F;</li>
<li><strong>&#x30AF;&#x30ED;&#x30FC;&#x30BA;&#x30C9;&#x306A;&#x6280;&#x8853;</strong>: Adobe&#x3068;&#x3044;&#x3046;&#x4E00;&#x4F01;&#x696D;&#x304C;&#x898F;&#x683C;&#x3092;&#x63E1;&#x308B;&#x72EC;&#x5360;&#x7684;&#x306A;&#x30D7;&#x30E9;&#x30C3;&#x30C8;&#x30D5;&#x30A9;&#x30FC;&#x30E0;&#x3067;&#x3042;&#x308A;&#x3001;Web&#x6A19;&#x6E96;&#xFF08;&#x30AA;&#x30FC;&#x30D7;&#x30F3;&#x306A;&#x4ED5;&#x69D8;&#xFF09;&#x306E;&#x5BFE;&#x6975;&#x306B;&#x3042;&#x3063;&#x305F;</li>
</ul>
<p>2010&#x5E74;&#x4EE3;&#x306B;&#x5165;&#x308B;&#x3068;&#x3001;HTML5&#x306E;&#x767B;&#x5834;&#x306B;&#x3088;&#x308A;&#x3001;Flash&#x304C;&#x62C5;&#x3063;&#x3066;&#x3044;&#x305F;&#x5F79;&#x5272;&#x306E;&#x591A;&#x304F;&#x2014;&#x2014;&#x52D5;&#x753B;&#x518D;&#x751F;&#xFF08;<code>&lt;video&gt;</code> &#x30BF;&#x30B0;&#xFF09;&#x3001;&#x30A2;&#x30CB;&#x30E1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#xFF08;CSS Animations / Canvas API&#xFF09;&#x3001;&#x30EA;&#x30C3;&#x30C1;&#x306A;&#x30B0;&#x30E9;&#x30D5;&#x30A3;&#x30C3;&#x30AF;&#x30B9;&#xFF08;WebGL&#xFF09;&#x2014;&#x2014;&#x304C;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x306E;&#x6A19;&#x6E96;&#x6A5F;&#x80FD;&#x3068;&#x3057;&#x3066;&#x30AB;&#x30D0;&#x30FC;&#x3055;&#x308C;&#x308B;&#x3088;&#x3046;&#x306B;&#x306A;&#x3063;&#x305F;&#x3002;2020&#x5E74;&#x672B;&#x3001;Adobe Flash Player&#x306F;&#x6B63;&#x5F0F;&#x306B;&#x30B5;&#x30DD;&#x30FC;&#x30C8;&#x3092;&#x7D42;&#x4E86;&#x3057;&#x3001;Flash&#x3068;&#x3044;&#x3046;&#x6F6E;&#x6D41;&#x306F;&#x5B8C;&#x5168;&#x306B;&#x9014;&#x7D76;&#x3048;&#x305F;&#x3002;</p>
<p><strong>&#x300C;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x306E;&#x5916;&#x306B;&#x30D7;&#x30E9;&#x30B0;&#x30A4;&#x30F3;&#x3068;&#x3057;&#x3066;&#x72EC;&#x81EA;&#x30D7;&#x30E9;&#x30C3;&#x30C8;&#x30D5;&#x30A9;&#x30FC;&#x30E0;&#x3092;&#x8F09;&#x305B;&#x308B;&#x300D;&#x3068;&#x3044;&#x3046;&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;&#x306F;&#x3001;&#x6700;&#x7D42;&#x7684;&#x306B;Web&#x6A19;&#x6E96;&#x306B;&#x6557;&#x308C;&#x305F;</strong>&#x3068;&#x3044;&#x3046;&#x3053;&#x3068;&#x3060;&#x3002;&#x73FE;&#x4EE3;&#x306E;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x6280;&#x8853;&#xFF08;React, Vue, Svelte&#x7B49;&#xFF09;&#x306F;&#x5168;&#x3066;&#x3001;HTML/CSS/JavaScript&#x3068;&#x3044;&#x3046;Web&#x6A19;&#x6E96;&#x306E;&#x4E0A;&#x306B;&#x69CB;&#x7BC9;&#x3055;&#x308C;&#x3066;&#x3044;&#x308B;&#x3002;</p>
<p>&#x305F;&#x3060;&#x3057;&#x8208;&#x5473;&#x6DF1;&#x3044;&#x3053;&#x3068;&#x306B;&#x3001;&#x300C;Web&#x6A19;&#x6E96;&#x3067;&#x3042;&#x308C;&#x3070;&#x52DD;&#x3066;&#x308B;&#x300D;&#x3068;&#x3082;&#x9650;&#x3089;&#x306A;&#x3044;&#x3002;&#x7B2C;5&#x7AE0;&#x3067;&#x89E6;&#x308C;&#x308B;Web Components&#x306F;&#x3001;W3C&#x304C;&#x7B56;&#x5B9A;&#x3057;&#x305F;&#x6B63;&#x771F;&#x6B63;&#x9298;&#x306E;Web&#x6A19;&#x6E96;&#x3067;&#x3042;&#x308A;&#x306A;&#x304C;&#x3089;&#x3001;React&#x3084;Vue&#x307B;&#x3069;&#x306B;&#x306F;&#x666E;&#x53CA;&#x3057;&#x306A;&#x304B;&#x3063;&#x305F;&#x3002;Flash&#x306F;&#x300C;&#x6A19;&#x6E96;&#x3067;&#x306A;&#x304B;&#x3063;&#x305F;&#x304B;&#x3089;&#x300D;&#x6557;&#x308C;&#x3001;Web Components&#x306F;&#x300C;&#x6A19;&#x6E96;&#x3067;&#x3042;&#x3063;&#x3066;&#x3082;&#x300D;&#x82E6;&#x6226;&#x3057;&#x305F;&#x3002;&#x6280;&#x8853;&#x306E;&#x666E;&#x53CA;&#x306B;&#x306F;&#x3001;&#x6A19;&#x6E96;&#x304B;&#x3069;&#x3046;&#x304B;&#x3060;&#x3051;&#x3067;&#x306A;&#x304F;&#x3001;&#x958B;&#x767A;&#x8005;&#x304C;&#x672C;&#x5F53;&#x306B;&#x5FC5;&#x8981;&#x3068;&#x3057;&#x3066;&#x3044;&#x308B;&#x554F;&#x3044;&#x3092;&#x89E3;&#x6C7A;&#x3057;&#x3066;&#x3044;&#x308B;&#x304B;&#x304C;&#x91CD;&#x8981;&#x3060;&#x3068;&#x3044;&#x3046;&#x3053;&#x3068;&#x3060;&#x3002;</p>
<hr>
<h3 id="2006%E5%B9%B4%E3%80%9C-%E2%80%94-jquery%E4%BB%A5%E9%99%8D%E3%81%AE%E4%B8%96%E7%95%8C">2006&#x5E74;&#x301C; &#x2014; jQuery&#x4EE5;&#x964D;&#x306E;&#x4E16;&#x754C;</h3>
<p><strong>2006&#x5E74;: jQuery&#x516C;&#x958B;</strong> &#x2014; jQuery&#x306F;DOM&#x64CD;&#x4F5C;&#x306E;&#x7C21;&#x7565;&#x5316;&#x304A;&#x3088;&#x3073;Ajax&#x306E;&#x5B9F;&#x88C5;&#x3092;&#x5287;&#x7684;&#x306B;&#x7C21;&#x5358;&#x306B;&#x3057;&#x305F;&#x3002;</p>
<pre><code class="language-javascript">// &#x751F;&#x306E;XMLHttpRequest&#xFF08;10&#x884C;&#x4EE5;&#x4E0A;&#x306E;&#x30B3;&#x30FC;&#x30C9;&#xFF09;&#x304C;&#x3001;jQuery&#x3067;&#x306F;&#x3053;&#x308C;&#x3060;&#x3051;&#x306B;&#x306A;&#x308B;
$.get(&quot;/api/notifications&quot;, function (data) {
  $(&quot;#notification-list&quot;).html(data);
});
</code></pre>
<p>&#x4EE5;&#x964D;&#x306B;&#x767B;&#x5834;&#x3059;&#x308B;&#x30D5;&#x30EC;&#x30FC;&#x30E0;&#x30EF;&#x30FC;&#x30AF;&#x3084;&#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x30EA;&#xFF08;Backbone.js&#x3001;Angular.js&#x7B49;&#xFF09;&#x3082;&#x3001;Ajax&#x901A;&#x4FE1;&#x3092;&#x7C21;&#x5358;&#x306B;&#x884C;&#x3046;API&#x3092;&#x6A19;&#x6E96;&#x3067;&#x5099;&#x3048;&#x305F;&#x72B6;&#x614B;&#x3067;&#x767B;&#x5834;&#x3057;&#x3066;&#x304F;&#x308B;&#x3002;&#x300C;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x3068;&#x975E;&#x540C;&#x671F;&#x901A;&#x4FE1;&#x3057;&#x3066;UI&#x3092;&#x90E8;&#x5206;&#x66F4;&#x65B0;&#x3059;&#x308B;&#x300D;&#x3053;&#x3068;&#x306F;&#x3001;&#x3082;&#x306F;&#x3084;Web&#x30A2;&#x30D7;&#x30EA;&#x306E;&#x524D;&#x63D0;&#x6761;&#x4EF6;&#x306B;&#x306A;&#x3063;&#x3066;&#x3044;&#x305F;&#x3002;</p>
<pre><code>&#x5E74;&#x8868;&#x307E;&#x3068;&#x3081;&#xFF08;&#x5404;&#x7528;&#x8A9E;&#x306F;&#x672C;&#x6587;&#x3067;&#x8A73;&#x3057;&#x304F;&#x6271;&#x3046;&#xFF09;:

1995  JavaScript&#x8A95;&#x751F; &#x2014; &#x300C;&#x30D5;&#x30A9;&#x30FC;&#x30E0;&#x306E;&#x5165;&#x529B;&#x30C1;&#x30A7;&#x30C3;&#x30AF;&#x300D;&#x7A0B;&#x5EA6;&#x306E;&#x7528;&#x9014;
1999  XMLHttpRequest&#x767B;&#x5834; &#x2014; &#x30DA;&#x30FC;&#x30B8;&#x518D;&#x8AAD;&#x307F;&#x8FBC;&#x307F;&#x306A;&#x3057;&#x306E;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x901A;&#x4FE1;&#x304C;&#x53EF;&#x80FD;&#x306B;
2004  Gmail&#x516C;&#x958B; &#x2014; Web&#x30A2;&#x30D7;&#x30EA;&#x30B1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x3068;&#x3044;&#x3046;&#x6982;&#x5FF5;&#x304C;&#x73FE;&#x5B9F;&#x306B;
2005  &#x300C;Ajax&#x300D;&#x547D;&#x540D;&#x3001;Google Maps&#x516C;&#x958B; &#x2014; Web 2.0&#x30D6;&#x30FC;&#x30E0;
2006  jQuery&#x516C;&#x958B; &#x2014; DOM&#x64CD;&#x4F5C;&#x3068;Ajax&#x3092;&#x5287;&#x7684;&#x306B;&#x7C21;&#x7565;&#x5316;
2010  Backbone.js, AngularJS &#x767B;&#x5834; &#x2014; &#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x30B5;&#x30A4;&#x30C9;MVC&#x30D5;&#x30EC;&#x30FC;&#x30E0;&#x30EF;&#x30FC;&#x30AF;&#x3001;SPA&#x306E;&#x672C;&#x683C;&#x5316;
2013  React&#x516C;&#x958B; &#x2014; &#x5BA3;&#x8A00;&#x7684;UI&#x3001;&#x4EEE;&#x60F3;DOM&#x3001;&#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#x30E2;&#x30C7;&#x30EB;
2015  ES2015(ES6) &#x2014; JavaScript&#x8A00;&#x8A9E;&#x81EA;&#x4F53;&#x306E;&#x5927;&#x5E45;&#x306A;&#x8FD1;&#x4EE3;&#x5316;&#xFF08;let/const, Promise, &#x30E2;&#x30B8;&#x30E5;&#x30FC;&#x30EB;&#x7B49;&#xFF09;
2016  Next.js&#x767B;&#x5834; &#x2014; React SSR&#x3092;&#x30D5;&#x30EC;&#x30FC;&#x30E0;&#x30EF;&#x30FC;&#x30AF;&#x3068;&#x3057;&#x3066;&#x5B9F;&#x7528;&#x5316;
2020&#x301C; RSC / htmx / Hotwire &#x2014; &#x30DD;&#x30B9;&#x30C8;SPA&#x6642;&#x4EE3;&#x306E;&#x6A21;&#x7D22;
</code></pre>
<p>&#x4EE5;&#x4E0A;&#x304C;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x6280;&#x8853;&#x306E;&#x5927;&#x304D;&#x306A;&#x6D41;&#x308C;&#x3060;&#x3002;&#x3053;&#x3053;&#x304B;&#x3089;&#x306F;&#x5404;&#x6642;&#x4EE3;&#x3092;&#x6398;&#x308A;&#x4E0B;&#x3052;&#x3066;&#x3044;&#x304F;&#x3002;</p>
<h2 id="1-%E3%83%90%E3%83%8B%E3%83%A9js%E6%99%82%E4%BB%A3-%E2%80%94-web%E6%A8%99%E6%BA%96%E3%81%A0%E3%81%91%E3%81%A7ui%E3%82%92%E4%BD%9C%E3%82%8B%E3%81%A8%E3%81%84%E3%81%86%E3%81%93%E3%81%A8">1. &#x30D0;&#x30CB;&#x30E9;JS&#x6642;&#x4EE3; &#x2014; Web&#x6A19;&#x6E96;&#x3060;&#x3051;&#x3067;UI&#x3092;&#x4F5C;&#x308B;&#x3068;&#x3044;&#x3046;&#x3053;&#x3068;</h2>
<p>Ajax&#x306E;&#x767B;&#x5834;&#x306B;&#x3088;&#x3063;&#x3066;&#x3001;JavaScript&#x306E;&#x5F79;&#x5272;&#x306F;&#x300C;&#x3061;&#x3087;&#x3063;&#x3068;&#x3057;&#x305F;&#x52D5;&#x304D;&#x300D;&#x304B;&#x3089;&#x300C;&#x753B;&#x9762;&#x306E;&#x52D5;&#x7684;&#x306A;&#x66F8;&#x304D;&#x63DB;&#x3048;&#x300D;&#x3078;&#x3068;&#x62E1;&#x5927;&#x3057;&#x305F;&#x3002;&#x3057;&#x304B;&#x3057;&#x305D;&#x3082;&#x305D;&#x3082;&#x3001;&#x306A;&#x305C;JavaScript&#x304B;&#x3089;HTML&#x3092;&#x64CD;&#x4F5C;&#x3059;&#x308B;&#x5FC5;&#x8981;&#x304C;&#x3042;&#x308B;&#x306E;&#x3060;&#x308D;&#x3046;&#x304B;&#x3002;</p>
<h3 id="%E5%8B%95%E7%9A%84%E3%81%AAweb%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%A8dom%E6%93%8D%E4%BD%9C%E3%81%AE%E9%96%A2%E4%BF%82">&#x52D5;&#x7684;&#x306A;Web&#x30DA;&#x30FC;&#x30B8;&#x3068;DOM&#x64CD;&#x4F5C;&#x306E;&#x95A2;&#x4FC2;</h3>
<p>HTML&#x3068;CSS&#x3060;&#x3051;&#x3067;&#x4F5C;&#x3089;&#x308C;&#x305F;&#x300C;&#x9759;&#x7684;&#x306A;&#x300D;Web&#x30DA;&#x30FC;&#x30B8;&#x306F;&#x3001;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x304B;&#x3089;&#x9001;&#x3089;&#x308C;&#x3066;&#x304D;&#x305F;&#x305D;&#x306E;&#x307E;&#x307E;&#x306E;&#x59FF;&#x3067;&#x8868;&#x793A;&#x3055;&#x308C;&#x308B;&#x3002;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x304C;&#x30AF;&#x30EA;&#x30C3;&#x30AF;&#x3057;&#x3066;&#x3082;&#x30C6;&#x30AD;&#x30B9;&#x30C8;&#x3092;&#x5165;&#x529B;&#x3057;&#x3066;&#x3082;&#x3001;&#x30DA;&#x30FC;&#x30B8;&#x306E;&#x898B;&#x305F;&#x76EE;&#x306F;&#x5909;&#x308F;&#x3089;&#x306A;&#x3044;&#xFF08;&#x30EA;&#x30F3;&#x30AF;&#x3092;&#x30AF;&#x30EA;&#x30C3;&#x30AF;&#x3059;&#x308C;&#x3070;&#x5225;&#x306E;&#x30DA;&#x30FC;&#x30B8;&#x306B;&#x98DB;&#x3076;&#x304C;&#x3001;&#x305D;&#x308C;&#x306F;&#x753B;&#x9762;&#x306E;&#x66F8;&#x304D;&#x63DB;&#x3048;&#x3067;&#x306F;&#x306A;&#x304F;&#x65B0;&#x3057;&#x3044;&#x30DA;&#x30FC;&#x30B8;&#x306E;&#x8AAD;&#x307F;&#x8FBC;&#x307F;&#x3060;&#xFF09;&#x3002;</p>
<p>&#x3057;&#x304B;&#x3057;&#x73FE;&#x5B9F;&#x306E;Web&#x306B;&#x306F;&#x300C;&#x52D5;&#x7684;&#x306A;&#x300D;&#x632F;&#x308B;&#x821E;&#x3044;&#x304C;&#x6C42;&#x3081;&#x3089;&#x308C;&#x308B;&#x3002;</p>
<ul>
<li>&#x30BF;&#x30D6;&#x3092;&#x30AF;&#x30EA;&#x30C3;&#x30AF;&#x3057;&#x305F;&#x3089;&#x3001;&#x8868;&#x793A;&#x3059;&#x308B;&#x5185;&#x5BB9;&#x304C;&#x5207;&#x308A;&#x66FF;&#x308F;&#x308B;</li>
<li>&#x300C;&#x3082;&#x3063;&#x3068;&#x898B;&#x308B;&#x300D;&#x3092;&#x62BC;&#x3057;&#x305F;&#x3089;&#x3001;&#x96A0;&#x308C;&#x3066;&#x3044;&#x305F;&#x30C6;&#x30AD;&#x30B9;&#x30C8;&#x304C;&#x8868;&#x793A;&#x3055;&#x308C;&#x308B;</li>
<li>&#x30D5;&#x30A9;&#x30FC;&#x30E0;&#x306B;&#x5165;&#x529B;&#x3057;&#x305F;&#x3089;&#x3001;&#x30EA;&#x30A2;&#x30EB;&#x30BF;&#x30A4;&#x30E0;&#x3067;&#x30A8;&#x30E9;&#x30FC;&#x30E1;&#x30C3;&#x30BB;&#x30FC;&#x30B8;&#x304C;&#x51FA;&#x308B;</li>
<li>&#x5546;&#x54C1;&#x3092;&#x30AB;&#x30FC;&#x30C8;&#x306B;&#x5165;&#x308C;&#x305F;&#x3089;&#x3001;&#x30D8;&#x30C3;&#x30C0;&#x30FC;&#x306E;&#x30AB;&#x30FC;&#x30C8;&#x500B;&#x6570;&#x304C;&#x5897;&#x3048;&#x308B;</li>
</ul>
<p>&#x3053;&#x3046;&#x3057;&#x305F;&#x52D5;&#x304D;&#x306F;&#x3059;&#x3079;&#x3066;&#x3001;<strong>JavaScript&#x304C;HTML&#x3084;CSS&#x3092;&#x66F8;&#x304D;&#x63DB;&#x3048;&#x308B;&#x3053;&#x3068;&#x3067;&#x5B9F;&#x73FE;&#x3055;&#x308C;&#x3066;&#x3044;&#x308B;</strong>&#x3002;&#x30BF;&#x30D6;&#x306E;&#x5207;&#x308A;&#x66FF;&#x3048;&#x306F;&#x3001;&#x3042;&#x308B; <code>&lt;div&gt;</code> &#x3092; <code>display: none</code>&#xFF08;&#x975E;&#x8868;&#x793A;&#xFF09;&#x306B;&#x3057;&#x3066;&#x5225;&#x306E; <code>&lt;div&gt;</code> &#x3092; <code>display: block</code>&#xFF08;&#x8868;&#x793A;&#xFF09;&#x306B;&#x3059;&#x308B;&#x64CD;&#x4F5C;&#x3060;&#x3002;&#x30AB;&#x30FC;&#x30C8;&#x306E;&#x500B;&#x6570;&#x66F4;&#x65B0;&#x306F;&#x3001;&#x3042;&#x308B;&#x8981;&#x7D20;&#x306E; <code>textContent</code> &#x3092; <code>&quot;3&quot;</code> &#x304B;&#x3089; <code>&quot;4&quot;</code> &#x306B;&#x5909;&#x3048;&#x308B;&#x64CD;&#x4F5C;&#x3060;&#x3002;</p>
<p>&#x3064;&#x307E;&#x308A;&#x3001;&#x52D5;&#x7684;&#x306A;Web&#x30DA;&#x30FC;&#x30B8;&#x3092;&#x4F5C;&#x308B;&#x305F;&#x3081;&#x306B;&#x306F;&#x300C;HTML&#x306E;&#x4E2D;&#x304B;&#x3089;&#x7279;&#x5B9A;&#x306E;&#x8981;&#x7D20;&#x3092;&#x898B;&#x3064;&#x3051;&#x51FA;&#x3057;&#x3001;&#x305D;&#x306E;&#x8981;&#x7D20;&#x3092;&#x5909;&#x66F4;&#x3059;&#x308B;&#x300D;&#x3068;&#x3044;&#x3046;&#x4F5C;&#x696D;&#x304C;&#x4E0D;&#x53EF;&#x6B20;&#x306B;&#x306A;&#x308B;&#x3002;&#x3053;&#x308C;&#x304C;DOM&#xFF08;Document Object Model &#x2014; HTML&#x306E;&#x5404;&#x8981;&#x7D20;&#x3092;JavaScript&#x304B;&#x3089;&#x64CD;&#x4F5C;&#x3059;&#x308B;&#x305F;&#x3081;&#x306E;API&#xFF09;&#x64CD;&#x4F5C;&#x3060;&#x3002;</p>
<h3 id="dom%E6%93%8D%E4%BD%9C%E3%81%AE%E3%83%97%E3%83%AA%E3%83%9F%E3%83%86%E3%82%A3%E3%83%96%E3%81%95">DOM&#x64CD;&#x4F5C;&#x306E;&#x30D7;&#x30EA;&#x30DF;&#x30C6;&#x30A3;&#x30D6;&#x3055;</h3>
<p>&#x3067;&#x306F;&#x3001;&#x305D;&#x306E;&#x66F8;&#x304D;&#x63DB;&#x3048;&#x3092;&#x5B9F;&#x73FE;&#x3059;&#x308B;&#x305F;&#x3081;&#x306E;DOM&#x64CD;&#x4F5C;&#x306F;&#x5B9F;&#x969B;&#x306B;&#x306F;&#x3069;&#x3093;&#x306A;&#x30B3;&#x30FC;&#x30C9;&#x306B;&#x306A;&#x308B;&#x306E;&#x304B;&#x3002;&#x4EE5;&#x4E0B;&#x3092;&#x4E00;&#x884C;&#x305A;&#x3064;&#x8FFD;&#x3044;&#x304B;&#x3051;&#x3066;&#x307F;&#x3066;&#x307B;&#x3057;&#x3044;&#x3002;</p>
<pre><code class="language-javascript">// 2000&#x5E74;&#x4EE3;&#x521D;&#x982D;&#x306E;&#x30D0;&#x30CB;&#x30E9;JS &#x2014; Todo&#x30EA;&#x30B9;&#x30C8;&#x306B;1&#x3064;&#x306E;&#x30A2;&#x30A4;&#x30C6;&#x30E0;&#x3092;&#x8FFD;&#x52A0;&#x3059;&#x308B;&#x30B3;&#x30FC;&#x30C9;

// &#x307E;&#x305A;&#x3001;HTML&#x306E;&#x4E2D;&#x304B;&#x3089; id=&quot;todo-list&quot; &#x3092;&#x6301;&#x3064;&#x8981;&#x7D20;&#xFF08;&lt;ul&gt;&#x306A;&#x3069;&#xFF09;&#x3092;&#x63A2;&#x3057;&#x3066;&#x53D6;&#x5F97;&#x3059;&#x308B;
var list = document.getElementById(&quot;todo-list&quot;);

// &#x65B0;&#x3057;&#x3044; &lt;li&gt; &#x8981;&#x7D20;&#x3092;&#x30E1;&#x30E2;&#x30EA;&#x4E0A;&#x306B;&#x4F5C;&#x308B;&#xFF08;&#x3053;&#x306E;&#x6642;&#x70B9;&#x3067;&#x306F;&#x307E;&#x3060;&#x753B;&#x9762;&#x306B;&#x306F;&#x8868;&#x793A;&#x3055;&#x308C;&#x306A;&#x3044;&#xFF09;
var item = document.createElement(&quot;li&quot;);

// &#x4F5C;&#x3063;&#x305F; &lt;li&gt; &#x306B;CSS&#x30AF;&#x30E9;&#x30B9;&#x3092;&#x8A2D;&#x5B9A;&#x3059;&#x308B;
item.className = &quot;todo-item&quot;;

// &#x30C6;&#x30AD;&#x30B9;&#x30C8;&#x3092;&#x8A2D;&#x5B9A;&#x3059;&#x308B;
item.textContent = &quot;Buy milk&quot;;

// &#x524A;&#x9664;&#x30DC;&#x30BF;&#x30F3;&#x3082;&#x540C;&#x3058;&#x3088;&#x3046;&#x306B;&#x4E00;&#x304B;&#x3089;&#x4F5C;&#x308B;
var deleteBtn = document.createElement(&quot;button&quot;);
deleteBtn.textContent = &quot;Delete&quot;;

// &#x30DC;&#x30BF;&#x30F3;&#x304C;&#x30AF;&#x30EA;&#x30C3;&#x30AF;&#x3055;&#x308C;&#x305F;&#x6642;&#x306B;&#x5B9F;&#x884C;&#x3059;&#x308B;&#x51E6;&#x7406;&#x3092;&#x767B;&#x9332;&#x3059;&#x308B;
deleteBtn.onclick = function () {
  // &#x89AA;&#x8981;&#x7D20;&#xFF08;list&#xFF09;&#x304B;&#x3089;&#x3001;&#x3053;&#x306E; &lt;li&gt; &#x3092;&#x53D6;&#x308A;&#x9664;&#x304F;
  list.removeChild(item);
};

// &#x30DC;&#x30BF;&#x30F3;&#x3092; &lt;li&gt; &#x306E;&#x4E2D;&#x306B;&#x5165;&#x308C;&#x308B;
item.appendChild(deleteBtn);

// &#x6700;&#x5F8C;&#x306B;&#x3001;&#x5B8C;&#x6210;&#x3057;&#x305F; &lt;li&gt; &#x3092;&#x30EA;&#x30B9;&#x30C8;&#x306B;&#x8FFD;&#x52A0;&#x3059;&#x308B; &#x2014; &#x3053;&#x3053;&#x3067;&#x521D;&#x3081;&#x3066;&#x753B;&#x9762;&#x306B;&#x8868;&#x793A;&#x3055;&#x308C;&#x308B;
list.appendChild(item);
</code></pre>
<p>&#x305F;&#x3063;&#x305F;1&#x3064;&#x306E;Todo&#x30A2;&#x30A4;&#x30C6;&#x30E0;&#x3092;&#x8FFD;&#x52A0;&#x3059;&#x308B;&#x3060;&#x3051;&#x3067;&#x3053;&#x306E;&#x30B3;&#x30FC;&#x30C9;&#x91CF;&#x3060;&#x3002;&#x3084;&#x3063;&#x3066;&#x3044;&#x308B;&#x3053;&#x3068;&#x306F;&#x5358;&#x7D14;&#x3067;&#x3001;&#x300C;&#x8981;&#x7D20;&#x3092;&#x4F5C;&#x308B; &#x2192; &#x4E2D;&#x8EAB;&#x3092;&#x8A2D;&#x5B9A;&#x3059;&#x308B; &#x2192; &#x89AA;&#x8981;&#x7D20;&#x306B;&#x304F;&#x3063;&#x3064;&#x3051;&#x308B;&#x300D;&#x306E;&#x7E70;&#x308A;&#x8FD4;&#x3057;&#x306B;&#x904E;&#x304E;&#x306A;&#x3044;&#x3002;&#x3060;&#x304C;&#x3001;&#x3053;&#x306E;&#x624B;&#x4F5C;&#x696D;&#x3092;UI&#x306E;&#x3042;&#x3089;&#x3086;&#x308B;&#x90E8;&#x5206;&#x306B;&#x5BFE;&#x3057;&#x3066;&#x884C;&#x308F;&#x306A;&#x3051;&#x308C;&#x3070;&#x306A;&#x3089;&#x306A;&#x304B;&#x3063;&#x305F;&#x3002;</p>
<h3 id="dom%E6%A4%9C%E7%B4%A2api%E3%81%AE%E4%B8%8D%E8%B6%B3">DOM&#x691C;&#x7D22;API&#x306E;&#x4E0D;&#x8DB3;</h3>
<p>&#x3053;&#x306E;&#x300C;&#x8981;&#x7D20;&#x3092;&#x898B;&#x3064;&#x3051;&#x51FA;&#x3059;&#x300D;&#x3068;&#x3044;&#x3046;&#x6700;&#x521D;&#x306E;&#x30B9;&#x30C6;&#x30C3;&#x30D7;&#x304B;&#x3089;&#x3057;&#x3066;&#x3001;&#x5F53;&#x6642;&#x306E;API&#x306F;&#x4E0D;&#x4FBF;&#x3060;&#x3063;&#x305F;&#x3002;</p>
<pre><code class="language-javascript">// ID&#x3067;&#x8981;&#x7D20;&#x3092;&#x63A2;&#x3059; &#x2014; 1&#x3064;&#x3060;&#x3051;&#x898B;&#x3064;&#x304B;&#x308B;
document.getElementById(&quot;main-title&quot;);

// &#x30BF;&#x30B0;&#x540D;&#x3067;&#x63A2;&#x3059; &#x2014; &#x5168;&#x3066;&#x306E; &lt;li&gt; &#x304C;&#x8FD4;&#x3063;&#x3066;&#x304F;&#x308B;
document.getElementsByTagName(&quot;li&quot;);

// &#x30AF;&#x30E9;&#x30B9;&#x540D;&#x3067;&#x63A2;&#x3059; &#x2014; &#x5168;&#x3066;&#x306E; .active &#x304C;&#x8FD4;&#x3063;&#x3066;&#x304F;&#x308B;
document.getElementsByClassName(&quot;active&quot;);
</code></pre>
<p>&#x305F;&#x3068;&#x3048;&#x3070;&#x300C;<code>todo-list</code> &#x306E;&#x4E2D;&#x306B;&#x3042;&#x308B;&#x3001;<code>completed</code> &#x30AF;&#x30E9;&#x30B9;&#x304C;&#x3064;&#x3044;&#x305F; <code>li</code> &#x8981;&#x7D20;&#x3060;&#x3051;&#x300D;&#x3092;&#x63A2;&#x3057;&#x305F;&#x3044;&#x5834;&#x5408;&#x3001;CSS&#x3067;&#x306A;&#x3089; <code>.todo-list li.completed</code> &#x3068;&#x4E00;&#x767A;&#x3067;&#x66F8;&#x3051;&#x308B;&#x3002;&#x3057;&#x304B;&#x3057;&#x5F53;&#x6642;&#x306E;JavaScript&#x3067;&#x306F;&#x3001;&#x307E;&#x305A;&#x30EA;&#x30B9;&#x30C8;&#x3092;&#x53D6;&#x5F97;&#x3057;&#x3001;&#x305D;&#x306E;&#x4E2D;&#x306E; <code>li</code> &#x3092;&#x5168;&#x90E8;&#x53D6;&#x308A;&#x51FA;&#x3057;&#x3001;&#x4E00;&#x3064;&#x305A;&#x3064;&#x30AF;&#x30E9;&#x30B9;&#x540D;&#x3092;&#x8ABF;&#x3079;&#x308B;......&#x3068;&#x3044;&#x3046;&#x30EB;&#x30FC;&#x30D7;&#x3092;&#x66F8;&#x304B;&#x306A;&#x3051;&#x308C;&#x3070;&#x306A;&#x3089;&#x306A;&#x304B;&#x3063;&#x305F;&#x3002;CSS&#x30BB;&#x30EC;&#x30AF;&#x30BF;&#x3067;&#x691C;&#x7D22;&#x3067;&#x304D;&#x308B; <code>querySelector</code> &#x304C;&#x6A19;&#x6E96;&#x5316;&#x3055;&#x308C;&#x305F;&#x306E;&#x306F;2009&#x5E74;&#x9803;&#x306E;&#x3053;&#x3068;&#x3060;&#x3002;</p>
<h3 id="%E3%82%B3%E3%83%BC%E3%83%AB%E3%83%90%E3%83%83%E3%82%AF%E5%9C%B0%E7%8D%84">&#x30B3;&#x30FC;&#x30EB;&#x30D0;&#x30C3;&#x30AF;&#x5730;&#x7344;</h3>
<p>&#x3082;&#x3046;&#x4E00;&#x3064;&#x306E;&#x5927;&#x304D;&#x306A;&#x554F;&#x984C;&#x304C;&#x3001;&#x975E;&#x540C;&#x671F;&#x51E6;&#x7406;&#xFF08;&#x7D50;&#x679C;&#x304C;&#x3059;&#x3050;&#x306B;&#x8FD4;&#x3063;&#x3066;&#x3053;&#x306A;&#x3044;&#x51E6;&#x7406;&#xFF09;&#x306E;&#x6271;&#x3044;&#x3060;&#x3063;&#x305F;&#x3002;</p>
<p>&#x305F;&#x3068;&#x3048;&#x3070;&#x3001;Ajax&#x3067;&#x30C7;&#x30FC;&#x30BF;&#x3092;&#x53D6;&#x5F97;&#x3059;&#x308B;&#x5834;&#x9762;&#x3092;&#x8003;&#x3048;&#x3088;&#x3046;&#x3002;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x3078;&#x306E;&#x30EA;&#x30AF;&#x30A8;&#x30B9;&#x30C8;&#x306F;&#x30CD;&#x30C3;&#x30C8;&#x30EF;&#x30FC;&#x30AF;&#x3092;&#x7D4C;&#x7531;&#x3059;&#x308B;&#x305F;&#x3081;&#x3001;&#x7D50;&#x679C;&#x304C;&#x8FD4;&#x3063;&#x3066;&#x304F;&#x308B;&#x307E;&#x3067;&#x6642;&#x9593;&#x304C;&#x304B;&#x304B;&#x308B;&#x3002;&#x305D;&#x306E;&#x9593;&#x3001;&#x30DA;&#x30FC;&#x30B8;&#x5168;&#x4F53;&#x304C;&#x30D5;&#x30EA;&#x30FC;&#x30BA;&#x3057;&#x3066;&#x3057;&#x307E;&#x3063;&#x3066;&#x306F;&#x56F0;&#x308B;&#x306E;&#x3067;&#x3001;JavaScript&#x306F;&#x300C;&#x7D50;&#x679C;&#x304C;&#x8FD4;&#x3063;&#x3066;&#x304D;&#x305F;&#x3089;&#x3001;&#x3053;&#x306E;&#x95A2;&#x6570;&#x3092;&#x547C;&#x3093;&#x3067;&#x6559;&#x3048;&#x3066;&#x306D;&#x3002;&#x305D;&#x306E;&#x9593;&#x4ED6;&#x306E;&#x51E6;&#x7406;&#x9032;&#x3081;&#x3066;&#x304A;&#x304F;&#x304B;&#x3089;&#x300D;&#x3068;&#x3044;&#x3046;&#x5F62;&#x3067;&#x30B3;&#x30FC;&#x30EB;&#x30D0;&#x30C3;&#x30AF;&#x95A2;&#x6570;&#x3092;&#x6E21;&#x3059;&#x3002;</p>
<pre><code class="language-javascript">// &#x300C;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x60C5;&#x5831;&#x3092;&#x53D6;&#x5F97;&#x3057;&#x3001;&#x305D;&#x306E;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x306E;&#x6295;&#x7A3F;&#x4E00;&#x89A7;&#x3092;&#x53D6;&#x5F97;&#x3057;&#x3001;&#x6700;&#x65B0;&#x6295;&#x7A3F;&#x306E;&#x8A73;&#x7D30;&#x3092;&#x53D6;&#x5F97;&#x3059;&#x308B;&#x300D;

// &#x307E;&#x305A;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x60C5;&#x5831;&#x3092;&#x53D6;&#x5F97;&#x3059;&#x308B;
getUser(userId, function (user) {
  // &#x2191; &#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x60C5;&#x5831;&#x304C;&#x8FD4;&#x3063;&#x3066;&#x304D;&#x305F;&#x3089;&#x3053;&#x306E;&#x95A2;&#x6570;&#x304C;&#x547C;&#x3070;&#x308C;&#x308B;

  // &#x6B21;&#x306B;&#x3001;&#x305D;&#x306E;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x306E;&#x6295;&#x7A3F;&#x4E00;&#x89A7;&#x3092;&#x53D6;&#x5F97;&#x3059;&#x308B;
  getPosts(user.id, function (posts) {
    // &#x2191; &#x6295;&#x7A3F;&#x4E00;&#x89A7;&#x304C;&#x8FD4;&#x3063;&#x3066;&#x304D;&#x305F;&#x3089;&#x3053;&#x306E;&#x95A2;&#x6570;&#x304C;&#x547C;&#x3070;&#x308C;&#x308B;

    // &#x3055;&#x3089;&#x306B;&#x3001;&#x6700;&#x65B0;&#x6295;&#x7A3F;&#x306E;&#x8A73;&#x7D30;&#x3092;&#x53D6;&#x5F97;&#x3059;&#x308B;
    getPostDetail(posts[0].id, function (detail) {
      // &#x2191; &#x8A73;&#x7D30;&#x304C;&#x8FD4;&#x3063;&#x3066;&#x304D;&#x305F;&#x3089;&#x3053;&#x306E;&#x95A2;&#x6570;&#x304C;&#x547C;&#x3070;&#x308C;&#x308B;

      // &#x3053;&#x3053;&#x3067;&#x3088;&#x3046;&#x3084;&#x304F;&#x5168;&#x30C7;&#x30FC;&#x30BF;&#x304C;&#x63C3;&#x3044;&#x3001;&#x753B;&#x9762;&#x3092;&#x66F4;&#x65B0;&#x3059;&#x308B;
      displayPostDetail(detail);
    });
  });
});
</code></pre>
<p>&#x30B3;&#x30FC;&#x30EB;&#x30D0;&#x30C3;&#x30AF;&#x95A2;&#x6570;&#x3068;&#x306F;&#x3001;&#x300C;&#x3042;&#x308B;&#x51E6;&#x7406;&#x304C;&#x7D42;&#x308F;&#x3063;&#x305F;&#x3089;&#x547C;&#x3073;&#x51FA;&#x3057;&#x3066;&#x3082;&#x3089;&#x3046;&#x95A2;&#x6570;&#x300D;&#x306E;&#x3053;&#x3068;&#x3060;&#x3002;&#x4E0A;&#x306E;&#x4F8B;&#x3067;&#x306F;3&#x6BB5;&#x306E;&#x30B3;&#x30FC;&#x30EB;&#x30D0;&#x30C3;&#x30AF;&#x304C;&#x5165;&#x308C;&#x5B50;&#x306B;&#x306A;&#x3063;&#x3066;&#x3044;&#x308B;&#x3002;&#x300C;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x3092;&#x53D6;&#x5F97;&#x3057;&#x3066;&#x304B;&#x3089; &#x2192; &#x6295;&#x7A3F;&#x4E00;&#x89A7;&#x3092;&#x53D6;&#x5F97;&#x3057;&#x3066;&#x304B;&#x3089; &#x2192; &#x8A73;&#x7D30;&#x3092;&#x53D6;&#x5F97;&#x3059;&#x308B;&#x300D;&#x3068;&#x3044;&#x3046;&#x9806;&#x5E8F;&#x306E;&#x4F9D;&#x5B58;&#x95A2;&#x4FC2;&#x304C;&#x3042;&#x308B;&#x305F;&#x3081;&#x3001;&#x305D;&#x308C;&#x305E;&#x308C;&#x306E;&#x300C;&#x5B8C;&#x4E86;&#x5F8C;&#x300D;&#x306E;&#x51E6;&#x7406;&#x3092;&#x524D;&#x306E;&#x30B3;&#x30FC;&#x30EB;&#x30D0;&#x30C3;&#x30AF;&#x306E;&#x4E2D;&#x306B;&#x66F8;&#x304F;&#x3057;&#x304B;&#x306A;&#x3044;&#x3002;</p>
<p>&#x3053;&#x308C;&#x304C;5&#x6BB5;&#x3001;10&#x6BB5;&#x3068;&#x6DF1;&#x304F;&#x306A;&#x308B;&#x3068;&#x3001;&#x30B3;&#x30FC;&#x30C9;&#x306F;&#x53F3;&#x306B;&#x53F3;&#x306B;&#x30A4;&#x30F3;&#x30C7;&#x30F3;&#x30C8;&#x304C;&#x6DF1;&#x307E;&#x308A;&#x3001;&#x8AAD;&#x307F;&#x89E3;&#x304F;&#x306E;&#x304C;&#x6975;&#x3081;&#x3066;&#x56F0;&#x96E3;&#x306B;&#x306A;&#x308B;&#x3002;&#x3053;&#x308C;&#x304C;&#x300C;&#x30B3;&#x30FC;&#x30EB;&#x30D0;&#x30C3;&#x30AF;&#x5730;&#x7344;&#x300D;&#x3068;&#x547C;&#x3070;&#x308C;&#x305F;&#x72B6;&#x614B;&#x3060;&#x3002;</p>
<p>&#xFF08;&#x73FE;&#x4EE3;&#x306E;JavaScript&#x3067;&#x306F; <code>async/await</code> &#x3068;&#x3044;&#x3046;&#x4ED5;&#x7D44;&#x307F;&#x304C;&#x3042;&#x308A;&#x3001;&#x540C;&#x3058;&#x51E6;&#x7406;&#x3092;&#x5E73;&#x5766;&#x306B;&#x66F8;&#x3051;&#x308B;&#x3002;&#x3057;&#x304B;&#x3057;&#x5F53;&#x6642;&#x306F;&#x305D;&#x308C;&#x304C;&#x306A;&#x304B;&#x3063;&#x305F;&#x3002;&#xFF09;</p>
<h3 id="%E7%8A%B6%E6%85%8B%E8%BF%BD%E8%B7%A1%E3%81%AE%E5%9B%B0%E9%9B%A3%E3%81%95">&#x72B6;&#x614B;&#x8FFD;&#x8DE1;&#x306E;&#x56F0;&#x96E3;&#x3055;</h3>
<p>&#x3053;&#x3046;&#x3057;&#x305F;DOM&#x64CD;&#x4F5C;&#x30B3;&#x30FC;&#x30C9;&#x304C;&#x81A8;&#x3089;&#x3093;&#x3067;&#x304F;&#x308B;&#x3068;&#x3001;&#x300C;&#x4ECA;&#x3001;&#x753B;&#x9762;&#x306F;&#x3069;&#x3046;&#x3044;&#x3046;&#x72B6;&#x614B;&#x306B;&#x3042;&#x308B;&#x304B;&#x300D;&#x3092;&#x8FFD;&#x8DE1;&#x3059;&#x308B;&#x3053;&#x3068;&#x304C;&#x6975;&#x3081;&#x3066;&#x56F0;&#x96E3;&#x306B;&#x306A;&#x3063;&#x305F;&#x3002;&#x3053;&#x306E;&#x8F9B;&#x3055;&#x3092;&#x64EC;&#x4F3C;&#x7684;&#x306B;&#x4F53;&#x9A13;&#x3057;&#x3066;&#x307F;&#x3088;&#x3046;&#x3002;</p>
<p>&#x4EE5;&#x4E0B;&#x306E;&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x4E0A;&#x304B;&#x3089;&#x9806;&#x306B;&#x8AAD;&#x3093;&#x3067;&#x3001;<strong>&#x6700;&#x5F8C;&#x306B;&#x753B;&#x9762;&#x304C;&#x3069;&#x3046;&#x306A;&#x3063;&#x3066;&#x3044;&#x308B;&#x304B;</strong>&#x3092;&#x982D;&#x306E;&#x4E2D;&#x3067;&#x8FFD;&#x3044;&#x304B;&#x3051;&#x3066;&#x307F;&#x3066;&#x307B;&#x3057;&#x3044;&#x3002;</p>
<pre><code class="language-javascript">// &#x521D;&#x671F;&#x72B6;&#x614B;: &#x30DC;&#x30BF;&#x30F3;A, &#x30DC;&#x30BF;&#x30F3;B, &#x30E1;&#x30C3;&#x30BB;&#x30FC;&#x30B8;&#x6B04;&#x304C;&#x3042;&#x308B;

document.getElementById(&quot;msg&quot;).textContent = &quot;&#x3088;&#x3046;&#x3053;&#x305D;&quot;;
document.getElementById(&quot;btnA&quot;).style.display = &quot;block&quot;;
document.getElementById(&quot;btnB&quot;).style.display = &quot;none&quot;;

// &#x30DC;&#x30BF;&#x30F3;A&#x3092;&#x30AF;&#x30EA;&#x30C3;&#x30AF;&#x3057;&#x305F;&#x3089;...
document.getElementById(&quot;btnA&quot;).onclick = function () {
  document.getElementById(&quot;msg&quot;).textContent = &quot;A&#x304C;&#x62BC;&#x3055;&#x308C;&#x307E;&#x3057;&#x305F;&quot;;
  document.getElementById(&quot;btnA&quot;).style.display = &quot;none&quot;;
  document.getElementById(&quot;btnB&quot;).style.display = &quot;block&quot;;
  document.getElementById(&quot;msg&quot;).style.color = &quot;blue&quot;;
};

// &#x30DC;&#x30BF;&#x30F3;B&#x3092;&#x30AF;&#x30EA;&#x30C3;&#x30AF;&#x3057;&#x305F;&#x3089;...
document.getElementById(&quot;btnB&quot;).onclick = function () {
  document.getElementById(&quot;msg&quot;).textContent = &quot;B&#x304C;&#x62BC;&#x3055;&#x308C;&#x307E;&#x3057;&#x305F;&quot;;
  document.getElementById(&quot;btnB&quot;).style.display = &quot;none&quot;;
  document.getElementById(&quot;btnA&quot;).style.display = &quot;block&quot;;
  document.getElementById(&quot;msg&quot;).style.color = &quot;red&quot;;
};
</code></pre>
<p>&#x3053;&#x306E;&#x7A0B;&#x5EA6;&#x306A;&#x3089;&#x307E;&#x3060;&#x8FFD;&#x3048;&#x308B;&#x3002;&#x3067;&#x306F;&#x8CEA;&#x554F;&#x3060;&#x3002;</p>
<p><strong>&#x300C;&#x30DC;&#x30BF;&#x30F3;A&#x3092;&#x62BC;&#x3057;&#x3066;&#x3001;&#x6B21;&#x306B;&#x30DC;&#x30BF;&#x30F3;B&#x3092;&#x62BC;&#x3057;&#x3066;&#x3001;&#x3082;&#x3046;&#x4E00;&#x5EA6;&#x30DC;&#x30BF;&#x30F3;A&#x3092;&#x62BC;&#x3057;&#x305F;&#x5F8C;&#x306E;&#x753B;&#x9762;&#x306F;&#x3069;&#x3046;&#x306A;&#x3063;&#x3066;&#x3044;&#x308B;&#x304B;&#xFF1F;&#x300D;</strong></p>
<p>&#x3053;&#x308C;&#x306B;&#x56DE;&#x7B54;&#x3059;&#x308B;&#x305F;&#x3081;&#x306B;&#x306F;&#x3001;&#x982D;&#x306E;&#x4E2D;&#x3067;3&#x56DE;&#x5206;&#x306E;&#x72B6;&#x614B;&#x5909;&#x66F4;&#x3092;&#x30B7;&#x30DF;&#x30E5;&#x30EC;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x3059;&#x308B;&#x5FC5;&#x8981;&#x304C;&#x3042;&#x308B;&#x3002;</p>
<p>&#x3053;&#x308C;&#x304C;&#x305F;&#x3063;&#x305F;20&#x884C;&#x306E;&#x30B3;&#x30FC;&#x30C9;&#x3067;&#x306E;&#x8A71;&#x3060;&#x3002;&#x5B9F;&#x969B;&#x306E;&#x30A2;&#x30D7;&#x30EA;&#x30B1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x3067;&#x306F;&#x3001;&#x4F55;&#x5341;&#x500B;&#x3082;&#x306E;&#x8981;&#x7D20;&#x304C;&#x3001;&#x4F55;&#x767E;&#x884C;&#x3082;&#x306E;&#x30A4;&#x30D9;&#x30F3;&#x30C8;&#x30CF;&#x30F3;&#x30C9;&#x30E9;&#x304B;&#x3089;&#x64CD;&#x4F5C;&#x3055;&#x308C;&#x308B;&#x3002;&#x3057;&#x304B;&#x3082;&#x30A4;&#x30D9;&#x30F3;&#x30C8;&#x306F;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x306E;&#x64CD;&#x4F5C;&#x9806;&#x306B;&#x3088;&#x3063;&#x3066;&#x767A;&#x706B;&#x30BF;&#x30A4;&#x30DF;&#x30F3;&#x30B0;&#x304C;&#x5909;&#x308F;&#x308B;&#x3002;&#x300C;&#x30DC;&#x30BF;&#x30F3;A&#x306E;&#x51E6;&#x7406;&#x4E2D;&#x306B;&#x3001;&#x30BF;&#x30A4;&#x30DE;&#x30FC;&#x3067;&#x767B;&#x9332;&#x3057;&#x305F;&#x5225;&#x306E;&#x51E6;&#x7406;&#x304C;&#x5272;&#x308A;&#x8FBC;&#x3080;&#x300D;&#x3068;&#x3044;&#x3063;&#x305F;&#x3053;&#x3068;&#x3082;&#x8D77;&#x304D;&#x308B;&#x3002;</p>
<p>&#x3053;&#x3046;&#x306A;&#x308B;&#x3068;&#x3001;&#x300C;&#x4ECA;&#x3053;&#x306E;&#x8981;&#x7D20;&#x306F;&#x8868;&#x793A;&#x3055;&#x308C;&#x3066;&#x3044;&#x308B;&#x306E;&#x304B;&#xFF1F; &#x30C6;&#x30AD;&#x30B9;&#x30C8;&#x306F;&#x4F55;&#x306B;&#x306A;&#x3063;&#x3066;&#x3044;&#x308B;&#x306E;&#x304B;&#xFF1F; &#x3069;&#x306E;&#x30AF;&#x30E9;&#x30B9;&#x304C;&#x3064;&#x3044;&#x3066;&#x3044;&#x308B;&#x306E;&#x304B;&#xFF1F;&#x300D;&#x3092;&#x6B63;&#x78BA;&#x306B;&#x8FFD;&#x8DE1;&#x3059;&#x308B;&#x3053;&#x3068;&#x306F;&#x3001;&#x4EBA;&#x9593;&#x306E;&#x8A8D;&#x77E5;&#x80FD;&#x529B;&#x3092;&#x8D85;&#x3048;&#x308B;&#x3002;&#x3053;&#x308C;&#x304C;&#x300C;DOM&#x306E;&#x72B6;&#x614B;&#x304C;&#x8FFD;&#x8DE1;&#x4E0D;&#x80FD;&#x306B;&#x306A;&#x308B;&#x300D;&#x3068;&#x3044;&#x3046;&#x554F;&#x984C;&#x306E;&#x6B63;&#x4F53;&#x3060;&#x3002;</p>
<p>&#x5B9F;&#x969B;&#x3001;&#x30D0;&#x30CB;&#x30E9;JS&#x3067;&#x30D5;&#x30EC;&#x30FC;&#x30E0;&#x30EF;&#x30FC;&#x30AF;&#x306E;&#x5F79;&#x5272;&#x3092;&#x679C;&#x305F;&#x305B;&#x308B;&#x3088;&#x3046;&#x306A;&#x6A19;&#x6E96;API&#x306F;&#x307B;&#x3068;&#x3093;&#x3069;&#x9032;&#x5316;&#x3057;&#x306A;&#x304B;&#x3063;&#x305F;&#x3068;&#x3044;&#x3046;&#x6307;&#x6458;&#x3082;&#x3042;&#x308B;&#x3002;&#x3082;&#x3061;&#x308D;&#x3093;&#x3001;&#x304B;&#x3064;&#x3066;&#x306F;JavaScript&#x306A;&#x3057;&#x3067;&#x3082;Web&#x306F;&#x4F5C;&#x308C;&#x305F;&#x3002;&#x3060;&#x304C;&#x3001;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x304C;&#x671F;&#x5F85;&#x3059;&#x308B;UI&#x4F53;&#x9A13;&#x306F;&#x5E74;&#x3005;&#x9AD8;&#x5EA6;&#x306B;&#x306A;&#x3063;&#x3066;&#x3044;&#x304D;&#x3001;&#x30D0;&#x30CB;&#x30E9;JS&#x3060;&#x3051;&#x3067;&#x306F;&#x5BFE;&#x5FDC;&#x3057;&#x304D;&#x308C;&#x306A;&#x304F;&#x306A;&#x3063;&#x3066;&#x3044;&#x3063;&#x305F;&#x306E;&#x3060;&#x3002;</p>
<hr>
<h2 id="2-jquery%E6%99%82%E4%BB%A3-%E2%80%94-%E4%BE%BF%E5%88%A9%E3%81%AA%E9%81%93%E5%85%B7%E3%81%8C%E6%A7%8B%E9%80%A0%E3%82%92%E4%B8%8E%E3%81%88%E3%81%A6%E3%81%8F%E3%82%8C%E3%81%AA%E3%81%8B%E3%81%A3%E3%81%9F%E8%A9%B1">2. jQuery&#x6642;&#x4EE3; &#x2014; &#x4FBF;&#x5229;&#x306A;&#x9053;&#x5177;&#x304C;&#x69CB;&#x9020;&#x3092;&#x4E0E;&#x3048;&#x3066;&#x304F;&#x308C;&#x306A;&#x304B;&#x3063;&#x305F;&#x8A71;</h2>
<h3 id="jquery%E3%81%8C%E8%A7%A3%E6%B1%BA%E3%81%97%E3%81%9F%E3%81%93%E3%81%A8">jQuery&#x304C;&#x89E3;&#x6C7A;&#x3057;&#x305F;&#x3053;&#x3068;</h3>
<p>2006&#x5E74;&#x306B;John Resig&#x304C;&#x516C;&#x958B;&#x3057;&#x305F;jQuery&#x306F;&#x3001;&#x30D0;&#x30CB;&#x30E9;JS&#x6642;&#x4EE3;&#x306E;&#x4E3B;&#x8981;&#x306A;&#x82E6;&#x75DB;&#x3092;&#x89E3;&#x6D88;&#x3057;&#x305F;&#x3002;</p>
<pre><code class="language-javascript">// &#x30D0;&#x30CB;&#x30E9;JS &#x2014; &#x9577;&#x304F;&#x3066;&#x3001;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x306B;&#x3088;&#x3063;&#x3066;&#x306F;&#x52D5;&#x304B;&#x306A;&#x3044;&#x304B;&#x3082;&#x3057;&#x308C;&#x306A;&#x3044;
document.getElementById(&quot;myElement&quot;).style.display = &quot;none&quot;;

// jQuery &#x2014; &#x5727;&#x5012;&#x7684;&#x306B;&#x77ED;&#x304F;&#x3001;&#x3069;&#x306E;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x3067;&#x3082;&#x52D5;&#x304F;
$(&quot;#myElement&quot;).hide();
</code></pre>
<p>jQuery&#x306E; <code>$()</code> &#x306F;&#x4E07;&#x80FD;&#x306E;DOM&#x691C;&#x7D22;&#x95A2;&#x6570;&#x3060;&#x3002;CSS&#x30BB;&#x30EC;&#x30AF;&#x30BF;&#x3092;&#x305D;&#x306E;&#x307E;&#x307E;&#x6E21;&#x305B;&#x308B;&#x306E;&#x3067;&#x3001;&#x524D;&#x7AE0;&#x3067;&#x89E6;&#x308C;&#x305F;&#x300C;<code>querySelector</code> &#x304C;&#x306A;&#x304B;&#x3063;&#x305F;&#x554F;&#x984C;&#x300D;&#x3092;&#x4E00;&#x6C17;&#x306B;&#x89E3;&#x6C7A;&#x3057;&#x305F;&#x3002;</p>
<ul>
<li><strong>&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x9593;&#x306E;&#x5DEE;&#x7570;&#x3092;&#x5438;&#x53CE;</strong>: <code>$()</code> &#x4E00;&#x3064;&#x3067;&#x3069;&#x306E;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x3067;&#x3082;&#x52D5;&#x304F;</li>
<li><strong>CSS&#x30BB;&#x30EC;&#x30AF;&#x30BF;&#x3067;DOM&#x691C;&#x7D22;</strong>: <code>$(&apos;.todo-item.completed&apos;)</code> &#x306E;&#x3088;&#x3046;&#x306B;&#x3001;CSS&#x3068;&#x540C;&#x3058;&#x611F;&#x899A;&#x3067;&#x8981;&#x7D20;&#x3092;&#x63A2;&#x305B;&#x308B;</li>
<li><strong>&#x30E1;&#x30BD;&#x30C3;&#x30C9;&#x30C1;&#x30A7;&#x30FC;&#x30F3;</strong>: &#x4E00;&#x3064;&#x306E;&#x64CD;&#x4F5C;&#x7D50;&#x679C;&#x306B;&#x5BFE;&#x3057;&#x3066;&#x6B21;&#x306E;&#x64CD;&#x4F5C;&#x3092; <code>.</code> &#x3067;&#x9023;&#x306D;&#x3066;&#x66F8;&#x3051;&#x308B;</li>
</ul>
<pre><code class="language-javascript">// &#x30E1;&#x30BD;&#x30C3;&#x30C9;&#x30C1;&#x30A7;&#x30FC;&#x30F3;: &#x300C;&#x30EA;&#x30B9;&#x30C8;&#x3092;&#x63A2;&#x3059; &#x2192; &#x4E2D;&#x306E;li&#x3092;&#x5168;&#x90E8;&#x53D6;&#x5F97; &#x2192; active&#x30AF;&#x30E9;&#x30B9;&#x3092;&#x4ED8;&#x3051;&#x308B; &#x2192; &#x30D5;&#x30A7;&#x30FC;&#x30C9;&#x30A4;&#x30F3;&#x3059;&#x308B;&#x300D;
// &#x3053;&#x308C;&#x3092;&#x4E00;&#x884C;&#x3067;&#x66F8;&#x3051;&#x308B;
$(&quot;#list&quot;).find(&quot;li&quot;).addClass(&quot;active&quot;).fadeIn();

// &#x3082;&#x3057;&#x30D0;&#x30CB;&#x30E9;JS&#x3067;&#x66F8;&#x304F;&#x3068;...
var list = document.getElementById(&quot;list&quot;);
var items = list.getElementsByTagName(&quot;li&quot;);
for (var i = 0; i &lt; items.length; i++) {
  items[i].className += &quot; active&quot;;
  // &#x30D5;&#x30A7;&#x30FC;&#x30C9;&#x30A4;&#x30F3;&#x306E;&#x30A2;&#x30CB;&#x30E1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x306F;&#x81EA;&#x524D;&#x3067;&#x5B9F;&#x88C5;&#x3059;&#x308B;&#x5FC5;&#x8981;&#x304C;&#x3042;&#x308B;...
}
</code></pre>
<ul>
<li><strong>Ajax&#x901A;&#x4FE1;&#x306E;&#x7C21;&#x7D20;&#x5316;</strong>: <code>$.ajax()</code> &#x3067;XMLHttpRequest&#x306E;&#x8907;&#x96D1;&#x3055;&#x3092;&#x96A0;&#x853D;</li>
</ul>
<p>jQuery&#x306F;&#x300C;DOM&#x3092;&#x4FBF;&#x5229;&#x306B;&#x64CD;&#x4F5C;&#x3059;&#x308B;&#x30C4;&#x30FC;&#x30EB;&#x300D;&#x3068;&#x3057;&#x3066;&#x306F;&#x6975;&#x3081;&#x3066;&#x512A;&#x79C0;&#x3060;&#x3063;&#x305F;&#x3002;&#x4E00;&#x6642;&#x671F;&#x306F;Web&#x30B5;&#x30A4;&#x30C8;&#x306E;&#x7D04;70%&#x4EE5;&#x4E0A;&#x304C;jQuery&#x3092;&#x4F7F;&#x7528;&#x3057;&#x3066;&#x3044;&#x305F;&#x3068;&#x3055;&#x308C;&#x308B;&#x3002;</p>
<h3 id="jquery%E3%81%8C%E8%A7%A3%E6%B1%BA%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%8B%E3%81%A3%E3%81%9F%E3%81%93%E3%81%A8-%E2%80%94-%E6%9C%AC%E8%B3%AA%E7%9A%84%E3%81%AA%E5%95%8F%E9%A1%8C">jQuery&#x304C;&#x89E3;&#x6C7A;&#x3067;&#x304D;&#x306A;&#x304B;&#x3063;&#x305F;&#x3053;&#x3068; &#x2014; &#x672C;&#x8CEA;&#x7684;&#x306A;&#x554F;&#x984C;</h3>
<p>&#x3057;&#x304B;&#x3057;jQuery&#x306F;&#x3001;DOM&#x3092;&#x64CD;&#x4F5C;&#x3059;&#x308B;&#x300C;&#x65B9;&#x6CD5;&#x300D;&#x306F;&#x6539;&#x5584;&#x3057;&#x305F;&#x304C;&#x3001;DOM&#x3092;&#x64CD;&#x4F5C;&#x3059;&#x308B;&#x300C;&#x69CB;&#x9020;&#x300D;&#x306F;&#x63D0;&#x4F9B;&#x3057;&#x306A;&#x304B;&#x3063;&#x305F;&#x3002;&#x64CD;&#x4F5C;&#x304C;&#x4FBF;&#x5229;&#x306B;&#x306A;&#x3063;&#x305F;&#x3076;&#x3093;&#x3001;&#x69CB;&#x9020;&#x306A;&#x304D;&#x30B3;&#x30FC;&#x30C9;&#x304C;&#x5927;&#x91CF;&#x306B;&#x66F8;&#x304B;&#x308C;&#x3001;&#x554F;&#x984C;&#x306F;&#x3080;&#x3057;&#x308D;&#x6DF1;&#x523B;&#x5316;&#x3057;&#x305F;&#x3002;&#x3053;&#x3053;&#x306B;3&#x3064;&#x306E;&#x6839;&#x672C;&#x7684;&#x306A;&#x554F;&#x984C;&#x304C;&#x3042;&#x308B;&#x3002;</p>
<p><strong>&#x554F;&#x984C;1: &#x72B6;&#x614B;&#x3068;DOM&#x306E;&#x4E8C;&#x91CD;&#x7BA1;&#x7406;</strong></p>
<pre><code class="language-javascript">// jQuery&#x3067;&#x306E;Todo&#x30A2;&#x30D7;&#x30EA;&#xFF08;&#x5178;&#x578B;&#x7684;&#x306A;&#x554F;&#x984C;&#x30B3;&#x30FC;&#x30C9;&#xFF09;
var todos = []; // &#x2190; JavaScript&#x304C;&#x7BA1;&#x7406;&#x3059;&#x308B;&#x300C;&#x30C7;&#x30FC;&#x30BF;&#x300D;

$(&quot;#add-btn&quot;).click(function () {
  var text = $(&quot;#input&quot;).val();
  todos.push({ text: text, done: false }); // &#x2190; &#x30C7;&#x30FC;&#x30BF;&#x3092;&#x66F4;&#x65B0;

  // &#x2193; &#x30C7;&#x30FC;&#x30BF;&#x3092;&#x5909;&#x3048;&#x305F;&#x3089;&#x3001;DOM&#x3082;&#x624B;&#x52D5;&#x3067;&#x5909;&#x3048;&#x306A;&#x3044;&#x3068;&#x3044;&#x3051;&#x306A;&#x3044;
  var $li = $(&quot;&lt;li&gt;&quot;).text(text);
  var $checkbox = $(&apos;&lt;input type=&quot;checkbox&quot;&gt;&apos;).change(function () {
    // &#x2193; DOM&#x306E;&#x64CD;&#x4F5C;&#xFF08;&#x30C1;&#x30A7;&#x30C3;&#x30AF;&#x30DC;&#x30C3;&#x30AF;&#x30B9;&#xFF09;&#x304C;&#x8D77;&#x304D;&#x305F;&#x3089;&#x3001;&#x30C7;&#x30FC;&#x30BF;&#x3082;&#x624B;&#x52D5;&#x3067;&#x5909;&#x3048;&#x306A;&#x3044;&#x3068;&#x3044;&#x3051;&#x306A;&#x3044;
    var index = $(this).parent().index();
    todos[index].done = $(this).is(&quot;:checked&quot;);
    $(this).parent().toggleClass(&quot;completed&quot;);
    updateCount(); // &#x2190; &#x30AB;&#x30A6;&#x30F3;&#x30C8;&#x8868;&#x793A;&#x3082;&#x624B;&#x52D5;&#x3067;&#x66F4;&#x65B0;
  });
  $li.prepend($checkbox);
  $(&quot;#todo-list&quot;).append($li); // &#x2190; DOM&#x306B;&#x8FFD;&#x52A0;
  updateCount(); // &#x2190; &#x30AB;&#x30A6;&#x30F3;&#x30C8;&#x8868;&#x793A;&#x3082;&#x624B;&#x52D5;&#x3067;&#x66F4;&#x65B0;
});
</code></pre>
<p>&#x3053;&#x3053;&#x3067;&#x8D77;&#x304D;&#x3066;&#x3044;&#x308B;&#x4E8C;&#x91CD;&#x7BA1;&#x7406;&#x3092;&#x6574;&#x7406;&#x3057;&#x3088;&#x3046;&#x3002;</p>
<p><img src="http://blog.shinonome.io/content/images/2026/03/diagram-4.jpg" alt="React&#x306E;&#x767A;&#x660E;&#x3068;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x601D;&#x60F3;&#x306E;&#x5909;&#x9077;" loading="lazy"></p>
<pre><code>&#x30C7;&#x30FC;&#x30BF;&#xFF08;JavaScript&#x5074;&#xFF09;     &#x753B;&#x9762;&#xFF08;DOM&#x5074;&#xFF09;
&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;         &#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;
todos = [                 &lt;ul id=&quot;todo-list&quot;&gt;
  {text:&quot;Buy milk&quot;,         &lt;li&gt;Buy milk &#x2610;&lt;/li&gt;
   done: false}            &lt;/ul&gt;
]

&#x2192; &#x30C7;&#x30FC;&#x30BF;&#x3092;&#x5909;&#x3048;&#x305F;&#x3089;&#x3001;DOM&#x3082;&#x624B;&#x52D5;&#x3067;&#x5408;&#x308F;&#x305B;&#x308B;
&#x2190; DOM&#x304C;&#x5909;&#x308F;&#x3063;&#x305F;&#x3089;&#x3001;&#x30C7;&#x30FC;&#x30BF;&#x3082;&#x624B;&#x52D5;&#x3067;&#x5408;&#x308F;&#x305B;&#x308B;
&#x2190; &#x3055;&#x3089;&#x306B;&#x30AB;&#x30A6;&#x30F3;&#x30C8;&#x8868;&#x793A;&#x3082;&#x624B;&#x52D5;&#x3067;&#x5408;&#x308F;&#x305B;&#x308B;

&#x3069;&#x3061;&#x3089;&#x304B;&#x4E00;&#x65B9;&#x306E;&#x66F4;&#x65B0;&#x3092;&#x5FD8;&#x308C;&#x308B;&#x3068;&#x3001;&#x30C7;&#x30FC;&#x30BF;&#x3068;&#x753B;&#x9762;&#x304C;&#x30BA;&#x30EC;&#x308B;
</code></pre>
<p>&#x3053;&#x306E;&#x300C;&#x30C7;&#x30FC;&#x30BF;&#x306E;&#x771F;&#x5B9F;&#x300D;&#x3068;&#x300C;&#x753B;&#x9762;&#x306E;&#x771F;&#x5B9F;&#x300D;&#x304C;&#x4E8C;&#x7B87;&#x6240;&#x306B;&#x5B58;&#x5728;&#x3057;&#x3066;&#x3057;&#x307E;&#x3046;&#x3053;&#x3068;&#x304C;&#x554F;&#x984C;&#x306E;&#x6838;&#x5FC3;&#x3060;&#x3002;todo&#x3092;1&#x3064;&#x8FFD;&#x52A0;&#x3059;&#x308B;&#x3060;&#x3051;&#x3067;&#x3001;<code>todos</code> &#x914D;&#x5217;&#x306E;&#x66F4;&#x65B0;&#x3001;<code>&lt;li&gt;</code> &#x306E;&#x4F5C;&#x6210;&#x3001;&#x30AB;&#x30A6;&#x30F3;&#x30C8;&#x306E;&#x66F4;&#x65B0;&#x3001;&#x30C1;&#x30A7;&#x30C3;&#x30AF;&#x6642;&#x306E;&#x30C7;&#x30FC;&#x30BF;&#x66F4;&#x65B0;&#x3001;&#x30C1;&#x30A7;&#x30C3;&#x30AF;&#x6642;&#x306E;&#x30AF;&#x30E9;&#x30B9;&#x5207;&#x308A;&#x66FF;&#x3048;......&#x3068;&#x8907;&#x6570;&#x306E;&#x7B87;&#x6240;&#x3092;&#x540C;&#x671F;&#x3057;&#x306A;&#x3051;&#x308C;&#x3070;&#x306A;&#x3089;&#x306A;&#x3044;&#x3002;<strong>&#x4E00;&#x7B87;&#x6240;&#x3067;&#x3082;&#x5FD8;&#x308C;&#x308B;&#x3068;&#x3001;&#x30C7;&#x30FC;&#x30BF;&#x3068;&#x753B;&#x9762;&#x304C;&#x30BA;&#x30EC;&#x308B;</strong>&#x3002;&#x305D;&#x3057;&#x3066;&#x30A2;&#x30D7;&#x30EA;&#x30B1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x304C;&#x5927;&#x304D;&#x304F;&#x306A;&#x308B;&#x307B;&#x3069;&#x3001;&#x3053;&#x306E;&#x540C;&#x671F;&#x306F;&#x8907;&#x96D1;&#x306B;&#x306A;&#x308A;&#x3001;&#x78BA;&#x5B9F;&#x306B;&#x7834;&#x7DBB;&#x3059;&#x308B;&#x3002;</p>
<p><strong>&#x554F;&#x984C;2: DOM&#x306E;&#x72B6;&#x614B;&#x304C;&#x8FFD;&#x8DE1;&#x4E0D;&#x80FD;&#x306B;&#x306A;&#x308B;</strong></p>
<p>jQuery&#x306E;&#x30B3;&#x30FC;&#x30C9;&#x306F;&#x300C;DOM&#x306B;&#x5BFE;&#x3059;&#x308B;&#x64CD;&#x4F5C;&#x306E;&#x547D;&#x4EE4;&#x5217;&#x300D;&#x3060;&#x3002;&#x524D;&#x7AE0;&#x306E;&#x72B6;&#x614B;&#x8FFD;&#x8DE1;&#x306E;&#x4F8B;&#x3092;jQuery&#x3067;&#x62E1;&#x5927;&#x3057;&#x3066;&#x307F;&#x3088;&#x3046;&#x3002;</p>
<pre><code class="language-javascript">// &#x901A;&#x77E5;&#x30D1;&#x30CD;&#x30EB;&#x306E;jQuery&#x30B3;&#x30FC;&#x30C9;&#xFF08;&#x5B9F;&#x969B;&#x306E;&#x30D7;&#x30ED;&#x30B8;&#x30A7;&#x30AF;&#x30C8;&#x304B;&#x3089;&#x7C21;&#x7565;&#x5316;&#x3057;&#x305F;&#x3082;&#x306E;&#xFF09;
$(&quot;#notification-bell&quot;).click(function () {
  $(&quot;#panel&quot;).slideToggle(); // &#x30D1;&#x30CD;&#x30EB;&#x306E;&#x8868;&#x793A;/&#x975E;&#x8868;&#x793A;&#x3092;&#x5207;&#x308A;&#x66FF;&#x3048;
  $(this).toggleClass(&quot;active&quot;); // &#x30D9;&#x30EB;&#x306E;&#x30B9;&#x30BF;&#x30A4;&#x30EB;&#x3092;&#x5207;&#x308A;&#x66FF;&#x3048;
  if ($(&quot;#panel&quot;).is(&quot;:visible&quot;)) {
    $.get(&quot;/notifications&quot;, function (html) {
      $(&quot;#panel&quot;).html(html); // &#x901A;&#x77E5;&#x3092;&#x8AAD;&#x307F;&#x8FBC;&#x3093;&#x3067;&#x8868;&#x793A;
      $(&quot;#badge&quot;).text(&quot;&quot;); // &#x30D0;&#x30C3;&#x30B8;&#x3092;&#x6D88;&#x3059;
      $(&quot;#badge&quot;).removeClass(&quot;has-new&quot;); // &#x30D0;&#x30C3;&#x30B8;&#x306E;&#x30B9;&#x30BF;&#x30A4;&#x30EB;&#x3082;&#x6D88;&#x3059;
    });
  }
});

$(&quot;#panel&quot;).on(&quot;click&quot;, &quot;.mark-read&quot;, function () {
  $(this).closest(&quot;.notification&quot;).fadeOut(); // &#x901A;&#x77E5;&#x3092;&#x4E00;&#x3064;&#x6D88;&#x3059;
  var count = $(&quot;#panel .notification:visible&quot;).length;
  if (count === 0) {
    $(&quot;#panel&quot;).append(&apos;&lt;p class=&quot;empty&quot;&gt;&#x901A;&#x77E5;&#x306F;&#x3042;&#x308A;&#x307E;&#x305B;&#x3093;&lt;/p&gt;&apos;);
  }
});

// &#x3055;&#x3089;&#x306B;&#x5225;&#x306E;&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x306B;...
setInterval(function () {
  $.get(&quot;/notifications/count&quot;, function (data) {
    if (data.count &gt; 0) {
      $(&quot;#badge&quot;).text(data.count).addClass(&quot;has-new&quot;);
    }
  });
}, 30000); // 30&#x79D2;&#x3054;&#x3068;&#x306B;&#x65B0;&#x7740;&#x78BA;&#x8A8D;
</code></pre>
<p>&#x3053;&#x306E;&#x30B3;&#x30FC;&#x30C9;&#x306E;&#x554F;&#x984C;&#x306F;&#x3001;3&#x3064;&#x306E;&#x30A4;&#x30D9;&#x30F3;&#x30C8;&#x30CF;&#x30F3;&#x30C9;&#x30E9;&#x304C; <code>#panel</code> <code>#badge</code> &#x3068;&#x3044;&#x3063;&#x305F;&#x540C;&#x3058;DOM&#x8981;&#x7D20;&#x3092;&#x5225;&#x3005;&#x306E;&#x5834;&#x6240;&#x304B;&#x3089;&#x64CD;&#x4F5C;&#x3057;&#x3066;&#x3044;&#x308B;&#x3053;&#x3068;&#x3060;&#x3002;&#x3057;&#x304B;&#x3082; <code>slideToggle</code> &#x306E;&#x5B8C;&#x4E86;&#x30BF;&#x30A4;&#x30DF;&#x30F3;&#x30B0;&#x3068;Ajax&#x901A;&#x4FE1;&#x306E;&#x5B8C;&#x4E86;&#x30BF;&#x30A4;&#x30DF;&#x30F3;&#x30B0;&#x306F;&#x4FDD;&#x8A3C;&#x3055;&#x308C;&#x3066;&#x3044;&#x306A;&#x3044;&#x3002;&#x524D;&#x7AE0;&#x3067;&#x4F53;&#x9A13;&#x3057;&#x305F;&#x3088;&#x3046;&#x306B;&#x3001;&#x3053;&#x3046;&#x3057;&#x305F;&#x64CD;&#x4F5C;&#x306E;&#x7A4D;&#x307F;&#x91CD;&#x306D;&#x306F;&#x4EBA;&#x9593;&#x306B;&#x306F;&#x8FFD;&#x8DE1;&#x4E0D;&#x80FD;&#x306B;&#x306A;&#x308B;&#x3002;</p>
<p>&#x30D0;&#x30CB;&#x30E9;JS&#x6642;&#x4EE3;&#x306E;&#x8AB2;&#x984C;&#x306F;&#x89E3;&#x6C7A;&#x3055;&#x308C;&#x306A;&#x304B;&#x3063;&#x305F;&#x308F;&#x3051;&#x3060;&#x3002;&#x5B9F;&#x969B;&#x3001;&#x5F53;&#x6642;&#x306E;jQuery&#x3067;&#x4F5C;&#x308A;&#x8FBC;&#x3093;&#x3060;&#x30DA;&#x30FC;&#x30B8;&#x306F;&#x3001;&#x9577;&#x304F;&#x64CD;&#x4F5C;&#x3057;&#x3066;&#x3044;&#x308B;&#x3068;&#x8868;&#x793A;&#x304C;&#x58CA;&#x308C;&#x3066;&#x30EA;&#x30ED;&#x30FC;&#x30C9;&#x304C;&#x5FC5;&#x8981;&#x306B;&#x306A;&#x308B;&#x3053;&#x3068;&#x304C;&#x73CD;&#x3057;&#x304F;&#x306A;&#x304B;&#x3063;&#x305F;&#xFF08;&#x3053;&#x308C;&#x306F;&#x306E;&#x3061;&#x306B;Backbone.js&#x306A;&#x3069;&#x306E;&#x521D;&#x671F;SPA&#x30D5;&#x30EC;&#x30FC;&#x30E0;&#x30EF;&#x30FC;&#x30AF;&#x304C;&#x767B;&#x5834;&#x3057;&#x3066;&#x3082;&#x3001;DOM&#x66F4;&#x65B0;&#x304C;jQuery&#x624B;&#x66F8;&#x304D;&#x3067;&#x3042;&#x308B;&#x9650;&#x308A;&#x540C;&#x69D8;&#x3060;&#x3063;&#x305F;&#xFF09;&#x3002;</p>
<p><strong>&#x554F;&#x984C;3: &#x5C5E;&#x4EBA;&#x7684;&#x3067;&#x8AAD;&#x3081;&#x306A;&#x3044;&#x30B3;&#x30FC;&#x30C9;</strong></p>
<p>&#x300C;&#x4ED6;&#x4EBA;&#x304C;&#x66F8;&#x3044;&#x305F;&#x751F;DOM&#x64CD;&#x4F5C;&#x306F;&#x8AAD;&#x3081;&#x306A;&#x3044;&#x3082;&#x306E;&#x300D;&#x3068;&#x3044;&#x3046;&#x8A8D;&#x8B58;&#x306F;&#x3001;jQuery&#x6642;&#x4EE3;&#x306E;&#x958B;&#x767A;&#x8005;&#x306B;&#x3068;&#x3063;&#x3066;&#x306F;&#x5E38;&#x8B58;&#x3060;&#x3063;&#x305F;&#x3002;React&#x304C;&#x767B;&#x5834;&#x3057;&#x3066;&#x521D;&#x3081;&#x3066;&#x3001;&#x4ED6;&#x4EBA;&#x304C;&#x66F8;&#x3044;&#x305F;&#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#x304C;&#x8AAD;&#x89E3;&#x3067;&#x304D;&#x308B;&#x3088;&#x3046;&#x306B;&#x306A;&#x3063;&#x305F;&#x3068;&#x8A00;&#x308F;&#x308C;&#x308B;&#x307B;&#x3069;&#x3060;&#x3002;</p>
<p>&#x306A;&#x305C;&#x8AAD;&#x3081;&#x306A;&#x3044;&#x306E;&#x304B;&#x3002;&#x540C;&#x3058;&#x300C;&#x30BF;&#x30D6;&#x5207;&#x308A;&#x66FF;&#x3048;UI&#x300D;&#x3092;2&#x4EBA;&#x306E;&#x958B;&#x767A;&#x8005;&#x304C;&#x66F8;&#x304F;&#x3068;&#x3001;&#x3053;&#x3046;&#x306A;&#x308B;&#x3053;&#x3068;&#x304C;&#x3042;&#x3063;&#x305F;&#x3002;</p>
<pre><code class="language-javascript">// &#x958B;&#x767A;&#x8005;A&#x306E;&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;: CSS&#x30AF;&#x30E9;&#x30B9;&#x3067;&#x5236;&#x5FA1;
$(&quot;.tab&quot;).click(function () {
  $(&quot;.tab&quot;).removeClass(&quot;active&quot;);
  $(this).addClass(&quot;active&quot;);
  $(&quot;.panel&quot;).hide();
  $(&quot;#&quot; + $(this).data(&quot;panel&quot;)).show();
});

// &#x958B;&#x767A;&#x8005;B&#x306E;&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;: data&#x5C5E;&#x6027;&#x3068;&#x30A4;&#x30F3;&#x30C7;&#x30C3;&#x30AF;&#x30B9;&#x3067;&#x5236;&#x5FA1;
$(&quot;.tab-header&quot;).on(&quot;click&quot;, &quot;li&quot;, function () {
  var idx = $(this).index();
  $(this).siblings().css(&quot;font-weight&quot;, &quot;normal&quot;);
  $(this).css(&quot;font-weight&quot;, &quot;bold&quot;);
  $(&quot;.tab-body&quot;).children().eq(idx).show().siblings().hide();
});
</code></pre>
<p>&#x3069;&#x3061;&#x3089;&#x3082;&#x300C;&#x30BF;&#x30D6;&#x5207;&#x308A;&#x66FF;&#x3048;&#x300D;&#x3092;&#x5B9F;&#x73FE;&#x3057;&#x3066;&#x3044;&#x308B;&#x304C;&#x3001;&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;&#x304C;&#x5168;&#x304F;&#x9055;&#x3046;&#x3002;HTML&#x69CB;&#x9020;&#x306E;&#x524D;&#x63D0;&#x3082;&#x9055;&#x3046;&#x3002;&#x5909;&#x6570;&#x540D;&#x3084;&#x5236;&#x5FA1;&#x306E;&#x4ED5;&#x65B9;&#x3082;&#x9055;&#x3046;&#x3002;10&#x4EBA;&#x3044;&#x308C;&#x3070;10&#x901A;&#x308A;&#x306E;&#x66F8;&#x304D;&#x65B9;&#x306B;&#x306A;&#x308B;&#x3002;&#x3053;&#x308C;&#x306F;&#x30B9;&#x30AD;&#x30EB;&#x306E;&#x554F;&#x984C;&#x3067;&#x306F;&#x306A;&#x304F;&#x3001;&#x3082;&#x3063;&#x3068;&#x6839;&#x672C;&#x7684;&#x306A;&#x554F;&#x984C;&#x3060;&#x3002;</p>
<h3 id="%E6%89%8B%E7%B6%9A%E3%81%8D%E7%9A%84%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%A8ui%E3%81%AE%E7%9B%B8%E6%80%A7%E3%81%AE%E6%82%AA%E3%81%95">&#x624B;&#x7D9A;&#x304D;&#x7684;&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30DF;&#x30F3;&#x30B0;&#x3068;UI&#x306E;&#x76F8;&#x6027;&#x306E;&#x60AA;&#x3055;</h3>
<p>&#x3053;&#x3053;&#x307E;&#x3067;&#x898B;&#x3066;&#x304D;&#x305F;jQuery&#x306E;&#x30B3;&#x30FC;&#x30C9;&#x306F;&#x3059;&#x3079;&#x3066;<strong>&#x624B;&#x7D9A;&#x304D;&#x7684;</strong>&#xFF08;imperative&#xFF09;&#x306A;&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30DF;&#x30F3;&#x30B0;&#x30B9;&#x30BF;&#x30A4;&#x30EB;&#x3067;&#x66F8;&#x304B;&#x308C;&#x3066;&#x3044;&#x308B;&#x3002;&#x624B;&#x7D9A;&#x304D;&#x7684;&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30DF;&#x30F3;&#x30B0;&#x3068;&#x306F;&#x3001;&#x300C;&#x3053;&#x306E;&#x8981;&#x7D20;&#x3092;&#x53D6;&#x5F97;&#x3057;&#x3066;&#x3001;&#x3053;&#x306E;&#x30AF;&#x30E9;&#x30B9;&#x3092;&#x5916;&#x3057;&#x3066;&#x3001;&#x6B21;&#x306B;&#x3053;&#x306E;&#x30AF;&#x30E9;&#x30B9;&#x3092;&#x4ED8;&#x3051;&#x3066;&#x3001;&#x3042;&#x306E;&#x30D1;&#x30CD;&#x30EB;&#x3092;&#x96A0;&#x3057;&#x3066;&#x3001;&#x3053;&#x306E;&#x30D1;&#x30CD;&#x30EB;&#x3092;&#x8868;&#x793A;&#x3059;&#x308B;&#x300D;&#x2014;&#x2014;&#x3068;&#x3044;&#x3046;&#x3088;&#x3046;&#x306B;&#x3001;<strong>&#x51E6;&#x7406;&#x306E;&#x624B;&#x9806;&#x3092;&#x4E00;&#x3064;&#x305A;&#x3064;&#x547D;&#x4EE4;&#x3068;&#x3057;&#x3066;&#x8A18;&#x8FF0;&#x3059;&#x308B;</strong>&#x30B9;&#x30BF;&#x30A4;&#x30EB;&#x3060;&#x3002;&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30DF;&#x30F3;&#x30B0;&#x306E;&#x4E16;&#x754C;&#x3067;&#x306F;&#x6700;&#x3082;&#x57FA;&#x672C;&#x7684;&#x3067;&#x5E83;&#x304F;&#x4F7F;&#x308F;&#x308C;&#x3066;&#x3044;&#x308B;&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;&#x3067;&#x3042;&#x308A;&#x3001;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x30B5;&#x30A4;&#x30C9;&#x306E;&#x958B;&#x767A;&#xFF08;Go, Java, Python&#x7B49;&#xFF09;&#x3067;&#x306F;&#x4ECA;&#x3067;&#x3082;&#x4E3B;&#x6D41;&#x306E;&#x30B9;&#x30BF;&#x30A4;&#x30EB;&#x3067;&#x3042;&#x308B;&#x3002;</p>
<p>&#x3057;&#x304B;&#x3057;&#x3001;UI&#x306E;&#x69CB;&#x7BC9;&#x306B;&#x304A;&#x3044;&#x3066;&#x306F;&#x3001;&#x624B;&#x7D9A;&#x304D;&#x7684;&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;&#x306B;&#x306F;&#x69CB;&#x9020;&#x7684;&#x306A;&#x554F;&#x984C;&#x304C;&#x3042;&#x3063;&#x305F;&#x3002;&#x624B;&#x7D9A;&#x304D;&#x7684;&#x30B3;&#x30FC;&#x30C9;&#x306F;&#x300C;&#x73FE;&#x5728;&#x306E;&#x72B6;&#x614B;&#x304B;&#x3089;&#x3069;&#x3046;&#x5909;&#x5316;&#x3055;&#x305B;&#x308B;&#x304B;&#x300D;&#x3092;&#x8A18;&#x8FF0;&#x3059;&#x308B;&#x3002;&#x3064;&#x307E;&#x308A;&#x3001;&#x4ECA;&#x306E;&#x753B;&#x9762;&#x304C;&#x3069;&#x3046;&#x306A;&#x3063;&#x3066;&#x3044;&#x308B;&#x304B;&#x3092;&#x628A;&#x63E1;&#x3057;&#x305F;&#x4E0A;&#x3067;&#x3001;&#x305D;&#x3053;&#x304B;&#x3089;&#x306E;&#x5DEE;&#x5206;&#x3092;&#x624B;&#x9806;&#x3068;&#x3057;&#x3066;&#x66F8;&#x304F;&#x5FC5;&#x8981;&#x304C;&#x3042;&#x308B;&#x3002;&#x30BF;&#x30D6;&#x304C;1&#x3064;&#x306A;&#x3089;&#x307E;&#x3060;&#x3044;&#x3044;&#x3002;&#x3060;&#x304C;&#x64CD;&#x4F5C;&#x304C;&#x91CD;&#x306A;&#x308A;&#x3001;&#x975E;&#x540C;&#x671F;&#x51E6;&#x7406;&#x304C;&#x7D61;&#x307F;&#x3001;&#x72B6;&#x614B;&#x306E;&#x7D44;&#x307F;&#x5408;&#x308F;&#x305B;&#x304C;&#x5897;&#x3048;&#x308B;&#x3068;&#x3001;&#x300C;&#x4ECA;&#x306E;&#x753B;&#x9762;&#x304C;&#x3069;&#x3046;&#x306A;&#x3063;&#x3066;&#x3044;&#x308B;&#x304B;&#x300D;&#x306E;&#x628A;&#x63E1;&#x81EA;&#x4F53;&#x304C;&#x4E0D;&#x53EF;&#x80FD;&#x306B;&#x306A;&#x3063;&#x3066;&#x3044;&#x304F;&#x3002;&#x3053;&#x308C;&#x304C;&#x524D;&#x7AE0;&#x3067;&#x898B;&#x305F;&#x300C;DOM&#x306E;&#x72B6;&#x614B;&#x8FFD;&#x8DE1;&#x304C;&#x4E0D;&#x53EF;&#x80FD;&#x300D;&#x3068;&#x3044;&#x3046;&#x554F;&#x984C;&#x306E;&#x6B63;&#x4F53;&#x3060;&#x3002;</p>
<p>&#x3053;&#x308C;&#x306B;&#x5BFE;&#x3057;&#x3066;&#x3001;&#x3082;&#x3046;&#x4E00;&#x3064;&#x306E;&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;&#x304C;&#x3042;&#x308B;&#x3002;<strong>&#x5BA3;&#x8A00;&#x7684;</strong>&#xFF08;declarative&#xFF09;&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30DF;&#x30F3;&#x30B0;&#x3060;&#x3002;&#x624B;&#x9806;&#x3092;&#x66F8;&#x304F;&#x306E;&#x3067;&#x306F;&#x306A;&#x304F;&#x3001;&#x300C;&#x3053;&#x306E;&#x30C7;&#x30FC;&#x30BF;&#x306E;&#x3068;&#x304D;&#x3001;UI&#x306F;&#x3053;&#x3046;&#x898B;&#x3048;&#x308B;&#x3079;&#x304D;&#x3060;&#x300D;&#x3068;&#x3044;&#x3046;<strong>&#x7D50;&#x679C;&#x306E;&#x72B6;&#x614B;&#x3092;&#x8A18;&#x8FF0;&#x3059;&#x308B;</strong>&#x30B9;&#x30BF;&#x30A4;&#x30EB;&#x3067;&#x3042;&#x308B;&#x3002;SQL&#x304C;&#x8EAB;&#x8FD1;&#x306A;&#x4F8B;&#x3060;&#x2014;&#x2014;&#x300C;&#x3069;&#x306E;&#x30C7;&#x30FC;&#x30BF;&#x304C;&#x6B32;&#x3057;&#x3044;&#x304B;&#x300D;&#x3092;&#x5BA3;&#x8A00;&#x3059;&#x308C;&#x3070;&#x3001;&#x30C7;&#x30FC;&#x30BF;&#x30D9;&#x30FC;&#x30B9;&#x304C;&#x53D6;&#x5F97;&#x65B9;&#x6CD5;&#x3092;&#x6C7A;&#x3081;&#x308B;&#x3002;UI&#x306B;&#x304A;&#x3044;&#x3066;&#x3082;&#x540C;&#x3058;&#x767A;&#x60F3;&#x3067;&#x3001;&#x300C;&#x3053;&#x306E;&#x30C7;&#x30FC;&#x30BF;&#x306E;&#x3068;&#x304D;&#x306E;&#x753B;&#x9762;&#x306F;&#x3053;&#x3046;&#x3060;&#x300D;&#x3068;&#x5BA3;&#x8A00;&#x3067;&#x304D;&#x308C;&#x3070;&#x3001;&#x624B;&#x9806;&#x3092;&#x4E00;&#x3064;&#x305A;&#x3064;&#x66F8;&#x304F;&#x5FC5;&#x8981;&#x306F;&#x306A;&#x304F;&#x306A;&#x308B;&#x3002;</p>
<p>jQuery&#x6642;&#x4EE3;&#x306E;&#x958B;&#x767A;&#x8005;&#x305F;&#x3061;&#x306E;&#x9593;&#x306B;&#x3082;&#x3001;&#x3053;&#x306E;&#x300C;&#x5BA3;&#x8A00;&#x7684;&#x306B;UI&#x3092;&#x66F8;&#x304D;&#x305F;&#x3044;&#x300D;&#x3068;&#x3044;&#x3046;&#x30CB;&#x30FC;&#x30BA;&#x306F;&#x6CB8;&#x3005;&#x3068;&#x6E67;&#x304D;&#x4E0A;&#x304C;&#x3063;&#x3066;&#x3044;&#x305F;&#x3002;&#x624B;&#x7D9A;&#x304D;&#x7684;DOM&#x64CD;&#x4F5C;&#x306E;&#x9650;&#x754C;&#x306F;&#x3001;&#x7D4C;&#x9A13;&#x3092;&#x7A4D;&#x3080;&#x307B;&#x3069;&#x75DB;&#x611F;&#x3059;&#x308B;&#x3082;&#x306E;&#x3060;&#x3063;&#x305F;&#x304B;&#x3089;&#x3060;&#x3002;</p>
<h3 id="%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3%E3%81%A8%E3%81%84%E3%81%86%E9%83%A8%E5%88%86%E7%9A%84%E3%81%AA%E8%A7%A3">&#x30C6;&#x30F3;&#x30D7;&#x30EC;&#x30FC;&#x30C8;&#x30A8;&#x30F3;&#x30B8;&#x30F3;&#x3068;&#x3044;&#x3046;&#x90E8;&#x5206;&#x7684;&#x306A;&#x89E3;</h3>
<p>&#x5B9F;&#x969B;&#x3001;&#x4E00;&#x90E8;&#x306E;&#x958B;&#x767A;&#x8005;&#x306F;&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x30B5;&#x30A4;&#x30C9;&#x306E;&#x30C6;&#x30F3;&#x30D7;&#x30EC;&#x30FC;&#x30C8;&#x30A8;&#x30F3;&#x30B8;&#x30F3;&#xFF08;doT, Mustache, Handlebars&#x7B49;&#xFF09;&#x3092;&#x4F7F;&#x3044;&#x3001;&#x300C;&#x30C7;&#x30FC;&#x30BF;&#x304B;&#x3089;HTML&#x3092;&#x4E00;&#x62EC;&#x751F;&#x6210;&#x3057;&#x3066;innerHTML&#x3067;&#x5DEE;&#x3057;&#x8FBC;&#x3080;&#x300D;&#x3068;&#x3044;&#x3046;&#x5BA3;&#x8A00;&#x7684;&#x306A;&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;&#x3092;&#x8A66;&#x307F;&#x3066;&#x3044;&#x305F;&#x3002;</p>
<pre><code class="language-javascript">// doT&#x30C6;&#x30F3;&#x30D7;&#x30EC;&#x30FC;&#x30C8;&#x30A8;&#x30F3;&#x30B8;&#x30F3;&#x306E;&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;
// &#x30C6;&#x30F3;&#x30D7;&#x30EC;&#x30FC;&#x30C8;&#xFF08;HTML&#x306E;&#x96DB;&#x5F62;&#xFF09;&#x3092;&#x5B9A;&#x7FA9;&#x3057;&#x3066;&#x3001;&#x30C7;&#x30FC;&#x30BF;&#x3092;&#x6D41;&#x3057;&#x8FBC;&#x3080;&#x3068;HTML&#x304C;&#x51FA;&#x6765;&#x4E0A;&#x304C;&#x308B;
var template = doT.template(
  &quot;&lt;ul&gt;{{~it:item}}&lt;li&gt;{{=item.text}}&lt;/li&gt;{{~}}&lt;/ul&gt;&quot;,
);
var html = template(todos); // &#x30C7;&#x30FC;&#x30BF;&#x304B;&#x3089;HTML&#x6587;&#x5B57;&#x5217;&#x3092;&#x751F;&#x6210;
$(&quot;#todo-list&quot;).html(html); // &#x65E2;&#x5B58;&#x306E;&#x4E2D;&#x8EAB;&#x3092;&#x4E38;&#x3054;&#x3068;&#x7F6E;&#x304D;&#x63DB;&#x3048;
</code></pre>
<p>&#x3053;&#x308C;&#x306F;&#x300C;&#x30C7;&#x30FC;&#x30BF; &#x2192; HTML&#x300D;&#x3068;&#x3044;&#x3046;&#x4E00;&#x65B9;&#x5411;&#x306E;&#x5909;&#x63DB;&#x3067;&#x3042;&#x308A;&#x3001;&#x5BA3;&#x8A00;&#x7684;&#x3068;&#x8A00;&#x3048;&#x308B;&#x3002;&#x3057;&#x304B;&#x3057;&#x3053;&#x306E;&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;&#x306B;&#x306F;&#x81F4;&#x547D;&#x7684;&#x306A;&#x554F;&#x984C;&#x304C;&#x3042;&#x3063;&#x305F;&#x3002;&#x30C7;&#x30FC;&#x30BF;&#x304C;&#x5909;&#x308F;&#x308B;&#x305F;&#x3073;&#x306B;DOM&#x5168;&#x4F53;&#x3092;&#x4F5C;&#x308A;&#x76F4;&#x3059;&#x305F;&#x3081;&#x3001;&#x30D1;&#x30D5;&#x30A9;&#x30FC;&#x30DE;&#x30F3;&#x30B9;&#x304C;&#x60AA;&#x304F;&#x3001;&#x30D5;&#x30A9;&#x30FC;&#x30AB;&#x30B9;&#x72B6;&#x614B;&#x3084;&#x30B9;&#x30AF;&#x30ED;&#x30FC;&#x30EB;&#x4F4D;&#x7F6E;&#x304C;&#x5931;&#x308F;&#x308C;&#x3001;&#x30A2;&#x30CB;&#x30E1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x3082;&#x9014;&#x5207;&#x308C;&#x308B;&#x3002;&#x305F;&#x3068;&#x3048;&#x3070;&#x5165;&#x529B;&#x4E2D;&#x306E;&#x30C6;&#x30AD;&#x30B9;&#x30C8;&#x30D5;&#x30A3;&#x30FC;&#x30EB;&#x30C9;&#x304C;&#x6D88;&#x3048;&#x3066;&#x518D;&#x751F;&#x6210;&#x3055;&#x308C;&#x3066;&#x3057;&#x307E;&#x3046;&#x3002;</p>
<p>&#x3053;&#x3046;&#x3057;&#x305F;&#x30C6;&#x30F3;&#x30D7;&#x30EC;&#x30FC;&#x30C8;&#x30A8;&#x30F3;&#x30B8;&#x30F3;&#x306E;&#x5229;&#x7528;&#x306F;&#x5C11;&#x6570;&#x6D3E;&#x3067;&#x3001;&#x591A;&#x304F;&#x306E;&#x958B;&#x767A;&#x8005;&#x306F;jQuery&#x3092;&#x4F7F;&#x3044;&#x7D9A;&#x3051;&#x3066;&#x3044;&#x305F;&#x3002;&#x300C;&#x5BA3;&#x8A00;&#x7684;UI&#x300D;&#x3068;&#x3044;&#x3046;&#x6982;&#x5FF5;&#x81EA;&#x4F53;&#x306F;&#x30C6;&#x30F3;&#x30D7;&#x30EC;&#x30FC;&#x30C8;&#x30A8;&#x30F3;&#x30B8;&#x30F3;&#x306E;&#x6642;&#x4EE3;&#x304B;&#x3089;&#x5B58;&#x5728;&#x3057;&#x3066;&#x3044;&#x305F;&#x304C;&#x3001;React&#x306E;&#x767B;&#x5834;&#x3067;&#x7206;&#x767A;&#x7684;&#x306B;&#x8A8D;&#x77E5;&#x3055;&#x308C;&#x308B;&#x3053;&#x3068;&#x306B;&#x306A;&#x308B;&#x3002;</p>
<p>&#x300C;&#x5BA3;&#x8A00;&#x7684;&#x306B;&#x66F8;&#x304D;&#x305F;&#x3044;&#xFF08;&#x30C6;&#x30F3;&#x30D7;&#x30EC;&#x30FC;&#x30C8;&#xFF09;&#x300D;&#x3068;&#x300C;&#x52B9;&#x7387;&#x7684;&#x306B;&#x66F4;&#x65B0;&#x3057;&#x305F;&#x3044;&#xFF08;&#x5DEE;&#x5206;&#x66F4;&#x65B0;&#xFF09;&#x300D;&#x306E;&#x4E21;&#x7ACB; &#x2014; &#x3053;&#x308C;&#x3053;&#x305D;&#x304C;React&#x304C;&#x5F8C;&#x306B;&#x89E3;&#x6C7A;&#x3059;&#x308B;&#x554F;&#x3044;&#x3060;&#x3063;&#x305F;&#x3002;</p>
<hr>
<h2 id="3-%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%A0%E3%81%91%E3%81%A7%E3%81%AF%E5%AE%8C%E7%B5%90%E3%81%97%E3%81%AA%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F%E7%90%86%E7%94%B1">3. &#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x3060;&#x3051;&#x3067;&#x306F;&#x5B8C;&#x7D50;&#x3057;&#x306A;&#x304F;&#x306A;&#x3063;&#x305F;&#x7406;&#x7531;</h2>
<h3 id="%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%B5%E3%82%A4%E3%83%89%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%81%AE%E6%A7%8B%E9%80%A0">&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x30B5;&#x30A4;&#x30C9;&#x30C6;&#x30F3;&#x30D7;&#x30EC;&#x30FC;&#x30C8;&#x306E;&#x69CB;&#x9020;</h3>
<p>&#x524D;&#x7AE0;&#x3067;&#x30C6;&#x30F3;&#x30D7;&#x30EC;&#x30FC;&#x30C8;&#x30A8;&#x30F3;&#x30B8;&#x30F3;&#x306B;&#x5C11;&#x3057;&#x89E6;&#x308C;&#x305F;&#x304C;&#x3001;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x30B5;&#x30A4;&#x30C9;&#x3067;&#x306F;&#x3001;PHP/Rails/Django&#x7B49;&#x306E;&#x30C6;&#x30F3;&#x30D7;&#x30EC;&#x30FC;&#x30C8;&#x30A8;&#x30F3;&#x30B8;&#x30F3;&#x304C;&#x5E83;&#x304F;&#x4F7F;&#x308F;&#x308C;&#x3066;&#x3044;&#x305F;&#x3002;</p>
<pre><code class="language-erb">&lt;!-- Rails ERB &#x30C6;&#x30F3;&#x30D7;&#x30EC;&#x30FC;&#x30C8; --&gt;
&lt;!-- Ruby&#x304C;&#x5206;&#x304B;&#x3089;&#x306A;&#x304F;&#x3066;&#x3082;&#x96F0;&#x56F2;&#x6C17;&#x3067;&#x8AAD;&#x3081;&#x308B;: --&gt;
&lt;ul&gt;
  &lt;% @todos.each do |todo| %&gt;          &lt;!-- @todos&#x306E;&#x5404;&#x8981;&#x7D20;&#x306B;&#x3064;&#x3044;&#x3066;&#x7E70;&#x308A;&#x8FD4;&#x3059; --&gt;
    &lt;li class=&quot;&lt;%= &apos;completed&apos; if todo.done? %&gt;&quot;&gt;  &lt;!-- &#x5B8C;&#x4E86;&#x6E08;&#x307F;&#x306A;&#x3089; &apos;completed&apos; &#x30AF;&#x30E9;&#x30B9;&#x3092;&#x4ED8;&#x3051;&#x308B; --&gt;
      &lt;%= todo.text %&gt;                  &lt;!-- todo&#x306E;&#x30C6;&#x30AD;&#x30B9;&#x30C8;&#x3092;&#x51FA;&#x529B;&#x3059;&#x308B; --&gt;
    &lt;/li&gt;
  &lt;% end %&gt;
&lt;/ul&gt;
</code></pre>
<p>&#x3053;&#x308C;&#x306F;&#x300C;&#x30C7;&#x30FC;&#x30BF;&#xFF08;<code>@todos</code>&#xFF09;&#x304C;&#x4E0E;&#x3048;&#x3089;&#x308C;&#x305F;&#x3089;&#x3001;UI&#x306F;&#x3053;&#x3046;&#x306A;&#x308B;&#x3079;&#x304D;&#x300D;&#x3068;&#x3044;&#x3046;&#x5BA3;&#x8A00;&#x3060;&#x3002;&#x300C;&#x30C7;&#x30FC;&#x30BF; &#x2192; HTML&#x300D;&#x306E;&#x4E00;&#x65B9;&#x5411;&#x306E;&#x5909;&#x63DB;&#x3067;&#x3042;&#x308A;&#x3001;jQuery&#x306E;&#x3088;&#x3046;&#x306B;&#x300C;&#x3069;&#x306E;DOM&#x8981;&#x7D20;&#x3092;&#x3069;&#x3046;&#x64CD;&#x4F5C;&#x3059;&#x308B;&#x304B;&#x300D;&#x3068;&#x3044;&#x3046;&#x624B;&#x9806;&#x3092;&#x66F8;&#x304F;&#x5FC5;&#x8981;&#x304C;&#x306A;&#x3044;&#x3002;PHP/Rails&#x306A;&#x3069;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x30B5;&#x30A4;&#x30C9;&#x51FA;&#x8EAB;&#x306E;&#x958B;&#x767A;&#x8005;&#x304B;&#x3089;&#x3059;&#x308C;&#x3070;&#x3001;&#x305A;&#x3063;&#x3068;&#x5BA3;&#x8A00;&#x7684;&#x30B9;&#x30BF;&#x30A4;&#x30EB;&#x3067;&#x3084;&#x3063;&#x3066;&#x304D;&#x305F;&#x3053;&#x3068;&#x306B;&#x306A;&#x308B;&#x3002;</p>
<h3 id="%E3%81%AA%E3%81%9C%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%A0%E3%81%91%E3%81%A7%E3%81%AF%E5%AE%8C%E7%B5%90%E3%81%97%E3%81%AA%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F%E3%81%8B">&#x306A;&#x305C;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x3060;&#x3051;&#x3067;&#x306F;&#x5B8C;&#x7D50;&#x3057;&#x306A;&#x304F;&#x306A;&#x3063;&#x305F;&#x304B;</h3>
<p>&#x3053;&#x306E;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x30B5;&#x30A4;&#x30C9;&#x30C6;&#x30F3;&#x30D7;&#x30EC;&#x30FC;&#x30C8;&#x306E;&#x4ED5;&#x7D44;&#x307F;&#x306F;&#x30B7;&#x30F3;&#x30D7;&#x30EB;&#x3067;&#x5F37;&#x529B;&#x3060;&#x3063;&#x305F;&#x3002;&#x3057;&#x304B;&#x3057;&#x6839;&#x672C;&#x7684;&#x306A;&#x5236;&#x7D04;&#x304C;&#x3042;&#x308B;&#x3002;<strong>&#x30C6;&#x30F3;&#x30D7;&#x30EC;&#x30FC;&#x30C8;&#x304C;&#x5B9F;&#x884C;&#x3055;&#x308C;&#x308B;&#x306E;&#x306F;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x4E0A;&#x3067;&#x3042;&#x308A;&#x3001;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x304C;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x3067;&#x4F55;&#x304B;&#x64CD;&#x4F5C;&#x3059;&#x308B;&#x305F;&#x3073;&#x306B;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x3068;&#x901A;&#x4FE1;&#x304C;&#x5FC5;&#x8981;&#x306B;&#x306A;&#x308B;</strong>&#x3068;&#x3044;&#x3046;&#x3053;&#x3068;&#x3060;&#x3002;</p>
<p>HTTP&#xFF08;Web&#x306E;&#x901A;&#x4FE1;&#x30D7;&#x30ED;&#x30C8;&#x30B3;&#x30EB;&#xFF09;&#x306F;&#x8A2D;&#x8A08;&#x4E0A;&#x30B9;&#x30C6;&#x30FC;&#x30C8;&#x30EC;&#x30B9;&#xFF08;&#x72B6;&#x614B;&#x3092;&#x6301;&#x305F;&#x306A;&#x3044;&#xFF09;&#x306A;&#x30D7;&#x30ED;&#x30C8;&#x30B3;&#x30EB;&#x3060;&#x3002;&#x30B9;&#x30C6;&#x30FC;&#x30C8;&#x30EC;&#x30B9;&#x3068;&#x306F;&#x3069;&#x3046;&#x3044;&#x3046;&#x3053;&#x3068;&#x304B;&#x3002;&#x30EC;&#x30B9;&#x30C8;&#x30E9;&#x30F3;&#x306B;&#x4F8B;&#x3048;&#x308B;&#x3068;&#x3001;&#x30A6;&#x30A7;&#x30A4;&#x30BF;&#x30FC;&#x304C;&#x6CE8;&#x6587;&#x3092;&#x53D6;&#x308A;&#x306B;&#x6765;&#x308B;&#x305F;&#x3073;&#x306B;&#x300C;&#x3053;&#x3061;&#x3089;&#x306E;&#x30C6;&#x30FC;&#x30D6;&#x30EB;&#x306F;&#x521D;&#x3081;&#x3066;&#x3067;&#x3059;&#x304B;&#xFF1F; &#x4F55;&#x540D;&#x69D8;&#x3067;&#x3059;&#x304B;&#xFF1F;&#x300D;&#x3068;&#x805E;&#x304B;&#x308C;&#x308B;&#x3088;&#x3046;&#x306A;&#x3082;&#x306E;&#x3060;&#x3002;&#x524D;&#x56DE;&#x306E;&#x3084;&#x308A;&#x53D6;&#x308A;&#x3092;&#x4E00;&#x5207;&#x899A;&#x3048;&#x3066;&#x3044;&#x306A;&#x3044;&#x3002;Web&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x3082;&#x540C;&#x3058;&#x3067;&#x3001;&#x30EA;&#x30AF;&#x30A8;&#x30B9;&#x30C8;&#x304C;&#x6765;&#x308B;&#x305F;&#x3073;&#x306B;&#x300C;&#x3042;&#x306A;&#x305F;&#x306F;&#x8AB0;&#xFF1F; &#x4F55;&#x304C;&#x307B;&#x3057;&#x3044;&#xFF1F;&#x300D;&#x3092;&#x4E00;&#x304B;&#x3089;&#x51E6;&#x7406;&#x3059;&#x308B;&#x3002;</p>
<p>&#x3064;&#x307E;&#x308A;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x306F;&#x300C;&#x4ECA;&#x30C9;&#x30ED;&#x30C3;&#x30D7;&#x30C0;&#x30A6;&#x30F3;&#x304C;&#x958B;&#x3044;&#x3066;&#x3044;&#x308B;&#x304B;&#x300D;&#x300C;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x304C;&#x4F55;&#x6587;&#x5B57;&#x5165;&#x529B;&#x3057;&#x305F;&#x304B;&#x300D;&#x3068;&#x3044;&#x3063;&#x305F;<strong>&#x753B;&#x9762;&#x306E;&#x72B6;&#x614B;&#x3092;&#x899A;&#x3048;&#x3066;&#x3044;&#x306A;&#x3044;</strong>&#x3002;&#x30EA;&#x30AF;&#x30A8;&#x30B9;&#x30C8;&#x304C;&#x6765;&#x305F;&#x3089;&#x3001;&#x30C7;&#x30FC;&#x30BF;&#x30D9;&#x30FC;&#x30B9;&#x306E;&#x72B6;&#x614B;&#x3092;&#x5143;&#x306B;HTML&#x3092;&#x8FD4;&#x3059;&#x2014;&#x2014;&#x305F;&#x3060;&#x305D;&#x308C;&#x3060;&#x3051;&#x306E;&#x95A2;&#x6570;&#x3060;&#x3002;&#x753B;&#x9762;&#x306E;&#x7D30;&#x304B;&#x3044;&#x72B6;&#x614B;&#x306F;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x306E;&#x95A2;&#x5FC3;&#x4E8B;&#x3067;&#x306F;&#x306A;&#x3044;&#x3002;</p>
<p>2000&#x5E74;&#x4EE3;&#x524D;&#x534A;&#x306F;&#x3053;&#x308C;&#x3067;&#x5341;&#x5206;&#x3060;&#x3063;&#x305F;&#x3002;&#x3057;&#x304B;&#x3057;UI/UX&#x306E;&#x8981;&#x6C42;&#x304C;&#x9AD8;&#x5EA6;&#x306B;&#x306A;&#x308B;&#x306B;&#x3064;&#x308C;&#x3001;<strong>&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x306B;&#x90FD;&#x5EA6;&#x554F;&#x3044;&#x5408;&#x308F;&#x305B;&#x308B;&#x3053;&#x3068;&#x304C;&#x8A31;&#x5BB9;&#x3067;&#x304D;&#x306A;&#x3044;</strong>&#x5834;&#x9762;&#x304C;&#x5897;&#x3048;&#x3066;&#x3044;&#x3063;&#x305F;&#x3002;</p>
<pre><code>2000&#x5E74;&#x4EE3;&#x524D;&#x534A;&#xFF08;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x3067;&#x5B8C;&#x7D50;&#x3067;&#x304D;&#x305F;&#x6642;&#x4EE3;&#xFF09;:
  &#x30FB;&#x30D5;&#x30A9;&#x30FC;&#x30E0;&#x9001;&#x4FE1; &#x2192; &#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x3067;&#x51E6;&#x7406; &#x2192; &#x30DA;&#x30FC;&#x30B8;&#x5168;&#x4F53;&#x30EA;&#x30ED;&#x30FC;&#x30C9;
  &#x30FB;&#x3053;&#x308C;&#x3067;&#x5341;&#x5206;&#x3060;&#x3063;&#x305F;

2010&#x5E74;&#x4EE3;&#xFF08;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x3060;&#x3051;&#x3067;&#x306F;&#x8F9B;&#x304F;&#x306A;&#x3063;&#x305F;&#x6642;&#x4EE3;&#xFF09;:
  &#x30FB;&#x30C9;&#x30ED;&#x30C3;&#x30D7;&#x30C0;&#x30A6;&#x30F3;&#x306E;&#x958B;&#x9589;&#xFF08;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x306B;&#x805E;&#x304F;&#xFF1F; &#x2192; &#x9045;&#x3059;&#x304E;&#x308B;&#xFF09;
  &#x30FB;&#x30D5;&#x30A9;&#x30FC;&#x30E0;&#x306E;&#x30EA;&#x30A2;&#x30EB;&#x30BF;&#x30A4;&#x30E0;&#x30D0;&#x30EA;&#x30C7;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#xFF08;&#x6BCE;&#x30AD;&#x30FC;&#x5165;&#x529B;&#x3067;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#xFF1F; &#x2192; &#x9045;&#x3059;&#x304E;&#x308B;&#xFF09;
  &#x30FB;&#x30C9;&#x30E9;&#x30C3;&#x30B0;&amp;&#x30C9;&#x30ED;&#x30C3;&#x30D7;&#x306E;&#x4E26;&#x3079;&#x66FF;&#x3048;&#xFF08;&#x30DE;&#x30A6;&#x30B9;&#x79FB;&#x52D5;&#x3054;&#x3068;&#x306B;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#xFF1F; &#x2192; &#x4E0D;&#x53EF;&#x80FD;&#xFF09;
  &#x30FB;&#x30AA;&#x30FC;&#x30C8;&#x30B3;&#x30F3;&#x30D7;&#x30EA;&#x30FC;&#x30C8;&#xFF08;&#x5165;&#x529B;&#x3054;&#x3068;&#x306B;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x306F;&#x53EF;&#x80FD;&#x3060;&#x304C;&#x9045;&#x3044;&#xFF09;
  &#x30FB;&#x7121;&#x9650;&#x30B9;&#x30AF;&#x30ED;&#x30FC;&#x30EB;&#x3001;&#x30DA;&#x30FC;&#x30B8;&#x5185;&#x9077;&#x79FB;&#x3001;&#x30A2;&#x30CB;&#x30E1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;...
</code></pre>
<p>&#x3053;&#x3046;&#x3057;&#x305F;&#x300C;&#x5373;&#x6642;&#x7684;&#x306A;UI&#x64CD;&#x4F5C;&#x300D;&#x306F;&#x3001;&#x30CD;&#x30C3;&#x30C8;&#x30EF;&#x30FC;&#x30AF;&#x9045;&#x5EF6;&#xFF08;&#x4E00;&#x822C;&#x7684;&#x306B;&#x6570;&#x5341;&#x301C;&#x6570;&#x767E;&#x30DF;&#x30EA;&#x79D2;&#xFF09;&#x3092;&#x631F;&#x3080;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x5074;&#x3067;&#x306F;&#x51E6;&#x7406;&#x3067;&#x304D;&#x306A;&#x3044;&#x3002;&#x30C9;&#x30ED;&#x30C3;&#x30D7;&#x30C0;&#x30A6;&#x30F3;&#x3092;&#x958B;&#x304F;&#x306E;&#x306B;100&#x30DF;&#x30EA;&#x79D2;&#x5F85;&#x305F;&#x3055;&#x308C;&#x305F;&#x3089;&#x3001;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x306F;&#x9055;&#x548C;&#x611F;&#x3092;&#x899A;&#x3048;&#x308B;&#x3002;&#x30C9;&#x30E9;&#x30C3;&#x30B0;&#x64CD;&#x4F5C;&#x4E2D;&#x306B;&#x30CD;&#x30C3;&#x30C8;&#x30EF;&#x30FC;&#x30AF;&#x901A;&#x4FE1;&#x3092;&#x631F;&#x3080;&#x306E;&#x306F;&#x8AD6;&#x5916;&#x3060;&#x3002;</p>
<p>&#x3053;&#x3046;&#x3057;&#x3066;&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x5074;&#xFF08;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#xFF09;&#x306E;JavaScript&#x3067;UI&#x306E;&#x72B6;&#x614B;&#x3092;&#x7BA1;&#x7406;&#x3059;&#x308B;&#x3053;&#x3068;&#x304C;&#x4E0D;&#x53EF;&#x907F;&#x306B;&#x306A;&#x3063;&#x305F;&#x3002;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x306F;&#x30B9;&#x30C6;&#x30FC;&#x30C8;&#x30EC;&#x30B9;&#x3067;&#x753B;&#x9762;&#x306E;&#x72B6;&#x614B;&#x3092;&#x899A;&#x3048;&#x3066;&#x3044;&#x306A;&#x3044;&#x3002;&#x306A;&#x3089;&#x3070;&#x300C;&#x4ECA;&#x30C9;&#x30ED;&#x30C3;&#x30D7;&#x30C0;&#x30A6;&#x30F3;&#x304C;&#x958B;&#x3044;&#x3066;&#x3044;&#x308B;&#x304B;&#x300D;&#x300C;&#x5165;&#x529B;&#x4E2D;&#x306E;&#x30C6;&#x30AD;&#x30B9;&#x30C8;&#x306F;&#x4F55;&#x304B;&#x300D;&#x3068;&#x3044;&#x3063;&#x305F;UI&#x72B6;&#x614B;&#x306F;&#x3001;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x5074;&#x306E;JavaScript&#x304C;&#x6301;&#x3064;&#x3057;&#x304B;&#x306A;&#x3044;&#x3002;</p>
<h3 id="%E5%AE%A3%E8%A8%80%E7%9A%84ui%E3%81%AE%E3%80%8C%E5%86%8D%E7%99%BA%E6%98%8E%E3%80%8D">&#x5BA3;&#x8A00;&#x7684;UI&#x306E;&#x300C;&#x518D;&#x767A;&#x660E;&#x300D;</h3>
<p>&#x5148;&#x8FF0;&#x3057;&#x305F;&#x901A;&#x308A;&#x3001;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x30B5;&#x30A4;&#x30C9;&#x306F;&#x300C;&#x5BA3;&#x8A00;&#x7684;&#x300D;&#x3060;&#x3063;&#x305F;&#x3002;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x30B5;&#x30A4;&#x30C9;&#x306E;&#x69CB;&#x9020;&#x3092;&#x6574;&#x7406;&#x3059;&#x308B;&#x3068;&#x3001;&#x3053;&#x3046;&#x306A;&#x308B;&#x3002;</p>
<pre><code>&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x30B5;&#x30A4;&#x30C9;&#x306E;&#x5BA3;&#x8A00;&#x7684;UI:
  &#x30C7;&#x30FC;&#x30BF;&#x30D9;&#x30FC;&#x30B9;&#xFF08;&#x72B6;&#x614B;&#xFF09; &#x2192; &#x30B5;&#x30FC;&#x30D0;&#x30FC;&#xFF08;&#x95A2;&#x6570;&#xFF09; &#x2192; HTML&#xFF08;UI&#xFF09;
  UI = f(state) &#x2190; React&#x3068;&#x540C;&#x3058;&#x69CB;&#x9020;
</code></pre>
<p>&#x300C;&#x30C7;&#x30FC;&#x30BF;&#x30D9;&#x30FC;&#x30B9;&#x306F;&#x5E83;&#x7FA9;&#x306E;&#x72B6;&#x614B;&#x7BA1;&#x7406;&#x3067;&#x3042;&#x308A;&#x3001;Web&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x3068;&#x306F;&#x3001;HTTP&#x30EA;&#x30AF;&#x30A8;&#x30B9;&#x30C8;&#x3068;&#x30C7;&#x30FC;&#x30BF;&#x30D9;&#x30FC;&#x30B9;&#x5185;&#x306E;&#x72B6;&#x614B;&#x304B;&#x3089;HTML&#x3092;&#x63CF;&#x753B;&#x3059;&#x308B;&#x95A2;&#x6570;&#x3067;&#x3042;&#x308B;&#x300D;&#x2014;&#x2014;&#x3064;&#x307E;&#x308A;&#x300C;&#x5BA3;&#x8A00;&#x7684;UI&#x300D;&#x3092;&#x7A81;&#x304D;&#x8A70;&#x3081;&#x308B;&#x3068;&#x3001;&#x300C;UI&#x3068;&#x306F;&#x3001;&#x72B6;&#x614B;&#x3092;&#x53D7;&#x3051;&#x53D6;&#x3063;&#x3066;HTML&#x3092;&#x8FD4;&#x3059;&#x95A2;&#x6570;&#x3067;&#x3042;&#x308B;&#xFF08;<code>UI = f(state)</code>&#xFF09;&#x300D;&#x3068;&#x3044;&#x3046;&#x8003;&#x3048;&#x65B9;&#x306B;&#x884C;&#x304D;&#x7740;&#x304F;&#x3002;&#x305D;&#x3057;&#x3066;&#x3053;&#x306E;&#x69CB;&#x9020;&#x3092;&#x898B;&#x308C;&#x3070;&#x3001;&#x305D;&#x306E;&#x6982;&#x5FF5;&#x306F;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x30B5;&#x30A4;&#x30C9;&#x3067;&#x306F;<strong>&#x6700;&#x521D;&#x304B;&#x3089;&#x305D;&#x3046;&#x3060;&#x3063;&#x305F;</strong>&#x3053;&#x3068;&#x304C;&#x5206;&#x304B;&#x308B;&#x3002;&#x3057;&#x304B;&#x3057;&#x4EBA;&#x985E;&#x304C;&#x3053;&#x306E;&#x69CB;&#x9020;&#x3092;&#x81EA;&#x899A;&#x7684;&#x306B;&#x8A8D;&#x8B58;&#x3057;&#x3001;&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x30B5;&#x30A4;&#x30C9;&#x306B;&#x79FB;&#x690D;&#x3059;&#x308B;&#x307E;&#x3067;&#x306B;20&#x5E74;&#x3092;&#x8981;&#x3057;&#x305F;&#x3002;&#x305D;&#x308C;&#x304C;React&#x306E; <code>UI = f(state)</code> &#x3067;&#x3042;&#x308B;&#x3002;</p>
<p>&#x305D;&#x3057;&#x3066;&#x3053;&#x306E;&#x5BA3;&#x8A00;&#x7684;UI&#x306E;&#x610F;&#x7FA9;&#x306F;&#x3001;10&#x5E74;&#x7D4C;&#x3063;&#x305F;&#x4ECA;&#x3067;&#x3082;&#x307E;&#x3060;&#x5341;&#x5206;&#x306B;&#x7406;&#x89E3;&#x3055;&#x308C;&#x3066;&#x3044;&#x306A;&#x3044;&#x3088;&#x3046;&#x3060;&#x3002;</p>
<hr>
<h1 id="%E7%AC%AC2%E9%83%A8-react%E3%81%A8%E3%81%84%E3%81%86%E7%99%BA%E6%98%8E">&#x7B2C;2&#x90E8;: React&#x3068;&#x3044;&#x3046;&#x767A;&#x660E;</h1>
<h2 id="4-react%E3%81%8C%E8%A7%A3%E6%B1%BA%E3%81%97%E3%81%9F%E6%9C%AC%E8%B3%AA%E7%9A%84%E3%81%AA%E5%95%8F%E9%A1%8C">4. React&#x304C;&#x89E3;&#x6C7A;&#x3057;&#x305F;&#x672C;&#x8CEA;&#x7684;&#x306A;&#x554F;&#x984C;</h2>
<h3 id="react%E3%81%AE%E5%89%8D%E5%A4%9C-%E2%80%94-mvc%E3%83%BB%E5%8F%8C%E6%96%B9%E5%90%91%E3%83%90%E3%82%A4%E3%83%B3%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E3%81%AE%E6%8C%AB%E6%8A%98">React&#x306E;&#x524D;&#x591C; &#x2014; MVC&#x30FB;&#x53CC;&#x65B9;&#x5411;&#x30D0;&#x30A4;&#x30F3;&#x30C7;&#x30A3;&#x30F3;&#x30B0;&#x306E;&#x632B;&#x6298;</h3>
<p>&#x5F53;&#x6642;&#x306E;&#x958B;&#x767A;&#x8005;&#x305F;&#x3061;&#x306F;&#x3001;&#x30C7;&#x30FC;&#x30BF;&#x30D0;&#x30A4;&#x30F3;&#x30C7;&#x30A3;&#x30F3;&#x30B0;&#x3092;&#x6B32;&#x3057;&#x3066;&#x3044;&#x305F;&#x3002;&#x30C7;&#x30FC;&#x30BF;&#x30D0;&#x30A4;&#x30F3;&#x30C7;&#x30A3;&#x30F3;&#x30B0;&#x3068;&#x306F;&#x3001;JavaScript&#x306E;&#x30C7;&#x30FC;&#x30BF;&#x3068;UI&#x3092;&#x81EA;&#x52D5;&#x7684;&#x306B;&#x9023;&#x643A;&#x3055;&#x305B;&#x308B;&#x4ED5;&#x7D44;&#x307F;&#x306E;&#x3053;&#x3068;&#x3060;&#x3002;&#x305F;&#x3068;&#x3048;&#x3070; <code>user.name</code> &#x304C; <code>&quot;Alice&quot;</code> &#x304B;&#x3089; <code>&quot;Bob&quot;</code> &#x306B;&#x5909;&#x308F;&#x3063;&#x305F;&#x3089;&#x3001;&#x753B;&#x9762;&#x4E0A;&#x306E;&#x540D;&#x524D;&#x8868;&#x793A;&#x3082;&#x81EA;&#x52D5;&#x7684;&#x306B; <code>&quot;Bob&quot;</code> &#x306B;&#x5909;&#x308F;&#x3063;&#x3066;&#x307B;&#x3057;&#x3044;&#x3002;jQuery&#x6642;&#x4EE3;&#x306F;&#x3053;&#x308C;&#x3092;&#x624B;&#x52D5;&#x3067;&#x3084;&#x3063;&#x3066;&#x3044;&#x305F;&#x3002;</p>
<p>&#x3057;&#x304B;&#x3057;&#x30C6;&#x30F3;&#x30D7;&#x30EC;&#x30FC;&#x30C8;&#x30A8;&#x30F3;&#x30B8;&#x30F3;&#x3060;&#x3051;&#x3067;&#x306F;&#x30C7;&#x30FC;&#x30BF;&#x30D0;&#x30A4;&#x30F3;&#x30C7;&#x30A3;&#x30F3;&#x30B0;&#x306F;&#x5B9F;&#x73FE;&#x3067;&#x304D;&#x306A;&#x3044;&#x3002;&#x306A;&#x305C;&#x306A;&#x3089;&#x3001;&#x30C6;&#x30F3;&#x30D7;&#x30EC;&#x30FC;&#x30C8;&#x30A8;&#x30F3;&#x30B8;&#x30F3;&#x306F;&#x672C;&#x8CEA;&#x7684;&#x306B;&#x300C;&#x547C;&#x3070;&#x308C;&#x305F;&#x3089;&#x30C7;&#x30FC;&#x30BF;&#x3092;HTML&#x306B;&#x5909;&#x63DB;&#x3059;&#x308B;&#x300D;&#x3060;&#x3051;&#x306E;&#x95A2;&#x6570;&#x3060;&#x304B;&#x3089;&#x3060;&#x3002;&#x30C7;&#x30FC;&#x30BF;&#x304C;&#x5909;&#x308F;&#x3063;&#x305F;&#x3053;&#x3068;&#x3092;&#x691C;&#x77E5;&#x3059;&#x308B;&#x4ED5;&#x7D44;&#x307F;&#x3082;&#x3001;&#x5909;&#x308F;&#x3063;&#x305F;&#x3068;&#x304D;&#x306B;&#x81EA;&#x52D5;&#x3067;&#x518D;&#x5B9F;&#x884C;&#x3055;&#x308C;&#x308B;&#x4ED5;&#x7D44;&#x307F;&#x3082;&#x6301;&#x3063;&#x3066;&#x3044;&#x306A;&#x3044;&#x3002;&#x300C;&#x3044;&#x3064;&#x30FB;&#x4F55;&#x304C;&#x5909;&#x308F;&#x3063;&#x305F;&#x304B;&#x300D;&#x3092;&#x76E3;&#x8996;&#x3057;&#x3066;&#x518D;&#x63CF;&#x753B;&#x3092;&#x30C8;&#x30EA;&#x30AC;&#x30FC;&#x3059;&#x308B;&#x4ED5;&#x7D44;&#x307F;&#x306F;&#x3001;&#x30C6;&#x30F3;&#x30D7;&#x30EC;&#x30FC;&#x30C8;&#x306E;&#x5916;&#x5074;&#x306B;&#x5225;&#x9014;&#x4F5C;&#x308B;&#x5FC5;&#x8981;&#x304C;&#x3042;&#x308B;&#x3002;</p>
<p>&#x3053;&#x3053;&#x3067;&#x632F;&#x308A;&#x8FD4;&#x308B;&#x3068;&#x3001;&#x524D;&#x7AE0;&#x3067;&#x898B;&#x305F;&#x3088;&#x3046;&#x306B;&#x3001;&#x5373;&#x6642;&#x7684;&#x306A;UI&#x64CD;&#x4F5C;&#xFF08;&#x30C9;&#x30ED;&#x30C3;&#x30D7;&#x30C0;&#x30A6;&#x30F3;&#x306E;&#x958B;&#x9589;&#x3001;&#x30EA;&#x30A2;&#x30EB;&#x30BF;&#x30A4;&#x30E0;&#x30D0;&#x30EA;&#x30C7;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x7B49;&#xFF09;&#x306E;&#x305F;&#x3081;&#x306B;UI&#x306E;&#x751F;&#x6210;&#x30FB;&#x66F4;&#x65B0;&#x306E;&#x8CAC;&#x4EFB;&#x304C;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x304B;&#x3089;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x5074;&#x306E;JavaScript&#x306B;&#x79FB;&#x308A;&#x3064;&#x3064;&#x3042;&#x3063;&#x305F;&#x3002;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x304C;&#x5B8C;&#x6210;&#x3057;&#x305F;HTML&#x3092;&#x8FD4;&#x3059;&#x6642;&#x4EE3;&#x306B;&#x306F;&#x3001;UI&#x306E;&#x69CB;&#x7BC9;&#x306F;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x306E;&#x4ED5;&#x4E8B;&#x3060;&#x3063;&#x305F;&#x3002;&#x3057;&#x304B;&#x3057;&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x30B5;&#x30A4;&#x30C9;&#x3067;UI&#x3092;&#x7D44;&#x307F;&#x7ACB;&#x3066;&#x308B;&#x3088;&#x3046;&#x306B;&#x306A;&#x308B;&#x3068;&#x3001;&#x305D;&#x306E;&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x6574;&#x7406;&#x3059;&#x308B;&#x65B9;&#x6CD5;&#x304C;&#x5FC5;&#x8981;&#x306B;&#x306A;&#x308B;&#x3002;</p>
<p>&#x305D;&#x3053;&#x3067;&#x5F53;&#x6642;&#x306E;&#x958B;&#x767A;&#x8005;&#x305F;&#x3061;&#x304C;&#x624B;&#x3092;&#x4F38;&#x3070;&#x3057;&#x305F;&#x306E;&#x304C;&#x3001;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x4E0A;&#x3067;&#x6210;&#x529F;&#x3057;&#x3066;&#x3044;&#x305F;MVC&#xFF08;Model-View-Controller&#xFF09;&#x3068;&#x3044;&#x3046;&#x30A2;&#x30FC;&#x30AD;&#x30C6;&#x30AF;&#x30C1;&#x30E3;&#x3060;&#x3063;&#x305F;&#x3002;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x3067;&#x3046;&#x307E;&#x304F;&#x3044;&#x3063;&#x3066;&#x3044;&#x305F;&#x8A2D;&#x8A08;&#x30D1;&#x30BF;&#x30FC;&#x30F3;&#x3092;&#x3001;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x306E;JavaScript&#x4E0A;&#x306B;&#x8907;&#x88FD;&#x3057;&#x3088;&#x3046;&#x3068;&#x3057;&#x305F;&#x306E;&#x3060;&#x3002;</p>
<p>MVC&#x3068;&#x306F;&#x3001;&#x30A2;&#x30D7;&#x30EA;&#x30B1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x3092;3&#x3064;&#x306E;&#x5F79;&#x5272;&#x306B;&#x5206;&#x96E2;&#x3059;&#x308B;&#x8A2D;&#x8A08;&#x30D1;&#x30BF;&#x30FC;&#x30F3;&#x3060;&#x3002;</p>
<ul>
<li><strong>Model&#xFF08;&#x30E2;&#x30C7;&#x30EB;&#xFF09;</strong>: &#x30C7;&#x30FC;&#x30BF;&#x3068;&#x3001;&#x30C7;&#x30FC;&#x30BF;&#x3092;&#x5909;&#x66F4;&#x3059;&#x308B;&#x30ED;&#x30B8;&#x30C3;&#x30AF;&#xFF08;&#x4F8B;: todo&#x30EA;&#x30B9;&#x30C8;&#x3001;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x60C5;&#x5831;&#xFF09;</li>
<li><strong>View&#xFF08;&#x30D3;&#x30E5;&#x30FC;&#xFF09;</strong>: &#x753B;&#x9762;&#x306E;&#x898B;&#x305F;&#x76EE;&#xFF08;&#x4F8B;: HTML&#x30C6;&#x30F3;&#x30D7;&#x30EC;&#x30FC;&#x30C8;&#xFF09;</li>
<li><strong>Controller&#xFF08;&#x30B3;&#x30F3;&#x30C8;&#x30ED;&#x30FC;&#x30E9;&#x30FC;&#xFF09;</strong>: &#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x306E;&#x64CD;&#x4F5C;&#x3092;&#x53D7;&#x3051;&#x53D6;&#x308A;&#x3001;Model&#x3068;View&#x3092;&#x4EF2;&#x4ECB;&#x3059;&#x308B;&#xFF08;&#x4F8B;: &#x300C;&#x8FFD;&#x52A0;&#x30DC;&#x30BF;&#x30F3;&#x304C;&#x62BC;&#x3055;&#x308C;&#x305F;&#x3089;Model&#x306B;todo&#x3092;&#x8FFD;&#x52A0;&#x3057;&#x3001;View&#x3092;&#x66F4;&#x65B0;&#x3059;&#x308B;&#x300D;&#xFF09;</li>
</ul>
<p>&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x4E0A;&#x3067;&#x306F;&#x3001;&#x3053;&#x306E;&#x69CB;&#x9020;&#x306F;&#x3046;&#x307E;&#x304F;&#x6A5F;&#x80FD;&#x3057;&#x3066;&#x3044;&#x305F;&#x3002;MVC&#x306E;3&#x3064;&#x306E;&#x5F79;&#x5272;&#x304C;&#x3059;&#x3079;&#x3066;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x4E0A;&#x3067;&#x5B8C;&#x7D50;&#x3057;&#x3066;&#x3044;&#x305F;&#x304B;&#x3089;&#x3060;&#x3002;Model&#x306F;&#x30C7;&#x30FC;&#x30BF;&#x30D9;&#x30FC;&#x30B9;&#x306E;&#x30EC;&#x30B3;&#x30FC;&#x30C9;&#xFF08;&#x6C38;&#x7D9A;&#x7684;&#x306A;&#x30C7;&#x30FC;&#x30BF;&#xFF09;&#x3001;View&#x306F;&#x524D;&#x7AE0;&#x3067;&#x898B;&#x305F;&#x3088;&#x3046;&#x306A;&#x30C6;&#x30F3;&#x30D7;&#x30EC;&#x30FC;&#x30C8;&#x30A8;&#x30F3;&#x30B8;&#x30F3;&#xFF08;ERB, PHP&#x7B49;&#xFF09;&#x3067;&#x751F;&#x6210;&#x3055;&#x308C;&#x308B;HTML&#x3001;Controller&#x306F;&#x30EA;&#x30AF;&#x30A8;&#x30B9;&#x30C8;&#x3092;&#x53D7;&#x3051;&#x53D6;&#x308B;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x306E;&#x30B3;&#x30FC;&#x30C9;&#x3002;&#x30EA;&#x30AF;&#x30A8;&#x30B9;&#x30C8;&#x304C;&#x6765;&#x308B;&#x305F;&#x3073;&#x306B;Controller&#x304C;&#x52D5;&#x304D;&#x3001;Model&#x304B;&#x3089;&#x30C7;&#x30FC;&#x30BF;&#x3092;&#x53D6;&#x5F97;&#x3057;&#x3001;View&#x3067;&#x30DA;&#x30FC;&#x30B8;&#x5168;&#x4F53;&#x3092;&#x30EC;&#x30F3;&#x30C0;&#x30EA;&#x30F3;&#x30B0;&#x3057;&#x3066;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x306B;&#x8FD4;&#x3059;&#x3002;&#x91CD;&#x8981;&#x306A;&#x306E;&#x306F;&#x3001;<strong>View&#x306F;&#x30EA;&#x30AF;&#x30A8;&#x30B9;&#x30C8;&#x3054;&#x3068;&#x306B;&#x6BCE;&#x56DE;&#x4F5C;&#x308A;&#x76F4;&#x3055;&#x308C;&#x308B;&#x4F7F;&#x3044;&#x6368;&#x3066;</strong>&#x3060;&#x3068;&#x3044;&#x3046;&#x3053;&#x3068;&#x3060;&#x3002;&#x4F5C;&#x3063;&#x3066;&#x8FD4;&#x3057;&#x305F;&#x3089;&#x305D;&#x308C;&#x3067;&#x7D42;&#x308F;&#x308A;&#x3002;&#x3060;&#x304B;&#x3089;&#x72B6;&#x614B;&#x306E;&#x7BA1;&#x7406;&#x304C;&#x30B7;&#x30F3;&#x30D7;&#x30EB;&#x3060;&#x3063;&#x305F;&#x3002;</p>
<p><img src="http://blog.shinonome.io/content/images/2026/03/diagram3.jpg" alt="React&#x306E;&#x767A;&#x660E;&#x3068;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x601D;&#x60F3;&#x306E;&#x5909;&#x9077;" loading="lazy"></p>
<p>&#x3057;&#x304B;&#x3057;&#x3053;&#x306E;MVC&#x30A2;&#x30FC;&#x30AD;&#x30C6;&#x30AF;&#x30C1;&#x30E3;&#x3092;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x306E;JavaScript&#x4E0A;&#x306B;&#x8907;&#x88FD;&#x3057;&#x3088;&#x3046;&#x3068;&#x3059;&#x308B;&#x3068;&#x3001;Model&#x3068;View&#x306E;&#x610F;&#x5473;&#x304C;&#x6839;&#x672C;&#x7684;&#x306B;&#x5909;&#x308F;&#x308B;&#x3002;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x306E;Model&#x306F;&#x30C7;&#x30FC;&#x30BF;&#x30D9;&#x30FC;&#x30B9;&#x3067;&#x306F;&#x306A;&#x304F;&#x3001;<strong>JavaScript&#x306E;&#x30E1;&#x30E2;&#x30EA;&#x4E0A;&#x306B;&#x3042;&#x308B;UI&#x72B6;&#x614B;</strong>&#x3060;&#x3002;&#x300C;&#x30C9;&#x30ED;&#x30C3;&#x30D7;&#x30C0;&#x30A6;&#x30F3;&#x304C;&#x958B;&#x3044;&#x3066;&#x3044;&#x308B;&#x304B;&#x300D;&#x300C;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x304C;&#x5165;&#x529B;&#x4E2D;&#x306E;&#x30C6;&#x30AD;&#x30B9;&#x30C8;&#x300D;&#x300C;&#x3069;&#x306E;&#x30BF;&#x30D6;&#x304C;&#x9078;&#x629E;&#x3055;&#x308C;&#x3066;&#x3044;&#x308B;&#x304B;&#x300D;&#x2014;&#x2014;&#x3053;&#x3046;&#x3057;&#x305F;&#x4E00;&#x6642;&#x7684;&#x3067;&#x753B;&#x9762;&#x306B;&#x7D10;&#x3065;&#x304F;&#x30C7;&#x30FC;&#x30BF;&#x304C;Model&#x306B;&#x306A;&#x308B;&#x3002;&#x305D;&#x3057;&#x3066;View&#x306F;&#x4F7F;&#x3044;&#x6368;&#x3066;&#x306E;HTML&#x3067;&#x306F;&#x306A;&#x304F;&#x3001;<strong>&#x753B;&#x9762;&#x306B;&#x8868;&#x793A;&#x3055;&#x308C;&#x7D9A;&#x3051;&#x308B;DOM</strong>&#x3060;&#x3002;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x304C;&#x64CD;&#x4F5C;&#x3059;&#x308B;&#x305F;&#x3073;&#x306B;&#x30EA;&#x30A2;&#x30EB;&#x30BF;&#x30A4;&#x30E0;&#x306B;&#x5909;&#x308F;&#x308A;&#x7D9A;&#x3051;&#x308B;&#x3002;</p>
<p>&#x3064;&#x307E;&#x308A;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x3067;&#x306F;&#x3001;&#x30DA;&#x30FC;&#x30B8;&#x304C;&#x8868;&#x793A;&#x3055;&#x308C;&#x3066;&#x3044;&#x308B;&#x9593;&#x305A;&#x3063;&#x3068;&#x300C;Model&#x304C;&#x5909;&#x308F;&#x3063;&#x305F;&#x3089;View&#x3092;&#x66F4;&#x65B0;&#x3059;&#x308B;&#x300D;&#x300C;View&#x304C;&#x5909;&#x308F;&#x3063;&#x305F;&#x3089;&#xFF08;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x306E;&#x5165;&#x529B;&#xFF09;Model&#x3082;&#x66F4;&#x65B0;&#x3059;&#x308B;&#x300D;&#x3068;&#x3044;&#x3046;&#x540C;&#x671F;&#x3092;&#x7DAD;&#x6301;&#x3057;&#x7D9A;&#x3051;&#x306A;&#x3051;&#x308C;&#x3070;&#x306A;&#x3089;&#x306A;&#x3044;&#x3002;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x30B5;&#x30A4;&#x30C9;&#x306E;&#x300C;&#x4F5C;&#x3063;&#x3066;&#x8FD4;&#x3057;&#x3066;&#x5FD8;&#x308C;&#x308B;&#x300D;&#x3068;&#x306F;&#x6839;&#x672C;&#x7684;&#x306B;&#x7570;&#x306A;&#x308B;&#x3002;</p>
<p><img src="http://blog.shinonome.io/content/images/2026/03/diagram-2.jpg" alt="React&#x306E;&#x767A;&#x660E;&#x3068;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x601D;&#x60F3;&#x306E;&#x5909;&#x9077;" loading="lazy"></p>
<p>&#x305F;&#x3068;&#x3048;&#x3070;Backbone.js&#xFF08;2010&#x5E74;&#xFF09;&#x306F;&#x307E;&#x3055;&#x306B;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;MVC&#x30D5;&#x30EC;&#x30FC;&#x30E0;&#x30EF;&#x30FC;&#x30AF;&#x3060;&#x3063;&#x305F;&#x304C;&#x3001;Model&#x304C;&#x5909;&#x308F;&#x3063;&#x305F;&#x3068;&#x304D;&#x306B;&#x3069;&#x306E;View&#x3092;&#x66F4;&#x65B0;&#x3059;&#x3079;&#x304D;&#x304B;&#x3092;&#x958B;&#x767A;&#x8005;&#x304C;&#x624B;&#x52D5;&#x3067;&#x7BA1;&#x7406;&#x3059;&#x308B;&#x5FC5;&#x8981;&#x304C;&#x3042;&#x308A;&#x3001;&#x30A2;&#x30D7;&#x30EA;&#x304C;&#x5927;&#x304D;&#x304F;&#x306A;&#x308B;&#x3068;Model&#x3068;View&#x306E;&#x4F9D;&#x5B58;&#x95A2;&#x4FC2;&#x304C;&#x8907;&#x96D1;&#x306B;&#x7D61;&#x307F;&#x5408;&#x3063;&#x3066;&#x8FFD;&#x8DE1;&#x4E0D;&#x80FD;&#x306B;&#x306A;&#x3063;&#x305F;&#x3002;AngularJS&#xFF08;2010&#x5E74;&#xFF09;&#x306F;<strong>&#x53CC;&#x65B9;&#x5411;&#x30C7;&#x30FC;&#x30BF;&#x30D0;&#x30A4;&#x30F3;&#x30C7;&#x30A3;&#x30F3;&#x30B0;</strong>&#x3067;&#x81EA;&#x52D5;&#x540C;&#x671F;&#x3092;&#x8A66;&#x307F;&#x305F;&#x3002;&#x53CC;&#x65B9;&#x5411;&#x30C7;&#x30FC;&#x30BF;&#x30D0;&#x30A4;&#x30F3;&#x30C7;&#x30A3;&#x30F3;&#x30B0;&#x3068;&#x306F;&#x3001;&#x300C;&#x30C7;&#x30FC;&#x30BF;&#x304C;&#x5909;&#x308F;&#x3063;&#x305F;&#x3089;&#x753B;&#x9762;&#x304C;&#x81EA;&#x52D5;&#x66F4;&#x65B0;&#x3055;&#x308C;&#x308B;&#x300D;&#x3060;&#x3051;&#x3067;&#x306A;&#x304F;&#x3001;&#x300C;&#x753B;&#x9762;&#x4E0A;&#x306E;input&#x306B;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x304C;&#x6587;&#x5B57;&#x3092;&#x6253;&#x3061;&#x8FBC;&#x3093;&#x3060;&#x3089;&#x3001;&#x30C7;&#x30FC;&#x30BF;&#x3082;&#x81EA;&#x52D5;&#x7684;&#x306B;&#x5909;&#x308F;&#x308B;&#x300D;&#x3068;&#x3044;&#x3046;&#x4ED5;&#x7D44;&#x307F;&#x3060;&#x3002;</p>
<pre><code class="language-html">&lt;!-- AngularJS &#x306E;&#x53CC;&#x65B9;&#x5411;&#x30C7;&#x30FC;&#x30BF;&#x30D0;&#x30A4;&#x30F3;&#x30C7;&#x30A3;&#x30F3;&#x30B0; --&gt;
&lt;input ng-model=&quot;user.name&quot; /&gt;
&lt;p&gt;Hello, {{user.name}}&lt;/p&gt;
&lt;!-- input&#x306B;&#x6253;&#x3061;&#x8FBC;&#x3080;&#x3060;&#x3051;&#x3067; user.name &#x304C;&#x5909;&#x308F;&#x308A;&#x3001;&lt;p&gt;&#x306E;&#x8868;&#x793A;&#x3082;&#x81EA;&#x52D5;&#x3067;&#x5909;&#x308F;&#x308B; --&gt;
</code></pre>
<p>&#x4E00;&#x898B;&#x3059;&#x308B;&#x3068;&#x7406;&#x60F3;&#x7684;&#x306A;&#x4ED5;&#x7D44;&#x307F;&#x306B;&#x898B;&#x3048;&#x308B;&#x3002;&#x3057;&#x304B;&#x3057;&#x30A2;&#x30D7;&#x30EA;&#x304C;&#x5927;&#x304D;&#x304F;&#x306A;&#x308B;&#x3068;&#x3001;&#x30C7;&#x30FC;&#x30BF;A&#x306E;&#x5909;&#x66F4;&#x304C;View B&#x306B;&#x4F1D;&#x308F;&#x308A;&#x3001;View B&#x304C;&#x30C7;&#x30FC;&#x30BF;C&#x3092;&#x81EA;&#x52D5;&#x5909;&#x66F4;&#x3057;&#x3001;&#x30C7;&#x30FC;&#x30BF;C&#x306E;&#x5909;&#x66F4;&#x304C;View D&#x306B;&#x4F1D;&#x308F;&#x308A;&#x2026;&#x3068;&#x3044;&#x3046;<strong>&#x5909;&#x66F4;&#x306E;&#x9023;&#x9396;</strong>&#x304C;&#x767A;&#x751F;&#x3057;&#x3066;&#x3001;&#x300C;&#x306A;&#x305C;&#x3053;&#x306E;&#x753B;&#x9762;&#x304C;&#x5909;&#x308F;&#x3063;&#x305F;&#x306E;&#x304B;&#x300D;&#x306E;&#x767A;&#x751F;&#x6E90;&#x304C;&#x8FFD;&#x8DE1;&#x4E0D;&#x80FD;&#x306B;&#x306A;&#x3063;&#x305F;&#x3002;Facebook&#x304C;&#x901A;&#x77E5;&#x30D0;&#x30C3;&#x30B8;&#x306E;&#x6570;&#x5B57;&#x304C;&#x3069;&#x3046;&#x3057;&#x3066;&#x3082;&#x5408;&#x308F;&#x306A;&#x304F;&#x306A;&#x308B;&#x30D0;&#x30B0;&#x306B;&#x60A9;&#x307E;&#x3055;&#x308C;&#x305F;&#x306E;&#x306F;&#x3001;&#x307E;&#x3055;&#x306B;&#x3053;&#x306E;&#x9023;&#x9396;&#x304C;&#x539F;&#x56E0;&#x3060;&#x3063;&#x305F;&#x3002;</p>
<p>&#x3064;&#x307E;&#x308A;&#x3001;&#x300C;&#x30C7;&#x30FC;&#x30BF;&#x30D0;&#x30A4;&#x30F3;&#x30C7;&#x30A3;&#x30F3;&#x30B0;&#x304C;&#x6B32;&#x3057;&#x3044;&#x300D;&#x2192;&#x300C;&#x305D;&#x306E;&#x305F;&#x3081;&#x306B;MVC&#x30D5;&#x30EC;&#x30FC;&#x30E0;&#x30EF;&#x30FC;&#x30AF;&#x3092;&#x69CB;&#x7BC9;&#x3059;&#x308B;&#x300D;&#x2192;&#x300C;&#x53CC;&#x65B9;&#x5411;&#x30D0;&#x30A4;&#x30F3;&#x30C7;&#x30A3;&#x30F3;&#x30B0;&#x306E;&#x8907;&#x96D1;&#x3055;&#x81EA;&#x4F53;&#x304C;&#x65B0;&#x305F;&#x306A;&#x554F;&#x984C;&#x306B;&#x306A;&#x308B;&#x300D;&#x3068;&#x3044;&#x3046;&#x60AA;&#x5FAA;&#x74B0;&#x306B;&#x9665;&#x3063;&#x3066;&#x3044;&#x305F;&#x3002;</p>
<h3 id="react%E3%81%AE%E8%AA%95%E7%94%9F%EF%BC%882011%E3%80%9C2013%E5%B9%B4%EF%BC%89">React&#x306E;&#x8A95;&#x751F;&#xFF08;2011&#x301C;2013&#x5E74;&#xFF09;</h3>
<p>&#x3053;&#x306E;&#x60AA;&#x5FAA;&#x74B0;&#x306E;&#x6E26;&#x4E2D;&#x306B;&#x3042;&#x3063;&#x305F;Facebook&#x3067;&#x3001;2011&#x5E74;&#x3001;&#x30A8;&#x30F3;&#x30B8;&#x30CB;&#x30A2;&#x306E;Jordan Walke&#x304C;React&#x306E;&#x958B;&#x767A;&#x3092;&#x59CB;&#x3081;&#x305F;&#x3002;&#x5F53;&#x6642;Facebook&#x306F;&#x3001;&#x30CB;&#x30E5;&#x30FC;&#x30B9;&#x30D5;&#x30A3;&#x30FC;&#x30C9;&#x3084;&#x5E83;&#x544A;&#x7BA1;&#x7406;&#x30C4;&#x30FC;&#x30EB;&#x306A;&#x3069;&#x8907;&#x96D1;&#x306A;UI&#x306E;&#x7BA1;&#x7406;&#x306B;&#x82E6;&#x3057;&#x3093;&#x3067;&#x3044;&#x305F;&#x3002;Walke&#x306F;&#x3001;Facebook&#x793E;&#x5185;&#x3067;&#x4F7F;&#x308F;&#x308C;&#x3066;&#x3044;&#x305F;PHP&#x306E;&#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x30EA;&#x300C;XHP&#x300D;&#x304B;&#x3089;&#x30A4;&#x30F3;&#x30B9;&#x30D4;&#x30EC;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x3092;&#x53D7;&#x3051;&#x3001;&#x540C;&#x3058;&#x8003;&#x3048;&#x65B9;&#x3092;JavaScript&#x306B;&#x6301;&#x3061;&#x8FBC;&#x3082;&#x3046;&#x3068;&#x3057;&#x305F;&#x3002;</p>
<p>2013&#x5E74;5&#x6708;&#x3001;JSConf US&#x3067;React&#x304C;&#x521D;&#x3081;&#x3066;&#x516C;&#x958B;&#x3055;&#x308C;&#x305F;&#x3002;&#x5F53;&#x521D;&#x3001;&#x30B3;&#x30DF;&#x30E5;&#x30CB;&#x30C6;&#x30A3;&#x306E;&#x53CD;&#x5FDC;&#x306F;&#x61D0;&#x7591;&#x7684;&#x3060;&#x3063;&#x305F;&#x3002;&#x7279;&#x306B;JSX&#xFF08;JavaScript XML &#x2014; JavaScript&#x306E;&#x4E2D;&#x306B;HTML&#x306E;&#x3088;&#x3046;&#x306A;&#x30BF;&#x30B0;&#x3092;&#x66F8;&#x3051;&#x308B;&#x62E1;&#x5F35;&#x69CB;&#x6587;&#xFF09;&#x306F;&#x300C;&#x95A2;&#x5FC3;&#x306E;&#x5206;&#x96E2;&#x306B;&#x53CD;&#x3059;&#x308B;&#x300D;&#x3068;&#x6279;&#x5224;&#x3055;&#x308C;&#x305F;&#x3002;&#x5F53;&#x6642;&#x306F;&#x300C;HTML&#xFF08;&#x69CB;&#x9020;&#xFF09;&#x30FB;CSS&#xFF08;&#x898B;&#x305F;&#x76EE;&#xFF09;&#x30FB;JavaScript&#xFF08;&#x632F;&#x308B;&#x821E;&#x3044;&#xFF09;&#x306F;&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x3092;&#x5206;&#x3051;&#x308B;&#x3079;&#x304D;&#x3060;&#x300D;&#x3068;&#x3044;&#x3046;&#x8003;&#x3048;&#x65B9;&#x304C;&#x5E38;&#x8B58;&#x3067;&#x3042;&#x308A;&#x3001;JSX&#x306E;&#x3088;&#x3046;&#x306B;JavaScript&#x306E;&#x4E2D;&#x306B;HTML&#x3092;&#x66F8;&#x304F;&#x767A;&#x60F3;&#x306F;&#x7570;&#x7AEF;&#x306B;&#x898B;&#x3048;&#x305F;&#x306E;&#x3060;&#x3002;&#x3057;&#x304B;&#x3057;React&#x306F;&#x3001;&#x305D;&#x308C;&#x307E;&#x3067;&#x306E;&#x5168;&#x3066;&#x306E;&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;&#x304C;&#x6301;&#x3063;&#x3066;&#x3044;&#x305F;&#x6839;&#x672C;&#x7684;&#x306A;&#x554F;&#x984C;&#x3092;&#x89E3;&#x6C7A;&#x3057;&#x3066;&#x3044;&#x305F;&#x3002;MVC&#x3068;&#x3082;&#x53CC;&#x65B9;&#x5411;&#x30D0;&#x30A4;&#x30F3;&#x30C7;&#x30A3;&#x30F3;&#x30B0;&#x3068;&#x3082;&#x7570;&#x306A;&#x308B;&#x767A;&#x60F3;&#x3067;&#x3001;&#x3053;&#x306E;&#x554F;&#x984C;&#x306B;&#x6B63;&#x9762;&#x304B;&#x3089;&#x5411;&#x304D;&#x5408;&#x3063;&#x305F;&#x306E;&#x3060;&#x3002;&#x305D;&#x306E;&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;&#x306E;&#x6838;&#x5FC3;&#x304C;<strong>&#x4E00;&#x65B9;&#x5411;&#x30C7;&#x30FC;&#x30BF;&#x30D5;&#x30ED;&#x30FC;</strong>&#x3060;&#x3002;</p>
<p><img src="http://blog.shinonome.io/content/images/2026/03/diagram-5.jpg" alt="React&#x306E;&#x767A;&#x660E;&#x3068;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x601D;&#x60F3;&#x306E;&#x5909;&#x9077;" loading="lazy"></p>
<pre><code>&#x53CC;&#x65B9;&#x5411;&#xFF08;AngularJS&#xFF09;:
  &#x72B6;&#x614B; &#x2192; UI     &#x81EA;&#x52D5;
  UI &#x2192; &#x72B6;&#x614B;     &#x3053;&#x308C;&#x3082;&#x81EA;&#x52D5;&#x3002;input&#x306B;&#x6253;&#x3064;&#x3060;&#x3051;&#x3067;&#x30C7;&#x30FC;&#x30BF;&#x304C;&#x5909;&#x308F;&#x308B;
  &#x2192; &#x3069;&#x3053;&#x304C;&#x5909;&#x66F4;&#x306E;&#x767A;&#x751F;&#x6E90;&#x304B;&#x8FFD;&#x8DE1;&#x4E0D;&#x80FD;&#x306B;

&#x4E00;&#x65B9;&#x5411;&#xFF08;React&#xFF09;:
  &#x72B6;&#x614B; &#x2192; UI     &#x81EA;&#x52D5;&#x3002;state&#x304C;&#x5909;&#x308F;&#x308C;&#x3070;&#x753B;&#x9762;&#x304C;&#x66F4;&#x65B0;&#x3055;&#x308C;&#x308B;
  UI &#x2192; &#x72B6;&#x614B;     &#x624B;&#x52D5;&#x3002;&#x958B;&#x767A;&#x8005;&#x304C;onChange&#x3067;setState&#x3092;&#x66F8;&#x304F;
  &#x2192; &#x72B6;&#x614B;&#x3092;&#x5909;&#x3048;&#x308B;&#x306E;&#x306F;&#x5E38;&#x306B;setState&#x3092;&#x547C;&#x3093;&#x3060;&#x7B87;&#x6240;&#x3060;&#x3051;&#x3002;&#x8FFD;&#x8DE1;&#x53EF;&#x80FD;
</code></pre>
<p>&#x4E00;&#x898B;&#x3059;&#x308B;&#x3068;React&#x306E;&#x65B9;&#x304C;&#x9762;&#x5012;&#x306B;&#x898B;&#x3048;&#x308B;&#x3002;&#x3057;&#x304B;&#x3057;&#x300C;&#x72B6;&#x614B;&#x304C;&#x3069;&#x3053;&#x3067;&#x5909;&#x308F;&#x3063;&#x305F;&#x304B;&#x300D;&#x304C;&#x5E38;&#x306B;&#x660E;&#x78BA;&#x306B;&#x306A;&#x308B;&#x305F;&#x3081;&#x3001;&#x30A2;&#x30D7;&#x30EA;&#x304C;&#x5927;&#x898F;&#x6A21;&#x306B;&#x306A;&#x308B;&#x307B;&#x3069;&#x3053;&#x306E;&#x8A2D;&#x8A08;&#x304C;&#x52B9;&#x3044;&#x3066;&#x304F;&#x308B;&#x3002;&#x5B9F;&#x969B;&#x3001;&#x3053;&#x306E;&#x6559;&#x8A13;&#x306F;&#x696D;&#x754C;&#x5168;&#x4F53;&#x306B;&#x6D78;&#x900F;&#x3057;&#x3001;&#x73FE;&#x5728;&#x306E;Angular&#xFF08;2&#x4EE5;&#x964D;&#xFF09;&#x3082;&#x5185;&#x90E8;&#x7684;&#x306B;&#x306F;&#x4E00;&#x65B9;&#x5411;&#x30C7;&#x30FC;&#x30BF;&#x30D5;&#x30ED;&#x30FC;&#x306B;&#x518D;&#x8A2D;&#x8A08;&#x3055;&#x308C;&#x3066;&#x3044;&#x308B;&#x3002;&#x53CC;&#x65B9;&#x5411;&#x30D0;&#x30A4;&#x30F3;&#x30C7;&#x30A3;&#x30F3;&#x30B0;&#x306E;&#x69CB;&#x6587;&#x306F;&#x6B8B;&#x3063;&#x3066;&#x3044;&#x308B;&#x304C;&#x3001;&#x305D;&#x308C;&#x306F;&#x4E00;&#x65B9;&#x5411;&#x30D0;&#x30A4;&#x30F3;&#x30C7;&#x30A3;&#x30F3;&#x30B0;&#xFF0B;&#x30A4;&#x30D9;&#x30F3;&#x30C8;&#x30CF;&#x30F3;&#x30C9;&#x30E9;&#x306E;&#x7CD6;&#x8863;&#x69CB;&#x6587;&#x3067;&#x3042;&#x308A;&#x3001;AngularJS&#x3068;&#x306F;&#x6839;&#x672C;&#x7684;&#x306B;&#x7570;&#x306A;&#x308B;&#x3002;</p>
<h3 id="react%E3%81%8C%E6%8F%90%E7%A4%BA%E3%81%97%E3%81%9F3%E3%81%A4%E3%81%AE%E8%A7%A3">React&#x304C;&#x63D0;&#x793A;&#x3057;&#x305F;3&#x3064;&#x306E;&#x89E3;</h3>
<p>&#x3053;&#x306E;&#x4E00;&#x65B9;&#x5411;&#x30C7;&#x30FC;&#x30BF;&#x30D5;&#x30ED;&#x30FC;&#x306E;&#x4E0A;&#x306B;&#x3001;React&#x306F;3&#x3064;&#x306E;&#x5177;&#x4F53;&#x7684;&#x306A;&#x89E3;&#x3092;&#x69CB;&#x7BC9;&#x3057;&#x305F;&#x3002;</p>
<p><strong>&#x89E3;&#x6C7A;1: &#x72B6;&#x614B;&#x3068;UI&#x306E;&#x81EA;&#x52D5;&#x540C;&#x671F; &#x2014;&#x300C;UI&#x306F;&#x72B6;&#x614B;&#x306E;&#x95A2;&#x6570;&#x300D;</strong></p>
<p>React&#x306F;&#x3001;&#x30C7;&#x30FC;&#x30BF;&#x3068;UI&#x306E;&#x540C;&#x671F;&#x3068;&#x3044;&#x3046;&#x6839;&#x672C;&#x554F;&#x984C;&#x3092;&#x3053;&#x3046;&#x89E3;&#x6D88;&#x3057;&#x305F;&#x3002;</p>
<pre><code class="language-jsx">// React: &#x72B6;&#x614B;&#x3092;&#x5BA3;&#x8A00;&#x3059;&#x308C;&#x3070;&#x3001;UI&#x306F;&#x81EA;&#x52D5;&#x7684;&#x306B;&#x305D;&#x308C;&#x3092;&#x53CD;&#x6620;&#x3059;&#x308B;
function TodoApp() {
  // useState: &#x72B6;&#x614B;&#xFF08;&#x3053;&#x3053;&#x3067;&#x306F;todo&#x914D;&#x5217;&#xFF09;&#x3092;&#x7BA1;&#x7406;&#x3059;&#x308B;&#x3002;
  // todos&#x304C;&#x73FE;&#x5728;&#x306E;&#x5024;&#x3001;setTodos&#x304C;&#x5024;&#x3092;&#x66F4;&#x65B0;&#x3059;&#x308B;&#x95A2;&#x6570;&#x3002;
  const [todos, setTodos] = useState([]);

  // &#x2193; &#x3053;&#x3053;&#x306B;&#x306F;DOM&#x306E;&#x64CD;&#x4F5C;&#x547D;&#x4EE4;&#x304C;&#x4E00;&#x5207;&#x306A;&#x3044;&#x3002;
  // &#x300C;todos&#x306E;&#x4E2D;&#x8EAB;&#x306B;&#x5FDC;&#x3058;&#x3066;&#x3001;UI&#x306F;&#x3053;&#x3046;&#x3042;&#x308B;&#x3079;&#x304D;&#x300D;&#x3092;&#x5BA3;&#x8A00;&#x3057;&#x3066;&#x3044;&#x308B;&#x3060;&#x3051;&#x3002;
  return (
    &lt;ul&gt;
      {todos.map((todo) =&gt; (
        &lt;li key={todo.id} className={todo.done ? &quot;completed&quot; : &quot;&quot;}&gt;
          {todo.text}
        &lt;/li&gt;
      ))}
    &lt;/ul&gt;
  );
  // todos&#x304C;&#x5909;&#x308F;&#x308B;&#x3068;&#x3001;React&#x304C;&#x81EA;&#x52D5;&#x7684;&#x306B;DOM&#x3092;&#x66F4;&#x65B0;&#x3057;&#x3066;&#x304F;&#x308C;&#x308B;&#x3002;
  // &#x958B;&#x767A;&#x8005;&#x306F;&#x300C;&#x3069;&#x306E;&#x8981;&#x7D20;&#x3092;&#x8FFD;&#x52A0;/&#x524A;&#x9664;&#x3059;&#x308B;&#x304B;&#x300D;&#x3092;&#x8003;&#x3048;&#x308B;&#x5FC5;&#x8981;&#x304C;&#x306A;&#x3044;&#x3002;
}
</code></pre>
<p>&#x6570;&#x5B66;&#x306E;&#x95A2;&#x6570;&#x306E;&#x3088;&#x3046;&#x306B;&#x8003;&#x3048;&#x308B;&#x3068;&#x308F;&#x304B;&#x308A;&#x3084;&#x3059;&#x3044;&#x3002;<code>y = 2x</code> &#x3068;&#x3044;&#x3046;&#x95A2;&#x6570;&#x304C;&#x3042;&#x308C;&#x3070;&#x3001;<code>x</code> &#x306B; <code>3</code> &#x3092;&#x5165;&#x308C;&#x308C;&#x3070; <code>y</code> &#x306F;&#x5FC5;&#x305A; <code>6</code> &#x306B;&#x306A;&#x308B;&#x3002;&#x540C;&#x3058;&#x3088;&#x3046;&#x306B; <code>UI = f(state)</code> &#x306A;&#x3089;&#x3001;<code>state</code>&#xFF08;&#x30C7;&#x30FC;&#x30BF;&#xFF09;&#x304C;&#x6C7A;&#x307E;&#x308C;&#x3070; <code>UI</code>&#xFF08;&#x753B;&#x9762;&#x306E;&#x898B;&#x305F;&#x76EE;&#xFF09;&#x306F;&#x4E00;&#x610F;&#x306B;&#x6C7A;&#x307E;&#x308B;&#x3002;</p>
<p>&#x958B;&#x767A;&#x8005;&#x306F;&#x300C;UI&#x304C;&#x3069;&#x3046;&#x3042;&#x308B;&#x3079;&#x304D;&#x304B;&#x300D;&#x3060;&#x3051;&#x3092;&#x5BA3;&#x8A00;&#x3059;&#x308B;&#x3002;&#x300C;&#x3069;&#x3046;&#x3084;&#x3063;&#x3066;DOM&#x3092;&#x5909;&#x66F4;&#x3059;&#x308B;&#x304B;&#x300D;&#x306F;&#x8003;&#x3048;&#x306A;&#x304F;&#x3066;&#x3044;&#x3044;&#x3002;<code>todos</code> &#x304C;&#x5909;&#x308F;&#x308C;&#x3070;&#x3001;React&#x304C;&#x81EA;&#x52D5;&#x7684;&#x306B;DOM&#x3092;&#x66F4;&#x65B0;&#x3059;&#x308B;&#x3002;&#x72B6;&#x614B;&#x306E;&#x5909;&#x66F4;&#x306F;&#x5E38;&#x306B; <code>setState</code>&#xFF08;&#x3053;&#x3053;&#x3067;&#x306F; <code>setTodos</code>&#xFF09;&#x3092;&#x901A;&#x3058;&#x3066;&#x884C;&#x3046;&#x305F;&#x3081;&#x3001;&#x30C7;&#x30FC;&#x30BF;&#x306E;&#x6D41;&#x308C;&#x304C;&#x4E00;&#x65B9;&#x5411;&#x306B;&#x4FDD;&#x305F;&#x308C;&#x308B;&#x3002;</p>
<p><strong>&#x89E3;&#x6C7A;2: &#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#x306B;&#x3088;&#x308B;&#x8AAD;&#x89E3;&#x53EF;&#x80FD;&#x306A;UI</strong></p>
<p>&#x7B2C;2&#x7AE0;&#x3067;&#x89E6;&#x308C;&#x305F;&#x3088;&#x3046;&#x306B;&#x3001;jQuery&#x6642;&#x4EE3;&#x306F;&#x4ED6;&#x4EBA;&#x304C;&#x66F8;&#x3044;&#x305F;DOM&#x64CD;&#x4F5C;&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x8AAD;&#x307F;&#x89E3;&#x304F;&#x3053;&#x3068;&#x304C;&#x6975;&#x3081;&#x3066;&#x56F0;&#x96E3;&#x3060;&#x3063;&#x305F;&#x3002;React&#x306E;&#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#x306F;&#x3053;&#x306E;&#x554F;&#x984C;&#x3092;&#x69CB;&#x9020;&#x7684;&#x306B;&#x89E3;&#x6C7A;&#x3057;&#x305F;&#x3002;</p>
<pre><code class="language-jsx">// React&#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;: &#x8AB0;&#x304C;&#x66F8;&#x3044;&#x3066;&#x3082;&#x69CB;&#x9020;&#x304C;&#x8AAD;&#x3081;&#x308B;
function UserCard({ user }) {
  // &#x5165;&#x529B;: user&#x30AA;&#x30D6;&#x30B8;&#x30A7;&#x30AF;&#x30C8;
  return (
    // &#x51FA;&#x529B;: UI&#x306E;&#x5BA3;&#x8A00;
    &lt;div className=&quot;card&quot;&gt;
      &lt;Avatar src={user.avatar} /&gt; {/* &#x5225;&#x306E;&#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#x3092;&#x90E8;&#x54C1;&#x3068;&#x3057;&#x3066;&#x4F7F;&#x3046; */}
      &lt;h2&gt;{user.name}&lt;/h2&gt;
      &lt;p&gt;{user.bio}&lt;/p&gt;
    &lt;/div&gt;
  );
}
// props&#xFF08;&#x5165;&#x529B;&#xFF09;&#x3068;JSX&#xFF08;&#x51FA;&#x529B;&#xFF09;&#x304C;&#x660E;&#x78BA;&#x3002;&#x96A0;&#x308C;&#x305F;&#x526F;&#x4F5C;&#x7528;&#x304C;&#x306A;&#x3044;&#x3002;
// HTML&#x306B;&#x8FD1;&#x3044;&#x898B;&#x305F;&#x76EE;&#x306A;&#x306E;&#x3067;&#x3001;&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x8AAD;&#x3080;&#x3060;&#x3051;&#x3067;&#x753B;&#x9762;&#x69CB;&#x9020;&#x304C;&#x60F3;&#x50CF;&#x3067;&#x304D;&#x308B;&#x3002;
</code></pre>
<p>jQuery&#x6642;&#x4EE3;&#x306F;&#x524D;&#x7AE0;&#x3067;&#x898B;&#x305F;&#x3088;&#x3046;&#x306B;&#x3001;&#x540C;&#x3058;&#x30BF;&#x30D6;UI&#x3067;&#x3082;&#x4EBA;&#x306B;&#x3088;&#x3063;&#x3066;&#x5168;&#x304F;&#x9055;&#x3046;&#x30B3;&#x30FC;&#x30C9;&#x306B;&#x306A;&#x3063;&#x305F;&#x3002;React&#x3067;&#x306F; <code>&lt;UserCard&gt;</code> <code>&lt;Avatar&gt;</code> <code>&lt;TodoList&gt;</code> &#x3068;&#x3044;&#x3063;&#x305F;&#x540D;&#x524D;&#x4ED8;&#x304D;&#x306E;&#x518D;&#x5229;&#x7528;&#x53EF;&#x80FD;&#x306A;&#x90E8;&#x54C1;&#x3068;&#x3057;&#x3066;UI&#x3092;&#x69CB;&#x6210;&#x3059;&#x308B;&#x3002;&#x547D;&#x540D;&#x898F;&#x5247;&#x3082;&#x69CB;&#x9020;&#x3082;&#x7D71;&#x4E00;&#x3055;&#x308C;&#x308B;&#x305F;&#x3081;&#x3001;&#x8AB0;&#x304C;&#x66F8;&#x3044;&#x3066;&#x3082;&#x8AAD;&#x3081;&#x308B;&#x3002;</p>
<p><strong>&#x89E3;&#x6C7A;3: &#x5DEE;&#x5206;&#x66F4;&#x65B0;&#x306B;&#x3088;&#x308B;&#x52B9;&#x7387;&#x7684;&#x306A;&#x518D;&#x63CF;&#x753B;</strong></p>
<p>&#x30C6;&#x30F3;&#x30D7;&#x30EC;&#x30FC;&#x30C8;&#x30A8;&#x30F3;&#x30B8;&#x30F3;&#x306E;&#x300C;&#x5168;&#x4F53;&#x3092;&#x6BCE;&#x56DE;&#x4F5C;&#x308A;&#x76F4;&#x3059;&#x300D;&#x554F;&#x984C;&#x3092;&#x3001;&#x4EEE;&#x60F3;DOM&#xFF08;&#x5F8C;&#x8FF0;&#xFF09;&#x306B;&#x3088;&#x308B;&#x5DEE;&#x5206;&#x691C;&#x51FA;&#x3067;&#x89E3;&#x6C7A;&#x3057;&#x305F;&#x3002;&#x958B;&#x767A;&#x8005;&#x306F;&#x300C;&#x6BCE;&#x56DE;&#x5168;&#x4F53;&#x3092;&#x5BA3;&#x8A00;&#x3059;&#x308B;&#x300D;&#x3064;&#x3082;&#x308A;&#x3067;&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x66F8;&#x304F;&#x304C;&#x3001;React&#x306F;&#x5185;&#x90E8;&#x3067;&#x300C;&#x524D;&#x56DE;&#x3068;&#x4ECA;&#x56DE;&#x306E;&#x5DEE;&#x5206;&#x300D;&#x3060;&#x3051;&#x3092;&#x5B9F;&#x969B;&#x306E;DOM&#x306B;&#x9069;&#x7528;&#x3059;&#x308B;&#x3002;</p>
<pre><code>&#x958B;&#x767A;&#x8005;&#x306E;&#x8996;&#x70B9;:
  state&#x5909;&#x66F4; &#x2192; &#x5168;&#x4F53;&#x3092;&#x518D;&#x5BA3;&#x8A00;&#xFF08;&#x6BCE;&#x56DE;&#x5168;&#x90E8;&#x66F8;&#x304F;&#x611F;&#x899A;&#xFF09;
  &#x300C;&#x3053;&#x306E;&#x30C7;&#x30FC;&#x30BF;&#x306A;&#x3089;&#x3001;UI&#x306F;&#x3053;&#x3046;&#x300D;&#x3068;&#x6BCE;&#x56DE;&#x5B8C;&#x5168;&#x306A;&#x5F62;&#x3092;&#x66F8;&#x304F;&#x3060;&#x3051;&#x3002;

React&#x306E;&#x5185;&#x90E8;:
  state&#x5909;&#x66F4; &#x2192; &#x4EEE;&#x60F3;DOM&#x518D;&#x69CB;&#x7BC9; &#x2192; &#x524D;&#x56DE;&#x3068;&#x306E;&#x5DEE;&#x5206;&#x691C;&#x51FA; &#x2192; &#x5DEE;&#x5206;&#x3060;&#x3051;&#x5B9F;DOM&#x66F4;&#x65B0;
  &#x300C;&#x524D;&#x56DE;&#x3068;&#x6BD4;&#x3079;&#x3066;&#x5909;&#x308F;&#x3063;&#x305F;&#x306E;&#x306F;&#x3053;&#x3053;&#x3060;&#x3051;&#x300D;&#x3068;&#x5224;&#x5B9A;&#x3057;&#x3066;&#x3001;&#x6700;&#x5C0F;&#x9650;&#x306E;&#x66F4;&#x65B0;&#x3060;&#x3051;&#x884C;&#x3046;&#x3002;
</code></pre>
<p>&#x3053;&#x308C;&#x306B;&#x3088;&#x308A;&#x300C;&#x5BA3;&#x8A00;&#x7684;&#x306B;&#x66F8;&#x304D;&#x305F;&#x3044;&#x300D;&#x3068;&#x300C;&#x52B9;&#x7387;&#x7684;&#x306B;&#x66F4;&#x65B0;&#x3057;&#x305F;&#x3044;&#x300D;&#x304C;&#x4E21;&#x7ACB;&#x3057;&#x305F;&#x3002;&#x30C6;&#x30F3;&#x30D7;&#x30EC;&#x30FC;&#x30C8;&#x30A8;&#x30F3;&#x30B8;&#x30F3;&#x306E;&#x3088;&#x3046;&#x306B;&#x6BCE;&#x56DE;&#x5168;&#x4F53;&#x3092;&#x66F8;&#x304D;&#x76F4;&#x3059;&#x611F;&#x899A;&#x3067;&#x66F8;&#x3051;&#x308B;&#x306E;&#x306B;&#x3001;&#x5B9F;&#x969B;&#x306B;&#x306F;&#x5909;&#x66F4;&#x7B87;&#x6240;&#x3060;&#x3051;&#x304C;&#x66F4;&#x65B0;&#x3055;&#x308C;&#x308B;&#x3002;jQuery&#x6642;&#x4EE3;&#x306B;&#x4E0D;&#x53EF;&#x80FD;&#x3060;&#x3063;&#x305F;&#x3001;&#x30C6;&#x30F3;&#x30D7;&#x30EC;&#x30FC;&#x30C8;&#x306E;&#x53EF;&#x8AAD;&#x6027;&#x3068;&#x5DEE;&#x5206;&#x66F4;&#x65B0;&#x306E;&#x30D1;&#x30D5;&#x30A9;&#x30FC;&#x30DE;&#x30F3;&#x30B9;&#x306E;&#x4E21;&#x53D6;&#x308A;&#x304C;&#x5B9F;&#x73FE;&#x3057;&#x305F;&#x3002;</p>
<h3 id="%E3%80%8C%E5%86%8D%E7%99%BA%E6%98%8E%E3%80%8D%E3%81%AE%E8%AD%A6%E5%91%8A">&#x300C;&#x518D;&#x767A;&#x660E;&#x300D;&#x306E;&#x8B66;&#x544A;</h3>
<p>React&#x3092;&#x3084;&#x3081;&#x308B;&#x3068;&#x3001;&#x958B;&#x767A;&#x8005;&#x306F;&#x5927;&#x62B5;&#x4EE5;&#x4E0B;&#x306E;&#x3088;&#x3046;&#x306A;&#x9053;&#x3092;&#x8FBF;&#x3063;&#x3066;&#x3001;&#x7D50;&#x679C;&#x7684;&#x306B;&#x518D;&#x767A;&#x660E;&#x3059;&#x308B;&#x3053;&#x3068;&#x306B;&#x306A;&#x308B;&#x3002;</p>
<ol>
<li>&#x6700;&#x521D;&#x306F;&#x30D0;&#x30CB;&#x30E9;JS&#x3067;&#x5FEB;&#x9069;&#x306B;&#x66F8;&#x3051;&#x308B;&#xFF08;&#x8981;&#x7D20;&#x304C;&#x5C11;&#x306A;&#x3044;&#x3046;&#x3061;&#x306F;&#x554F;&#x984C;&#x306A;&#x3044;&#xFF09;</li>
<li>&#x8907;&#x96D1;&#x306B;&#x306A;&#x308B;&#x3068;DOM&#x306E;&#x72B6;&#x614B;&#x7BA1;&#x7406;&#x304C;&#x8F9B;&#x304F;&#x306A;&#x308B;&#xFF08;&#x3042;&#x308C;&#x3001;&#x3042;&#x306E;&#x8981;&#x7D20;&#x306F;&#x4ECA;&#x8868;&#x793A;&#x3055;&#x308C;&#x3066;&#x305F;&#x3063;&#x3051;&#xFF1F;&#xFF09;</li>
<li>&#x30C6;&#x30F3;&#x30D7;&#x30EC;&#x30FC;&#x30C8;&#x3092;&#x5C0E;&#x5165;&#x3059;&#x308B;&#xFF08;&#x30C7;&#x30FC;&#x30BF;&#x304B;&#x3089;HTML&#x751F;&#x6210;&#x3059;&#x308C;&#x3070;&#x697D;&#x306B;&#x306A;&#x308B;&#x306F;&#x305A;&#xFF01;&#xFF09;</li>
<li>&#x30C6;&#x30F3;&#x30D7;&#x30EC;&#x30FC;&#x30C8;&#x306E;&#x5168;&#x4F53;&#x518D;&#x69CB;&#x7BC9;&#x304C;&#x9045;&#x3044;&#x306E;&#x3067;&#x3001;&#x5DEE;&#x5206;&#x66F4;&#x65B0;&#x3092;&#x81EA;&#x524D;&#x3067;&#x5B9F;&#x88C5;&#x3057;&#x59CB;&#x3081;&#x308B;&#xFF08;&#x5909;&#x308F;&#x3063;&#x305F;&#x90E8;&#x5206;&#x3060;&#x3051;&#x66F4;&#x65B0;&#x3057;&#x3088;&#x3046;...&#xFF09;</li>
<li>&#x518D;&#x5229;&#x7528;&#x53EF;&#x80FD;&#x306A;&#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#x7684;&#x306A;&#x4ED5;&#x7D44;&#x307F;&#x3092;&#x4F5C;&#x308A;&#x59CB;&#x3081;&#x308B;&#xFF08;&#x30D8;&#x30C3;&#x30C0;&#x30FC;&#x3068;&#x304B;&#x30B5;&#x30A4;&#x30C9;&#x30D0;&#x30FC;&#x3068;&#x304B;&#x5171;&#x901A;&#x5316;&#x3057;&#x305F;&#x3044;...&#xFF09;</li>
<li>&#x6C17;&#x3065;&#x3044;&#x305F;&#x3089;React&#x306E;&#x52A3;&#x5316;&#x7248;&#x3092;&#x518D;&#x767A;&#x660E;&#x3057;&#x3066;&#x3044;&#x308B;</li>
</ol>
<p>&#x3053;&#x308C;&#x306F;React&#x304C;&#x300C;&#x4E00;&#x3064;&#x306E;&#x610F;&#x898B;&#x300D;&#x3067;&#x306F;&#x306A;&#x304F;&#x3001;<strong>UI&#x306E;&#x8907;&#x96D1;&#x3055;&#x306B;&#x5BFE;&#x3059;&#x308B;&#x69CB;&#x9020;&#x7684;&#x306A;&#x89E3;</strong>&#x3067;&#x3042;&#x308B;&#x3053;&#x3068;&#x3092;&#x793A;&#x3057;&#x3066;&#x3044;&#x308B;&#x3002;React/Next.js&#x304C;&#x4F7F;&#x308F;&#x308C;&#x7D9A;&#x3051;&#x3066;&#x3044;&#x308B;&#x306E;&#x306F;&#x3001;&#x5B97;&#x6559;&#x3067;&#x306F;&#x306A;&#x304F;&#x5408;&#x7406;&#x6027;&#x306B;&#x3088;&#x308B;&#x9078;&#x629E;&#x306A;&#x306E;&#x3060;&#x3002;</p>
<hr>
<h2 id="5-%E4%BB%AE%E6%83%B3dom%E3%81%A8%E3%81%84%E3%81%86%E7%8F%BE%E5%AE%9F%E8%A7%A3">5. &#x4EEE;&#x60F3;DOM&#x3068;&#x3044;&#x3046;&#x73FE;&#x5B9F;&#x89E3;</h2>
<h3 id="%E3%81%AA%E3%81%9C%E4%BB%AE%E6%83%B3dom%E3%81%8C%E9%81%B8%E3%81%B0%E3%82%8C%E3%81%9F%E3%81%8B">&#x306A;&#x305C;&#x4EEE;&#x60F3;DOM&#x304C;&#x9078;&#x3070;&#x308C;&#x305F;&#x304B;</h3>
<p>&#x300C;&#x5BA3;&#x8A00;&#x7684;UI&#x304C;&#x826F;&#x3044;&#x300D;&#x3068;&#x3044;&#x3046;&#x3053;&#x3068;&#x81EA;&#x4F53;&#x306F;&#x3001;React&#x4EE5;&#x524D;&#x304B;&#x3089;&#x591A;&#x304F;&#x306E;&#x958B;&#x767A;&#x8005;&#x304C;&#x611F;&#x3058;&#x3066;&#x3044;&#x305F;&#x3002;&#x554F;&#x984C;&#x306F;&#x300C;&#x3069;&#x3046;&#x3084;&#x3063;&#x3066;&#x5B9F;&#x73FE;&#x3059;&#x308B;&#x304B;&#x300D;&#x3060;&#x3063;&#x305F;&#x3002;2013&#x5E74;&#x524D;&#x5F8C;&#x3001;&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x30B5;&#x30A4;&#x30C9;&#x3067;&#x5BA3;&#x8A00;&#x7684;&#x306B;UI&#x3092;&#x69CB;&#x7BC9;&#x3059;&#x308B;&#x65B9;&#x6CD5;&#x3068;&#x3057;&#x3066;&#x3001;&#x8907;&#x6570;&#x306E;&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;&#x304C;&#x6A21;&#x7D22;&#x3055;&#x308C;&#x3066;&#x3044;&#x305F;&#x3002;&#x3053;&#x308C;&#x3089;&#x306F;SPA&#x306B;&#x9650;&#x3063;&#x305F;&#x8A71;&#x3067;&#x306F;&#x306A;&#x304F;&#x3001;&#x30DA;&#x30FC;&#x30B8;&#x306E;&#x4E00;&#x90E8;&#x3092;JavaScript&#x3067;&#x52D5;&#x7684;&#x306B;&#x66F4;&#x65B0;&#x3059;&#x308B;&#x3042;&#x3089;&#x3086;&#x308B;&#x5834;&#x9762;&#x306B;&#x95A2;&#x308F;&#x308B;&#x3002;</p>
<p><strong>&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;1: &#x30C6;&#x30F3;&#x30D7;&#x30EC;&#x30FC;&#x30C8; + innerHTML&#x4E00;&#x62EC;&#x7F6E;&#x63DB;</strong></p>
<p>&#x6700;&#x3082;&#x30B7;&#x30F3;&#x30D7;&#x30EB;&#x3060;&#x304C;&#x3001;&#x524D;&#x8FF0;&#x306E;&#x901A;&#x308A;&#x5168;&#x4F53;&#x518D;&#x69CB;&#x7BC9;&#x306B;&#x3088;&#x308B;&#x30D1;&#x30D5;&#x30A9;&#x30FC;&#x30DE;&#x30F3;&#x30B9;&#x52A3;&#x5316;&#x3068;UX&#x7834;&#x58CA;&#xFF08;&#x5165;&#x529B;&#x4E2D;&#x306E;&#x30D5;&#x30A9;&#x30FC;&#x30AB;&#x30B9;&#x304C;&#x6D88;&#x3048;&#x308B;&#x7B49;&#xFF09;&#x304C;&#x554F;&#x984C;&#x3002;</p>
<p><strong>&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;2: morphdom&#x7B49;&#x306E;&#x5B9F;DOM&#x5DEE;&#x5206;&#x6BD4;&#x8F03;</strong></p>
<p>&#x5B9F;DOM&#x30C4;&#x30EA;&#x30FC;&#x540C;&#x58EB;&#x3092;&#x76F4;&#x63A5;&#x6BD4;&#x8F03;&#x3057;&#x3066;&#x5DEE;&#x5206;&#x3092;&#x9069;&#x7528;&#x3059;&#x308B;&#x65B9;&#x6CD5;&#x3002;&#x3057;&#x304B;&#x3057;&#x5F53;&#x6642;&#x306F;&#x5B9F;&#x884C;&#x901F;&#x5EA6;&#x304C;&#x4F34;&#x308F;&#x306A;&#x304B;&#x3063;&#x305F;&#x3068;&#x3055;&#x308C;&#x308B;&#x3002;&#x5B9F;DOM&#x306F;&#x91CD;&#x3044;&#x3002;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x306F; <code>&lt;div&gt;</code> &#x8981;&#x7D20;&#x4E00;&#x3064;&#x306B;&#x5BFE;&#x3057;&#x3066;&#x3001;&#x4F4D;&#x7F6E;&#x3001;&#x30B5;&#x30A4;&#x30BA;&#x3001;&#x30B9;&#x30BF;&#x30A4;&#x30EB;&#x3001;&#x30A4;&#x30D9;&#x30F3;&#x30C8;&#x3001;&#x30A2;&#x30AF;&#x30BB;&#x30B7;&#x30D3;&#x30EA;&#x30C6;&#x30A3;&#x60C5;&#x5831;&#x306A;&#x3069;&#x4F55;&#x767E;&#x3082;&#x306E;&#x30D7;&#x30ED;&#x30D1;&#x30C6;&#x30A3;&#x3092;&#x7BA1;&#x7406;&#x3057;&#x3066;&#x3044;&#x308B;&#x3002;&#x5B9F;DOM&#x3092;&#x8AAD;&#x307F;&#x53D6;&#x308B;&#x3060;&#x3051;&#x3067;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x306E;&#x30EC;&#x30A4;&#x30A2;&#x30A6;&#x30C8;&#x8A08;&#x7B97;&#x304C;&#x8A98;&#x767A;&#x3055;&#x308C;&#x308B;&#x305F;&#x3081;&#x3001;&#x5927;&#x898F;&#x6A21;&#x306A;&#x30C4;&#x30EA;&#x30FC;&#x3067;&#x306F;&#x9045;&#x304F;&#x306A;&#x308B;&#x3002;</p>
<p><strong>&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;3: Tagged Template Literals&#xFF08;Lit&#x7B49;&#xFF09;</strong></p>
<p>&#x30C6;&#x30F3;&#x30D7;&#x30EC;&#x30FC;&#x30C8;&#x30EA;&#x30C6;&#x30E9;&#x30EB;&#xFF08;JavaScript&#x306E;&#x30D0;&#x30C3;&#x30AF;&#x30AF;&#x30A9;&#x30FC;&#x30C8; <code>`</code> &#x3092;&#x4F7F;&#x3063;&#x305F;&#x6587;&#x5B57;&#x5217;&#x30C6;&#x30F3;&#x30D7;&#x30EC;&#x30FC;&#x30C8;&#x6A5F;&#x80FD;&#xFF09;&#x3092;&#x4F7F;&#x3063;&#x3066;HTML&#x3092;&#x5BA3;&#x8A00;&#x7684;&#x306B;&#x66F8;&#x304F;&#x65B9;&#x6CD5;&#x3002;</p>
<pre><code class="language-js">// Lit&#xFF08;Web Components&#x30D9;&#x30FC;&#x30B9;&#x306E;&#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x30EA;&#xFF09;&#x306E;&#x4F8B;
import { html, LitElement } from &quot;lit&quot;;

class MyCounter extends LitElement {
  static properties = { count: { type: Number } };
  count = 0;

  render() {
    // html`...` &#x304C;Tagged Template Literal&#x3002;
    // &#x898B;&#x305F;&#x76EE;&#x306F;HTML&#x3060;&#x304C;&#x3001;&#x5B9F;&#x614B;&#x306F;JavaScript&#x306E;&#x6587;&#x5B57;&#x5217;&#x30C6;&#x30F3;&#x30D7;&#x30EC;&#x30FC;&#x30C8;&#x3002;
    return html`
      &lt;p&gt;Count: ${this.count}&lt;/p&gt;
      &lt;button @click=${() =&gt; this.count++}&gt;+&lt;/button&gt;
    `;
  }
}
</code></pre>
<p>JSX&#x3068;&#x4F3C;&#x305F;&#x300C;JavaScript&#x306E;&#x4E2D;&#x306B;HTML&#x3092;&#x66F8;&#x304F;&#x300D;&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;&#x3060;&#x304C;&#x3001;JSX&#x304C;&#x30D3;&#x30EB;&#x30C9;&#x30C4;&#x30FC;&#x30EB;&#x3067;&#x5909;&#x63DB;&#x3055;&#x308C;&#x308B;&#x72EC;&#x81EA;&#x69CB;&#x6587;&#x306A;&#x306E;&#x306B;&#x5BFE;&#x3057;&#x3001;Tagged Template Literals&#x306F;JavaScript&#x6A19;&#x6E96;&#x306E;&#x6A5F;&#x80FD;&#x3092;&#x305D;&#x306E;&#x307E;&#x307E;&#x4F7F;&#x3046;&#x3002;&#x30D3;&#x30EB;&#x30C9;&#x4E0D;&#x8981;&#x3067;&#x52D5;&#x304F;&#x306E;&#x304C;&#x5229;&#x70B9;&#x3060;&#x3002;&#x3057;&#x304B;&#x3057;&#x30A8;&#x30C7;&#x30A3;&#x30BF;&#x304B;&#x3089;&#x898B;&#x308B;&#x3068;&#x3001;&#x30D0;&#x30C3;&#x30AF;&#x30AF;&#x30A9;&#x30FC;&#x30C8;&#x306E;&#x4E2D;&#x8EAB;&#x306F;&#x305F;&#x3060;&#x306E;&#x6587;&#x5B57;&#x5217;&#x306A;&#x306E;&#x3067;&#x3001;LSP&#xFF08;Language Server Protocol &#x2014; &#x30A8;&#x30C7;&#x30A3;&#x30BF;&#x306E;&#x88DC;&#x5B8C;&#x30FB;&#x30A8;&#x30E9;&#x30FC;&#x8868;&#x793A;&#x7B49;&#x3092;&#x63D0;&#x4F9B;&#x3059;&#x308B;&#x4ED5;&#x7D44;&#x307F;&#xFF09;&#x3068;&#x306E;&#x9023;&#x643A;&#x304C;&#x4E0D;&#x5341;&#x5206;&#x306B;&#x306A;&#x308B;&#x3002;&#x305F;&#x3068;&#x3048;&#x3070; <code>&lt;buttton&gt;</code> &#x3068;&#x30BF;&#x30A4;&#x30DD;&#x3057;&#x3066;&#x3082;&#x30A8;&#x30E9;&#x30FC;&#x304C;&#x51FA;&#x306A;&#x3044;&#x3001;&#x5C5E;&#x6027;&#x540D;&#x306E;&#x88DC;&#x5B8C;&#x304C;&#x52B9;&#x304B;&#x306A;&#x3044;&#x306A;&#x3069;&#x3001;&#x958B;&#x767A;&#x4F53;&#x9A13;&#x306B;&#x30CF;&#x30F3;&#x30C7;&#x304C;&#x3042;&#x3063;&#x305F;&#x3002;</p>
<p><strong>&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;4: &#x4EEE;&#x60F3;DOM&#xFF08;React&#xFF09;</strong></p>
<p>&#x4EEE;&#x60F3;DOM&#x3068;&#x306F;&#x4F55;&#x304B;&#x3002;&#x5177;&#x4F53;&#x4F8B;&#x3067;&#x898B;&#x3066;&#x307F;&#x3088;&#x3046;&#x3002;</p>
<pre><code>&#x5B9F;DOM&#xFF08;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x304C;&#x7BA1;&#x7406;&#x3059;&#x308B;&#x3001;&#x91CD;&#x3044;&#x30AA;&#x30D6;&#x30B8;&#x30A7;&#x30AF;&#x30C8;&#xFF09;:
  &lt;ul&gt;               &#x2190; &#x4F4D;&#x7F6E;&#x3001;&#x30B5;&#x30A4;&#x30BA;&#x3001;&#x30B9;&#x30AF;&#x30ED;&#x30FC;&#x30EB;&#x4F4D;&#x7F6E;&#x3001;&#x30A4;&#x30D9;&#x30F3;&#x30C8;&#x30EA;&#x30B9;&#x30CA;&#x30FC;...
    &lt;li&gt;Buy milk&lt;/li&gt; &#x2190; &#x540C;&#x4E0A;&#x3001;&#x4F55;&#x767E;&#x3082;&#x306E;&#x30D7;&#x30ED;&#x30D1;&#x30C6;&#x30A3;
    &lt;li&gt;Walk dog&lt;/li&gt;  &#x2190; &#x540C;&#x4E0A;
  &lt;/ul&gt;

&#x4EEE;&#x60F3;DOM&#xFF08;React&#x304C;&#x7BA1;&#x7406;&#x3059;&#x308B;&#x3001;&#x8EFD;&#x3044;JS&#x30AA;&#x30D6;&#x30B8;&#x30A7;&#x30AF;&#x30C8;&#xFF09;:
  { type: &apos;ul&apos;, children: [
    { type: &apos;li&apos;, text: &apos;Buy milk&apos; },  &#x2190; &#x305F;&#x3060;&#x306E;JS&#x30AA;&#x30D6;&#x30B8;&#x30A7;&#x30AF;&#x30C8;&#x3002;&#x30D7;&#x30ED;&#x30D1;&#x30C6;&#x30A3;&#x306F;&#x6570;&#x500B;&#x3060;&#x3051;
    { type: &apos;li&apos;, text: &apos;Walk dog&apos; }
  ]}
</code></pre>
<p>&#x305F;&#x3068;&#x3048;&#x308B;&#x306A;&#x3089;&#x3001;&#x5EFA;&#x7269;&#x3092;&#x6539;&#x7BC9;&#x3059;&#x308B;&#x3068;&#x304D;&#x3001;&#x6BCE;&#x56DE;&#x5EFA;&#x7269;&#x5168;&#x4F53;&#x3092;&#x58CA;&#x3057;&#x3066;&#x5EFA;&#x3066;&#x76F4;&#x3059;&#xFF08;innerHTML&#x4E00;&#x62EC;&#x7F6E;&#x63DB;&#xFF09;&#x306E;&#x3067;&#x306F;&#x306A;&#x304F;&#x3001;&#x65B0;&#x65E7;&#x306E;<strong>&#x8A2D;&#x8A08;&#x56F3;</strong>&#xFF08;&#x4EEE;&#x60F3;DOM&#xFF09;&#x3092;&#x898B;&#x6BD4;&#x3079;&#x3066;&#x300C;&#x3053;&#x3053;&#x306E;&#x58C1;&#x3060;&#x3051;&#x5909;&#x308F;&#x3063;&#x305F;&#x300D;&#x3068;&#x7279;&#x5B9A;&#x3057;&#x3001;&#x305D;&#x306E;&#x90E8;&#x5206;&#x3060;&#x3051;&#x5DE5;&#x4E8B;&#x3059;&#x308B;&#x2014;&#x2014;&#x3068;&#x3044;&#x3046;&#x30A4;&#x30E1;&#x30FC;&#x30B8;&#x3060;&#x3002;&#x8A2D;&#x8A08;&#x56F3;&#x540C;&#x58EB;&#x306E;&#x6BD4;&#x8F03;&#x306F;&#x7D19;&#x306E;&#x4E0A;&#x306E;&#x4F5C;&#x696D;&#x306A;&#x306E;&#x3067;&#x901F;&#x3044;&#x3002;&#x5B9F;&#x969B;&#x306E;&#x5EFA;&#x7269;&#xFF08;&#x5B9F;DOM&#xFF09;&#x3092;&#x3044;&#x3061;&#x3044;&#x3061;&#x8A08;&#x6E2C;&#x3057;&#x3066;&#x56DE;&#x308B;&#x5FC5;&#x8981;&#x304C;&#x306A;&#x3044;&#x3002;</p>
<p>&#x4EEE;&#x60F3;DOM&#x306F;&#x300C;&#x6700;&#x3082;&#x7F8E;&#x3057;&#x3044;&#x89E3;&#x300D;&#x3067;&#x306F;&#x306A;&#x304B;&#x3063;&#x305F;&#x304B;&#x3082;&#x3057;&#x308C;&#x306A;&#x3044;&#x304C;&#x3001;2013&#x5E74;&#x6642;&#x70B9;&#x3067;&#x5229;&#x7528;&#x53EF;&#x80FD;&#x306A;&#x6280;&#x8853;&#x306E;&#x4E2D;&#x3067;<strong>&#x6700;&#x3082;&#x30D0;&#x30E9;&#x30F3;&#x30B9;&#x306E;&#x53D6;&#x308C;&#x305F;&#x73FE;&#x5B9F;&#x89E3;</strong>&#x3060;&#x3063;&#x305F;&#x3002;</p>
<h3 id="web-components%E3%81%AF%E3%81%AA%E3%81%9C%E6%99%AE%E5%8F%8A%E3%81%97%E3%81%AA%E3%81%8B%E3%81%A3%E3%81%9F%E3%81%8B">Web Components&#x306F;&#x306A;&#x305C;&#x666E;&#x53CA;&#x3057;&#x306A;&#x304B;&#x3063;&#x305F;&#x304B;</h3>
<p>Web Components&#xFF08;Custom Elements, Shadow DOM, HTML Templates&#xFF09;&#x306F;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x6A19;&#x6E96;&#x3067;&#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#x3092;&#x5B9F;&#x73FE;&#x3059;&#x308B;&#x4ED5;&#x69D8;&#x3068;&#x3057;&#x3066;&#x671F;&#x5F85;&#x3055;&#x308C;&#x305F;&#x3002;&#x300C;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x306B;&#x7D44;&#x307F;&#x8FBC;&#x307E;&#x308C;&#x305F;&#x516C;&#x5F0F;&#x306E;&#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#x6A5F;&#x80FD;&#x300D;&#x3068;&#x805E;&#x3051;&#x3070;&#x3001;&#x305D;&#x308C;&#x304C;&#x6700;&#x5584;&#x306E;&#x9078;&#x629E;&#x306B;&#x601D;&#x3048;&#x308B;&#x3002;&#x3057;&#x304B;&#x3057;&#x73FE;&#x5B9F;&#x306B;&#x306F;&#x3001;&#x3044;&#x304F;&#x3064;&#x3082;&#x306E;&#x554F;&#x984C;&#x3092;&#x62B1;&#x3048;&#x3066;&#x3044;&#x305F;&#x3002;</p>
<ul>
<li><strong>&#x30EA;&#x30A2;&#x30AF;&#x30C6;&#x30A3;&#x30D3;&#x30C6;&#x30A3;&#x306E;&#x6B20;&#x5982;</strong>: &#x30EA;&#x30A2;&#x30AF;&#x30C6;&#x30A3;&#x30D3;&#x30C6;&#x30A3;&#xFF08;reactivity&#xFF09;&#x3068;&#x306F;&#x300C;&#x30C7;&#x30FC;&#x30BF;&#x304C;&#x5909;&#x308F;&#x3063;&#x305F;&#x3089;&#x3001;&#x305D;&#x306E;&#x30C7;&#x30FC;&#x30BF;&#x306B;&#x4F9D;&#x5B58;&#x3057;&#x3066;&#x3044;&#x308B;UI&#x304C;&#x81EA;&#x52D5;&#x7684;&#x306B;&#x66F4;&#x65B0;&#x3055;&#x308C;&#x308B;&#x300D;&#x6027;&#x8CEA; <code>UI = f(state)</code> &#x306E;&#x3053;&#x3068;&#x3060;&#x3002;React&#x306E; <code>useState</code> &#x3067;&#x5024;&#x3092;&#x66F4;&#x65B0;&#x3059;&#x308B;&#x3068;&#x753B;&#x9762;&#x304C;&#x81EA;&#x52D5;&#x3067;&#x5909;&#x308F;&#x308B;&#x306E;&#x306F;&#x3001;React&#x306B;&#x30EA;&#x30A2;&#x30AF;&#x30C6;&#x30A3;&#x30D3;&#x30C6;&#x30A3;&#x306E;&#x4ED5;&#x7D44;&#x307F;&#x304C;&#x3042;&#x308B;&#x304B;&#x3089;&#x3060;&#x3002;Web Components&#x306B;&#x306F;&#x3053;&#x306E;&#x4ED5;&#x7D44;&#x307F;&#x304C;&#x306A;&#x3044;&#x3002;&#x30C7;&#x30FC;&#x30BF;&#x306E;&#x5909;&#x66F4;&#x3092;&#x691C;&#x77E5;&#x3057;&#x3066;UI&#x3092;&#x66F4;&#x65B0;&#x3059;&#x308B;&#x30ED;&#x30B8;&#x30C3;&#x30AF;&#x3092;&#x81EA;&#x524D;&#x3067;&#x5B9F;&#x88C5;&#x3059;&#x308B;&#x5FC5;&#x8981;&#x304C;&#x3042;&#x308B;&#x3002;&#x3064;&#x307E;&#x308A;&#x3001;&#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#x306E;&#x300C;&#x7BB1;&#x300D;&#x306F;&#x63D0;&#x4F9B;&#x3055;&#x308C;&#x308B;&#x304C;&#x3001;&#x4E2D;&#x8EAB;&#x306E;&#x52D5;&#x304D;&#x65B9;&#x306F;&#x81EA;&#x5206;&#x3067;&#x5168;&#x90E8;&#x4F5C;&#x3089;&#x306A;&#x3051;&#x308C;&#x3070;&#x306A;&#x3089;&#x306A;&#x3044;</li>
<li><strong>&#x69CB;&#x6210;&#x6027;&#x306E;&#x9650;&#x754C;</strong>: Shadow DOM&#xFF08;&#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#x306E;&#x30B9;&#x30BF;&#x30A4;&#x30EB;&#x304C;&#x5916;&#x306B;&#x6F0F;&#x308C;&#x306A;&#x3044;&#x3088;&#x3046;&#x306B;&#x3059;&#x308B;&#x4ED5;&#x7D44;&#x307F;&#xFF09;&#x306F;&#x3042;&#x308B;&#x304C;&#x3001;&#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#x9593;&#x306E;&#x30C7;&#x30FC;&#x30BF;&#x306E;&#x53D7;&#x3051;&#x6E21;&#x3057;&#xFF08;React&#x306E;props&#x306B;&#x76F8;&#x5F53;&#x3059;&#x308B;&#x6A5F;&#x80FD;&#xFF09;&#x304C;&#x8CA7;&#x5F31;</li>
<li><strong>&#x30A8;&#x30B3;&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x306E;&#x5206;&#x88C2;</strong>: &#x8907;&#x6570;&#x306E;&#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x30EA;&#xFF08;Polymer, Lit, Stencil&#x7B49;&#xFF09;&#x304C;&#x305D;&#x308C;&#x305E;&#x308C;&#x7570;&#x306A;&#x308B;&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;&#x3092;&#x53D6;&#x308A;&#x3001;&#x7D71;&#x4E00;&#x3055;&#x308C;&#x305F;&#x30B3;&#x30DF;&#x30E5;&#x30CB;&#x30C6;&#x30A3;&#x304C;&#x5F62;&#x6210;&#x3055;&#x308C;&#x306A;&#x304B;&#x3063;&#x305F;</li>
<li><strong>&#x6A19;&#x6E96;&#x5316;&#x306E;&#x9045;&#x5EF6;</strong>: W3C&#xFF08;Web&#x6A19;&#x6E96;&#x306E;&#x7B56;&#x5B9A;&#x56E3;&#x4F53;&#xFF09;&#x3067;&#x306E;&#x6A19;&#x6E96;&#x5316;&#x30D7;&#x30ED;&#x30BB;&#x30B9;&#x306B;&#x6642;&#x9593;&#x304C;&#x304B;&#x304B;&#x308B;&#x9593;&#x306B;React/Vue/Angular&#x306E;&#x30A8;&#x30B3;&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x304C;&#x6210;&#x719F;&#x3057;&#x3066;&#x3057;&#x307E;&#x3063;&#x305F;</li>
</ul>
<p>W3C&#x3084;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x30D9;&#x30F3;&#x30C0;&#x30FC;&#x304C;Web Components&#x306E;&#x6A19;&#x6E96;&#x5316;&#x306B;&#x591A;&#x5927;&#x306A;&#x52B4;&#x529B;&#x3092;&#x6CE8;&#x304E;&#x8FBC;&#x3093;&#x3060;&#x3053;&#x3068;&#x3067;&#x3001;&#x958B;&#x767A;&#x8005;&#x304C;&#x672C;&#x5F53;&#x306B;&#x6C42;&#x3081;&#x3066;&#x3044;&#x305F;&#x6A5F;&#x80FD;&#x2014;&#x2014;&#x30EA;&#x30A2;&#x30AF;&#x30C6;&#x30A3;&#x30D3;&#x30C6;&#x30A3;&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x3084;&#x5BA3;&#x8A00;&#x7684;&#x306A;&#x30EC;&#x30F3;&#x30C0;&#x30EA;&#x30F3;&#x30B0;API&#x2014;&#x2014;&#x306E;&#x6A19;&#x6E96;&#x5316;&#x306B;&#x30EA;&#x30BD;&#x30FC;&#x30B9;&#x304C;&#x56DE;&#x3089;&#x306A;&#x304B;&#x3063;&#x305F;&#x3068;&#x3044;&#x3046;&#x8AAC;&#x3082;&#x3042;&#x308B;&#x3002;</p>
<hr>
<h2 id="6-%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89%E3%83%90%E3%83%83%E3%82%AF%E3%82%A8%E3%83%B3%E3%83%89%E5%88%86%E9%9B%A2%E3%81%AE%E5%8A%9F%E7%BD%AA">6. &#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;/&#x30D0;&#x30C3;&#x30AF;&#x30A8;&#x30F3;&#x30C9;&#x5206;&#x96E2;&#x306E;&#x529F;&#x7F6A;</h2>
<h3 id="api-spa%E5%88%86%E9%9B%A2%E3%81%AF%E3%81%AA%E3%81%9C%E8%B5%B7%E3%81%8D%E3%81%9F%E3%81%8B">API + SPA&#x5206;&#x96E2;&#x306F;&#x306A;&#x305C;&#x8D77;&#x304D;&#x305F;&#x304B;</h3>
<p>React&#x306E;&#x666E;&#x53CA;&#x306B;&#x4F34;&#x3044;&#x3001;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x958B;&#x767A;&#x306E;&#x30A2;&#x30FC;&#x30AD;&#x30C6;&#x30AF;&#x30C1;&#x30E3;&#xFF08;&#x8A2D;&#x8A08;&#x306E;&#x69CB;&#x9020;&#xFF09;&#x306F;&#x5927;&#x304D;&#x304F;&#x5909;&#x308F;&#x3063;&#x305F;&#x3002;</p>
<p><strong>&#x5F93;&#x6765;&#x306E;&#x30A2;&#x30FC;&#x30AD;&#x30C6;&#x30AF;&#x30C1;&#x30E3;&#xFF08;MPA &#x2014; Multi Page Application&#xFF09;:</strong></p>
<p>&#x7B2C;4&#x7AE0;&#x3067;&#x898B;&#x305F;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x30B5;&#x30A4;&#x30C9;MVC&#x306E;&#x69CB;&#x56F3;&#x304C;&#x305D;&#x306E;&#x307E;&#x307E;<strong>MPA</strong>&#xFF08;Multi Page Application&#xFF09;&#x3060;&#x3002;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x3068;&#x30D0;&#x30C3;&#x30AF;&#x30A8;&#x30F3;&#x30C9;&#x306F;&#x540C;&#x3058;&#x30A2;&#x30D7;&#x30EA;&#x30B1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x5185;&#x306B;&#x3042;&#x308A;&#x3001;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x304C;&#x30EA;&#x30F3;&#x30AF;&#x3092;&#x30AF;&#x30EA;&#x30C3;&#x30AF;&#x3059;&#x308B;&#x305F;&#x3073;&#x306B;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x304C;&#x5B8C;&#x6210;&#x3057;&#x305F;HTML&#x3092;&#x8FD4;&#x3057;&#x3001;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x304C;&#x30DA;&#x30FC;&#x30B8;&#x5168;&#x4F53;&#x3092;&#x4E38;&#x3054;&#x3068;&#x8868;&#x793A;&#x3057;&#x76F4;&#x3059;&#x3002;&#x300C;&#x8907;&#x6570;&#x306E;&#x30DA;&#x30FC;&#x30B8;&#x9593;&#x3092;&#x9077;&#x79FB;&#x3059;&#x308B;&#x300D;&#x304B;&#x3089;Multi Page Application&#x3068;&#x547C;&#x3076;&#x3002;</p>
<p><img src="http://blog.shinonome.io/content/images/2026/03/diagram-6.jpg" alt="React&#x306E;&#x767A;&#x660E;&#x3068;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x601D;&#x60F3;&#x306E;&#x5909;&#x9077;" loading="lazy"></p>
<p><strong>SPA&#x6642;&#x4EE3;&#x306E;&#x30A2;&#x30FC;&#x30AD;&#x30C6;&#x30AF;&#x30C1;&#x30E3;&#xFF08;&#x5206;&#x96E2;&#xFF09;:</strong></p>
<p>&#x3053;&#x308C;&#x306B;&#x5BFE;&#x3057;&#x3066;&#x767B;&#x5834;&#x3057;&#x305F;&#x306E;&#x304C;<strong>SPA</strong>&#xFF08;Single Page Application&#xFF09;&#x3060;&#x3002;SPA&#x3067;&#x306F;&#x30DA;&#x30FC;&#x30B8;&#x9077;&#x79FB;&#x3092;&#x884C;&#x308F;&#x305A;&#x3001;&#x6700;&#x521D;&#x306B;&#x8AAD;&#x307F;&#x8FBC;&#x3093;&#x3060;JavaScript&#x304C;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x4E0A;&#x3067;UI&#x3092;&#x4E38;&#x3054;&#x3068;&#x69CB;&#x7BC9;&#x30FB;&#x66F4;&#x65B0;&#x3059;&#x308B;&#x3002;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x304B;&#x3089;&#x306F;&#x30C7;&#x30FC;&#x30BF;&#xFF08;JSON&#xFF09;&#x3060;&#x3051;&#x3092;&#x53D7;&#x3051;&#x53D6;&#x308A;&#x3001;&#x753B;&#x9762;&#x306E;&#x66F8;&#x304D;&#x63DB;&#x3048;&#x306F;&#x3059;&#x3079;&#x3066;&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x5074;&#x306E;JavaScript&#x304C;&#x62C5;&#x3046;&#x3002;&#x3053;&#x306E;&#x65B9;&#x5F0F;&#x306F;<strong>CSR</strong>&#xFF08;Client-Side Rendering &#x2014; &#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x30B5;&#x30A4;&#x30C9;&#x30EC;&#x30F3;&#x30C0;&#x30EA;&#x30F3;&#x30B0;&#xFF09;&#x3068;&#x3082;&#x547C;&#x3070;&#x308C;&#x308B;&#x3002;</p>
<p>&#x7D50;&#x679C;&#x3068;&#x3057;&#x3066;&#x3001;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#xFF08;React&#xFF09;&#x3068;&#x30D0;&#x30C3;&#x30AF;&#x30A8;&#x30F3;&#x30C9;&#xFF08;API&#xFF09;&#x306F;&#x5225;&#x306E;&#x30A2;&#x30D7;&#x30EA;&#x30B1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x306B;&#x5206;&#x96E2;&#x3059;&#x308B;&#x3002;</p>
<p><img src="http://blog.shinonome.io/content/images/2026/03/diagram-8.jpg" alt="React&#x306E;&#x767A;&#x660E;&#x3068;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x601D;&#x60F3;&#x306E;&#x5909;&#x9077;" loading="lazy"></p>
<p>SPA&#x3067;&#x306F;&#x521D;&#x56DE;&#x30A2;&#x30AF;&#x30BB;&#x30B9;&#x6642;&#x306B;JavaScript&#x306E;&#x30D0;&#x30F3;&#x30C9;&#x30EB;&#xFF08;&#x30A2;&#x30D7;&#x30EA;&#x30B1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x306E;&#x30B3;&#x30FC;&#x30C9;&#x4E00;&#x5F0F;&#xFF09;&#x3092;&#x307E;&#x3068;&#x3081;&#x3066;&#x8AAD;&#x307F;&#x8FBC;&#x3080;&#x3002;&#x305D;&#x306E;&#x305F;&#x3081;<strong>&#x521D;&#x56DE;&#x8868;&#x793A;&#x304C;&#x9045;&#x304F;&#x306A;&#x308A;&#x3084;&#x3059;&#x3044;</strong>&#x3002;&#x4E00;&#x65B9;&#x3067;&#x3001;&#x305D;&#x306E;&#x5F8C;&#x306E;&#x64CD;&#x4F5C;&#x3067;&#x306F;&#x30DA;&#x30FC;&#x30B8;&#x5168;&#x4F53;&#x306E;&#x518D;&#x8AAD;&#x307F;&#x8FBC;&#x307F;&#x304C;&#x4E0D;&#x8981;&#x306B;&#x306A;&#x308B;&#x305F;&#x3081;&#x3001;&#x30CD;&#x30A4;&#x30C6;&#x30A3;&#x30D6;&#x30A2;&#x30D7;&#x30EA;&#x306E;&#x3088;&#x3046;&#x306A;&#x6ED1;&#x3089;&#x304B;&#x306A;&#x64CD;&#x4F5C;&#x611F;&#x304C;&#x5F97;&#x3089;&#x308C;&#x308B;&#x3002;</p>
<p>&#x3053;&#x306E;&#x5206;&#x96E2;&#x306B;&#x306F;&#x5408;&#x7406;&#x7684;&#x306A;&#x7406;&#x7531;&#x304C;&#x3042;&#x3063;&#x305F;&#x3002;</p>
<ul>
<li><strong>UI&#x306E;&#x8907;&#x96D1;&#x3055;&#x3078;&#x306E;&#x5BFE;&#x5FDC;</strong>: &#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x5074;&#x3067;&#x8C4A;&#x304B;&#x306A;&#x30A4;&#x30F3;&#x30BF;&#x30E9;&#x30AF;&#x30B7;&#x30E7;&#x30F3;&#x3092;&#x5B9F;&#x73FE;&#x3059;&#x308B;&#x305F;&#x3081;&#x306B;&#x306F;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x5C02;&#x7528;&#x306E;&#x30D5;&#x30EC;&#x30FC;&#x30E0;&#x30EF;&#x30FC;&#x30AF;&#x304C;&#x5FC5;&#x8981;&#x3060;&#x3063;&#x305F;</li>
<li><strong>&#x5206;&#x696D;&#x306E;&#x52B9;&#x7387;&#x5316;</strong>: &#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x30A8;&#x30F3;&#x30B8;&#x30CB;&#x30A2;&#x3068;&#x30D0;&#x30C3;&#x30AF;&#x30A8;&#x30F3;&#x30C9;&#x30A8;&#x30F3;&#x30B8;&#x30CB;&#x30A2;&#x304C;&#x72EC;&#x7ACB;&#x3057;&#x3066;&#x958B;&#x767A;&#x3067;&#x304D;&#x308B;</li>
<li><strong>API&#x306E;&#x518D;&#x5229;&#x7528;</strong>: &#x540C;&#x3058;API&#x3092;Web&#x3001;&#x30E2;&#x30D0;&#x30A4;&#x30EB;&#x30A2;&#x30D7;&#x30EA;&#x3001;&#x5916;&#x90E8;&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x304C;&#x5171;&#x6709;&#x3067;&#x304D;&#x308B;</li>
</ul>
<p>&#x3059;&#x3079;&#x3066;&#x306E;&#x64CD;&#x4F5C;&#x3067;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x3092;&#x7D4C;&#x7531;&#x3059;&#x308B;&#x306E;&#x306F;&#x3001;&#x30EC;&#x30A4;&#x30C6;&#x30F3;&#x30B7;&#x30FC;&#xFF08;&#x901A;&#x4FE1;&#x306E;&#x9045;&#x5EF6;&#xFF09;&#x7684;&#x306B;&#x3082;&#x72B6;&#x614B;&#x4FDD;&#x6301;&#x7684;&#x306B;&#x3082;&#x7121;&#x7406;&#x304C;&#x3042;&#x3063;&#x305F;&#x3002;API + SPA&#x3068;&#x3044;&#x3046;&#x843D;&#x3068;&#x3057;&#x6240;&#x306F;&#x3001;&#x5F53;&#x6642;&#x3068;&#x3057;&#x3066;&#x306F;&#x30D0;&#x30E9;&#x30F3;&#x30B9;&#x304C;&#x53D6;&#x308C;&#x305F;&#x5747;&#x8861;&#x70B9;&#x3060;&#x3063;&#x305F;&#x3068;&#x8A00;&#x3048;&#x308B;&#x3002;</p>
<h3 id="%E5%88%86%E9%9B%A2%E3%81%8C%E3%82%82%E3%81%9F%E3%82%89%E3%81%97%E3%81%9F%E6%96%B0%E3%81%9F%E3%81%AA%E5%95%8F%E9%A1%8C">&#x5206;&#x96E2;&#x304C;&#x3082;&#x305F;&#x3089;&#x3057;&#x305F;&#x65B0;&#x305F;&#x306A;&#x554F;&#x984C;</h3>
<p>&#x3057;&#x304B;&#x3057;&#x3053;&#x306E;&#x5206;&#x96E2;&#x306F;&#x305D;&#x308C;&#x81EA;&#x4F53;&#x304C;&#x65B0;&#x305F;&#x306A;&#x8907;&#x96D1;&#x3055;&#x3092;&#x751F;&#x3093;&#x3060;&#x3002;</p>
<p><strong>&#x30C7;&#x30FC;&#x30BF;&#x306E;&#x30D5;&#x30A7;&#x30C3;&#x30C1;&#x3068;&#x540C;&#x671F;&#x306E;&#x8907;&#x96D1;&#x3055;</strong>:</p>
<pre><code>SPA&#x3067;&#x30C7;&#x30FC;&#x30BF;&#x3092;&#x6271;&#x3046;&#x969B;&#x306E;&#x5178;&#x578B;&#x7684;&#x306A;&#x51E6;&#x7406;&#x30D5;&#x30ED;&#x30FC;:

1. &#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x306B;API&#x30EA;&#x30AF;&#x30A8;&#x30B9;&#x30C8;&#x3092;&#x9001;&#x308B;
2. &#x30EC;&#x30B9;&#x30DD;&#x30F3;&#x30B9;&#x304C;&#x8FD4;&#x3063;&#x3066;&#x304F;&#x308B;&#x307E;&#x3067;&#x30ED;&#x30FC;&#x30C7;&#x30A3;&#x30F3;&#x30B0;&#x8868;&#x793A;&#x3092;&#x51FA;&#x3059;
3. &#x30C7;&#x30FC;&#x30BF;&#x304C;&#x8FD4;&#x3063;&#x3066;&#x304D;&#x305F;&#x3089;&#x30AD;&#x30E3;&#x30C3;&#x30B7;&#x30E5;&#x306B;&#x4FDD;&#x5B58;&#x3057;&#x3066;UI&#x306B;&#x53CD;&#x6620;&#x3059;&#x308B;
4. &#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x304C;&#x7DE8;&#x96C6;&#x3057;&#x305F;&#x3089;&#x300C;&#x697D;&#x89B3;&#x7684;&#x66F4;&#x65B0;&#x300D;&#x3059;&#x308B;
   &#xFF08;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x306E;&#x5FDC;&#x7B54;&#x3092;&#x5F85;&#x305F;&#x305A;&#x306B;UI&#x3092;&#x5148;&#x306B;&#x66F4;&#x65B0;&#x3057;&#x3001;&#x5931;&#x6557;&#x3057;&#x305F;&#x3089;&#x5DFB;&#x304D;&#x623B;&#x3059;&#xFF09;
5. &#x4E00;&#x5B9A;&#x6642;&#x9593;&#x5F8C;&#x306B;&#x30AD;&#x30E3;&#x30C3;&#x30B7;&#x30E5;&#x304C;&#x53E4;&#x304F;&#x306A;&#x3063;&#x305F;&#x3089;&#x518D;&#x53D6;&#x5F97;&#x3059;&#x308B;
6. &#x5225;&#x306E;&#x753B;&#x9762;&#x3067;&#x540C;&#x3058;&#x30C7;&#x30FC;&#x30BF;&#x3092;&#x4F7F;&#x3063;&#x3066;&#x3044;&#x305F;&#x3089;&#x3001;&#x305D;&#x3061;&#x3089;&#x3082;&#x66F4;&#x65B0;&#x3059;&#x308B;

&#x2192; &#x3053;&#x306E;&#x51E6;&#x7406;&#x3092;&#x5168;API&#x30A8;&#x30F3;&#x30C9;&#x30DD;&#x30A4;&#x30F3;&#x30C8;&#x306B;&#x5BFE;&#x3057;&#x3066;&#x66F8;&#x304F;&#x5FC5;&#x8981;&#x304C;&#x3042;&#x308B;
</code></pre>
<p>TanStack Query&#x3084;SWR&#x306E;&#x3088;&#x3046;&#x306A;&#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x30EA;&#x306F;&#x3001;&#x307E;&#x3055;&#x306B;&#x3053;&#x306E;&#x300C;API&#x30C7;&#x30FC;&#x30BF;&#x306E;&#x53D6;&#x5F97;&#x30FB;&#x30AD;&#x30E3;&#x30C3;&#x30B7;&#x30E5;&#x30FB;&#x518D;&#x691C;&#x8A3C;&#x300D;&#x3092;&#x81EA;&#x52D5;&#x5316;&#x3059;&#x308B;&#x305F;&#x3081;&#x306B;&#x751F;&#x307E;&#x308C;&#x305F;&#x3002;&#x88CF;&#x3092;&#x8FD4;&#x305B;&#x3070;&#x3001;&#x305D;&#x308C;&#x3060;&#x3051;&#x8907;&#x96D1;&#x306A;&#x51E6;&#x7406;&#x304C;&#x5FC5;&#x8981;&#x306B;&#x306A;&#x3063;&#x3066;&#x3044;&#x308B;&#x3068;&#x3044;&#x3046;&#x3053;&#x3068;&#x3060;&#x3002;</p>
<p><strong>&#x300C;&#x578B;&#x306E;&#x4E8C;&#x91CD;&#x7BA1;&#x7406;&#x300D;</strong>: API&#x306E;&#x30EA;&#x30AF;&#x30A8;&#x30B9;&#x30C8;/&#x30EC;&#x30B9;&#x30DD;&#x30F3;&#x30B9;&#x306E;&#x578B;&#xFF08;&#x30C7;&#x30FC;&#x30BF;&#x306E;&#x5F62;&#xFF09;&#x3092;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x3068;&#x30D0;&#x30C3;&#x30AF;&#x30A8;&#x30F3;&#x30C9;&#x306E;&#x4E21;&#x65B9;&#x3067;&#x5B9A;&#x7FA9;&#x30FB;&#x7DAD;&#x6301;&#x3059;&#x308B;&#x5FC5;&#x8981;&#x304C;&#x3042;&#x308B;&#x3002;&#x305F;&#x3068;&#x3048;&#x3070;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x60C5;&#x5831;&#x306E;API&#x3067; <code>email</code> &#x30D5;&#x30A3;&#x30FC;&#x30EB;&#x30C9;&#x3092;&#x8FFD;&#x52A0;&#x3057;&#x305F;&#x3089;&#x3001;&#x30D0;&#x30C3;&#x30AF;&#x30A8;&#x30F3;&#x30C9;&#x306E;&#x30EC;&#x30B9;&#x30DD;&#x30F3;&#x30B9;&#x578B;&#x3082;&#x3001;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x306E;&#x53D7;&#x3051;&#x53D6;&#x308A;&#x578B;&#x3082;&#x3001;&#x4E21;&#x65B9;&#x4FEE;&#x6B63;&#x3057;&#x306A;&#x3051;&#x308C;&#x3070;&#x306A;&#x3089;&#x306A;&#x3044;&#x3002;tRPC&#x3084;GraphQL&#x306F;&#x3053;&#x306E;&#x554F;&#x984C;&#x3078;&#x306E;&#x5BFE;&#x51E6;&#x3060;&#x3002;</p>
<p><strong>&#x300C;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x306E;&#x5730;&#x7344;&#x300D;</strong>: &#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x3068;&#x30D0;&#x30C3;&#x30AF;&#x30A8;&#x30F3;&#x30C9;&#x304C;&#x5206;&#x696D;&#x3057;&#x3066;&#x3057;&#x307E;&#x3046;&#x3053;&#x3068;&#x3067;&#x6E9D;&#x304C;&#x6DF1;&#x307E;&#x308A;&#x3001;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x5074;&#x306B;&#x8907;&#x96D1;&#x3055;&#x304C;&#x96C6;&#x4E2D;&#x3059;&#x308B;&#x3068;&#x3044;&#x3046;&#x69CB;&#x9020;&#x7684;&#x306A;&#x554F;&#x984C;&#x304C;&#x3042;&#x308B;&#x3002;API&#x306E;&#x8A2D;&#x8A08;&#x3001;&#x72B6;&#x614B;&#x306E;&#x540C;&#x671F;&#x3001;&#x30A8;&#x30E9;&#x30FC;&#x30CF;&#x30F3;&#x30C9;&#x30EA;&#x30F3;&#x30B0;&#x3001;&#x30ED;&#x30FC;&#x30C7;&#x30A3;&#x30F3;&#x30B0;&#x72B6;&#x614B;&#x306E;&#x7BA1;&#x7406;&#x2014;&#x2014;&#x3053;&#x308C;&#x3089;&#x306F;&#x5168;&#x3066;&#x300C;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x3068;&#x30D0;&#x30C3;&#x30AF;&#x304C;&#x5225;&#x30A2;&#x30D7;&#x30EA;&#x3067;&#x3042;&#x308B;&#x300D;&#x3053;&#x3068;&#x304B;&#x3089;&#x751F;&#x307E;&#x308C;&#x308B;&#x554F;&#x984C;&#x3060;&#x3002;</p>
<p>&#x73FE;&#x5834;&#x306E;React&#x30B3;&#x30FC;&#x30C9;&#x304C;&#x8907;&#x96D1;&#x5316;&#x3059;&#x308B;&#x539F;&#x56E0;&#x306F;&#x3001;React&#x81EA;&#x4F53;&#x306E;&#x554F;&#x984C;&#x3068;&#x3044;&#x3046;&#x3088;&#x308A;&#x3082;&#x3001;JSON API&#x304A;&#x3088;&#x3073;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;/&#x30D0;&#x30C3;&#x30AF;&#x30A8;&#x30F3;&#x30C9;&#x3092;&#x5206;&#x96E2;&#x3055;&#x305B;&#x3066;&#x5225;&#x30A2;&#x30D7;&#x30EA;&#x306B;&#x3057;&#x3066;&#x3044;&#x308B;&#x3053;&#x3068;&#x306B;&#x8D77;&#x56E0;&#x3057;&#x3066;&#x3044;&#x308B;&#x3068;&#x3044;&#x3046;&#x898B;&#x65B9;&#x304C;&#x3042;&#x308B;&#x3002;&#x3053;&#x306E;&#x6307;&#x6458;&#x306F;&#x3001;Hotwire&#x3084;RSC&#xFF08;React Server Components&#xFF09;&#x304C;&#x767B;&#x5834;&#x3057;&#x305F;&#x6587;&#x8108;&#x3092;&#x7406;&#x89E3;&#x3059;&#x308B;&#x4E0A;&#x3067;&#x6975;&#x3081;&#x3066;&#x91CD;&#x8981;&#x3060;&#x3002;&#x3053;&#x308C;&#x3089;&#x306E;&#x6280;&#x8853;&#x306F;&#x3001;&#x4E00;&#x5EA6;&#x5206;&#x96E2;&#x3055;&#x308C;&#x305F;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x3068;&#x30D0;&#x30C3;&#x30AF;&#x30A8;&#x30F3;&#x30C9;&#x3092;&#x518D;&#x3073;&#x63A5;&#x8FD1;&#x3055;&#x305B;&#x3088;&#x3046;&#x3068;&#x3059;&#x308B;&#x8A66;&#x307F;&#x3067;&#x3042;&#x308B;&#x3002;</p>
<p>&#x3082;&#x3063;&#x3068;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x30A8;&#x30F3;&#x30B8;&#x30CB;&#x30A2;&#x304C;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x3092;&#x89E6;&#x308A;&#x3001;&#x30D0;&#x30C3;&#x30AF;&#x30A8;&#x30F3;&#x30C9;&#x30A8;&#x30F3;&#x30B8;&#x30CB;&#x30A2;&#x304C;&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x3092;&#x89E6;&#x308C;&#x3070;&#x72B6;&#x6CC1;&#x306F;&#x826F;&#x304F;&#x306A;&#x308B;&#x3002;Hotwire&#x306B;&#x3057;&#x308D;RSC&#x306B;&#x3057;&#x308D;&#x3001;&#x305D;&#x3046;&#x3044;&#x3046;&#x524D;&#x63D0;&#x306E;&#x3082;&#x3068;&#x306B;&#x8A2D;&#x8A08;&#x3055;&#x308C;&#x3066;&#x3044;&#x308B;&#x3002;</p>
<hr>
<h1 id="%E7%AC%AC3%E9%83%A8-react%E3%81%B8%E3%81%AE%E6%89%B9%E5%88%A4%E3%81%A8%E3%81%9D%E3%81%AE%E6%A4%9C%E8%A8%BC">&#x7B2C;3&#x90E8;: React&#x3078;&#x306E;&#x6279;&#x5224;&#x3068;&#x305D;&#x306E;&#x691C;&#x8A3C;</h1>
<h2 id="7-%E3%80%8Creact%E3%81%AF%E6%99%82%E4%BB%A3%E9%81%85%E3%82%8C%E3%80%8D%E8%AB%96%E3%81%AE%E6%A4%9C%E8%A8%BC">7. &#x300C;React&#x306F;&#x6642;&#x4EE3;&#x9045;&#x308C;&#x300D;&#x8AD6;&#x306E;&#x691C;&#x8A3C;</h2>
<h3 id="signals%E3%81%A8%E3%81%AF%E4%BD%95%E3%81%8B-%E2%80%94-react%E3%81%B8%E3%81%AE%E6%8A%80%E8%A1%93%E7%9A%84%E5%AF%BE%E6%A1%88">Signals&#x3068;&#x306F;&#x4F55;&#x304B; &#x2014; React&#x3078;&#x306E;&#x6280;&#x8853;&#x7684;&#x5BFE;&#x6848;</h3>
<p>&#x300C;React&#x306F;&#x3082;&#x3046;&#x6642;&#x4EE3;&#x9045;&#x308C;&#x3060;&#x300D;&#x3068;&#x3044;&#x3046;&#x4E3B;&#x5F35;&#x304C;&#x3042;&#x308B;&#x3002;&#x4F8B;&#x3048;&#x3070;&#x3001;React&#x3067;&#x306F;&#x30CD;&#x30B9;&#x30C8;&#x3057;&#x305F;&#x30AA;&#x30D6;&#x30B8;&#x30A7;&#x30AF;&#x30C8;&#x306E;&#x4E00;&#x90E8;&#x3092;&#x66F4;&#x65B0;&#x3059;&#x308B;&#x3060;&#x3051;&#x3067;&#x3082;&#x3001;&#x30B9;&#x30D7;&#x30EC;&#x30C3;&#x30C9;&#x6F14;&#x7B97;&#x5B50;&#xFF08;<code>...</code> &#x3092;&#x4F7F;&#x3063;&#x3066;&#x30AA;&#x30D6;&#x30B8;&#x30A7;&#x30AF;&#x30C8;&#x3092;&#x5C55;&#x958B;&#x3059;&#x308B;&#x69CB;&#x6587;&#xFF09;&#x3092;&#x591A;&#x7528;&#x3057;&#x306A;&#x3051;&#x308C;&#x3070;&#x306A;&#x3089;&#x306A;&#x3044;&#x3002;</p>
<pre><code class="language-jsx">// React&#x3067;&#x30CD;&#x30B9;&#x30C8;&#x3057;&#x305F;&#x72B6;&#x614B;&#x3092;&#x66F4;&#x65B0;&#x3059;&#x308B;&#x4F8B;
// user.address.city &#x3060;&#x3051;&#x3092;&#x5909;&#x3048;&#x305F;&#x3044;&#x306E;&#x306B;&#x3001;&#x5404;&#x968E;&#x5C64;&#x3092;&#x5C55;&#x958B;&#x3059;&#x308B;&#x5FC5;&#x8981;&#x304C;&#x3042;&#x308B;
setUser({
  ...user,
  address: {
    ...user.address,
    city: &quot;Tokyo&quot;
  }
});
</code></pre>
<p>&#x968E;&#x5C64;&#x304C;&#x6DF1;&#x304F;&#x306A;&#x308B;&#x307B;&#x3069;&#x3053;&#x306E;&#x8A18;&#x8FF0;&#x306F;&#x7169;&#x96D1;&#x306B;&#x306A;&#x308B;&#x3002;&#x4ECA;&#x306E;&#x6642;&#x4EE3;&#x3001;JavaScript&#x306E;&#x30AA;&#x30D6;&#x30B8;&#x30A7;&#x30AF;&#x30C8;&#x81EA;&#x4F53;&#x306B;&#x30EA;&#x30A2;&#x30AF;&#x30C6;&#x30A3;&#x30D3;&#x30C6;&#x30A3;&#xFF08;&#x7B2C;5&#x7AE0;&#x53C2;&#x7167;&#xFF09;&#x3092;&#x6388;&#x3051;&#x308B;&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;&#x304C;&#x3042;&#x308A;&#x3001;&#x9762;&#x5012;&#x306A;&#x4F5C;&#x6CD5;&#x306F;&#x3082;&#x306F;&#x3084;&#x4E0D;&#x8981;&#x3060;&#x3068;&#x3044;&#x3046;&#x898B;&#x65B9;&#x3082;&#x3042;&#x308B;&#x3002;</p>
<p>&#x3053;&#x306E;&#x6587;&#x8108;&#x3067;&#x767B;&#x5834;&#x3059;&#x308B;&#x306E;&#x304C;&#x300C;Signals&#x300D;&#x3068;&#x3044;&#x3046;&#x6982;&#x5FF5;&#x3060;&#x3002;React&#x3068;Signals&#x306E;&#x9055;&#x3044;&#x3092;&#x7406;&#x89E3;&#x3059;&#x308B;&#x306B;&#x306F;&#x3001;&#x300C;UI&#x306E;&#x66F4;&#x65B0;&#x7BC4;&#x56F2;&#x300D;&#x306B;&#x6CE8;&#x76EE;&#x3059;&#x308B;&#x3068;&#x308F;&#x304B;&#x308A;&#x3084;&#x3059;&#x3044;&#x3002;</p>
<p><strong>React&#x306E;&#x66F4;&#x65B0;&#x30E2;&#x30C7;&#x30EB;&#xFF08;&#x7C97;&#x7C92;&#x5EA6;&#x30EA;&#x30A2;&#x30AF;&#x30C6;&#x30A3;&#x30D3;&#x30C6;&#x30A3;&#xFF09;</strong>:</p>
<pre><code class="language-jsx">function Counter() {
  const [count, setCount] = useState(0);
  const [name, setName] = useState(&quot;&quot;);

  // &#x30DC;&#x30BF;&#x30F3;&#x3092;&#x62BC;&#x3057;&#x3066; count &#x3092; 0&#x2192;1 &#x306B;&#x5909;&#x3048;&#x308B;&#x3068;...
  // React&#x306F;&#x300C;Counter&#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#x5168;&#x4F53;&#x300D;&#x3092;&#x518D;&#x5B9F;&#x884C;&#x3059;&#x308B;&#x3002;
  // &#x3064;&#x307E;&#x308A;&#x3001;&#x3053;&#x306E;&#x95A2;&#x6570;&#x304C;&#x307E;&#x308B;&#x3054;&#x3068;&#x3082;&#x3046;&#x4E00;&#x5EA6;&#x547C;&#x3070;&#x308C;&#x308B;&#x3002;
  // name&#x306F;&#x5909;&#x308F;&#x3063;&#x3066;&#x3044;&#x306A;&#x3044;&#x306E;&#x306B;&#x3001;name&#x3092;&#x8868;&#x793A;&#x3059;&#x308B;&#x90E8;&#x5206;&#x3082;&#x518D;&#x8A55;&#x4FA1;&#x3055;&#x308C;&#x308B;&#x3002;
  // &#x305D;&#x306E;&#x5F8C;&#x3001;&#x4EEE;&#x60F3;DOM&#x306E;&#x5DEE;&#x5206;&#x3067;&#x300C;&#x5B9F;&#x969B;&#x306B;DOM&#x3092;&#x5909;&#x3048;&#x308B;&#x5FC5;&#x8981;&#x304C;&#x3042;&#x308B;&#x306E;&#x306F;count&#x306E;&#x90E8;&#x5206;&#x3060;&#x3051;&#x300D;&#x3068;&#x5224;&#x5B9A;&#x3059;&#x308B;&#x3002;

  return (
    &lt;div&gt;
      &lt;p&gt;{name}&lt;/p&gt; {/* name&#x306F;&#x5909;&#x308F;&#x3063;&#x3066;&#x3044;&#x306A;&#x3044;&#x304C;&#x3001;&#x518D;&#x8A55;&#x4FA1;&#x306F;&#x3055;&#x308C;&#x308B; */}
      &lt;p&gt;{count}&lt;/p&gt; {/* &#x3053;&#x3053;&#x3060;&#x3051;&#x5B9F;&#x969B;&#x306B;&#x5909;&#x308F;&#x308B; */}
      &lt;button onClick={() =&gt; setCount((c) =&gt; c + 1)}&gt;+&lt;/button&gt;
    &lt;/div&gt;
  );
}
</code></pre>
<p>React&#x3067;&#x306F;&#x3001;&#x3042;&#x308B;&#x72B6;&#x614B;&#x304C;&#x5909;&#x308F;&#x308B;&#x3068;<strong>&#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#x95A2;&#x6570;&#x5168;&#x4F53;</strong>&#x304C;&#x518D;&#x5B9F;&#x884C;&#x3055;&#x308C;&#x308B;&#x3002;&#x305D;&#x306E;&#x5F8C;&#x3001;&#x4EEE;&#x60F3;DOM&#x306E;&#x5DEE;&#x5206;&#x6BD4;&#x8F03;&#x3067;&#x300C;&#x5B9F;&#x969B;&#x306B;DOM&#x3092;&#x5909;&#x3048;&#x308B;&#x5FC5;&#x8981;&#x304C;&#x3042;&#x308B;&#x306E;&#x306F;&#x3053;&#x3053;&#x3060;&#x3051;&#x300D;&#x3068;&#x5224;&#x5B9A;&#x3057;&#x3001;&#x6700;&#x5C0F;&#x9650;&#x306E;DOM&#x66F4;&#x65B0;&#x3092;&#x884C;&#x3046;&#x3002;&#x95A2;&#x6570;&#x306E;&#x518D;&#x5B9F;&#x884C;&#x81EA;&#x4F53;&#x306F;&#x901F;&#x3044;&#x304C;&#x3001;&#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#x304C;&#x5DE8;&#x5927;&#x306B;&#x306A;&#x308B;&#x3068;&#x7121;&#x99C4;&#x3082;&#x5927;&#x304D;&#x304F;&#x306A;&#x308B;&#x3002;</p>
<p><strong>Signals&#x306E;&#x66F4;&#x65B0;&#x30E2;&#x30C7;&#x30EB;&#xFF08;&#x7D30;&#x7C92;&#x5EA6;&#x30EA;&#x30A2;&#x30AF;&#x30C6;&#x30A3;&#x30D3;&#x30C6;&#x30A3;&#xFF09;</strong>:</p>
<pre><code class="language-jsx">// SolidJS&#xFF08;Signals&#x7CFB;&#x30D5;&#x30EC;&#x30FC;&#x30E0;&#x30EF;&#x30FC;&#x30AF;&#x306E;&#x4E00;&#x3064;&#xFF09;&#x306E;&#x4F8B;
function Counter() {
  const [count, setCount] = createSignal(0);
  const [name, setName] = createSignal(&quot;&quot;);

  // count&#x3092;0&#x2192;1&#x306B;&#x5909;&#x3048;&#x308B;&#x3068;...
  // SolidJS&#x306F;&#x300C;count&#x3092;&#x4F7F;&#x3063;&#x3066;&#x3044;&#x308B;DOM&#x7B87;&#x6240;&#x3060;&#x3051;&#x300D;&#x3092;&#x30D4;&#x30F3;&#x30DD;&#x30A4;&#x30F3;&#x30C8;&#x3067;&#x66F4;&#x65B0;&#x3059;&#x308B;&#x3002;
  // &#x95A2;&#x6570;&#x5168;&#x4F53;&#x306E;&#x518D;&#x5B9F;&#x884C;&#x306F;&#x8D77;&#x304D;&#x306A;&#x3044;&#x3002;&#x4EEE;&#x60F3;DOM&#x306E;&#x5DEE;&#x5206;&#x6BD4;&#x8F03;&#x3082;&#x4E0D;&#x8981;&#x3002;
  // name&#x306E;&#x90E8;&#x5206;&#x306F;&#x4E00;&#x5207;&#x89E6;&#x3089;&#x308C;&#x306A;&#x3044;&#x3002;

  return (
    &lt;div&gt;
      &lt;p&gt;{name()}&lt;/p&gt; {/* count&#x304C;&#x5909;&#x308F;&#x3063;&#x3066;&#x3082;&#x3053;&#x3053;&#x306F;&#x4F55;&#x3082;&#x3057;&#x306A;&#x3044; */}
      &lt;p&gt;{count()}&lt;/p&gt; {/* &#x3053;&#x3053;&#x3060;&#x3051;&#x76F4;&#x63A5;DOM&#x66F4;&#x65B0; */}
      &lt;button onClick={() =&gt; setCount((c) =&gt; c + 1)}&gt;+&lt;/button&gt;
    &lt;/div&gt;
  );
}
</code></pre>
<p>&#x30A4;&#x30E1;&#x30FC;&#x30B8;&#x3068;&#x3057;&#x3066;&#x306F;&#x3001;React&#x306F;&#x300C;&#x72B6;&#x614B;&#x304C;&#x5909;&#x308F;&#x3063;&#x305F;&#x3089;&#x30DA;&#x30FC;&#x30B8;&#x5168;&#x4F53;&#x306E;&#x5199;&#x771F;&#x3092;2&#x679A;&#x64AE;&#x3063;&#x3066;&#x898B;&#x6BD4;&#x3079;&#x308B;&#x300D;&#x65B9;&#x5F0F;&#x3002;Signals&#x306F;&#x300C;&#x72B6;&#x614B;&#x3068;&#x8868;&#x793A;&#x304C;&#x7CF8;&#x3067;&#x76F4;&#x63A5;&#x3064;&#x306A;&#x304C;&#x3063;&#x3066;&#x3044;&#x3066;&#x3001;&#x5024;&#x304C;&#x5909;&#x308F;&#x308B;&#x3068;&#x7CF8;&#x3092;&#x4F1D;&#x3063;&#x3066;&#x8868;&#x793A;&#x3060;&#x3051;&#x304C;&#x5909;&#x308F;&#x308B;&#x300D;&#x65B9;&#x5F0F;&#x3060;&#x3002;</p>
<p>Signals&#xFF08;SolidJS, Vue, Svelte 5 Runes, Angular Signals, Preact Signals&#xFF09;&#x306F;&#x3001;&#x3069;&#x306E;&#x5024;&#x304C;&#x3069;&#x306E;UI&#x8981;&#x7D20;&#x306B;&#x4F9D;&#x5B58;&#x3057;&#x3066;&#x3044;&#x308B;&#x304B;&#x3092;&#x8FFD;&#x8DE1;&#x3057;&#x3001;&#x5024;&#x304C;&#x5909;&#x308F;&#x3063;&#x305F;&#x6642;&#x306B;&#x305D;&#x306E;&#x5024;&#x3092;&#x4F7F;&#x3063;&#x3066;&#x3044;&#x308B;&#x7B87;&#x6240;&#x3060;&#x3051;&#x3092;&#x30D4;&#x30F3;&#x30DD;&#x30A4;&#x30F3;&#x30C8;&#x3067;&#x66F4;&#x65B0;&#x3059;&#x308B;&#x3002;&#x3053;&#x306E;&#x52D5;&#x304D;&#x306F;&#x696D;&#x754C;&#x5168;&#x4F53;&#x306E;&#x30C8;&#x30EC;&#x30F3;&#x30C9;&#x3067;&#x3001;2024&#x5E74;&#x306B;&#x306F;TC39&#xFF08;JavaScript&#x6A19;&#x6E96;&#x5316;&#x59D4;&#x54E1;&#x4F1A;&#xFF09;&#x3067;Signals&#x3092;JavaScript&#x8A00;&#x8A9E;&#x6A19;&#x6E96;&#x306B;&#x3059;&#x308B;&#x63D0;&#x6848;&#x304C;Stage 1&#x306B;&#x5230;&#x9054;&#x3057;&#x305F;&#x3002;</p>
<h3 id="%E6%89%B9%E5%88%A4%E3%81%AE%E5%A6%A5%E5%BD%93%E6%80%A7%E3%81%A8%E9%99%90%E7%95%8C">&#x6279;&#x5224;&#x306E;&#x59A5;&#x5F53;&#x6027;&#x3068;&#x9650;&#x754C;</h3>
<p>&#x300C;&#x30B9;&#x30D7;&#x30EC;&#x30C3;&#x30C9;&#x6F14;&#x7B97;&#x5B50;&#x306E;&#x591A;&#x7528;&#x300D;&#x300C;&#x30CD;&#x30B9;&#x30C8;&#x306E;&#x6DF1;&#x3055;&#x300D;&#x3068;&#x3044;&#x3046;&#x6279;&#x5224;&#x306F;&#x3001;React&#x306E;Immutability&#xFF08;&#x4E0D;&#x5909;&#x6027;&#xFF09;&#x306E;&#x539F;&#x5247;&#x306B;&#x8D77;&#x56E0;&#x3059;&#x308B;&#x3002;</p>
<p>Immutability&#x3068;&#x306F;&#x300C;&#x30C7;&#x30FC;&#x30BF;&#x3092;&#x76F4;&#x63A5;&#x66F8;&#x304D;&#x63DB;&#x3048;&#x305A;&#x3001;&#x5E38;&#x306B;&#x65B0;&#x3057;&#x3044;&#x30B3;&#x30D4;&#x30FC;&#x3092;&#x4F5C;&#x3063;&#x3066;&#x7F6E;&#x304D;&#x63DB;&#x3048;&#x308B;&#x300D;&#x3068;&#x3044;&#x3046;&#x539F;&#x5247;&#x3060;&#x3002;&#x306A;&#x305C;React&#x304C;&#x3053;&#x306E;&#x539F;&#x5247;&#x3092;&#x63A1;&#x7528;&#x3057;&#x3066;&#x3044;&#x308B;&#x304B;&#x3068;&#x3044;&#x3046;&#x3068;&#x3001;&#x300C;&#x524D;&#x56DE;&#x306E;&#x30C7;&#x30FC;&#x30BF;&#x300D;&#x3068;&#x300C;&#x4ECA;&#x56DE;&#x306E;&#x30C7;&#x30FC;&#x30BF;&#x300D;&#x3092;&#x6BD4;&#x8F03;&#x3057;&#x3066;&#x5DEE;&#x5206;&#x3092;&#x691C;&#x51FA;&#x3059;&#x308B;&#x305F;&#x3081;&#x306B;&#x3001;&#x524D;&#x56DE;&#x306E;&#x30C7;&#x30FC;&#x30BF;&#x304C;&#x305D;&#x306E;&#x307E;&#x307E;&#x6B8B;&#x3063;&#x3066;&#x3044;&#x308B;&#x5FC5;&#x8981;&#x304C;&#x3042;&#x308B;&#x304B;&#x3089;&#x3060;&#x3002;</p>
<pre><code class="language-javascript">// React&#x3067;&#x306E;&#x30CD;&#x30B9;&#x30C8;&#x3057;&#x305F;&#x30AA;&#x30D6;&#x30B8;&#x30A7;&#x30AF;&#x30C8;&#x306E;&#x66F4;&#x65B0;&#xFF08;&#x78BA;&#x304B;&#x306B;&#x9762;&#x5012;&#xFF09;
// &#x300C;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x306E;&#x4F4F;&#x6240;&#x306E;&#x90FD;&#x5E02;&#x540D;&#x3060;&#x3051;&#x5909;&#x3048;&#x305F;&#x3044;&#x300D;&#x5834;&#x5408;:
setUser((prev) =&gt; ({
  ...prev, // &#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x5168;&#x4F53;&#x3092;&#x30B3;&#x30D4;&#x30FC;&#x3057;&#x3066;
  address: {
    ...prev.address, // &#x4F4F;&#x6240;&#x3082;&#x30B3;&#x30D4;&#x30FC;&#x3057;&#x3066;
    city: &quot;Tokyo&quot;, // &#x90FD;&#x5E02;&#x540D;&#x3060;&#x3051;&#x5909;&#x3048;&#x308B;
  },
}));
// &#x2192; city&#x3060;&#x3051;&#x5909;&#x3048;&#x305F;&#x3044;&#x306E;&#x306B;&#x3001;3&#x6BB5;&#x968E;&#x306E;&#x30B3;&#x30D4;&#x30FC;&#x304C;&#x5FC5;&#x8981;
</code></pre>
<p>&#x3053;&#x308C;&#x306F;&#x78BA;&#x304B;&#x306B;&#x5197;&#x9577;&#x3060;&#x3002;&#x3057;&#x304B;&#x3057;&#x5B9F;&#x52D9;&#x3067;&#x306F;&#x3001;&#x3044;&#x304F;&#x3064;&#x304B;&#x306E;&#x65B9;&#x6CD5;&#x3067;&#x5BFE;&#x51E6;&#x3067;&#x304D;&#x308B;&#x3002;</p>
<ul>
<li><strong>Immer</strong>&#x306E;&#x3088;&#x3046;&#x306A;&#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x30EA;&#x3092;&#x4F7F;&#x3048;&#x3070; <code>produce(user, draft =&gt; { draft.address.city = &apos;Tokyo&apos; })</code> &#x3068;&#x66F8;&#x3051;&#x308B;&#xFF08;&#x898B;&#x305F;&#x76EE;&#x4E0A;&#x306F;&#x76F4;&#x63A5;&#x66F8;&#x304D;&#x63DB;&#x3048;&#x3066;&#x3044;&#x308B;&#x3088;&#x3046;&#x306B;&#x66F8;&#x3051;&#x308B;&#x304C;&#x3001;&#x5185;&#x90E8;&#x3067;&#x306F;&#x65B0;&#x3057;&#x3044;&#x30B3;&#x30D4;&#x30FC;&#x304C;&#x4F5C;&#x3089;&#x308C;&#x308B;&#xFF09;</li>
<li>&#x305D;&#x3082;&#x305D;&#x3082;&#x8A2D;&#x8A08;&#x304C;&#x826F;&#x3051;&#x308C;&#x3070;&#x6DF1;&#x3044;&#x30CD;&#x30B9;&#x30C8;&#x306F;&#x907F;&#x3051;&#x3089;&#x308C;&#x308B;&#x3002;&#x305F;&#x3068;&#x3048;&#x3070; <code>user.address.city</code> &#x306E;&#x3088;&#x3046;&#x306B;&#x6DF1;&#x304F;&#x30CD;&#x30B9;&#x30C8;&#x3057;&#x305F;&#x4E00;&#x3064;&#x306E;&#x30AA;&#x30D6;&#x30B8;&#x30A7;&#x30AF;&#x30C8;&#x3067;&#x306F;&#x306A;&#x304F;&#x3001;<code>user</code> &#x3068; <code>address</code> &#x3092;&#x5225;&#x3005;&#x306E;state&#x3068;&#x3057;&#x3066;&#x7BA1;&#x7406;&#x3059;&#x308C;&#x3070;&#x3001;<code>setAddress({ ...address, city: &apos;Tokyo&apos; })</code> &#x306E;1&#x6BB5;&#x3067;&#x6E08;&#x3080;</li>
<li>&#x30B0;&#x30ED;&#x30FC;&#x30D0;&#x30EB;&#x72B6;&#x614B;&#x306F;Zustand&#x3084;Jotai&#x7B49;&#x306E;&#x8EFD;&#x91CF;&#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x30EA;&#x304C;&#x89E3;&#x6C7A;&#x3059;&#x308B;</li>
</ul>
<p>Signals&#x306F;&#x78BA;&#x304B;&#x306B;React&#x306E;&#x7279;&#x5B9A;&#x306E;&#x8AB2;&#x984C;&#xFF08;&#x66F4;&#x65B0;&#x7C92;&#x5EA6;&#x306E;&#x7C97;&#x3055;&#x3001;Immutability&#x306E;&#x5197;&#x9577;&#x3055;&#xFF09;&#x306B;&#x5BFE;&#x3059;&#x308B;&#x30A8;&#x30EC;&#x30AC;&#x30F3;&#x30C8;&#x306A;&#x89E3;&#x3060;&#x3002;&#x3057;&#x304B;&#x3057;React&#x304B;&#x3089;Signals&#x7CFB;&#x30D5;&#x30EC;&#x30FC;&#x30E0;&#x30EF;&#x30FC;&#x30AF;&#x3078;&#x306E;&#x79FB;&#x884C;&#x306F;&#x300C;React&#x306E;&#x554F;&#x984C;&#x3092;&#x89E3;&#x6C7A;&#x3059;&#x308B;&#x300D;&#x3068;&#x3044;&#x3046;&#x3088;&#x308A;&#x3082;&#x300C;&#x7570;&#x306A;&#x308B;&#x30C8;&#x30EC;&#x30FC;&#x30C9;&#x30AA;&#x30D5;&#x3092;&#x9078;&#x3076;&#x300D;&#x3053;&#x3068;&#x306B;&#x8FD1;&#x3044;&#x3002;React&#x306E;Immutability&#x306B;&#x306F;&#x300C;&#x3069;&#x306E;&#x6642;&#x70B9;&#x306E;&#x30C7;&#x30FC;&#x30BF;&#x3067;&#x3082;&#x4FDD;&#x6301;&#x3055;&#x308C;&#x3066;&#x3044;&#x308B;&#x306E;&#x3067;&#x3001;&#x30BF;&#x30A4;&#x30E0;&#x30C8;&#x30E9;&#x30D9;&#x30EB;&#x30C7;&#x30D0;&#x30C3;&#x30B0;&#xFF08;&#x904E;&#x53BB;&#x306E;&#x72B6;&#x614B;&#x306B;&#x623B;&#x3063;&#x3066;&#x78BA;&#x8A8D;&#x3059;&#x308B;&#xFF09;&#x304C;&#x3057;&#x3084;&#x3059;&#x3044;&#x300D;&#x300C;&#x30C7;&#x30FC;&#x30BF;&#x306E;&#x5909;&#x66F4;&#x304C;&#x660E;&#x793A;&#x7684;&#x306A;&#x306E;&#x3067;&#x3001;&#x4E88;&#x6E2C;&#x3057;&#x3084;&#x3059;&#x3044;&#x300D;&#x3068;&#x3044;&#x3046;&#x30E1;&#x30EA;&#x30C3;&#x30C8;&#x304C;&#x3042;&#x308B;&#x3002;Signals&#x7CFB;&#x304C;&#x300C;React&#x304C;&#x30C0;&#x30E1;&#x3060;&#x304B;&#x3089;&#x300D;&#x751F;&#x307E;&#x308C;&#x305F;&#x306E;&#x3067;&#x306F;&#x306A;&#x304F;&#x3001;&#x300C;&#x66F4;&#x65B0;&#x7C92;&#x5EA6;&#x3092;&#x7D30;&#x304B;&#x304F;&#x3057;&#x305F;&#x3044;&#x300D;&#x3068;&#x3044;&#x3046;&#x5225;&#x306E;&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;&#x3068;&#x3057;&#x3066;&#x5B58;&#x5728;&#x3057;&#x3066;&#x3044;&#x308B;&#x306E;&#x3060;&#x3002;</p>
<h3 id="%E3%80%8C%E5%BF%98%E3%82%8C%E3%82%89%E3%82%8C%E3%82%8B%E6%AD%B4%E5%8F%B2%E3%80%8D">&#x300C;&#x5FD8;&#x308C;&#x3089;&#x308C;&#x308B;&#x6B74;&#x53F2;&#x300D;</h3>
<p>&#x5BA3;&#x8A00;&#x7684;UI&#x30D5;&#x30EC;&#x30FC;&#x30E0;&#x30EF;&#x30FC;&#x30AF;&#x304C;&#x8FD1;&#x5E74;&#x89E3;&#x6C7A;&#x3057;&#x3088;&#x3046;&#x3068;&#x3057;&#x3066;&#x304D;&#x305F;&#x6570;&#x591A;&#x306E;&#x8AB2;&#x984C;&#x306F;&#x3001;&#x9A5A;&#x304F;&#x307B;&#x3069;&#x7C21;&#x5358;&#x306B;&#x5FD8;&#x308C;&#x3089;&#x308C;&#x308B;&#x3002;React&#x306E;&#x8907;&#x96D1;&#x3055;&#x306B;&#x4E0D;&#x6E80;&#x3092;&#x6301;&#x3064;&#x4EBA;&#x306F;&#x591A;&#x3044;&#x304C;&#x3001;&#x305D;&#x306E;&#x8907;&#x96D1;&#x3055;&#x304C;<strong>&#x4F55;&#x3092;&#x89E3;&#x6C7A;&#x3059;&#x308B;&#x305F;&#x3081;&#x306B;&#x5B58;&#x5728;&#x3057;&#x3066;&#x3044;&#x308B;&#x304B;</strong>&#x3092;&#x7406;&#x89E3;&#x305B;&#x305A;&#x306B;&#x300C;&#x4E0D;&#x8981;&#x300D;&#x3068;&#x65AD;&#x3058;&#x308B;&#x8B70;&#x8AD6;&#x304C;&#x7E70;&#x308A;&#x8FD4;&#x3055;&#x308C;&#x308B;&#x3002;&#x5BA3;&#x8A00;&#x7684;UI&#x3068;&#x3044;&#x3046;&#x767A;&#x660E;&#x304C;&#x3042;&#x3063;&#x305F;&#x3068;&#x3044;&#x3046;&#x3053;&#x3068;&#x2014;&#x2014;&#x5C11;&#x306A;&#x304F;&#x3068;&#x3082;&#x305D;&#x308C;&#x3060;&#x3051;&#x306F;&#x4E8B;&#x5B9F;&#x3067;&#x3042;&#x308B;&#x3002;</p>
<hr>
<h2 id="8-%E3%80%8Creact%E3%81%AFpolyfill%E3%81%A0%E3%81%A3%E3%81%9F%E3%80%8D%E8%AB%96%E3%81%AE%E6%A4%9C%E8%A8%BC">8. &#x300C;React&#x306F;Polyfill&#x3060;&#x3063;&#x305F;&#x300D;&#x8AD6;&#x306E;&#x691C;&#x8A3C;</h2>
<h3 id="polyfill%E8%AB%96%E3%81%AE%E4%B8%BB%E5%BC%B5">Polyfill&#x8AD6;&#x306E;&#x4E3B;&#x5F35;</h3>
<p>&#x300C;React&#x306F;Polyfill&#xFF08;&#x30DD;&#x30EA;&#x30D5;&#x30A3;&#x30EB;&#xFF09;&#x306B;&#x904E;&#x304E;&#x306A;&#x304B;&#x3063;&#x305F;&#x300D;&#x3068;&#x3044;&#x3046;&#x4E3B;&#x5F35;&#x304C;&#x3042;&#x308B;&#x3002;&#x30DD;&#x30EA;&#x30D5;&#x30A3;&#x30EB;&#x3068;&#x306F;&#x3001;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x304C;&#x5BFE;&#x5FDC;&#x3057;&#x3066;&#x3044;&#x306A;&#x3044;&#x6A5F;&#x80FD;&#x3092;&#x3001;JavaScript&#x306E;&#x30B3;&#x30FC;&#x30C9;&#x3067;&#x88DC;&#x3046;&#x4E92;&#x63DB;&#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x30EA;&#x306E;&#x3053;&#x3068;&#x3060;&#x3002;&#x305F;&#x3068;&#x3048;&#x3070;&#x3001;&#x53E4;&#x3044;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x3067; <code>Array.prototype.includes</code> &#x304C;&#x4F7F;&#x3048;&#x306A;&#x3044;&#x5834;&#x5408;&#x306B;&#x3001;&#x540C;&#x3058;&#x6A5F;&#x80FD;&#x3092;&#x63D0;&#x4F9B;&#x3059;&#x308B;&#x30B3;&#x30FC;&#x30C9;&#x304C;&#x30DD;&#x30EA;&#x30D5;&#x30A3;&#x30EB;&#x3060;&#x3002;</p>
<p>&#x3053;&#x306E;&#x8AD6;&#x306E;&#x4E3B;&#x5F35;&#x306F;&#x3053;&#x3046;&#x3060;&#x3002;</p>
<ol>
<li>2013&#x5E74;&#x5F53;&#x6642;&#x3001;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x306E;API&#x304C;&#x672A;&#x719F;&#x3060;&#x3063;&#x305F;&#x304B;&#x3089;React&#x304C;&#x5FC5;&#x8981;&#x3060;&#x3063;&#x305F;</li>
<li>&#x73FE;&#x5728;&#x306F;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x306E;&#x6A19;&#x6E96;&#x6A5F;&#x80FD;&#x304C;&#x9032;&#x5316;&#x3057;&#x305F;&#xFF08;<code>&lt;dialog&gt;</code>, <code>&lt;template&gt;</code>, CSS animations, View Transitions API&#x7B49;&#xFF09;</li>
<li>&#x3088;&#x3063;&#x3066;&#x3001;React&#x304C;&#x62C5;&#x3063;&#x3066;&#x3044;&#x305F;&#x5F79;&#x5272;&#x306E;&#x591A;&#x304F;&#x306F;&#x3082;&#x3046;&#x6A19;&#x6E96;&#x6A5F;&#x80FD;&#x3067;&#x30AB;&#x30D0;&#x30FC;&#x3067;&#x304D;&#x308B;</li>
<li>&#x7D50;&#x8AD6;: React&#x3088;&#x308A;&#x3082;Web&#x6A19;&#x6E96; + &#x8EFD;&#x91CF;&#x306A;&#x30C4;&#x30FC;&#x30EB;&#xFF08;htmx/Hotwire + Tailwind&#xFF09;&#x304C;&#x6700;&#x9069;&#x89E3;</li>
</ol>
<h3 id="%E9%80%B2%E5%8C%96%E3%81%97%E3%81%9F%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6api-%E2%80%94-%E5%AE%9F%E9%9A%9B%E3%81%AB%E4%BD%95%E3%81%8C%E3%82%AB%E3%83%90%E3%83%BC%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%E3%81%8B">&#x9032;&#x5316;&#x3057;&#x305F;&#x30D6;&#x30E9;&#x30A6;&#x30B6;API &#x2014; &#x5B9F;&#x969B;&#x306B;&#x4F55;&#x304C;&#x30AB;&#x30D0;&#x30FC;&#x3067;&#x304D;&#x308B;&#x3088;&#x3046;&#x306B;&#x306A;&#x3063;&#x305F;&#x304B;</h3>
<p>&#x78BA;&#x304B;&#x306B;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x306F;&#x5927;&#x304D;&#x304F;&#x9032;&#x5316;&#x3057;&#x305F;&#x3002;</p>
<table>
<thead>
<tr>
<th>&#x304B;&#x3064;&#x3066;JS&#x304C;&#x5FC5;&#x8981;&#x3060;&#x3063;&#x305F;&#x6A5F;&#x80FD;</th>
<th>&#x73FE;&#x5728;&#x306E;&#x6A19;&#x6E96;&#x5BFE;&#x5FDC;</th>
</tr>
</thead>
<tbody>
<tr>
<td>&#x30E2;&#x30FC;&#x30C0;&#x30EB;&#x30C0;&#x30A4;&#x30A2;&#x30ED;&#x30B0;</td>
<td><code>&lt;dialog&gt;</code> &#x8981;&#x7D20;&#xFF08;&#x30D5;&#x30A9;&#x30FC;&#x30AB;&#x30B9;&#x30C8;&#x30E9;&#x30C3;&#x30D7;&#x3084;Esc&#x30AD;&#x30FC;&#x306E;&#x9589;&#x3058;&#x51E6;&#x7406;&#x3092;&#x81EA;&#x52D5;&#x3067;&#x884C;&#x3046;&#xFF09;</td>
</tr>
<tr>
<td>&#x30A2;&#x30B3;&#x30FC;&#x30C7;&#x30A3;&#x30AA;&#x30F3;</td>
<td><code>&lt;details&gt;</code> / <code>&lt;summary&gt;</code> &#x8981;&#x7D20;&#xFF08;&#x30AF;&#x30EA;&#x30C3;&#x30AF;&#x3067;&#x958B;&#x9589;&#x3059;&#x308B;&#x6298;&#x308A;&#x305F;&#x305F;&#x307F;UI&#xFF09;</td>
</tr>
<tr>
<td>&#x30D5;&#x30A9;&#x30FC;&#x30E0;&#x30D0;&#x30EA;&#x30C7;&#x30FC;&#x30B7;&#x30E7;&#x30F3;</td>
<td>HTML5 Constraint Validation API</td>
</tr>
<tr>
<td>&#x30A2;&#x30CB;&#x30E1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;</td>
<td>CSS Transitions / Animations / Web Animations API</td>
</tr>
<tr>
<td>&#x30B9;&#x30AF;&#x30ED;&#x30FC;&#x30EB;&#x5236;&#x5FA1;</td>
<td><code>scroll-behavior: smooth</code>, <code>scroll-snap</code></td>
</tr>
<tr>
<td>&#x30EC;&#x30B9;&#x30DD;&#x30F3;&#x30B7;&#x30D6;&#x30C7;&#x30B6;&#x30A4;&#x30F3;</td>
<td>Container Queries, <code>:has()</code> &#x30BB;&#x30EC;&#x30AF;&#x30BF;</td>
</tr>
<tr>
<td>&#x30DA;&#x30FC;&#x30B8;&#x9077;&#x79FB;</td>
<td>View Transitions API&#xFF08;&#x30DA;&#x30FC;&#x30B8;&#x9593;&#x306E;&#x6ED1;&#x3089;&#x304B;&#x306A;&#x9077;&#x79FB;&#x30A2;&#x30CB;&#x30E1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#xFF09;</td>
</tr>
</tbody>
</table>
<p>&#x3053;&#x308C;&#x3089;&#x306F;React&#x306A;&#x3057;&#x3067;&#x5B9F;&#x73FE;&#x3067;&#x304D;&#x308B;&#x3088;&#x3046;&#x306B;&#x306A;&#x3063;&#x305F;&#x3002;&#x5358;&#x7D14;&#x306A;Web&#x30B5;&#x30A4;&#x30C8;&#x3067;&#x3042;&#x308C;&#x3070;&#x3001;&#x78BA;&#x304B;&#x306B;React&#x306F;&#x4E0D;&#x8981;&#x3060;&#x3002;</p>
<h3 id="polyfill%E8%AB%96%E3%81%AE%E6%A0%B9%E6%9C%AC%E7%9A%84%E3%81%AA%E8%AA%A4%E3%82%8A">Polyfill&#x8AD6;&#x306E;&#x6839;&#x672C;&#x7684;&#x306A;&#x8AA4;&#x308A;</h3>
<p>&#x3057;&#x304B;&#x3057;&#x3001;Polyfill&#x8AD6;&#x306B;&#x306F;&#x6839;&#x672C;&#x7684;&#x306A;&#x898B;&#x843D;&#x3068;&#x3057;&#x304C;&#x3042;&#x308B;&#x3002;React&#x306E;&#x4E3B;&#x8981;&#x306A;&#x610F;&#x7FA9;&#x306F;&#x3001;DOM&#x306E;API&#x3092;&#x4FBF;&#x5229;&#x306B;&#x3059;&#x308B;&#x3053;&#x3068;&#x3067;&#x306F;&#x306A;&#x3044;&#x3002;</p>
<pre><code>&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x304C;&#x8FFD;&#x3044;&#x3064;&#x3044;&#x305F;&#x9818;&#x57DF;&#xFF08;UI&#x306E;&#x300C;&#x898B;&#x305F;&#x76EE;&#x300D;&#x306E;&#x554F;&#x984C;&#xFF09;:
  &#x30FB;&#x30E2;&#x30FC;&#x30C0;&#x30EB;&#x306E;&#x8868;&#x793A; &#x2192; &lt;dialog&gt;
  &#x30FB;&#x30A2;&#x30CB;&#x30E1;&#x30FC;&#x30B7;&#x30E7;&#x30F3; &#x2192; CSS
  &#x30FB;&#x30D5;&#x30A9;&#x30FC;&#x30E0;&#x30D0;&#x30EA;&#x30C7;&#x30FC;&#x30B7;&#x30E7;&#x30F3; &#x2192; HTML5

React&#x306E;&#x672C;&#x8CEA;&#x7684;&#x306A;&#x9818;&#x57DF;&#xFF08;UI&#x306E;&#x300C;&#x69CB;&#x9020;&#x300D;&#x306E;&#x554F;&#x984C;&#xFF09;:
  &#x30FB;&#x72B6;&#x614B;&#x3068;&#x5916;&#x89B3;&#x306E;&#x5206;&#x96E2;&#xFF08;UI = f(state)&#xFF09;
  &#x30FB;&#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#x5316;&#x3068;&#x518D;&#x5229;&#x7528;
  &#x30FB;&#x518D;&#x63CF;&#x753B;&#x6700;&#x9069;&#x5316;&#xFF08;&#x5DEE;&#x5206;&#x66F4;&#x65B0;&#xFF09;
</code></pre>
<p><code>&lt;dialog&gt;</code> &#x30BF;&#x30B0;&#x3067;&#x30E2;&#x30FC;&#x30C0;&#x30EB;&#x3092;&#x8868;&#x793A;&#x3067;&#x304D;&#x308B;&#x3088;&#x3046;&#x306B;&#x306A;&#x3063;&#x3066;&#x3082;&#x3001;&#x300C;&#x30C7;&#x30FC;&#x30BF;&#x304C;&#x5909;&#x308F;&#x3063;&#x305F;&#x3089;UI&#x3092;&#x81EA;&#x52D5;&#x66F4;&#x65B0;&#x3059;&#x308B;&#x300D;&#x300C;UI&#x3092;&#x518D;&#x5229;&#x7528;&#x53EF;&#x80FD;&#x306A;&#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#x306B;&#x5206;&#x5272;&#x3059;&#x308B;&#x300D;&#x3068;&#x3044;&#x3046;&#x554F;&#x984C;&#x306F;&#x89E3;&#x6C7A;&#x3055;&#x308C;&#x306A;&#x3044;&#x3002;&#x3053;&#x308C;&#x3089;&#x306F;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x306E;&#x500B;&#x5225;API&#x306E;&#x554F;&#x984C;&#x3067;&#x306F;&#x306A;&#x304F;&#x3001;<strong>UI&#x3092;&#x3069;&#x3046;&#x69CB;&#x9020;&#x5316;&#x3059;&#x308B;&#x304B;</strong>&#x3068;&#x3044;&#x3046;&#x30A2;&#x30FC;&#x30AD;&#x30C6;&#x30AF;&#x30C1;&#x30E3;&#x306E;&#x554F;&#x984C;&#x3060;&#x3002;</p>
<p>&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x4E92;&#x63DB;&#x6027;&#x306E;&#x7A74;&#x57CB;&#x3081;&#x306F;jQuery&#x306E;&#x5F79;&#x5272;&#x3067;&#x3042;&#x3063;&#x3066;&#x3001;React&#x306E;&#x5F79;&#x5272;&#x3067;&#x306F;&#x306A;&#x304B;&#x3063;&#x305F;&#x3002;React&#x306E;&#x672C;&#x8CEA;&#x3092;API&#x306E;&#x7A74;&#x57CB;&#x3081;&#x3068;&#x6349;&#x3048;&#x308B;&#x3053;&#x3068;&#x81EA;&#x4F53;&#x304C;&#x3001;&#x5BA3;&#x8A00;&#x7684;UI&#x306E;&#x610F;&#x7FA9;&#x3092;&#x5341;&#x5206;&#x306B;&#x7406;&#x89E3;&#x3057;&#x3066;&#x3044;&#x306A;&#x3044;&#x3053;&#x3068;&#x306E;&#x8868;&#x308C;&#x3060;&#x3068;&#x3082;&#x8A00;&#x3048;&#x308B;&#x3002;</p>
<p>&#x305F;&#x3060;&#x3057;&#x6B63;&#x5F53;&#x306A;&#x90E8;&#x5206;&#x3082;&#x3042;&#x308B;&#x3002;<strong>&#x5168;&#x3066;&#x306E;Web&#x30B5;&#x30A4;&#x30C8;&#x306B;React&#x304C;&#x5FC5;&#x8981;&#x306A;&#x308F;&#x3051;&#x3067;&#x306F;&#x306A;&#x3044;</strong>&#x3002;&#x9759;&#x7684;&#x306A;&#x30B3;&#x30F3;&#x30C6;&#x30F3;&#x30C4;&#x30B5;&#x30A4;&#x30C8;&#x3084;&#x3001;&#x30A4;&#x30F3;&#x30BF;&#x30E9;&#x30AF;&#x30B7;&#x30E7;&#x30F3;&#x304C;&#x9650;&#x5B9A;&#x7684;&#x306A;&#x30B5;&#x30A4;&#x30C8;&#x3067;&#x306F;&#x3001;HTML + CSS + &#x5C11;&#x3057;&#x306E;JS&#x3067;&#x5341;&#x5206;&#x3060;&#x3002;&#x554F;&#x984C;&#x306F;&#x300C;React&#x304C;&#x4E0D;&#x8981;&#x306A;&#x30B1;&#x30FC;&#x30B9;&#x304C;&#x3042;&#x308B;&#x300D;&#x3053;&#x3068;&#x3068;&#x300C;React&#x306E;&#x610F;&#x7FA9;&#x304C;Polyfill&#x306B;&#x904E;&#x304E;&#x306A;&#x3044;&#x300D;&#x3053;&#x3068;&#x306F;&#x5225;&#x306E;&#x4E3B;&#x5F35;&#x3060;&#x3068;&#x3044;&#x3046;&#x70B9;&#x3060;&#x3002;</p>
<hr>
<h2 id="9-%E3%82%BB%E3%83%9E%E3%83%B3%E3%83%86%E3%82%A3%E3%83%83%E3%82%AFweb%E3%83%BB%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B7%E3%83%93%E3%83%AA%E3%83%86%E3%82%A3%E3%81%AE%E7%A0%B4%E5%A3%8A%E3%81%A8%E3%81%84%E3%81%86%E6%89%B9%E5%88%A4">9. &#x30BB;&#x30DE;&#x30F3;&#x30C6;&#x30A3;&#x30C3;&#x30AF;Web&#x30FB;&#x30A2;&#x30AF;&#x30BB;&#x30B7;&#x30D3;&#x30EA;&#x30C6;&#x30A3;&#x306E;&#x7834;&#x58CA;&#x3068;&#x3044;&#x3046;&#x6279;&#x5224;</h2>
<h3 id="react%E3%81%AF%E3%82%BB%E3%83%9E%E3%83%B3%E3%83%86%E3%82%A3%E3%83%83%E3%82%AFhtml%E3%82%92%E7%A0%B4%E5%A3%8A%E3%81%97%E3%81%9F%E3%81%AE%E3%81%8B">React&#x306F;&#x30BB;&#x30DE;&#x30F3;&#x30C6;&#x30A3;&#x30C3;&#x30AF;HTML&#x3092;&#x7834;&#x58CA;&#x3057;&#x305F;&#x306E;&#x304B;</h3>
<p>&#x300C;React&#x306F;&#x30BB;&#x30DE;&#x30F3;&#x30C6;&#x30A3;&#x30C3;&#x30AF;Web&#xFF08;HTML&#x306E;&#x5404;&#x8981;&#x7D20;&#x306B;&#x3075;&#x3055;&#x308F;&#x3057;&#x3044;&#x610F;&#x5473;&#x7684;&#x5F79;&#x5272;&#x3092;&#x6301;&#x305F;&#x305B;&#x308B;&#x8003;&#x3048;&#x65B9;&#xFF09;&#x3092;&#x7834;&#x58CA;&#x3057;&#x305F;&#x300D;&#x3068;&#x3044;&#x3046;&#x6279;&#x5224;&#x304C;&#x3042;&#x308B;&#x3002;</p>
<p>&#x30BB;&#x30DE;&#x30F3;&#x30C6;&#x30A3;&#x30C3;&#x30AF;HTML&#x3068;&#x306F;&#x4F55;&#x304B;&#x3002;HTML&#x306E;&#x5404;&#x8981;&#x7D20;&#x306B;&#x306F;&#x672C;&#x6765;&#x3001;&#x610F;&#x5473;&#x304C;&#x3042;&#x308B;&#x3002;<code>&lt;nav&gt;</code> &#x306F;&#x300C;&#x30CA;&#x30D3;&#x30B2;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x300D;&#x3001;<code>&lt;button&gt;</code> &#x306F;&#x300C;&#x30DC;&#x30BF;&#x30F3;&#x300D;&#x3001;<code>&lt;a&gt;</code> &#x306F;&#x300C;&#x30EA;&#x30F3;&#x30AF;&#x300D;&#x3002;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x306F;&#x3053;&#x306E;&#x610F;&#x5473;&#x3092;&#x7406;&#x89E3;&#x3057;&#x3066;&#x3001;<code>&lt;button&gt;</code> &#x306A;&#x3089;&#x30AD;&#x30FC;&#x30DC;&#x30FC;&#x30C9;&#x306E;Enter&#x3067;&#x62BC;&#x305B;&#x308B;&#x3088;&#x3046;&#x306B;&#x3057;&#x3001;<code>&lt;a&gt;</code> &#x306A;&#x3089;&#x30EA;&#x30F3;&#x30AF;&#x5148;&#x3092;&#x8868;&#x793A;&#x3059;&#x308B;&#x3001;&#x3068;&#x3044;&#x3063;&#x305F;&#x51E6;&#x7406;&#x3092;&#x81EA;&#x52D5;&#x3067;&#x884C;&#x3063;&#x3066;&#x304F;&#x308C;&#x308B;&#x3002;&#x30B9;&#x30AF;&#x30EA;&#x30FC;&#x30F3;&#x30EA;&#x30FC;&#x30C0;&#x30FC;&#xFF08;&#x8996;&#x899A;&#x969C;&#x5BB3;&#x306E;&#x3042;&#x308B;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x304C;&#x4F7F;&#x3046;&#x8AAD;&#x307F;&#x4E0A;&#x3052;&#x30BD;&#x30D5;&#x30C8;&#xFF09;&#x3082;&#x3001;&#x300C;&#x3053;&#x3053;&#x306F;&#x30CA;&#x30D3;&#x30B2;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x3001;&#x3053;&#x3053;&#x306B;&#x30EA;&#x30F3;&#x30AF;&#x304C;3&#x3064;&#x300D;&#x3068;&#x8AAD;&#x307F;&#x4E0A;&#x3052;&#x3089;&#x308C;&#x308B;&#x3002;</p>
<pre><code class="language-html">&lt;!-- &#x30BB;&#x30DE;&#x30F3;&#x30C6;&#x30A3;&#x30C3;&#x30AF;&#x306A;HTML &#x2014; &#x8981;&#x7D20;&#x306B;&#x610F;&#x5473;&#x304C;&#x3042;&#x308B; --&gt;
&lt;nav&gt;
  &lt;!-- &#x300C;&#x3053;&#x3053;&#x306F;&#x30CA;&#x30D3;&#x30B2;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x300D; --&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;/home&quot;&gt;Home&lt;/a&gt;&lt;/li&gt;
    &lt;!-- &#x300C;&#x3053;&#x3053;&#x306F;&#x30EA;&#x30F3;&#x30AF;&#x300D; --&gt;
    &lt;li&gt;&lt;a href=&quot;/about&quot;&gt;About&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/nav&gt;

&lt;!-- React&#x3067;&#x898B;&#x3089;&#x308C;&#x304C;&#x3061;&#x306A;&#x975E;&#x30BB;&#x30DE;&#x30F3;&#x30C6;&#x30A3;&#x30C3;&#x30AF;&#x306A;HTML &#x2014; &#x5168;&#x90E8; &lt;div&gt; --&gt;
&lt;div class=&quot;nav&quot;&gt;
  &lt;!-- div&#x306B;&#x306F;&#x610F;&#x5473;&#x304C;&#x306A;&#x3044; --&gt;
  &lt;div class=&quot;nav-item&quot; onClick=&quot;{goHome}&quot;&gt;Home&lt;/div&gt;
  &lt;!-- &#x3053;&#x308C;&#x304C;&#x30EA;&#x30F3;&#x30AF;&#x304B;&#x30DC;&#x30BF;&#x30F3;&#x304B;&#x4E0D;&#x660E; --&gt;
  &lt;div class=&quot;nav-item&quot; onClick=&quot;{goAbout}&quot;&gt;About&lt;/div&gt;
&lt;/div&gt;
&lt;!-- &#x2192; &#x30B9;&#x30AF;&#x30EA;&#x30FC;&#x30F3;&#x30EA;&#x30FC;&#x30C0;&#x30FC;&#x306F;&#x300C;&#x3053;&#x3053;&#x306B;&#x30C6;&#x30AD;&#x30B9;&#x30C8;&#x304C;2&#x3064;&#x3042;&#x308B;&#x300D;&#x3068;&#x3057;&#x304B;&#x5206;&#x304B;&#x3089;&#x306A;&#x3044; --&gt;
&lt;!-- &#x2192; &#x30AD;&#x30FC;&#x30DC;&#x30FC;&#x30C9;&#x3060;&#x3051;&#x3067;&#x306F;&#x64CD;&#x4F5C;&#x3067;&#x304D;&#x306A;&#x3044;&#xFF08;div&#x306F;Tab&#x30AD;&#x30FC;&#x3067;&#x30D5;&#x30A9;&#x30FC;&#x30AB;&#x30B9;&#x3067;&#x304D;&#x306A;&#x3044;&#xFF09; --&gt;
</code></pre>
<p>React&#x88FD;&#x306E;Web&#x30B5;&#x30A4;&#x30C8;&#x306B;&#x306F; <code>&lt;div&gt;</code> &#x3068; <code>&lt;span&gt;</code> &#x3067;&#x5168;&#x3066;&#x3092;&#x69CB;&#x6210;&#x3057;&#x3001;&#x30BB;&#x30DE;&#x30F3;&#x30C6;&#x30A3;&#x30C3;&#x30AF;&#x306A;&#x8981;&#x7D20;&#x3092;&#x4F7F;&#x308F;&#x306A;&#x3044;&#x3082;&#x306E;&#x304C;&#x591A;&#x3044;&#x3002;&#x3055;&#x3089;&#x306B;&#x3001;&#x6765;&#x305F;&#x308B;AI&#x30A8;&#x30FC;&#x30B8;&#x30A7;&#x30F3;&#x30C8;&#x304C;&#x652F;&#x63F4;&#x3059;&#x308B;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x306E;&#x6642;&#x4EE3;&#x306B;&#x306F;&#x3001;HTML&#x8981;&#x7D20;&#x306E;&#x610F;&#x5473;&#x3092;&#x7121;&#x8996;&#x3057;&#x305F;&#x8A2D;&#x8A08;&#x306E;Web&#x30B5;&#x30A4;&#x30C8;&#x307B;&#x3069;&#x64CD;&#x4F5C;&#x3057;&#x306B;&#x304F;&#x304F;&#x306A;&#x308A;&#x3001;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x304C;&#x96E2;&#x308C;&#x308B;&#x3060;&#x308D;&#x3046;&#x3068;&#x3044;&#x3046;&#x4E88;&#x6E2C;&#x3082;&#x3042;&#x308B;&#x3002;</p>
<h3 id="%E3%80%8Chtml%E3%82%B5%E3%82%A4%E3%83%88%E3%80%8D%E3%81%A8%E3%80%8Cjs%E3%82%A2%E3%83%97%E3%83%AA%E3%80%8D%E3%81%AF%E5%88%A5%E7%89%A9">&#x300C;HTML&#x30B5;&#x30A4;&#x30C8;&#x300D;&#x3068;&#x300C;JS&#x30A2;&#x30D7;&#x30EA;&#x300D;&#x306F;&#x5225;&#x7269;</h3>
<p>&#x3053;&#x306E;&#x6279;&#x5224;&#x306B;&#x5BFE;&#x3059;&#x308B;&#x53CD;&#x8AD6;&#x3082;&#x5B58;&#x5728;&#x3059;&#x308B;&#x3002;JS&#x304C;&#x7121;&#x52B9;&#x3067;&#x3082;&#x4F7F;&#x3048;&#x308B;&#x300C;HTML&#x30B5;&#x30A4;&#x30C8;&#xFF08;&#x7B2C;6&#x7AE0;&#x3067;&#x898B;&#x305F;MPA&#xFF09;&#x300D;&#x3068;&#x3001;JS&#x524D;&#x63D0;&#x3067;&#x8A2D;&#x8A08;&#x3059;&#x308B;&#x300C;JS&#x30A2;&#x30D7;&#x30EA;&#xFF08;SPA&#xFF09;&#x300D;&#x306F;&#x601D;&#x60F3;&#x304C;&#x5168;&#x304F;&#x7570;&#x306A;&#x308B;&#x3068;&#x3044;&#x3046;&#x8003;&#x3048;&#x65B9;&#x3060;&#x3002;</p>
<p>&#x5E74;&#x8868;&#x3067;&#x89E6;&#x308C;&#x305F;&#x3088;&#x3046;&#x306B;&#x3001;Web&#x306F;&#x672C;&#x6765;&#x30C9;&#x30AD;&#x30E5;&#x30E1;&#x30F3;&#x30C8;&#x306E;&#x30D7;&#x30E9;&#x30C3;&#x30C8;&#x30D5;&#x30A9;&#x30FC;&#x30E0;&#x3060;&#x3063;&#x305F;&#x3002;<code>&lt;article&gt;</code>, <code>&lt;nav&gt;</code>, <code>&lt;header&gt;</code> &#x3068;&#x3044;&#x3063;&#x305F;&#x8981;&#x7D20;&#x306F;&#x3001;&#x6587;&#x66F8;&#x306E;&#x69CB;&#x9020;&#x3092;&#x8868;&#x73FE;&#x3059;&#x308B;&#x305F;&#x3081;&#x306E;&#x3082;&#x306E;&#x3060;&#x3002;Google&#x30DE;&#x30C3;&#x30D7;&#x3084;Figma&#x3001;Notion&#x306E;&#x3088;&#x3046;&#x306A;&#x8907;&#x96D1;&#x306A;&#x30A2;&#x30D7;&#x30EA;&#x30B1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x3092;&#x300C;&#x30C9;&#x30AD;&#x30E5;&#x30E1;&#x30F3;&#x30C8;&#x300D;&#x306E;&#x30BB;&#x30DE;&#x30F3;&#x30C6;&#x30A3;&#x30AF;&#x30B9;&#x3067;&#x8868;&#x73FE;&#x3059;&#x308B;&#x3053;&#x3068;&#x81EA;&#x4F53;&#x306B;&#x7121;&#x7406;&#x304C;&#x3042;&#x308B;&#x3002;</p>
<p>SPA&#x304C;Web&#x306E;&#x4E0A;&#x3067;&#x52D5;&#x3044;&#x3066;&#x3044;&#x308B;&#x306E;&#x306F;&#x3001;Web&#x304C;&#x6700;&#x3082;&#x666E;&#x53CA;&#x3057;&#x305F;&#x30D7;&#x30E9;&#x30C3;&#x30C8;&#x30D5;&#x30A9;&#x30FC;&#x30E0;&#x3060;&#x304B;&#x3089;&#x3067;&#x3042;&#x3063;&#x3066;&#x3001;HTML&#x306E;&#x8A2D;&#x8A08;&#x610F;&#x56F3;&#x306B;&#x6CBF;&#x3063;&#x3066;&#x3044;&#x308B;&#x304B;&#x3089;&#x3067;&#x306F;&#x306A;&#x3044;&#x3002;</p>
<p>&#x300C;&#x7406;&#x60F3;&#x7684;&#x306A;SPA&#x306F;&#x3001;MPA&#x306E;&#x4E0A;&#x3067;&#x52D5;&#x304F;&#x3079;&#x304D;&#x3060;&#x300D;&#x3068;&#x3044;&#x3046;&#x4E3B;&#x5F35;&#x3082;&#x3042;&#x308B;&#x3002;&#x4E00;&#x898B;&#x77DB;&#x76FE;&#x3057;&#x3066;&#x805E;&#x3053;&#x3048;&#x308B;&#x304C;&#x3001;&#x3053;&#x308C;&#x306F;&#x300C;&#x57FA;&#x672C;&#x306F;MPA&#xFF08;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x304C;HTML&#x3092;&#x8FD4;&#x3059;&#x901A;&#x5E38;&#x306E;Web&#x30B5;&#x30A4;&#x30C8;&#xFF09;&#x3068;&#x3057;&#x3066;&#x6B63;&#x3057;&#x304F;&#x69CB;&#x9020;&#x5316;&#x3057;&#x3066;&#x304A;&#x304D;&#x3001;&#x30EA;&#x30C3;&#x30C1;&#x306A;&#x30A4;&#x30F3;&#x30BF;&#x30E9;&#x30AF;&#x30B7;&#x30E7;&#x30F3;&#x304C;&#x5FC5;&#x8981;&#x306A;&#x90E8;&#x5206;&#x3060;&#x3051;JavaScript&#x3067;&#x62E1;&#x5F35;&#x3059;&#x308B;&#x300D;&#x3068;&#x3044;&#x3046;&#x8003;&#x3048;&#x65B9;&#x3060;&#x3002;&#x5168;&#x3066;&#x3092;JavaScript&#x3067;&#x69CB;&#x7BC9;&#x3059;&#x308B;&#x306E;&#x3067;&#x306F;&#x306A;&#x304F;&#x3001;&#x307E;&#x305A;&#x571F;&#x53F0;&#x3068;&#x3057;&#x3066;&#x306E;HTML&#x30C9;&#x30AD;&#x30E5;&#x30E1;&#x30F3;&#x30C8;&#x304C;&#x3042;&#x308A;&#x3001;&#x305D;&#x306E;&#x4E0A;&#x306B;SPA&#x7684;&#x306A;&#x4F53;&#x9A13;&#x3092;&#x8F09;&#x305B;&#x308B;&#x3002;&#x3053;&#x3046;&#x3059;&#x308C;&#x3070;&#x3001;JavaScript&#x304C;&#x7121;&#x52B9;&#x3067;&#x3082;&#x6700;&#x4F4E;&#x9650;&#x306E;&#x30B3;&#x30F3;&#x30C6;&#x30F3;&#x30C4;&#x306F;&#x8AAD;&#x3081;&#x308B;&#x3057;&#x3001;&#x30BB;&#x30DE;&#x30F3;&#x30C6;&#x30A3;&#x30AF;&#x30B9;&#x3082;&#x7DAD;&#x6301;&#x3067;&#x304D;&#x308B;&#x3002;Next.js&#x306E;&#x3088;&#x3046;&#x306A;&#x30D5;&#x30EC;&#x30FC;&#x30E0;&#x30EF;&#x30FC;&#x30AF;&#x304C;SSR&#xFF08;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x30B5;&#x30A4;&#x30C9;&#x30EC;&#x30F3;&#x30C0;&#x30EA;&#x30F3;&#x30B0;&#x3002;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x5074;&#x3067;HTML&#x3092;&#x751F;&#x6210;&#x3059;&#x308B;&#x65B9;&#x5F0F;&#x3067;&#x3001;&#x7B2C;12&#x7AE0;&#x3067;&#x8A73;&#x8FF0;&#x3059;&#x308B;&#xFF09;&#x3092;&#x91CD;&#x8996;&#x3059;&#x308B;&#x306E;&#x3082;&#x3001;&#x3053;&#x306E;&#x65B9;&#x5411;&#x6027;&#x306E;&#x4E00;&#x3064;&#x3068;&#x8A00;&#x3048;&#x308B;&#x3002;</p>
<hr>
<h1 id="%E7%AC%AC4%E9%83%A8-%E3%83%9D%E3%82%B9%E3%83%88react-%E2%80%94-%E7%8F%BE%E4%BB%A3%E3%81%AE%E9%81%B8%E6%8A%9E%E8%82%A2">&#x7B2C;4&#x90E8;: &#x30DD;&#x30B9;&#x30C8;React &#x2014; &#x73FE;&#x4EE3;&#x306E;&#x9078;&#x629E;&#x80A2;</h1>
<h2 id="10-hypermedia%E9%A7%86%E5%8B%95%E3%81%AE%E5%BE%A9%E6%A8%A9-%E2%80%94-htmx%E3%81%A8hotwire">10. Hypermedia&#x99C6;&#x52D5;&#x306E;&#x5FA9;&#x6A29; &#x2014; htmx&#x3068;Hotwire</h2>
<h3 id="%E3%80%8C%E5%BE%A9%E5%8F%A4%E9%81%8B%E5%8B%95%E3%80%8D%E3%81%A8%E3%81%97%E3%81%A6%E3%81%AEhypermedia">&#x300C;&#x5FA9;&#x53E4;&#x904B;&#x52D5;&#x300D;&#x3068;&#x3057;&#x3066;&#x306E;Hypermedia</h3>
<p>React&#x3092;&#x306F;&#x3058;&#x3081;&#x3068;&#x3059;&#x308B;SPA&#x30D5;&#x30EC;&#x30FC;&#x30E0;&#x30EF;&#x30FC;&#x30AF;&#x306F;&#x3001;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x3092;&#x300C;&#x30A2;&#x30D7;&#x30EA;&#x30B1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x306E;&#x5B9F;&#x884C;&#x74B0;&#x5883;&#x300D;&#x3068;&#x3057;&#x3066;&#x6271;&#x3046;&#x3002;HTML&#x306F;&#x5358;&#x306A;&#x308B;&#x30B3;&#x30F3;&#x30C6;&#x30CA;&#x3067;&#x3001;&#x5B9F;&#x8CEA;&#x7684;&#x306A;UI&#x306F;JavaScript&#x304C;&#x69CB;&#x7BC9;&#x3059;&#x308B;&#x3002;</p>
<p>&#x4E00;&#x65B9;htmx&#x3084;Hotwire&#x306F;&#x3001;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x3092;&#x672C;&#x6765;&#x306E;&#x300C;HTML&#x3092;&#x89E3;&#x91C8;&#x3059;&#x308B;&#x30D7;&#x30E9;&#x30C3;&#x30C8;&#x30D5;&#x30A9;&#x30FC;&#x30E0;&#x300D;&#x3068;&#x3057;&#x3066;&#x6271;&#x3044;&#x3001;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x304C;HTML&#x3092;&#x8FD4;&#x3059;&#x3068;&#x3044;&#x3046;Web&#x306E;&#x57FA;&#x672C;&#x7684;&#x306A;&#x52D5;&#x4F5C;&#x3092;&#x62E1;&#x5F35;&#x3059;&#x308B;&#x3002;</p>
<p><img src="http://blog.shinonome.io/content/images/2026/03/diagram7.jpg" alt="React&#x306E;&#x767A;&#x660E;&#x3068;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x601D;&#x60F3;&#x306E;&#x5909;&#x9077;" loading="lazy"></p>
<p>&#x3053;&#x308C;&#x306F;Web&#x306E;&#x672C;&#x6765;&#x306E;&#x59FF;&#x3092;&#x53D6;&#x308A;&#x623B;&#x3059;&#x5FA9;&#x53E4;&#x904B;&#x52D5;&#x3060;&#x3068;&#x3044;&#x3046;&#x898B;&#x65B9;&#x304C;&#x3042;&#x308B;&#x3002;Web&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x306F;&#x4EEE;&#x60F3;&#x30DE;&#x30B7;&#x30F3;&#x306E;&#x4E2D;&#x306E;&#x300C;&#x30A2;&#x30D7;&#x30EA;&#x300D;&#x306E;&#x5668;&#x3067;&#x306F;&#x306A;&#x304F;&#x3001;&#x30CF;&#x30A4;&#x30D1;&#x30FC;&#x30E1;&#x30C7;&#x30A3;&#x30A2;&#xFF08;&#x30C6;&#x30AD;&#x30B9;&#x30C8;&#x30FB;&#x753B;&#x50CF;&#x30FB;&#x30EA;&#x30F3;&#x30AF;&#x306A;&#x3069;&#x3092;&#x7D71;&#x5408;&#x3057;&#x305F;&#x60C5;&#x5831;&#x8868;&#x73FE;&#xFF09;&#x3092;&#x89E3;&#x91C8;&#x3059;&#x308B;&#x5206;&#x6563;&#x30C9;&#x30AD;&#x30E5;&#x30E1;&#x30F3;&#x30C8;&#x30D7;&#x30E9;&#x30C3;&#x30C8;&#x30D5;&#x30A9;&#x30FC;&#x30E0;&#x3060;&#x3068;&#x3044;&#x3046;&#x7ACB;&#x5834;&#x3060;&#x3002;</p>
<p>&#x5B9F;&#x969B;&#x3001;React&#x304C;&#x89E3;&#x3053;&#x3046;&#x3068;&#x3057;&#x3066;&#x3044;&#x308B;&#x554F;&#x984C;&#x2014;&#x2014;&#x8907;&#x96D1;&#x306A;&#x72B6;&#x614B;&#x7BA1;&#x7406;&#x3092;&#x4F34;&#x3046;&#x30EA;&#x30C3;&#x30C1;&#x306A;&#x30A4;&#x30F3;&#x30BF;&#x30E9;&#x30AF;&#x30B7;&#x30E7;&#x30F3;&#x2014;&#x2014;&#x3092;&#x5FC5;&#x8981;&#x3068;&#x3059;&#x308B;Web&#x30B5;&#x30A4;&#x30C8;&#x306F;&#x3001;Web&#x5168;&#x4F53;&#x306E;&#x307B;&#x3093;&#x306E;&#x4E00;&#x90E8;&#x3060;&#x3002;&#x4F01;&#x696D;&#x306E;&#x30B3;&#x30FC;&#x30DD;&#x30EC;&#x30FC;&#x30C8;&#x30B5;&#x30A4;&#x30C8;&#x3001;&#x30D6;&#x30ED;&#x30B0;&#x3001;EC&#x30B5;&#x30A4;&#x30C8;&#x306E;&#x5546;&#x54C1;&#x4E00;&#x89A7;&#x3001;&#x30CB;&#x30E5;&#x30FC;&#x30B9;&#x30B5;&#x30A4;&#x30C8;......&#x4E16;&#x306E;&#x4E2D;&#x306E;Web&#x30B5;&#x30A4;&#x30C8;&#x306E;&#x5927;&#x534A;&#x306F;&#x5C0F;&#x898F;&#x6A21;&#x304B;&#x3064;&#x5358;&#x7D14;&#x3067;&#x3001;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x304C;HTML&#x3092;&#x8FD4;&#x3059;&#x3060;&#x3051;&#x3067;&#x5341;&#x5206;&#x306B;&#x6A5F;&#x80FD;&#x3059;&#x308B;&#x3002;&#x3053;&#x3046;&#x3057;&#x305F;&#x30B5;&#x30A4;&#x30C8;&#x306B;&#x306F;&#x3001;htmx&#x3084;PHP&#x3001;Hotwire/Stimulus&#x3068;&#x3044;&#x3063;&#x305F;&#x6280;&#x8853;&#x306E;&#x65B9;&#x304C;&#x9069;&#x3057;&#x3066;&#x3044;&#x308B;&#x53EF;&#x80FD;&#x6027;&#x304C;&#x9AD8;&#x3044;&#x3002;</p>
<h3 id="%E5%87%BA%E8%87%AA%E3%81%AE%E9%81%95%E3%81%84%E3%81%8C%E8%A8%AD%E8%A8%88%E3%81%AB%E5%8F%8A%E3%81%BC%E3%81%97%E3%81%9F%E5%BD%B1%E9%9F%BF">&#x51FA;&#x81EA;&#x306E;&#x9055;&#x3044;&#x304C;&#x8A2D;&#x8A08;&#x306B;&#x53CA;&#x307C;&#x3057;&#x305F;&#x5F71;&#x97FF;</h3>
<p>&#x6280;&#x8853;&#x306E;&#x51FA;&#x81EA;&#x304C;&#x305D;&#x306E;&#x8A2D;&#x8A08;&#x601D;&#x60F3;&#x306B;&#x5927;&#x304D;&#x304F;&#x5F71;&#x97FF;&#x3059;&#x308B;&#x3068;&#x3044;&#x3046;&#x89B3;&#x70B9;&#x306F;&#x91CD;&#x8981;&#x3060;&#x3002;</p>
<p><strong>Hotwire&#xFF08;37signals / Basecamp / HEY&#xFF09;</strong>:</p>
<ul>
<li>&#x5B9F;&#x969B;&#x306E;&#x5546;&#x7528;SaaS&#x88FD;&#x54C1;&#xFF08;Basecamp, HEY&#xFF09;&#x306E;&#x958B;&#x767A;&#x304B;&#x3089;&#x751F;&#x307E;&#x308C;&#x305F;</li>
<li>UI&#x306B;&#x5BFE;&#x3059;&#x308B;&#x73FE;&#x5B9F;&#x7684;&#x306A;&#x8981;&#x6C42;&#x306B;&#x5FDC;&#x3048;&#x308B;&#x3053;&#x3068;&#x304C;&#x6700;&#x521D;&#x304B;&#x3089;&#x6C42;&#x3081;&#x3089;&#x308C;&#x3066;&#x3044;&#x305F;</li>
<li>37signals CEO&#x306E;Jason Fried&#x306F;&#x30C7;&#x30B6;&#x30A4;&#x30CA;&#x30FC;&#x51FA;&#x8EAB;&#x3067;&#x3042;&#x308A;&#x3001;UI/UX&#x306E;&#x59A5;&#x5354;&#x306F;&#x8A31;&#x3055;&#x308C;&#x306A;&#x304B;&#x3063;&#x305F;</li>
<li>&#x7D50;&#x679C;: &#x30AB;&#x30B9;&#x30BF;&#x30E0;JS&#x304C;&#x5FC5;&#x8981;&#x306A;&#x5834;&#x9762;&#x306B;&#x5BFE;&#x5FDC;&#x3059;&#x308B;Stimulus&#x3001;&#x30EA;&#x30A2;&#x30EB;&#x30BF;&#x30A4;&#x30E0;&#x66F4;&#x65B0;&#x306E;Turbo Streams&#x306A;&#x3069;&#x3001;&#x73FE;&#x5B9F;&#x306E;&#x8981;&#x6C42;&#x306B;&#x5FDC;&#x3048;&#x308B;&#x69CB;&#x9020;&#x304C;&#x6700;&#x521D;&#x304B;&#x3089;&#x8A2D;&#x8A08;&#x306B;&#x542B;&#x307E;&#x308C;&#x3066;&#x3044;&#x308B;</li>
</ul>
<p><strong>htmx&#xFF08;Carson Gross / &#x30E2;&#x30F3;&#x30BF;&#x30CA;&#x5DDE;&#x7ACB;&#x5927;&#x5B66;&#xFF09;</strong>:</p>
<ul>
<li>&#x30A2;&#x30AB;&#x30C7;&#x30DF;&#x30C3;&#x30AF;&#x306A;&#x6587;&#x8108;&#x304B;&#x3089;&#x751F;&#x307E;&#x308C;&#x305F;</li>
<li>Hypermedia&#xFF08;&#x30CF;&#x30A4;&#x30D1;&#x30FC;&#x30E1;&#x30C7;&#x30A3;&#x30A2;&#xFF09;&#x306E;&#x7406;&#x8AD6;&#x7684;&#x7D14;&#x7C8B;&#x3055;&#x3092;&#x91CD;&#x8996;&#x3059;&#x308B;&#x50BE;&#x5411;&#x304C;&#x3042;&#x308B;</li>
<li>&#x5546;&#x7528;&#x88FD;&#x54C1;&#x3078;&#x306E;&#x76F4;&#x63A5;&#x7684;&#x306A;&#x8CAC;&#x4EFB;&#x304C;&#x306A;&#x3044;&#x5206;&#x3001;&#x7406;&#x8AD6;&#x306B;&#x5BC4;&#x3063;&#x305F;&#x8A2D;&#x8A08;&#x306B;&#x306A;&#x308A;&#x3084;&#x3059;&#x3044;</li>
<li>&#x7D50;&#x679C;: HTML&#x306B;&#x5BC6;&#x7740;&#x3057;&#x305F;&#x30D7;&#x30EA;&#x30DF;&#x30C6;&#x30A3;&#x30D6;&#x306A;&#x64CD;&#x4F5C;&#x3092;&#x63D0;&#x4F9B;&#x3059;&#x308B;&#x3002;&#x7406;&#x8AD6;&#x306E;&#x7D14;&#x7C8B;&#x3055;&#x304C;&#x8A2D;&#x8A08;&#x306B;&#x8272;&#x6FC3;&#x304F;&#x53CD;&#x6620;&#x3055;&#x308C;&#x3066;&#x3044;&#x308B;</li>
</ul>
<p>&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x306F;&#x4EBA;&#x9593;&#x3068;&#x306E;&#x30A4;&#x30F3;&#x30BF;&#x30D5;&#x30A7;&#x30FC;&#x30B9;&#x3067;&#x3042;&#x308B;&#x305F;&#x3081;&#x3001;&#x8AD6;&#x7406;&#x7684;&#x3067;&#x306A;&#x3044;&#x8981;&#x4EF6;&#x304C;&#x8907;&#x96D1;&#x5316;&#x3057;&#x3084;&#x3059;&#x3044;&#x3002;&#x300C;&#x3053;&#x306E;&#x753B;&#x9762;&#x3067;&#x306F;&#x30A2;&#x30CB;&#x30E1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x4ED8;&#x304D;&#x3067;&#x30E2;&#x30FC;&#x30C0;&#x30EB;&#x3092;&#x51FA;&#x3057;&#x305F;&#x3044;&#x300D;&#x300C;&#x3053;&#x306E;&#x30D5;&#x30A9;&#x30FC;&#x30E0;&#x3060;&#x3051;&#x7279;&#x6B8A;&#x306A;&#x30D0;&#x30EA;&#x30C7;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x304C;&#x5FC5;&#x8981;&#x300D;&#x3068;&#x3044;&#x3063;&#x305F;&#x4F8B;&#x5916;&#x30B1;&#x30FC;&#x30B9;&#x304C;&#x5FC5;&#x305A;&#x51FA;&#x3066;&#x304F;&#x308B;&#x3002;Hotwire&#x306E;&#x5834;&#x5408;&#x306F;&#x305D;&#x3046;&#x3057;&#x305F;&#x4F8B;&#x5916;&#x306B;&#x5BFE;&#x5FDC;&#x3059;&#x308B;&#x4ED5;&#x7D44;&#x307F;&#xFF08;Stimulus&#xFF09;&#x304C;&#x6700;&#x521D;&#x304B;&#x3089;&#x8A2D;&#x8A08;&#x306B;&#x542B;&#x307E;&#x308C;&#x3066;&#x3044;&#x305F;&#x3002;&#x3053;&#x3046;&#x3057;&#x305F;&#x51FA;&#x81EA;&#x306E;&#x9055;&#x3044;&#x304C;&#x8A2D;&#x8A08;&#x306B;&#x3069;&#x3046;&#x5F71;&#x97FF;&#x3059;&#x308B;&#x304B;&#x306F;&#x3001;&#x7B2C;11&#x7AE0;&#x30FB;&#x7B2C;13&#x7AE0;&#x3067;&#x3055;&#x3089;&#x306B;&#x6398;&#x308A;&#x4E0B;&#x3052;&#x308B;&#x3002;</p>
<p>&#x3053;&#x306E;&#x69CB;&#x9020;&#x306F;&#x30D5;&#x30EC;&#x30FC;&#x30E0;&#x30EF;&#x30FC;&#x30AF;&#x5168;&#x822C;&#x306B;&#x5F53;&#x3066;&#x306F;&#x307E;&#x308B;&#x3002;Angular/React&#x304C;Google/Facebook&#x3068;&#x3044;&#x3046;&#x5DE8;&#x5927;&#x4F01;&#x696D;&#x304B;&#x3089;&#x751F;&#x307E;&#x308C;&#x305F;&#x306E;&#x306F;&#x5076;&#x7136;&#x3067;&#x306F;&#x306A;&#x304F;&#x3001;&#x5927;&#x898F;&#x6A21;&#x3067;&#x8907;&#x96D1;&#x306A;&#x30A2;&#x30D7;&#x30EA;&#x30B1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x306E;&#x8AB2;&#x984C;&#x304C;&#x8A2D;&#x8A08;&#x306B;&#x53CD;&#x6620;&#x3055;&#x308C;&#x3066;&#x3044;&#x308B;&#x3002;&#x4E00;&#x65B9;&#x3001;Rails, Hotwire, htmx&#x304C;&#x5C0F;&#x3055;&#x3044;&#x30C1;&#x30FC;&#x30E0;&#x304B;&#x3089;&#x751F;&#x307E;&#x308C;&#x305F;&#x3053;&#x3068;&#x306F;&#x3001;&#x30B7;&#x30F3;&#x30D7;&#x30EB;&#x3055;&#x306E;&#x91CD;&#x8996;&#x3068;&#x3057;&#x3066;&#x8A2D;&#x8A08;&#x306B;&#x8868;&#x308C;&#x3066;&#x3044;&#x308B;&#x3002;</p>
<h3 id="%E9%81%B8%E6%8A%9E%E8%82%A2%E3%81%AE%E5%A4%9A%E6%A7%98%E6%80%A7">&#x9078;&#x629E;&#x80A2;&#x306E;&#x591A;&#x69D8;&#x6027;</h3>
<p>&#x65B0;&#x3057;&#x304F;&#x696D;&#x754C;&#x306B;&#x5165;&#x3063;&#x3066;&#x304F;&#x308B;&#x82E5;&#x624B;&#x306B;&#x63D0;&#x793A;&#x3055;&#x308C;&#x308B;&#x9078;&#x629E;&#x80A2;&#x304C;&#x5B9F;&#x8CEA;React&#x3057;&#x304B;&#x7121;&#x304F;&#x306A;&#x3063;&#x3066;&#x3044;&#x308B;&#x3053;&#x3068;&#x3078;&#x306E;&#x61F8;&#x5FF5;&#x3082;&#x3042;&#x308B;&#x3002;&#x73FE;&#x5B9F;&#x306B;&#x3001;React&#x4EE5;&#x5916;&#x306E;&#x6280;&#x8853;&#x304C;&#x30DE;&#x30C3;&#x30C1;&#x3059;&#x308B;&#x73FE;&#x5834;&#x3082;&#x6570;&#x591A;&#x304F;&#x3042;&#x308B;&#x3002;React&#x4E00;&#x5F37;&#x306E;&#x72B6;&#x6CC1;&#x306F;&#x696D;&#x754C;&#x306B;&#x3068;&#x3063;&#x3066;&#x5065;&#x5168;&#x3067;&#x306F;&#x306A;&#x304F;&#x3001;htmx&#x3084;Hotwire&#x3068;&#x3044;&#x3063;&#x305F;&#x5225;&#x306E;&#x9078;&#x629E;&#x80A2;&#x3092;&#x77E5;&#x3063;&#x3066;&#x304A;&#x304F;&#x3053;&#x3068;&#x306B;&#x306F;&#x4FA1;&#x5024;&#x304C;&#x3042;&#x308B;&#x3002;</p>
<hr>
<h2 id="11-htmx%E6%89%B9%E5%88%A4%E3%81%AE2%E3%81%A4%E3%81%AE%E8%AB%96%E7%82%B9">11. htmx&#x6279;&#x5224;&#x306E;2&#x3064;&#x306E;&#x8AD6;&#x70B9;</h2>
<h3 id="%E6%89%B9%E5%88%A4%E3%81%AE%E6%A7%8B%E9%80%A0">&#x6279;&#x5224;&#x306E;&#x69CB;&#x9020;</h3>
<p>htmx&#x306B;&#x5BFE;&#x3059;&#x308B;&#x6279;&#x5224;&#x306F;&#x3001;&#x5927;&#x304D;&#x304F;2&#x3064;&#x306E;&#x8AD6;&#x70B9;&#x306B;&#x5206;&#x3051;&#x3089;&#x308C;&#x308B;&#x3002;</p>
<p><strong>&#x8AD6;&#x70B9;1: HTML on the Wire&#x81EA;&#x4F53;&#x3078;&#x306E;&#x6279;&#x5224;</strong></p>
<p>&#x300C;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x304C;HTML&#x3092;&#x8FD4;&#x3057;&#x3066;&#x72B6;&#x614B;&#x3092;&#x8868;&#x73FE;&#x3059;&#x308B;&#x300D;&#x3068;&#x3044;&#x3046;&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;&#x305D;&#x306E;&#x3082;&#x306E;&#x3078;&#x306E;&#x6279;&#x5224;&#x3060;&#x3002;&#x300C;JSON&#x3092;&#x8FD4;&#x3057;&#x3066;&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x3067;&#x63CF;&#x753B;&#x3059;&#x308B;&#x65B9;&#x304C;&#x67D4;&#x8EDF;&#x3060;&#x300D;&#x3068;&#x3044;&#x3046;&#x7ACB;&#x5834;&#x304B;&#x3089;&#x51FA;&#x3066;&#x304F;&#x308B;&#x3002;&#x3057;&#x304B;&#x3057;&#x3053;&#x306E;&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;&#x81EA;&#x4F53;&#x306B;&#x306F;&#x6709;&#x52B9;&#x6D3B;&#x7528;&#x306E;&#x53EF;&#x80FD;&#x6027;&#x304C;&#x3042;&#x308B;&#x3068;&#x3044;&#x3046;&#x898B;&#x65B9;&#x304C;&#x591A;&#x3044;&#x3002;&#x5B9F;&#x969B;&#x3001;RSC&#x3082;&#x672C;&#x8CEA;&#x7684;&#x306B;&#x306F;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x3067;UI&#x3092;&#x69CB;&#x7BC9;&#x3057;&#x3066;&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x306B;&#x9001;&#x308B;&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;&#x3067;&#x3042;&#x308A;&#x3001;HTML on the Wire&#x306E;&#x601D;&#x60F3;&#x3068;&#x8FD1;&#x3044;&#x3002;</p>
<p><strong>&#x8AD6;&#x70B9;2: htmx&#x306E;&#x624B;&#x7D9A;&#x304D;&#x7684;&#x306A;&#x8A18;&#x8FF0;&#x3078;&#x306E;&#x6279;&#x5224;</strong></p>
<p>&#x3053;&#x3061;&#x3089;&#x304C;&#x3088;&#x308A;&#x6DF1;&#x523B;&#x306A;&#x6279;&#x5224;&#x3060;&#x3002;HTML on the Wire&#xFF08;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x304C;HTML&#x3092;&#x8FD4;&#x3059;&#x65B9;&#x5F0F;&#xFF09;&#x306F;&#x3001;&#x672C;&#x6765;&#x306F;&#x5BA3;&#x8A00;&#x6027;&#x3092;&#x9AD8;&#x3081;&#x308B;&#x306F;&#x305A;&#x306E;&#x65B9;&#x5411;&#x6027;&#x3060;&#x3002;&#x306A;&#x305C;&#x306A;&#x3089;&#x3001;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x304C;&#x300C;UI&#x306E;&#x3042;&#x308B;&#x3079;&#x304D;&#x59FF;&#x300D;&#x3092;&#x5B8C;&#x6210;&#x3055;&#x308C;&#x305F;HTML&#x3068;&#x3057;&#x3066;&#x8FD4;&#x3057;&#x3066;&#x304F;&#x308C;&#x308B;&#x306E;&#x3067;&#x3001;&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x5074;&#x3067;&#x300C;&#x30C7;&#x30FC;&#x30BF;&#x3092;&#x53D7;&#x3051;&#x53D6;&#x3063;&#x3066;&#x3001;DOM&#x3092;&#x7D44;&#x307F;&#x7ACB;&#x3066;&#x3066;&#x3001;&#x72B6;&#x614B;&#x3092;&#x7BA1;&#x7406;&#x3057;&#x3066;...&#x300D;&#x3068;&#x3044;&#x3046;&#x624B;&#x7D9A;&#x304D;&#x304C;&#x4E0D;&#x8981;&#x306B;&#x306A;&#x308B;&#x304B;&#x3089;&#x3060;&#x3002;&#x3057;&#x304B;&#x3057;htmx&#x3067;&#x306F;&#x3001;&#x305D;&#x306E;&#x8FD4;&#x3063;&#x3066;&#x304D;&#x305F;HTML&#x3092;&#x300C;&#x3069;&#x3053;&#x306B;&#x300D;&#x300C;&#x3069;&#x3046;&#x3084;&#x3063;&#x3066;&#x300D;&#x5DEE;&#x3057;&#x8FBC;&#x3080;&#x304B;&#x3068;&#x3044;&#x3046;&#x6307;&#x793A;&#x3092;HTML&#x5C5E;&#x6027;&#x3068;&#x3057;&#x3066;&#x5404;&#x8981;&#x7D20;&#x306B;&#x30D0;&#x30E9;&#x30D0;&#x30E9;&#x306B;&#x8A18;&#x8FF0;&#x3059;&#x308B;&#x5FC5;&#x8981;&#x304C;&#x3042;&#x308B;&#x3002;&#x305B;&#x3063;&#x304B;&#x304F;&#x5BA3;&#x8A00;&#x6027;&#x3092;&#x4E0A;&#x3052;&#x308B;&#x65B9;&#x5411;&#x306B;&#x9032;&#x3093;&#x3060;&#x306E;&#x306B;&#x3001;&#x90E8;&#x5206;&#x66F4;&#x65B0;&#x306E;&#x8A18;&#x8FF0;&#x304C;&#x307E;&#x305F;&#x624B;&#x7D9A;&#x304D;&#x7684;&#x306B;&#x306A;&#x3063;&#x3066;&#x3057;&#x307E;&#x3046;&#x3068;&#x3044;&#x3046;&#x30B8;&#x30EC;&#x30F3;&#x30DE;&#x3002;</p>
<pre><code class="language-html">&lt;!-- htmx: &#x4F55;&#x3092;&#x30C8;&#x30EA;&#x30AC;&#x30FC;&#x306B;&#x4F55;&#x3092;&#x3069;&#x3053;&#x306B;&#x5DEE;&#x3057;&#x8FBC;&#x3080;&#x304B;&#x304C;HTML&#x4E2D;&#x306B;&#x6563;&#x5728;&#x3059;&#x308B; --&gt;
&lt;button hx-get=&quot;/items&quot;              &lt;!-- &#x30AF;&#x30EA;&#x30C3;&#x30AF;&#x3067; /items &#x306B;GET&#x30EA;&#x30AF;&#x30A8;&#x30B9;&#x30C8; --&gt;
        hx-target=&quot;#list&quot;            &lt;!-- &#x30EC;&#x30B9;&#x30DD;&#x30F3;&#x30B9;&#x3092; #list &#x306B;&#x5DEE;&#x3057;&#x8FBC;&#x3080; --&gt;
        hx-swap=&quot;innerHTML&quot;          &lt;!-- &#x5DEE;&#x3057;&#x8FBC;&#x307F;&#x65B9;&#x6CD5;: &#x4E2D;&#x8EAB;&#x3092;&#x4E38;&#x3054;&#x3068;&#x7F6E;&#x63DB; --&gt;
        hx-trigger=&quot;click&quot;           &lt;!-- &#x30C8;&#x30EA;&#x30AC;&#x30FC;: &#x30AF;&#x30EA;&#x30C3;&#x30AF; --&gt;
        hx-indicator=&quot;#spinner&quot;&gt;     &lt;!-- &#x901A;&#x4FE1;&#x4E2D;&#x306B; #spinner &#x3092;&#x8868;&#x793A; --&gt;
  Load Items
&lt;/button&gt;
&lt;div id=&quot;list&quot;&gt;&lt;/div&gt;
&lt;div id=&quot;spinner&quot; class=&quot;htmx-indicator&quot;&gt;Loading...&lt;/div&gt;

&lt;!-- &#x5225;&#x306E;&#x5834;&#x6240;&#x306B;&#x307E;&#x305F;&#x5225;&#x306E;htmx&#x5C5E;&#x6027; &#x2014; &#x3069;&#x3061;&#x3089;&#x304C;&#x5148;&#x306B;&#x5B9F;&#x884C;&#x3055;&#x308C;&#x308B;&#x304B;&#x306F;&#x64CD;&#x4F5C;&#x9806;&#x6B21;&#x7B2C; --&gt;
&lt;input hx-get=&quot;/search&quot;              &lt;!-- &#x30AD;&#x30FC;&#x5165;&#x529B;&#x3067; /search &#x306B;GET&#x30EA;&#x30AF;&#x30A8;&#x30B9;&#x30C8; --&gt;
       hx-target=&quot;#results&quot;          &lt;!-- &#x30EC;&#x30B9;&#x30DD;&#x30F3;&#x30B9;&#x3092; #results &#x306B;&#x5DEE;&#x3057;&#x8FBC;&#x3080; --&gt;
       hx-trigger=&quot;keyup changed delay:300ms&quot;&gt;  &lt;!-- 300ms&#x5165;&#x529B;&#x304C;&#x6B62;&#x307E;&#x3063;&#x305F;&#x3089;&#x767A;&#x706B; --&gt;
&lt;div id=&quot;results&quot;&gt;&lt;/div&gt;
</code></pre>
<p>&#x5404;&#x8981;&#x7D20;&#x306B;htmx&#x5C5E;&#x6027;&#x304C;&#x6563;&#x5728;&#x3057;&#x3001;&#x300C;&#x4F55;&#x304C;&#x3069;&#x3046;&#x9023;&#x643A;&#x3057;&#x3066;&#x3044;&#x308B;&#x304B;&#x300D;&#x306E;&#x5168;&#x4F53;&#x50CF;&#x3092;&#x628A;&#x63E1;&#x3059;&#x308B;&#x306B;&#x306F;&#x3001;HTML&#x5168;&#x4F53;&#x3092;&#x30B9;&#x30AD;&#x30E3;&#x30F3;&#x3057;&#x306A;&#x3051;&#x308C;&#x3070;&#x306A;&#x3089;&#x306A;&#x3044;&#x3002;&#x3053;&#x306E;&#x6563;&#x5728;&#x6027;&#x306F;jQuery&#x6642;&#x4EE3;&#x306E;&#x300C;&#x3069;&#x3053;&#x3067;&#x4F55;&#x3092;&#x64CD;&#x4F5C;&#x3057;&#x3066;&#x3044;&#x308B;&#x304B;&#x8FFD;&#x8DE1;&#x3067;&#x304D;&#x306A;&#x3044;&#x300D;&#x554F;&#x984C;&#x3068;&#x69CB;&#x9020;&#x7684;&#x306B;&#x540C;&#x3058;&#x3060;&#x3002;</p>
<h3 id="hotwire%E3%81%AE%E5%AF%BE%E7%85%A7%E7%9A%84%E3%81%AA%E3%82%A2%E3%83%97%E3%83%AD%E3%83%BC%E3%83%81">Hotwire&#x306E;&#x5BFE;&#x7167;&#x7684;&#x306A;&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;</h3>
<p>&#x5BFE;&#x7167;&#x7684;&#x306A;&#x306E;&#x304C;Hotwire/Turbo&#x306E;&#x8A2D;&#x8A08;&#x3060;&#x3002;</p>
<pre><code class="language-html">&lt;!-- Hotwire/Turbo: &#x30D5;&#x30EC;&#x30FC;&#x30E0;&#x3068;&#x3044;&#x3046;&#x660E;&#x793A;&#x7684;&#x306A;&#x5883;&#x754C; --&gt;
&lt;turbo-frame id=&quot;notifications&quot;&gt;
  &lt;!-- &#x3053;&#x306E;&#x67A0;&#x306E;&#x4E2D;&#x306E;&#x30EA;&#x30F3;&#x30AF;&#x3084;&#x30D5;&#x30A9;&#x30FC;&#x30E0;&#x306F;&#x3001;&#x3053;&#x306E;&#x67A0;&#x306E;&#x4E2D;&#x3060;&#x3051;&#x3092;&#x66F4;&#x65B0;&#x3059;&#x308B; --&gt;
  &lt;!-- &#x67A0;&#x306E;&#x5916;&#x306B;&#x306F;&#x5F71;&#x97FF;&#x3057;&#x306A;&#x3044; &#x2014; &#x5883;&#x754C;&#x304C;&#x69CB;&#x9020;&#x3068;&#x3057;&#x3066;&#x660E;&#x793A;&#x3055;&#x308C;&#x3066;&#x3044;&#x308B; --&gt;
  &lt;a href=&quot;/notifications&quot;&gt;&#x901A;&#x77E5;&#x4E00;&#x89A7;&#x3092;&#x8AAD;&#x307F;&#x8FBC;&#x3080;&lt;/a&gt;
  &lt;!-- &#x2191; &#x3053;&#x306E;&#x30EA;&#x30F3;&#x30AF;&#x3092;&#x30AF;&#x30EA;&#x30C3;&#x30AF;&#x3059;&#x308B;&#x3068;&#x3001;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x304B;&#x3089;HTML&#x304C;&#x8FD4;&#x3063;&#x3066;&#x304D;&#x3066;&#x3001;
       turbo-frame id=&quot;notifications&quot; &#x306E;&#x4E2D;&#x8EAB;&#x3060;&#x3051;&#x304C;&#x7F6E;&#x304D;&#x63DB;&#x308F;&#x308B; --&gt;
&lt;/turbo-frame&gt;
</code></pre>
<p>Turbo Frames&#x306F;&#x300C;&#x3053;&#x306E;&#x67A0;&#x306E;&#x4E2D;&#x3060;&#x3051;&#x304C;&#x66F4;&#x65B0;&#x5BFE;&#x8C61;&#x300D;&#x3068;&#x3044;&#x3046;&#x5883;&#x754C;&#x3092;HTML&#x306E;&#x69CB;&#x9020;&#x3068;&#x3057;&#x3066;&#x660E;&#x793A;&#x3059;&#x308B;&#x3002;&#x3053;&#x308C;&#x306F;<code>&lt;iframe&gt;</code>&#xFF08;&#x5225;&#x306E;&#x30DA;&#x30FC;&#x30B8;&#x3092;&#x57CB;&#x3081;&#x8FBC;&#x3080;&#x8981;&#x7D20;&#xFF09;&#x306E;&#x6982;&#x5FF5;&#x3092;&#x30E2;&#x30C0;&#x30F3;&#x306B;&#x518D;&#x89E3;&#x91C8;&#x3057;&#x305F;&#x3082;&#x306E;&#x3067;&#x3001;&#x958B;&#x767A;&#x8005;&#x304C;&#x300C;&#x3069;&#x3053;&#x304C;&#x66F4;&#x65B0;&#x3055;&#x308C;&#x308B;&#x304B;&#x300D;&#x3092;&#x69CB;&#x9020;&#x7684;&#x306B;&#x628A;&#x63E1;&#x3067;&#x304D;&#x308B;&#x3002;</p>
<p>htmx&#x306B;&#x306F;Turbo&#x306B;&#x898B;&#x3089;&#x308C;&#x308B;&#x3088;&#x3046;&#x306A;&#x30D5;&#x30EC;&#x30FC;&#x30E0;&#x6982;&#x5FF5;&#x304C;&#x306A;&#x304F;&#x3001;&#x5F93;&#x3046;&#x3079;&#x304D;&#x30EC;&#x30FC;&#x30EB;&#xFF08;&#x6307;&#x91DD;&#xFF09;&#x304C;&#x793A;&#x3055;&#x308C;&#x306A;&#x3044;&#x3002;&#x601D;&#x60F3;&#x304C;&#x4F1D;&#x308F;&#x3089;&#x306A;&#x3044;&#x3068;&#x5BB9;&#x6613;&#x304F;&#x306F;&#x307F;&#x51FA;&#x3066;&#x3057;&#x307E;&#x3046;&#x7D50;&#x679C;&#x306B;&#x306A;&#x308B;&#x3002;Turbo Frames&#x306E;&#x30D5;&#x30EC;&#x30FC;&#x30E0;&#x6982;&#x5FF5;&#x306F;&#x3001;iframe&#x304B;&#x3089;&#x306E;&#x7740;&#x60F3;&#x306B;&#x3088;&#x308B;&#x300C;&#x6982;&#x5FF5;&#x7684;&#x8DDD;&#x96E2;&#x306E;&#x5727;&#x7E2E;&#x300D;&#x2014;&#x2014;&#x3064;&#x307E;&#x308A;&#x99B4;&#x67D3;&#x307F;&#x306E;&#x3042;&#x308B;&#x6982;&#x5FF5;&#x3092;&#x4F7F;&#x3063;&#x3066;&#x65B0;&#x3057;&#x3044;&#x62BD;&#x8C61;&#x3092;&#x4F5C;&#x308B;&#x2014;&#x2014;&#x3068;&#x8A00;&#x3048;&#x308B;&#x898B;&#x4E8B;&#x306A;&#x8A2D;&#x8A08;&#x3060;&#x3002;</p>
<hr>
<h2 id="12-react-server-components-%E2%80%94-%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89%E3%81%AE%E5%86%8D%E7%B5%B1%E5%90%88">12. React Server Components &#x2014; &#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x306E;&#x518D;&#x7D71;&#x5408;</h2>
<h3 id="rsc%E3%81%8C%E7%A4%BA%E3%81%99%E6%96%B9%E5%90%91%E6%80%A7">RSC&#x304C;&#x793A;&#x3059;&#x65B9;&#x5411;&#x6027;</h3>
<h3 id="ssr-%E2%80%94-csr-spa%E3%81%AE%E8%AA%B2%E9%A1%8C%E3%82%92%E8%A3%9C%E3%81%86%E8%A9%A6%E3%81%BF">SSR &#x2014; CSR SPA&#x306E;&#x8AB2;&#x984C;&#x3092;&#x88DC;&#x3046;&#x8A66;&#x307F;</h3>
<p>&#x7B2C;6&#x7AE0;&#x3067;&#x898B;&#x305F;&#x3088;&#x3046;&#x306B;&#x3001;CSR&#xFF08;&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x30B5;&#x30A4;&#x30C9;&#x30EC;&#x30F3;&#x30C0;&#x30EA;&#x30F3;&#x30B0;&#xFF09;&#x306E;SPA&#x3067;&#x306F;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x304C;&#x307E;&#x305A;&#x7A7A;&#x306E;HTML&#x3068;JS&#x30D0;&#x30F3;&#x30C9;&#x30EB;&#x3092;&#x53D7;&#x3051;&#x53D6;&#x308A;&#x3001;JavaScript&#x304C;&#x30BC;&#x30ED;&#x304B;&#x3089;UI&#x3092;&#x69CB;&#x7BC9;&#x3059;&#x308B;&#x3002;&#x3053;&#x306E;&#x65B9;&#x5F0F;&#x306B;&#x306F;&#x6839;&#x672C;&#x7684;&#x306A;&#x8AB2;&#x984C;&#x304C;&#x3042;&#x3063;&#x305F;&#x3002;</p>
<ul>
<li><strong>&#x521D;&#x56DE;&#x8868;&#x793A;&#x304C;&#x9045;&#x3044;</strong>: &#x5927;&#x91CF;&#x306E;JS&#x3092;&#x30C0;&#x30A6;&#x30F3;&#x30ED;&#x30FC;&#x30C9;&#x30FB;&#x5B9F;&#x884C;&#x3057;&#x7D42;&#x3048;&#x308B;&#x307E;&#x3067;&#x753B;&#x9762;&#x306B;&#x4F55;&#x3082;&#x8868;&#x793A;&#x3055;&#x308C;&#x306A;&#x3044;</li>
<li><strong>SEO&#x306B;&#x4E0D;&#x5229;</strong>: &#x691C;&#x7D22;&#x30A8;&#x30F3;&#x30B8;&#x30F3;&#x306E;&#x30AF;&#x30ED;&#x30FC;&#x30E9;&#x30FC;&#x304C;&#x53D6;&#x5F97;&#x3059;&#x308B;HTML&#x304C;&#x7A7A;&#xFF08;<code>&lt;div id=&quot;root&quot;&gt;&lt;/div&gt;</code>&#x3060;&#x3051;&#xFF09;</li>
<li><strong>&#x4F4E;&#x30B9;&#x30DA;&#x30C3;&#x30AF;&#x7AEF;&#x672B;&#x306B;&#x53B3;&#x3057;&#x3044;</strong>: UI&#x306E;&#x69CB;&#x7BC9;&#x3092;&#x3059;&#x3079;&#x3066;&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x5074;&#x306E;JS&#x306B;&#x4F9D;&#x5B58;&#x3059;&#x308B;</li>
</ul>
<p><strong>SSR</strong>&#xFF08;Server-Side Rendering&#xFF09;&#x306F;&#x3001;&#x3053;&#x306E;&#x8AB2;&#x984C;&#x306B;&#x5BFE;&#x3059;&#x308B;&#x76F4;&#x63A5;&#x7684;&#x306A;&#x89E3;&#x6C7A;&#x7B56;&#x3060;&#x3002;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x4E0A;&#x3067;React&#x3092;&#x5B9F;&#x884C;&#x3057;&#x3001;&#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#x30C4;&#x30EA;&#x30FC;&#x3092;HTML&#x306B;&#x5909;&#x63DB;&#x3057;&#x3066;&#x304B;&#x3089;&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x306B;&#x8FD4;&#x3059;&#x3002;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x306F;&#x307E;&#x305A;&#x305D;&#x306E;HTML&#x3092;&#x8868;&#x793A;&#x3059;&#x308B;&#x306E;&#x3067;&#x3001;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x306F;JS&#x306E;&#x5B9F;&#x884C;&#x3092;&#x5F85;&#x305F;&#x305A;&#x306B;&#x30B3;&#x30F3;&#x30C6;&#x30F3;&#x30C4;&#x3092;&#x76EE;&#x306B;&#x3059;&#x308B;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x308B;&#x3002;</p>
<p>&#x3057;&#x304B;&#x3057;&#x3001;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x304C;&#x8FD4;&#x3057;&#x305F;HTML&#x306F;&#x6700;&#x521D;&#x306E;&#x6642;&#x70B9;&#x3067;&#x306F;&#x305F;&#x3060;&#x306E;&#x9759;&#x7684;&#x306A;HTML&#x2014;&#x2014;&#x3064;&#x307E;&#x308A;&#x30DC;&#x30BF;&#x30F3;&#x3092;&#x62BC;&#x3057;&#x3066;&#x3082;&#x4F55;&#x3082;&#x8D77;&#x304D;&#x306A;&#x3044;&#x3001;&#x305F;&#x3060;&#x8868;&#x793A;&#x3055;&#x308C;&#x3066;&#x3044;&#x308B;&#x3060;&#x3051;&#x306E;&#x72B6;&#x614B;&#x3060;&#x3002;&#x3053;&#x3053;&#x3067;&#x5FC5;&#x8981;&#x306B;&#x306A;&#x308B;&#x306E;&#x304C;<strong>&#x30CF;&#x30A4;&#x30C9;&#x30EC;&#x30FC;&#x30B7;&#x30E7;&#x30F3;</strong>&#x3068;&#x3044;&#x3046;&#x51E6;&#x7406;&#x3060;&#x3002;&#x30CF;&#x30A4;&#x30C9;&#x30EC;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x3068;&#x306F;&#x3001;&#x3053;&#x306E;&#x9759;&#x7684;&#x306A;HTML&#x306B;&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x5074;&#x306E;JavaScript&#x3092;&#x300C;&#x6C34;&#x3092;&#x6CE8;&#x3050;&#x3088;&#x3046;&#x306B;&#x300D;&#x7D50;&#x3073;&#x3064;&#x3051;&#x3066;&#x3001;&#x30DC;&#x30BF;&#x30F3;&#x306E;&#x30AF;&#x30EA;&#x30C3;&#x30AF;&#x306A;&#x3069;&#x306E;&#x30A4;&#x30F3;&#x30BF;&#x30E9;&#x30AF;&#x30B7;&#x30E7;&#x30F3;&#x304C;&#x52B9;&#x304F;&#x3088;&#x3046;&#x306B;&#x3059;&#x308B;&#x51E6;&#x7406;&#x306E;&#x3053;&#x3068;&#x3060;&#x3002;</p>
<p>SSR&#x306E;&#x9650;&#x754C;&#x306F;&#x3001;&#x3053;&#x306E;&#x30CF;&#x30A4;&#x30C9;&#x30EC;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x306B;&#x3042;&#x308B;&#x3002;SSR&#x3067;&#x306F;&#x30DA;&#x30FC;&#x30B8;&#x5168;&#x4F53;&#x306E;&#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#x306B;&#x5BFE;&#x5FDC;&#x3059;&#x308B;JavaScript&#x3092;&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x306B;&#x9001;&#x308A;&#x3001;&#x30DA;&#x30FC;&#x30B8;&#x5168;&#x4F53;&#x3092;&#x30CF;&#x30A4;&#x30C9;&#x30EC;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x3059;&#x308B;&#x5FC5;&#x8981;&#x304C;&#x3042;&#x308B;&#x3002;&#x3064;&#x307E;&#x308A;&#x3001;&#x8868;&#x793A;&#x306F;&#x901F;&#x304F;&#x306A;&#x3063;&#x305F;&#x304C;&#x3001;&#x30A4;&#x30F3;&#x30BF;&#x30E9;&#x30AF;&#x30C6;&#x30A3;&#x30D6;&#x306B;&#x306A;&#x308B;&#x307E;&#x3067;&#x306E;&#x5F85;&#x3061;&#x6642;&#x9593;&#x3068;JS&#x30D0;&#x30F3;&#x30C9;&#x30EB;&#x306E;&#x5927;&#x304D;&#x3055;&#x306F;CSR SPA&#x3068;&#x5909;&#x308F;&#x3089;&#x306A;&#x3044;&#x3002;Next.js Pages Router&#xFF08;2016&#x5E74;&#x301C;&#xFF09;&#x304C;&#x3053;&#x306E;SSR&#x306E;&#x4EE3;&#x8868;&#x7684;&#x306A;&#x5B9F;&#x88C5;&#x3060;&#x3002;</p>
<p>React Server Components&#xFF08;RSC&#xFF09;&#x306F;&#x3001;SSR&#x3092;&#x3055;&#x3089;&#x306B;&#x9032;&#x5316;&#x3055;&#x305B;&#x305F;&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;&#x3067;&#x3042;&#x308A;&#x3001;React&#x81EA;&#x8EAB;&#x306B;&#x3088;&#x308B;&#x300C;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;/&#x30D0;&#x30C3;&#x30AF;&#x30A8;&#x30F3;&#x30C9;&#x5206;&#x96E2;&#x306E;&#x5F0A;&#x5BB3;&#x3078;&#x306E;&#x56DE;&#x7B54;&#x300D;&#x3067;&#x3082;&#x3042;&#x308B;&#x3002;RSC&#x306E;&#x6838;&#x5FC3;&#x306F;&#x3001;&#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#x3092;<strong>Server Component</strong>&#x3068;<strong>Client Component</strong>&#x306B;&#x5206;&#x3051;&#x308B;&#x3053;&#x3068;&#x3060;&#x3002;Server Component&#x306F;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x4E0A;&#x3067;&#x306E;&#x307F;&#x5B9F;&#x884C;&#x3055;&#x308C;&#x3001;&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x306B;JavaScript&#x3092;&#x4E00;&#x5207;&#x9001;&#x3089;&#x306A;&#x3044;&#x3002;Client Component&#x3060;&#x3051;&#x304C;&#x30CF;&#x30A4;&#x30C9;&#x30EC;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x306E;&#x5BFE;&#x8C61;&#x306B;&#x306A;&#x308B;&#x2014;&#x2014;&#x3064;&#x307E;&#x308A;&#x3001;&#x9759;&#x7684;&#x306A;&#x90E8;&#x5206;&#x306E;JS&#x306F;&#x4E0D;&#x8981;&#x306B;&#x306A;&#x308A;&#x3001;&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x306B;&#x9001;&#x308B;JS&#x306E;&#x91CF;&#x304C;&#x5927;&#x5E45;&#x306B;&#x6E1B;&#x308B;&#x3002;</p>
<p>&#x4EE5;&#x4E0B;&#x306E;&#x56F3;&#x3067;&#x3001;CSR SPA&#x30FB;SSR&#x30FB;RSC&#x306E;3&#x3064;&#x306E;&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;&#x3092;&#x6BD4;&#x8F03;&#x3059;&#x308B;&#x3002;</p>
<p><img src="http://blog.shinonome.io/content/images/2026/03/diagram-7.jpg" alt="React&#x306E;&#x767A;&#x660E;&#x3068;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x601D;&#x60F3;&#x306E;&#x5909;&#x9077;" loading="lazy"></p>
<p>RSC&#x3067;&#x306F;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x4E0A;&#x3067;React&#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#x304C;&#x5B9F;&#x884C;&#x3055;&#x308C;&#x3001;&#x305D;&#x306E;&#x7D50;&#x679C;&#xFF08;RSC&#x30DA;&#x30A4;&#x30ED;&#x30FC;&#x30C9;&#x3068;&#x547C;&#x3070;&#x308C;&#x308B;&#x72EC;&#x81EA;&#x30D5;&#x30A9;&#x30FC;&#x30DE;&#x30C3;&#x30C8;&#xFF09;&#x304C;&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x306B;&#x9001;&#x3089;&#x308C;&#x308B;&#x3002;</p>
<p>RSC&#x306B;&#x3088;&#x308A;&#x4EE5;&#x4E0B;&#x304C;&#x5B9F;&#x73FE;&#x3055;&#x308C;&#x308B;&#x3002;</p>
<ul>
<li>&#x30C7;&#x30FC;&#x30BF;&#x30D9;&#x30FC;&#x30B9;&#x30AF;&#x30A8;&#x30EA;&#x3092;&#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#x5185;&#x3067;&#x76F4;&#x63A5;&#x66F8;&#x3051;&#x308B;&#xFF08;API&#x5C64;&#x304C;&#x4E0D;&#x8981;&#x306B;&#x306A;&#x308B;&#xFF09;</li>
<li>&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x306B;&#x9001;&#x308B;JS&#x30D0;&#x30F3;&#x30C9;&#x30EB;&#x304C;&#x5927;&#x5E45;&#x306B;&#x524A;&#x6E1B;&#x3055;&#x308C;&#x308B;</li>
<li>&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x72B6;&#x614B;&#x306E;&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x5074;&#x30AD;&#x30E3;&#x30C3;&#x30B7;&#x30E5;&#x7BA1;&#x7406;&#xFF08;TanStack Query&#x7B49;&#xFF09;&#x304C;&#x4E0D;&#x8981;&#x306B;&#x306A;&#x308B;</li>
</ul>
<p>&#x6CE8;&#x76EE;&#x3059;&#x3079;&#x304D;&#x306F;&#x3001;HTML on the Wire&#x3068;RSC&#x30DA;&#x30A4;&#x30ED;&#x30FC;&#x30C9;&#x306E;&#x4E16;&#x754C;&#x89B3;&#x304C;&#x304B;&#x306A;&#x308A;&#x8FD1;&#x63A5;&#x3057;&#x3066;&#x3044;&#x308B;&#x3053;&#x3068;&#x3060;&#x3002;</p>
<pre><code>htmx/Hotwire:  &#x30B5;&#x30FC;&#x30D0;&#x30FC; &#x2192; HTML&#x65AD;&#x7247; &#x2192; &#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x304C;DOM&#x5DEE;&#x3057;&#x66FF;&#x3048;
RSC:           &#x30B5;&#x30FC;&#x30D0;&#x30FC; &#x2192; RSC&#x30DA;&#x30A4;&#x30ED;&#x30FC;&#x30C9; &#x2192; React&#x304C;&#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#x30C4;&#x30EA;&#x30FC;&#x66F4;&#x65B0;

&#x5F62;&#x5F0F;&#x306F;&#x9055;&#x3046;&#x304C;&#x3001;&#x300C;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x3067;UI&#x3092;&#x69CB;&#x7BC9;&#x3057;&#x3066;&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x306B;&#x9001;&#x308B;&#x300D;&#x3068;&#x3044;&#x3046;&#x65B9;&#x5411;&#x6027;&#x306F;&#x540C;&#x3058;
</code></pre>
<p>&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;/&#x30D0;&#x30C3;&#x30AF;&#x30A8;&#x30F3;&#x30C9;&#x5206;&#x96E2;&#x306E;&#x6642;&#x4EE3;&#x3092;&#x7D4C;&#x3066;&#x3001;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x306F;&#x518D;&#x3073;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x30B5;&#x30A4;&#x30C9;&#x3068;&#x306E;&#x7D71;&#x5408;&#x306B;&#x5411;&#x304B;&#x3063;&#x3066;&#x3044;&#x308B;&#x3002;&#x6C17;&#x3065;&#x3044;&#x305F;&#x3089;&#x6570;&#x5E74;&#x5F8C;&#x306F;&#x3001;&#x5F62;&#x306F;&#x9055;&#x3048;&#x3069;&#x307F;&#x3093;&#x306A;Hypermedia&#x306E;&#x4E16;&#x754C;&#x306B;&#x8FD1;&#x3065;&#x3044;&#x3066;&#x3044;&#x308B;&#x304B;&#x3082;&#x3057;&#x308C;&#x306A;&#x3044;&#x3002;</p>
<h3 id="rsc%E3%81%AA%E3%81%84%E3%81%97%E3%81%AFnextjs%E3%81%AE%E8%AA%B2%E9%A1%8C">RSC(&#x306A;&#x3044;&#x3057;&#x306F;Next.js)&#x306E;&#x8AB2;&#x984C;</h3>
<p>RSC&#x306F;&#x73FE;&#x6642;&#x70B9;&#x3067;&#x306F;Next.js&#x304C;&#x6700;&#x3082;&#x5148;&#x884C;&#x3057;&#x305F;&#x5B9F;&#x88C5;&#x3092;&#x6301;&#x3063;&#x3066;&#x3044;&#x308B;&#x3002;&#x3057;&#x304B;&#x3057;&#x3001;Next.js&#x306B;&#x3088;&#x308B;&#x30D5;&#x30EB;&#x30B9;&#x30BF;&#x30C3;&#x30AF;&#x958B;&#x767A;&#x306B;&#x306F;&#x8AB2;&#x984C;&#x3082;&#x898B;&#x3048;&#x3066;&#x304D;&#x3066;&#x3044;&#x308B;&#x3002;React&#x3068;&#x5BC6;&#x7D50;&#x5408;&#x3057;&#x3059;&#x304E;&#x3066;&#x3044;&#x308B;&#x3053;&#x3068;&#x3001;Server Component&#x3068;Client Component&#x306E;&#x5883;&#x754C;&#x304C;&#x66D6;&#x6627;&#x3067;&#x3069;&#x3053;&#x307E;&#x3067;&#x304C;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x306E;&#x8CAC;&#x52D9;&#x306A;&#x306E;&#x304B;&#x5206;&#x304B;&#x308A;&#x306B;&#x304F;&#x3044;&#x3053;&#x3068;&#x3001;&#x305D;&#x3057;&#x3066;Rails&#x3084;Laravel&#x306A;&#x3069;&#x306E;&#x6210;&#x719F;&#x3057;&#x305F;&#x30D0;&#x30C3;&#x30AF;&#x30A8;&#x30F3;&#x30C9;&#x30D5;&#x30EC;&#x30FC;&#x30E0;&#x30EF;&#x30FC;&#x30AF;&#x304C;&#x6A19;&#x6E96;&#x3067;&#x6301;&#x3064;&#x6A5F;&#x80FD;&#x7FA4;&#x2014;&#x2014;&#x8A8D;&#x8A3C;&#x3001;&#x8A8D;&#x53EF;&#x3001;ORM&#xFF08;&#x30C7;&#x30FC;&#x30BF;&#x30D9;&#x30FC;&#x30B9;&#x64CD;&#x4F5C;&#x306E;&#x62BD;&#x8C61;&#x5316;&#x5C64;&#xFF09;&#x3001;&#x30D0;&#x30C3;&#x30AF;&#x30B0;&#x30E9;&#x30A6;&#x30F3;&#x30C9;&#x30B8;&#x30E7;&#x30D6;&#x3001;&#x30E1;&#x30FC;&#x30EB;&#x9001;&#x4FE1;&#x3001;&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x30B9;&#x30C8;&#x30EC;&#x30FC;&#x30B8;&#x64CD;&#x4F5C;&#x2014;&#x2014;&#x3068;&#x3044;&#x3063;&#x305F;&#x30A8;&#x30B3;&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x304C;Next.js&#x306B;&#x306F;&#x6B20;&#x3051;&#x3066;&#x3044;&#x308B;&#x3002;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x30D5;&#x30EC;&#x30FC;&#x30E0;&#x30EF;&#x30FC;&#x30AF;&#x304C;&#x30D0;&#x30C3;&#x30AF;&#x30A8;&#x30F3;&#x30C9;&#x306E;&#x9818;&#x57DF;&#x306B;&#x8E0F;&#x307F;&#x8FBC;&#x3080;&#x3053;&#x3068;&#x3067;&#x3001;&#x304B;&#x3048;&#x3063;&#x3066;&#x4E2D;&#x9014;&#x534A;&#x7AEF;&#x306A;&#x72B6;&#x614B;&#x304C;&#x751F;&#x307E;&#x308C;&#x308B;&#x30EA;&#x30B9;&#x30AF;&#x304C;&#x3042;&#x308B;&#x306E;&#x3060;&#x3002;</p>
<hr>
<h1 id="%E7%AC%AC5%E9%83%A8-%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%AE%E5%93%B2%E5%AD%A6%E3%81%A8%E8%A8%AD%E8%A8%88%E6%80%9D%E6%83%B3">&#x7B2C;5&#x90E8;: &#x30D5;&#x30EC;&#x30FC;&#x30E0;&#x30EF;&#x30FC;&#x30AF;&#x306E;&#x54F2;&#x5B66;&#x3068;&#x8A2D;&#x8A08;&#x601D;&#x60F3;</h1>
<h2 id="13-%E5%93%B2%E5%AD%A6%E3%81%AF%E5%AE%9F%E8%A3%85%E3%82%92%E6%AD%A3%E5%BD%93%E5%8C%96%E3%81%99%E3%82%8B%E3%81%8C%E3%80%81%E5%AE%9F%E8%A3%85%E3%82%92%E5%88%B6%E7%B4%84%E3%81%97%E3%81%AA%E3%81%84">13. &#x54F2;&#x5B66;&#x306F;&#x5B9F;&#x88C5;&#x3092;&#x6B63;&#x5F53;&#x5316;&#x3059;&#x308B;&#x304C;&#x3001;&#x5B9F;&#x88C5;&#x3092;&#x5236;&#x7D04;&#x3057;&#x306A;&#x3044;</h2>
<blockquote>
<p>&#x672C;&#x7AE0;&#x3068;&#x6B21;&#x7AE0;&#x3067;&#x7D39;&#x4ECB;&#x3059;&#x308B;&#x300C;&#x964D;&#x4E0B;&#x6DF1;&#x5EA6;&#x300D;&#x300C;&#x69CB;&#x9020;&#x7684;&#x76F2;&#x70B9;&#x300D;&#x3068;&#x3044;&#x3046;&#x8003;&#x3048;&#x65B9;&#x306F;&#x3001;<a href="https://x.com/yuta0801_/status/2030507032433107055">@yuta0801_&#x6C0F;&#x306E;X&#xFF08;Twitter&#xFF09;&#x4E0A;&#x3067;&#x306E;&#x8A18;&#x4E8B;1</a>&#x304A;&#x3088;&#x3073;<a href="https://x.com/yuta0801_/status/2030542410460402160">&#x8A18;&#x4E8B;2</a>&#x3067;&#x5C55;&#x958B;&#x3055;&#x308C;&#x3066;&#x3044;&#x305F;&#x3082;&#x306E;&#x3060;&#x3002;&#x975E;&#x5E38;&#x306B;&#x793A;&#x5506;&#x306B;&#x5BCC;&#x3080;&#x5185;&#x5BB9;&#x3060;&#x3063;&#x305F;&#x306E;&#x3067;&#x3001;&#x52DD;&#x624B;&#x306B;&#x7D39;&#x4ECB;&#x3055;&#x305B;&#x3066;&#x3044;&#x305F;&#x3060;&#x304F;&#x3002;</p>
</blockquote>
<h3 id="%E3%80%8C%E9%99%8D%E4%B8%8B%E6%B7%B1%E5%BA%A6%E3%80%8D%E3%81%AE%E6%A6%82%E5%BF%B5">&#x300C;&#x964D;&#x4E0B;&#x6DF1;&#x5EA6;&#x300D;&#x306E;&#x6982;&#x5FF5;</h3>
<p>&#x6280;&#x8853;&#x7684;&#x306A;&#x601D;&#x60F3;&#x3084;&#x30C7;&#x30B6;&#x30A4;&#x30F3;&#x54F2;&#x5B66;&#x306B;&#x306F;&#x3001;<strong>&#x3069;&#x306E;&#x30EC;&#x30A4;&#x30E4;&#x30FC;&#x307E;&#x3067;&#x964D;&#x308A;&#x3066;&#x304F;&#x308B;&#x304B;</strong>&#x3068;&#x3044;&#x3046;&#x300C;&#x6DF1;&#x5EA6;&#x300D;&#x304C;&#x3042;&#x308B;&#x3002;&#x3053;&#x308C;&#x3092;&#x300C;&#x964D;&#x4E0B;&#x6DF1;&#x5EA6;&#x300D;&#x3068;&#x547C;&#x3076;&#x8003;&#x3048;&#x65B9;&#x304C;&#x3042;&#x308B;&#x3002;</p>
<p>&#x5177;&#x4F53;&#x4F8B;&#x3067;&#x898B;&#x3066;&#x307F;&#x3088;&#x3046;&#x3002;Web&#x958B;&#x767A;&#x8005;&#x306B;&#x3082;&#x99B4;&#x67D3;&#x307F;&#x306E;&#x3042;&#x308B;&#x4F8B;&#x304B;&#x3089;&#x59CB;&#x3081;&#x308B;&#x3002;</p>
<pre><code>&#x964D;&#x4E0B;&#x6DF1;&#x5EA6;&#x306E;&#x30B9;&#x30DA;&#x30AF;&#x30C8;&#x30E9;&#x30E0;&#xFF08;&#x6DF1;&#x3044;&#x65B9;&#x304C;&#x601D;&#x60F3;&#x306E;&#x5B9F;&#x52B9;&#x6027;&#x304C;&#x9AD8;&#x3044;&#xFF09;

[&#x6700;&#x3082;&#x6DF1;&#x3044;] &#x8A00;&#x8A9E;&#x30EC;&#x30D9;&#x30EB;
  TypeScript&#x306E;&#x578B;&#x30C1;&#x30A7;&#x30C3;&#x30AF; &#x2192; &#x578B;&#x304C;&#x5408;&#x308F;&#x306A;&#x3044;&#x3068;&#x30B3;&#x30F3;&#x30D1;&#x30A4;&#x30EB;&#x30A8;&#x30E9;&#x30FC;&#x3002;
    &#x4F8B;: &#x6570;&#x5024;&#x3092;&#x671F;&#x5F85;&#x3059;&#x308B;&#x95A2;&#x6570;&#x306B;&#x6587;&#x5B57;&#x5217;&#x3092;&#x6E21;&#x3059;&#x3068;&#x3001;&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x5B9F;&#x884C;&#x3059;&#x308B;&#x524D;&#x306B;&#x30A8;&#x30E9;&#x30FC;&#x306B;&#x306A;&#x308B;&#x3002;
    &#x601D;&#x60F3;&#x3092;&#x7121;&#x8996;&#x3059;&#x308B;&#x3068;&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30E0;&#x81EA;&#x4F53;&#x304C;&#x52D5;&#x304B;&#x306A;&#x3044;&#x3002;

  Rust&#x306E;ownership &#x2192; &#x30E1;&#x30E2;&#x30EA;&#x5B89;&#x5168;&#x3067;&#x306A;&#x3044;&#x30B3;&#x30FC;&#x30C9;&#x306F;&#x30B3;&#x30F3;&#x30D1;&#x30A4;&#x30EB;&#x30A8;&#x30E9;&#x30FC;&#x3002;&#x56DE;&#x907F;&#x4E0D;&#x80FD;&#x3002;
    &#x54F2;&#x5B66;&#x3092;&#x5B88;&#x3089;&#x306A;&#x3044;&#x9078;&#x629E;&#x80A2;&#x304C;&#x7269;&#x7406;&#x7684;&#x306B;&#x5B58;&#x5728;&#x3057;&#x306A;&#x3044;&#x3002;

[&#x6DF1;&#x3044;] &#x30D5;&#x30EC;&#x30FC;&#x30E0;&#x30EF;&#x30FC;&#x30AF;&#x69CB;&#x9020;&#x30EC;&#x30D9;&#x30EB;
  React&#x306E;useState &#x2192; &#x8A73;&#x7D30;&#x306F;&#x6B21;&#x7AE0;&#x3067;&#x89E3;&#x8AAC;&#x3059;&#x308B;&#x3002;

  Turbo Frames &#x2192; HTML&#x306E;&#x69CB;&#x9020;&#x3068;&#x3057;&#x3066;&#x66F4;&#x65B0;&#x5883;&#x754C;&#x3092;&#x660E;&#x793A;&#x3002;
    &#x30D5;&#x30EC;&#x30FC;&#x30E0;&#x306E;&#x5916;&#x3092;&#x66F4;&#x65B0;&#x3057;&#x3088;&#x3046;&#x3068;&#x3057;&#x3066;&#x3082;&#x3001;&#x30D5;&#x30EC;&#x30FC;&#x30E0;&#x30EF;&#x30FC;&#x30AF;&#x304C;&#x8A31;&#x3055;&#x306A;&#x3044;&#x3002;

[&#x4E2D;&#x9593;] &#x898F;&#x7D04;&#x30EC;&#x30D9;&#x30EB;
  Rails CoC&#xFF08;Convention over Configuration&#xFF09;&#x2192; &#x30C7;&#x30A3;&#x30EC;&#x30AF;&#x30C8;&#x30EA;&#x69CB;&#x9020;&#x306E;&#x898F;&#x7D04;&#x3002;
    &#x300C;&#x30B3;&#x30F3;&#x30C8;&#x30ED;&#x30FC;&#x30E9;&#x306F;app/controllers/&#x306B;&#x7F6E;&#x304F;&#x300D;&#x3068;&#x3044;&#x3046;&#x898F;&#x7D04;&#x3002;&#x9038;&#x8131;&#x306F;&#x53EF;&#x80FD;&#x3060;&#x304C;&#x3001;&#x6469;&#x64E6;&#x304C;&#x751F;&#x3058;&#x308B;&#x3002;

[&#x6D45;&#x3044;] &#x30C9;&#x30AD;&#x30E5;&#x30E1;&#x30F3;&#x30C8;&#x30EC;&#x30D9;&#x30EB;
  htmx&#x306E;RESTful&#x601D;&#x60F3; &#x2192; README&#x3084;&#x66F8;&#x7C4D;&#x306B;&#x66F8;&#x3044;&#x3066;&#x3042;&#x308B;&#x3002;
    &#x30B3;&#x30FC;&#x30C9;&#x306F;&#x4F55;&#x3082;&#x5236;&#x7D04;&#x3057;&#x306A;&#x3044;&#x3002;&#x8AAD;&#x307E;&#x306A;&#x3051;&#x308C;&#x3070;&#x4F1D;&#x308F;&#x3089;&#x306A;&#x3044;&#x3002;

[&#x6700;&#x3082;&#x6D45;&#x3044;] &#x30B9;&#x30ED;&#x30FC;&#x30AC;&#x30F3;&#x30EC;&#x30D9;&#x30EB;
  &#x300C;&#x30B7;&#x30F3;&#x30D7;&#x30EB;&#x306B;&#x3057;&#x3088;&#x3046;&#x300D;&#x2192; &#x4F55;&#x3082;&#x5236;&#x7D04;&#x3057;&#x306A;&#x3044;&#x3002;&#x8AB0;&#x3067;&#x3082;&#x8CDB;&#x6210;&#x3059;&#x308B;&#x304C;&#x3001;&#x4F55;&#x3082;&#x5909;&#x308F;&#x3089;&#x306A;&#x3044;&#x3002;
</code></pre>
<p>&#x3053;&#x306E;&#x6DF1;&#x5EA6;&#x306E;&#x6982;&#x5FF5;&#x3092;&#x540C;&#x3058;Hypermedia&#x99C6;&#x52D5;&#x306E;htmx&#x3068;Hotwire&#x306B;&#x9069;&#x7528;&#x3059;&#x308B;&#x3068;&#x3001;&#x6C7A;&#x5B9A;&#x7684;&#x306A;&#x9055;&#x3044;&#x304C;&#x660E;&#x78BA;&#x306B;&#x306A;&#x308B;&#x3002;Hotwire&#x306F;&#x601D;&#x60F3;&#x3092;&#x69CB;&#x9020;&#xFF08;Turbo Frames&#xFF09;&#x306B;&#x964D;&#x308D;&#x3057;&#x3066;&#x3044;&#x308B;&#x3002;htmx&#x306F;&#x601D;&#x60F3;&#x3092;&#x30C9;&#x30AD;&#x30E5;&#x30E1;&#x30F3;&#x30C8;&#xFF08;Hypermedia Systems&#x66F8;&#x7C4D;&#xFF09;&#x306B;&#x7559;&#x3081;&#x3066;&#x3044;&#x308B;&#x3002;</p>
<h3 id="%E3%80%8C%E5%85%8D%E7%BD%AA%E7%AC%A6%E3%81%A8%E3%81%97%E3%81%A6%E3%81%AE%E5%93%B2%E5%AD%A6%E3%80%8D">&#x300C;&#x514D;&#x7F6A;&#x7B26;&#x3068;&#x3057;&#x3066;&#x306E;&#x54F2;&#x5B66;&#x300D;</h3>
<p>&#x3053;&#x306E;&#x6DF1;&#x5EA6;&#x306E;&#x6982;&#x5FF5;&#x3092;&#x7406;&#x89E3;&#x3059;&#x308B;&#x3068;&#x3001;&#x3042;&#x308B;&#x5371;&#x967A;&#x6027;&#x304C;&#x898B;&#x3048;&#x3066;&#x304F;&#x308B;&#x3002;<strong>&#x54F2;&#x5B66;&#x304C;&#x7F8E;&#x3057;&#x3044;&#x307B;&#x3069;&#x3001;&#x305D;&#x308C;&#x3068;&#x4E56;&#x96E2;&#x3057;&#x305F;&#x5B9F;&#x88C5;&#x3068;&#x306E;&#x8DDD;&#x96E2;&#x304C;&#x76EE;&#x7ACB;&#x305F;&#x306A;&#x304F;&#x306A;&#x308B;</strong>&#x306E;&#x3060;&#x3002;</p>
<p>&#x7B2C;11&#x7AE0;&#x3067;&#x898B;&#x305F;htmx&#x3068;Hotwire&#x306E;&#x5BFE;&#x6BD4;&#x304C;&#x3053;&#x3053;&#x3067;&#x3082;&#x5F53;&#x3066;&#x306F;&#x307E;&#x308B;&#x3002;htmx&#x306E;RESTful&#x601D;&#x60F3;&#x3084;Hypermedia&#x54F2;&#x5B66;&#x306F;README&#x3084;&#x66F8;&#x7C4D;&#x306B;&#x306F;&#x7F8E;&#x3057;&#x304F;&#x66F8;&#x304B;&#x308C;&#x3066;&#x3044;&#x308B;&#x304C;&#x3001;&#x964D;&#x4E0B;&#x6DF1;&#x5EA6;&#x3068;&#x3057;&#x3066;&#x306F;&#x30C9;&#x30AD;&#x30E5;&#x30E1;&#x30F3;&#x30C8;&#x30EC;&#x30D9;&#x30EB;&#x306B;&#x7559;&#x307E;&#x308B;&#x3002;<code>hx-on</code>&#x5C5E;&#x6027;&#x3067;&#x30A4;&#x30F3;&#x30E9;&#x30A4;&#x30F3;JavaScript&#x3092;&#x66F8;&#x3044;&#x3066;&#x3082;&#x3001;Alpine.js&#x3092;&#x6DF7;&#x5728;&#x3055;&#x305B;&#x3066;&#x8907;&#x96D1;&#x306A;&#x72B6;&#x614B;&#x7BA1;&#x7406;&#x3092;&#x6301;&#x3061;&#x8FBC;&#x3093;&#x3067;&#x3082;&#x3001;&#x30D5;&#x30EC;&#x30FC;&#x30E0;&#x30EF;&#x30FC;&#x30AF;&#x306F;&#x4F55;&#x3082;&#x5236;&#x7D04;&#x3057;&#x306A;&#x3044;&#x3002;</p>
<pre><code>&#x300C;htmx&#x3092;&#x4F7F;&#x3063;&#x3066;&#x3044;&#x308B;&#x300D;&#x2192;&#x300C;Web&#x672C;&#x6765;&#x306E;&#x30A2;&#x30FC;&#x30AD;&#x30C6;&#x30AF;&#x30C1;&#x30E3;&#x306B;&#x5F93;&#x3063;&#x3066;&#x3044;&#x308B;&#x300D;&#xFF08;&#x601D;&#x60F3;&#x7684;&#x6B63;&#x5F53;&#x6027;&#x306E;&#x932F;&#x899A;&#xFF09;
&#x300C;Agile&#x958B;&#x767A;&#x3092;&#x3084;&#x3063;&#x3066;&#x3044;&#x308B;&#x300D;&#x2192;&#x300C;&#x6B63;&#x3057;&#x3044;&#x30D7;&#x30ED;&#x30BB;&#x30B9;&#x3067;&#x958B;&#x767A;&#x3057;&#x3066;&#x3044;&#x308B;&#x300D;&#xFF08;&#x601D;&#x60F3;&#x7684;&#x6B63;&#x5F53;&#x6027;&#x306E;&#x932F;&#x899A;&#xFF09;
&#x300C;&#x30DE;&#x30A4;&#x30AF;&#x30ED;&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x306B;&#x3057;&#x305F;&#x300D;&#x2192;&#x300C;&#x758E;&#x7D50;&#x5408;&#x306A;&#x8A2D;&#x8A08;&#x306B;&#x306A;&#x3063;&#x3066;&#x3044;&#x308B;&#x300D;&#xFF08;&#x601D;&#x60F3;&#x7684;&#x6B63;&#x5F53;&#x6027;&#x306E;&#x932F;&#x899A;&#xFF09;
</code></pre>
<p>&#x3044;&#x305A;&#x308C;&#x3082;&#x3001;&#x601D;&#x60F3;&#x3092;&#x63A1;&#x7528;&#x3057;&#x305F;&#x3053;&#x3068;&#x3068;&#x3001;&#x601D;&#x60F3;&#x306B;&#x6CBF;&#x3063;&#x305F;&#x5B9F;&#x88C5;&#x3092;&#x3057;&#x3066;&#x3044;&#x308B;&#x3053;&#x3068;&#x306F;&#x5225;&#x306E;&#x554F;&#x984C;&#x3060;&#x3002;</p>
<hr>
<h2 id="14-%E6%A7%8B%E9%80%A0%E7%9A%84%E7%9B%B2%E7%82%B9-%E2%80%94-%E6%A7%8B%E9%80%A0%E3%81%AF%E6%80%9D%E6%83%B3%E3%82%92%E4%BC%9D%E3%81%88%E3%82%8B%E3%81%8C%E3%80%81%E5%B1%8A%E3%81%8B%E3%81%AC%E9%A0%98%E5%9F%9F%E3%81%AB%E7%9B%B2%E7%82%B9%E3%82%92%E7%94%9F%E3%82%80">14. &#x69CB;&#x9020;&#x7684;&#x76F2;&#x70B9; &#x2014; &#x69CB;&#x9020;&#x306F;&#x601D;&#x60F3;&#x3092;&#x4F1D;&#x3048;&#x308B;&#x304C;&#x3001;&#x5C4A;&#x304B;&#x306C;&#x9818;&#x57DF;&#x306B;&#x76F2;&#x70B9;&#x3092;&#x751F;&#x3080;</h2>
<h3 id="%E6%A7%8B%E9%80%A0%E3%81%8C%E3%80%8C%E6%95%99%E3%81%88%E3%82%8B%E3%80%8D%E3%81%93%E3%81%A8">&#x69CB;&#x9020;&#x304C;&#x300C;&#x6559;&#x3048;&#x308B;&#x300D;&#x3053;&#x3068;</h3>
<p>&#x30D5;&#x30EC;&#x30FC;&#x30E0;&#x30EF;&#x30FC;&#x30AF;&#x306E;&#x69CB;&#x9020;&#x306F;&#x3001;&#x958B;&#x767A;&#x8005;&#x306B;&#x305D;&#x306E;&#x601D;&#x60F3;&#x3092;&#x81EA;&#x7136;&#x3068;&#x4F53;&#x5F97;&#x3055;&#x305B;&#x308B;&#x529B;&#x3092;&#x6301;&#x3063;&#x3066;&#x3044;&#x308B;&#x3002;React&#x306E;<code>useState</code>&#x306F;&#x305D;&#x306E;&#x597D;&#x4F8B;&#x3060;&#x3002;</p>
<pre><code class="language-jsx">// &#x3084;&#x3063;&#x3066;&#x307F;&#x3088;&#x3046;: &#x666E;&#x901A;&#x306E;&#x5909;&#x6570;&#x3067;&#x30AB;&#x30A6;&#x30F3;&#x30BF;&#x30FC;&#x3092;&#x4F5C;&#x308B;
let count = 0;
function Counter() {
  return &lt;button onClick={() =&gt; count++}&gt;{count}&lt;/button&gt;;
  // &#x30DC;&#x30BF;&#x30F3;&#x3092;&#x62BC;&#x3059;&#x3068;count&#x306F;&#x5897;&#x3048;&#x308B;...&#x304C;&#x3001;&#x753B;&#x9762;&#x306F;&#x300C;0&#x300D;&#x306E;&#x307E;&#x307E;&#x5909;&#x308F;&#x3089;&#x306A;&#x3044;&#xFF01;
  // &#x2192; &#x300C;&#x666E;&#x901A;&#x306E;&#x5909;&#x6570;&#x3092;&#x5909;&#x3048;&#x3066;&#x3082;React&#x306F;&#x6C17;&#x3065;&#x304B;&#x306A;&#x3044;&#x300D;&#x3068;&#x5B66;&#x3076;
}

// &#x6B63;&#x89E3;: useState&#x3092;&#x4F7F;&#x3046;
function Counter() {
  const [count, setCount] = useState(0);
  return &lt;button onClick={() =&gt; setCount((c) =&gt; c + 1)}&gt;{count}&lt;/button&gt;;
  // setCount&#x3092;&#x547C;&#x3076;&#x3068;&#x3001;React&#x304C;&#x300C;&#x72B6;&#x614B;&#x304C;&#x5909;&#x308F;&#x3063;&#x305F;&#x300D;&#x3068;&#x8A8D;&#x8B58;&#x3057;&#x3001;&#x753B;&#x9762;&#x3092;&#x66F4;&#x65B0;&#x3057;&#x3066;&#x304F;&#x308C;&#x308B;
}
</code></pre>
<p>&#x300C;UI&#x306F;&#x72B6;&#x614B;&#x306E;&#x95A2;&#x6570;&#x3067;&#x3042;&#x308B;&#x300D;&#x3068;&#x3044;&#x3046;&#x601D;&#x60F3;&#x306F;&#x3001;&#x30C9;&#x30AD;&#x30E5;&#x30E1;&#x30F3;&#x30C8;&#x3092;&#x8AAD;&#x307E;&#x306A;&#x304F;&#x3066;&#x3082;&#x3001;&#x6B63;&#x3057;&#x304F;&#x52D5;&#x304F;&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x66F8;&#x304F;&#x904E;&#x7A0B;&#x3067;&#x4F53;&#x5F97;&#x3055;&#x308C;&#x308B;&#x3002;<code>state</code>&#x3092;&#x76F4;&#x63A5;&#x66F8;&#x304D;&#x63DB;&#x3048;&#x3066;&#x3082;&#x753B;&#x9762;&#x306F;&#x66F4;&#x65B0;&#x3055;&#x308C;&#x306A;&#x3044;&#x3002;<code>setState</code>&#x3092;&#x547C;&#x3076;&#x3053;&#x3068;&#x3067;&#x518D;&#x30EC;&#x30F3;&#x30C0;&#x30FC;&#x304C;&#x8D70;&#x308B;&#x3002;&#x3053;&#x306E;&#x300C;&#x52D5;&#x304F;/&#x52D5;&#x304B;&#x306A;&#x3044;&#x300D;&#x306E;&#x6469;&#x64E6;&#x3068;&#x5FDC;&#x7B54;&#x306E;&#x7E70;&#x308A;&#x8FD4;&#x3057;&#x304C;&#x3001;&#x5BA3;&#x8A00;&#x7684;UI&#x3068;&#x3044;&#x3046;&#x601D;&#x60F3;&#x3092;&#x958B;&#x767A;&#x8005;&#x306B;&#x523B;&#x307F;&#x8FBC;&#x3080;&#x3002;</p>
<h3 id="%E6%A7%8B%E9%80%A0%E3%81%8C%E3%80%8C%E6%95%99%E3%81%88%E3%81%AA%E3%81%84%E3%80%8D%E3%81%93%E3%81%A8-%E2%80%94-useeffect%E3%81%AE%E6%82%B2%E5%8A%87">&#x69CB;&#x9020;&#x304C;&#x300C;&#x6559;&#x3048;&#x306A;&#x3044;&#x300D;&#x3053;&#x3068; &#x2014; useEffect&#x306E;&#x60B2;&#x5287;</h3>
<p>&#x4E00;&#x65B9;&#x3001;<code>useEffect</code> &#x306F;&#x69CB;&#x9020;&#x304C;&#x601D;&#x60F3;&#x3092;&#x4F1D;&#x3048;&#x308B;&#x3053;&#x3068;&#x306B;&#x5931;&#x6557;&#x3057;&#x305F;&#x4EE3;&#x8868;&#x4F8B;&#x3060;&#x3002;</p>
<p><code>useEffect</code> &#x306F;React&#x306E;&#x4E2D;&#x3067;&#x300C;&#x526F;&#x4F5C;&#x7528;&#xFF08;UI&#x306E;&#x63CF;&#x753B;&#x4EE5;&#x5916;&#x306E;&#x51E6;&#x7406;&#xFF09;&#x300D;&#x3092;&#x6271;&#x3046;&#x305F;&#x3081;&#x306E;&#x4ED5;&#x7D44;&#x307F;&#x3060;&#x3002;&#x672C;&#x6765;&#x306F;&#x300C;&#x5916;&#x90E8;&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x3068;&#x306E;&#x540C;&#x671F;&#x300D;&#x2014;&#x2014;&#x305F;&#x3068;&#x3048;&#x3070;WebSocket&#x306E;&#x63A5;&#x7D9A;&#x3084;&#x30BF;&#x30A4;&#x30DE;&#x30FC;&#x306E;&#x8A2D;&#x5B9A;&#x2014;&#x2014;&#x306B;&#x4F7F;&#x3046;&#x3082;&#x306E;&#x3060;&#x3063;&#x305F;&#x3002;</p>
<pre><code class="language-jsx">// &#x2705; useEffect&#x306E;&#x300C;&#x6B63;&#x3057;&#x3044;&#x300D;&#x4F7F;&#x3044;&#x65B9;&#xFF08;&#x5916;&#x90E8;&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x3068;&#x306E;&#x540C;&#x671F;&#xFF09;
// &#x300C;url&#x304C;&#x5909;&#x308F;&#x3063;&#x305F;&#x3089;&#x3001;WebSocket&#x63A5;&#x7D9A;&#x3092;&#x5F35;&#x308A;&#x76F4;&#x3059;&#x300D;
useEffect(() =&gt; {
  const ws = new WebSocket(url); // &#x63A5;&#x7D9A;&#x3092;&#x958B;&#x304F;
  ws.onmessage = handler;
  return () =&gt; ws.close(); // &#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#x304C;&#x6D88;&#x3048;&#x308B;&#x6642;&#x306B;&#x63A5;&#x7D9A;&#x3092;&#x9589;&#x3058;&#x308B;
}, [url]); // url&#x304C;&#x5909;&#x308F;&#x3063;&#x305F;&#x6642;&#x3060;&#x3051;&#x5B9F;&#x884C;

// &#x274C; useEffect&#x306E;&#x300C;&#x8AA4;&#x7528;&#x300D;&#x305D;&#x306E;1&#xFF08;&#x6D3E;&#x751F;&#x72B6;&#x614B;&#x306E;&#x8A08;&#x7B97;&#xFF09;
// &#x300C;firstName&#x304B;lastName&#x304C;&#x5909;&#x308F;&#x3063;&#x305F;&#x3089;&#x3001;fullName&#x3092;&#x66F4;&#x65B0;&#x3059;&#x308B;&#x300D;
useEffect(() =&gt; {
  setFullName(firstName + &quot; &quot; + lastName);
}, [firstName, lastName]);
// &#x2192; &#x3053;&#x308C;&#x306F;useEffect&#x3092;&#x4F7F;&#x308F;&#x306A;&#x304F;&#x3066;&#x3082;&#x3001;&#x5358;&#x306B;const fullName = firstName + &apos; &apos; + lastName &#x3067;&#x6E08;&#x3080;
// &#x2192; &#x308F;&#x3056;&#x308F;&#x3056;useEffect&#x3067;&#x72B6;&#x614B;&#x66F4;&#x65B0;&#x3059;&#x308B;&#x3068;&#x3001;&#x4E0D;&#x8981;&#x306A;&#x518D;&#x30EC;&#x30F3;&#x30C0;&#x30FC;&#x304C;&#x767A;&#x751F;&#x3059;&#x308B;

// &#x274C; useEffect&#x306E;&#x300C;&#x8AA4;&#x7528;&#x300D;&#x305D;&#x306E;2&#xFF08;&#x30A4;&#x30D9;&#x30F3;&#x30C8;&#x30CF;&#x30F3;&#x30C9;&#x30E9;&#x306E;&#x4EE3;&#x66FF;&#xFF09;
// &#x300C;submitted&#x304C;true&#x306B;&#x306A;&#x3063;&#x305F;&#x3089;&#x3001;&#x5206;&#x6790;&#x30C7;&#x30FC;&#x30BF;&#x3092;&#x9001;&#x308B;&#x300D;
useEffect(() =&gt; {
  if (submitted) {
    sendAnalytics();
  }
}, [submitted]);
// &#x2192; &#x3053;&#x308C;&#x306F;&#x30D5;&#x30A9;&#x30FC;&#x30E0;&#x9001;&#x4FE1;&#x306E;&#x30A4;&#x30D9;&#x30F3;&#x30C8;&#x30CF;&#x30F3;&#x30C9;&#x30E9;&#x306E;&#x4E2D;&#x3067;&#x76F4;&#x63A5;sendAnalytics()&#x3092;&#x547C;&#x3079;&#x3070;&#x3044;&#x3044;
</code></pre>
<p><code>useEffect</code>&#x306F;&#x300C;&#x4F55;&#x3067;&#x3082;&#x3067;&#x304D;&#x308B;&#x6C4E;&#x7528;&#x7684;&#x306A;API&#x300D;&#x3068;&#x3057;&#x3066;&#x8A2D;&#x8A08;&#x3055;&#x308C;&#x305F;&#x304C;&#x3001;<strong>&#x3069;&#x3046;&#x4F7F;&#x3046;&#x3079;&#x304D;&#x304B;</strong>&#x306F;&#x69CB;&#x9020;&#x304B;&#x3089;&#x306F;&#x4F1D;&#x308F;&#x3089;&#x306A;&#x304B;&#x3063;&#x305F;&#x3002;<code>useState</code>&#x306E;&#x5834;&#x5408;&#x306F;&#x300C;&#x4F7F;&#x308F;&#x306A;&#x3044;&#x3068;&#x753B;&#x9762;&#x304C;&#x66F4;&#x65B0;&#x3055;&#x308C;&#x306A;&#x3044;&#x300D;&#x3068;&#x3044;&#x3046;&#x660E;&#x78BA;&#x306A;&#x6469;&#x64E6;&#x304C;&#x3042;&#x3063;&#x305F;&#x304C;&#x3001;<code>useEffect</code>&#x306F;&#x8AA4;&#x7528;&#x3057;&#x3066;&#x3082;&#x300C;&#x4E00;&#x5FDC;&#x52D5;&#x304F;&#x300D;&#x306E;&#x3060;&#x3002;&#x305F;&#x3060;&#x3057;&#x4E0D;&#x8981;&#x306A;&#x518D;&#x30EC;&#x30F3;&#x30C0;&#x30FC;&#x304C;&#x767A;&#x751F;&#x3057;&#x305F;&#x308A;&#x3001;&#x7121;&#x9650;&#x30EB;&#x30FC;&#x30D7;&#x306B;&#x9665;&#x3063;&#x305F;&#x308A;&#x3068;&#x3001;&#x554F;&#x984C;&#x306F;&#x5F8C;&#x304B;&#x3089;&#x5FCD;&#x3073;&#x5BC4;&#x3063;&#x3066;&#x304F;&#x308B;&#x3002;</p>
<p>&#x300C;&#x3053;&#x308C;&#x306F;&#x30A8;&#x30B9;&#x30B1;&#x30FC;&#x30D7;&#x30CF;&#x30C3;&#x30C1;&#xFF08;&#x7DCA;&#x6025;&#x8131;&#x51FA;&#x53E3;&#xFF09;&#x3060;&#x300D;&#x300C;&#x5916;&#x90E8;&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x3068;&#x306E;&#x540C;&#x671F;&#x306B;&#x3060;&#x3051;&#x4F7F;&#x3048;&#x300D;&#x3068;&#x3044;&#x3046;&#x601D;&#x60F3;&#x306F;React&#x30C1;&#x30FC;&#x30E0;&#x306E;&#x982D;&#x306E;&#x4E2D;&#x306B;&#x306F;&#x3042;&#x3063;&#x305F;&#x304C;&#x3001;API&#x306E;&#x8A2D;&#x8A08;&#x3068;&#x3057;&#x3066;&#x306F;&#x8868;&#x73FE;&#x3055;&#x308C;&#x3066;&#x3044;&#x306A;&#x304B;&#x3063;&#x305F;&#x3002;React&#x516C;&#x5F0F;&#x30C9;&#x30AD;&#x30E5;&#x30E1;&#x30F3;&#x30C8;&#x304C;&#x300C;You Might Not Need an Effect&#xFF08;useEffect&#x306F;&#x4E0D;&#x8981;&#x304B;&#x3082;&#x3057;&#x308C;&#x306A;&#x3044;&#xFF09;&#x300D;&#x3068;&#x3044;&#x3046;&#x8A18;&#x4E8B;&#x3092;&#x516C;&#x958B;&#x3057;&#x305F;&#x306E;&#x306F;&#x3001;&#x3053;&#x306E;&#x554F;&#x984C;&#x304C;&#x5E83;&#x304F;&#x8A8D;&#x8B58;&#x3055;&#x308C;&#x305F;&#x5F8C;&#x306E;&#x3053;&#x3068;&#x3060;&#x3063;&#x305F;&#x3002;</p>
<h3 id="%E6%A7%8B%E9%80%A0%E7%9A%84%E7%9B%B2%E7%82%B9%E3%81%AF%E3%81%A9%E3%81%93%E3%81%AB%E3%81%A7%E3%82%82%E3%81%82%E3%82%8B">&#x69CB;&#x9020;&#x7684;&#x76F2;&#x70B9;&#x306F;&#x3069;&#x3053;&#x306B;&#x3067;&#x3082;&#x3042;&#x308B;</h3>
<p>&#x3053;&#x306E;&#x554F;&#x984C;&#x306F;React&#x306B;&#x9650;&#x3089;&#x306A;&#x3044;&#x3002;<strong>&#x69CB;&#x9020;&#x304C;&#x5C4A;&#x3044;&#x3066;&#x3044;&#x308B;&#x9818;&#x57DF;&#x306E;&#x5B58;&#x5728;&#x304C;&#x3001;&#x5C4A;&#x3044;&#x3066;&#x3044;&#x306A;&#x3044;&#x9818;&#x57DF;&#x3078;&#x306E;&#x6CE8;&#x610F;&#x3092;&#x920D;&#x3089;&#x305B;&#x308B;</strong>&#x3002;React&#x306E;&#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#x30E2;&#x30C7;&#x30EB;&#x306F;&#x898B;&#x4E8B;&#x306B;&#x6A5F;&#x80FD;&#x3057;&#x3066;&#x3044;&#x305F;&#x304C;&#x3086;&#x3048;&#x306B;&#x3001;&#x958B;&#x767A;&#x8005;&#x306F;&#x300C;React&#x3092;&#x7406;&#x89E3;&#x3057;&#x3066;&#x4F7F;&#x3063;&#x3066;&#x3044;&#x308B;&#x300D;&#x3068;&#x3044;&#x3046;&#x611F;&#x899A;&#x3092;&#x6301;&#x3061;&#x7D9A;&#x3051;&#x305F;&#x3002;&#x305D;&#x306E;&#x611F;&#x899A;&#x306E;&#x4E2D;&#x3067;&#x3001;useEffect&#x306E;&#x8AA4;&#x7528;&#x306F;&#x9759;&#x304B;&#x306B;&#x84C4;&#x7A4D;&#x3057;&#x305F;&#x3002;</p>
<p>&#x540C;&#x3058;&#x300C;&#x69CB;&#x9020;&#x7684;&#x76F2;&#x70B9;&#x300D;&#x306F;&#x4ED6;&#x306E;&#x6280;&#x8853;&#x306B;&#x3082;&#x73FE;&#x308C;&#x308B;&#x3002;</p>
<ul>
<li><strong>TypeScript</strong>: &#x578B;&#x30C1;&#x30A7;&#x30C3;&#x30AF;&#x306F;&#x901A;&#x3063;&#x3066;&#x3044;&#x308B;&#x304C;&#x3001;&#x578B;&#x8A2D;&#x8A08;&#x304C;&#x30C9;&#x30E1;&#x30A4;&#x30F3;&#xFF08;&#x696D;&#x52D9;&#x9818;&#x57DF;&#xFF09;&#x306E;&#x5B9F;&#x614B;&#x3092;&#x8868;&#x73FE;&#x3057;&#x3066;&#x3044;&#x308B;&#x304B;&#x306F;&#x5225;&#x554F;&#x984C;&#x3002;&#x300C;&#x578B;&#x30A8;&#x30E9;&#x30FC;&#x304C;&#x51FA;&#x306A;&#x3044;&#x304B;&#x3089;&#x5B89;&#x5168;&#x300D;&#x3068;&#x306F;&#x9650;&#x3089;&#x306A;&#x3044;</li>
<li><strong>GraphQL</strong>: &#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x304B;&#x3089;&#x30AF;&#x30A8;&#x30EA;&#x3092;&#x81EA;&#x7531;&#x306B;&#x66F8;&#x3051;&#x308B;&#x67D4;&#x8EDF;&#x6027;&#x306F;&#x3042;&#x308B;&#x304C;&#x3001;&#x300C;&#x3069;&#x306E;&#x30C7;&#x30FC;&#x30BF;&#x3092;&#x3069;&#x306E;&#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#x304C;&#x8CAC;&#x4EFB;&#x3092;&#x6301;&#x3064;&#x304B;&#x300D;&#x306F;&#x69CB;&#x9020;&#x304B;&#x3089;&#x306F;&#x898B;&#x3048;&#x306A;&#x3044;</li>
<li><strong>&#x30DE;&#x30A4;&#x30AF;&#x30ED;&#x30B5;&#x30FC;&#x30D3;&#x30B9;</strong>: &#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x306B;&#x5206;&#x304B;&#x308C;&#x3066;&#x3044;&#x308B;&#x304C;&#x3001;&#x5206;&#x3051;&#x65B9;&#x304C;&#x6B63;&#x3057;&#x3044;&#x304B;&#x306F;&#x69CB;&#x9020;&#x304B;&#x3089;&#x306F;&#x898B;&#x3048;&#x306A;&#x3044;&#x3002;&#x5206;&#x304B;&#x308C;&#x3066;&#x3044;&#x308B;&#x3053;&#x3068;&#x81EA;&#x4F53;&#x304C;&#x300C;&#x758E;&#x7D50;&#x5408;&#x306B;&#x3067;&#x304D;&#x3066;&#x3044;&#x308B;&#x300D;&#x3068;&#x3044;&#x3046;&#x932F;&#x899A;&#x3092;&#x751F;&#x3080;</li>
<li><strong>&#x30C6;&#x30B9;&#x30C8;</strong>: &#x30C6;&#x30B9;&#x30C8;&#x304C;&#x5B58;&#x5728;&#x3057;&#x3001;CI&#x3067;&#x7DD1;&#x8272;&#x306E;&#x30C1;&#x30A7;&#x30C3;&#x30AF;&#x304C;&#x4ED8;&#x3044;&#x3066;&#x3044;&#x308B;&#x304C;&#x3001;&#x4F55;&#x3092;&#x4FDD;&#x8A3C;&#x3057;&#x3066;&#x3044;&#x308B;&#x304B;&#xFF08;&#x30AB;&#x30D0;&#x30EC;&#x30C3;&#x30B8;&#x306E;&#x610F;&#x5473;&#xFF09;&#x306F;&#x69CB;&#x9020;&#x304B;&#x3089;&#x306F;&#x898B;&#x3048;&#x306A;&#x3044;</li>
</ul>
<p>&#x3044;&#x305A;&#x308C;&#x3082;&#x300C;&#x69CB;&#x9020;&#x304C;&#x3042;&#x308B;&#x300D;&#x3068;&#x3044;&#x3046;&#x4E8B;&#x5B9F;&#x304C;&#x3001;&#x300C;&#x69CB;&#x9020;&#x304C;&#x5C4A;&#x3044;&#x3066;&#x3044;&#x306A;&#x3044;&#x9818;&#x57DF;&#x300D;&#x3078;&#x306E;&#x6CE8;&#x610F;&#x3092;&#x920D;&#x3089;&#x305B;&#x3066;&#x3044;&#x308B;&#x3002;</p>
<hr>
<h2 id="15-%E6%8A%80%E8%A1%93%E9%81%B8%E5%AE%9A%E3%81%A7%E5%95%8F%E3%81%86%E3%81%B9%E3%81%8D%E3%81%93%E3%81%A8">15. &#x6280;&#x8853;&#x9078;&#x5B9A;&#x3067;&#x554F;&#x3046;&#x3079;&#x304D;&#x3053;&#x3068;</h2>
<h3 id="%E5%95%8F%E3%81%86%E3%81%B9%E3%81%8D3%E3%81%A4%E3%81%AE%E5%95%8F%E3%81%84">&#x554F;&#x3046;&#x3079;&#x304D;3&#x3064;&#x306E;&#x554F;&#x3044;</h3>
<p>&#x3053;&#x3053;&#x307E;&#x3067;&#x306E;&#x8B70;&#x8AD6;&#x5168;&#x4F53;&#x3092;&#x901A;&#x3058;&#x3066;&#x6D6E;&#x304B;&#x3073;&#x4E0A;&#x304C;&#x308B;&#x306E;&#x306F;&#x3001;&#x6280;&#x8853;&#x9078;&#x5B9A;&#x3067;&#x554F;&#x3046;&#x3079;&#x304D;3&#x3064;&#x306E;&#x554F;&#x3044;&#x3060;&#x3002;</p>
<p><strong>&#x554F;&#x3044;1: &#x305D;&#x306E;&#x54F2;&#x5B66;&#x306F;&#x3001;&#x3069;&#x306E;&#x30EC;&#x30A4;&#x30E4;&#x30FC;&#x3067;&#x5B9F;&#x88C5;&#x306B;&#x964D;&#x308A;&#x3066;&#x3044;&#x308B;&#x304B;</strong></p>
<p>&#x524D;&#x7AE0;&#x306E;&#x300C;&#x964D;&#x4E0B;&#x6DF1;&#x5EA6;&#x300D;&#x306E;&#x6982;&#x5FF5;&#x3092;&#x9069;&#x7528;&#x3059;&#x308B;&#x3002;&#x601D;&#x60F3;&#x304C;&#x30C9;&#x30AD;&#x30E5;&#x30E1;&#x30F3;&#x30C8;&#x3084;&#x30B9;&#x30ED;&#x30FC;&#x30AC;&#x30F3;&#x306B;&#x7559;&#x307E;&#x3063;&#x3066;&#x3044;&#x308B;&#x306A;&#x3089;&#x3001;&#x305D;&#x306E;&#x601D;&#x60F3;&#x3092;&#x7DAD;&#x6301;&#x3059;&#x308B;&#x8CAC;&#x4EFB;&#x306F;&#x30C1;&#x30FC;&#x30E0;&#x306B;&#x964D;&#x308A;&#x304B;&#x304B;&#x308B;&#x3002;&#x69CB;&#x9020;&#x7684;&#x5236;&#x7D04;&#x3068;&#x3057;&#x3066;&#x5B9F;&#x88C5;&#x306B;&#x964D;&#x308A;&#x3066;&#x3044;&#x308B;&#x306A;&#x3089;&#x3001;&#x30D5;&#x30EC;&#x30FC;&#x30E0;&#x30EF;&#x30FC;&#x30AF;&#x304C;&#x81EA;&#x7136;&#x306B;&#x30AC;&#x30A4;&#x30C9;&#x3057;&#x3066;&#x304F;&#x308C;&#x308B;&#x3002;</p>
<p>&#x30D5;&#x30EC;&#x30FC;&#x30E0;&#x30EF;&#x30FC;&#x30AF;&#x306E;&#x54F2;&#x5B66;&#x306B;&#x5171;&#x9CF4;&#x3057;&#x305F;&#x306A;&#x3089;&#x3001;&#x6B21;&#x306B;&#x554F;&#x3046;&#x3079;&#x304D;&#x306F;&#x300C;&#x305D;&#x306E;&#x54F2;&#x5B66;&#x306F;&#x3001;&#x79C1;&#x305F;&#x3061;&#x306E;&#x30B3;&#x30FC;&#x30C9;&#x306B;&#x3069;&#x3046;&#x3084;&#x3063;&#x3066;&#x964D;&#x308A;&#x3066;&#x304F;&#x308B;&#x306E;&#x304B;&#x300D;&#x3060;&#x3002;&#x7B54;&#x3048;&#x304C;&#x300C;&#x81EA;&#x5206;&#x305F;&#x3061;&#x3067;&#x898F;&#x5F8B;&#x3092;&#x6301;&#x3064;&#x300D;&#x3067;&#x3042;&#x308B;&#x306A;&#x3089;&#x3001;&#x305D;&#x308C;&#x306F;&#x8A2D;&#x8A08;&#x306E;&#x554F;&#x984C;&#x3068;&#x3057;&#x3066;&#x5F15;&#x304D;&#x53D7;&#x3051;&#x308B;&#x5FC5;&#x8981;&#x304C;&#x3042;&#x308B;&#x3002;</p>
<p><strong>&#x554F;&#x3044;2: &#x305D;&#x306E;&#x6280;&#x8853;&#x306F;&#x4F55;&#x3092;&#x89E3;&#x6C7A;&#x3059;&#x308B;&#x305F;&#x3081;&#x306B;&#x5B58;&#x5728;&#x3057;&#x3066;&#x3044;&#x308B;&#x304B;</strong></p>
<p>&#x7B2C;7&#x7AE0;&#x3067;&#x89E6;&#x308C;&#x305F;&#x901A;&#x308A;&#x3001;&#x6280;&#x8853;&#x304C;&#x89E3;&#x6C7A;&#x3057;&#x3066;&#x304D;&#x305F;&#x8AB2;&#x984C;&#x306F;&#x5FD8;&#x308C;&#x3089;&#x308C;&#x3084;&#x3059;&#x3044;&#x3002;&#x6280;&#x8853;&#x304C;&#x751F;&#x307E;&#x308C;&#x305F;&#x6B74;&#x53F2;&#x7684;&#x6587;&#x8108;&#x3092;&#x7406;&#x89E3;&#x3059;&#x308B;&#x3053;&#x3068;&#x304C;&#x91CD;&#x8981;&#x3060;&#x3002;&#x306A;&#x305C;jQuery&#x3067;&#x306F;&#x3060;&#x3081;&#x3060;&#x3063;&#x305F;&#x306E;&#x304B;&#x3001;&#x306A;&#x305C;React&#x304C;&#x751F;&#x307E;&#x308C;&#x305F;&#x306E;&#x304B;&#x3001;&#x306A;&#x305C;htmx&#x304C;&#x767B;&#x5834;&#x3057;&#x305F;&#x306E;&#x304B;&#x2014;&#x2014;&#x305D;&#x308C;&#x305E;&#x308C;&#x306E;&#x6280;&#x8853;&#x304C;&#x300C;&#x4F55;&#x306B;&#x5BFE;&#x3059;&#x308B;&#x89E3;&#x300D;&#x306A;&#x306E;&#x304B;&#x3092;&#x7406;&#x89E3;&#x3057;&#x306A;&#x3051;&#x308C;&#x3070;&#x3001;&#x9069;&#x5207;&#x306A;&#x9078;&#x5B9A;&#x306F;&#x3067;&#x304D;&#x306A;&#x3044;&#x3002;</p>
<p><strong>&#x554F;&#x3044;3: &#x958B;&#x767A;&#x8005;&#x4F53;&#x9A13;&#x3068;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x4F53;&#x9A13;&#x306E;&#x4E21;&#x65B9;&#x3092;&#x9577;&#x671F;&#x7684;&#x306B;&#x5411;&#x4E0A;&#x3055;&#x305B;&#x308B;&#x304B;</strong></p>
<p>3&#x3064;&#x306E;&#x554F;&#x3044;&#x306E;&#x4E2D;&#x3067;&#x6700;&#x3082;&#x672C;&#x8CEA;&#x7684;&#x306A;&#x3082;&#x306E;&#x3060;&#x3002;&#x54F2;&#x5B66;&#x306E;&#x7F8E;&#x3057;&#x3055;&#x3067;&#x3082;&#x3001;&#x6280;&#x8853;&#x7684;&#x306A;&#x30A8;&#x30EC;&#x30AC;&#x30F3;&#x30B9;&#x3067;&#x3082;&#x306A;&#x304F;&#x3001;<strong>&#x5B9F;&#x969B;&#x306B;&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x66F8;&#x304F;&#x958B;&#x767A;&#x8005;&#x3068;&#x3001;&#x305D;&#x308C;&#x3092;&#x4F7F;&#x3046;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x306E;&#x4F53;&#x9A13;</strong>&#x3092;&#x9577;&#x671F;&#x7684;&#x306B;&#x5411;&#x4E0A;&#x3055;&#x305B;&#x308B;&#x304B;&#x3069;&#x3046;&#x304B;&#x3002;&#x3053;&#x3053;&#x306B;&#x306F;&#x300C;&#x5341;&#x5206;&#x306A;&#x9023;&#x7D9A;&#x6027;&#x300D;&#x2014;&#x2014;&#x3064;&#x307E;&#x308A;&#x4ECA;&#x65E5;&#x306E;&#x5B66;&#x3073;&#x304C;&#x660E;&#x65E5;&#x3082;&#x6D3B;&#x304D;&#x308B;&#x304B;&#x3001;&#x6280;&#x8853;&#x306E;&#x6210;&#x9577;&#x3068;&#x3068;&#x3082;&#x306B;&#x958B;&#x767A;&#x8005;&#x3082;&#x6210;&#x9577;&#x3067;&#x304D;&#x308B;&#x304B;&#x2014;&#x2014;&#x3068;&#x3044;&#x3046;&#x6642;&#x9593;&#x8EF8;&#x306E;&#x554F;&#x3044;&#x3082;&#x542B;&#x307E;&#x308C;&#x3066;&#x3044;&#x308B;&#x3002;</p>
<hr>
<h1 id="%E3%81%BE%E3%81%A8%E3%82%81">&#x307E;&#x3068;&#x3081;</h1>
<p>&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x6280;&#x8853;&#x306E;&#x6B74;&#x53F2;&#x306F;&#x3001;&#x4EE5;&#x4E0B;&#x306E;&#x5FC5;&#x7136;&#x6027;&#x306E;&#x9023;&#x9396;&#x3068;&#x3057;&#x3066;&#x7406;&#x89E3;&#x3067;&#x304D;&#x308B;&#x3002;</p>
<pre><code>&#x30D0;&#x30CB;&#x30E9;JS: DOM&#x3092;&#x64CD;&#x4F5C;&#x3059;&#x308B;&#x624B;&#x6BB5;&#x304C;&#x30D7;&#x30EA;&#x30DF;&#x30C6;&#x30A3;&#x30D6;&#x3059;&#x304E;&#x305F;
  &#x2193; DOM&#x64CD;&#x4F5C;&#x3092;&#x4FBF;&#x5229;&#x306B;&#x3057;&#x305F;&#x3044;
jQuery: DOM&#x64CD;&#x4F5C;&#x306F;&#x4FBF;&#x5229;&#x306B;&#x306A;&#x3063;&#x305F;&#x304C;&#x3001;&#x72B6;&#x614B;&#x7BA1;&#x7406;&#x306E;&#x69CB;&#x9020;&#x304C;&#x306A;&#x304B;&#x3063;&#x305F;
  &#x2193; &#x30C7;&#x30FC;&#x30BF;&#x3068;UI&#x3092;&#x81EA;&#x52D5;&#x3067;&#x540C;&#x671F;&#x3057;&#x305F;&#x3044;
React: &#x5BA3;&#x8A00;&#x7684;UI(UI=f(state))&#x3067;&#x72B6;&#x614B;&#x3068;UI&#x306E;&#x540C;&#x671F;&#x3092;&#x89E3;&#x6C7A;&#x3057;&#x305F;
  &#x2193; UI&#x306E;&#x305F;&#x3081;&#x306B;&#x5C02;&#x7528;&#x306E;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x30A2;&#x30D7;&#x30EA;&#x304C;&#x5FC5;&#x8981;&#x306B;&#x306A;&#x3063;&#x305F;
SPA + API&#x5206;&#x96E2;: UI&#x306E;&#x8907;&#x96D1;&#x3055;&#x306B;&#x5BFE;&#x51E6;&#x3067;&#x304D;&#x305F;&#x304C;&#x3001;FE/BE&#x5206;&#x96E2;&#x304C;&#x65B0;&#x305F;&#x306A;&#x8907;&#x96D1;&#x3055;&#x3092;&#x751F;&#x3093;&#x3060;
  &#x2193; &#x5206;&#x96E2;&#x306E;&#x5F0A;&#x5BB3;&#x3092;&#x89E3;&#x6D88;&#x3057;&#x305F;&#x3044;
htmx/Hotwire: &#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x306B;UI&#x306E;&#x8CAC;&#x4EFB;&#x3092;&#x623B;&#x3059;&#x300C;&#x5FA9;&#x53E4;&#x904B;&#x52D5;&#x300D;
RSC: React&#x81EA;&#x8EAB;&#x304C;FE/BE&#x518D;&#x7D71;&#x5408;&#x306B;&#x5411;&#x304B;&#x3046;
Signals: React&#x3068;&#x306F;&#x7570;&#x306A;&#x308B;&#x30EA;&#x30A2;&#x30AF;&#x30C6;&#x30A3;&#x30D3;&#x30C6;&#x30A3;&#x30E2;&#x30C7;&#x30EB;&#x306E;&#x63D0;&#x6848;
</code></pre>
<p>&#x5404;&#x6280;&#x8853;&#x306F;&#x524D;&#x306E;&#x6642;&#x4EE3;&#x306E;&#x554F;&#x984C;&#x306B;&#x5BFE;&#x3059;&#x308B;&#x89E3;&#x3067;&#x3042;&#x308A;&#x3001;&#x540C;&#x6642;&#x306B;&#x65B0;&#x305F;&#x306A;&#x554F;&#x984C;&#x3092;&#x5185;&#x5305;&#x3057;&#x3066;&#x3044;&#x308B;&#x3002;&#x300C;&#x6700;&#x5584;&#x306E;&#x6280;&#x8853;&#x300D;&#x306F;&#x5B58;&#x5728;&#x305B;&#x305A;&#x3001;&#x554F;&#x984C;&#x306E;&#x6027;&#x8CEA;&#x3068;&#x30C8;&#x30EC;&#x30FC;&#x30C9;&#x30AA;&#x30D5;&#x306E;&#x7D44;&#x307F;&#x5408;&#x308F;&#x305B;&#x3068;&#x3057;&#x3066;&#x9078;&#x5B9A;&#x3059;&#x308B;&#x3057;&#x304B;&#x306A;&#x3044;&#x3002;&#x305D;&#x306E;&#x9078;&#x5B9A;&#x306B;&#x304A;&#x3044;&#x3066;&#x3001;&#x54F2;&#x5B66;&#x306E;&#x7F8E;&#x3057;&#x3055;&#x306B;&#x60D1;&#x308F;&#x3055;&#x308C;&#x305A;&#x3001;&#x69CB;&#x9020;&#x7684;&#x5236;&#x7D04;&#x306E;&#x5B9F;&#x52B9;&#x6027;&#x3068;&#x3001;&#x6B74;&#x53F2;&#x304C;&#x6559;&#x3048;&#x308B;&#x6559;&#x8A13;&#x3092;&#x8E0F;&#x307E;&#x3048;&#x308B;&#x3053;&#x3068;&#x304C;&#x91CD;&#x8981;&#x3060;&#x3002;</p>
<p>&#x65B0;&#x3057;&#x304F;&#x696D;&#x754C;&#x306B;&#x5165;&#x308B;&#x4EBA;&#x306B;&#x3068;&#x3063;&#x3066;&#x3001;&#x9078;&#x629E;&#x80A2;&#x304C;React&#x4E00;&#x3064;&#x3057;&#x304B;&#x306A;&#x3044;&#x3088;&#x3046;&#x306B;&#x898B;&#x3048;&#x308B;&#x306E;&#x306F;&#x4E0D;&#x5E78;&#x306A;&#x3053;&#x3068;&#x3060;&#x3002;&#x3057;&#x304B;&#x3057;&#x540C;&#x6642;&#x306B;&#x3001;React&#x304C;&#x89E3;&#x6C7A;&#x3057;&#x3066;&#x304D;&#x305F;&#x554F;&#x984C;&#x3092;&#x7406;&#x89E3;&#x305B;&#x305A;&#x306B;&#x3001;&#x300C;React&#x306F;&#x4E0D;&#x8981;&#x300D;&#x306A;&#x3069;&#x3068;&#x7121;&#x8336;&#x306B;&#x5927;&#x304D;&#x3044;&#x8AD6;&#x70B9;&#x3092;&#x6301;&#x3061;&#x51FA;&#x3057;&#x3001;React&#x3092;&#x5426;&#x5B9A;&#x3059;&#x308B;&#x306E;&#x3082;&#x307E;&#x305F;&#x4E0D;&#x5E78;&#x306A;&#x3053;&#x3068;&#x3060;&#x3002;</p>
<hr>
<h1 id="%E5%8F%82%E8%80%83%E6%96%87%E7%8C%AE">&#x53C2;&#x8003;&#x6587;&#x732E;</h1>
<h3 id="javascript%E3%83%BBweb%E3%81%AE%E6%AD%B4%E5%8F%B2">JavaScript&#x30FB;Web&#x306E;&#x6B74;&#x53F2;</h3>
<ul>
<li><a href="https://www.computer.org/publications/tech-news/computing-conversations/javascript-designing-a-language-in-10-days">JavaScript: Designing a Language in 10 Days</a> &#x2014; IEEE Computer Society&#x3002;Brendan Eich&#x672C;&#x4EBA;&#x3078;&#x306E;&#x30A4;&#x30F3;&#x30BF;&#x30D3;&#x30E5;&#x30FC;&#x3002;JavaScript&#x304C;10&#x65E5;&#x9593;&#x3067;&#x8A2D;&#x8A08;&#x3055;&#x308C;&#x305F;&#x7D4C;&#x7DEF;</li>
<li><a href="https://designftw.mit.edu/lectures/apis/ajax_adaptive_path.pdf">Ajax: A New Approach to Web Applications&#xFF08;PDF&#xFF09;</a> &#x2014; Jesse James Garrett&#xFF08;2005&#xFF09;&#x3002;&#x300C;Ajax&#x300D;&#x3068;&#x3044;&#x3046;&#x7528;&#x8A9E;&#x3092;&#x521D;&#x3081;&#x3066;&#x5B9A;&#x7FA9;&#x3057;&#x305F;&#x539F;&#x5178;</li>
<li><a href="https://jessejamesgarrett.com/2025/02/18/ajax-at-20/">Ajax at 20</a> &#x2014; Jesse James Garrett&#x81EA;&#x8EAB;&#x306B;&#x3088;&#x308B;20&#x5E74;&#x5F8C;&#x306E;&#x632F;&#x308A;&#x8FD4;&#x308A;</li>
<li><a href="https://qiita.com/st_12/items/3e9bd64d74f72e8bbe34">&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x306E;&#x5909;&#x9077;&#x3068;React&#xFF1A;&#x306A;&#x305C; React &#x304C;&#x4E3B;&#x6D41;&#x306B;&#x306A;&#x3063;&#x305F;&#x306E;&#x304B;</a> &#x2014; Qiita&#x8A18;&#x4E8B;&#x3002;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x958B;&#x767A;&#x306E;&#x6B74;&#x53F2;&#x306E;&#x6982;&#x8981;&#x3092;&#x307E;&#x3068;&#x3081;&#x3066;&#x3044;&#x308B;</li>
</ul>
<h3 id="flash">Flash</h3>
<ul>
<li><a href="https://en.wikipedia.org/wiki/Thoughts_on_Flash">Thoughts on Flash &#x2014; Wikipedia</a> &#x2014; Steve Jobs&#x306E;&#x516C;&#x958B;&#x66F8;&#x7C21;&#xFF08;2010&#xFF09;&#x3002;Apple&#x304C;iPhone&#x3067;Flash&#x3092;&#x30B5;&#x30DD;&#x30FC;&#x30C8;&#x3057;&#x306A;&#x3044;&#x7406;&#x7531;&#x3092;&#x8AAC;&#x660E;&#x3057;&#x305F;&#x6587;&#x66F8;</li>
</ul>
<h3 id="react">React</h3>
<ul>
<li><a href="https://en.wikipedia.org/wiki/React_(software)">React &#x2014; Wikipedia</a> &#x2014; React&#x306E;&#x6B74;&#x53F2;&#x3001;Jordan Walke&#x306B;&#x3088;&#x308B;&#x958B;&#x767A;&#x7D4C;&#x7DEF;</li>
<li><a href="https://youtu.be/nYkdrAPrdcw">Hacker Way: Rethinking Web App Development at Facebook&#xFF08;YouTube&#xFF09;</a> &#x2014; Facebook F8 2014&#x3067;&#x306E;&#x8B1B;&#x6F14;&#x3002;MVC&#x306E;&#x554F;&#x984C;&#x3068;Flux&#xFF08;&#x4E00;&#x65B9;&#x5411;&#x30C7;&#x30FC;&#x30BF;&#x30D5;&#x30ED;&#x30FC;&#xFF09;&#x306E;&#x63D0;&#x6848;&#x3002;Facebook&#x306E;&#x901A;&#x77E5;&#x30D0;&#x30C3;&#x30B8;&#x30D0;&#x30B0;&#x306E;&#x8A71;&#x3082;&#x3053;&#x3053;&#x3067;&#x8A9E;&#x3089;&#x308C;&#x3066;&#x3044;&#x308B;</li>
<li><a href="https://www.infoq.com/news/2014/05/facebook-mvc-flux/">Facebook: MVC Does Not Scale, Use Flux Instead</a> &#x2014; InfoQ&#x3002;&#x4E0A;&#x8A18;&#x8B1B;&#x6F14;&#x306E;&#x307E;&#x3068;&#x3081;&#x8A18;&#x4E8B;</li>
<li><a href="https://react.dev/learn/you-might-not-need-an-effect">You Might Not Need an Effect</a> &#x2014; React&#x516C;&#x5F0F;&#x30C9;&#x30AD;&#x30E5;&#x30E1;&#x30F3;&#x30C8;&#x3002;useEffect&#x306E;&#x8AA4;&#x7528;&#x30D1;&#x30BF;&#x30FC;&#x30F3;&#x3068;&#x6B63;&#x3057;&#x3044;&#x4F7F;&#x3044;&#x65B9;</li>
</ul>
<h3 id="react-server-components">React Server Components</h3>
<ul>
<li><a href="https://react.dev/reference/rsc/server-components">Server Components &#x2014; React&#x516C;&#x5F0F;&#x30C9;&#x30AD;&#x30E5;&#x30E1;&#x30F3;&#x30C8;</a></li>
<li><a href="https://github.com/reactjs/rfcs/blob/main/text/0188-server-components.md">React Server Components RFC</a> &#x2014; GitHub&#x3002;RSC&#x306E;&#x8A2D;&#x8A08;&#x63D0;&#x6848;&#x66F8;</li>
<li><a href="https://react.dev/blog/2020/12/21/data-fetching-with-react-server-components">Introducing Zero-Bundle-Size React Server Components</a> &#x2014; React Blog&#xFF08;2020&#xFF09;&#x3002;RSC&#x306E;&#x6700;&#x521D;&#x306E;&#x767A;&#x8868;</li>
</ul>
<h3 id="signals">Signals</h3>
<ul>
<li><a href="https://github.com/tc39/proposal-signals">TC39 Proposal: Signals</a> &#x2014; GitHub&#x3002;JavaScript&#x306E;&#x8A00;&#x8A9E;&#x6A19;&#x6E96;&#x3068;&#x3057;&#x3066;Signals&#x3092;&#x5C0E;&#x5165;&#x3059;&#x308B;&#x63D0;&#x6848;</li>
</ul>
<h3 id="htmx%E3%83%BBhotwire">htmx&#x30FB;Hotwire</h3>
<ul>
<li><a href="https://htmx.org/">htmx&#x516C;&#x5F0F;&#x30B5;&#x30A4;&#x30C8;</a></li>
<li><a href="https://hypermedia.systems/">Hypermedia Systems</a> &#x2014; Carson Gross&#x3089;&#x306B;&#x3088;&#x308B;&#x66F8;&#x7C4D;&#xFF08;&#x7121;&#x6599;&#x516C;&#x958B;&#xFF09;&#x3002;htmx&#x306E;&#x601D;&#x60F3;&#x7684;&#x80CC;&#x666F;&#x3067;&#x3042;&#x308B;Hypermedia&#x30A2;&#x30FC;&#x30AD;&#x30C6;&#x30AF;&#x30C1;&#x30E3;&#x306E;&#x89E3;&#x8AAC;</li>
<li><a href="https://hotwired.dev/">Hotwire&#x516C;&#x5F0F;&#x30B5;&#x30A4;&#x30C8;</a></li>
<li><a href="https://turbo.hotwired.dev/">Turbo Handbook</a> &#x2014; Turbo Frames&#x306E;&#x516C;&#x5F0F;&#x30C9;&#x30AD;&#x30E5;&#x30E1;&#x30F3;&#x30C8;</li>
</ul>
<h3 id="%E8%A8%98%E4%BA%8B%E5%86%85%E3%81%A7%E5%BC%95%E7%94%A8%E3%83%BB%E7%B4%B9%E4%BB%8B%E3%81%97%E3%81%9F%E3%82%82%E3%81%AE">&#x8A18;&#x4E8B;&#x5185;&#x3067;&#x5F15;&#x7528;&#x30FB;&#x7D39;&#x4ECB;&#x3057;&#x305F;&#x3082;&#x306E;</h3>
<ul>
<li><a href="https://zenn.dev/shuent/articles/9fb5b1e18edace">React&#x4E0D;&#x8981;&#x8AD6;2026</a> &#x2014; Zenn</li>
<li><a href="https://x.com/yuta0801_/status/2030507032433107055">@yuta0801_&#x6C0F;&#x306E;X&#x4E0A;&#x3067;&#x306E;&#x8003;&#x5BDF;&#xFF08;&#x964D;&#x4E0B;&#x6DF1;&#x5EA6;&#x30FB;&#x69CB;&#x9020;&#x7684;&#x76F2;&#x70B9;&#xFF09;</a> &#x2014; <a href="https://x.com/yuta0801_/status/2030542410460402160">&#x8A18;&#x4E8B;2</a></li>
</ul>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[オフィスマネージャーを作り続けて分かった、プロダクト設計の変遷と技術的意思決定]]></title><description><![CDATA[2025年4月、私はオフィスの利用率を上げたいという思いから、Office Manager というアプリを開発し始めました。当初は Web（Next.js）で 作成し、プロダクトとして成長させ続けてきました。最終的には Expo（React Native）でネイティブアプリ化し、App Store リリース申請まで完了しました。
本記事では、Web アプリからモバイルアプリに至るまでの技術的変遷や、そこで得た知見をまとめます。]]></description><link>http://blog.shinonome.io/ru-tui-shi-guan-li-apuri/</link><guid isPermaLink="false">693bd83110c4420422a1feb8</guid><category><![CDATA[モバイル]]></category><category><![CDATA[フロントエンド]]></category><category><![CDATA[バックエンド]]></category><dc:creator><![CDATA[PlayGround]]></dc:creator><pubDate>Thu, 15 Jan 2026 11:12:18 GMT</pubDate><media:content url="http://blog.shinonome.io/content/images/2025/12/ChatGPT-Image-2025-12-1--14_30_14.png" medium="image"/><content:encoded><![CDATA[<h3 id="%E8%87%AA%E5%B7%B1%E7%B4%B9%E4%BB%8B">&#x81EA;&#x5DF1;&#x7D39;&#x4ECB;</h3><img src="http://blog.shinonome.io/content/images/2025/12/ChatGPT-Image-2025-12-1--14_30_14.png" alt="&#x30AA;&#x30D5;&#x30A3;&#x30B9;&#x30DE;&#x30CD;&#x30FC;&#x30B8;&#x30E3;&#x30FC;&#x3092;&#x4F5C;&#x308A;&#x7D9A;&#x3051;&#x3066;&#x5206;&#x304B;&#x3063;&#x305F;&#x3001;&#x30D7;&#x30ED;&#x30C0;&#x30AF;&#x30C8;&#x8A2D;&#x8A08;&#x306E;&#x5909;&#x9077;&#x3068;&#x6280;&#x8853;&#x7684;&#x610F;&#x601D;&#x6C7A;&#x5B9A;"><p>&#x3053;&#x3093;&#x306B;&#x3061;&#x306F;&#xFF01;&#x30B2;&#x30FC;&#x30E0;&#x958B;&#x767A;&#x30BC;&#x30DF;&#x306B;&#x6240;&#x5C5E;&#x3057;&#x3066;&#x3044;&#x308B;3&#x56DE;&#x751F;&#x306E;toma&#x3067;&#x3059;&#x3002;<br>PlayGround&#x3067;&#x306F;<strong>&#x30B2;&#x30FC;&#x30E0;&#x958B;&#x767A;&#x30BC;&#x30DF;</strong>&#x3084;<strong>&#x5CA1;&#x5C71;&#x30AA;&#x30D5;&#x30A3;&#x30B9;</strong>&#x306E;&#x904B;&#x55B6;&#x3092;&#x3057;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;</p><p>&#x5CA1;&#x5C71;&#x30AA;&#x30D5;&#x30A3;&#x30B9;&#x3067;&#x306F;&#x30AA;&#x30D5;&#x30A3;&#x30B9;&#x3092;&#x5229;&#x7528;&#x3059;&#x308B;&#x4EBA;&#x304C;&#x5E74;&#x3005;&#x6E1B;&#x3063;&#x3066;&#x3044;&#x304D;&#x3001;PlayGround&#x30E1;&#x30F3;&#x30D0;&#x30FC;&#x5185;&#x3067;&#x306E;&#x4EA4;&#x6D41;&#x304C;&#x5C11;&#x306A;&#x304F;&#x306A;&#x3063;&#x3066;&#x3044;&#x307E;&#x3057;&#x305F;&#x3002;<strong>&#x300C;&#x305D;&#x3093;&#x306A;&#x73FE;&#x72B6;&#x3092;&#x5909;&#x3048;&#x305F;&#x3044;&#xFF01;&#x300D;</strong>&#x3068;&#x3044;&#x3046;&#x601D;&#x3044;&#x3067;&#x4EE5;&#x4E0B;&#x306E;&#x3088;&#x3046;&#x306A;&#x30A2;&#x30D7;&#x30EA;&#x3092;&#x4F5C;&#x6210;&#x3057;&#x307E;&#x3057;&#x305F;&#xFF01;</p><p>&#x4EE5;&#x4E0B;&#x304C;&#x79C1;&#x304C;&#x4F5C;&#x6210;&#x3057;&#x305F;&#x30A2;&#x30D7;&#x30EA;&#x306E;&#x30EA;&#x30F3;&#x30AF;&#x3067;&#x3059;&#x3002;<br>&#x30FB;<a href="itms-apps://itunes.apple.com/app/id6755945774">&#x30E2;&#x30D0;&#x30A4;&#x30EB;&#x30A2;&#x30D7;&#x30EA;</a><br>&#x30FB;<a href="https://okayama-office-manager.vercel.app">Web&#x30A2;&#x30D7;&#x30EA;</a><br>&#x203B;@4nonome&#x30A2;&#x30C9;&#x30EC;&#x30B9;&#x3067;&#x306E;&#x307F;&#x5229;&#x7528;&#x53EF;&#x80FD;&#x3067;&#x3059;&#x3002;</p><!--kg-card-begin: html--><table>
<thead>
<tr>
<th>&#x30E2;&#x30D0;&#x30A4;&#x30EB;</th>
<th>Web</th>
</tr>
</thead>
<tbody>
<tr>
<td><img src="http://blog.shinonome.io/content/images/2026/01/IMG_9820-2.jpg" alt="&#x30AA;&#x30D5;&#x30A3;&#x30B9;&#x30DE;&#x30CD;&#x30FC;&#x30B8;&#x30E3;&#x30FC;&#x3092;&#x4F5C;&#x308A;&#x7D9A;&#x3051;&#x3066;&#x5206;&#x304B;&#x3063;&#x305F;&#x3001;&#x30D7;&#x30ED;&#x30C0;&#x30AF;&#x30C8;&#x8A2D;&#x8A08;&#x306E;&#x5909;&#x9077;&#x3068;&#x6280;&#x8853;&#x7684;&#x610F;&#x601D;&#x6C7A;&#x5B9A;"></td>
<td><img src="http://blog.shinonome.io/content/images/2026/01/IMG_9819-2.jpg" alt="&#x30AA;&#x30D5;&#x30A3;&#x30B9;&#x30DE;&#x30CD;&#x30FC;&#x30B8;&#x30E3;&#x30FC;&#x3092;&#x4F5C;&#x308A;&#x7D9A;&#x3051;&#x3066;&#x5206;&#x304B;&#x3063;&#x305F;&#x3001;&#x30D7;&#x30ED;&#x30C0;&#x30AF;&#x30C8;&#x8A2D;&#x8A08;&#x306E;&#x5909;&#x9077;&#x3068;&#x6280;&#x8853;&#x7684;&#x610F;&#x601D;&#x6C7A;&#x5B9A;"></td>
</tr>
</tbody>
</table><!--kg-card-end: html--><p>&#x4EE5;&#x4E0B;&#x306F;GitHub&#x30EA;&#x30DD;&#x30B8;&#x30C8;&#x30EA;&#x306E;&#x30EA;&#x30F3;&#x30AF;&#x3067;&#x3059;&#x3002;<br>&#x30FB;<a href="https://github.com/toma0705/okayama-office-manager">Web&#x30A2;&#x30D7;&#x30EA;&#x306E;&#x30EA;&#x30DD;&#x30B8;&#x30C8;&#x30EA;</a><br>&#x30FB;<a href="https://github.com/toma0705/office-manager-native">&#x30E2;&#x30D0;&#x30A4;&#x30EB;&#x30A2;&#x30D7;&#x30EA;&#x306E;&#x30EA;&#x30DD;&#x30B8;&#x30C8;&#x30EA;</a><br>&#x30FB;<a href="https://github.com/toma0705/office-manager-api-client">API&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x30EA;&#x30DD;&#x30B8;&#x30C8;&#x30EA;</a></p><p>&#x5F53;&#x521D;&#x306F;&#x5C0F;&#x898F;&#x6A21;&#x306A;Web&#x30A2;&#x30D7;&#x30EA;&#x3067;&#x3057;&#x305F;&#x304C;&#x3001;&#x5B9F;&#x969B;&#x306B;&#x4F7F;&#x308F;&#x308C;&#x308B;&#x4E2D;&#x3067;&#x8981;&#x4EF6;&#x304C;&#x5897;&#x3048;&#x3001;&#x8A2D;&#x8A08;&#x3084;&#x6280;&#x8853;&#x9078;&#x5B9A;&#x3082;&#x5927;&#x304D;&#x304F;&#x5909;&#x5316;&#x3057;&#x3066;&#x304D;&#x307E;&#x3057;&#x305F;&#x3002;<br>&#x3053;&#x306E;&#x8A18;&#x4E8B;&#x3067;&#x306F;&#x3001;&#x200C;&#x200C;<strong>&#x300C;&#x30D7;&#x30ED;&#x30C0;&#x30AF;&#x30C8;&#x306E;&#x6210;&#x9577;&#x306B;&#x4F34;&#x3063;&#x3066;&#x3001;&#x3069;&#x306E;&#x3088;&#x3046;&#x306B;&#x6280;&#x8853;&#x7684;&#x5224;&#x65AD;&#x3092;&#x5909;&#x3048;&#x3066;&#x304D;&#x305F;&#x304B;&#x300D;</strong>&#x200C;&#x200C;&#x3092;&#x6642;&#x7CFB;&#x5217;&#x3067;&#x632F;&#x308A;&#x8FD4;&#x308A;&#x307E;&#x3059;&#x3002;&#x200C; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#x200C;</p><h2 id="%E3%83%95%E3%82%A7%E3%83%BC%E3%82%BA1%EF%BC%9A%E3%81%BE%E3%81%9A%E3%81%AF%E5%85%A8%E4%BD%93%E5%83%8F%E3%82%92%E5%9B%BA%E3%82%81%E3%82%8B">&#x30D5;&#x30A7;&#x30FC;&#x30BA;1&#xFF1A;&#x307E;&#x305A;&#x306F;&#x5168;&#x4F53;&#x50CF;&#x3092;&#x56FA;&#x3081;&#x308B;</h2><h3 id="%E6%8A%80%E8%A1%93%E9%81%B8%E5%AE%9A%E3%83%BB%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3%E3%83%BB%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E6%A6%82%E8%A6%81">&#x6280;&#x8853;&#x9078;&#x5B9A;&#x30FB;&#x30A2;&#x30FC;&#x30AD;&#x30C6;&#x30AF;&#x30C1;&#x30E3;&#x30FB;&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x6982;&#x8981;</h3><p>&#x6700;&#x521D;&#x306B;&#x3084;&#x3063;&#x305F;&#x306E;&#x306F;&#x3001;<strong>&#x5B9F;&#x88C5;&#x3067;&#x306F;&#x306A;&#x304F;&#x8A2D;&#x8A08;</strong>&#x3067;&#x3057;&#x305F;&#x3002;</p><ul><li>&#x3069;&#x3093;&#x306A;&#x8AB2;&#x984C;&#x3092;&#x89E3;&#x6C7A;&#x3057;&#x305F;&#x3044;&#x306E;&#x304B;</li><li>&#x8AB0;&#x304C;&#x3001;&#x3069;&#x306E;&#x983B;&#x5EA6;&#x3067;&#x3069;&#x306E;&#x3088;&#x3046;&#x306B;&#x4F7F;&#x3046;&#x306E;&#x304B;</li><li>&#x6280;&#x8853;&#x30B9;&#x30BF;&#x30C3;&#x30AF;&#x306E;&#x9078;&#x5B9A;</li><li>&#x30A2;&#x30FC;&#x30AD;&#x30C6;&#x30AF;&#x30C1;&#x30E3;&#x306E;&#x5927;&#x67A0;</li><li>MVP&#x3068;&#x3057;&#x3066;&#x4F55;&#x304C;&#x5FC5;&#x8981;&#x304B;</li></ul><p>&#x3092;&#x91CD;&#x70B9;&#x7684;&#x306B;&#x691C;&#x8A0E;&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;</p><p>&#x3053;&#x306E;&#x30D5;&#x30A7;&#x30FC;&#x30BA;&#x3067;&#x306F;<strong>&#x30D7;&#x30ED;&#x30C0;&#x30AF;&#x30C8;&#x306E;&#x65B9;&#x5411;&#x6027;</strong>&#x3092;&#x6C7A;&#x3081;&#x308B;&#x3053;&#x3068;&#x3092;&#x610F;&#x8B58;&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;</p><p></p><h2 id="%E3%83%95%E3%82%A7%E3%83%BC%E3%82%BA2%EF%BC%9Amvp%E3%82%92%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E3%81%97%E3%80%81%E4%BD%95%E4%BA%BA%E3%81%8B%E3%81%AB%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%82%E3%82%89%E3%81%86">&#x30D5;&#x30A7;&#x30FC;&#x30BA;2&#xFF1A;MVP&#x3092;&#x30C7;&#x30D7;&#x30ED;&#x30A4;&#x3057;&#x3001;&#x4F55;&#x4EBA;&#x304B;&#x306B;&#x4F7F;&#x3063;&#x3066;&#x3082;&#x3089;&#x3046;</h2><h3 id="%E3%83%97%E3%83%AD%E3%83%80%E3%82%AF%E3%83%88%E3%81%AE%E5%BF%85%E8%A6%81%E6%80%A7%E3%82%92%E7%A2%BA%E8%AA%8D">&#x30D7;&#x30ED;&#x30C0;&#x30AF;&#x30C8;&#x306E;&#x5FC5;&#x8981;&#x6027;&#x3092;&#x78BA;&#x8A8D;</h3><p>&#x5B9F;&#x969B;&#x306B;MVP&#x3092;&#x4F7F;&#x3063;&#x3066;&#x3082;&#x3089;&#x3046;&#x3053;&#x3068;&#x3067;&#x3001;&#x4ECA;&#x5F8C;&#x3053;&#x306E;&#x30D7;&#x30ED;&#x30C0;&#x30AF;&#x30C8;&#x3092;&#x30B0;&#x30ED;&#x30FC;&#x30B9;&#x3055;&#x305B;&#x308B;&#x3079;&#x304D;&#x304B;&#x78BA;&#x8A8D;&#x3059;&#x308B;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x307E;&#x3057;&#x305F;&#x3002;</p><p>&#x305D;&#x3057;&#x3066;&#x6570;&#x4EBA;&#x3067;&#x306F;&#x3042;&#x308A;&#x307E;&#x3059;&#x304C;&#x3001;&#x3053;&#x306E;&#x30D7;&#x30ED;&#x30C0;&#x30AF;&#x30C8;&#x3092;&#x5FC5;&#x8981;&#x3068;&#x3057;&#x3066;&#x304F;&#x308C;&#x308B;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x304C;&#x3044;&#x305F;&#x308A;&#x3001;&#x30AA;&#x30D5;&#x30A3;&#x30B9;&#x306E;&#x5229;&#x7528;&#x7387;&#x304C;&#x5411;&#x4E0A;&#x3057;&#x305F;&#x306E;&#x3067;&#x3001;&#x3053;&#x306E;&#x30D7;&#x30ED;&#x30C0;&#x30AF;&#x30C8;&#x306B;&#x4FA1;&#x5024;&#x304C;&#x3042;&#x308B;&#x3053;&#x3068;&#x304C;&#x78BA;&#x8A8D;&#x3067;&#x304D;&#x307E;&#x3057;&#x305F;&#x3002;</p><p>&#x3057;&#x304B;&#x3057;&#x3001;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x306E;&#x58F0;&#x3092;&#x4F55;&#x3067;&#x3082;&#x304B;&#x3093;&#x3067;&#x3082;&#x53D6;&#x308A;&#x5165;&#x308C;&#x3066;&#x30D7;&#x30ED;&#x30C0;&#x30AF;&#x30C8;&#x306E;&#x65B9;&#x5411;&#x6027;&#x304C;&#x5206;&#x304B;&#x3089;&#x306A;&#x304F;&#x306A;&#x3063;&#x3066;&#x3057;&#x307E;&#x3063;&#x305F;&#x6642;&#x304C;&#x3042;&#x308A;&#x307E;&#x3057;&#x305F;&#x3002;</p><p>&#x305D;&#x306E;&#x6642;&#x306B;&#x30D5;&#x30A7;&#x30FC;&#x30BA;1&#x306B;&#x623B;&#x3063;&#x3066;&#x3069;&#x3093;&#x306A;&#x8AB2;&#x984C;&#x3092;&#x89E3;&#x6C7A;&#x3059;&#x308B;&#x305F;&#x3081;&#x306E;&#x30D7;&#x30ED;&#x30C0;&#x30AF;&#x30C8;&#x306A;&#x306E;&#x304B;&#x3068;&#x3044;&#x3046;&#x3082;&#x306E;&#x3092;&#x518D;&#x78BA;&#x8A8D;&#x3057;&#x3001;&#x5FC5;&#x8981;&#x306E;&#x306A;&#x3044;&#x6A5F;&#x80FD;&#x3092;&#x524A;&#x9664;&#x3057;&#x305F;&#x308A;&#x3057;&#x3066;&#x3001;<strong>&#x4E00;&#x8CAB;&#x6027;&#x306E;&#x3042;&#x308B;&#x30A2;&#x30D7;&#x30EA;</strong>&#x306B;&#x3059;&#x308B;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x307E;&#x3057;&#x305F;&#x3002;</p><p>&#x3053;&#x306E;&#x30D5;&#x30A7;&#x30FC;&#x30BA;&#x3067;&#x5B66;&#x3093;&#x3060;&#x306E;&#x306F;&#x3001;</p><blockquote><strong>&#x30D7;&#x30ED;&#x30C0;&#x30AF;&#x30C8;&#x306E;&#x5FC5;&#x8981;&#x6027;&#x306E;&#x78BA;&#x8A8D;&#x306F;&#x65E9;&#x3051;&#x308C;&#x3070;&#x65E9;&#x3044;&#x65B9;&#x304C;&#x826F;&#x3044;</strong></blockquote><p>&#x3068;&#x3044;&#x3046;&#x3053;&#x3068;&#x3067;&#x3059;&#x3002;</p><p></p><h2 id="%E3%83%95%E3%82%A7%E3%83%BC%E3%82%BA3%EF%BC%9Aux%E5%90%91%E4%B8%8A%E3%81%AB%E6%9C%AC%E6%B0%97%E3%81%A7%E5%90%91%E3%81%8D%E5%90%88%E3%81%86">&#x30D5;&#x30A7;&#x30FC;&#x30BA;3&#xFF1A;UX&#x5411;&#x4E0A;&#x306B;&#x672C;&#x6C17;&#x3067;&#x5411;&#x304D;&#x5408;&#x3046;</h2><h3 id="%E3%82%A8%E3%83%83%E3%82%B8%E3%82%B1%E3%83%BC%E3%82%B9%E5%AF%BE%E5%BF%9C%E3%83%BB%E6%A5%BD%E8%A6%B3%E7%9A%84ui%E3%83%BB%E6%9C%80%E9%81%A9%E5%8C%96">&#x30A8;&#x30C3;&#x30B8;&#x30B1;&#x30FC;&#x30B9;&#x5BFE;&#x5FDC;&#x30FB;&#x697D;&#x89B3;&#x7684;UI&#x30FB;&#x6700;&#x9069;&#x5316;</h3><p>&#x3053;&#x306E;&#x30D5;&#x30A7;&#x30FC;&#x30BA;&#x306B;&#x306A;&#x308B;&#x3068;<strong>UX&#x306E;&#x7C97;&#x3055;&#x304C;&#x76EE;&#x7ACB;&#x3064;</strong>&#x3088;&#x3046;&#x306B;&#x306A;&#x308A;&#x307E;&#x3057;&#x305F;&#x3002;</p><p>&#x5BFE;&#x5FDC;&#x3057;&#x305F;&#x3053;&#x3068;&#xFF1A;</p><ul><li>&#x901A;&#x4FE1;&#x5931;&#x6557;&#x30FB;&#x4E8C;&#x91CD;&#x64CD;&#x4F5C;&#x306A;&#x3069;&#x306E;&#x30A8;&#x30C3;&#x30B8;&#x30B1;&#x30FC;&#x30B9;&#x5BFE;&#x5FDC;</li><li>&#x697D;&#x89B3;&#x7684;UI&#x306B;&#x3088;&#x308B;&#x64CD;&#x4F5C;&#x611F;&#x306E;&#x6539;&#x5584;</li><li>&#x7121;&#x99C4;&#x306A;&#x518D;&#x30EC;&#x30F3;&#x30C0;&#x30EA;&#x30F3;&#x30B0;&#x3084;API&#x901A;&#x4FE1;&#x306E;&#x6700;&#x9069;&#x5316;</li></ul><p>&#x305D;&#x3057;&#x3066;&#x3055;&#x307E;&#x3056;&#x307E;&#x306A;<strong>&#x300C;&#x6A5F;&#x80FD;&#x8FFD;&#x52A0;&#x300D;</strong></p><p>&#x3057;&#x304B;&#x3057;&#x3001;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x306E;&#x58F0;&#x3092;&#x4F55;&#x3067;&#x3082;&#x304B;&#x3093;&#x3067;&#x3082;&#x53D6;&#x308A;&#x5165;&#x308C;&#x3066;<br><strong>&#x30D7;&#x30ED;&#x30C0;&#x30AF;&#x30C8;&#x306E;&#x65B9;&#x5411;&#x6027;&#x304C;&#x5206;&#x304B;&#x3089;&#x306A;&#x304F;&#x306A;&#x3063;&#x3066;&#x3057;&#x307E;&#x3063;&#x305F;</strong>&#x6642;&#x304C;&#x3042;&#x308A;&#x307E;&#x3057;&#x305F;&#x3002;</p><p>&#x305D;&#x306E;&#x6642;&#x306B;&#x30D5;&#x30A7;&#x30FC;&#x30BA;1&#x306B;&#x623B;&#x3063;&#x3066;&#x3069;&#x3093;&#x306A;&#x8AB2;&#x984C;&#x3092;&#x89E3;&#x6C7A;&#x3059;&#x308B;&#x305F;&#x3081;&#x306E;&#x30D7;&#x30ED;&#x30C0;&#x30AF;&#x30C8;&#x306A;&#x306E;&#x304B;&#x3068;&#x3044;&#x3046;&#x3082;&#x306E;&#x3092;&#x518D;&#x78BA;&#x8A8D;&#x3057;&#x3001;&#x5FC5;&#x8981;&#x306E;&#x306A;&#x3044;&#x6A5F;&#x80FD;&#x3092;&#x524A;&#x9664;&#x3057;&#x305F;&#x308A;&#x3057;&#x3066;&#x3001;<strong>&#x4E00;&#x8CAB;&#x6027;&#x306E;&#x3042;&#x308B;&#x30A2;&#x30D7;&#x30EA;</strong>&#x306B;&#x3059;&#x308B;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x307E;&#x3057;&#x305F;&#x3002;</p><p>&#x3053;&#x306E;&#x30D5;&#x30A7;&#x30FC;&#x30BA;&#x3067;&#x5B66;&#x3093;&#x3060;&#x306E;&#x306F;&#x3001;</p><blockquote><strong>&#x300C;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x306E;&#x610F;&#x898B;&#x300D;&#x3068;&#x300C;&#x30D7;&#x30ED;&#x30C0;&#x30AF;&#x30C8;&#x306E;&#x65B9;&#x5411;&#x6027;&#x300D;&#x3068;&#x306E;&#x30D0;&#x30E9;&#x30F3;&#x30B9;&#x304C;&#x5927;&#x5207;</strong></blockquote><p>&#x3068;&#x3044;&#x3046;&#x3053;&#x3068;&#x3067;&#x3057;&#x305F;&#x3002;</p><p></p><h2 id="%E3%83%95%E3%82%A7%E3%83%BC%E3%82%BA4%EF%BC%9A%E3%82%B0%E3%83%AD%E3%83%BC%E3%82%B9%E3%82%92%E8%A6%8B%E6%8D%AE%E3%81%88%E3%81%9F%E5%93%81%E8%B3%AA%E6%8B%85%E4%BF%9D">&#x30D5;&#x30A7;&#x30FC;&#x30BA;4&#xFF1A;&#x30B0;&#x30ED;&#x30FC;&#x30B9;&#x3092;&#x898B;&#x636E;&#x3048;&#x305F;&#x54C1;&#x8CEA;&#x62C5;&#x4FDD;</h2><h3 id="%E3%83%86%E3%82%B9%E3%83%88%E3%82%B3%E3%83%BC%E3%83%89%E3%81%A8ci%E8%87%AA%E5%8B%95%E5%8C%96">&#x30C6;&#x30B9;&#x30C8;&#x30B3;&#x30FC;&#x30C9;&#x3068;CI&#x81EA;&#x52D5;&#x5316;</h3><p>&#x6A5F;&#x80FD;&#x3092;&#x8FFD;&#x52A0;&#x3059;&#x308B;&#x305F;&#x3073;&#x306B;&#x3001;<strong>&#x610F;&#x56F3;&#x3057;&#x306A;&#x3044;&#x5F62;&#x3067;&#x4ED6;&#x306E;&#x6A5F;&#x80FD;&#x306B;&#x5F71;&#x97FF;&#x304C;&#x51FA;&#x3066;&#x3057;&#x307E;&#x3046;</strong>&#x3053;&#x3068;&#x304C;&#x3042;&#x308A;&#x307E;&#x3057;&#x305F;&#x3002;<br>Git&#x3067;&#x30D0;&#x30FC;&#x30B8;&#x30E7;&#x30F3;&#x7BA1;&#x7406;&#x306F;&#x3057;&#x3066;&#x3044;&#x308B;&#x3082;&#x306E;&#x306E;&#x3001;&#x5225;&#x306E;&#x6A5F;&#x80FD;&#x3092;&#x8FFD;&#x52A0;&#x3057;&#x3066; push &#x3057;&#x305F;&#x5F8C;&#x306B;&#x3001;<br>&#x300C;&#x3044;&#x3064;&#x306E;&#x9593;&#x306B;&#x304B;&#x5225;&#x306E;&#x6A5F;&#x80FD;&#x304C;&#x58CA;&#x308C;&#x3066;&#x3044;&#x308B;&#x300D;&#x3068;&#x3044;&#x3046;&#x72B6;&#x6CC1;&#x304C;&#x767A;&#x751F;&#x3057;&#x3066;&#x3044;&#x307E;&#x3057;&#x305F;&#x3002;</p><p>&#x3053;&#x3053;&#x304B;&#x3089;&#x3001;<strong>&#x65B0;&#x3057;&#x3044;&#x6A5F;&#x80FD;&#x3092;&#x8FFD;&#x52A0;&#x3057;&#x305F;&#x969B;&#x306B;&#x3001;&#x65E2;&#x5B58;&#x6A5F;&#x80FD;&#x306B;&#x5F71;&#x97FF;&#x304C;&#x306A;&#x3044;&#x3053;&#x3068;&#x3092;&#x7D99;&#x7D9A;&#x7684;&#x306B;&#x78BA;&#x8A8D;&#x3059;&#x308B;&#x91CD;&#x8981;&#x6027;</strong>&#x3092;&#x5F37;&#x304F;&#x611F;&#x3058;&#x308B;&#x3088;&#x3046;&#x306B;&#x306A;&#x308A;&#x307E;&#x3057;&#x305F;&#x3002;<br>&#x3057;&#x304B;&#x3057;&#x3001;&#x6A5F;&#x80FD;&#x304C;&#x5897;&#x3048;&#x308B;&#x306B;&#x3064;&#x308C;&#x3066;<strong>&#x624B;&#x52D5;&#x78BA;&#x8A8D;&#x3060;&#x3051;&#x3067;&#x306F;&#x9650;&#x754C;&#x304C;&#x3042;&#x308B;</strong>&#x3068;&#x3082;&#x611F;&#x3058;&#x307E;&#x3057;&#x305F;&#x3002;</p><p>&#x3053;&#x306E;&#x30D7;&#x30ED;&#x30C0;&#x30AF;&#x30C8;&#x3092;<strong>&#x7D99;&#x7D9A;&#x7684;&#x306B;&#x80B2;&#x3066;&#x3066;&#x3044;&#x304F;</strong>&#x3068;&#x6C7A;&#x3081;&#x305F;&#x30BF;&#x30A4;&#x30DF;&#x30F3;&#x30B0;&#x3067;&#x3082;&#x3042;&#x3063;&#x305F;&#x305F;&#x3081;&#x3001;&#x4EE5;&#x4E0B;&#x306E;&#x5BFE;&#x5FDC;&#x3092;&#x884C;&#x3044;&#x307E;&#x3057;&#x305F;&#x3002;</p><ul><li>&#x30C6;&#x30B9;&#x30C8;&#x30B3;&#x30FC;&#x30C9;&#x306E;&#x6574;&#x5099;</li><li>CI/CD&#x306B;&#x3088;&#x308B;&#x81EA;&#x52D5;&#x30C1;&#x30A7;&#x30C3;&#x30AF;&#x3068;&#x30C7;&#x30D7;&#x30ED;&#x30A4;&#x306E;&#x4ED5;&#x7D44;&#x307F;&#x69CB;&#x7BC9;</li></ul><p>&#x3053;&#x308C;&#x306B;&#x3088;&#x308A;&#x3001;</p><ul><li>&#x5B89;&#x5FC3;&#x3057;&#x3066;&#x6A5F;&#x80FD;&#x6539;&#x5584;&#x3084;&#x30EA;&#x30D5;&#x30A1;&#x30AF;&#x30BF;&#x30EA;&#x30F3;&#x30B0;&#x304C;&#x3067;&#x304D;&#x308B;</li><li>&#x958B;&#x767A;&#x30B9;&#x30D4;&#x30FC;&#x30C9;&#x3092;&#x843D;&#x3068;&#x3055;&#x305A;&#x306B;&#x5909;&#x66F4;&#x3092;&#x91CD;&#x306D;&#x3089;&#x308C;&#x308B;</li></ul><p>&#x3068;&#x3044;&#x3063;&#x305F;&#x3001;<strong>&#x30B0;&#x30ED;&#x30FC;&#x30B9;&#x3092;&#x524D;&#x63D0;&#x3068;&#x3057;&#x305F;&#x958B;&#x767A;&#x74B0;&#x5883;</strong>&#x3092;&#x6574;&#x3048;&#x308B;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x307E;&#x3057;&#x305F;&#x3002;</p><p>&#x200C; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#x200C;</p><h2 id="%E3%83%95%E3%82%A7%E3%83%BC%E3%82%BA5%EF%BC%9A%E5%88%A9%E7%94%A8%E7%AF%84%E5%9B%B2%E3%81%AE%E6%8B%A1%E5%A4%A7%E3%81%AB%E8%80%90%E3%81%88%E3%82%8B%E8%A8%AD%E8%A8%88%E3%81%B8">&#x30D5;&#x30A7;&#x30FC;&#x30BA;5&#xFF1A;&#x5229;&#x7528;&#x7BC4;&#x56F2;&#x306E;&#x62E1;&#x5927;&#x306B;&#x8010;&#x3048;&#x308B;&#x8A2D;&#x8A08;&#x3078;</h2><h3 id="%E6%9D%B1%E4%BA%AC%E3%82%AA%E3%83%95%E3%82%A3%E3%82%B9%E5%AF%BE%E5%BF%9C%E3%81%A8%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E6%8B%A1%E5%BC%B5">&#x6771;&#x4EAC;&#x30AA;&#x30D5;&#x30A3;&#x30B9;&#x5BFE;&#x5FDC;&#x3068;&#x30C6;&#x30FC;&#x30D6;&#x30EB;&#x62E1;&#x5F35;</h3><p>&#x300C;&#x6771;&#x4EAC;&#x30AA;&#x30D5;&#x30A3;&#x30B9;&#x3067;&#x3082;&#x4F7F;&#x3044;&#x305F;&#x3044;&#x300D;&#x3068;&#x3044;&#x3046;&#x58F0;&#x304C;&#x4E0A;&#x304C;&#x308A;&#x3001;<strong>&#x5358;&#x4E00;&#x30AA;&#x30D5;&#x30A3;&#x30B9;&#x524D;&#x63D0;&#x306E;&#x8A2D;&#x8A08;&#x304C;&#x9650;&#x754C;</strong>&#x3092;&#x8FCE;&#x3048;&#x307E;&#x3057;&#x305F;&#x3002;<br>&#x3053;&#x308C;&#x306F;&#x521D;&#x671F;&#x306E;&#x8A2D;&#x8A08;&#x6BB5;&#x968E;&#x3067;&#x306F;&#x60F3;&#x5B9A;&#x3057;&#x3066;&#x3044;&#x306A;&#x304B;&#x3063;&#x305F;&#x8981;&#x4EF6;&#x3067;&#x3042;&#x308A;&#x3001;<br>&#x7834;&#x58CA;&#x7684;&#x306A;&#x5909;&#x66F4;&#x3084;&#x3001;<strong>&#x6570;&#x4EBA;&#x898F;&#x6A21;&#x304B;&#x3089;&#x6570;&#x5341;&#x4EBA;&#x898F;&#x6A21;&#x306E;&#x5229;&#x7528;&#x306B;&#x8010;&#x3048;&#x3089;&#x308C;&#x308B;&#x8A2D;&#x8A08;</strong>&#x304C;&#x5FC5;&#x8981;&#x306B;&#x306A;&#x308A;&#x307E;&#x3057;&#x305F;&#x3002;</p><p>&#x5834;&#x5408;&#x306B;&#x3088;&#x3063;&#x3066;&#x306F;&#x3001;</p><ul><li>&#x4F7F;&#x7528;&#x3057;&#x3066;&#x3044;&#x308B;&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x306E;&#x898B;&#x76F4;&#x3057;</li><li>&#x30C7;&#x30FC;&#x30BF;&#x69CB;&#x9020;&#x306E;&#x5927;&#x5E45;&#x306A;&#x5909;&#x66F4;</li></ul><p>&#x3082;&#x5FC5;&#x8981;&#x306B;&#x306A;&#x308B;&#x72B6;&#x6CC1;&#x3067;&#x3057;&#x305F;&#x3002;</p><p>&#x305D;&#x308C;&#x3067;&#x3082;&#x3001;<strong>&#x6771;&#x4EAC;&#x30AA;&#x30D5;&#x30A3;&#x30B9;&#x306E;&#x30E1;&#x30F3;&#x30D0;&#x30FC;&#x306B;&#x3082;&#x4F7F;&#x3063;&#x3066;&#x3082;&#x3089;&#x3046;&#x3053;&#x3068;&#x3067;&#x3001;&#x3053;&#x306E;&#x30D7;&#x30ED;&#x30C0;&#x30AF;&#x30C8;&#x306E;&#x4FA1;&#x5024;&#x306F;&#x3055;&#x3089;&#x306B;&#x9AD8;&#x307E;&#x308B;</strong>&#x3068;&#x78BA;&#x4FE1;&#x3057;&#x3001;&#x5BFE;&#x5FDC;&#x3059;&#x308B;&#x3053;&#x3068;&#x306B;&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;</p><p>&#x5BFE;&#x5FDC;&#x3057;&#x305F;&#x5185;&#x5BB9;&#x306F;&#x4EE5;&#x4E0B;&#x3067;&#x3059;&#x3002;</p><ul><li>&#x30AA;&#x30D5;&#x30A3;&#x30B9;&#x6982;&#x5FF5;&#x306E;&#x5C0E;&#x5165;</li><li>&#x30C6;&#x30FC;&#x30D6;&#x30EB;&#x69CB;&#x9020;&#x306E;&#x62E1;&#x5F35;</li><li>&#x65E2;&#x5B58;&#x30C7;&#x30FC;&#x30BF;&#x3068;&#x306E;&#x4E92;&#x63DB;&#x6027;&#x3092;&#x7DAD;&#x6301;&#x3057;&#x305F;&#x30DE;&#x30A4;&#x30B0;&#x30EC;&#x30FC;&#x30B7;&#x30E7;&#x30F3;</li><li>&#x4EBA;&#x6570;&#x62E1;&#x5927;&#x306B;&#x8010;&#x3048;&#x3089;&#x308C;&#x308B;&#x30B9;&#x30C8;&#x30EC;&#x30FC;&#x30B8;&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x3078;&#x306E;&#x5909;&#x66F4;</li></ul><p>&#x3053;&#x308C;&#x3089;&#x306E;&#x5BFE;&#x5FDC;&#x3092;&#x901A;&#x3057;&#x3066;&#x5F37;&#x304F;&#x611F;&#x3058;&#x305F;&#x306E;&#x306F;&#x3001;</p><blockquote><strong>&#x30D7;&#x30ED;&#x30C0;&#x30AF;&#x30C8;&#x306F;&#x5B8C;&#x6210;&#x3055;&#x305B;&#x308B;&#x3082;&#x306E;&#x3067;&#x306F;&#x306A;&#x304F;&#x3001;&#x6210;&#x9577;&#x3055;&#x305B;&#x7D9A;&#x3051;&#x308B;&#x3082;&#x306E;</strong></blockquote><p>&#x3068;&#x3044;&#x3046;&#x3053;&#x3068;&#x3067;&#x3057;&#x305F;&#x3002;</p><p>&#x200C; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#x200C;</p><h2 id="%E3%83%95%E3%82%A7%E3%83%BC%E3%82%BA6%EF%BC%9A%E3%82%A2%E3%83%97%E3%83%AA%E5%8C%96%E3%82%92%E8%A6%8B%E6%8D%AE%E3%81%88%E3%81%9Fapi%E8%A8%AD%E8%A8%88">&#x30D5;&#x30A7;&#x30FC;&#x30BA;6&#xFF1A;&#x30A2;&#x30D7;&#x30EA;&#x5316;&#x3092;&#x898B;&#x636E;&#x3048;&#x305F;API&#x8A2D;&#x8A08;</h2><h3 id="openapi%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AEsdk%E9%81%8B%E7%94%A8">OpenAPI&#x30D9;&#x30FC;&#x30B9;&#x306E;SDK&#x904B;&#x7528;</h3><p>Web&#x30A2;&#x30D7;&#x30EA;&#x3068;&#x3057;&#x3066;&#x306F; <strong>MVP</strong>&#x306E;&#x6BB5;&#x968E;&#x3092;&#x8D85;&#x3048;&#x3001;<br>&#x5B9F;&#x904B;&#x7528;&#x306B;&#x8010;&#x3048;&#x3046;&#x308B;&#x30EC;&#x30D9;&#x30EB;&#x307E;&#x3067;&#x6539;&#x5584;&#x3067;&#x304D;&#x305F;&#x305F;&#x3081;&#x3001;<br>&#x6B21;&#x306E;&#x30B9;&#x30C6;&#x30C3;&#x30D7;&#x3068;&#x3057;&#x3066; <strong>&#x30CD;&#x30A4;&#x30C6;&#x30A3;&#x30D6;&#x30A2;&#x30D7;&#x30EA;&#xFF08;MMP&#xFF09;&#x3078;&#x306E;&#x5C55;&#x958B;</strong> &#x3092;&#x8003;&#x3048;&#x59CB;&#x3081;&#x307E;&#x3057;&#x305F;&#x3002;</p><p>Web&#x3068;&#x30E2;&#x30D0;&#x30A4;&#x30EB;&#x3092;&#x4E26;&#x884C;&#x3057;&#x3066;&#x958B;&#x767A;&#x3057;&#x3066;&#x3044;&#x304F;&#x3053;&#x3068;&#x3092;&#x898B;&#x636E;&#x3048;&#x308B;&#x3068;&#x3001;<br>&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x3054;&#x3068;&#x306B;API&#x5B9F;&#x88C5;&#x3092;&#x6301;&#x3064;&#x306E;&#x306F;&#x3001;&#x4ED5;&#x69D8;&#x306E;&#x30BA;&#x30EC;&#x3084;&#x5B9F;&#x88C5;&#x30B3;&#x30B9;&#x30C8;&#x5897;&#x52A0;&#x306E;&#x539F;&#x56E0;&#x306B;&#x306A;&#x308A;&#x307E;&#x3059;&#x3002;</p><p>&#x305D;&#x3053;&#x3067;&#x3001;</p><ul><li>API&#x3092;OpenAPI&#x3067;&#x5B9A;&#x7FA9;</li><li>Web&#x30FB;&#x30E2;&#x30D0;&#x30A4;&#x30EB;&#x5171;&#x901A;&#x3067;&#x5229;&#x7528;&#x3067;&#x304D;&#x308B;SDK&#x3092;&#x751F;&#x6210;&#x30FB;&#x904B;&#x7528;</li></ul><p>&#x3068;&#x3044;&#x3046;&#x5F62;&#x306B;&#x5207;&#x308A;&#x66FF;&#x3048;&#x307E;&#x3057;&#x305F;&#x3002;&#x3053;&#x306E;&#x5909;&#x66F4;&#x306B;&#x3088;&#x308A;&#x3001;</p><ul><li>&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x9593;&#x3067;&#x306E;&#x4ED5;&#x69D8;&#x30D6;&#x30EC;&#x9632;&#x6B62;</li><li>API&#x4ED5;&#x69D8;&#x3092;&#x8D77;&#x70B9;&#x3068;&#x3057;&#x305F;&#x958B;&#x767A;&#x30D5;&#x30ED;&#x30FC;&#x306E;&#x78BA;&#x7ACB;</li><li>&#x5B9F;&#x88C5;&#x30B9;&#x30D4;&#x30FC;&#x30C9;&#x306E;&#x5411;&#x4E0A;</li></ul><p>&#x3068;&#x3044;&#x3063;&#x305F;&#x30E1;&#x30EA;&#x30C3;&#x30C8;&#x3092;&#x5F97;&#x308B;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x307E;&#x3057;&#x305F;&#x3002;</p><p>&#x200C; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#x200C;</p><h2 id="%E3%83%95%E3%82%A7%E3%83%BC%E3%82%BA7%EF%BC%9A%E3%83%8D%E3%82%A4%E3%83%86%E3%82%A3%E3%83%96%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AE%E4%BD%9C%E6%88%90">&#x30D5;&#x30A7;&#x30FC;&#x30BA;7&#xFF1A;&#x30CD;&#x30A4;&#x30C6;&#x30A3;&#x30D6;&#x30A2;&#x30D7;&#x30EA;&#x306E;&#x4F5C;&#x6210;</h2><p>&#x30D0;&#x30C3;&#x30AF;&#x30A8;&#x30F3;&#x30C9;&#x5074;&#x306F;&#x3001;&#x30D5;&#x30A7;&#x30FC;&#x30BA;6&#x3067;&#x6574;&#x5099;&#x3057;&#x305F; <strong>OpenAPI&#x30D9;&#x30FC;&#x30B9;&#x306E;SDK</strong> &#x3092;&#x305D;&#x306E;&#x307E;&#x307E;&#x5229;&#x7528;&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;<br>&#x4E00;&#x65B9;&#x3067;&#x3001;&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x30B5;&#x30A4;&#x30C9;&#x306B;&#x3064;&#x3044;&#x3066;&#x306F;&#x3001;<strong>&#x3042;&#x3048;&#x3066;&#x30CD;&#x30A4;&#x30C6;&#x30A3;&#x30D6;&#x5C02;&#x7528;&#x306E;&#x5B9F;&#x88C5;</strong>&#x3092;&#x9078;&#x629E;&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;</p><p>Web&#x3068;&#x30CD;&#x30A4;&#x30C6;&#x30A3;&#x30D6;&#x3067;UI&#x3092;&#x5171;&#x901A;&#x5316;&#x3059;&#x308B;&#x9078;&#x629E;&#x80A2;&#x3082;&#x691C;&#x8A0E;&#x3057;&#x307E;&#x3057;&#x305F;&#x304C;&#x3001;</p><ul><li>&#x64CD;&#x4F5C;&#x611F;</li><li>&#x753B;&#x9762;&#x9077;&#x79FB;</li><li>OS&#x6A19;&#x6E96;&#x306E;UI&#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;</li></ul><p>&#x306A;&#x3069;&#x3092;&#x8003;&#x3048;&#x308B;&#x3068;&#x3001;Web&#x3068;&#x30CD;&#x30A4;&#x30C6;&#x30A3;&#x30D6;&#x3067;&#x306F;<strong>&#x6C42;&#x3081;&#x3089;&#x308C;&#x308B;UI/UX&#x304C;&#x5927;&#x304D;&#x304F;&#x7570;&#x306A;&#x308B;</strong>&#x3068;&#x5224;&#x65AD;&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;</p><p>&#x305D;&#x306E;&#x305F;&#x3081;&#x3001;UI&#x306F;&#x5171;&#x901A;&#x5316;&#x305B;&#x305A;&#x3001;<strong>&#x30CD;&#x30A4;&#x30C6;&#x30A3;&#x30D6;&#x30A2;&#x30D7;&#x30EA;&#x3068;&#x3057;&#x3066;&#x6700;&#x9069;&#x306A;&#x4F53;&#x9A13;&#x3092;&#x524D;&#x63D0;&#x306B;&#x4E00;&#x304B;&#x3089;&#x8A2D;&#x8A08;&#x30FB;&#x5B9F;&#x88C5;</strong>&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;</p><p>&#x7D50;&#x679C;&#x3068;&#x3057;&#x3066;&#x3001;</p><ul><li>&#x30CD;&#x30A4;&#x30C6;&#x30A3;&#x30D6;&#x3089;&#x3057;&#x3044;&#x64CD;&#x4F5C;&#x611F;&#x3092;&#x5B9F;&#x73FE;&#x3067;&#x304D;&#x305F;</li><li>&#x4E0D;&#x8981;&#x306A;&#x62BD;&#x8C61;&#x5316;&#x3092;&#x907F;&#x3051;&#x3089;&#x308C;&#x305F;</li><li>&#x9AD8;&#x54C1;&#x8CEA;&#x306A;&#x30A2;&#x30D7;&#x30EA;&#x3092;&#x77ED;&#x671F;&#x9593;&#x3067;&#x958B;&#x767A;&#x3067;&#x304D;&#x305F;</li></ul><p>&#x3068;&#x3044;&#x3046;&#x6210;&#x679C;&#x306B;&#x3064;&#x306A;&#x304C;&#x308A;&#x307E;&#x3057;&#x305F;&#x3002;</p><p>&#x200C; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#x200C;</p><h2 id="%E3%83%95%E3%82%A7%E3%83%BC%E3%82%BA8%EF%BC%9Aapp-store%E3%81%AB%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9-%F0%9F%8E%89">&#x30D5;&#x30A7;&#x30FC;&#x30BA;8&#xFF1A;App Store&#x306B;&#x30EA;&#x30EA;&#x30FC;&#x30B9; &#x1F389;</h2><p>&#x30CD;&#x30A4;&#x30C6;&#x30A3;&#x30D6;&#x30A2;&#x30D7;&#x30EA;&#x3068;&#x3057;&#x3066;&#x5B8C;&#x6210;&#x3057;&#x305F;&#x305F;&#x3081;&#x3001;<strong>App Store&#x3078;&#x30EA;&#x30EA;&#x30FC;&#x30B9;</strong>&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;<br>&#x4ECA;&#x56DE;&#x306F;&#x4E00;&#x822C;&#x516C;&#x958B;&#x3067;&#x306F;&#x306A;&#x304F;&#x3001;<strong>Unlisted App</strong> &#x3068;&#x3057;&#x3066;&#x306E;&#x30EA;&#x30EA;&#x30FC;&#x30B9;&#x3067;&#x3059;&#x3002;</p><p>Unlisted App&#x306F;&#x3001;</p><ul><li>App Store&#x306E;&#x691C;&#x7D22;&#x7D50;&#x679C;&#x306B;&#x306F;&#x8868;&#x793A;&#x3055;&#x308C;&#x306A;&#x3044;</li><li><strong>&#x5C02;&#x7528;&#x30EA;&#x30F3;&#x30AF;&#x3092;&#x77E5;&#x3063;&#x3066;&#x3044;&#x308B;&#x4EBA;&#x306E;&#x307F;&#x304C;&#x30A4;&#x30F3;&#x30B9;&#x30C8;&#x30FC;&#x30EB;&#x53EF;&#x80FD;</strong></li></ul><p>&#x3068;&#x3044;&#x3046;&#x914D;&#x5E03;&#x5F62;&#x5F0F;&#x306E;&#x305F;&#x3081;&#x3001;&#x793E;&#x5185;&#x5229;&#x7528;&#x3084;&#x9650;&#x5B9A;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x5411;&#x3051;&#x306E;&#x914D;&#x5E03;&#x306B;&#x9069;&#x3057;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;</p><p>&#x200C; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#x200C;</p><h2 id="%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB">&#x304A;&#x308F;&#x308A;&#x306B;</h2><p>&#x3053;&#x308C;&#x304B;&#x3089;&#x3082;&#x3053;&#x306E;&#x30D7;&#x30ED;&#x30C0;&#x30AF;&#x30C8;&#x3092;&#x30B0;&#x30ED;&#x30FC;&#x30B9;&#x3055;&#x305B;&#x7D9A;&#x3051;&#x3066;&#x3044;&#x304D;&#x305F;&#x3044;&#x3068;&#x8003;&#x3048;&#x3066;&#x3044;&#x307E;&#x3059;&#xFF01;<br>&#x6539;&#x5584;&#x3057;&#x3066;&#x307B;&#x3057;&#x3044;&#x3053;&#x3068;&#x304C;&#x3042;&#x308C;&#x3070;&#x662F;&#x975E;toma&#x306B;&#x9023;&#x7D61;&#x3092;&#x304A;&#x9858;&#x3044;&#x3057;&#x307E;&#x3059;&#xFF01;<br>&#x6700;&#x5F8C;&#x307E;&#x3067;&#x8AAD;&#x3093;&#x3067;&#x3044;&#x305F;&#x3060;&#x304D;&#x3042;&#x308A;&#x304C;&#x3068;&#x3046;&#x3054;&#x3056;&#x3044;&#x307E;&#x3057;&#x305F;&#xFF01;</p>]]></content:encoded></item><item><title><![CDATA[去年の自分のコードをレビューしてみた]]></title><description><![CDATA[過去の自分へのレビューを通じ、ロジック分離やテストの重要性など、1年間の技術的成長と現在の改善案を綴りました。]]></description><link>http://blog.shinonome.io/reviewing-my-code/</link><guid isPermaLink="false">693f69b410c4420422a1ff11</guid><category><![CDATA[フロントエンド]]></category><category><![CDATA[PlayGround]]></category><dc:creator><![CDATA[PlayGround]]></dc:creator><pubDate>Fri, 19 Dec 2025 08:58:48 GMT</pubDate><media:content url="http://blog.shinonome.io/content/images/2025/12/Gemini_Generated_Image_6z7w976z7w976z7w.png" medium="image"/><content:encoded><![CDATA[<img src="http://blog.shinonome.io/content/images/2025/12/Gemini_Generated_Image_6z7w976z7w976z7w.png" alt="&#x53BB;&#x5E74;&#x306E;&#x81EA;&#x5206;&#x306E;&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x30EC;&#x30D3;&#x30E5;&#x30FC;&#x3057;&#x3066;&#x307F;&#x305F;"><p>&#x3053;&#x3093;&#x306B;&#x3061;&#x306F;&#x3001;&#x5927;&#x5B66;3&#x5E74;&#x751F;&#x306E;Ryoma&#x3067;&#x3059;&#x3002;</p><p>&#x3075;&#x3068;&#x3001;&#x300C;1&#x5E74;&#x524D;&#x306B;&#x81EA;&#x5206;&#x304C;&#x66F8;&#x3044;&#x305F;&#x30B3;&#x30FC;&#x30C9;&#x3063;&#x3066;&#x3069;&#x3093;&#x306A;&#x611F;&#x3058;&#x3060;&#x3063;&#x305F;&#x3063;&#x3051;&#xFF1F;&#x300D;&#x3068;&#x601D;&#x3044;&#x7ACB;&#x3061;&#x3001;&#x5F53;&#x6642;&#x958B;&#x767A;&#x3057;&#x305F;Todo&#x30A2;&#x30D7;&#x30EA;&#x306E;&#x30EA;&#x30DD;&#x30B8;&#x30C8;&#x30EA;&#x3092;&#x6398;&#x308A;&#x8D77;&#x3053;&#x3057;&#x3066;&#x307F;&#x307E;&#x3057;&#x305F;&#x3002;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.shinonome.io/content/images/2025/12/----------2025-12-15-10.48.22.png" class="kg-image" alt="&#x53BB;&#x5E74;&#x306E;&#x81EA;&#x5206;&#x306E;&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x30EC;&#x30D3;&#x30E5;&#x30FC;&#x3057;&#x3066;&#x307F;&#x305F;" loading="lazy" width="1774" height="1206" srcset="http://blog.shinonome.io/content/images/size/w600/2025/12/----------2025-12-15-10.48.22.png 600w, http://blog.shinonome.io/content/images/size/w1000/2025/12/----------2025-12-15-10.48.22.png 1000w, http://blog.shinonome.io/content/images/size/w1600/2025/12/----------2025-12-15-10.48.22.png 1600w, http://blog.shinonome.io/content/images/2025/12/----------2025-12-15-10.48.22.png 1774w" sizes="(min-width: 720px) 720px"><figcaption>&#x30A2;&#x30D7;&#x30EA;&#x306E;&#x30B9;&#x30AF;&#x30EA;&#x30FC;&#x30F3;&#x30B7;&#x30E7;&#x30C3;&#x30C8;</figcaption></figure><p>&#x3053;&#x306E;&#x30A2;&#x30D7;&#x30EA;&#x306F;&#x3001;&#x79C1;&#x304C;&#x6240;&#x5C5E;&#x3057;&#x3066;&#x3044;&#x305F;&#x65E7;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x30B3;&#x30FC;&#x30B9;&#x306E;&#x8AB2;&#x984C;&#x3068;&#x3057;&#x3066;&#x4F5C;&#x6210;&#x3057;&#x305F;&#x3082;&#x306E;&#x3067;&#x3059;&#x3002;<br>&#x5F53;&#x6642;&#x306F;&#x300C;&#x52D5;&#x3051;&#x3070;&#x6B63;&#x7FA9;&#xFF01;&#x300D;&#x300C;Figma&#x306E;&#x30C7;&#x30B6;&#x30A4;&#x30F3;&#x901A;&#x308A;&#x306B;&#x5B9F;&#x88C5;&#x3067;&#x304D;&#x3066;&#x3059;&#x3054;&#x3044;&#xFF01;&#x300D;&#x3068;&#x9054;&#x6210;&#x611F;&#x306B;&#x6D78;&#x3063;&#x3066;&#x3044;&#x305F;&#x306E;&#x3067;&#x3059;&#x304C;&#x3001;&#x4ECA;&#x306E;&#x8996;&#x70B9;&#x3067;&#x898B;&#x8FD4;&#x3059;&#x3068;&#x2026;&#x2026;</p><p><strong>&#x3053;&#x308C;&#x3001;&#x76F4;&#x3057;&#x305F;&#x3044;&#x3002;</strong></p><p>&#x3068;&#x601D;&#x3046;&#x7B87;&#x6240;&#x304C;&#x6B21;&#x3005;&#x3068;&#x51FA;&#x3066;&#x304D;&#x307E;&#x3057;&#x305F;&#x3002;<br>&#x4ECA;&#x56DE;&#x306F;&#x3001;&#x904E;&#x53BB;&#x306E;&#x81EA;&#x5206;&#x3078;&#x306E;&#x30B3;&#x30FC;&#x30C9;&#x30EC;&#x30D3;&#x30E5;&#x30FC;&#x3092;&#x901A;&#x3057;&#x3066;&#x3001;&#x4ECA;&#x306E;&#x81EA;&#x5206;&#x306A;&#x3089;&#x3069;&#x3046;&#x5B9F;&#x88C5;&#x3059;&#x308B;&#x304B;&#x3001;&#x3068;&#x3044;&#x3046;<strong>&#x6539;&#x5584;&#x63D0;&#x6848;</strong>&#x3092;&#x307E;&#x3068;&#x3081;&#x3066;&#x307F;&#x305F;&#x3044;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x3002;</p><h2 id="1%E5%B9%B4%E5%89%8D%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E3%80%8C%E3%81%93%E3%81%93%E3%81%8C%E6%B0%97%E3%81%AB%E3%81%AA%E3%82%8B%E3%80%8D">1&#x5E74;&#x524D;&#x306E;&#x30B3;&#x30FC;&#x30C9;&#x306E;&#x300C;&#x3053;&#x3053;&#x304C;&#x6C17;&#x306B;&#x306A;&#x308B;&#x300D;</h2><p>&#x3053;&#x306E;&#x30A2;&#x30D7;&#x30EA;&#x306F; React + styled-components &#x3067;&#x66F8;&#x304B;&#x308C;&#x305F;&#x30B7;&#x30F3;&#x30D7;&#x30EB;&#x306A;Todo&#x30A2;&#x30D7;&#x30EA;&#x3067;&#x3059;&#x3002;<br>Atomic Design&#x3092;&#x63A1;&#x7528;&#x3057;&#x3001;&#x30C7;&#x30A3;&#x30EC;&#x30AF;&#x30C8;&#x30EA;&#x69CB;&#x6210;&#x3082;&#x3057;&#x3063;&#x304B;&#x308A;&#x3057;&#x3066;&#x3044;&#x308B;&#x3088;&#x3046;&#x306B;&#x898B;&#x3048;&#x307E;&#x3059;&#x304C;&#x3001;&#x4E2D;&#x8EAB;&#x3092;&#x898B;&#x308B;&#x3068;<strong>&quot;&#x52D5;&#x304F;&#x3053;&#x3068;&quot;&#x3060;&#x3051;&#x3092;&#x512A;&#x5148;&#x3057;&#x305F;</strong>&#x5B9F;&#x88C5;&#x304C;&#x3042;&#x308A;&#x307E;&#x3057;&#x305F;&#x3002;</p><ol><li><strong>UI&#x3068;&#x30ED;&#x30B8;&#x30C3;&#x30AF;&#x304C;&#x5BC6;&#x7D50;&#x5408;</strong>: &#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#x306E;&#x4E2D;&#x306B; <code>useState</code> &#x3084;&#x8907;&#x96D1;&#x306A;&#x95A2;&#x6570;&#x304C;&#x8A70;&#x3081;&#x8FBC;&#x307E;&#x308C;&#x3066;&#x3044;&#x308B;&#x3002;</li><li><strong>React&#x306E;&#x30A2;&#x30F3;&#x30C1;&#x30D1;&#x30BF;&#x30FC;&#x30F3;</strong>: &#x7121;&#x7406;&#x3084;&#x308A;DOM&#x3092;&#x64CD;&#x4F5C;&#x3057;&#x3066;&#x3044;&#x308B;&#x7B87;&#x6240;&#x304C;&#x3042;&#x308B;&#x3002;</li><li><strong>&#x30C6;&#x30B9;&#x30C8;&#x304C;&#x306A;&#x3044;</strong>: &#x30EA;&#x30D5;&#x30A1;&#x30AF;&#x30BF;&#x30EA;&#x30F3;&#x30B0;&#x3057;&#x3088;&#x3046;&#x306B;&#x3082;&#x3001;&#x58CA;&#x308C;&#x306A;&#x3044;&#x304B;&#x4E0D;&#x5B89;&#x3002;</li></ol><p>&#x3053;&#x308C;&#x3089;&#x306B;&#x5BFE;&#x3057;&#x3066;&#x3001;&#x73FE;&#x5728;&#x306E;&#x81EA;&#x5206;&#x306E;&#x77E5;&#x8B58;&#x3067;<strong>&#x3053;&#x3046;&#x76F4;&#x3059;&#x3079;&#x304D;</strong>&#x3068;&#x3044;&#x3046;&#x63D0;&#x6848;&#x3092;&#x3057;&#x3066;&#x3044;&#x304D;&#x307E;&#x3059;&#x3002;</p><hr><h2 id="1-ui%E3%81%A8%E3%83%AD%E3%82%B8%E3%83%83%E3%82%AF%E3%81%AE%E5%88%86%E9%9B%A2-custom-hook">1. UI&#x3068;&#x30ED;&#x30B8;&#x30C3;&#x30AF;&#x306E;&#x5206;&#x96E2; (Custom Hook)</h2><p>&#x4E00;&#x756A;&#x6C17;&#x306B;&#x306A;&#x3063;&#x305F;&#x306E;&#x306F;&#x3001;&#x30E1;&#x30A4;&#x30F3;&#x306E;&#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#x3067;&#x3042;&#x308B; <code>TodoCard</code> &#x306B;&#x3001;&#x72B6;&#x614B;&#x7BA1;&#x7406;&#x306E;&#x30ED;&#x30B8;&#x30C3;&#x30AF;&#x304C;&#x30D9;&#x30BF;&#x66F8;&#x304D;&#x3055;&#x308C;&#x3066;&#x3044;&#x305F;&#x3053;&#x3068;&#x3067;&#x3059;&#x3002;</p><p><strong>Before: 1&#x5E74;&#x524D;&#x306E;&#x30B3;&#x30FC;&#x30C9;</strong></p><pre><code class="language-jsx">// components/Organisms/TodoCard/index.jsx
const TodoCard = ({ tasks = [] }) =&gt; {
  const [taskList, setTaskList] = useState(tasks);

  // UI&#x306E;&#x4E2D;&#x306B;&#x30ED;&#x30B8;&#x30C3;&#x30AF;&#x304C;&#x6DF7;&#x5728;&#x3057;&#x3066;&#x3044;&#x3066;&#x898B;&#x901A;&#x3057;&#x304C;&#x60AA;&#x3044;...
  const handleTaskNameChange = (value, index) =&gt; {
    if (value.trim() === &quot;&quot;) {
      // ...&#x524A;&#x9664;&#x51E6;&#x7406;
    } else {
      // ...&#x66F4;&#x65B0;&#x51E6;&#x7406;
    }
  };

  return &lt;StyledWrapper&gt;{/* ...JSX&#x306E;&#x8A18;&#x8FF0; */}&lt;/StyledWrapper&gt;;
};
</code></pre><p></p><p>&#x3053;&#x308C;&#x3060;&#x3068;&#x3001;&#x30C7;&#x30B6;&#x30A4;&#x30F3;&#x3092;&#x4FEE;&#x6B63;&#x3057;&#x305F;&#x3044;&#x3060;&#x3051;&#x306A;&#x306E;&#x306B;&#x30ED;&#x30B8;&#x30C3;&#x30AF;&#x3092;&#x8AA4;&#x3063;&#x3066;&#x58CA;&#x3057;&#x3066;&#x3057;&#x307E;&#x3046;&#x30EA;&#x30B9;&#x30AF;&#x304C;&#x3042;&#x308A;&#x307E;&#x3059;&#x3002;&#x307E;&#x305F;&#x3001;&#x30ED;&#x30B8;&#x30C3;&#x30AF;&#x5358;&#x4F53;&#x306E;&#x30C6;&#x30B9;&#x30C8;&#x3082;&#x96E3;&#x3057;&#x3044;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x3002;</p><p><strong>Proposal: Custom Hook&#x3078;&#x306E;&#x5207;&#x308A;&#x51FA;&#x3057;</strong></p><p>&#x73FE;&#x5728;&#x306F;&#x3001;<strong>UI</strong>&#x3068;<strong>&#x30ED;&#x30B8;&#x30C3;&#x30AF;</strong>&#x3092;<strong>&#x5206;&#x96E2;&#x3059;&#x308B;</strong>&#x3068;&#x3044;&#x3046;&#x8003;&#x3048;&#x65B9;&#x304C;&#x4E00;&#x822C;&#x7684;&#x306B;&#x306A;&#x3063;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;&#x3082;&#x3057;&#x4ECA;&#x5B9F;&#x88C5;&#x3059;&#x308B;&#x306A;&#x3089;&#x3001;&#x30ED;&#x30B8;&#x30C3;&#x30AF;&#x90E8;&#x5206;&#x3092; <code>useTodo</code> &#x3068;&#x3044;&#x3046;&#x30AB;&#x30B9;&#x30BF;&#x30E0;&#x30D5;&#x30C3;&#x30AF;&#x306B;&#x62BD;&#x51FA;&#x3057;&#x307E;&#x3059;&#x3002;</p><pre><code class="language-javascript">// hooks/useTodo.js
export const useTodo = (initialTasks = []) =&gt; {
  const [taskList, setTaskList] = useState(initialTasks);

  const addTask = () =&gt; { ... };
  const updateTaskName = (index, value) =&gt; { ... };

  // &#x30ED;&#x30B8;&#x30C3;&#x30AF;&#x3068;&#x72B6;&#x614B;&#x3060;&#x3051;&#x3092;&#x8FD4;&#x3059;
  return { taskList, addTask, updateTaskName };
};
</code></pre><p></p><p>&#x3053;&#x308C;&#x3092;&#x4F7F;&#x3046;&#x3068;&#x3001;&#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#x5074;&#x306F;&#x30B9;&#x30C3;&#x30AD;&#x30EA;&#x3057;&#x307E;&#x3059;&#x3002;</p><pre><code class="language-jsx">// components/Organisms/TodoCard/index.jsx
const TodoCard = ({ tasks = [] }) =&gt; {
  // &#x30ED;&#x30B8;&#x30C3;&#x30AF;&#x306F;&#x30D5;&#x30C3;&#x30AF;&#x304B;&#x3089;&#x547C;&#x3076;&#x3060;&#x3051;&#xFF01;
  const { taskList, addTask, updateTaskName } = useTodo(tasks);

  return &lt;StyledWrapper&gt;{/* UI&#x306E;&#x30EC;&#x30F3;&#x30C0;&#x30EA;&#x30F3;&#x30B0;&#x306B;&#x96C6;&#x4E2D;&#x3067;&#x304D;&#x308B; */}&lt;/StyledWrapper&gt;;
};
</code></pre><hr><h2 id="2-controlled-component">2. Controlled Component</h2><p>&#x6B21;&#x306B;&#x6C17;&#x306B;&#x306A;&#x3063;&#x305F;&#x306E;&#x304C;&#x3001;&#x5165;&#x529B;&#x30D5;&#x30A9;&#x30FC;&#x30E0;&#x306E;&#x5B9F;&#x88C5;&#x3067;&#x3059;&#x3002;<br>1&#x5E74;&#x524D;&#x306E;&#x79C1;&#x306F;&#x3001;React&#x306E;&#x6D41;&#x5100;&#x304C;&#x3044;&#x307E;&#x3044;&#x3061;&#x5206;&#x304B;&#x3063;&#x3066;&#x304A;&#x3089;&#x305A;&#x3001;<code>useEffect</code> &#x3068; <code>useRef</code> &#x3092;&#x4F7F;&#x3063;&#x3066;&#x7121;&#x7406;&#x3084;&#x308A;&#x5024;&#x3092;&#x66F8;&#x304D;&#x63DB;&#x3048;&#x3066;&#x3044;&#x307E;&#x3057;&#x305F;&#x3002;</p><p><strong>Before: DOM&#x3092;&#x76F4;&#x63A5;&#x64CD;&#x4F5C;</strong></p><pre><code class="language-jsx">// components/Atoms/Input/index.jsx
useEffect(() =&gt; {
  if (inputRef.current) {
    // React&#x306E;&#x7BA1;&#x7406;&#x5916;&#x3067;DOM&#x3092;&#x76F4;&#x63A5;&#x66F8;&#x304D;&#x63DB;&#x3048;&#x3066;&#x3044;&#x308B;
    inputRef.current.value = defaultValue;
  }
}, [defaultValue]);
</code></pre><p></p><p>&#x3053;&#x308C;&#x306F;&#x4E88;&#x671F;&#x305B;&#x306C;&#x30D0;&#x30B0;&#x306E;&#x6E29;&#x5E8A;&#x306B;&#x306A;&#x308A;&#x307E;&#x3059;&#x3002;&#x4ECA;&#x306A;&#x3089;&#x3001;React&#x304C;&#x63A8;&#x5968;&#x3059;&#x308B; <strong>Controlled Component</strong>&#x3068;&#x3057;&#x3066;&#x5B9F;&#x88C5;&#x3057;&#x307E;&#x3059;&#x3002;</p><p><strong>Proposal: React&#x306B;&#x4EFB;&#x305B;&#x308B;</strong></p><pre><code class="language-jsx">const Input = ({ value, onChange }) =&gt; {
  return (
    &lt;StyledInput
      value={value} // React&#x306E;State&#x3092;&#x6B63;&#x3068;&#x3059;&#x308B;
      onChange={(e) =&gt; onChange(e.target.value)}
    /&gt;
  );
};
</code></pre><p></p><p><strong>DOM&#x3092;&#x76F4;&#x63A5;&#x89E6;&#x3089;&#x306A;&#x3044;</strong>&#x3068;&#x3044;&#x3046;&#x306E;&#x306F;React&#x306E;&#x57FA;&#x672C;&#x306A;&#x306E;&#x3067;&#x3001;&#x5F53;&#x6642;&#x306F;<strong>&#x52D5;&#x3051;&#x3070;&#x3044;&#x3044;</strong>&#x3067;&#x7A81;&#x3063;&#x8D70;&#x3063;&#x3066;&#x3044;&#x305F;&#x3053;&#x3068;&#x304C;&#x308F;&#x304B;&#x308A;&#x307E;&#x3059;&#x3002;</p><hr><h2 id="3-%E3%83%86%E3%82%B9%E3%83%88%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%9B%B8%E3%81%8F">3. &#x30C6;&#x30B9;&#x30C8;&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x66F8;&#x304F;</h2><p>1&#x5E74;&#x524D;&#x306F;&#x300C;&#x30C6;&#x30B9;&#x30C8;&#x30B3;&#x30FC;&#x30C9;&#xFF1F; &#x4F55;&#x305D;&#x308C;&#x304A;&#x3044;&#x3057;&#x3044;&#x306E;&#xFF1F;&#x300D;&#x72B6;&#x614B;&#x3067;&#x3057;&#x305F;&#x304C;&#x3001;&#x4ECA;&#x306F;<strong>&#x30C6;&#x30B9;&#x30C8;&#x304C;&#x306A;&#x3044;&#x30EA;&#x30D5;&#x30A1;&#x30AF;&#x30BF;&#x30EA;&#x30F3;&#x30B0;&#x306F;&#x307E;&#x305A;&#x3044;</strong>&#x3068;&#x81EA;&#x7136;&#x306B;&#x8003;&#x3048;&#x308B;&#x3088;&#x3046;&#x306B;&#x306A;&#x308A;&#x307E;&#x3057;&#x305F;&#x3002;</p><p>&#x30ED;&#x30B8;&#x30C3;&#x30AF;&#x3092; <code>useTodo</code> &#x306B;&#x5207;&#x308A;&#x51FA;&#x3059;&#x63D0;&#x6848;&#x3092;&#x3057;&#x307E;&#x3057;&#x305F;&#x304C;&#x3001;&#x3053;&#x308C;&#x306B;&#x3088;&#x3063;&#x3066;UI&#x306E;&#x30EC;&#x30F3;&#x30C0;&#x30EA;&#x30F3;&#x30B0;&#x3092;&#x6C17;&#x306B;&#x305B;&#x305A;&#x3001;&#x30ED;&#x30B8;&#x30C3;&#x30AF;&#x5358;&#x4F53;&#x306E;&#x30C6;&#x30B9;&#x30C8;&#x304C;&#x66F8;&#x3051;&#x308B;&#x3088;&#x3046;&#x306B;&#x306A;&#x308A;&#x307E;&#x3059;&#x3002;</p><p><strong>Proposal: &#x30ED;&#x30B8;&#x30C3;&#x30AF;&#x306E;&#x30C6;&#x30B9;&#x30C8;</strong></p><pre><code class="language-javascript">// hooks/useTodo.test.js
test(&quot;&#x30BF;&#x30B9;&#x30AF;&#x304C;&#x8FFD;&#x52A0;&#x3067;&#x304D;&#x308B;&#x3053;&#x3068;&quot;, () =&gt; {
  const { result } = renderHook(() =&gt; useTodo());

  act(() =&gt; {
    result.current.addTask();
  });

  expect(result.current.taskList).toHaveLength(1);
});
</code></pre><p></p><p>&#x3053;&#x306E;&#x3088;&#x3046;&#x306B;<strong>&#x66F8;&#x3044;&#x305F;&#x30B3;&#x30FC;&#x30C9;&#x306E;&#x6B63;&#x3057;&#x3055;</strong>&#x3092;&#x81EA;&#x52D5;&#x3067;&#x78BA;&#x8A8D;&#x3067;&#x304D;&#x308B;&#x3053;&#x3068;&#x3082;&#x91CD;&#x8981;&#x3060;&#x3068;&#x611F;&#x3058;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;</p><p>&#x6700;&#x8FD1;&#x306F;AI&#x3092;&#x88DC;&#x52A9;&#x7684;&#x306B;&#x4F7F;&#x3046;&#x6A5F;&#x4F1A;&#x304C;&#x5897;&#x3048;&#x307E;&#x3057;&#x305F;&#x3002;&#x6642;&#x77ED;&#x306B;&#x306A;&#x308B;&#x3057;&#x3001;&#x4F55;&#x3088;&#x308A;&#x697D;&#x306A;&#x306E;&#x3067;&#x3002;<br>&#x3057;&#x304B;&#x3057;&#x3001;<strong>AI&#x304C;&#x66F8;&#x3044;&#x305F;&#x30B3;&#x30FC;&#x30C9;&#x304C;&#x672C;&#x5F53;&#x306B;&#x6B63;&#x3057;&#x3044;&#x304B;&#xFF1F;</strong>&#x3092;&#x5224;&#x65AD;&#x3059;&#x308B;&#x306E;&#x306F;&#x3001;&#x6700;&#x7D42;&#x7684;&#x306B;&#x306F;&#x4EBA;&#x9593;&#x306E;&#x8CAC;&#x4EFB;&#x3067;&#x3059;&#x3002;AI&#x751F;&#x6210;&#x30B3;&#x30FC;&#x30C9;&#x306E;&#x54C1;&#x8CEA;&#x3092;&#x62C5;&#x4FDD;&#x3059;&#x308B;&#x305F;&#x3081;&#x306B;&#x3082;&#x3001;&#x30C6;&#x30B9;&#x30C8;&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x7528;&#x610F;&#x3057;&#x3066;&#x304A;&#x304F;&#x3068;&#x5B89;&#x5FC3;&#x3060;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x3002;</p><hr><h2 id="%E3%81%BE%E3%81%A8%E3%82%81">&#x307E;&#x3068;&#x3081;</h2><p>&#x4ECA;&#x56DE;&#x306E;&#x30EC;&#x30D3;&#x30E5;&#x30FC;&#x3092;&#x901A;&#x3057;&#x3066;&#x3001;&#x4EE5;&#x4E0B;&#x306E;&#x5909;&#x5316;&#x3092;&#x611F;&#x3058;&#x307E;&#x3057;&#x305F;&#x3002;</p><ul><li><strong>1&#x5E74;&#x524D;:</strong> <strong>&#x3069;&#x3046;&#x3084;&#x3063;&#x3066;&#x5B9F;&#x88C5;&#x3059;&#x308B;&#x304B;</strong>&#x306B;&#x5FC5;&#x6B7B;&#x3060;&#x3063;&#x305F;&#x3002;</li><li><strong>&#x73FE;&#x5728;:</strong> <strong>&#x3069;&#x3046;&#x8A2D;&#x8A08;&#x3059;&#x308C;&#x3070;&#x58CA;&#x308C;&#x306B;&#x304F;&#x3044;&#x304B;</strong>&#x3092;&#x8003;&#x3048;&#x3089;&#x308C;&#x308B;&#x3088;&#x3046;&#x306B;&#x306A;&#x3063;&#x305F;&#x3002;</li></ul><p>&#x30B3;&#x30FC;&#x30C9;&#x304C;&#x52D5;&#x304F;&#x306E;&#x306F;&#x5F53;&#x305F;&#x308A;&#x524D;&#x3067;&#x3001;&#x305D;&#x306E;&#x5148;&#x306E;<strong>&#x8AAD;&#x307F;&#x3084;&#x3059;&#x3055;</strong>&#x3084;<strong>&#x76F4;&#x3057;&#x3084;&#x3059;&#x3055;</strong>&#x3092;&#x610F;&#x8B58;&#x3067;&#x304D;&#x308B;&#x3088;&#x3046;&#x306B;&#x306A;&#x3063;&#x305F;&#x306E;&#x304C;&#x3001;&#x3053;&#x306E;1&#x5E74;&#x9593;&#x306E;&#x6700;&#x5927;&#x306E;&#x6210;&#x9577;&#x304B;&#x3082;&#x3057;&#x308C;&#x307E;&#x305B;&#x3093;&#x3002;</p><p>&#x904E;&#x53BB;&#x306E;&#x30B3;&#x30FC;&#x30C9;&#x306F;&#x6065;&#x305A;&#x304B;&#x3057;&#x3044;&#x3082;&#x306E;&#x3067;&#x3059;&#x304C;&#x3001;&#x305D;&#x308C;&#x306F;&#x6210;&#x9577;&#x306E;&#x8A3C;&#x3067;&#x3082;&#x3042;&#x308B;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#xFF01;&#x7686;&#x3055;&#x3093;&#x3082;&#x3001;&#x6614;&#x306E;&#x81EA;&#x5206;&#x306E;&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x30EC;&#x30D3;&#x30E5;&#x30FC;&#x3057;&#x3066;&#x307F;&#x3066;&#x306F;&#x3044;&#x304B;&#x304C;&#x3067;&#x3057;&#x3087;&#x3046;&#x304B;&#xFF1F;&#x304D;&#x3063;&#x3068;&#x65B0;&#x3057;&#x3044;&#x767A;&#x898B;&#x304C;&#x3042;&#x308B;&#x306F;&#x305A;&#x3067;&#x3059;&#x3002;</p>]]></content:encoded></item><item><title><![CDATA[YUMEMI × PlayGround ハッカソンを開催しました]]></title><description><![CDATA[この度、株式会社ゆめみ様から御三方を審査員に迎え、ハッカソンを開催しました。]]></description><link>http://blog.shinonome.io/yumemi-hackathon/</link><guid isPermaLink="false">67e68b5710c4420422a1fb2c</guid><dc:creator><![CDATA[PlayGround]]></dc:creator><pubDate>Mon, 31 Mar 2025 08:14:54 GMT</pubDate><media:content url="http://blog.shinonome.io/content/images/2025/03/----------2025-03-28-21.10.06.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="http://blog.shinonome.io/content/images/2025/03/----------2025-03-28-21.10.06.png" alt="YUMEMI &#xD7; PlayGround &#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x3092;&#x958B;&#x50AC;&#x3057;&#x307E;&#x3057;&#x305F;"><p>&#x7686;&#x69D8;&#x3053;&#x3093;&#x306B;&#x3061;&#x306F;&#x3001;&#x6700;&#x8FD1;&#x9280;&#x9AEA;&#x306B;&#x306A;&#x3063;&#x305F;Tatsuro&#x3067;&#x3059;&#x1F9D1;&#x200D;&#x1F9B3;&#x3002;<br>
&#x984C;&#x540D;&#x306B;&#x8868;&#x8A18;&#x3057;&#x3066;&#x3044;&#x307E;&#x3059;&#x901A;&#x308A;&#x3001;&#x30B3;&#x30DF;&#x30E5;&#x30CB;&#x30C6;&#x30A3;&#x5185;&#x3067;&#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x3092;&#x4F01;&#x753B;&#x30FB;&#x958B;&#x50AC;&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;</p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><h3 id="%E9%96%8B%E5%82%AC%E3%81%AB%E8%87%B3%E3%81%A3%E3%81%9F%E7%B5%8C%E7%B7%AF">&#x958B;&#x50AC;&#x306B;&#x81F3;&#x3063;&#x305F;&#x7D4C;&#x7DEF;</h3>
<p>&#x5E74;&#x672B;&#x306E;&#x30C6;&#x30C3;&#x30AF;&#x30D6;&#x30ED;&#x30B0;&#x306B;&#x3082;&#x63B2;&#x8F09;&#x3057;&#x307E;&#x3057;&#x305F;&#x304C;&#x3001;11&#x6708;&#x306B;Abema&#x30BF;&#x30EF;&#x30FC;&#x3067;&#x958B;&#x50AC;&#x3055;&#x308C;&#x305F;&#x6771;&#x4EAC;Flutter&#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;2024&#x306B;&#x50D5;&#x30FB;yo&#x30FB;Ayato&#x30FB;kocha&#x306E;4&#x4EBA;&#x3067;&#x53C2;&#x52A0;&#x3057;&#x3001;&#x682A;&#x5F0F;&#x4F1A;&#x793E;&#x3086;&#x3081;&#x307F;&#x69D8;( <a href="https://www.yumemi.co.jp/">https://www.yumemi.co.jp/</a> )&#x306E;&#x30B9;&#x30DD;&#x30F3;&#x30B5;&#x30FC;&#x8CDE;&#x3092;&#x3082;&#x304E;&#x53D6;&#x308A;&#x307E;&#x3057;&#x305F;&#x3002;<br>
&#x8CDE;&#x54C1;&#x306E;&#x5185;&#x5BB9;&#x306F;&#x3068;&#x3044;&#x3046;&#x3068;&#x3001;&#x5BE9;&#x67FB;&#x54E1;&#x517C;&#x30FB;&#x3086;&#x3081;&#x307F;&#x69D8;&#x3067;&#x6280;&#x8853;&#x53D6;&#x7DE0;&#x5F79;&#x3092;&#x3055;&#x308C;&#x3066;&#x3044;&#x308B;&#x3001;&#x3088;&#x30FC;&#x305F;&#x3093;&#xFF08;&#x6E21;&#x8FBA;&#x967D;&#x592A;&#xFF09;&#x3055;&#x3093;&#x304C;&#x300C;&#x9858;&#x3044;&#x3092;1&#x3064;&#x53F6;&#x3048;&#x3066;&#x304F;&#x308C;&#x308B;&#x300D;&#x3068;&#x3044;&#x3046;&#x3082;&#x306E;&#x3067;&#x3057;&#x305F;&#x3002;&#xFF08;&#x7389;&#x3092;7&#x3064;&#x96C6;&#x3081;&#x308B;&#x3068;&#x51FA;&#x3066;&#x304F;&#x308B;&#x7684;&#x306A;&#x1F409;&#xFF09;</p>
<!--kg-card-end: markdown--><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="http://blog.shinonome.io/hackathon-bunkrupt/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">&#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x3067;&#x7834;&#x7523;&#x3057;&#x304B;&#x3051;&#x305F;&#x8A71;</div><div class="kg-bookmark-description">&#x4ECA;&#x56DE;&#x306F;&#x3001;&#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x306E;&#x958B;&#x767A;&#x3067;&#x591A;&#x984D;&#x306E;&#x8ACB;&#x6C42;&#x304C;&#x98DB;&#x3093;&#x3067;&#x304D;&#x305F;&#xFF08;&#x98DB;&#x3093;&#x3067;&#x304D;&#x304B;&#x3051;&#x305F;&#x8A71;&#xFF09;&#x3092;&#x3057;&#x3088;&#x3046;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x3002;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="http://blog.shinonome.io/favicon.png" alt="YUMEMI &#xD7; PlayGround &#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x3092;&#x958B;&#x50AC;&#x3057;&#x307E;&#x3057;&#x305F;"><span class="kg-bookmark-author">Shinonome Tech Blog</span><span class="kg-bookmark-publisher">PlayGround</span></div></div><div class="kg-bookmark-thumbnail"><img src="http://blog.shinonome.io/content/images/2024/11/----------2024-11-22-22.46.57.png" alt="YUMEMI &#xD7; PlayGround &#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x3092;&#x958B;&#x50AC;&#x3057;&#x307E;&#x3057;&#x305F;"></div></a></figure><!--kg-card-begin: markdown--><p>&#x305D;&#x3053;&#x3067;&#x3001;&#x8CDE;&#x54C1;&#x3092;&#x4F7F;&#x3063;&#x3066;&#x300C;&#x5F0A;&#x30B3;&#x30DF;&#x30E5;&#x30CB;&#x30C6;&#x30A3;PlayGround&#x3067;&#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x3084;&#x308A;&#x305F;&#x3044;&#x3067;&#x3059;&#x3001;&#x5BE9;&#x67FB;&#x54E1;&#x3084;&#x3063;&#x3066;&#x304F;&#x3060;&#x3055;&#x3044;&#xFF01;&#xFF01;&#x300D;&#x3068;&#x601D;&#x3044;&#x3064;&#x304D;&#x3067;&#x304A;&#x9858;&#x3044;&#x3057;&#x3066;&#x307F;&#x305F;&#x3068;&#x3053;&#x308D;&#x3001;&#x306A;&#x3093;&#x3068;&#x5FEB;&#x304F;&#x4E86;&#x627F;&#x3057;&#x3066;&#x9802;&#x304D;&#x958B;&#x50AC;&#x306B;&#x81F3;&#x308B;&#x3053;&#x3068;&#x306B;&#x306A;&#x308A;&#x307E;&#x3057;&#x305F;&#x3002;<br>
&#x6709;&#x96E3;&#x3044;&#x4E8B;&#x3053;&#x306E;&#x4E0A;&#x306A;&#x3044;&#xFF01;</p>
<h3 id="%E9%96%8B%E4%BC%9A%E5%BC%8F">&#x958B;&#x4F1A;&#x5F0F;</h3>
<p>&#x3068;&#x3044;&#x3046;&#x308F;&#x3051;&#x3067;3/6&#x306B;&#x958B;&#x4F1A;&#x5F0F;&#x3092;&#x958B;&#x50AC;&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;<br>
&#x306A;&#x3093;&#x3068;&#x5BE9;&#x67FB;&#x54E1;&#x306B;&#x306F;&#x3001;&#x3088;&#x30FC;&#x305F;&#x3093;&#x3055;&#x3093;&#x306E;&#x4ED6;&#x306B;&#x3086;&#x3081;&#x307F;&#x69D8;&#x306E;&#x300C;CTO&#x306E;&#x5927;&#x57CE;&#x3055;&#x3093;&#x300D;&#x300C;CDO&#x306E;&#x30EA;&#x30EA;&#x30FC;&#x3055;&#x3093;&#x300D;&#x306B;&#x304A;&#x5F15;&#x304D;&#x53D7;&#x3051;&#x9802;&#x304F;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x307E;&#x3057;&#x305F;&#xFF08;&#x51C4;&#x3059;&#x304E;&#x3066;&#x4F55;&#x3067;&#x6765;&#x3066;&#x304F;&#x3060;&#x3055;&#x3063;&#x305F;&#x306E;&#x304B;&#x672A;&#x3060;&#x306B;&#x3088;&#x304F;&#x308F;&#x304B;&#x3063;&#x3066;&#x306A;&#x3044;&#xFF09;&#x3002;<br>
&#x307E;&#x305F;&#x3001;&#x4ECA;&#x56DE;&#x306E;&#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x306E;&#x30C6;&#x30FC;&#x30DE;&#x306F;&#x300C;&#x30E9;&#x30A4;&#x30D5;&#x300D;&#x306B;&#x6C7A;&#x5B9A;&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;<br>
&#x3088;&#x30FC;&#x305F;&#x3093;&#x3055;&#x3093;&#x306B;&#x30C6;&#x30FC;&#x30DE;&#x3092;&#x6C7A;&#x3081;&#x3066;&#x9802;&#x304D;&#x307E;&#x3057;&#x305F;&#x304C;&#x3001;&#x6C7A;&#x5B9A;&#x7406;&#x7531;&#x306B;&#x95A2;&#x3057;&#x3066;&#x306F;&#x300C;&#x5927;&#x4EBA;&#x3068;&#x5B66;&#x751F;&#x3068;&#x306E;&#x9593;&#x3067;&#x30E9;&#x30A4;&#x30D5;&#x30B9;&#x30BF;&#x30A4;&#x30EB;&#x306E;&#x9055;&#x3044;&#x304C;&#x3042;&#x308B;&#x3093;&#x3058;&#x3083;&#x306A;&#x3044;&#x304B;&#x3046;&#x3093;&#x306C;&#x3093;&#x304B;&#x3093;&#x306C;&#x3093;&#x300D;&#x3068;&#x306E;&#x3053;&#x3068;&#x3067;&#x3057;&#x305F;&#x3002;</p>
<div style="display: flex; justify-content: center; gap: 10px;">
    <img src="http://blog.shinonome.io/content/images/2025/03/----------2025-03-28-21.39.57.png" alt="YUMEMI &#xD7; PlayGround &#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x3092;&#x958B;&#x50AC;&#x3057;&#x307E;&#x3057;&#x305F;" style="max-width: 45%; height: auto;">
    <img src="http://blog.shinonome.io/content/images/2025/03/----------2025-03-28-22.03.37.png" alt="YUMEMI &#xD7; PlayGround &#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x3092;&#x958B;&#x50AC;&#x3057;&#x307E;&#x3057;&#x305F;" style="max-width: 45%; height: auto;">
</div>
<p>&#x30C1;&#x30FC;&#x30E0;&#x6570;&#x306F;4&#xFF08;6&#x4EBA;&#xD7;4&#x30C1;&#x30FC;&#x30E0;&#xFF09;&#x3067;&#x30EC;&#x30AE;&#x30E5;&#x30EC;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x306F;&#x4EE5;&#x4E0B;&#x306E;&#x3088;&#x3046;&#x306B;&#x8A2D;&#x5B9A;&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;</p>
<div style="display: flex; justify-content: center; gap: 10px;">
    <img src="http://blog.shinonome.io/content/images/2025/03/----------2025-03-28-22.06.33.png" alt="YUMEMI &#xD7; PlayGround &#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x3092;&#x958B;&#x50AC;&#x3057;&#x307E;&#x3057;&#x305F;" style="max-width: 45%; height: auto;">
    <img src="http://blog.shinonome.io/content/images/2025/03/----------2025-03-28-22.08.03.png" alt="YUMEMI &#xD7; PlayGround &#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x3092;&#x958B;&#x50AC;&#x3057;&#x307E;&#x3057;&#x305F;" style="max-width: 45%; height: auto;">
</div><!--kg-card-end: markdown--><!--kg-card-begin: markdown--><h3 id="%E9%96%8B%E7%99%BA%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88">&#x958B;&#x767A;&#x30B9;&#x30BF;&#x30FC;&#x30C8;</h3>
<p>&#x3055;&#x3066;&#x3001;20&#x65E5;&#x9593;&#x306E;&#x958B;&#x767A;&#x304C;&#x59CB;&#x307E;&#x308A;&#x307E;&#x3057;&#x305F;&#x3002;<br>
&#x4EE5;&#x4E0B;&#x30B3;&#x30DF;&#x30E5;&#x30CB;&#x30C6;&#x30A3;&#x5185;&#x306E;Mastodon&#x30B5;&#x30FC;&#x30D0;&#x3067;&#x3059;&#x3001;&#x6C17;&#x5408;&#x3044;&#x5165;&#x3063;&#x3066;&#x307E;&#x3059;&#x306D;&#x3002;</p>
<div style="display: flex; justify-content: center; gap: 10px;">
    <img src="http://blog.shinonome.io/content/images/2025/03/----------2025-03-29-19.10.22.png" alt="YUMEMI &#xD7; PlayGround &#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x3092;&#x958B;&#x50AC;&#x3057;&#x307E;&#x3057;&#x305F;" style="max-width: 45%; height: auto;">
</div>
<p>&#x3053;&#x3053;&#x304B;&#x3089;&#x306F;&#x50D5;&#x306E;&#x30C1;&#x30FC;&#x30E0;&#x306E;&#x30A2;&#x30D7;&#x30EA;&#x958B;&#x767A;&#x306B;&#x3064;&#x3044;&#x3066;&#x304A;&#x8A71;&#x3057;&#x3057;&#x307E;&#x3059;&#x3002;<br>
&#x4ED6;&#x30C1;&#x30FC;&#x30E0;&#x304C;&#x958B;&#x767A;&#x3057;&#x305F;&#x30A2;&#x30D7;&#x30EA;&#x306B;&#x95A2;&#x3057;&#x3066;&#x306F;&#x3001;&#x5F8C;&#x65E5;&#x5225;&#x8A18;&#x4E8B;&#x3067;&#x4E0A;&#x304C;&#x308B;&#x304B;&#x3082;&#xFF1F;&#x3054;&#x671F;&#x5F85;&#x304F;&#x3060;&#x3055;&#x3044;&#x3002;<br>
&#x65E9;&#x901F;&#x3067;&#x3059;&#x304C;&#x3001;&#x50D5;&#x305F;&#x3061;Team3&#x304C;&#x958B;&#x767A;&#x3057;&#x305F;&#x30A2;&#x30D7;&#x30EA;&#x306F;&#x3053;&#x3061;&#x3089;&#x300C;wa-live&#x300D;&#x3067;&#x3059;&#xFF01;!<br>
&#x67D0;&#x30C1;&#x30E3;&#x30C3;&#x30C8;&#x30A2;&#x30D7;&#x30EA;&#x306E;&#x3088;&#x3046;&#x306A;&#x30ED;&#x30FC;&#x30AB;&#x30EB;&#x30B3;&#x30DF;&#x30E5;&#x30CB;&#x30C6;&#x30A3;&#x5185;&#x3067;&#x5927;&#x559C;&#x5229;&#x3092;&#x884C;&#x3046;&#x30A2;&#x30D7;&#x30EA;&#x3067;&#x3059;&#x3002;</p>
<!--kg-card-end: markdown--><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/tatsurou9003/yumemi-pg-hackathon-team3"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - tatsurou9003/yumemi-pg-hackathon-team3</div><div class="kg-bookmark-description">Contribute to tatsurou9003/yumemi-pg-hackathon-team3 development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt="YUMEMI &#xD7; PlayGround &#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x3092;&#x958B;&#x50AC;&#x3057;&#x307E;&#x3057;&#x305F;"><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">tatsurou9003</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/1c164412bac81ffe0bead4cda8d6b7c1e3be44d5f5ea3ebe38dc5b29e3d27b9e/tatsurou9003/yumemi-pg-hackathon-team3" alt="YUMEMI &#xD7; PlayGround &#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x3092;&#x958B;&#x50AC;&#x3057;&#x307E;&#x3057;&#x305F;"></div></a></figure><!--kg-card-begin: markdown--><p><img src="http://blog.shinonome.io/content/images/2025/03/----------2025-03-28-22.38.14-1.png" alt="YUMEMI &#xD7; PlayGround &#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x3092;&#x958B;&#x50AC;&#x3057;&#x307E;&#x3057;&#x305F;" loading="lazy"><br>
<img src="http://blog.shinonome.io/content/images/2025/03/----------2025-03-28-23.13.20.png" alt="YUMEMI &#xD7; PlayGround &#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x3092;&#x958B;&#x50AC;&#x3057;&#x307E;&#x3057;&#x305F;" loading="lazy"><br>
&#x50D5;&#x305F;&#x3061;&#x306E;&#x30C1;&#x30FC;&#x30E0;&#x306F;&#x3001;<br>
&#x30C7;&#x30B6;&#x30A4;&#x30CA;&#x30FC;1&#x540D;&#x30FB;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x30A8;&#x30F3;&#x30B8;&#x30CB;&#x30A2;3&#x540D;&#x30FB;&#x30D0;&#x30C3;&#x30AF;&#x30A8;&#x30F3;&#x30C9;&#x30A8;&#x30F3;&#x30B8;&#x30CB;&#x30A2;1&#x540D;&#xFF08;&#x50D5;&#xFF09;&#x306E;5&#x540D;&#x3067;&#x958B;&#x767A;&#x3092;&#x884C;&#x3044;&#x3001;<br>
&#x958B;&#x767A;&#x306E;&#x6D41;&#x308C;&#x306F;&#x3001;&#x5168;&#x54E1;&#x3067;&#x30A2;&#x30A4;&#x30C7;&#x30A2;&#x51FA;&#x3057; &#x2192; &#x4ED5;&#x69D8;&#x6C7A;&#x3081; &#x2192; &#x30C7;&#x30B6;&#x30A4;&#x30F3; &#x2192; &#x5B9F;&#x88C5;&#x3000;&#x306E;&#x304A;&#x6C7A;&#x307E;&#x308A;&#x306E;&#x6D41;&#x308C;&#x3067;&#x3057;&#x305F;&#x3002;</p>
<h4 id="%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3">&#x30C7;&#x30B6;&#x30A4;&#x30F3;</h4>
<p><img src="http://blog.shinonome.io/content/images/2025/03/----------2025-03-28-22.46.32.png" alt="YUMEMI &#xD7; PlayGround &#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x3092;&#x958B;&#x50AC;&#x3057;&#x307E;&#x3057;&#x305F;" loading="lazy"><br>
&#x30C7;&#x30B6;&#x30A4;&#x30CA;&#x30FC;&#x306E;Mio&#x3055;&#x3093;&#x306B;&#x306F;&#x7A3C;&#x50CD;&#x6642;&#x9593;&#x304C;&#x53D6;&#x308C;&#x306A;&#x3044;&#x4E2D;&#x3001;&#x7121;&#x7406;&#x3092;&#x8A00;&#x3063;&#x3066;&#x30C7;&#x30B6;&#x30A4;&#x30F3;&#x3092;&#x4F5C;&#x88FD;&#x3057;&#x3066;&#x9802;&#x304D;&#x307E;&#x3057;&#x305F;&#x3002;<br>
&#x30DE;&#x30B8;&#x3067;&#x611F;&#x8B1D;&#x1F64F;</p>
<h4 id="%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3">&#x30A2;&#x30FC;&#x30AD;&#x30C6;&#x30AF;&#x30C1;&#x30E3;</h4>
<p><img src="http://blog.shinonome.io/content/images/2025/03/----.png" alt="YUMEMI &#xD7; PlayGround &#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x3092;&#x958B;&#x50AC;&#x3057;&#x307E;&#x3057;&#x305F;" loading="lazy"><br>
&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x30A8;&#x30F3;&#x30B8;&#x30CB;&#x30A2;&#x306E;Luck, Ren, Ryu&#x306E;3&#x4EBA;&#x306F;React&amp;Vite&#x3067;&#x958B;&#x767A;&#x3092;&#x884C;&#x3044;&#x3001;Orval&#x3067;API&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x306E;&#x30B3;&#x30FC;&#x30C9;&#x81EA;&#x52D5;&#x751F;&#x6210;&#x3092;&#x884C;&#x3063;&#x305F;&#x308A;&#x3001;TanstackRouter&#x3067;&#x30EB;&#x30FC;&#x30C6;&#x30A3;&#x30F3;&#x30B0;&#x3092;&#x5B9F;&#x73FE;&#x3057;&#x305F;&#x308A;&#x3068;&#x30E2;&#x30C0;&#x30F3;&#x306A;&#x6280;&#x8853;&#x69CB;&#x6210;&#x306B;&#x6311;&#x6226;&#x3057;&#x3066;&#x9811;&#x5F35;&#x3063;&#x3066;&#x304F;&#x308C;&#x307E;&#x3057;&#x305F;&#x3002;<br>
&#x30D0;&#x30C3;&#x30AF;&#x30A8;&#x30F3;&#x30C9;&#x30FB;&#x30A4;&#x30F3;&#x30D5;&#x30E9;&#x306F;&#x50D5;&#x304C;&#x62C5;&#x5F53;&#x3057;&#x307E;&#x3057;&#x305F;&#x304C;&#x3001;terraform&#x3067;AWS&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x306E;&#x69CB;&#x6210;&#x7BA1;&#x7406;&#x3092;&#x884C;&#x3044;&#x3001;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x306F;Amplify&#x3067;&#x30C7;&#x30D7;&#x30ED;&#x30A4;&#x30FB;&#x8A8D;&#x8A3C;&#x6A5F;&#x80FD;&#x306F;Cognito&#x3067;&#x5B9F;&#x88C5;&#x30FB;&#x30D0;&#x30C3;&#x30AF;&#x30A8;&#x30F3;&#x30C9;&#x90E8;&#x5206;&#x306F;Lambda&#x30FB;APIGateway&#x306E;&#x30B5;&#x30FC;&#x30D0;&#x30EC;&#x30B9;&#x69CB;&#x6210;&#x3067;&#x5B9F;&#x88C5;&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;</p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><h3 id="%E8%8B%A6%E5%8A%B4%E3%81%97%E3%81%9F%E5%AE%9F%E8%A3%85%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88">&#x82E6;&#x52B4;&#x3057;&#x305F;&#x5B9F;&#x88C5;&#x30DD;&#x30A4;&#x30F3;&#x30C8;</h3>
<p>&#x4EE5;&#x4E0B;&#x306E;&#x6A5F;&#x80FD;&#x3092;&#x5B9F;&#x88C5;&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;</p>
<ul>
<li>&#x30B0;&#x30EB;&#x30FC;&#x30D7;&#x4F5C;&#x6210;</li>
<li>&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x62DB;&#x5F85;&#x3001;&#x53C2;&#x52A0;</li>
<li>&#x30EA;&#x30A2;&#x30EB;&#x30BF;&#x30A4;&#x30E0;&#x30C1;&#x30E3;&#x30C3;&#x30C8;&#x3001;&#x5927;&#x559C;&#x5229;&#x30C6;&#x30FC;&#x30DE;&#x6295;&#x7A3F;</li>
<li>&#x56DE;&#x7B54;&#x3001;&#x3044;&#x3044;&#x306D;</li>
<li>&#x30E9;&#x30F3;&#x30AD;&#x30F3;&#x30B0;&#x96C6;&#x8A08;</li>
</ul>
<p>&#x3053;&#x306E;&#x4E2D;&#x3067;&#x7279;&#x306B;&#x82E6;&#x52B4;&#x3057;&#x305F;&#x306E;&#x306F;&#x30C1;&#x30E3;&#x30C3;&#x30C8;&#x753B;&#x9762;&#x3067;&#x30EA;&#x30A2;&#x30EB;&#x30BF;&#x30A4;&#x30E0;&#x306B;&#x6295;&#x7A3F;&#x3092;&#x884C;&#x3046;&#x6A5F;&#x80FD;&#x3067;&#x3059;&#x306D;&#xFF08;&#x50D5;&#x304C;&#xFF09;&#x3002;<br>
&#x81EA;&#x524D;&#x3067;WebSocket&#x3092;&#x5B9F;&#x88C5;&#x3059;&#x308B;&#x306E;&#x304C;&#x9762;&#x5012;&#x305D;&#x3046;&#x3060;&#x3063;&#x305F;&#x306E;&#x3067;&#x3001;<br>
&#x958B;&#x767A;&#x306B;&#x6163;&#x308C;&#x3066;&#x3044;&#x308B;AWS&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x306E;&#x4E2D;&#x304B;&#x3089;APIGateway WebSocketAPI&#x306E;&#x5B58;&#x5728;&#x3092;&#x77E5;&#x308A;&#x9078;&#x5B9A;&#x3057;&#x3066;&#x307F;&#x307E;&#x3057;&#x305F;&#x3002;</p>
<!--kg-card-end: markdown--><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-websocket-api-overview.html"><div class="kg-bookmark-content"><div class="kg-bookmark-title">API Gateway &#x3067;&#x306E; WebSocket API &#x306E;&#x6982;&#x8981; - Amazon API Gateway</div><div class="kg-bookmark-description">WebSocket API &#x306B;&#x3064;&#x3044;&#x3066;&#x8AAC;&#x660E;&#x3057;&#x307E;&#x3059;&#x3002;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://docs.aws.amazon.com/assets/images/favicon.ico" alt="YUMEMI &#xD7; PlayGround &#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x3092;&#x958B;&#x50AC;&#x3057;&#x307E;&#x3057;&#x305F;"><span class="kg-bookmark-author">Amazon API Gateway</span></div></div></a></figure><!--kg-card-begin: markdown--><p>WebSocket&#x63A5;&#x7D9A;&#x6642;&#x306B;Connection&#x3092;DynamoDB&#x306B;&#x4FDD;&#x5B58;&#x3001;&#x5207;&#x65AD;&#x6642;&#x306B;&#x524A;&#x9664;&#x3057;&#x307E;&#x3059;&#x3002;<br>
&#x30E1;&#x30C3;&#x30BB;&#x30FC;&#x30B8;&#x306F;DynamoDB&#x306B;&#x4FDD;&#x5B58;&#x3057;&#x305F;&#x3042;&#x3068;&#x3001;&#x30D6;&#x30ED;&#x30FC;&#x30C9;&#x30AD;&#x30E3;&#x30B9;&#x30C8;&#x3067;&#x4ED6;&#x306E;&#x63A5;&#x7D9A;Connection&#x306B;&#x9001;&#x4FE1;&#x3057;&#x307E;&#x3059;&#x3002;<br>
&#x5B9F;&#x88C5;&#x81EA;&#x4F53;&#x306F;&#x3055;&#x307B;&#x3069;&#x96E3;&#x3057;&#x304F;&#x3042;&#x308A;&#x307E;&#x305B;&#x3093;&#x304C;&#x3001;http&#x3068;&#x9055;&#x3063;&#x3066;ws&#x901A;&#x4FE1;&#x306E;&#x6982;&#x5FF5;&#x3092;&#x7406;&#x89E3;&#x3059;&#x308B;&#x306E;&#x304C;&#x5927;&#x5909;&#x3060;&#x3063;&#x305F;&#x304B;&#x3082;&#x3002;</p>
<pre><code class="language-python">// lambda_functions/websocket/connect.py
def lambda_handler(event, context):
    try:
        # &#x63A5;&#x7D9A;ID&#x3092;&#x30A4;&#x30D9;&#x30F3;&#x30C8;&#x304B;&#x3089;&#x53D6;&#x5F97;
        connection_id = event[&quot;requestContext&quot;][&quot;connectionId&quot;]
        
        # &#x30AF;&#x30A8;&#x30EA;&#x30D1;&#x30E9;&#x30E1;&#x30FC;&#x30BF;&#x304B;&#x3089;&#x30E6;&#x30FC;&#x30B6;&#x30FC;ID&#x3068;&#x30B0;&#x30EB;&#x30FC;&#x30D7;ID&#x3092;&#x53D6;&#x5F97;
        query_params = event.get(&quot;queryStringParameters&quot;, {}) or {}
        user_id = query_params.get(&quot;userId&quot;, &quot;&quot;)
        group_id = query_params.get(&quot;groupId&quot;, &quot;&quot;)
        
        # &#x73FE;&#x5728;&#x306E;&#x30BF;&#x30A4;&#x30E0;&#x30B9;&#x30BF;&#x30F3;&#x30D7;&#x3092;&#x53D6;&#x5F97;
        current_time = int(datetime.now().timestamp() * 1000)
        
        # &#x63A5;&#x7D9A;&#x60C5;&#x5831;&#x3092;DynamoDB&#x306B;&#x4FDD;&#x5B58;
        connections_table.put_item(
            Item={
                &quot;connectionId&quot;: connection_id,  
                &quot;userId&quot;: user_id,              
                &quot;groupId&quot;: group_id,            
                &quot;createdAt&quot;: current_time
            }
        )
        
        print(f&quot;&#x63A5;&#x7D9A;&#x304C;&#x78BA;&#x7ACB;&#x3055;&#x308C;&#x307E;&#x3057;&#x305F;: connectionId={connection_id}, userId={user_id}, groupId={group_id}&quot;)
        
        return {
            &quot;statusCode&quot;: 200
        }
        
    except Exception as e:
        print(f&quot;&#x30A8;&#x30E9;&#x30FC;&#x304C;&#x767A;&#x751F;&#x3057;&#x307E;&#x3057;&#x305F;: {str(e)}&quot;)
        return {
            &quot;statusCode&quot;: 200
        }
</code></pre>
<pre><code class="language-python">// lambda_functions/websocket/disconnect.py
def lambda_handler(event, context):
    # &#x63A5;&#x7D9A;ID&#x306E;&#x53D6;&#x5F97;
    connection_id = event[&quot;requestContext&quot;][&quot;connectionId&quot;]
    
    # &#x63A5;&#x7D9A;&#x60C5;&#x5831;&#x3092;DynamoDB&#x304B;&#x3089;&#x524A;&#x9664;
    connections_table.delete_item(
        Key={
            &quot;connectionId&quot;: connection_id
        }
    )
    
    return {&quot;statusCode&quot;: 200}
</code></pre>
<pre><code class="language-python">// lambda_functions/websocket/send_message.py
def lambda_handler(event, context):
    # &#x63A5;&#x7D9A;ID&#x306E;&#x53D6;&#x5F97;
    connection_id = event[&quot;requestContext&quot;][&quot;connectionId&quot;]

    # API Gateway Management API&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;
    api_endpoint = f&quot;https://{event[&apos;requestContext&apos;][&apos;domainName&apos;]}/{event[&apos;requestContext&apos;][&apos;stage&apos;]}&quot;
    api_gw = boto3.client(&quot;apigatewaymanagementapi&quot;, endpoint_url=api_endpoint)
    
    try:
     &#x3000;&#x3000;// &#x5272;&#x611B;&#xFF08;S3&#x306B;&#x753B;&#x50CF;&#x30A2;&#x30C3;&#x30D7;&#x30ED;&#x30FC;&#x30C9;&#x3001;DynamoDB&#x306B;&#x30A2;&#x30A4;&#x30C6;&#x30E0;&#x3092;&#x767B;&#x9332;&#x7B49;&#xFF09;&#x30FB;&#x30FB;&#x30FB;
       
        # &#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x306B;&#x9001;&#x4FE1;&#x3059;&#x308B;&#x30E1;&#x30C3;&#x30BB;&#x30FC;&#x30B8;&#x3092;&#x4F5C;&#x6210;
        send_data = {
            &quot;messageId&quot;: message_id,
            &quot;groupId&quot;: body[&quot;groupId&quot;],
            &quot;messageType&quot;: body[&quot;messageType&quot;], # CHAT, THEME
            &quot;messageText&quot;: body[&quot;messageText&quot;],
            &quot;messageImage&quot;: message_image_url,
            &quot;createdBy&quot;: user_info, # &#x9001;&#x4FE1;&#x8005;&#x306E;&#x60C5;&#x5831;
            &quot;createdAt&quot;: created_at,
            &quot;prizeText&quot;: body.get(&quot;prizeText&quot;, &quot;&quot;),
            &quot;deadline&quot;: body.get(&quot;deadline&quot;, &quot;&quot;)
        }
        
        # &#x540C;&#x3058;&#x30B0;&#x30EB;&#x30FC;&#x30D7;&#x5185;&#x306E;&#x5168;&#x63A5;&#x7D9A;&#x306B;&#x9001;&#x4FE1;
        # &#x9001;&#x4FE1;&#x3059;&#x308B;&#x30B0;&#x30EB;&#x30FC;&#x30D7;&#x306E;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x306E;&#x30B3;&#x30CD;&#x30AF;&#x30B7;&#x30E7;&#x30F3;&#x3092;&#x53D6;&#x5F97;
        group_connections = connections_table.query(
            IndexName=&quot;GroupIdIndex&quot;,
            KeyConditionExpression=Key(&quot;groupId&quot;).eq(body[&quot;groupId&quot;])
        )
        
        # &#x9001;&#x4FE1;&#x8005;&#x4EE5;&#x5916;&#x306E;&#x5168;&#x63A5;&#x7D9A;&#x306B;&#x30E1;&#x30C3;&#x30BB;&#x30FC;&#x30B8;&#x3092;&#x9001;&#x4FE1;
        for connection in group_connections.get(&quot;Items&quot;, []):
            try:
                api_gw.post_to_connection(
                    ConnectionId=connection[&quot;connectionId&quot;],
                    Data=json.dumps(send_data)
                )
            except Exception as e:
                # &#x7121;&#x52B9;&#x306A;&#x63A5;&#x7D9A;&#x306F;&#x524A;&#x9664;
                if &quot;GoneException&quot; in str(e):
                    connections_table.delete_item(
                        Key={&quot;connectionId&quot;: connection[&quot;connectionId&quot;]}
                    )
        
        return {&quot;statusCode&quot;: 200}
    
    except Exception as e:
        print(f&quot;&#x30A8;&#x30E9;&#x30FC;: {str(e)}&quot;)
        return {&quot;statusCode&quot;: 500, &quot;body&quot;: str(e)}
</code></pre>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><p>&#x3053;&#x3093;&#x306A;&#x611F;&#x3058;&#x3067;&#x5B9F;&#x88C5;&#x3057;&#x3066;&#x672C;&#x756A;&#x3067;&#x30C7;&#x30E2;&#x3092;&#x884C;&#x3046;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x307E;&#x3057;&#x305F;&#x3002;<br>
&#x5FB9;&#x591C;&#x3067;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30C1;&#x30FC;&#x30E0;&#x3068;&#x7E4B;&#x304E;&#x8FBC;&#x3093;&#x3060;&#x7532;&#x6590;&#x304C;&#x3042;&#x308A;&#x307E;&#x3057;&#x305F;&#x3002;&#xFF08;&#x307B;&#x307C;LI&#x25CB;E&#x3084;&#x306A;&#x3044;&#x304B;&#xFF09;</p>
<div style="display: flex; justify-content: center; gap: 10px;">
    <img src="http://blog.shinonome.io/content/images/2025/03/----------2025-03-29-0.02.46.png" alt="YUMEMI &#xD7; PlayGround &#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x3092;&#x958B;&#x50AC;&#x3057;&#x307E;&#x3057;&#x305F;" style="max-width: 45%; height: auto;">
</div>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><h3 id="%E6%88%90%E6%9E%9C%E7%99%BA%E8%A1%A8">&#x6210;&#x679C;&#x767A;&#x8868;</h3>
<p>&#x305D;&#x3093;&#x306A;&#x3053;&#x3093;&#x306A;&#x3067;3/27&#x306B;&#x6210;&#x679C;&#x767A;&#x8868;&#x3092;&#x884C;&#x3044;&#x3001;&#x5BE9;&#x67FB;&#x54E1;&#x5FA1;&#x4E09;&#x65B9;&#x306B;&#x53B3;&#x6B63;&#x306A;&#x308B;&#x5BE9;&#x67FB;&#x53CA;&#x3073;FB&#x3092;&#x3057;&#x3066;&#x9802;&#x304D;&#x307E;&#x3057;&#x305F;&#x3002;<br>
&#x512A;&#x52DD;&#x30C1;&#x30FC;&#x30E0;&#x306F;&#x3001;Team4&#x306E;&#x30B2;&#x30C6;&#x30E2;&#x30CE;&#x7248;&#x30AF;&#x30C3;&#x25CB;&#x30D1;&#x30C3;&#x30C9;&#x300C;Cook Wild&#x300D;&#x3067;&#x3057;&#x305F;&#x1F3C6;<br>
&#x5B9F;&#x88C5;&#x5185;&#x5BB9;&#x3082;&#x3055;&#x308B;&#x3053;&#x3068;&#x306A;&#x304C;&#x3089;&#x3001;&#x30D5;&#x30A3;&#x30FC;&#x30EB;&#x30C9;&#x30EF;&#x30FC;&#x30AF;&#x3092;&#x901A;&#x3057;&#x305F;&#x30A2;&#x30A4;&#x30C7;&#x30A2;&#x306E;&#x4F5C;&#x308A;&#x8FBC;&#x307F;&#x304C;&#x51C4;&#x307E;&#x3058;&#x304B;&#x3063;&#x305F;&#x3067;&#x3059;&#x3002;<br>
&#xFF08;Team4&#x542B;&#x3081;&#x3001;&#x4ED6;&#x30C1;&#x30FC;&#x30E0;&#x306E;&#x30A2;&#x30D7;&#x30EA;&#x306B;&#x95A2;&#x3057;&#x3066;&#x306F;&#x5225;&#x8A18;&#x4E8B;&#x306B;&#x3066;&#x7D39;&#x4ECB;&#x3057;&#x3066;&#x9802;&#x304F;&#x4E88;&#x5B9A;&#x3067;&#x3059;&#xFF09;</p>
<div style="display: flex; justify-content: center; gap: 10px;">
    <img src="http://blog.shinonome.io/content/images/2025/03/----------2025-03-29-0.34.45.png" alt="YUMEMI &#xD7; PlayGround &#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x3092;&#x958B;&#x50AC;&#x3057;&#x307E;&#x3057;&#x305F;" style="max-width: 45%; height: auto;">
    <img src="http://blog.shinonome.io/content/images/2025/03/----------2025-03-29-0.30.17.png" alt="YUMEMI &#xD7; PlayGround &#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x3092;&#x958B;&#x50AC;&#x3057;&#x307E;&#x3057;&#x305F;" style="max-width: 45%; height: auto;">
</div>
<div style="display: flex; justify-content: center; gap: 10px;">
    <img src="http://blog.shinonome.io/content/images/2025/03/----------2025-03-29-0.31.20.png" alt="YUMEMI &#xD7; PlayGround &#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x3092;&#x958B;&#x50AC;&#x3057;&#x307E;&#x3057;&#x305F;" style="max-width: 45%; height: auto;">
    <img src="http://blog.shinonome.io/content/images/2025/03/----------2025-03-29-0.39.34.png" alt="YUMEMI &#xD7; PlayGround &#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x3092;&#x958B;&#x50AC;&#x3057;&#x307E;&#x3057;&#x305F;" style="max-width: 45%; height: auto;">
</div><!--kg-card-end: markdown--><!--kg-card-begin: markdown--><h3 id="%E7%B7%8F%E6%8B%AC">&#x7DCF;&#x62EC;</h3>
<p>&#x3053;&#x306E;&#x5EA6;&#x306F;&#x3001;&#x682A;&#x5F0F;&#x4F1A;&#x793E;&#x3086;&#x3081;&#x307F;&#x69D8;&#x304B;&#x3089;&#x5BE9;&#x67FB;&#x54E1;&#x3068;&#x3057;&#x3066;&#x5FA1;&#x4E09;&#x65B9;&#x3092;&#x304A;&#x62DB;&#x304D;&#x3057;&#x3066;&#x3053;&#x306E;&#x3088;&#x3046;&#x306A;&#x30A4;&#x30D9;&#x30F3;&#x30C8;&#x3092;&#x958B;&#x50AC;&#x3059;&#x308B;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x307E;&#x3057;&#x305F;&#xFF08;&#x5B66;&#x751F;&#x4E00;&#x540C;&#x3001;&#x611F;&#x8B1D;&#x3057;&#x3066;&#x3082;&#x3057;&#x304D;&#x308C;&#x307E;&#x305B;&#x3093;&#x1F64F;&#xFF09;&#x3002;<br>
&#x672C;&#x30A4;&#x30D9;&#x30F3;&#x30C8;&#x3092;&#x901A;&#x3058;&#x3066;&#x3001;&#x30B3;&#x30DF;&#x30E5;&#x30CB;&#x30C6;&#x30A3;&#x5185;&#x306E;&#x958B;&#x767A;&#x610F;&#x6B32;&#x304C;&#x683C;&#x6BB5;&#x306B;&#x9AD8;&#x307E;&#x3063;&#x305F;&#x3053;&#x3068;&#x3082;&#x8A00;&#x3046;&#x307E;&#x3067;&#x3082;&#x3042;&#x308A;&#x307E;&#x305B;&#x3093;&#x3057;&#x3001;&#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x3067;&#x6280;&#x8853;&#x529B;&#x3084;&#x30C1;&#x30FC;&#x30E0;&#x958B;&#x767A;&#x306E;&#x7D20;&#x990A;&#x3092;&#x8EAB;&#x306B;&#x3064;&#x3051;&#x308B;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x305F;&#x5B66;&#x751F;&#x304C;&#x5927;&#x534A;&#x3060;&#x3068;&#x601D;&#x308F;&#x308C;&#x307E;&#x3059;&#x3002;<br>
&#x3053;&#x306E;&#x52E2;&#x3044;&#x306E;&#x307E;&#x307E;&#x30B3;&#x30DF;&#x30E5;&#x30CB;&#x30C6;&#x30A3;&#x306E;&#x6D3B;&#x6C17;&#x304C;&#x66F4;&#x306B;&#x5897;&#x3057;&#x3066;&#x6B32;&#x3057;&#x3044;&#x306A;&#x3068;&#x5207;&#x306B;&#x9858;&#x3044;&#x307E;&#x3059;&#x1F525;</p>
<div style="display: flex; justify-content: center; gap: 10px;">
    <img src="http://blog.shinonome.io/content/images/2025/03/----------2025-03-29-0.52.21-1.png" alt="YUMEMI &#xD7; PlayGround &#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x3092;&#x958B;&#x50AC;&#x3057;&#x307E;&#x3057;&#x305F;" style="max-width: 45%; height: auto;">
    <img src="http://blog.shinonome.io/content/images/2025/03/----------2025-03-31-18.24.29.png" alt="YUMEMI &#xD7; PlayGround &#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x3092;&#x958B;&#x50AC;&#x3057;&#x307E;&#x3057;&#x305F;" style="max-width: 45%; height: auto;">
</div>
&#x6539;&#x3081;&#x3066;Team4&#x306E;&#x7686;&#x3055;&#x3093;&#x304A;&#x3081;&#x3067;&#x3068;&#x3046;&#x3054;&#x3056;&#x3044;&#x307E;&#x3059;&#x3002;&#x8CDE;&#x54C1;&#x306E;&#x30AE;&#x30D5;&#x30C8;&#x5238;5000&#x5186;&#x5206;&#x3001;&#x6709;&#x52B9;&#x6D3B;&#x7528;&#x3057;&#x3066;&#x304F;&#x3060;&#x3055;&#x3044;&#x3002;
<p>&#x5BE9;&#x67FB;&#x54E1;&#x3068;&#x3057;&#x3066;&#x304A;&#x8D8A;&#x3057;&#x304F;&#x3060;&#x3055;&#x3063;&#x305F;&#x3001;&#x3088;&#x30FC;&#x305F;&#x3093;&#x3055;&#x3093;&#x30FB;&#x30EA;&#x30EA;&#x30FC;&#x3055;&#x3093;&#x30FB;&#x5927;&#x57CE;&#x3055;&#x3093;&#x3001;&#x672C;&#x5F53;&#x306B;&#x3042;&#x308A;&#x304C;&#x3068;&#x3046;&#x3054;&#x3056;&#x3044;&#x307E;&#x3057;&#x305F;&#x3002;<br>
&#x305D;&#x308C;&#x3067;&#x306F;&#x307E;&#x305F;&#x3001;&#x3069;&#x3053;&#x304B;&#x3067;&#x304A;&#x4F1A;&#x3044;&#x3057;&#x307E;&#x3057;&#x3087;&#x3046;&#x1F60E; &#x3055;&#x3088;&#x3046;&#x306A;&#x3089;&#xFF01;&#xFF01;&#xFF08;&#x4ED6;&#x30C1;&#x30FC;&#x30E0;&#x306E;&#x958B;&#x767A;&#x8A18;&#x4E8B;&#x3082;&#x304A;&#x697D;&#x3057;&#x307F;&#x306B;&#xFF09;</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[【Flutter】Dashちゃんを喋らせよう！Geminiで始めるチャットボットアプリ開発超入門]]></title><description><![CDATA[Flutter×Geminiで始めるチャットボットアプリ開発超入門。Dashちゃんと会話できるチャットボットを作りながら学びます。]]></description><link>http://blog.shinonome.io/flutter-dash-chat-bot/</link><guid isPermaLink="false">676bd77584f04652f62049de</guid><category><![CDATA[モバイル]]></category><dc:creator><![CDATA[PlayGround]]></dc:creator><pubDate>Wed, 25 Dec 2024 14:56:09 GMT</pubDate><media:content url="http://blog.shinonome.io/content/images/2024/12/----------2024-12-25-23.30.22.png" medium="image"/><content:encoded><![CDATA[<h2 id="%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">&#x306F;&#x3058;&#x3081;&#x306B;</h2><img src="http://blog.shinonome.io/content/images/2024/12/----------2024-12-25-23.30.22.png" alt="&#x3010;Flutter&#x3011;Dash&#x3061;&#x3083;&#x3093;&#x3092;&#x558B;&#x3089;&#x305B;&#x3088;&#x3046;&#xFF01;Gemini&#x3067;&#x59CB;&#x3081;&#x308B;&#x30C1;&#x30E3;&#x30C3;&#x30C8;&#x30DC;&#x30C3;&#x30C8;&#x30A2;&#x30D7;&#x30EA;&#x958B;&#x767A;&#x8D85;&#x5165;&#x9580;"><p>&#x30E1;&#x30EA;&#x30AF;&#x30EA;&#x3002;</p><p><a href="https://qiita.com/advent-calendar/2024/playground">PlayGround Advent Calendar 2024</a>&#x306E;25&#x65E5;&#x76EE;&#x3001;&#x30E9;&#x30B9;&#x30C8;&#x30D0;&#x30C3;&#x30BF;&#x30FC;&#x3092;&#x62C5;&#x5F53;&#x3055;&#x305B;&#x3066;&#x3044;&#x305F;&#x3060;&#x304F;OB&#x306E;yo&#x3067;&#x3059;&#x3002;</p><p>&#x5148;&#x6708;&#x3001;<a href="https://x.com/tyoflutterhack">Tokyo Flutter Hackathon 2024</a>&#xFF08;&#x4EE5;&#x4E0B;Flutter&#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#xFF09;&#x306B;<a href="https://shinonome.com/services/playground">PlayGround</a>&#x306E;&#x30E1;&#x30F3;&#x30D0;&#x30FC;&#x3067;&#x53C2;&#x52A0;&#x3057;&#x3001;&#x3042;&#x308A;&#x304C;&#x305F;&#x3044;&#x3053;&#x3068;&#x306B;&#x7279;&#x5225;&#x8CDE;&#x3067;&#x3042;&#x308B;&#x300C;&#x3086;&#x3081;&#x307F;&#x8CDE;&#x300D;&#x3092;&#x53D7;&#x8CDE;&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;</p><p>&#x79C1;&#x305F;&#x3061;&#x30C1;&#x30FC;&#x30E0;PlayGround&#x306F;&#x3001;&#x300C;REPOSI&#x9CE5;&#x300D;&#x3068;&#x3044;&#x3046;&#x30A2;&#x30D7;&#x30EA;&#x3092;&#x4F5C;&#x6210;&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;REPOSI&#x9CE5;&#x3068;&#x306F;&#x3001;GitHub&#x306E;Dart&#x306E;&#x8349;&#xFF08;=&#x30B3;&#x30F3;&#x30C8;&#x30EA;&#x30D3;&#x30E5;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#xFF09;&#x306E;&#x6570;&#x306B;&#x5FDC;&#x3058;&#x3066;&#x30A8;&#x30B5;&#x3092;&#x53D6;&#x5F97;&#x3057;&#x3001;&#x305D;&#x306E;&#x30A8;&#x30B5;&#x3092;Dash&#x3061;&#x3083;&#x3093;&#x306B;&#x3042;&#x3052;&#x308B;&#x3053;&#x3068;&#x3067;&#x3001;Dash&#x3061;&#x3083;&#x3093;&#x3092;&#x80B2;&#x3066;&#x3088;&#x3046;&#x3068;&#x3044;&#x3046;&#x80B2;&#x6210;&#x30A2;&#x30D7;&#x30EA;&#x3067;&#x3059;&#x3002;&#x30DD;&#x30B1;&#x25CB;&#x30F3;&#x3084;&#x305F;&#x307E;&#x25CB;&#x3063;&#x3061;&#x3092;&#x30A4;&#x30E1;&#x30FC;&#x30B8;&#x3059;&#x308B;&#x3068;&#x60F3;&#x50CF;&#x3057;&#x3084;&#x3059;&#x3044;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x3002;&#x305F;&#x304F;&#x3055;&#x3093;Dash&#x3061;&#x3083;&#x3093;&#x306B;&#x30A8;&#x30B5;&#x3092;&#x3042;&#x3052;&#x308B;&#x305F;&#x3081;&#x306B;&#x3001;&#x305F;&#x304F;&#x3055;&#x3093;Flutter&#x306E;&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x66F8;&#x3044;&#x3066;&#x697D;&#x3057;&#x307F;&#x306A;&#x304C;&#x3089;Flutter&#x30A8;&#x30F3;&#x30B8;&#x30CB;&#x30A2;&#x306E;&#x30E2;&#x30C1;&#x30D9;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x3092;&#x4E0A;&#x3052;&#x308B;&#x3053;&#x3068;&#x3092;&#x76EE;&#x7684;&#x3068;&#x3057;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;</p><figure class="kg-card kg-image-card"><img src="http://blog.shinonome.io/content/images/2024/12/image-6.png" class="kg-image" alt="&#x3010;Flutter&#x3011;Dash&#x3061;&#x3083;&#x3093;&#x3092;&#x558B;&#x3089;&#x305B;&#x3088;&#x3046;&#xFF01;Gemini&#x3067;&#x59CB;&#x3081;&#x308B;&#x30C1;&#x30E3;&#x30C3;&#x30C8;&#x30DC;&#x30C3;&#x30C8;&#x30A2;&#x30D7;&#x30EA;&#x958B;&#x767A;&#x8D85;&#x5165;&#x9580;" loading="lazy" width="736" height="553" srcset="http://blog.shinonome.io/content/images/size/w600/2024/12/image-6.png 600w, http://blog.shinonome.io/content/images/2024/12/image-6.png 736w" sizes="(min-width: 720px) 720px"></figure><p>Flutter&#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x306B;&#x304A;&#x3044;&#x3066;&#x3001;&#x79C1;&#x306F;&#x4E3B;&#x306B;Flutter&#x3067;&#x306E;&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x90E8;&#x5206;&#x306E;&#x5B9F;&#x88C5;&#x3092;&#x62C5;&#x5F53;&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;&#x305D;&#x306E;&#x4E2D;&#x3067;&#x3082;&#x7279;&#x306B;&#x3001;Dash&#x3061;&#x3083;&#x3093;&#x3068;&#x4F1A;&#x8A71;&#x304C;&#x3067;&#x304D;&#x308B;&#x30C1;&#x30E3;&#x30C3;&#x30C8;&#x30DC;&#x30C3;&#x30C8;&#x6A5F;&#x80FD;&#x306E;&#x5B9F;&#x88C5;&#x306B;&#x529B;&#x3092;&#x5165;&#x308C;&#x307E;&#x3057;&#x305F;&#x3002;</p><p>&#x305D;&#x3053;&#x3067;&#x3001;&#x672C;&#x8A18;&#x4E8B;&#x3067;&#x306F;&#x3001;&#x5B9F;&#x969B;&#x306B;Dash&#x3061;&#x3083;&#x3093;&#x3068;&#x304A;&#x8A71;&#x3057;&#x304C;&#x3067;&#x304D;&#x308B;&#x30A2;&#x30D7;&#x30EA;&#x3092;&#x4F5C;&#x308A;&#x306A;&#x304C;&#x3089;&#x3001;Flutter&#x30A2;&#x30D7;&#x30EA;&#x958B;&#x767A;&#x306B;&#x304A;&#x3044;&#x3066;&#x3001;Gemini&#x3092;&#x7528;&#x3044;&#x305F;&#x30C1;&#x30E3;&#x30C3;&#x30C8;&#x30DC;&#x30C3;&#x30C8;&#x30A2;&#x30D7;&#x30EA;&#x958B;&#x767A;&#x306E;&#x5B9F;&#x88C5;&#x65B9;&#x6CD5;&#x306B;&#x3064;&#x3044;&#x3066;&#x3054;&#x7D39;&#x4ECB;&#x3057;&#x307E;&#x3059;&#x3002;</p><p>&#x5C1A;&#x3001;&#x672C;&#x8A18;&#x4E8B;&#x3067;&#x306F;&#x3001;Flutter&#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x306E;&#x30E2;&#x30D0;&#x30A4;&#x30EB;&#x5074;&#x306E;&#x5B9F;&#x88C5;&#x306E;&#x307F;&#x7D39;&#x4ECB;&#x3059;&#x308B;&#x305F;&#x3081;&#x3001;&#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x306B;&#x304A;&#x3051;&#x308B;&#x30D0;&#x30C3;&#x30AF;&#x30A8;&#x30F3;&#x30C9;&#x30FB;&#x30A4;&#x30F3;&#x30D5;&#x30E9;&#x5074;&#x306E;&#x304A;&#x8A71;&#x306F;<a href="https://qiita.com/advent-calendar/2024/playground">PlayGround Advent Calendar 2024</a> &#x306E;1&#x65E5;&#x76EE;&#x306E;&#x8A18;&#x4E8B;&#x3067;&#x3042;&#x308B;&#x300C;<a href="http://blog.shinonome.io/dong-jing/"><strong>&#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x3067;&#x7834;&#x7523;&#x3057;&#x304B;&#x3051;&#x305F;&#x8A71;</strong></a>&#x300D;&#x3092;&#x3054;&#x89A7;&#x304F;&#x3060;&#x3055;&#x3044;&#x3002;</p><p>&#x203B;&#x672C;&#x8A18;&#x4E8B;&#x306F;PlayGround&#x3068;&#x3044;&#x3046;&#x30B3;&#x30DF;&#x30E5;&#x30CB;&#x30C6;&#x30A3;&#x306E;OB&#x3068;&#x3057;&#x3066;&#x57F7;&#x7B46;&#x3057;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;</p><h2 id="%E4%BB%8A%E5%9B%9E%E4%BD%9C%E3%82%8B%E3%82%82%E3%81%AE">&#x4ECA;&#x56DE;&#x4F5C;&#x308B;&#x3082;&#x306E;</h2><p>REPOSI&#x9CE5;&#x306E;Dash&#x3061;&#x3083;&#x3093;&#x3068;&#x306E;&#x4F1A;&#x8A71;&#x6A5F;&#x80FD;&#x306E;&#x307F;&#x3092;&#x62BD;&#x51FA;&#x3057;&#x305F;&#x7C21;&#x6613;&#x7684;&#x306A;&#x30C1;&#x30E3;&#x30C3;&#x30C8;&#x30DC;&#x30C3;&#x30C8;&#x30A2;&#x30D7;&#x30EA;&#x3092;&#x4F5C;&#x308A;&#x307E;&#x3059;&#x3002;&#x5B9F;&#x969B;&#x306B;&#x30C1;&#x30E3;&#x30C3;&#x30C8;&#x30DC;&#x30C3;&#x30C8;&#x30A2;&#x30D7;&#x30EA;&#x3092;&#x4F5C;&#x308A;&#x306A;&#x304C;&#x3089;&#x30C1;&#x30E3;&#x30C3;&#x30C8;&#x30DC;&#x30C3;&#x30C8;&#x306E;&#x4F5C;&#x308A;&#x65B9;&#x306B;&#x3064;&#x3044;&#x3066;&#x697D;&#x3057;&#x307F;&#x306A;&#x304C;&#x3089;&#x5B66;&#x3093;&#x3067;&#x3044;&#x304D;&#x307E;&#x3057;&#x3087;&#x3046;&#x3002;</p><!--kg-card-begin: markdown--><img src="http://blog.shinonome.io/content/images/2024/12/----------2024-12-25-23.00.48-1.png" width="300" alt="&#x3010;Flutter&#x3011;Dash&#x3061;&#x3083;&#x3093;&#x3092;&#x558B;&#x3089;&#x305B;&#x3088;&#x3046;&#xFF01;Gemini&#x3067;&#x59CB;&#x3081;&#x308B;&#x30C1;&#x30E3;&#x30C3;&#x30C8;&#x30DC;&#x30C3;&#x30C8;&#x30A2;&#x30D7;&#x30EA;&#x958B;&#x767A;&#x8D85;&#x5165;&#x9580;"><!--kg-card-end: markdown--><h2 id="ui%E4%BD%9C%E6%88%90">UI&#x4F5C;&#x6210;</h2><p>&#x307E;&#x305A;&#x3001;&#x30ED;&#x30B8;&#x30C3;&#x30AF;&#x90E8;&#x5206;&#x306E;&#x5B9F;&#x88C5;&#x306B;&#x5165;&#x308B;&#x524D;&#x306B;&#x3001;&#x7C21;&#x5358;&#x306A;UI&#x3092;&#x4F5C;&#x6210;&#x3057;&#x3066;&#x304A;&#x304D;&#x307E;&#x3057;&#x3087;&#x3046;&#x3002;</p><p>&#x4EE5;&#x4E0B;&#x306E;&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x30B3;&#x30D4;&#x30DA;&#x3057;&#x3001;<code>MyHomePage</code>&#x30AF;&#x30E9;&#x30B9;&#x3092;&#x4F5C;&#x6210;&#x3057;&#x3066;&#x304F;&#x3060;&#x3055;&#x3044;&#x3002;</p><pre><code class="language-dart">class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});

  @override
  State&lt;MyHomePage&gt; createState() =&gt; _MyHomePageState();
}

class _MyHomePageState extends State&lt;MyHomePage&gt; {
  final _controller = TextEditingController();
  bool _isLoading = false;
  String _dashMessage = &apos;&#x3053;&#x3093;&#x306B;&#x3061;&#x306F;&#xFF01;\n&#x3053;&#x3053;&#x306B;&#x751F;&#x6210;&#x3057;&#x305F;&#x6587;&#x7AE0;&#x304C;&#x5165;&#x308B;&#x3088;&#xFF01;&apos;;

  Future&lt;void&gt; _onTapSend() async {
    // TODO: &#x9001;&#x4FE1;&#x30DC;&#x30BF;&#x30F3;&#x3092;&#x62BC;&#x3057;&#x305F;&#x969B;&#x306E;&#x51E6;&#x7406;&#x3092;&#x66F8;&#x304F;&#x3002;
  }

  @override
  void dispose() {
    super.dispose();
    _controller.dispose();
  }

  @override
  Widget build(BuildContext context) {
    final keyboardHeight = MediaQuery.of(context).viewInsets.bottom;
    return Scaffold(
      resizeToAvoidBottomInset: false,
      body: Stack(
        alignment: Alignment.center,
        children: [
          Container(
            decoration: const BoxDecoration(
              image: DecorationImage(
                image: NetworkImage(
                  &apos;https://raw.githubusercontent.com/shinonome-inc/tokyo-flutter-hackathon-2024-team-PlayGround/refs/heads/main/mobile/assets/images/background_summer.png&apos;,
                ),
                fit: BoxFit.cover,
              ),
            ),
          ),
          Column(
            children: [
              const Spacer(),
              Container(
                padding: const EdgeInsets.all(8.0),
                decoration: const BoxDecoration(
                  color: Colors.white,
                  borderRadius: BorderRadius.all(Radius.circular(16.0)),
                ),
                child: Text(_dashMessage),
              ),
              const SizedBox(height: 8.0),
              Container(
                padding: const EdgeInsets.symmetric(horizontal: 64.0),
                child: Image.network(
                  &apos;https://raw.githubusercontent.com/shinonome-inc/tokyo-flutter-hackathon-2024-team-PlayGround/refs/heads/main/mobile/assets/images/dash.png&apos;,
                ),
              ),
              const SizedBox(height: 320.0),
            ],
          ),
          Column(
            mainAxisAlignment: MainAxisAlignment.end,
            children: [
              Container(
                padding:
                    const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0),
                color: Colors.white,
                child: Row(
                  children: [
                    Expanded(
                      child: TextField(
                        controller: _controller,
                        decoration: const InputDecoration(
                          hintText: &apos;&#x30E1;&#x30C3;&#x30BB;&#x30FC;&#x30B8;&#x3092;&#x5165;&#x529B;&#x3057;&#x3066;&#x304F;&#x3060;&#x3055;&#x3044;&apos;,
                        ),
                      ),
                    ),
                    IconButton(
                      onPressed: _onTapSend,
                      icon: const Icon(Icons.send),
                    ),
                  ],
                ),
              ),
              SizedBox(height: keyboardHeight),
            ],
          ),
        ],
      ),
    );
  }
}
</code></pre><p>&#x5B9F;&#x884C;&#x7D50;&#x679C;</p><!--kg-card-begin: markdown--><img src="http://blog.shinonome.io/content/images/2024/12/----------2024-12-25-23.45.38.png" width="300" alt="&#x3010;Flutter&#x3011;Dash&#x3061;&#x3083;&#x3093;&#x3092;&#x558B;&#x3089;&#x305B;&#x3088;&#x3046;&#xFF01;Gemini&#x3067;&#x59CB;&#x3081;&#x308B;&#x30C1;&#x30E3;&#x30C3;&#x30C8;&#x30DC;&#x30C3;&#x30C8;&#x30A2;&#x30D7;&#x30EA;&#x958B;&#x767A;&#x8D85;&#x5165;&#x9580;"><!--kg-card-end: markdown--><p>&#x3042;&#x304F;&#x307E;&#x3067;&#x5373;&#x5E2D;&#x3067;&#x7528;&#x610F;&#x3057;&#x305F;&#x7C21;&#x6613;&#x7684;&#x306A;UI&#x306E;&#x30B3;&#x30FC;&#x30C9;&#x306A;&#x306E;&#x3067;&#x3001;&#x30C7;&#x30B6;&#x30A4;&#x30F3;&#x3084;&#x30B3;&#x30FC;&#x30C9;&#x306E;&#x66F8;&#x304D;&#x65B9;&#x7B49;&#x306F;&#x304A;&#x597D;&#x307F;&#x3067;&#x66F8;&#x304D;&#x63DB;&#x3048;&#x3061;&#x3083;&#x3063;&#x3066;&#x304F;&#x3060;&#x3055;&#x3044;&#x3002;</p><h2 id="gemini%E3%81%AE%E5%B0%8E%E5%85%A5">Gemini&#x306E;&#x5C0E;&#x5165;</h2><h3 id="gemini%E3%81%A8%E3%81%AF">Gemini&#x3068;&#x306F;</h3><p>&#x6B21;&#x306B;&#x3001;Gemini&#x306E;&#x5C0E;&#x5165;&#x3092;&#x884C;&#x3044;&#x307E;&#x3059;&#x3002;</p><p>Gemini&#x3068;&#x306F;&#x3001;Google&#x304C;&#x958B;&#x767A;&#x3057;&#x305F;&#x751F;&#x6210;AI&#x3067;&#x3059;&#x3002;API&#x3082;&#x63D0;&#x4F9B;&#x3055;&#x308C;&#x3066;&#x3044;&#x308B;&#x305F;&#x3081;&#x3001;Flutter&#x3068;&#x306E;&#x9023;&#x643A;&#x3092;&#x884C;&#x3046;&#x3068;&#x3001;Flutter&#x30A2;&#x30D7;&#x30EA;&#x306B;&#x751F;&#x6210;AI&#x306E;&#x6A5F;&#x80FD;&#x3092;&#x7D44;&#x307F;&#x8FBC;&#x3080;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x307E;&#x3059;&#x3002;</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://gemini.google.com/app?hl=ja"><div class="kg-bookmark-content"><div class="kg-bookmark-title">&#x200E;Gemini &#x3068;&#x8A71;&#x3057;&#x3066;&#x30A2;&#x30A4;&#x30C7;&#x30A2;&#x3092;&#x5E83;&#x3052;&#x3088;&#x3046;</div><div class="kg-bookmark-description">Bard &#x304C; Gemini &#x306B;&#x306A;&#x308A;&#x307E;&#x3057;&#x305F;&#x3002;Google AI &#x3067;&#x6587;&#x7AE0;&#x3084;&#x30EA;&#x30B9;&#x30C8;&#x306E;&#x4F5C;&#x6210;&#x3001;&#x8A08;&#x753B;&#x306E;&#x7ACB;&#x6848;&#x3001;&#x65B0;&#x3057;&#x3044;&#x77E5;&#x8B58;&#x306E;&#x7FD2;&#x5F97;&#x306A;&#x3069;&#x3001;&#x3055;&#x307E;&#x3056;&#x307E;&#x306A;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x307E;&#x3059;&#x3002;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://www.gstatic.com/lamda/images/gemini_favicon_f069958c85030456e93de685481c559f160ea06b.png" alt="&#x3010;Flutter&#x3011;Dash&#x3061;&#x3083;&#x3093;&#x3092;&#x558B;&#x3089;&#x305B;&#x3088;&#x3046;&#xFF01;Gemini&#x3067;&#x59CB;&#x3081;&#x308B;&#x30C1;&#x30E3;&#x30C3;&#x30C8;&#x30DC;&#x30C3;&#x30C8;&#x30A2;&#x30D7;&#x30EA;&#x958B;&#x767A;&#x8D85;&#x5165;&#x9580;"><span class="kg-bookmark-author">Gemini</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://www.gstatic.com/lamda/images/gemini_thumbnail_c362e5eadc46ca9f617e2.png" alt="&#x3010;Flutter&#x3011;Dash&#x3061;&#x3083;&#x3093;&#x3092;&#x558B;&#x3089;&#x305B;&#x3088;&#x3046;&#xFF01;Gemini&#x3067;&#x59CB;&#x3081;&#x308B;&#x30C1;&#x30E3;&#x30C3;&#x30C8;&#x30DC;&#x30C3;&#x30C8;&#x30A2;&#x30D7;&#x30EA;&#x958B;&#x767A;&#x8D85;&#x5165;&#x9580;"></div></a></figure><h3 id="api%E3%82%AD%E3%83%BC%E3%81%AE%E5%8F%96%E5%BE%97">API&#x30AD;&#x30FC;&#x306E;&#x53D6;&#x5F97;</h3><p>Gemini API&#x3092;&#x5229;&#x7528;&#x3059;&#x308B;&#x306B;&#x3042;&#x305F;&#x308A;&#x3001;API&#x30AD;&#x30FC;&#x306E;&#x53D6;&#x5F97;&#x3092;&#x884C;&#x3044;&#x307E;&#x3059;&#x3002;</p><p><a href="https://aistudio.google.com">Google AI Studio</a>&#x306E;<a href="https://aistudio.google.com/u/2/apikey">Get API Key</a>&#x3092;&#x958B;&#x304D;&#x3001;&#x300C;API&#x30AD;&#x30FC;&#x3092;&#x4F5C;&#x6210;&#x300D;&#x3092;&#x30AF;&#x30EA;&#x30C3;&#x30AF;&#x3057;&#x307E;&#x3059;&#x3002;</p><figure class="kg-card kg-image-card"><img src="http://blog.shinonome.io/content/images/2024/12/Group-4.png" class="kg-image" alt="&#x3010;Flutter&#x3011;Dash&#x3061;&#x3083;&#x3093;&#x3092;&#x558B;&#x3089;&#x305B;&#x3088;&#x3046;&#xFF01;Gemini&#x3067;&#x59CB;&#x3081;&#x308B;&#x30C1;&#x30E3;&#x30C3;&#x30C8;&#x30DC;&#x30C3;&#x30C8;&#x30A2;&#x30D7;&#x30EA;&#x958B;&#x767A;&#x8D85;&#x5165;&#x9580;" loading="lazy" width="1440" height="795" srcset="http://blog.shinonome.io/content/images/size/w600/2024/12/Group-4.png 600w, http://blog.shinonome.io/content/images/size/w1000/2024/12/Group-4.png 1000w, http://blog.shinonome.io/content/images/2024/12/Group-4.png 1440w" sizes="(min-width: 720px) 720px"></figure><p>&#x3053;&#x308C;&#x3067;API&#x30AD;&#x30FC;&#x306E;&#x4F5C;&#x6210;&#x306F;&#x5B8C;&#x4E86;&#x3067;&#x3059;&#x3002;</p><figure class="kg-card kg-image-card"><img src="http://blog.shinonome.io/content/images/2024/12/Group-5-1.png" class="kg-image" alt="&#x3010;Flutter&#x3011;Dash&#x3061;&#x3083;&#x3093;&#x3092;&#x558B;&#x3089;&#x305B;&#x3088;&#x3046;&#xFF01;Gemini&#x3067;&#x59CB;&#x3081;&#x308B;&#x30C1;&#x30E3;&#x30C3;&#x30C8;&#x30DC;&#x30C3;&#x30C8;&#x30A2;&#x30D7;&#x30EA;&#x958B;&#x767A;&#x8D85;&#x5165;&#x9580;" loading="lazy" width="1439" height="795" srcset="http://blog.shinonome.io/content/images/size/w600/2024/12/Group-5-1.png 600w, http://blog.shinonome.io/content/images/size/w1000/2024/12/Group-5-1.png 1000w, http://blog.shinonome.io/content/images/2024/12/Group-5-1.png 1439w" sizes="(min-width: 720px) 720px"></figure><p>API&#x30AD;&#x30FC;&#x306F;&#x6A5F;&#x5BC6;&#x60C5;&#x5831;&#x306E;&#x305F;&#x3081;&#x3001;Git&#x306E;&#x5DEE;&#x5206;&#x306B;&#x5165;&#x308C;&#x306A;&#x3044;&#x3088;&#x3046;&#x306B;&#x6C17;&#x3092;&#x3064;&#x3051;&#x3066;&#x304F;&#x3060;&#x3055;&#x3044;&#x3002;</p><h3 id="googlegenerativeai%E3%81%AE%E5%B0%8E%E5%85%A5">google_generative_ai&#x306E;&#x5C0E;&#x5165;</h3><p>Flutter&#x3067;Gemini&#x3092;&#x5229;&#x7528;&#x3059;&#x308B;&#x305F;&#x3081;&#x306B;<a href="https://pub.dev/packages/google_generative_ai">google_generative_ai</a>&#x3068;&#x3044;&#x3046;Flutter&#x306E;package&#x3092;&#x5C0E;&#x5165;&#x3057;&#x307E;&#x3059;&#x3002;google_generative_ai&#x3092;&#x7528;&#x3044;&#x308B;&#x3053;&#x3068;&#x306B;&#x3088;&#x308A;&#x3001;&#x6BD4;&#x8F03;&#x7684;&#x7C21;&#x5358;&#x306B;Gemini&#x3092;Flutter&#x30D7;&#x30ED;&#x30B8;&#x30A7;&#x30AF;&#x30C8;&#x3067;&#x4F7F;&#x3046;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x308B;&#x3088;&#x3046;&#x306B;&#x306A;&#x308A;&#x307E;&#x3059;&#x3002;</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://pub.dev/packages/google_generative_ai"><div class="kg-bookmark-content"><div class="kg-bookmark-title">google_generative_ai | Dart package</div><div class="kg-bookmark-description">The Google AI Dart SDK enables developers to use Google&#x2019;s state-of-the-art generative AI models (like Gemini).</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://pub.dev/favicon.ico?hash=nk4nss8c7444fg0chird9erqef2vkhb8" alt="&#x3010;Flutter&#x3011;Dash&#x3061;&#x3083;&#x3093;&#x3092;&#x558B;&#x3089;&#x305B;&#x3088;&#x3046;&#xFF01;Gemini&#x3067;&#x59CB;&#x3081;&#x308B;&#x30C1;&#x30E3;&#x30C3;&#x30C8;&#x30DC;&#x30C3;&#x30C8;&#x30A2;&#x30D7;&#x30EA;&#x958B;&#x767A;&#x8D85;&#x5165;&#x9580;"><span class="kg-bookmark-author">Dart packages</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://pub.dev/static/hash-ffjootqp/img/pub-dev-icon-cover-image.png" alt="&#x3010;Flutter&#x3011;Dash&#x3061;&#x3083;&#x3093;&#x3092;&#x558B;&#x3089;&#x305B;&#x3088;&#x3046;&#xFF01;Gemini&#x3067;&#x59CB;&#x3081;&#x308B;&#x30C1;&#x30E3;&#x30C3;&#x30C8;&#x30DC;&#x30C3;&#x30C8;&#x30A2;&#x30D7;&#x30EA;&#x958B;&#x767A;&#x8D85;&#x5165;&#x9580;"></div></a></figure><p><code>pubspec.yaml</code>&#x306B;&#x4EE5;&#x4E0B;&#x306E;&#x3088;&#x3046;&#x306B;google_generative_ai&#x3092;&#x8FFD;&#x52A0;&#x3057;&#x3001;<code>flutter pub get</code>&#x3092;&#x5B9F;&#x884C;&#x3057;&#x3066;&#x304F;&#x3060;&#x3055;&#x3044;&#xFF08;&#x30D0;&#x30FC;&#x30B8;&#x30E7;&#x30F3;&#x306F;&#x8A18;&#x4E8B;&#x57F7;&#x7B46;&#x6642;&#x306E;&#x6700;&#x65B0;&#x7248;&#x3067;&#x3059;&#xFF09;&#x3002;</p><pre><code class="language-yaml">dependencies:
  google_generative_ai: ^0.4.6</code></pre><h3 id="geminiclient%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%92%E4%BD%9C%E6%88%90">GeminiClient&#x30AF;&#x30E9;&#x30B9;&#x3092;&#x4F5C;&#x6210;</h3><p>&#x3053;&#x3053;&#x307E;&#x3067;&#x3067;&#x304D;&#x305F;&#x3089;&#x3001;&#x3044;&#x3088;&#x3044;&#x3088;Flutter&#x3067;Gemini&#x3092;&#x5229;&#x7528;&#x3059;&#x308B;&#x305F;&#x3081;&#x306E;&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x66F8;&#x3044;&#x3066;&#x3044;&#x304D;&#x307E;&#x3057;&#x3087;&#x3046;&#x3002;&#x4ECA;&#x56DE;&#x306F;&#x3001;Gemini&#x3067;&#x30C6;&#x30AD;&#x30B9;&#x30C8;&#x306E;&#x751F;&#x6210;&#x3092;&#x884C;&#x3046;<code>GeminiClient</code>&#x30AF;&#x30E9;&#x30B9;&#x3092;&#x4F5C;&#x6210;&#x3057;&#x307E;&#x3059;&#x3002;</p><p>&#x5148;&#x307B;&#x3069;&#x30A4;&#x30F3;&#x30B9;&#x30C8;&#x30FC;&#x30EB;&#x3057;&#x305F;google_generative_ai&#x3092;&#x30A4;&#x30F3;&#x30DD;&#x30FC;&#x30C8;&#x3057;&#x3001;&#x4EE5;&#x4E0B;&#x306E;&#x3088;&#x3046;&#x306A;<code>GeminiClient</code>&#x30AF;&#x30E9;&#x30B9;&#x3092;&#x4F5C;&#x6210;&#x3057;&#x3066;&#x304F;&#x3060;&#x3055;&#x3044;&#x3002;</p><pre><code class="language-dart">import &apos;package:google_generative_ai/google_generative_ai.dart&apos;;

class GeminiClient {
  static final _model = GenerativeModel(
    model: &apos;gemini-1.5-flash-latest&apos;, // &#x30E2;&#x30C7;&#x30EB;&#x3092;&#x6307;&#x5B9A;
    apiKey: &apos;{your-api-key}&apos;, // Gemini&#x306E;API&#x30AD;&#x30FC;
  );
  // &#x56DE;&#x7B54;&#x6642;&#x306E;&#x5236;&#x7D04;&#x3092;&#x5B9A;&#x7FA9;&#x3057;&#x305F;&#x30D7;&#x30ED;&#x30F3;&#x30D7;&#x30C8;
  static const _dashPrompt = &apos;&apos;&apos;
    &#x3042;&#x306A;&#x305F;&#x306F;Flutter&#x306E;&#x30DE;&#x30B9;&#x30B3;&#x30C3;&#x30C8;&#x30AD;&#x30E3;&#x30E9;&#x30AF;&#x30BF;&#x30FC;&#x306E;Dash&#x3067;&#x3059;&#x3002;
    &#x3072;&#x3089;&#x304C;&#x306A;&#x3092;&#x591A;&#x7528;&#x3057;&#x3066;&#x304B;&#x308F;&#x3044;&#x3089;&#x3057;&#x304F;&#x56DE;&#x7B54;&#x3092;&#x884C;&#x3063;&#x3066;&#x304F;&#x3060;&#x3055;&#x3044;&#x3002;
    &#x56DE;&#x7B54;&#x306F;140&#x6587;&#x5B57;&#x4EE5;&#x5185;&#x3067;&#x884C;&#x3063;&#x3066;&#x304F;&#x3060;&#x3055;&#x3044;&#x3002;
    &apos;&apos;&apos;;
  static const _errorMessage = &apos;&#x3054;&#x3081;&#x3093;&#x306D;&#x3001;&#x3046;&#x307E;&#x304F;&#x3053;&#x305F;&#x3048;&#x3089;&#x308C;&#x306A;&#x3044;&#x3084;&#x3002;&#x3082;&#x3046;&#x4E00;&#x5EA6;&#x8A66;&#x3057;&#x3066;&#x307F;&#x3066;&#x306D;&#x3002;&apos;;

  static Future&lt;String&gt; generateDashMessage(String inputText) async {
    final prompt = [
      Content.text(_dashPrompt),
      Content.text(inputText),
    ];
    // prompt&#x306E;&#x5185;&#x5BB9;&#x3092;&#x57FA;&#x306B;&#x56DE;&#x7B54;&#x3092;&#x751F;&#x6210;
    final response = await _model.generateContent(prompt);
    return response.text ?? _errorMessage;
  }
}</code></pre><p><code>_model</code>&#x3067;&#x306F;&#x3001;&#x30C6;&#x30AD;&#x30B9;&#x30C8;&#x306E;&#x751F;&#x6210;&#x306B;&#x4F7F;&#x3046;AI&#x30E2;&#x30C7;&#x30EB;&#x306E;&#x7A2E;&#x985E;&#x3068;API&#x30AD;&#x30FC;&#x3092;&#x6307;&#x5B9A;&#x3057;&#x307E;&#x3059;&#x3002;&#x5148;&#x307B;&#x3069;&#x4F5C;&#x6210;&#x3057;&#x305F;API&#x30AD;&#x30FC;&#x306F;&#x3053;&#x3053;&#x3067;&#x5229;&#x7528;&#x3057;&#x307E;&#x3057;&#x3087;&#x3046;&#x3002;</p><p><code>_dashPrompt</code>&#x306B;&#x306F;&#x3001;&#x56DE;&#x7B54;&#x6642;&#x306E;&#x7C21;&#x6613;&#x7684;&#x306A;&#x5236;&#x7D04;&#x3092;&#x5B9A;&#x7FA9;&#x3057;&#x307E;&#x3059;&#x3002;&#x4ECA;&#x56DE;&#x306F;&#x3001;Dash&#x3061;&#x3083;&#x3093;&#x306E;&#x304B;&#x308F;&#x3044;&#x3089;&#x3057;&#x3055;&#x3092;&#x56DE;&#x7B54;&#x3067;&#x8868;&#x73FE;&#x3059;&#x308B;&#x305F;&#x3081;&#x306B;&#x3001;&#x3072;&#x3089;&#x304C;&#x306A;&#x304B;&#x3064;&#x77ED;&#x6587;&#x306E;&#x56DE;&#x7B54;&#x3092;&#x751F;&#x6210;&#x3059;&#x308B;&#x3088;&#x3046;&#x306B;&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;&#x30D7;&#x30ED;&#x30F3;&#x30D7;&#x30C8;&#x306F;&#x3001;&#x30A2;&#x30A4;&#x30C7;&#x30A2;&#x6B21;&#x7B2C;&#x3067;&#x69D8;&#x3005;&#x306A;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x308B;&#x305F;&#x3081;&#x3001;&#x4F5C;&#x308A;&#x305F;&#x3044;&#x30A2;&#x30D7;&#x30EA;&#x306B;&#x5FDC;&#x3058;&#x3066;&#x8272;&#x3005;&#x8A66;&#x3057;&#x3066;&#x307F;&#x3066;&#x304F;&#x3060;&#x3055;&#x3044;&#x3002;</p><p><code>generateDashMessage</code> &#x3067;&#x306F;&#x3001;&#x4E8B;&#x524D;&#x306B;&#x4E0E;&#x3048;&#x3089;&#x308C;&#x305F;&#x30D7;&#x30ED;&#x30F3;&#x30D7;&#x30C8;&#x3068;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x304B;&#x3089;&#x4E0E;&#x3048;&#x3089;&#x308C;&#x305F;&#x30C6;&#x30AD;&#x30B9;&#x30C8;&#x306E;&#x5185;&#x5BB9;&#x306B;&#x5FDC;&#x3058;&#x3066;&#x3001;Gemini&#x304C;&#x30C6;&#x30AD;&#x30B9;&#x30C8;&#x3092;&#x751F;&#x6210;&#x3057;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;</p><h3 id="gemini%E3%81%AE%E5%8B%95%E4%BD%9C%E7%A2%BA%E8%AA%8D">Gemini&#x306E;&#x52D5;&#x4F5C;&#x78BA;&#x8A8D;</h3><p>&#x305D;&#x308C;&#x3067;&#x306F;&#x3001;&#x672C;&#x5F53;&#x306B;Flutter&#x30A2;&#x30D7;&#x30EA;&#x5185;&#x3067;Gemini&#x306B;&#x3088;&#x308B;&#x30C6;&#x30AD;&#x30B9;&#x30C8;&#x751F;&#x6210;&#x304C;&#x4E0A;&#x624B;&#x304F;&#x3067;&#x304D;&#x3066;&#x3044;&#x308B;&#x304B;&#x78BA;&#x8A8D;&#x3057;&#x3066;&#x307F;&#x307E;&#x3057;&#x3087;&#x3046;&#x3002;</p><p>&#x5148;&#x307B;&#x3069;&#x4F5C;&#x6210;&#x3057;&#x305F;<code>MyHomePage</code> &#x30AF;&#x30E9;&#x30B9;&#x5185;&#x306B;&#x3042;&#x308B; <code>_onTapSend</code>&#x3092;&#x4EE5;&#x4E0B;&#x306E;&#x3088;&#x3046;&#x306B;&#x66F8;&#x304D;&#x63DB;&#x3048;&#x3066;&#x304F;&#x3060;&#x3055;&#x3044;&#x3002;</p><pre><code class="language-dart">  Future&lt;void&gt; _onTapSend() async {
    if (_isLoading || _controller.text.isEmpty) {
      return;
    }
    _isLoading = true;
    final generatedText = await GeminiClient.generateDashMessage(
      _controller.text,
    );
    _isLoading = false;
    setState(() {
      _dashMessage = generatedText;
    });
  }</code></pre><p>&#x3053;&#x308C;&#x3067;&#x30A2;&#x30D7;&#x30EA;&#x3092;&#x5B9F;&#x884C;&#x3057;&#x3066;&#x307F;&#x307E;&#x3057;&#x3087;&#x3046;&#x3002;</p><!--kg-card-begin: markdown--><img src="http://blog.shinonome.io/content/images/2024/12/----------2024-12-25-22.34.25-1.png" width="300" alt="&#x3010;Flutter&#x3011;Dash&#x3061;&#x3083;&#x3093;&#x3092;&#x558B;&#x3089;&#x305B;&#x3088;&#x3046;&#xFF01;Gemini&#x3067;&#x59CB;&#x3081;&#x308B;&#x30C1;&#x30E3;&#x30C3;&#x30C8;&#x30DC;&#x30C3;&#x30C8;&#x30A2;&#x30D7;&#x30EA;&#x958B;&#x767A;&#x8D85;&#x5165;&#x9580;"><!--kg-card-end: markdown--><p>&#x30AD;&#x30FC;&#x30DC;&#x30FC;&#x30C9;&#x304B;&#x3089;&#x5165;&#x529B;&#x3057;&#x305F;&#x30C6;&#x30AD;&#x30B9;&#x30C8;&#x306B;&#x5FDC;&#x3058;&#x3066;Dash&#x3061;&#x3083;&#x3093;&#x304C;&#x4F1A;&#x8A71;&#x3092;&#x3057;&#x3066;&#x304F;&#x308C;&#x308B;&#x3088;&#x3046;&#x306B;&#x306A;&#x308A;&#x307E;&#x3057;&#x305F;&#x3002;</p><p>&#x3053;&#x308C;&#x3067;&#x5B8C;&#x6210;&#x3067;&#x3059;&#xFF01;</p><h2 id="%E3%81%BE%E3%81%A8%E3%82%81">&#x307E;&#x3068;&#x3081;</h2><p>&#x5B9F;&#x969B;&#x306B;Dash&#x3061;&#x3083;&#x3093;&#x3068;&#x4F1A;&#x8A71;&#x304C;&#x3067;&#x304D;&#x308B;&#x30A2;&#x30D7;&#x30EA;&#x3092;&#x4F5C;&#x308A;&#x306A;&#x304C;&#x3089;Gemini&#x3092;&#x7528;&#x3044;&#x305F;&#x30C1;&#x30E3;&#x30C3;&#x30C8;&#x30DC;&#x30C3;&#x30C8;&#x30A2;&#x30D7;&#x30EA;&#x306E;&#x958B;&#x767A;&#x65B9;&#x6CD5;&#x306B;&#x3064;&#x3044;&#x3066;&#x3054;&#x7D39;&#x4ECB;&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;</p><p>&#x8D85;&#x5165;&#x9580;&#x3068;&#x3044;&#x3046;&#x3053;&#x3068;&#x3067;&#x3001;&#x3042;&#x304F;&#x307E;&#x3067;&#x57FA;&#x790E;&#x7684;&#x306A;&#x90E8;&#x5206;&#x306E;&#x307F;&#x8AAC;&#x660E;&#x3067;&#x3057;&#x305F;&#x304C;&#x3001;&#x4ECA;&#x56DE;&#x3054;&#x7D39;&#x4ECB;&#x3057;&#x305F;&#x6280;&#x8853;&#x3092;&#x5FDC;&#x7528;&#x3059;&#x308C;&#x3070;&#x3001;&#x30D7;&#x30ED;&#x30F3;&#x30D7;&#x30C8;&#x306E;&#x30A2;&#x30A4;&#x30C7;&#x30A2;&#x6B21;&#x7B2C;&#x3067;&#x9762;&#x767D;&#x3044;&#x30A2;&#x30D7;&#x30EA;&#x3092;&#x91CF;&#x7523;&#x3067;&#x304D;&#x308B;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x306E;&#x3067;&#x3001;&#x305C;&#x3072;&#x8A66;&#x3057;&#x3066;&#x307F;&#x3066;&#x304F;&#x3060;&#x3055;&#x3044;&#x3002;</p><p>&#x79C1;&#x306F;&#x4ECA;&#x5E74;&#x3082;&#x30B5;&#x30F3;&#x30BF;&#x3055;&#x3093;&#x304C;&#x6765;&#x306A;&#x304B;&#x3063;&#x305F;&#x306E;&#x3067;&#x3001;&#x4ECA;&#x56DE;&#x4F5C;&#x6210;&#x3057;&#x305F;Dash&#x3061;&#x3083;&#x3093;&#x3068;&#x305F;&#x304F;&#x3055;&#x3093;&#x304A;&#x8A71;&#x3057;&#x3066;&#x60B2;&#x3057;&#x3055;&#x3092;&#x7D1B;&#x3089;&#x308F;&#x305B;&#x3088;&#x3046;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x3002;</p><!--kg-card-begin: markdown--><img src="http://blog.shinonome.io/content/images/2024/12/----------2024-12-25-23.49.54.png" width="200" alt="&#x3010;Flutter&#x3011;Dash&#x3061;&#x3083;&#x3093;&#x3092;&#x558B;&#x3089;&#x305B;&#x3088;&#x3046;&#xFF01;Gemini&#x3067;&#x59CB;&#x3081;&#x308B;&#x30C1;&#x30E3;&#x30C3;&#x30C8;&#x30DC;&#x30C3;&#x30C8;&#x30A2;&#x30D7;&#x30EA;&#x958B;&#x767A;&#x8D85;&#x5165;&#x9580;"><!--kg-card-end: markdown--><p>PlayGround Advent Calendar 2024&#x306F;&#x3053;&#x308C;&#x306B;&#x3066;&#x4EE5;&#x4E0A;&#x3068;&#x306A;&#x308A;&#x307E;&#x3059;&#x3002;&#x3053;&#x3053;&#x307E;&#x3067;&#x304A;&#x8AAD;&#x307F;&#x304F;&#x3060;&#x3055;&#x308A;&#x3042;&#x308A;&#x304C;&#x3068;&#x3046;&#x3054;&#x3056;&#x3044;&#x307E;&#x3057;&#x305F;&#x3002;&#x6765;&#x5E74;&#x3082;&#x4E5E;&#x3046;&#x3054;&#x671F;&#x5F85;&#xFF01;</p>]]></content:encoded></item><item><title><![CDATA[【Lottielab】クリスマスプレゼントを届けよう！🎁]]></title><description><![CDATA[アニメーションつきの美しいWebサイト・アプリケーションの開発に役立つ便利なツールを紹介します🙌]]></description><link>http://blog.shinonome.io/lottielab/</link><guid isPermaLink="false">6750df5684f04652f6202398</guid><category><![CDATA[デザイン]]></category><dc:creator><![CDATA[PlayGround]]></dc:creator><pubDate>Mon, 23 Dec 2024 22:37:00 GMT</pubDate><media:content url="http://blog.shinonome.io/content/images/2024/12/christmas3.png" medium="image"/><content:encoded><![CDATA[<img src="http://blog.shinonome.io/content/images/2024/12/christmas3.png" alt="&#x3010;Lottielab&#x3011;&#x30AF;&#x30EA;&#x30B9;&#x30DE;&#x30B9;&#x30D7;&#x30EC;&#x30BC;&#x30F3;&#x30C8;&#x3092;&#x5C4A;&#x3051;&#x3088;&#x3046;&#xFF01;&#x1F381;"><p>&#x3053;&#x3093;&#x306B;&#x3061;&#x306F;&#xFF01;&#x300C;PlayGroundAdventCalendar2024&#x300D;24&#x65E5;&#x76EE;&#x3092;&#x62C5;&#x5F53;&#x3059;&#x308B;&#x30C7;&#x30B6;&#x30A4;&#x30F3;&#x30B3;&#x30FC;&#x30B9;&#x306E;kou&#x3067;&#x3059;&#x3002;<br>&#x3053;&#x306E;&#x8A18;&#x4E8B;&#x3067;&#x306F;&#x7269;&#x8A9E;&#x98A8;&#x306B;Lottielab&#x3092;&#x4F7F;&#x3063;&#x305F;&#x30A2;&#x30CB;&#x30E1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x306E;&#x3064;&#x304F;&#x308A;&#x65B9;&#x3092;&#x7D39;&#x4ECB;&#x3057;&#x307E;&#x3059;&#x3002;</p><p>&#x4E3B;&#x4EBA;&#x516C;&#x306E;&#x305F;&#x307E;&#x304F;&#x3093;&#x306F;&#x76EE;&#x304C;&#x899A;&#x3081;&#x308B;&#x3068;&#x7A81;&#x7136;&#x30B5;&#x30F3;&#x30BF;&#x3055;&#x3093;&#x306B;&#x306A;&#x3063;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;<br>&#x305D;&#x3053;&#x3067;&#x8AB2;&#x3055;&#x308C;&#x305F;&#x4ED5;&#x4E8B;&#x306F;&#x660E;&#x65E5;&#x306E;&#x671D;&#x307E;&#x3067;&#x306B;&#x5168;&#x56FD;&#x306E;&#x5B50;&#x3069;&#x3082;&#x305F;&#x3061;&#x306B;&#x30D7;&#x30EC;&#x30BC;&#x30F3;&#x30C8;&#x3092;&#x5C4A;&#x3051;&#x308B;&#x3053;&#x3068;&#x3002;<br>&#x305F;&#x307E;&#x304F;&#x3093;&#x306F;&#x7121;&#x4E8B;&#x305D;&#x306E;&#x5F79;&#x76EE;&#x3092;&#x679C;&#x305F;&#x305B;&#x305F;&#x306E;&#x3067;&#x3057;&#x3087;&#x3046;&#x304B;&#xFF1F;</p><h2 id="1-%E7%9B%AE%E3%81%8C%E8%A6%9A%E3%82%81%E3%81%9F%E3%82%89%E3%82%B5%E3%83%B3%E3%82%BF%E3%81%95%E3%82%93%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%81%9F%E4%BB%B6%F0%9F%8E%85">1. &#x76EE;&#x304C;&#x899A;&#x3081;&#x305F;&#x3089;&#x30B5;&#x30F3;&#x30BF;&#x3055;&#x3093;&#x306B;&#x306A;&#x3063;&#x3066;&#x3044;&#x305F;&#x4EF6;&#x1F385;</h2><p>&#x4ECA;&#x65E5;&#x306F;12&#x6708;24&#x65E5;&#x3001;&#x30AF;&#x30EA;&#x30B9;&#x30DE;&#x30B9;&#x30A4;&#x30D6;&#x3002;<br>&#x305F;&#x307E;&#x304F;&#x3093;&#x306F;&#x30AF;&#x30EA;&#x30B9;&#x30DE;&#x30B9;&#x30DE;&#x30FC;&#x30B1;&#x30C3;&#x30C8;&#x306B;&#x884C;&#x304D;&#x3001;&#x7F8E;&#x5473;&#x3057;&#x3044;&#x98DF;&#x4E8B;&#x3068;&#x30DB;&#x30C3;&#x30C8;&#x30EF;&#x30A4;&#x30F3;&#x3092;&#x697D;&#x3057;&#x307F;&#x307E;&#x3057;&#x305F;&#x3002;</p><p><br>&#x3067;&#x3082;&#x3001;&#x3064;&#x3044;&#x697D;&#x3057;&#x307F;&#x3059;&#x304E;&#x3061;&#x3083;&#x3063;&#x3066;&#x5E30;&#x308A;&#x306E;&#x96FB;&#x8ECA;&#x306E;&#x4E2D;&#x3067;&#x5BDD;&#x3066;&#x3057;&#x307E;&#x3044;&#x307E;&#x3057;&#x305F;&#x1F4A4;</p><p><br>&#x6642;&#x523B;&#x306F;23:50&#x3002;<br>&#x6700;&#x5BC4;&#x99C5;&#x306B;&#x3064;&#x304D;&#x3001;&#x76EE;&#x304C;&#x899A;&#x3081;&#x308B;&#x3068;&#x305F;&#x307E;&#x304F;&#x3093;&#x306F;&#x7ACB;&#x6D3E;&#x306A;&#x767D;&#x9AED;&#x3092;&#x8CAF;&#x3048;&#x3001;&#x8D64;&#x3044;&#x5E3D;&#x5B50;&#x3068;&#x8D64;&#x3044;&#x670D;&#x3092;&#x7740;&#x3066;&#x3044;&#x307E;&#x3057;&#x305F;&#x3002;</p><figure class="kg-card kg-image-card"><img src="http://blog.shinonome.io/content/images/2024/12/santa.png" class="kg-image" alt="&#x3010;Lottielab&#x3011;&#x30AF;&#x30EA;&#x30B9;&#x30DE;&#x30B9;&#x30D7;&#x30EC;&#x30BC;&#x30F3;&#x30C8;&#x3092;&#x5C4A;&#x3051;&#x3088;&#x3046;&#xFF01;&#x1F381;" loading="lazy" width="1920" height="1080" srcset="http://blog.shinonome.io/content/images/size/w600/2024/12/santa.png 600w, http://blog.shinonome.io/content/images/size/w1000/2024/12/santa.png 1000w, http://blog.shinonome.io/content/images/size/w1600/2024/12/santa.png 1600w, http://blog.shinonome.io/content/images/2024/12/santa.png 1920w" sizes="(min-width: 720px) 720px"></figure><p><br>&#x305D;&#x3046;&#x3001;&#x30B5;&#x30F3;&#x30BF;&#x3055;&#x3093;&#x306B;&#x306A;&#x3063;&#x3066;&#x3044;&#x305F;&#x306E;&#x3067;&#x3059;&#x3002;<br>&#x305D;&#x3057;&#x3066;&#x305F;&#x307E;&#x304F;&#x3093;&#x306F;&#x6025;&#x907D;&#x4ED5;&#x4E8B;&#x3092;&#x8AB2;&#x3055;&#x308C;&#x308B;&#x3053;&#x3068;&#x306B;&#x3002;</p><p><br>&#x305D;&#x308C;&#x306F;&#x5B50;&#x3069;&#x3082;&#x305F;&#x3061;&#x304C;&#x8D77;&#x304D;&#x3066;&#x304F;&#x308B;&#x524D;&#x306B;&#x30AF;&#x30EA;&#x30B9;&#x30DE;&#x30B9;&#x30D7;&#x30EC;&#x30BC;&#x30F3;&#x30C8;&#x3092;&#x5C4A;&#x3051;&#x308B;&#x3053;&#x3068;&#x3002;<br>&#x3042;&#x3068;10&#x5206;&#x3067;25&#x65E5;&#x3002;</p><p>&#x3055;&#x3041;&#x3001;&#x6025;&#x3044;&#x3067;&#x30D7;&#x30EC;&#x30BC;&#x30F3;&#x30C8;&#x3092;&#x5C4A;&#x3051;&#x306B;&#x884C;&#x304D;&#x307E;&#x3057;&#x3087;&#x3046;&#xFF01;&#xFF01;</p><h2 id="2-%E3%81%A9%E3%81%86%E3%82%84%E3%81%A3%E3%81%A6%E3%83%97%E3%83%AC%E3%82%BC%E3%83%B3%E3%83%88%E3%82%92%E5%B1%8A%E3%81%91%E3%82%8B%EF%BC%9F%F0%9F%9B%B7">2. &#x3069;&#x3046;&#x3084;&#x3063;&#x3066;&#x30D7;&#x30EC;&#x30BC;&#x30F3;&#x30C8;&#x3092;&#x5C4A;&#x3051;&#x308B;&#xFF1F;&#x1F6F7;</h2><p>&#x300C;&#x6025;&#x306B;&#x30D7;&#x30EC;&#x30BC;&#x30F3;&#x30C8;&#x3092;&#x5C4A;&#x3051;&#x308D;&#x3063;&#x3066;...&#x3057;&#x304B;&#x3082;&#x6642;&#x9593;&#x3082;&#x306A;&#x3044;&#x3002;<br>&#x666E;&#x901A;&#x306B;&#x6B69;&#x3044;&#x305F;&#x3089;&#x914D;&#x308A;&#x7D42;&#x308F;&#x3089;&#x306A;&#x3044;&#x3002;&#x7A7A;&#x98DB;&#x3076;&#x30C8;&#x30CA;&#x30AB;&#x30A4;&#x3068;&#x30BD;&#x30EA;&#x304C;&#x3042;&#x308C;&#x3070;&#x306A;&#x3041;...&#x300D;</p><p>&#x300C;&#x305D;&#x3063;&#x304B;&#xFF01;&#x3064;&#x304F;&#x308C;&#x3070;&#x3044;&#x3044;&#x3093;&#x3060;&#x1F4A1;&#x300D;</p><h2 id="3-lottielab%E3%81%A7%E5%BF%85%E8%A6%81%E3%81%AA%E3%82%82%E3%81%AE%E3%82%92%E3%81%A4%E3%81%8F%E3%82%8B-%E5%8B%95%E3%81%8D%E3%82%92%E3%81%A4%E3%81%91%E3%82%88%E3%81%86%EF%BC%81">3. Lottielab&#x3067;&#x5FC5;&#x8981;&#x306A;&#x3082;&#x306E;&#x3092;&#x3064;&#x304F;&#x308B; / &#x52D5;&#x304D;&#x3092;&#x3064;&#x3051;&#x3088;&#x3046;&#xFF01;</h2><h4 id="lottielab%E3%81%A3%E3%81%A6%E3%81%AA%E3%81%AB%EF%BC%9F">Lottielab&#x3063;&#x3066;&#x306A;&#x306B;&#xFF1F;</h4><p>Lottielab&#x793E;&#x304C;&#x958B;&#x767A;&#x3057;&#x305F;web&#x4E0A;&#x3067;lottie&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x3092;&#x4F5C;&#x6210;&#x3059;&#x308B;&#x305F;&#x3081;&#x306E;&#x30C4;&#x30FC;&#x30EB;&#x3067;&#x3059;&#x3002;</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://www.lottielab.com/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Lottielab | Create and Edit Lottie Animations</div><div class="kg-bookmark-description">Create and ship animations to your products faster. Bring your websites and apps to life with the simplest editor for Lottie animations.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://framerusercontent.com/images/JkAvwuKyp6A8hopPbV1p3mE8.svg" alt="&#x3010;Lottielab&#x3011;&#x30AF;&#x30EA;&#x30B9;&#x30DE;&#x30B9;&#x30D7;&#x30EC;&#x30BC;&#x30F3;&#x30C8;&#x3092;&#x5C4A;&#x3051;&#x3088;&#x3046;&#xFF01;&#x1F381;"><span class="kg-bookmark-author">Create and Edit Lottie Animations</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://framerusercontent.com/assets/UpQ9uqXEWaaKMInhvbdP1V9uKc.png" alt="&#x3010;Lottielab&#x3011;&#x30AF;&#x30EA;&#x30B9;&#x30DE;&#x30B9;&#x30D7;&#x30EC;&#x30BC;&#x30F3;&#x30C8;&#x3092;&#x5C4A;&#x3051;&#x3088;&#x3046;&#xFF01;&#x1F381;"></div></a></figure><p>&#x7121;&#x6599;&#x7248;&#x30FB;&#x6709;&#x6599;&#x7248;&#x304C;&#x3042;&#x308A;&#x3001;&#x7121;&#x6599;&#x7248;&#x3067;&#x3082;&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x6570;&#x306B;&#x5236;&#x9650;&#x306A;&#x304F;&#x4F5C;&#x6210;&#x3059;&#x308B;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x307E;&#x3059;&#x304C;&#x3001;&#x900F;&#x304B;&#x3057;&#x304C;&#x5165;&#x3063;&#x3066;&#x3057;&#x307E;&#x3046;&#x3093;&#x3067;&#x3059;&#x3088;&#x306D;...&#x73FE;&#x5728;&#x306F;&#x52C9;&#x5F37;&#x6BB5;&#x968E;&#x306A;&#x306E;&#x3067;&#x7121;&#x6599;&#x7248;&#x3092;&#x4F7F;&#x3063;&#x3066;&#x3044;&#x307E;&#x3059;&#x304C;&#x3001;&#x5B9F;&#x969B;&#x306B;&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30E0;&#x3092;&#x4F5C;&#x308B;&#x5834;&#x5408;&#x306B;&#x306F;&#x8AB2;&#x91D1;&#x3057;&#x305F;&#x307B;&#x3046;&#x304C;&#x826F;&#x3055;&#x305D;&#x3046;&#x3067;&#x3059;&#x3002;&#xFF08;&#x3061;&#x3087;&#x3063;&#x3068;&#x9AD8;&#x3044;...&#x1F4B8;&#xFF09;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.shinonome.io/content/images/2024/12/----------2024-12-07-18.01.57.png" class="kg-image" alt="&#x3010;Lottielab&#x3011;&#x30AF;&#x30EA;&#x30B9;&#x30DE;&#x30B9;&#x30D7;&#x30EC;&#x30BC;&#x30F3;&#x30C8;&#x3092;&#x5C4A;&#x3051;&#x3088;&#x3046;&#xFF01;&#x1F381;" loading="lazy" width="1884" height="952" srcset="http://blog.shinonome.io/content/images/size/w600/2024/12/----------2024-12-07-18.01.57.png 600w, http://blog.shinonome.io/content/images/size/w1000/2024/12/----------2024-12-07-18.01.57.png 1000w, http://blog.shinonome.io/content/images/size/w1600/2024/12/----------2024-12-07-18.01.57.png 1600w, http://blog.shinonome.io/content/images/2024/12/----------2024-12-07-18.01.57.png 1884w" sizes="(min-width: 720px) 720px"><figcaption>Lottielab&#x516C;&#x5F0F;HP&#x3088;&#x308A;&#x5F15;&#x7528;</figcaption></figure><h4 id="lottie%E3%81%A3%E3%81%A6%E3%81%9D%E3%82%82%E3%81%9D%E3%82%82%E3%81%AA%E3%81%AB%EF%BC%9F">Lottie&#x3063;&#x3066;&#x305D;&#x3082;&#x305D;&#x3082;&#x306A;&#x306B;&#xFF1F;</h4><p>Lottie&#x3068;&#x306F;Airbnb&#x306E;&#x30A8;&#x30F3;&#x30B8;&#x30CB;&#x30A2;&#x304C;&#x958B;&#x767A;&#x3057;&#x305F;JSON&#x30D9;&#x30FC;&#x30B9;&#x306E;&#x30D9;&#x30AF;&#x30BF;&#x30FC;&#x30A2;&#x30CB;&#x30E1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x7528;&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x5F62;&#x5F0F;&#x3067;&#x3059;&#x3002;<br>Lottie&#x306B;&#x306F;&#x3001;<br>&#x30FB;&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x30B5;&#x30A4;&#x30BA;&#x304C;&#x8EFD;&#x91CF;<br>&#x30FB;&#x62E1;&#x5927;&#x3001;&#x7E2E;&#x5C0F;&#x3057;&#x3066;&#x3082;&#x753B;&#x8CEA;&#x304C;&#x52A3;&#x5316;&#x3057;&#x306A;&#x3044;<br>&#x30FB;&#x958B;&#x767A;&#x5DE5;&#x6570;&#x3092;&#x524A;&#x6E1B;&#x3067;&#x304D;&#x308B;<br>&#x3068;&#x3044;&#x3046;&#x30E1;&#x30EA;&#x30C3;&#x30C8;&#x304C;&#x3042;&#x308A;&#x307E;&#x3059;&#x3002;</p><p>&#x305D;&#x308C;&#x3067;&#x306F;&#x5B9F;&#x969B;&#x306B;Lottielab&#x306E;&#x4F7F;&#x3044;&#x65B9;&#x3092;&#x898B;&#x3066;&#x3044;&#x304D;&#x307E;&#x3057;&#x3087;&#x3046;&#x1F3B5;<br>&#x4EE5;&#x4E0B;&#x304C;Lottielab&#x306E;&#x753B;&#x9762;&#x306B;&#x306A;&#x308A;&#x307E;&#x3059;&#x3002;<br>&#x4E00;&#x822C;&#x7684;&#x306A;Web&#x30C7;&#x30B6;&#x30A4;&#x30F3;&#x30C4;&#x30FC;&#x30EB;&#x3068;&#x52D5;&#x753B;&#x7DE8;&#x96C6;&#x30C4;&#x30FC;&#x30EB;&#x3092;&#x5408;&#x308F;&#x305B;&#x305F;&#x3088;&#x3046;&#x306A;&#x753B;&#x9762;&#x306B;&#x306A;&#x3063;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.shinonome.io/content/images/2024/12/----------2024-12-08-2.22.53-1.png" class="kg-image" alt="&#x3010;Lottielab&#x3011;&#x30AF;&#x30EA;&#x30B9;&#x30DE;&#x30B9;&#x30D7;&#x30EC;&#x30BC;&#x30F3;&#x30C8;&#x3092;&#x5C4A;&#x3051;&#x3088;&#x3046;&#xFF01;&#x1F381;" loading="lazy" width="2000" height="1110" srcset="http://blog.shinonome.io/content/images/size/w600/2024/12/----------2024-12-08-2.22.53-1.png 600w, http://blog.shinonome.io/content/images/size/w1000/2024/12/----------2024-12-08-2.22.53-1.png 1000w, http://blog.shinonome.io/content/images/size/w1600/2024/12/----------2024-12-08-2.22.53-1.png 1600w, http://blog.shinonome.io/content/images/size/w2400/2024/12/----------2024-12-08-2.22.53-1.png 2400w" sizes="(min-width: 720px) 720px"><figcaption>Lottielab&#x306E;&#x7DE8;&#x96C6;&#x753B;&#x9762;</figcaption></figure><p><br>&#x5B9F;&#x969B;&#x306B;&#x884C;&#x3046;&#x5DE5;&#x7A0B;&#x306F;&#x3001;<br>&#x2460;&#x30C7;&#x30B6;&#x30A4;&#x30F3;&#x3092;&#x4F5C;&#x6210;&#x3059;&#x308B;<br>&#x2461; &#x30A2;&#x30CB;&#x30E1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x3092;&#x8FFD;&#x52A0;&#x3059;&#x308B;<br>&#x2462; &#x30A8;&#x30AF;&#x30B9;&#x30DD;&#x30FC;&#x30C8;&#x3059;&#x308B;<br>&#x3060;&#x3051;&#x3067;&#x3059;&#x1F633;</p><p>&#x305D;&#x308C;&#x3067;&#x306F;&#x5404;&#x5DE5;&#x7A0B;&#x306E;&#x4F8B;&#x3092;&#x898B;&#x3066;&#x3044;&#x304D;&#x307E;&#x3057;&#x3087;&#x3046;&#xFF01;</p><p>&#x3053;&#x3053;&#x3067;&#x306F;&#x3001;&#x30BD;&#x30EA;&#x306B;&#x4E57;&#x3063;&#x305F;&#x30B5;&#x30F3;&#x30BF;&#x3055;&#x3093;&#x304C;&#x7A7A;&#x304B;&#x3089;&#x30D7;&#x30EC;&#x30BC;&#x30F3;&#x30C8;&#x3092;&#x5C4A;&#x3051;&#x308B;&#x30A2;&#x30CB;&#x30E1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x3092;&#x4F5C;&#x3063;&#x3066;&#x307F;&#x305F;&#x3044;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x3002;<br></p><h3 id="31-%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B">3.1 &#x30C7;&#x30B6;&#x30A4;&#x30F3;&#x3092;&#x4F5C;&#x6210;&#x3059;&#x308B;</h3><p>Lottielab&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x5DE6;&#x4E0A;&#x306B;&#x3042;&#x308B;&#x30C4;&#x30FC;&#x30EB;&#x3092;&#x7528;&#x3044;&#x3066;&#x30C7;&#x30B6;&#x30A4;&#x30F3;&#x3092;&#x4F5C;&#x6210;&#x3057;&#x305F;&#x308A;&#x3001;&#x65E2;&#x5B58;&#x306E;&#x30A4;&#x30E9;&#x30B9;&#x30C8;&#x3092;&#x30A4;&#x30F3;&#x30DD;&#x30FC;&#x30C8;&#x3057;&#x3066;&#x5229;&#x7528;&#x3057;&#x305F;&#x308A;&#x3059;&#x308B;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x307E;&#x3059;&#x3002;<br>&#x307E;&#x305F;&#x3001;Lottielab&#x306B;&#x306F;Figma&#x7528;&#x306E;Plugin&#x3082;&#x5B58;&#x5728;&#x3057;&#x3066;&#x304A;&#x308A;&#x3001;&#x30C7;&#x30B6;&#x30A4;&#x30F3;&#x3092;Figma&#x3067;&#x4F5C;&#x6210;&#x3057;&#x3066;Lottielab&#x306B;&#x30A4;&#x30F3;&#x30DD;&#x30FC;&#x30C8;&#x3059;&#x308B;&#x3053;&#x3068;&#x3082;&#x3067;&#x304D;&#x307E;&#x3059;&#xFF01;&#x8A73;&#x3057;&#x304F;&#x306F;<a href="https://www.figma.com/community/plugin/1307008445393559148/lottielab-figma-to-lottie-animation">&#x3053;&#x3061;&#x3089;</a></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.shinonome.io/content/images/2024/12/----------2024-12-20-12.00.23.png" class="kg-image" alt="&#x3010;Lottielab&#x3011;&#x30AF;&#x30EA;&#x30B9;&#x30DE;&#x30B9;&#x30D7;&#x30EC;&#x30BC;&#x30F3;&#x30C8;&#x3092;&#x5C4A;&#x3051;&#x3088;&#x3046;&#xFF01;&#x1F381;" loading="lazy" width="902" height="132" srcset="http://blog.shinonome.io/content/images/size/w600/2024/12/----------2024-12-20-12.00.23.png 600w, http://blog.shinonome.io/content/images/2024/12/----------2024-12-20-12.00.23.png 902w" sizes="(min-width: 720px) 720px"><figcaption>&#x30C4;&#x30FC;&#x30EB;&#x30D0;&#x30FC;</figcaption></figure><div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">&#x1F4A1;</div><div class="kg-callout-text">&#x73FE;&#x72B6;Lottielab&#x4E0A;&#x3067;&#x306F;&#x7C21;&#x6613;&#x7684;&#x306A;&#x30C7;&#x30B6;&#x30A4;&#x30F3;&#x306F;&#x4F5C;&#x6210;&#x53EF;&#x80FD;&#x3067;&#x3059;&#x304C;&#x3001;&#x307E;&#x3060;&#x307E;&#x3060;Figma&#x306E;&#x307B;&#x3046;&#x304C;&#x7D30;&#x304B;&#x3044;&#x30C7;&#x30B6;&#x30A4;&#x30F3;&#x304C;&#x53EF;&#x80FD;&#x3068;&#x3044;&#x3046;&#x5370;&#x8C61;&#x304C;&#x3042;&#x308A;&#x307E;&#x3059;&#x3002;<br>&#x300C;&#x30C7;&#x30B6;&#x30A4;&#x30F3;&#x306B;&#x3053;&#x3060;&#x308F;&#x308A;&#x305F;&#x3044;&#x300D;&#x3068;&#x3044;&#x3046;&#x65B9;&#x306F;Figma&#x3067;&#x4F5C;&#x6210;&#x3057;&#x305F;&#x306E;&#x3061;&#x306B;Lottielab&#x306B;&#x30A4;&#x30F3;&#x30DD;&#x30FC;&#x30C8;&#x3059;&#x308B;&#x306E;&#x304C;&#x826F;&#x3044;&#x304B;&#x3082;&#x3057;&#x308C;&#x307E;&#x305B;&#x3093;&#x3002;</div></div><p>&#x30C7;&#x30B6;&#x30A4;&#x30F3;&#x3092;&#x4F5C;&#x6210;&#x3057;&#x305F;&#x3089;&#x3001;&#x30A2;&#x30CB;&#x30E1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x306E;&#x521D;&#x671F;&#x4F4D;&#x7F6E;&#x3068;&#x306A;&#x308B;&#x5834;&#x6240;&#x306B;&#x30AA;&#x30D6;&#x30B8;&#x30A7;&#x30AF;&#x30C8;&#x3092;&#x914D;&#x7F6E;&#x3057;&#x307E;&#x3059;&#x3002;<br>&#x4ECA;&#x56DE;&#x306F;&#x753B;&#x9762;&#x306E;&#x5916;&#x306B;&#x30B5;&#x30F3;&#x30BF;&#x3055;&#x3093;&#x3068;&#x30D7;&#x30EC;&#x30BC;&#x30F3;&#x30C8;&#x3092;&#x7F6E;&#x304D;&#x307E;&#x3057;&#x305F;&#x3002;<br>&#x306A;&#x304A;&#x3001;&#x30D7;&#x30EC;&#x30BC;&#x30F3;&#x30C8;&#x30DC;&#x30C3;&#x30AF;&#x30B9;&#x306F;&#x30B5;&#x30F3;&#x30BF;&#x3055;&#x3093;&#x306E;&#x5F8C;&#x308D;&#x306B;&#x96A0;&#x308C;&#x308B;&#x3088;&#x3046;&#x306B;&#x30FB;&#x30D7;&#x30EC;&#x30BC;&#x30F3;&#x30C8;&#x30DC;&#x30C3;&#x30AF;&#x30B9;&#x304C;&#x30C4;&#x30EA;&#x30FC;&#x306E;&#x524D;&#x306B;&#x8868;&#x793A;&#x3055;&#x308C;&#x308B;&#x3088;&#x3046;&#x306B;&#x30EC;&#x30A4;&#x30E4;&#x30FC;&#x3092;&#x8ABF;&#x6574;&#x3057;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;<br>&#x30EC;&#x30A4;&#x30E4;&#x30FC;&#x9806;&#x5E8F;&#x306B;&#x3064;&#x3044;&#x3066;&#x306F;&#x4EE5;&#x4E0B;&#x306E;&#x56F3;&#x306E;&#x5DE6;&#x5074;&#x3092;&#x53C2;&#x7167;&#x3057;&#x3066;&#x304F;&#x3060;&#x3055;&#x3044;&#x3002;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.shinonome.io/content/images/2024/12/----------2024-12-21-1.52.02.png" class="kg-image" alt="&#x3010;Lottielab&#x3011;&#x30AF;&#x30EA;&#x30B9;&#x30DE;&#x30B9;&#x30D7;&#x30EC;&#x30BC;&#x30F3;&#x30C8;&#x3092;&#x5C4A;&#x3051;&#x3088;&#x3046;&#xFF01;&#x1F381;" loading="lazy" width="2000" height="1110" srcset="http://blog.shinonome.io/content/images/size/w600/2024/12/----------2024-12-21-1.52.02.png 600w, http://blog.shinonome.io/content/images/size/w1000/2024/12/----------2024-12-21-1.52.02.png 1000w, http://blog.shinonome.io/content/images/size/w1600/2024/12/----------2024-12-21-1.52.02.png 1600w, http://blog.shinonome.io/content/images/size/w2400/2024/12/----------2024-12-21-1.52.02.png 2400w" sizes="(min-width: 720px) 720px"><figcaption>&#x4F5C;&#x6210;&#x3057;&#x305F;&#x30C7;&#x30B6;&#x30A4;&#x30F3;</figcaption></figure><h3 id="32-%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B">3.2 &#x30A2;&#x30CB;&#x30E1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x3092;&#x8FFD;&#x52A0;&#x3059;&#x308B;</h3><ol><li>&#x52D5;&#x304B;&#x3057;&#x305F;&#x3044;&#x30AA;&#x30D6;&#x30B8;&#x30A7;&#x30AF;&#x30C8;&#x3092;&#x9078;&#x629E;&#x3057;&#x3001;&#x753B;&#x9762;&#x4E2D;&#x592E;&#x4E0A;&#x90E8;&#x306B;&#x3042;&#x308B;&#x300C;Animate&#x300D;&#x3092;On&#x306B;&#x3057;&#x307E;&#x3059;&#x3002;</li><li>&#x753B;&#x9762;&#x4E0B;&#x90E8;&#x306B;&#x30BF;&#x30A4;&#x30E0;&#x30E9;&#x30A4;&#x30F3;&#x30D0;&#x30FC;&#x304C;&#x73FE;&#x308C;&#x308B;&#x306E;&#x3067;&#x3001;&#x4EFB;&#x610F;&#x306E;&#x6642;&#x9593;&#x307E;&#x3067;&#x7DD1;&#x8272;&#x306E;&#x30D0;&#x30FC;&#x3092;&#x52D5;&#x304B;&#x3057;&#x307E;&#x3059;&#x3002;</li><li>&#x4EFB;&#x610F;&#x306E;&#x6642;&#x9593;&#x5F8C;&#x306B;&#x3044;&#x3066;&#x6B32;&#x3057;&#x3044;&#x5834;&#x6240;&#x307E;&#x3067;&#x30AA;&#x30D6;&#x30B8;&#x30A7;&#x30AF;&#x30C8;&#x3092;&#x52D5;&#x304B;&#x3057;&#x307E;&#x3059;&#x3002;&#x3053;&#x308C;&#x306B;&#x3088;&#x308A;&#x79FB;&#x52D5;&#x524D;&#x3068;&#x79FB;&#x52D5;&#x5F8C;&#x304C;&#x70B9;&#x7DDA;&#x3067;&#x7E4B;&#x304C;&#x308C;&#x3001;&#x305D;&#x306E;&#x7DDA;&#x306B;&#x6CBF;&#x3063;&#x3066;&#x30AA;&#x30D6;&#x30B8;&#x30A7;&#x30AF;&#x30C8;&#x304C;&#x79FB;&#x52D5;&#x3059;&#x308B;&#x3088;&#x3046;&#x306B;&#x306A;&#x308A;&#x307E;&#x3059;&#x3002;<br>&#x70B9;&#x7DDA;&#x306E;&#x50BE;&#x304D;&#x306F;&#x3001;&#x753B;&#x9762;&#x53F3;&#x5074;&#x306E;&#x30D7;&#x30ED;&#x30D1;&#x30C6;&#x30A3;&#x30D1;&#x30CD;&#x30EB;&#x304B;&#x3089;&#x81EA;&#x7531;&#x306B;&#x5909;&#x66F4;&#x3059;&#x308B;&#x3053;&#x3068;&#x304C;&#x53EF;&#x80FD;&#x3067;&#x3059;&#xFF01;</li></ol><p>&#x4ECA;&#x56DE;&#x306F;&#x3001;&#x5168;&#x4F53;&#x306E;&#x30A2;&#x30CB;&#x30E1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x6642;&#x9593;&#x3092;5.00s&#x306B;&#x3057;&#x3001;2.00s&#x5F8C;&#x306B;&#x753B;&#x9762;&#x4E2D;&#x592E;&#x90E8;&#x3067;&#x6975;&#x5927;&#x3068;&#x306A;&#x308B;&#x653E;&#x7269;&#x7DDA;&#x3092;&#x63CF;&#x304F;&#x3088;&#x3046;&#x306B;&#x3057;&#x305F;&#x3044;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x3002;&#x307E;&#x305F;&#x3001;2.80s&#x5F8C;&#x306B;&#x30B5;&#x30F3;&#x30BF;&#x3055;&#x3093;&#x304C;&#x30D7;&#x30EC;&#x30BC;&#x30F3;&#x30C8;&#x3092;&#x843D;&#x4E0B;&#x3055;&#x305B;&#x3001;&#x30AF;&#x30EA;&#x30B9;&#x30DE;&#x30B9;&#x30C4;&#x30EA;&#x30FC;&#x306E;&#x8107;&#x306B;&#x30D7;&#x30EC;&#x30BC;&#x30F3;&#x30C8;&#x304C;&#x7F6E;&#x304B;&#x308C;&#x308B;&#x3088;&#x3046;&#x306B;&#x3057;&#x307E;&#x3059;&#x3002;</p><p>&#x5B9F;&#x969B;&#x306B;&#x4F5C;&#x6210;&#x3057;&#x305F;&#x306E;&#x304C;&#x4EE5;&#x4E0B;&#x306E;&#x52D5;&#x753B;&#x3067;&#x3059;&#x3002;<br>&#x96EA;&#x3082;&#x964D;&#x3089;&#x305B;&#x305F;&#x304B;&#x3063;&#x305F;&#x3067;&#x3059;&#x304C;&#x3001;&#x30A2;&#x30CB;&#x30E1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x3092;&#x3064;&#x3051;&#x308B;&#x306E;&#x304C;&#x9762;&#x5012;&#x3060;&#x3063;&#x305F;&#x306E;&#x3067;&#x7701;&#x304D;&#x307E;&#x3057;&#x305F;&#x1F602;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.shinonome.io/content/images/2024/12/---.gif" class="kg-image" alt="&#x3010;Lottielab&#x3011;&#x30AF;&#x30EA;&#x30B9;&#x30DE;&#x30B9;&#x30D7;&#x30EC;&#x30BC;&#x30F3;&#x30C8;&#x3092;&#x5C4A;&#x3051;&#x3088;&#x3046;&#xFF01;&#x1F381;" loading="lazy" width="1080" height="608"><figcaption>&#x5B8C;&#x6210;&#x54C1;</figcaption></figure><p>Figma&#x3092;&#x4F7F;&#x3063;&#x3066;&#x3044;&#x308B;&#x4EBA;&#x3067;&#x3042;&#x308C;&#x3070;&#x3001;&#x300C;&#x3053;&#x3053;&#x307E;&#x3067;&#x306E;&#x5DE5;&#x7A0B;&#x3067;&#x3042;&#x308C;&#x3070;&#x30D7;&#x30ED;&#x30C8;&#x30BF;&#x30A4;&#x30D7;&#x6A5F;&#x80FD;&#x3067;&#x826F;&#x304F;&#x306A;&#x3044;&#xFF1F;&#x300D;&#x3063;&#x3066;&#x306A;&#x308A;&#x307E;&#x3059;&#x3088;&#x306D;&#x3002;<br>&#x672C;&#x5F53;&#x306B;&#x512A;&#x308C;&#x3066;&#x3044;&#x308B;&#x70B9;&#x306F;&#x3001;&#x6B21;&#x306E;&#x5DE5;&#x7A0B;&#x306B;&#x3042;&#x308B;&#x306E;&#x3067;&#x3059;&#xFF01;</p><h3 id="33-%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88%E3%81%99%E3%82%8B">3.3 &#x30A8;&#x30AF;&#x30B9;&#x30DD;&#x30FC;&#x30C8;&#x3059;&#x308B;</h3><p>Lottielab&#x3092;&#x5229;&#x7528;&#x3059;&#x308B;&#x3068;&#x3001;JSON&#x5F62;&#x5F0F;&#x3067;&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x3092;&#x30A8;&#x30AF;&#x30B9;&#x30DD;&#x30FC;&#x30C8;&#x3067;&#x304D;&#x307E;&#x3059;&#x3002;<br>&#x305D;&#x306E;&#x305F;&#x3081;&#x3001;&#x30A8;&#x30AF;&#x30B9;&#x30DD;&#x30FC;&#x30C8;&#x3057;&#x305F;&#x30C7;&#x30FC;&#x30BF;&#x306E;&#x30D1;&#x30B9;&#x3092;&#x30B3;&#x30FC;&#x30C9;&#x306B;&#x7D44;&#x307F;&#x8FBC;&#x3080;&#x3053;&#x3068;&#x3067;&#x7C21;&#x5358;&#x306B;&#x30A2;&#x30CB;&#x30E1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x3092;&#x8868;&#x793A;&#x3059;&#x308B;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x307E;&#x3059;&#xFF01;</p><p>&#x753B;&#x9762;&#x53F3;&#x4E0A;&#x306E;&#x300C;Export&#x300D;&#x30DC;&#x30BF;&#x30F3;&#x3092;&#x62BC;&#x3057;&#x3066;&#x30C0;&#x30A6;&#x30F3;&#x30ED;&#x30FC;&#x30C9;&#x3057;&#x307E;&#x3059;&#x3002;<br>&#x4ECA;&#x56DE;&#x306F;&#x300C;12_24.json&#x300D;&#x3068;&#x3044;&#x3046;&#x540D;&#x524D;&#x3067;&#x4FDD;&#x5B58;&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;</p><p><br>&#x305D;&#x308C;&#x3067;&#x306F;&#x6B21;&#x306E;&#x9805;&#x3067;&#x5B9F;&#x969B;&#x306B;&#x5B9F;&#x88C5;&#x3057;&#x3066;&#x307F;&#x307E;&#x3057;&#x3087;&#x3046;&#xFF01;&#xFF01;</p><h2 id="4-%E7%B5%90%E6%9E%9C%E3%81%AF%EF%BC%9F">4. &#x7D50;&#x679C;&#x306F;&#xFF1F;</h2><p>&#x4ECA;&#x56DE;&#x306F;Streamlit&#x3068;&#x547C;&#x3070;&#x308C;&#x308B;Python&#x3067;Web&#x30A2;&#x30D7;&#x30EA;&#x30B1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x3092;&#x4F5C;&#x6210;&#x3067;&#x304D;&#x308B;&#x30D5;&#x30EC;&#x30FC;&#x30E0;&#x30EF;&#x30FC;&#x30AF;&#x3092;&#x7528;&#x3044;&#x3066;&#x30A2;&#x30CB;&#x30E1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x3092;&#x8868;&#x793A;&#x3057;&#x3066;&#x307F;&#x307E;&#x3059;&#x3002;</p><div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">&#x1F4A1;</div><div class="kg-callout-text">Streamlit&#x306B;&#x306F;streamlit-lottie&#x3068;&#x547C;&#x3070;&#x308C;&#x308B;&#x30D1;&#x30C3;&#x30B1;&#x30FC;&#x30B8;&#x304C;&#x3042;&#x308B;&#x305F;&#x3081;&#x5BB9;&#x6613;&#x306B;&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x66F8;&#x304F;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x307E;&#x3059;&#x3002;<br>&#x8A73;&#x7D30;&#x306F;<a href="https://pypi.org/project/streamlit-lottie/">&#x3053;&#x3061;&#x3089;</a><br><br>Flutter&#x306B;&#x3082;lottie&#x7528;&#x306E;&#x30D1;&#x30C3;&#x30B1;&#x30FC;&#x30B8;&#x304C;&#x3042;&#x308B;&#x305F;&#x3081;&#x3001;&#x7C21;&#x5358;&#x306B;&#x30E2;&#x30D0;&#x30A4;&#x30EB;&#x30A2;&#x30D7;&#x30EA;&#x306B;&#x7D44;&#x307F;&#x8FBC;&#x3081;&#x305D;&#x3046;&#x3067;&#x3059;&#x3002;<br>&#x8A73;&#x7D30;&#x306F;<a href="https://pub.dev/packages/lottie">&#x3053;&#x3061;&#x3089;</a></div></div><p>&#x306F;&#x3058;&#x3081;&#x306B;&#x5FC5;&#x8981;&#x306A;&#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x30EA;&#x3092;&#x30A4;&#x30F3;&#x30B9;&#x30C8;&#x30FC;&#x30EB;&#x3057;&#x307E;&#x3059;&#x3002;</p><pre><code class="language-bash">pip install streamlit&#xFF08;==1.41.1&#xFF09;

pip install streamlit-lottie&#xFF08;==0.0.5&#xFF09;
</code></pre><p></p><p>&#x6B21;&#x306B;&#x3001;&#x30A2;&#x30CB;&#x30E1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x3092;&#x8868;&#x793A;&#x3059;&#x308B;&#x305F;&#x3081;&#x306E;&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x66F8;&#x304D;&#x307E;&#x3059;&#x3002;</p><figure class="kg-card kg-code-card"><pre><code class="language-python">from streamlit_lottie import st_lottie
import json

# JSON&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x3092;&#x8AAD;&#x307F;&#x8FBC;&#x3080;&#x95A2;&#x6570;
def load_lottie(file_path):
        with open(file_path, &quot;r&quot;) as f:
                return json.load(f)

# &#x30ED;&#x30FC;&#x30AB;&#x30EB;&#x306B;&#x3042;&#x308B;JSON&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x306E;&#x30D1;&#x30B9;&#x3092;&#x6307;&#x5B9A;
file_path = &quot;12_24.json&quot;

# &#x30ED;&#x30FC;&#x30AB;&#x30EB;&#x306B;&#x3042;&#x308B;JSON&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x3092;&#x8AAD;&#x307F;&#x8FBC;&#x3080;
animation = load_lottie(file_path)

st_lottie(animation, width = 600, height = 400)
</code></pre><figcaption>AdventCalendar2024.py</figcaption></figure><p>&#x6700;&#x5F8C;&#x306B;&#x3001;Lottielab&#x3067;&#x4F5C;&#x6210;&#x3057;&#x305F;JSON&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x306E;&#x30D1;&#x30B9;&#x3092;&#x6307;&#x5B9A;&#x3057;&#x3001;AdventCalendar2024.py&#x3092;&#x5B9F;&#x884C;&#x3057;&#x307E;&#x3059;&#x3002;<br> &#x30B3;&#x30FC;&#x30C9;&#x306E;&#x5B9F;&#x884C;&#x306B;&#x306F;&#x4EE5;&#x4E0B;&#x306E;&#x30B3;&#x30DE;&#x30F3;&#x30C9;&#x3092;&#x7528;&#x3044;&#x307E;&#x3059;&#x3002;</p><pre><code class="language-bash">streamlit run AdventCalendar2024.py</code></pre><figure class="kg-card kg-image-card"><img src="http://blog.shinonome.io/content/images/2024/12/----1.gif" class="kg-image" alt="&#x3010;Lottielab&#x3011;&#x30AF;&#x30EA;&#x30B9;&#x30DE;&#x30B9;&#x30D7;&#x30EC;&#x30BC;&#x30F3;&#x30C8;&#x3092;&#x5C4A;&#x3051;&#x3088;&#x3046;&#xFF01;&#x1F381;" loading="lazy" width="1080" height="608"></figure><p>&#x30A2;&#x30CB;&#x30E1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x3092;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x306B;&#x8868;&#x793A;&#x3059;&#x308B;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x307E;&#x3057;&#x305F;&#xFF01;</p><p>&#x3053;&#x3046;&#x3057;&#x3066;&#x30B5;&#x30F3;&#x30BF;&#x3055;&#x3093;&#x306B;&#x306A;&#x3063;&#x305F;&#x305F;&#x307E;&#x304F;&#x3093;&#x306F;&#x7A7A;&#x98DB;&#x3076;&#x30C8;&#x30CA;&#x30AB;&#x30A4;&#x306E;&#x5F15;&#x304F;&#x30BD;&#x30EA;&#x306B;&#x4E57;&#x308B;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x3001;&#x7121;&#x4E8B;&#x30D7;&#x30EC;&#x30BC;&#x30F3;&#x30C8;&#x3092;&#x5C4A;&#x3051;&#x308B;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x307E;&#x3057;&#x305F;&#x1F64C;</p><h2 id="5-%E3%82%A8%E3%83%94%E3%83%AD%E3%83%BC%E3%82%B0">5. &#x30A8;&#x30D4;&#x30ED;&#x30FC;&#x30B0;</h2><p>&#x305D;&#x3046;&#x3044;&#x3048;&#x3070;&#x4E2D;&#x8EAB;&#x3092;&#x898B;&#x305A;&#x306B;&#x30D7;&#x30EC;&#x30BC;&#x30F3;&#x30C8;&#x3092;&#x914D;&#x3063;&#x3066;&#x3057;&#x307E;&#x3063;&#x305F;&#x3051;&#x3069;&#x3001;&#x3042;&#x306E;&#x7BB1;&#x306E;&#x4E2D;&#x306B;&#x306F;&#x4F55;&#x304C;&#x5165;&#x3063;&#x3066;&#x3044;&#x305F;&#x3093;&#x3060;&#x308D;&#x3046;&#x304B;...&#xFF1F;</p><h2 id="6-%E3%81%82%E3%81%A8%E3%81%8C%E3%81%8D">6. &#x3042;&#x3068;&#x304C;&#x304D;</h2><p><br>&#x672C;&#x8A18;&#x4E8B;&#x306F;<br>&#x300C;&#x30A2;&#x30CB;&#x30E1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x306E;&#x3042;&#x308B;&#x30C7;&#x30B6;&#x30A4;&#x30F3;&#x3092;&#x3057;&#x305F;&#x3044;&#x3002;&#x3060;&#x3051;&#x3069;&#x30A8;&#x30F3;&#x30B8;&#x30CB;&#x30A2;&#x306E;&#x65B9;&#x306B;&#x30A2;&#x30CB;&#x30E1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x306E;&#x30A4;&#x30E1;&#x30FC;&#x30B8;&#x3092;&#x4F1D;&#x3048;&#x308B;&#x306E;&#x306F;&#x96E3;&#x3057;&#x3044;&#x3057;&#x3001;&#x4F1D;&#x3048;&#x3089;&#x308C;&#x305F;&#x3068;&#x3057;&#x3066;&#x3082;&#x5B9F;&#x88C5;&#x96E3;&#x3057;&#x305D;&#x3046;...&#x306A;&#x306B;&#x304B;&#x3044;&#x3044;&#x65B9;&#x6CD5;&#x306A;&#x3044;&#x304B;&#x306A;&#x300D;<br>&#x3068;&#x601D;&#x3063;&#x305F;&#x3053;&#x3068;&#x3092;&#x304D;&#x3063;&#x304B;&#x3051;&#x306B;Lottielab&#x306E;&#x5B58;&#x5728;&#x3092;&#x77E5;&#x308A;&#x3001;&#x305B;&#x3063;&#x304B;&#x304F;&#x306A;&#x3089;&#x89E6;&#x3063;&#x3066;&#x307F;&#x3066;&#x8A18;&#x4E8B;&#x306B;&#x3057;&#x3088;&#x3046;&#x3068;&#x601D;&#x3044;&#x3001;&#x57F7;&#x7B46;&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;</p><p>&#x308F;&#x305F;&#x3057;&#x3082;Lottielab&#x3092;&#x89E6;&#x308A;&#x59CB;&#x3081;&#x305F;&#x3070;&#x304B;&#x308A;&#x3067;&#x3059;&#x304C;&#x3001;&#x975E;&#x5E38;&#x306B;&#x6709;&#x7528;&#x3068;&#x611F;&#x3058;&#x305F;&#x306E;&#x3067;&#x3053;&#x308C;&#x304B;&#x3089;&#x3082;&#x52C9;&#x5F37;&#x3057;&#x3066;&#x3044;&#x304D;&#x305F;&#x3044;&#x3068;&#x601D;&#x3044;&#x307E;&#x3057;&#x305F;&#xFF01;<br>&#x3053;&#x306E;&#x8A18;&#x4E8B;&#x304C;&#x307F;&#x306A;&#x3055;&#x3093;&#x306B;&#x3068;&#x3063;&#x3066;&#x5C11;&#x3057;&#x3067;&#x3082;&#x6709;&#x76CA;&#x306A;&#x3082;&#x306E;&#x3068;&#x306A;&#x308C;&#x3070;&#x3068;&#x3066;&#x3082;&#x3046;&#x308C;&#x3057;&#x3044;&#x3067;&#x3059;&#x3002;<br>&#x6700;&#x5F8C;&#x307E;&#x3067;&#x304A;&#x4ED8;&#x304D;&#x5408;&#x3044;&#x3044;&#x305F;&#x3060;&#x304D;&#x3042;&#x308A;&#x304C;&#x3068;&#x3046;&#x3054;&#x3056;&#x3044;&#x307E;&#x3057;&#x305F;&#x3002;</p><p>Happy Holidays&#xFF01;&#x1F384;</p><h2 id="7-%E6%9C%9F%E9%96%93%E9%99%90%E5%AE%9A%E6%83%85%E5%A0%B1">7. &#x671F;&#x9593;&#x9650;&#x5B9A;&#x60C5;&#x5831;</h2><p>&#x672C;&#x8A18;&#x4E8B;&#x3092;&#x8AAD;&#x3093;&#x3067;Lottielab&#x3092;&#x4F7F;&#x3063;&#x3066;&#x307F;&#x305F;&#x304F;&#x306A;&#x3063;&#x3066;&#x3044;&#x305F;&#x3060;&#x3051;&#x305F;&#x3067;&#x3057;&#x3087;&#x3046;&#x304B;&#xFF1F;<br>2024&#x5E74;12&#x6708;17&#x65E5;&#x306B;Lottielab1.0&#x304C;&#x6B63;&#x5F0F;&#x306B;&#x30EA;&#x30EA;&#x30FC;&#x30B9;&#x3055;&#x308C;&#x307E;&#x3057;&#x305F;&#x1F389;<br>&#x6B63;&#x5F0F;&#x30EA;&#x30EA;&#x30FC;&#x30B9;&#x3092;&#x8A18;&#x5FF5;&#x3057;&#x3066;&#x901A;&#x5E38;&#x6708;$24&#x306E;Pro&#x30D7;&#x30E9;&#x30F3;&#x304C;2025&#x5E74;1&#x6708;&#x307E;&#x3067;&#x6708;$18&#x3068;&#x306A;&#x308B;&#x30AD;&#x30E3;&#x30F3;&#x30DA;&#x30FC;&#x30F3;&#x3092;&#x5B9F;&#x65BD;&#x3057;&#x3066;&#x3044;&#x307E;&#x3059;&#xFF01;<br>&#x305C;&#x3072;&#x3053;&#x306E;&#x6A5F;&#x4F1A;&#x306B;&#x306F;&#x3058;&#x3081;&#x3066;&#x307F;&#x308B;&#x306E;&#x306F;&#x3044;&#x304B;&#x304C;&#x3067;&#x3057;&#x3087;&#x3046;&#x304B;&#x1F440;</p><figure class="kg-card kg-image-card"><img src="http://blog.shinonome.io/content/images/2024/12/----------2024-12-18-2.15.33.png" class="kg-image" alt="&#x3010;Lottielab&#x3011;&#x30AF;&#x30EA;&#x30B9;&#x30DE;&#x30B9;&#x30D7;&#x30EC;&#x30BC;&#x30F3;&#x30C8;&#x3092;&#x5C4A;&#x3051;&#x3088;&#x3046;&#xFF01;&#x1F381;" loading="lazy" width="2000" height="1109" srcset="http://blog.shinonome.io/content/images/size/w600/2024/12/----------2024-12-18-2.15.33.png 600w, http://blog.shinonome.io/content/images/size/w1000/2024/12/----------2024-12-18-2.15.33.png 1000w, http://blog.shinonome.io/content/images/size/w1600/2024/12/----------2024-12-18-2.15.33.png 1600w, http://blog.shinonome.io/content/images/size/w2400/2024/12/----------2024-12-18-2.15.33.png 2400w" sizes="(min-width: 720px) 720px"></figure><p></p><p>&#x660E;&#x65E5;&#x306F;&#x3044;&#x3088;&#x3044;&#x3088;AdventCalendar&#x6700;&#x7D42;&#x65E5;&#x3002;</p><p>PlayGround&#x3067;&#x306F;&#x30E2;&#x30D0;&#x30A4;&#x30EB;&#x30B3;&#x30FC;&#x30B9;&#x30FB;&#x30C7;&#x30B6;&#x30A4;&#x30F3;&#x30B3;&#x30FC;&#x30B9;&#x3092;&#x4FEE;&#x4E86;&#x3057;&#x3001;&#x5352;&#x696D;&#x5F8C;&#x3082;&#x7A4D;&#x6975;&#x7684;&#x306B;&#x30B3;&#x30DF;&#x30E5;&#x30CB;&#x30C6;&#x30A3;&#x306E;&#x305F;&#x3081;&#x306B;&#x6D3B;&#x52D5;&#x3057;&#x3066;&#x304F;&#x308C;&#x3066;&#x3044;&#x308B;&#x30A8;&#x30F3;&#x30B8;&#x30CB;&#x30A2;&#x306E;yo&#x304F;&#x3093;&#x304C;&#x304A;&#x5C4A;&#x3051;&#x3057;&#x307E;&#x3059;&#xFF01;</p><p>&#x3068;&#x3063;&#x3066;&#x3082;&#x697D;&#x3057;&#x307F;&#x3067;&#x3059;&#x1F60A;</p><h2 id="8-%E5%88%A9%E7%94%A8%E3%81%95%E3%81%9B%E3%81%A6%E3%81%84%E3%81%9F%E3%81%A0%E3%81%84%E3%81%9F%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88">8. &#x5229;&#x7528;&#x3055;&#x305B;&#x3066;&#x3044;&#x305F;&#x3060;&#x3044;&#x305F;&#x30A4;&#x30E9;&#x30B9;&#x30C8;</h2><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://soco-st.com/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">&#x5546;&#x7528;&#x53EF;&#x30FB;&#x30D5;&#x30EA;&#x30FC;&#x30A4;&#x30E9;&#x30B9;&#x30C8;&#x7D20;&#x6750;&#xFF5C;&#x30BD;&#x30B3;&#x30B9;&#x30C8;</div><div class="kg-bookmark-description">&#x5546;&#x7528;&#x53EF;&#x306E;&#x30B7;&#x30F3;&#x30D7;&#x30EB;&#x3067;&#x304B;&#x308F;&#x3044;&#x3044;&#x30D5;&#x30EA;&#x30FC;&#x30A4;&#x30E9;&#x30B9;&#x30C8;&#x7D20;&#x6750;&#x96C6;&#x3002;&#x753B;&#x50CF;&#x30FB;&#x30D9;&#x30AF;&#x30BF;&#x30FC;&#x5F62;&#x5F0F;&#x3067;DL&#xFF01;&#x8272;&#x5909;&#x66F4;&#x53EF;&#x80FD;&#xFF01;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://soco-st.com/wp-content/themes/socost/img/common/apple-touch-icon.png?ver=20191213" alt="&#x3010;Lottielab&#x3011;&#x30AF;&#x30EA;&#x30B9;&#x30DE;&#x30B9;&#x30D7;&#x30EC;&#x30BC;&#x30F3;&#x30C8;&#x3092;&#x5C4A;&#x3051;&#x3088;&#x3046;&#xFF01;&#x1F381;"><span class="kg-bookmark-author">&#x5546;&#x7528;&#x53EF;&#x30FB;&#x30D5;&#x30EA;&#x30FC;&#x30A4;&#x30E9;&#x30B9;&#x30C8;&#x7D20;&#x6750;&#xFF5C;&#x30BD;&#x30B3;&#x30B9;&#x30C8;</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://soco-st.com/wp-content/themes/socost/img/common/ogp.png?ver=20210410001" alt="&#x3010;Lottielab&#x3011;&#x30AF;&#x30EA;&#x30B9;&#x30DE;&#x30B9;&#x30D7;&#x30EC;&#x30BC;&#x30F3;&#x30C8;&#x3092;&#x5C4A;&#x3051;&#x3088;&#x3046;&#xFF01;&#x1F381;"></div></a></figure><h2 id="9-%E5%8F%82%E8%80%83">9. &#x53C2;&#x8003;</h2><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://pypi.org/project/streamlit/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">streamlit</div><div class="kg-bookmark-description">A faster way to build and share data apps</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://pypi.org/static/images/favicon.35549fe8.ico" alt="&#x3010;Lottielab&#x3011;&#x30AF;&#x30EA;&#x30B9;&#x30DE;&#x30B9;&#x30D7;&#x30EC;&#x30BC;&#x30F3;&#x30C8;&#x3092;&#x5C4A;&#x3051;&#x3088;&#x3046;&#xFF01;&#x1F381;"><span class="kg-bookmark-author">PyPI</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://pypi.org/static/images/twitter.abaf4b19.webp" alt="&#x3010;Lottielab&#x3011;&#x30AF;&#x30EA;&#x30B9;&#x30DE;&#x30B9;&#x30D7;&#x30EC;&#x30BC;&#x30F3;&#x30C8;&#x3092;&#x5C4A;&#x3051;&#x3088;&#x3046;&#xFF01;&#x1F381;"></div></a></figure><p><a href="https://pypi.org/project/streamlit-lottie/">https://pypi.org/project/streamlit-lottie/</a><br></p>]]></content:encoded></item><item><title><![CDATA[ISUCONでいいかんじにスキルアップしよう]]></title><description><![CDATA[ISUCON，やってみませんか？
バックエンド・インフラなどなどの知見を，楽しみながら習得しましょう！！]]></description><link>http://blog.shinonome.io/lets-isucon/</link><guid isPermaLink="false">676a9d2784f04652f6204941</guid><category><![CDATA[ISUCON]]></category><category><![CDATA[バックエンド]]></category><category><![CDATA[インフラ]]></category><dc:creator><![CDATA[PlayGround]]></dc:creator><pubDate>Sun, 22 Dec 2024 15:00:00 GMT</pubDate><media:content url="http://blog.shinonome.io/content/images/2024/12/00AED5B8-C95B-4BB9-900F-3DF676891144.png" medium="image"/><content:encoded><![CDATA[<img src="http://blog.shinonome.io/content/images/2024/12/00AED5B8-C95B-4BB9-900F-3DF676891144.png" alt="ISUCON&#x3067;&#x3044;&#x3044;&#x304B;&#x3093;&#x3058;&#x306B;&#x30B9;&#x30AD;&#x30EB;&#x30A2;&#x30C3;&#x30D7;&#x3057;&#x3088;&#x3046;"><p>&#x3053;&#x3093;&#x3070;&#x3093;&#x306F;&#x3002;&#x3044;&#x3084;&#xFF0C;&#x3053;&#x3093;&#x3044;&#x3059;&#x301C;&#xFF01;&#x5927;&#x5B66;4&#x5E74;&#x306E;<a href="https://github.com/TAK848">@TAK848</a>&#x3067;&#x3059;&#x3002;</p><p><br>&#x3053;&#x306E;&#x8A18;&#x4E8B;&#x306F;&#x300C;<a href="https://qiita.com/advent-calendar/2024/playground">PlayGround Advent Calendar 2024</a>&#x300D;&#x306E;23&#x65E5;&#x76EE;&#x306E;&#x8A18;&#x4E8B;&#x3067;&#x3059;&#x3002;24&#x65E5;&#x3067;&#x3057;&#x3087;&#x3063;&#x3066;&#xFF1F;&#x3044;&#x3084;&#xFF0C;&#x4ECA;&#x306F;&#x307E;&#x3060;&#x300C;2024/12/23 23:59 AoE&#x300D;&#x3067;&#x3059;&#x3002;&#x8AB0;&#x3082;JST&#x3068;&#x306F;&#x8A00;&#x3063;&#x3066;&#x3044;&#x306A;&#x3044;&#x3067;&#x3059;&#x3088;&#x306D;&#xFF1F;&#x1F914;</p><p>&#x6700;&#x8FD1;&#x51FA;&#x305F;&#x5B66;&#x4F1A;&#x306E;&#x539F;&#x7A3F;&#x7DE0;&#x5207;&#x306E;&#x8868;&#x8A18;&#x304C;&#x300C;AoE&#x300D;&#x3067;&#x3057;&#x305F;&#x3002;&#x3053;&#x308C;&#x306F;&#x300C;Anywhere on Earth&#x300D;&#x306E;&#x7565;&#x3067;&#xFF0C;&#x300C;&#x3042;&#x308B;&#x65E5;&#x300D;&#x304C;&#x5730;&#x7403;&#x4E0A;&#x3067;&#x6700;&#x3082;&#x9045;&#x304F;&#x7D42;&#x308F;&#x308B;&#x5730;&#x57DF;&#x306E;&#x30BF;&#x30A4;&#x30E0;&#x30BE;&#x30FC;&#x30F3;&#x306E;&#x6642;&#x9593;&#xFF0C;&#x3064;&#x307E;&#x308A;UTC-12&#x306E;&#x3053;&#x3068;&#x3092;&#x6307;&#x3059;&#x307F;&#x305F;&#x3044;&#x3067;&#x3059;&#x3002;JST&#x306F;UTC+9&#x306A;&#x306E;&#x3067;&#xFF0C;21&#x6642;&#x9593;&#x3082;&#x7336;&#x4E88;&#x304C;&#x3042;&#x308B;&#x3063;&#x3066;&#x3053;&#x3068;&#x3067;&#x3059;&#x306D;&#xFF01;</p><p><br>&#x3057;&#x3087;&#x3046;&#x3082;&#x306A;&#x3044;&#x8A71;&#x306F;&#x3053;&#x308C;&#x304F;&#x3089;&#x3044;&#x306B;&#x3057;&#x3066;&#xFF0C;&#x307F;&#x306A;&#x3055;&#x3093;&#xFF0C;ISUCON&#x3068;&#x3044;&#x3046;&#x30B3;&#x30F3;&#x30C6;&#x30B9;&#x30C8;&#x306F;&#x3054;&#x5B58;&#x3058;&#x3067;&#x3057;&#x3087;&#x3046;&#x304B;&#xFF1F;</p><p>&#x4ECA;&#x56DE;&#x306F;&#xFF0C;&#x4E3B;&#x306B;&#x30D0;&#x30C3;&#x30AF;&#x30A8;&#x30F3;&#x30C9;&#x3092;&#x5B66;&#x3073;&#x59CB;&#x3081;&#x305F;&#x5B66;&#x751F;&#x3084;&#xFF0C;&#x30A4;&#x30F3;&#x30D5;&#x30E9;&#x306B;&#x5C11;&#x3057;&#x8208;&#x5473;&#x306E;&#x3042;&#x308B;&#x65B9;&#x306B;&#x5411;&#x3051;&#x3066;&#xFF0C;&#x300C;ISUCON&#x306B;&#x51FA;&#x308B;&#x3068;&#x8272;&#x3005;&#x30B9;&#x30AD;&#x30EB;&#x30A2;&#x30C3;&#x30D7;&#x3067;&#x304D;&#x308B;&#x305E;&#xFF01;&#x300D;&#x3068;&#x3044;&#x3046;&#x30C6;&#x30FC;&#x30DE;&#x3067;&#x66F8;&#x3044;&#x3066;&#x3044;&#x304D;&#x305F;&#x3044;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x3002;</p><h2 id="isucon%E3%81%A8%E3%81%AF">ISUCON&#x3068;&#x306F;</h2><p>ISUCON&#x306F;&#xFF0C;&#x300C;Iikanjini Speed Up Contest(&#x3044;&#x3044;&#x611F;&#x3058;&#x306B;&#x30B9;&#x30D4;&#x30FC;&#x30C9;&#x30A2;&#x30C3;&#x30D7;&#x30B3;&#x30F3;&#x30C6;&#x30B9;&#x30C8;)&#x300D;&#x306E;&#x7565;&#x3067;&#xFF0C;&#x540D;&#x524D;&#x306E;&#x901A;&#x308A;&#x300C;&#x3044;&#x3044;&#x611F;&#x3058;&#x306B;Web&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x3092;&#x9AD8;&#x901F;&#x5316;&#x3059;&#x308B;&#x300D;&#x30B3;&#x30F3;&#x30C6;&#x30B9;&#x30C8;&#x3067;&#x3059;&#x3002;1-3&#x4EBA;&#x3067;&#x30C1;&#x30FC;&#x30E0;&#x3092;&#x7D44;&#x3093;&#x3067;&#xFF0C;&#x76F4;&#x8FD1;&#x306E;ISUCON14&#x3067;&#x306F;1000&#x30C1;&#x30FC;&#x30E0;&#x304C;&#x53C2;&#x52A0;&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;&#x6BCE;&#x5E74;&#x958B;&#x50AC;&#x3055;&#x308C;&#x3066;&#x3044;&#x3066;&#xFF0C;&#x4ECA;&#x5E74;&#x304C;14&#x56DE;&#x76EE;&#x3067;&#x3059;&#x3002;</p><p>LINE&#x30E4;&#x30D5;&#x30FC;&#x200B;&#x200B;&#x682A;&#x5F0F;&#x4F1A;&#x793E;&#x304C;&#x4E3B;&#x50AC;&#x3059;&#x308B;&#x3053;&#x306E;&#x7AF6;&#x6280;&#x3067;&#x306F;&#xFF0C;&#x53C2;&#x52A0;&#x8005;&#x306B;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x304C;&#x4E0E;&#x3048;&#x3089;&#x308C;&#xFF0C;&#x305D;&#x306E;&#x4E2D;&#x3067;&#x52D5;&#x4F5C;&#x3059;&#x308B;Web&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x3092;&#x3044;&#x304B;&#x306B;&#x9AD8;&#x901F;&#x5316;&#x3067;&#x304D;&#x308B;&#x304B;&#x3092;&#x7AF6;&#x3044;&#x307E;&#x3059;&#x3002;&#x305D;&#x306E;&#x624B;&#x6CD5;&#x306F; <strong>**&#x300C;&#x4F55;&#x3067;&#x3082;&#x3042;&#x308A;&#x300D;**</strong> &#x3067;&#x3059;&#x3002;&#x4ED5;&#x69D8;&#x3092;&#x7DAD;&#x6301;&#x3059;&#x308B;&#x9650;&#x308A;&#xFF0C;&#x30B3;&#x30FC;&#x30C9;&#x306E;&#x66F8;&#x304D;&#x63DB;&#x3048;&#xFF0C;&#x30DF;&#x30C9;&#x30EB;&#x30A6;&#x30A7;&#x30A2;&#x306E;&#x4EA4;&#x63DB;&#xFF0C;OS&#x8A2D;&#x5B9A;&#x306E;&#x8ABF;&#x6574;&#x306A;&#x3069;&#xFF0C;&#x3084;&#x308C;&#x308B;&#x3053;&#x3068;&#x306F;&#x7121;&#x9650;&#x306B;&#x3042;&#x308A;&#x307E;&#x3059;&#x3002;&#x305F;&#x3060;&#x3057;&#xFF0C;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x306E;&#x30C1;&#x30E5;&#x30FC;&#x30CB;&#x30F3;&#x30B0;&#x306F;&#x4E0D;&#x8981;&#x3067;&#x3059;&#x3002;</p><p>&#x57FA;&#x672C;&#x7684;&#x306B;&#x6642;&#x9593;&#x306F;10&#x6642;-18&#x6642;&#x306E;8&#x6642;&#x9593;&#x3067;&#x3059;&#x3002;&#x6700;&#x8FD1;&#x306F;&#x7AF6;&#x6280;&#x958B;&#x59CB;&#x524D;&#x306B;&#xFF0C;&#x6539;&#x5584;&#x3059;&#x308B;&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x306E;&#x52D5;&#x753B;&#x304C;&#x6D41;&#x308C;&#x3066;&#xFF0C;18&#x6642;&#x306B;&#x305D;&#x306E;&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x304C;&#x30EA;&#x30EA;&#x30FC;&#x30B9;&#x3055;&#x308C;&#x308B;&#x304B;&#x3089;&#x305D;&#x308C;&#x307E;&#x3067;&#x306B;&#x306A;&#x304A;&#x3057;&#x3066;&#x6B32;&#x3057;&#x3044;&#xFF0C;&#x3068;&#x3044;&#x3063;&#x305F;&#x7121;&#x8336;&#x632F;&#x308A;&#x304C;&#x632F;&#x3089;&#x308C;&#x307E;&#x3059;&#x3002;&#x6BCE;&#x5E74;&#x8272;&#x3093;&#x306A;&#x30A2;&#x30D7;&#x30EA;&#x30B1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x304C;&#x51FA;&#x3066;&#x304D;&#x3066;&#xFF08;&#x3057;&#x304B;&#x3082;&#x30D1;&#x30D5;&#x30A9;&#x30FC;&#x30DE;&#x30F3;&#x30B9;&#x306F;&#x60AA;&#x3044;&#x304C;&#x3061;&#x3083;&#x3093;&#x3068;&#x52D5;&#x4F5C;&#x3059;&#x308B;&#x306E;&#x3067;&#xFF09;&#x975E;&#x5E38;&#x306B;&#x9762;&#x767D;&#x3044;&#x3067;&#x3059;&#x3002;</p><p>&#x7AF6;&#x6280;&#x304C;&#x59CB;&#x307E;&#x3063;&#x305F;&#x3089;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x306B;&#x30ED;&#x30B0;&#x30A4;&#x30F3;&#x3057;&#x3066;&#x30B3;&#x30FC;&#x30C9;&#x3084;&#x30A4;&#x30F3;&#x30D5;&#x30E9;&#x306E;&#x69CB;&#x6210;&#x30FB;&#x72B6;&#x614B;&#x3092;&#x78BA;&#x8A8D;&#xFF0C;&#x8A08;&#x6E2C;&#x3092;&#x884C;&#x3063;&#x3066;&#x30DC;&#x30C8;&#x30EB;&#x30CD;&#x30C3;&#x30AF;&#x3092;&#x7279;&#x5B9A;&#xFF0C;&#x6539;&#x5584;&#x3092;&#x884C;&#x3063;&#x3066;&#x3044;&#x304D;&#x307E;&#x3059;&#x3002;</p><p>&#x30B9;&#x30B3;&#x30A2;&#x306F;&#x4EFB;&#x610F;&#x306E;&#x30BF;&#x30A4;&#x30DF;&#x30F3;&#x30B0;&#x3067;&#x30DD;&#x30FC;&#x30BF;&#x30EB;&#x304B;&#x3089;&#x30D9;&#x30F3;&#x30C1;&#x30DE;&#x30FC;&#x30AB;&#x30FC;&#x3092;&#x56DE;&#x3059;&#x3053;&#x3068;&#x3067;&#x63A1;&#x70B9;&#x3055;&#x308C;&#x307E;&#x3059;&#x3002;</p><p>18&#x6642;&#x524D;&#x306B;&#x5B9F;&#x884C;&#x3057;&#x305F;&#x6700;&#x5F8C;&#x306E;&#x30D9;&#x30F3;&#x30C1;&#x30DE;&#x30FC;&#x30AF;&#x306E;&#x7D50;&#x679C;&#x304C;&#xFF0C;&#x300C;&#x57FA;&#x672C;&#x7684;&#x306B;&#x306F;&#x300D;&#x6700;&#x7D42;&#x30B9;&#x30B3;&#x30A2;&#x3067;&#x3059;&#x3002;</p><p>&#x305F;&#x3060;&#x3057;&#xFF0C;&#x7AF6;&#x6280;&#x7D42;&#x4E86;&#x5F8C;&#x306B;&#x74B0;&#x5883;&#x30C1;&#x30A7;&#x30C3;&#x30AF;&#x3084;&#xFF0C;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x518D;&#x8D77;&#x52D5;&#x5F8C;&#x306B;&#x518D;&#x5EA6;&#x30D9;&#x30F3;&#x30C1;&#x30DE;&#x30FC;&#x30AF;&#x3092;&#x8D70;&#x3089;&#x305B;&#x308B;&#x300C;&#x518D;&#x8D77;&#x52D5;&#x8A66;&#x9A13;&#x300D;&#xFF0C;&#x76EE;&#x8996;&#x306B;&#x3088;&#x308B;&#x30A2;&#x30D7;&#x30EA;&#x30B1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x306E;&#x52D5;&#x4F5C;&#x30C1;&#x30A7;&#x30C3;&#x30AF;&#x306A;&#x3069;&#x304C;&#x3042;&#x308A;&#xFF0C;&#x3044;&#x305A;&#x308C;&#x304B;&#x306B;&#x5931;&#x6557;&#x3059;&#x308B;&#x3068;FAIL&#x3068;&#x306A;&#x308A;&#x70B9;&#x6570;&#x306F;0&#x70B9;&#x306B;&#x306A;&#x308A;&#x307E;&#x3059;&#x3002;&#x3053;&#x3053;&#x3082;&#x91CD;&#x8981;&#x306A;&#x30DD;&#x30A4;&#x30F3;&#x30C8;&#x306A;&#x306E;&#x3067;&#x6C17;&#x3092;&#x3064;&#x3051;&#x307E;&#x3057;&#x3087;&#x3046;&#x3002;</p><p>&#xFF08;&#x30A4;&#x30D9;&#x30F3;&#x30C8;&#x306B;&#x3088;&#x3063;&#x3066;&#x30B9;&#x30B3;&#x30A2;&#x7B97;&#x51FA;&#x65B9;&#x6CD5;&#x306F;&#x6BCE;&#x56DE;&#x7570;&#x306A;&#x308B;&#x306E;&#x3067;&#xFF0C;&#x30DE;&#x30CB;&#x30E5;&#x30A2;&#x30EB;&#x3092;&#x3088;&#x304F;&#x8AAD;&#x3080;&#x3068;&#x826F;&#x3044;&#x3067;&#x3057;&#x3087;&#x3046;&#x3002;&#x539F;&#x5247;&#xFF0C;&#x30D9;&#x30F3;&#x30C1;&#x30DE;&#x30FC;&#x30AB;&#x30FC;&#x306F;&#x5F90;&#x3005;&#x306B;&#x8CA0;&#x8377;&#x3092;&#x304B;&#x3051;&#x3066;&#x304D;&#x307E;&#x3059;&#x3002;&#x6027;&#x80FD;&#x3092;&#x6539;&#x5584;&#x3059;&#x308B;&#x3068;&#xFF0C;&#x4ECA;&#x307E;&#x3067;&#x306F;&#x8D77;&#x3053;&#x3089;&#x306A;&#x304B;&#x3063;&#x305F;&#x30C7;&#x30C3;&#x30C9;&#x30ED;&#x30C3;&#x30AF;&#x306E;&#x554F;&#x984C;&#x306A;&#x3069;&#x304C;&#x767A;&#x751F;&#x3059;&#x308B;&#x3053;&#x3068;&#x3082;&#x3042;&#x308A;&#x5927;&#x5909;&#x3067;&#x3059;&#x3002;&#x305D;&#x3057;&#x3066;&#x6700;&#x8FD1;&#x306F;&#xFF0C;&#x4EEE;&#x60F3;&#x7684;&#x306A;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x306E;&#x884C;&#x52D5;&#x3092;&#x3082;&#x3068;&#x306B;&#xFF0C;&#x53CE;&#x76CA;&#x984D;&#x304C;&#x305D;&#x306E;&#x307E;&#x307E;&#x30B9;&#x30B3;&#x30A2;&#x306B;&#x306A;&#x308B;&#x306A;&#x3069;&#xFF0C;&#x30D7;&#x30ED;&#x30C0;&#x30AF;&#x30C8;&#x8996;&#x70B9;&#x306B;&#x3088;&#x308B;&#x5224;&#x65AD;&#x3082;&#x91CD;&#x8981;&#x306B;&#x306A;&#x3063;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;&#xFF09;</p><h2 id="isucon%E3%81%A7%E5%BF%85%E8%A6%81%E3%81%AA%E6%8A%80%E8%A1%93%E9%A0%98%E5%9F%9F"> ISUCON&#x3067;&#x5FC5;&#x8981;&#x306A;&#x6280;&#x8853;&#x9818;&#x57DF;</h2><p>ISUCON12&#x958B;&#x50AC;&#x524D;&#x306B;&#x4E8B;&#x524D;&#x8B1B;&#x7FD2;&#x4F1A;&#x304C;&#x3042;&#x308A;&#xFF0C;&#x305D;&#x3053;&#x3067;&#x8A73;&#x3057;&#x3044;&#x89E3;&#x8AAC;&#x3082;&#x3042;&#x308B;&#x306E;&#x3067;&#x826F;&#x3051;&#x308C;&#x3070;&#x3054;&#x89A7;&#x304F;&#x3060;&#x3055;&#x3044;&#x3002;</p><figure class="kg-card kg-embed-card"><iframe id="talk_frame_879809" class="speakerdeck-iframe" src="//speakerdeck.com/player/a153115bb83346ca990b5735bcd4d444" width="710" height="532" style="aspect-ratio:710/532; border:0; padding:0; margin:0; background:transparent;" frameborder="0" allowtransparency="true" allowfullscreen="allowfullscreen"></iframe>
</figure><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/8NjJcarqv50?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="ISUCON &#x4E8B;&#x524D;&#x8B1B;&#x7FD2; 2022 &#x5EA7;&#x5B66;"></iframe></figure><p>&#x3053;&#x306E;&#x89E3;&#x8AAC;&#x5185;&#x306E;&#x4EE5;&#x4E0B;&#x3092;&#x898B;&#x3066;&#x3082;&#x3089;&#x3046;&#x3068;&#x5206;&#x304B;&#x308B;&#x3093;&#x3067;&#x3059;&#x304C;&#xFF0C;&#x5192;&#x982D;&#x3067;&#x3082;&#x89E6;&#x308C;&#x305F;&#x3068;&#x304A;&#x308A;&#xFF0C;ISUCON&#x3067;&#x5FC5;&#x8981;&#x306A;&#x6280;&#x8853;&#x9818;&#x57DF;&#x306F;&#x4EE5;&#x4E0B;&#x306E;&#x3088;&#x3046;&#x306B;&#x3082;&#x306E;&#x3059;&#x3054;&#x304F;&#x5E83;&#x3044;&#x3067;&#x3059;&#x3002;</p><figure class="kg-card kg-image-card"><img src="http://blog.shinonome.io/content/images/2024/12/isucon-tech-area.png" class="kg-image" alt="ISUCON&#x3067;&#x3044;&#x3044;&#x304B;&#x3093;&#x3058;&#x306B;&#x30B9;&#x30AD;&#x30EB;&#x30A2;&#x30C3;&#x30D7;&#x3057;&#x3088;&#x3046;" loading="lazy" width="2000" height="1279" srcset="http://blog.shinonome.io/content/images/size/w600/2024/12/isucon-tech-area.png 600w, http://blog.shinonome.io/content/images/size/w1000/2024/12/isucon-tech-area.png 1000w, http://blog.shinonome.io/content/images/size/w1600/2024/12/isucon-tech-area.png 1600w, http://blog.shinonome.io/content/images/2024/12/isucon-tech-area.png 2376w" sizes="(min-width: 720px) 720px"></figure><p>&#x56F3;&#x3092;&#x898B;&#x308B;&#x3068;&#xFF0C;DB&#x30FB;&#x30A2;&#x30D7;&#x30EA;&#x30FB;&#x30DF;&#x30C9;&#x30EB;&#x30A6;&#x30A7;&#x30A2;&#x30FB;OS&#x30EC;&#x30A4;&#x30E4;&#x30FC;&#x306A;&#x3069;&#xFF0C;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x3092;&#x9664;&#x3044;&#x305F;&#x5E45;&#x5E83;&#x3044;&#x7BC4;&#x56F2;&#x306E;&#x9818;&#x57DF;&#x304C;&#x5FC5;&#x8981;&#x304C;&#x3042;&#x308B;&#x3053;&#x3068;&#x304C;&#x308F;&#x304B;&#x308A;&#x307E;&#x3059;&#x3002;&#x305F;&#x3060;&#x3057;&#xFF0C;&#x6700;&#x521D;&#x304B;&#x3089;&#x5168;&#x90E8;&#x304C;&#x3067;&#x304D;&#x308B;&#x5FC5;&#x8981;&#x306F;&#x5168;&#x304F;&#x3042;&#x308A;&#x307E;&#x305B;&#x3093;&#x3002;&#x307E;&#x305A;&#x306F;ISUCON&#x306E;&#x74B0;&#x5883;&#x3092;&#x30BB;&#x30C3;&#x30C8;&#x30A2;&#x30C3;&#x30D7;&#x3057;&#x3066;&#xFF0C;<a href="https://gihyo.jp/book/2022/978-4-297-12846-3">ISUCON&#x672C;</a>&#x3092;&#x7247;&#x624B;&#x306B;&#x89E3;&#x8AAC;&#x3068;&#x8B1B;&#x8A55;&#x3092;&#x8AAD;&#x307F;&#x306A;&#x304C;&#x3089;&#xFF0C;&#x624B;&#x3092;&#x52D5;&#x304B;&#x3057;&#x3066;&#x3044;&#x3063;&#x3066;&#x7FD2;&#x5F97;&#x3057;&#x3066;&#x3044;&#x304F;&#x3068;&#x826F;&#x3044;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x3002;&#x6700;&#x521D;&#x306F;&#xFF0C;&#x30A4;&#x30F3;&#x30C7;&#x30C3;&#x30AF;&#x30B9;&#x3068;&#x306F;&#xFF1F;&#x306A;&#x3069;&#x3068;&#x306A;&#x308B;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x304C;&#xFF0C;&#x9806;&#x3005;&#x306B;&#x7406;&#x89E3;&#x3057;&#x3066;&#x3044;&#x304F;&#x3053;&#x3068;&#x3067;&#xFF0C;&#x6280;&#x8853;&#x7684;&#x306A;&#x77E5;&#x898B;&#x3092;&#x5E83;&#x3081;&#xFF0C;&#x5B9F;&#x969B;&#x306E;&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x3067;&#x306E;&#x8CA0;&#x8377;&#x5BFE;&#x7B56;&#x3068;&#x3044;&#x3063;&#x305F;&#x3068;&#x3053;&#x308D;&#x306B;&#x307E;&#x3067;&#x5F79;&#x7ACB;&#x3064;&#x77E5;&#x8B58;&#x3092;&#x5F97;&#x3089;&#x308C;&#x308B;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x3002;</p><p>&#x4ECA;&#x307E;&#x3067;&#x306F;&#x30D0;&#x30C3;&#x30AF;&#x30A8;&#x30F3;&#x30C9;&#x306E;&#x30A2;&#x30D7;&#x30EA;&#x3092;&#x306A;&#x3093;&#x3068;&#x306A;&#x304F;&#x66F8;&#x3044;&#x3066;&#x304D;&#x305F;&#x3051;&#x3069;&#xFF0C;&#x3061;&#x3083;&#x3093;&#x3068;&#x81EA;&#x5206;&#x3067;&#x30A2;&#x30D7;&#x30EA;&#x3092;&#x516C;&#x958B;&#x3067;&#x304D;&#x308B;&#x3088;&#x3046;&#x306B;&#x306A;&#x308A;&#x305F;&#x3044;&#xFF01;&#x3068;&#x3044;&#x3063;&#x305F;&#x4EBA;&#x3078;&#x306E;&#x7B2C;&#x4E00;&#x6B69;&#x3068;&#x3057;&#x3066;&#x3082;&#xFF0C;&#x53E4;&#x5178;&#x7684;&#x306A;&#x30B7;&#x30F3;&#x30D7;&#x30EB;&#x69CB;&#x6210;&#x3067;&#x30A2;&#x30D7;&#x30EA;&#x306E;&#x5B9F;&#x88C5;&#x3092;&#x5B66;&#x3073;&#x6539;&#x5584;&#x3057;&#x3066;&#x3044;&#x304F;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x308B;&#x306E;&#x3067;&#x3068;&#x3066;&#x3082;&#x826F;&#x3044;&#x3067;&#x3059;&#xFF08;&#x3082;&#x3061;&#x308D;&#x3093;&#x7AF6;&#x6280;&#x7528;&#x3067;&#xFF0C;&#x8272;&#x3093;&#x306A;&#x8A00;&#x8A9E;&#x306B;&#x79FB;&#x690D;&#x3059;&#x308B;&#x3053;&#x3068;&#x3092;&#x524D;&#x63D0;&#x306B;&#x3057;&#x3066;&#x3044;&#x308B;&#x306E;&#x3067;&#xFF0C;&#x30A2;&#x30FC;&#x30AD;&#x30C6;&#x30AF;&#x30C1;&#x30E3;&#x306A;&#x3069;&#x304C;&#x305D;&#x306E;&#x307E;&#x307E;&#x5B9F;&#x52D9;&#x306B;&#x751F;&#x304D;&#x308B;&#x3068;&#x3044;&#x3046;&#x308F;&#x3051;&#x3067;&#x306F;&#x306A;&#x3044;&#x3067;&#x3059;&#x304C;&#x2026;&#xFF01;&#xFF09;</p><h2 id="isucon%E3%82%92%E5%BD%A9%E3%82%8B%E9%9D%A2%E7%99%BD%E3%81%84%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%81%94">ISUCON&#x3092;&#x5F69;&#x308B;&#x9762;&#x767D;&#x3044;&#x30A2;&#x30D7;&#x30EA;&#x30B1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x9054;</h2><p>&#x305D;&#x3093;&#x306A;ISUCON&#x3067;&#x3059;&#x304C;&#xFF0C;&#x6BCE;&#x5E74;&#x8A71;&#x984C;&#x3060;&#x3063;&#x305F;&#x308A;&#x30E6;&#x30CB;&#x30FC;&#x30AF;&#x3060;&#x3063;&#x305F;&#x308A;&#x306A;&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x3092;&#x51FA;&#x984C;&#x3057;&#x3066;&#x304F;&#x3060;&#x3055;&#x3063;&#x3066;&#x3044;&#x3066;&#x9762;&#x767D;&#x3044;&#x3067;&#x3059;&#x3002;&#x5177;&#x4F53;&#x7684;&#x306A;&#x5185;&#x5BB9;&#x3092;&#xFF0C;&#x52D5;&#x753B;&#x3084;&#x89E3;&#x8AAC;&#x3068;&#x8B1B;&#x8A55;&#x3068;&#x5171;&#x306B;&#x7D39;&#x4ECB;&#x3057;&#x307E;&#x3059;&#x3002;<br><strong> ISUCON14&#x672C;&#x9078; - ISURIDE</strong><br>&#x4EEE;&#x60F3;&#x306E;&#x30E9;&#x30A4;&#x30C9;&#x300C;&#x30C1;&#x30A7;&#x30A2;&#x300D;&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x3002;&#x30A4;&#x30F3;&#x30C7;&#x30C3;&#x30AF;&#x30B9;&#x8CBC;&#x3063;&#x305F;&#x308A;N+1&#x89E3;&#x6D88;&#x3057;&#x305F;&#x308A;&#xFF0C;&#x5947;&#x3005;&#x602A;&#x3005;&#x306A;SQL&#x3092;&#x6F70;&#x3057;&#x305F;&#x308A;&#x3068;&#x3044;&#x3063;&#x305F;&#x738B;&#x9053;&#x306E;&#x4FEE;&#x6B63;&#x306F;&#x3082;&#x3061;&#x308D;&#x3093;&#xFF0C;SSE&#xFF08;Server-Sent Events&#xFF09;&#x3084;&#x30DE;&#x30C3;&#x30C1;&#x30F3;&#x30B0;&#x30A2;&#x30EB;&#x30B4;&#x30EA;&#x30BA;&#x30E0;&#x306E;&#x30C1;&#x30E5;&#x30FC;&#x30CB;&#x30F3;&#x30B0;&#x3068;&#x8A00;&#x3063;&#x305F;&#x4ECA;&#x307E;&#x3067;&#x306B;&#x306F;&#x306A;&#x3044;&#x69D8;&#x3005;&#x306A;&#x30B9;&#x30B3;&#x30A2;&#x30A2;&#x30C3;&#x30D7;&#x30C1;&#x30E5;&#x30FC;&#x30CB;&#x30F3;&#x30B0;&#x30DD;&#x30A4;&#x30F3;&#x30C8;&#x304C;&#x3042;&#x308A;&#x307E;&#x3057;&#x305F;&#x3002;</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/UFlcAUvWvrY?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="ISUCON14 &#x51FA;&#x984C;&#x52D5;&#x753B;"></iframe></figure><p>&#x89E3;&#x8AAC;&#x3068;&#x8B1B;&#x8A55;</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://isucon.net/archives/58869617.html"><div class="kg-bookmark-content"><div class="kg-bookmark-title">ISUCON14 &#x554F;&#x984C;&#x306E;&#x89E3;&#x8AAC;&#x3068;&#x8B1B;&#x8A55; : ISUCON&#x516C;&#x5F0F;Blog</div><div class="kg-bookmark-description">&#x3053;&#x3093;&#x306B;&#x3061;&#x306F;&#x3001;ISUCON14&#x306E;&#x4F5C;&#x554F;&#x30C1;&#x30FC;&#x30E0;&#x30FB;NaruseJun&#x306E;&#x3068;&#x30FC;&#x3075;&#x3068;&#x3075;&#x3067;&#x3059;&#x3002;&#x3053;&#x306E;&#x8A18;&#x4E8B;&#x3067;&#x306F;&#x3001;ISUCON14&#x306E;&#x554F;&#x984C;&#x3068;&#x3057;&#x3066;&#x51FA;&#x984C;&#x3057;&#x305F;&#x300C;ISURIDE&#x300D;&#x306E;&#x89E3;&#x8AAC;&#x3068;&#x8B1B;&#x8A55;&#x3092;&#x304A;&#x5C4A;&#x3051;&#x3057;&#x307E;&#x3059;&#x3002;&#x4ECA;&#x56DE;&#x306E;&#x554F;&#x984C;&#x306F;&#x3001;NaruseJun&#x306E;&#x30E1;&#x30F3;&#x30D0;&#x30FC;&#x304C;&#x6240;&#x5C5E;&#x3059;&#x308B;&#x30DD;&#x30B1;&#x30C3;&#x30C8;&#x30B5;&#x30A4;&#x30F3;&#x304C;&#x4F5C;&#x554F;&#x3092;&#x62C5;&#x5F53;&#x3057;&#x3001;LINE&#x30E4;&#x30D5;&#x30FC;&#x306E;&#x7686;&#x3055;&#x3093;&#x306B;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x5B9F;&#x88C5;&#x3067;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://livedoor.blogimg.jp/isucon/imgs/a/e/favicon.ico" alt="ISUCON&#x3067;&#x3044;&#x3044;&#x304B;&#x3093;&#x3058;&#x306B;&#x30B9;&#x30AD;&#x30EB;&#x30A2;&#x30C3;&#x30D7;&#x3057;&#x3088;&#x3046;"><span class="kg-bookmark-author">ISUCON&#x516C;&#x5F0F;Blog</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://livedoor.blogimg.jp/isucon/imgs/4/2/427dd0fd-s.png" alt="ISUCON&#x3067;&#x3044;&#x3044;&#x304B;&#x3093;&#x3058;&#x306B;&#x30B9;&#x30AD;&#x30EB;&#x30A2;&#x30C3;&#x30D7;&#x3057;&#x3088;&#x3046;"></div></a></figure><h3 id="isucon13%E6%9C%AC%E9%81%B8isupipe">ISUCON13&#x672C;&#x9078; - ISUPIPE</h3><p>&#x4EEE;&#x60F3;&#x306E;&#x52D5;&#x753B;&#x914D;&#x4FE1;&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x3002;&#x3053;&#x3093;&#x3044;&#x3059;&#x301C;&#x3002;DNS&#x6C34;&#x653B;&#x3081;&#x653B;&#x6483;&#x3068;&#x3044;&#x3046;&#x653B;&#x6483;&#x304C;&#x6765;&#x308B;&#x306E;&#x3067;&#xFF0C;&#x305D;&#x308C;&#x306E;&#x5BFE;&#x7B56;&#x306B;&#x6642;&#x524D;&#x306E;DNS&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x3092;Go&#x3067;&#x4F5C;&#x308B;&#x3088;&#x3046;&#x306A;&#x30C1;&#x30FC;&#x30E0;&#x3082;&#x3044;&#x305F;&#x307F;&#x305F;&#x3044;&#x3067;&#x3059;&#x3002;N+1&#x554F;&#x984C;&#x304C;&#x5927;&#x91CF;&#x306B;&#x57CB;&#x307E;&#x3063;&#x3066;&#x3044;&#x305F;&#x308A;&#x3068;&#x738B;&#x9053;&#x306E;&#x30C1;&#x30E5;&#x30FC;&#x30CB;&#x30F3;&#x30B0;&#x3082;&#x591A;&#x304B;&#x3063;&#x305F;&#x30A4;&#x30E1;&#x30FC;&#x30B8;&#x3002;</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/OOyInZbM85k?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="ISUCON13 &#x51FA;&#x984C;&#x52D5;&#x753B;"></iframe></figure><p>&#x89E3;&#x8AAC;&#x3068;&#x8B1B;&#x8A55;</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://isucon.net/archives/58001272.html"><div class="kg-bookmark-content"><div class="kg-bookmark-title">ISUCON13 &#x554F;&#x984C;&#x306E;&#x89E3;&#x8AAC;&#x3068;&#x8B1B;&#x8A55; : ISUCON&#x516C;&#x5F0F;Blog</div><div class="kg-bookmark-description">2023.12.1 12:04 If-None-Match&#x306B;&#x3064;&#x3044;&#x3066;&#x8FFD;&#x8A18; ---- &#x3053;&#x3093;&#x3044;&#x3059;&#x30FC; &#x3053;&#x3093;&#x3044;&#x3059;&#x30FC; ISUCON13 &#x306E;&#x4F5C;&#x554F;&#x30C1;&#x30FC;&#x30E0;&#x3001;&#x3055;&#x304F;&#x3089;&#x30A4;&#x30F3;&#x30BF;&#x30FC;&#x30CD;&#x30C3;&#x30C8; kazeburo &#x3067;&#x3059;&#x3002; &#x3053;&#x306E;&#x8A18;&#x4E8B;&#x3067;&#x306F;ISUCON13&#x306E;&#x554F;&#x984C;&#x3068;&#x306A;&#x3063;&#x305F;&#x300C;ISUPipe&#x300D;&#x306B;&#x3064;&#x3044;&#x3066;&#x554F;&#x984C;&#x306E;&#x89E3;&#x8AAC;&#x3068;&#x8B1B;&#x8A55;&#x3092;&#x3057;&#x307E;&#x3059;&#x3002; &#x4ECA;&#x5E74;&#x306E;ISUCON&#x3067;&#x306F;&#x3055;&#x304F;&#x3089;&#x30A4;&#x30F3;&#x30BF;&#x30FC;&#x30CD;&#x30C3;&#x30C8;&#x304C;&#x4F5C;&#x554F;&#x3092;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://livedoor.blogimg.jp/isucon/imgs/a/e/favicon.ico" alt="ISUCON&#x3067;&#x3044;&#x3044;&#x304B;&#x3093;&#x3058;&#x306B;&#x30B9;&#x30AD;&#x30EB;&#x30A2;&#x30C3;&#x30D7;&#x3057;&#x3088;&#x3046;"><span class="kg-bookmark-author">ISUCON&#x516C;&#x5F0F;Blog</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://livedoor.blogimg.jp/isucon/imgs/4/a/4a26c721-s.png" alt="ISUCON&#x3067;&#x3044;&#x3044;&#x304B;&#x3093;&#x3058;&#x306B;&#x30B9;&#x30AD;&#x30EB;&#x30A2;&#x30C3;&#x30D7;&#x3057;&#x3088;&#x3046;"></div></a></figure><h3 id="isucon12">ISUCON12</h3><p>ISUCON12&#x307E;&#x3067;&#x306F;&#xFF0C;&#x4E88;&#x9078;&#x304C;&#x3042;&#x308A;&#xFF0C;&#x4E0A;&#x4F4D;30&#x30C1;&#x30FC;&#x30E0;&#x304C;&#x672C;&#x9078;&#x306B;&#x51FA;&#x5834;&#x3067;&#x304D;&#x307E;&#x3057;&#x305F;&#x3002;</p><h4 id="%E4%BA%88%E9%81%B8isuports">&#x4E88;&#x9078; - ISUPORTS</h4><p>&#x30DE;&#x30EB;&#x30C1;&#x30C6;&#x30CA;&#x30F3;&#x30C8;&#x306A;&#x7AF6;&#x6280;&#x7528;&#x30EA;&#x30FC;&#x30C0;&#x30FC;&#x30DC;&#x30FC;&#x30C9;&#x3002;&#x3053;&#x306E;&#x4E88;&#x9078;&#x306E;&#x7279;&#x5FB4;&#x3068;&#x8A00;&#x3063;&#x305F;&#x3089;&#x306A;&#x3093;&#x3068;&#x3044;&#x3063;&#x3066;&#x3082;&#x30C6;&#x30CA;&#x30F3;&#x30C8;&#x6BCE;&#x306B;&#x7269;&#x7406;&#x7684;&#x306B;SQLite&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x304C;&#x5206;&#x3051;&#x3066;&#x30DE;&#x30EB;&#x30C1;&#x30C6;&#x30CA;&#x30F3;&#x30C8;SaaS&#xFF01;&#x3068;&#x306A;&#x3063;&#x3066;&#x3044;&#x305F;&#x3053;&#x3068;&#x3067;&#x3059;&#x306D;&#x3002;&#x500B;&#x4EBA;&#x7684;&#x306B;&#x306F;&#x521D;ISUCON&#x3067;&#x9762;&#x98DF;&#x3089;&#x3044;&#x307E;&#x3057;&#x305F;&#x3002;&#x4E88;&#x9078;&#x306E;&#x30DC;&#x30EA;&#x30E5;&#x30FC;&#x30E0;&#x3068;&#x3057;&#x3066;&#x3059;&#x3054;&#x304B;&#x3063;&#x305F;&#x3067;&#x3059;&#x3002;</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/75YnJ_3289g?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="ISUCON12 &#x4E88;&#x9078;&#x554F;&#x984C;"></iframe></figure><p>&#x89E3;&#x8AAC;&#x3068;&#x8B1B;&#x8A55;</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://isucon.net/archives/56850281.html"><div class="kg-bookmark-content"><div class="kg-bookmark-title">ISUCON12 &#x4E88;&#x9078;&#x554F;&#x984C;&#x306E;&#x89E3;&#x8AAC;&#x3068;&#x8B1B;&#x8A55; : ISUCON&#x516C;&#x5F0F;Blog</div><div class="kg-bookmark-description">ISUCON12 &#x4E88;&#x9078;&#x554F;&#x984C;&#x306E;&#x89E3;&#x8AAC;&#x3068;&#x8B1B;&#x8A55; &#x4E88;&#x9078;&#x554F;&#x984C;&#x4F5C;&#x554F;&#x30C1;&#x30FC;&#x30E0;&#x3001;&#x9762;&#x767D;&#x6CD5;&#x4EBA;&#x30AB;&#x30E4;&#x30C3;&#x30AF;&#x306E; fujiwara &#x3067;&#x3059;&#x3002; ISUCON12&#x4E88;&#x9078;&#x306B;&#x53C2;&#x52A0;&#x3055;&#x308C;&#x305F;&#x7686;&#x69D8;&#x3001;&#x3042;&#x308A;&#x304C;&#x3068;&#x3046;&#x3054;&#x3056;&#x3044;&#x307E;&#x3057;&#x305F;&#x3002;&#x304A;&#x304B;&#x3052;&#x3055;&#x307E;&#x3067;&#x5927;&#x304D;&#x306A;&#x30C8;&#x30E9;&#x30D6;&#x30EB;&#x3082;&#x306A;&#x304F;&#x4E88;&#x9078;&#x3092;&#x7D42;&#x3048;&#x3089;&#x308C;&#x3066;&#x5B89;&#x5FC3;&#x3057;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;&#x3053;&#x306E;&#x30A8;&#x30F3;&#x30C8;&#x30EA;&#x3067;&#x306F;&#x3001;&#x4E88;&#x9078;&#x306B;&#x51FA;&#x984C;&#x3055;&#x308C;&#x305F;&#x554F;&#x984C;&#x306E;&#x89E3;&#x8AAC;&#x3068;&#x3001;&#x7686;&#x69D8;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://livedoor.blogimg.jp/isucon/imgs/a/e/favicon.ico" alt="ISUCON&#x3067;&#x3044;&#x3044;&#x304B;&#x3093;&#x3058;&#x306B;&#x30B9;&#x30AD;&#x30EB;&#x30A2;&#x30C3;&#x30D7;&#x3057;&#x3088;&#x3046;"><span class="kg-bookmark-author">ISUCON&#x516C;&#x5F0F;Blog</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://livedoor.blogimg.jp/isucon/imgs/b/2/b2148820-s.png" alt="ISUCON&#x3067;&#x3044;&#x3044;&#x304B;&#x3093;&#x3058;&#x306B;&#x30B9;&#x30AD;&#x30EB;&#x30A2;&#x30C3;&#x30D7;&#x3057;&#x3088;&#x3046;"></div></a></figure><h4 id="%E6%9C%AC%E9%81%B8isuconquest">&#x672C;&#x9078; - ISUCONQUEST</h4><p>&#x81EA;&#x5206;&#x306F;&#x51FA;&#x3089;&#x308C;&#x306A;&#x304B;&#x3063;&#x305F;&#x306E;&#x3067;&#x3059;&#x304C;&#xFF0C;&#x30AF;&#x30C3;&#x30AD;&#x30FC;&#x30AF;&#x30EA;&#x30C3;&#x30AB;&#x30FC;&#x98A8;&#xFF1F;&#x306E;&#x30B2;&#x30FC;&#x30E0;&#x3067;&#x3057;&#x305F;&#x3002;Unity&#x3067;&#x30B4;&#x30EA;&#x30B4;&#x30EA;&#x306B;&#x30B2;&#x30FC;&#x30E0;&#x30AF;&#x30E9;&#x30A4;&#x30A2;&#x30F3;&#x30C8;&#x304C;&#x4F5C;&#x3089;&#x308C;&#x3066;&#x3044;&#x3066;&#x3059;&#x3054;&#x3044;&#xFF01;&#x3068;&#x306A;&#x3063;&#x3066;&#x3044;&#x307E;&#x3057;&#x305F;&#x3002;&#x30B2;&#x30FC;&#x30E0;&#x306A;&#x3089;&#x3067;&#x306F;&#x306E;&#x30ED;&#x30B0;&#x30A4;&#x30F3;&#x51E6;&#x7406;&#x3060;&#x3063;&#x305F;&#x308A;&#xFF0C;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x304C;3&#x53F0;&#x3067;&#x306F;&#x7121;&#x304F;5&#x53F0;&#x3067;DB&#x306E;&#x30B7;&#x30E3;&#x30FC;&#x30C7;&#x30A3;&#x30F3;&#x30B0;&#x304C;&#x6C42;&#x3081;&#x3089;&#x308C;&#x305F;&#x308A;&#x3068;&#xFF0C;&#x7D20;&#x632F;&#x308A;&#x3059;&#x308B;&#x306B;&#x3082;&#x30DC;&#x30EA;&#x30E5;&#x30FC;&#x30DF;&#x30FC;&#x3067;&#x3057;&#x305F;&#x3002;</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/MzTV8HsPqAM?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="ISUCON12 &#x672C;&#x9078;&#x554F;&#x984C;"></iframe></figure><p>&#x89E3;&#x8AAC;&#x3068;&#x8B1B;&#x8A55;</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://isucon.net/archives/56959385.html"><div class="kg-bookmark-content"><div class="kg-bookmark-title">ISUCON12 &#x672C;&#x9078;&#x554F;&#x984C;&#x306E;&#x89E3;&#x8AAC;&#x3068;&#x8B1B;&#x8A55; : ISUCON&#x516C;&#x5F0F;Blog</div><div class="kg-bookmark-description">&#x3053;&#x3093;&#x306B;&#x3061;&#x306F;&#x3001;ISUCON12&#x306E;&#x672C;&#x9078;&#x554F;&#x984C;&#x4F5C;&#x554F;&#x30C1;&#x30FC;&#x30E0;&#x306E; goodoo &#x3067;&#x3059;&#x3002; &#x3053;&#x306E;&#x8A18;&#x4E8B;&#x3067;&#x306F;&#x3001;&#x672C;&#x9078;&#x554F;&#x984C;&#x306E;&#x300C;ISU CONQUEST&#x300D;&#x306B;&#x3064;&#x3044;&#x3066;&#x3001;&#x554F;&#x984C;&#x306E;&#x89E3;&#x8AAC;&#x3068;&#x8B1B;&#x8A55;&#x3092;&#x884C;&#x3044;&#x307E;&#x3059;&#x3002; ISU CONQUEST&#x3068;&#x306F;&#x4ECA;&#x5E74;&#x3082;&#x3001;&#x554F;&#x984C;&#x306B;&#x95A2;&#x3059;&#x308B;&#x52D5;&#x753B;&#x3092;&#x4F5C;&#x6210;&#x3044;&#x305F;&#x3060;&#x304D;&#x307E;&#x3057;&#x305F;&#x3002; &#x307E;&#x305A;&#x306F;&#x3001;&#x52D5;&#x753B;&#x3092;&#x898B;&#x3066;&#x307F;&#x307E;&#x3057;&#x3087;&#x3046;&#x3002; &#x30B2;&#x30FC;&#x30E0;&#x3067;&#x3059;&#xFF01; &#x80B2;&#x6210;&#x578B;&#x653E;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://livedoor.blogimg.jp/isucon/imgs/a/e/favicon.ico" alt="ISUCON&#x3067;&#x3044;&#x3044;&#x304B;&#x3093;&#x3058;&#x306B;&#x30B9;&#x30AD;&#x30EB;&#x30A2;&#x30C3;&#x30D7;&#x3057;&#x3088;&#x3046;"><span class="kg-bookmark-author">ISUCON&#x516C;&#x5F0F;Blog</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://livedoor.blogimg.jp/isucon/imgs/e/5/e58a57d8-s.png" alt="ISUCON&#x3067;&#x3044;&#x3044;&#x304B;&#x3093;&#x3058;&#x306B;&#x30B9;&#x30AD;&#x30EB;&#x30A2;&#x30C3;&#x30D7;&#x3057;&#x3088;&#x3046;"></div></a></figure><h3 id="%E3%81%9D%E3%81%AE%E3%81%BB%E3%81%8B">&#x305D;&#x306E;&#x307B;&#x304B;</h3><p>&#x4F4F;&#x307E;&#x3044;&#x691C;&#x7D22;&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#xFF0C;&#x30D5;&#x30EA;&#x30FC;&#x30DE;&#x30FC;&#x30B1;&#x30C3;&#x30C8;&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#xFF0C;&#x5B66;&#x6821;&#x306E;&#x96E2;&#x7901;&#x767B;&#x9332;&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#xFF0C;&#x98DB;&#x884C;&#x6A5F;&#x306E;&#x4E88;&#x7D04;&#x30B5;&#x30A4;&#x30C8;&#x306A;&#x3069;&#x306A;&#x3069;&#xFF0C;&#x69D8;&#x3005;&#x306A;&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x304C;&#x767B;&#x5834;&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;&#x53E4;&#x3044;&#x3082;&#x306E;&#x3060;&#x3068;&#x4E00;&#x90E8;&#x30D0;&#x30FC;&#x30B8;&#x30E7;&#x30F3;&#x306E;&#x53E4;&#x3055;&#x306A;&#x3069;&#x3067;&#x82E6;&#x52B4;&#x3059;&#x308B;&#x3053;&#x3068;&#x3082;&#x3042;&#x308B;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x304C;&#xFF0C;&#x3069;&#x308C;&#x3082;&#x9762;&#x767D;&#x3044;&#x306E;&#x3067;&#x662F;&#x975E;&#x89E6;&#x3063;&#x3066;&#x307F;&#x307E;&#x3057;&#x3087;&#x3046;&#xFF01;</p><p>&#x516C;&#x5F0F;&#x306E;ISUCON&#x554F;&#x984C;&#x4EE5;&#x5916;&#x306B;&#x3082;&#xFF0C; <a href="https://github.com/catatsuy">@catatsuy</a> &#x3055;&#x3093;&#x304C;&#x30E1;&#x30F3;&#x30C6;&#x3057;&#x3066;&#x304F;&#x3060;&#x3055;&#x3063;&#x3066;&#x3044;&#x308B;&#x300C;private-isu&#x300D;&#x3082;&#x3042;&#x308B;&#x306E;&#x3067;&#xFF0C;&#x662F;&#x975E;&#x898B;&#x3066;&#x307F;&#x3066;&#x304F;&#x3060;&#x3055;&#x3044;&#x3002;</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/catatsuy/private-isu"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - catatsuy/private-isu: a web application performance improvement training</div><div class="kg-bookmark-description">a web application performance improvement training - catatsuy/private-isu</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt="ISUCON&#x3067;&#x3044;&#x3044;&#x304B;&#x3093;&#x3058;&#x306B;&#x30B9;&#x30AD;&#x30EB;&#x30A2;&#x30C3;&#x30D7;&#x3057;&#x3088;&#x3046;"><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">catatsuy</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/3e05db08a320c2335fbd6371bb6c5dffa3ca5740fa90b3320254fdad41e28b51/catatsuy/private-isu" alt="ISUCON&#x3067;&#x3044;&#x3044;&#x304B;&#x3093;&#x3058;&#x306B;&#x30B9;&#x30AD;&#x30EB;&#x30A2;&#x30C3;&#x30D7;&#x3057;&#x3088;&#x3046;"></div></a></figure><h2 id="%E5%85%B7%E4%BD%93%E7%9A%84%E3%81%AB%E3%81%A9%E3%82%93%E3%81%AA%E3%81%93%E3%81%A8%E3%82%92%E3%81%99%E3%82%8B%E3%81%AE%EF%BC%9F">&#x5177;&#x4F53;&#x7684;&#x306B;&#x3069;&#x3093;&#x306A;&#x3053;&#x3068;&#x3092;&#x3059;&#x308B;&#x306E;&#xFF1F;</h2><p>&#x8272;&#x3093;&#x306A;&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x304C;&#x51FA;&#x3066;&#x304D;&#x3066;&#x30EF;&#x30AF;&#x30EF;&#x30AF;&#x3057;&#x3066;&#x304D;&#x307E;&#x3057;&#x305F;&#x3088;&#x306D;&#x3002;&#x5B9F;&#x969B;&#x306B;ISUCON&#x306B;&#x53D6;&#x308A;&#x7D44;&#x3080;&#x3068;&#x304D;&#x306E;&#x57FA;&#x672C;&#x7684;&#x306A;&#x6D41;&#x308C;&#x3092;&#x7D39;&#x4ECB;&#x3057;&#x307E;&#x3059;&#x3002;&#x307E;&#x3042;ISUCON&#x8B1B;&#x7FD2;&#x4F1A;&#x3084;&#xFF0C;&#x8A73;&#x3057;&#x304F;&#x89E3;&#x8AAC;&#x3057;&#x3066;&#x3044;&#x308B;&#x30B5;&#x30A4;&#x30C8;&#x306A;&#x3069;&#x306F;&#x305F;&#x304F;&#x3055;&#x3093;&#x3042;&#x308B;&#x306E;&#x3067;&#x6D41;&#x308C;&#x4F4D;&#x3092;&#x3002;</p><h3 id="0-%E3%81%BE%E3%81%9A%E3%81%AF%E7%92%B0%E5%A2%83%E3%82%92%E6%95%B4%E5%82%99">0. &#x307E;&#x305A;&#x306F;&#x74B0;&#x5883;&#x3092;&#x6574;&#x5099;</h3><p>&#x6700;&#x521D;&#x306B;&#x8D77;&#x52D5;&#x3057;&#x305F;&#x6BB5;&#x968E;&#x3067;&#x30A2;&#x30D7;&#x30EA;&#x304C;&#x52D5;&#x304F;&#x3088;&#x3046;&#x306B;&#x306F;&#x306A;&#x3063;&#x3066;&#x3044;&#x308B;&#x306E;&#x3067;&#xFF0C;&#x3072;&#x3068;&#x307E;&#x305A;&#x30D9;&#x30F3;&#x30C1;&#x30DE;&#x30FC;&#x30AF;&#x3092;&#x56DE;&#x3057;&#x3066;&#x30B9;&#x30B3;&#x30A2;&#x3092;&#x8A08;&#x6E2C;&#x3057;&#x307E;&#x3059;&#x3002;&#x3053;&#x308C;&#x304C;&#x521D;&#x671F;&#x30B9;&#x30B3;&#x30A2;&#x3067;&#x3059;&#x3002;<br>&#x305D;&#x306E;&#x5F8C;&#xFF0C;&#x30DE;&#x30B7;&#x30F3;&#x306E;&#x30B9;&#x30DA;&#x30C3;&#x30AF;&#x3092;&#x78BA;&#x8A8D;&#x3057;&#x305F;&#x308A;&#xFF0C;&#x30B3;&#x30FC;&#x30C9;&#x304C;&#x3069;&#x306E;&#x3088;&#x3046;&#x306B;&#x52D5;&#x3044;&#x3066;&#x3044;&#x3066;&#xFF0C;&#x8A2D;&#x5B9A;&#x3092;&#x5909;&#x3048;&#x308B;&#x306B;&#x306F;&#x3069;&#x3046;&#x3059;&#x308C;&#x3070;&#x826F;&#x3044;&#x306E;&#x304B;&#x3092;&#x78BA;&#x8A8D;&#x3057;&#x305F;&#x308A;&#x3057;&#x307E;&#x3059;&#x3002;&#x4F8B;&#x3048;&#x3070;&#xFF0C;&#x30A2;&#x30D7;&#x30EA;&#x306F;systemd&#x3067;&#x8D77;&#x52D5;&#x3057;&#x3066;&#x3044;&#x308B;&#x306E;&#x304B;&#xFF0C;docker&#x3067;&#x8D77;&#x52D5;&#x3057;&#x3066;&#x3044;&#x308B;&#x306E;&#x304B;&#xFF1F;DB&#x306F;MySQL&#x306A;&#x306E;&#x304B;&#xFF0C;PostgreSQL&#x306A;&#x306E;&#x304B;&#xFF0C;&#x306F;&#x305F;&#x307E;&#x305F;SQLite&#x306A;&#x306E;&#x304B;&#xFF1F;&#x30D7;&#x30ED;&#x30AD;&#x30B7;&#x306F;nginx&#x306A;&#x306E;&#x304B;&#xFF0C;h2o&#x306A;&#x306E;&#x304B;&#xFF1F;envoy&#x306A;&#x306E;&#x304B;&#xFF1F;&#x306A;&#x3069;&#x3002;<br>&#x30D0;&#x30C3;&#x30AF;&#x30A8;&#x30F3;&#x30C9;&#x306B;&#x7559;&#x307E;&#x3089;&#x305A;&#xFF0C;&#x30DF;&#x30C9;&#x30EB;&#x30A6;&#x30A7;&#x30A2;&#x3084;&#x30A4;&#x30F3;&#x30D5;&#x30E9;&#xFF0C;OS&#x306E;&#x9762;&#x5012;&#x3092;&#x898B;&#x306A;&#x3044;&#x3068;&#x3044;&#x3051;&#x307E;&#x305B;&#x3093;&#x3002;<br>&#x4F8B;&#x5E74;&#x3042;&#x308B;&#x7A0B;&#x5EA6;&#x74B0;&#x5883;&#x306F;&#x8FD1;&#x3057;&#x3044;&#x50BE;&#x5411;&#x3082;&#x3042;&#x308B;&#x306E;&#x3067;&#xFF0C;&#x3042;&#x3089;&#x304B;&#x3058;&#x3081;Makefile&#x3067;&#x30B9;&#x30AF;&#x30EA;&#x30D7;&#x30C8;&#x96C6;&#x3092;&#x6E96;&#x5099;&#x3057;&#x3066;&#x3044;&#x308B;&#x30C1;&#x30FC;&#x30E0;&#x3082;&#x3042;&#x308A;&#x307E;&#x3059;&#x3002;&#x305D;&#x3057;&#x3066;&#x57FA;&#x672C;&#x7684;&#x306B;&#x306F;&#xFF0C;&#x30A2;&#x30D7;&#x30EA;&#x3092;git&#x914D;&#x4E0B;&#x306B;&#x7F6E;&#x3044;&#x3066;&#xFF0C;GitHub&#x306E;&#x30D7;&#x30E9;&#x30A4;&#x30D9;&#x30FC;&#x30C8;&#x30EA;&#x30DD;&#x30B8;&#x30C8;&#x30EA;&#x4E0A;&#x3067;&#x8907;&#x6570;&#x4EBA;&#x3067;&#x4FEE;&#x6B63;&#x3092;&#x884C;&#x3063;&#x3066;&#x3044;&#x304F;&#x3053;&#x3068;&#x306B;&#x306A;&#x308B;&#x3067;&#x3057;&#x3087;&#x3046;&#x3002;</p><h3 id="1-%E8%A8%88%E6%B8%AC%E3%83%BB%E9%9B%86%E8%A8%88%E7%92%B0%E5%A2%83%E3%82%92%E6%95%B4%E3%81%88%E3%82%8B">1. &#x8A08;&#x6E2C;&#x30FB;&#x96C6;&#x8A08;&#x74B0;&#x5883;&#x3092;&#x6574;&#x3048;&#x308B;</h3><p>top&#x30B3;&#x30DE;&#x30F3;&#x30C9;&#x306A;&#x3069;&#x3092;&#x4F7F;&#x7528;&#x3057;&#x3066;CPU&#x4F7F;&#x7528;&#x7387;&#x3092;&#x78BA;&#x8A8D;&#x3057;&#x306A;&#x304C;&#x3089;&#x30D9;&#x30F3;&#x30C1;&#x30DE;&#x30FC;&#x30AF;&#x3092;&#x56DE;&#x3059;&#x3068;&#xFF0C;DB&#x304C;&#x30DC;&#x30C8;&#x30EB;&#x30CD;&#x30C3;&#x30AF;&#x304B;&#x30A2;&#x30D7;&#x30EA;&#x304C;&#x30DC;&#x30C8;&#x30EB;&#x30CD;&#x30C3;&#x30AF;&#x304B;&#x3050;&#x3089;&#x3044;&#x306F;&#x5206;&#x304B;&#x308A;&#x307E;&#x3059;&#x3002;&#x3067;&#x3059;&#x304C;&#xFF0C;&#x305D;&#x308C;&#x3060;&#x3051;&#x3067;&#x306F;&#x3069;&#x3053;&#x3092;&#x6539;&#x5584;&#x3057;&#x3066;&#x3044;&#x3051;&#x3070;&#x826F;&#x3044;&#x306E;&#x304B;&#x691C;&#x8A0E;&#x3082;&#x3064;&#x304D;&#x307E;&#x305B;&#x3093;&#x3002;&#x305D;&#x3053;&#x3067;&#xFF0C;DB&#x306E;&#x3069;&#x306E;SQL&#x304C;&#x9045;&#x3044;&#x306E;&#x304B;&#x96C6;&#x8A08;&#x3057;&#x3066;&#x304F;&#x308C;&#x308B;&#x30C4;&#x30FC;&#x30EB;&#xFF0C;&#x30A8;&#x30F3;&#x30C9;&#x30DD;&#x30A4;&#x30F3;&#x30C8;&#x6BCE;&#x306E;&#x30EA;&#x30AF;&#x30A8;&#x30B9;&#x30C8;&#x6570;&#x30FB;&#x51E6;&#x7406;&#x6642;&#x9593;&#x3092;&#x96C6;&#x8A08;&#x3057;&#x3066;&#x304F;&#x308C;&#x308B;&#x30C4;&#x30FC;&#x30EB;&#x304C;&#x3042;&#x308B;&#x306E;&#x3067;&#x30ED;&#x30B0;&#x306E;&#x66F8;&#x304D;&#x51FA;&#x3057;&#x8A2D;&#x5B9A;&#x3092;&#x6709;&#x52B9;&#x5316;&#x3057;&#x305F;&#x308A;&#x3057;&#x307E;&#x3059;&#x3002;<br>&#x3053;&#x308C;&#x3067;&#x3084;&#x3063;&#x3068;&#x30B9;&#x30BF;&#x30FC;&#x30C8;&#x30E9;&#x30A4;&#x30F3;&#x3067;&#x3059;&#x3002;</p><h3 id="2-%E3%83%9C%E3%83%88%E3%83%AB%E3%83%8D%E3%83%83%E3%82%AF%E3%82%92%E7%89%B9%E5%AE%9A%E3%81%99%E3%82%8B">2. &#x30DC;&#x30C8;&#x30EB;&#x30CD;&#x30C3;&#x30AF;&#x3092;&#x7279;&#x5B9A;&#x3059;&#x308B;</h3><p>&#x30ED;&#x30B0;&#x3092;&#x6709;&#x52B9;&#x5316;&#x3057;&#x305F;&#x72B6;&#x614B;&#x3067;&#x30D9;&#x30F3;&#x30C1;&#x30DE;&#x30FC;&#x30AF;&#x3092;&#x56DE;&#x3057;&#x3066;&#x96C6;&#x8A08;&#x3057;&#x307E;&#x3059;&#x3002;&#x305D;&#x306E;&#x4E0A;&#x3067;&#xFF0C;&#x6574;&#x3048;&#x305F;&#x30C4;&#x30FC;&#x30EB;&#x9054;&#x3067;&#x3069;&#x306E;SQL&#x30AF;&#x30A8;&#x30EA;&#x304C;&#x9045;&#x3044;/&#x547C;&#x3073;&#x51FA;&#x3057;&#x56DE;&#x6570;&#x304C;&#x591A;&#x3044;&#x304B;&#xFF0C;&#x3069;&#x306E;&#x30A2;&#x30AF;&#x30BB;&#x30B9;&#x30DD;&#x30A4;&#x30F3;&#x30C8;&#x304C;&#x9045;&#x3044;/&#x547C;&#x3073;&#x51FA;&#x3057;&#x56DE;&#x6570;&#x304C;&#x591A;&#x3044;&#x304B;&#x3092;&#x78BA;&#x8A8D;&#x3057;&#x307E;&#x3059;&#x3002;</p><h3 id="3-%E3%83%81%E3%83%A5%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0%E3%82%92%E8%A1%8C%E3%81%86">3. &#x30C1;&#x30E5;&#x30FC;&#x30CB;&#x30F3;&#x30B0;&#x3092;&#x884C;&#x3046;</h3><p>&#x3053;&#x3053;&#x304B;&#x3089;&#x306F;&#x8272;&#x3005;&#x306A;&#x624B;&#x6BB5;&#x3067;&#x30C1;&#x30E5;&#x30FC;&#x30CB;&#x30F3;&#x30B0;&#x3092;&#x884C;&#x3063;&#x3066;&#x3044;&#x304D;&#x307E;&#x3059;&#x3002;</p><ul><li>DB&#x306B;&#x30A4;&#x30F3;&#x30C7;&#x30C3;&#x30AF;&#x30B9;&#x3092;&#x8CBC;&#x308B;&#xFF08;&#x3053;&#x308C;&#x3060;&#x3051;&#x3067;&#x7D50;&#x69CB;&#x6700;&#x521D;&#x306F;&#x30B9;&#x30B3;&#x30A2;&#x304C;&#x4E0A;&#x304C;&#x308A;&#x307E;&#x3059;&#x3002;&#x500B;&#x4EBA;&#x958B;&#x767A;&#x306A;&#x3069;&#x3067;&#x306F;&#x306A;&#x304B;&#x306A;&#x304B;&#x610F;&#x8B58;&#x3067;&#x304D;&#x306A;&#x3044;&#x9818;&#x57DF;&#x306A;&#x306E;&#x3067;&#xFF0C;&#x521D;&#x3081;&#x3066;&#x5927;&#x898F;&#x6A21;&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x3092;&#x89E6;&#x308B;&#x52C9;&#x5F37;&#x306B;&#x306A;&#x308A;&#x307E;&#x3059;&#x3002;&#xFF09;</li><li><a href="https://github.com/isucon/isucon13/blob/main/webapp/go/livestream_handler.go#L487-L527">&#x3053;&#x306E;&#x3088;&#x3046;&#x306A;</a>&#x30A2;&#x30D7;&#x30EA;&#x4E0A;&#x306E;N+1&#x554F;&#x984C;&#x3092;&#x89E3;&#x6D88;&#x3059;&#x308B;</li><li>&#x8B0E;&#x306B;&#x3069;&#x3067;&#x304B;&#x3044;&#x7121;&#x99C4;&#x306A;&#x30AF;&#x30A8;&#x30EA;&#xFF08;<a href="https://github.com/TAK848/isucon14/blob/94ddfaca610f1ca48bc4a59329a4c8c409e0c980/go/owner_handlers.go#L198-L218">&#x3053;&#x306E;&#x3088;&#x3046;&#x306A;</a>&#x901A;&#x79F0;&#x89B3;&#x5149;&#x540D;&#x6240;&#x3092;&#x6D88;&#x3059;&#xFF09;</li><li>&#x30C7;&#x30FC;&#x30BF;&#x306E;&#x6301;&#x3061;&#x65B9;&#x3092;&#x5909;&#x3048;&#x308B;</li><li>*&#x30C7;&#x30FC;&#x30BF;&#x3092;&#x30AD;&#x30E3;&#x30C3;&#x30B7;&#x30E5;&#x3059;&#x308B;</li><li>&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x30FB;DB&#x3092;&#x5206;&#x5272;&#x3059;&#x308B;</li></ul><p>&#x306A;&#x3069;&#xFF0C;&#x8272;&#x3005;&#x3067;&#x304D;&#x308B;&#x3053;&#x3068;&#x306F;&#x305F;&#x304F;&#x3055;&#x3093;&#x3042;&#x308A;&#x307E;&#x3059;&#x3002;</p><h3 id="4-%E3%83%99%E3%83%B3%E3%83%81%E3%83%9E%E3%83%BC%E3%82%AF%E3%82%92%E5%9B%9E%E3%81%99">4. &#x30D9;&#x30F3;&#x30C1;&#x30DE;&#x30FC;&#x30AF;&#x3092;&#x56DE;&#x3059;</h3><p>&#x5B9F;&#x969B;&#x306B;&#x6539;&#x5584;&#x3092;&#x884C;&#x3063;&#x305F;&#x3089;&#xFF0C;&#x305D;&#x306E;&#x6539;&#x5584;&#x306B;&#x52B9;&#x679C;&#x304C;&#x3042;&#x3063;&#x305F;&#x304B;&#x3092;&#x78BA;&#x8A8D;&#x3057;&#x307E;&#x3059;&#x3002;FAIL&#x3057;&#x305F;&#x308A;&#xFF0C;&#x30B9;&#x30B3;&#x30A2;&#x304C;&#x4E0A;&#x304C;&#x3089;&#x306A;&#x304B;&#x3063;&#x305F;&#x308A;&#x3057;&#x305F;&#x3089;&#xFF0C;&#x518D;&#x5EA6;&#x30E1;&#x30C8;&#x30EA;&#x30AF;&#x30B9;&#x3092;&#x898B;&#x3066;&#x5206;&#x6790;&#x3057;&#x307E;&#x3059;&#x3002;2&#x306B;&#x623B;&#x3063;&#x3066;&#x3072;&#x305F;&#x3059;&#x3089;&#x7E70;&#x308A;&#x8FD4;&#x3057;&#x3067;&#x3059;&#x3002;</p><h2 id="isucon%E3%81%AB%E6%89%8B%E6%97%A9%E3%81%8F%E5%8F%96%E3%82%8A%E7%B5%84%E3%82%80%E3%81%9F%E3%82%81%E3%81%AE%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E7%92%B0%E5%A2%83">ISUCON&#x306B;&#x624B;&#x65E9;&#x304F;&#x53D6;&#x308A;&#x7D44;&#x3080;&#x305F;&#x3081;&#x306E;&#x304A;&#x3059;&#x3059;&#x3081;&#x74B0;&#x5883;</h2><p>&#x307F;&#x306A;&#x3055;&#x3093;&#xFF0C;&#x3082;&#x3046;ISUCON&#x306B;&#x53D6;&#x308A;&#x7D44;&#x307F;&#x305F;&#x304F;&#x3066;&#x4ED5;&#x65B9;&#x304C;&#x7121;&#x304F;&#x306A;&#x3063;&#x3066;&#x3044;&#x308B;&#x3068;&#x601D;&#x3046;&#x306E;&#x3067;&#xFF0C;&#x305D;&#x306E;&#x65B9;&#x6CD5;&#x3092;&#x3054;&#x7D39;&#x4ECB;&#x3057;&#x307E;&#x3059;&#x3002;</p><h3 id="isucon14%E3%81%AE%E5%85%AC%E5%BC%8F%E7%92%B0%E5%A2%83%EF%BC%88%E6%9C%9F%E9%96%93%E9%99%90%E5%AE%9A%EF%BC%8C117-1600%E5%A4%9A%E5%88%86jst%E3%81%BE%E3%81%A7%EF%BC%89">ISUCON14&#x306E;&#x516C;&#x5F0F;&#x74B0;&#x5883;&#xFF08;&#x671F;&#x9593;&#x9650;&#x5B9A;&#xFF0C;1/17 16:00(&#x591A;&#x5206;JST)&#x307E;&#x3067;&#xFF09;</h3><p>1/17 16:00(&#x591A;&#x5206;JST)&#x307E;&#x3067;&#xFF0C;ISUCON&#x516C;&#x5F0F;&#x3067;&#x672C;&#x9078;&#x306E;&#x6642;&#x306E;&#x74B0;&#x5883;&#x3092;&#x516C;&#x958B;&#x3057;&#x3066;&#x304F;&#x3060;&#x3055;&#x3063;&#x3066;&#x3044;&#x3066;&#xFF0C;AWS&#x306E;&#x74B0;&#x5883;&#x304C;&#x3042;&#x308C;&#x3070;&#x5B9F;&#x969B;&#x306B;&#x3084;&#x3063;&#x3066;&#x307F;&#x308B;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x308B;&#x306E;&#x3067;&#x662F;&#x975E;&#xFF01;ISUCON&#x306F;&#x521D;&#x3081;&#x3066;&#x3084;&#x308D;&#x3046;&#x3068;&#x3059;&#x308B;&#x3068;&#x74B0;&#x5883;&#x69CB;&#x7BC9;&#x3067;&#x82E6;&#x6226;&#x3059;&#x308B;&#x306E;&#x3067;&#x4ECA;&#x304C;&#x30C1;&#x30E3;&#x30F3;&#x30B9;&#x3067;&#x3059;&#x3002;</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://x.com/isucon_official/status/1867766474690994590"><div class="kg-bookmark-content"><div class="kg-bookmark-title">x.com</div><div class="kg-bookmark-description"></div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://abs.twimg.com/responsive-web/client-web/icon-ios.77d25eba.png" alt="ISUCON&#x3067;&#x3044;&#x3044;&#x304B;&#x3093;&#x3058;&#x306B;&#x30B9;&#x30AD;&#x30EB;&#x30A2;&#x30C3;&#x30D7;&#x3057;&#x3088;&#x3046;"><span class="kg-bookmark-author">X (formerly Twitter)</span></div></div></a></figure><h3 id="isunarabe">ISUNARABE</h3><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://isunarabe.org"><div class="kg-bookmark-content"><div class="kg-bookmark-title">ISUNARABE</div><div class="kg-bookmark-description"></div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://isunarabe.org/assets/favicon-d905358e.ico" alt="ISUCON&#x3067;&#x3044;&#x3044;&#x304B;&#x3093;&#x3058;&#x306B;&#x30B9;&#x30AD;&#x30EB;&#x30A2;&#x30C3;&#x30D7;&#x3057;&#x3088;&#x3046;"></div></div></a></figure><p><a href="https://github.com/koba789">@KOBA789</a>&#x3055;&#x3093;&#x4F5C;&#x306E;ISUCON&#x7D20;&#x632F;&#x308A;&#x7528;&#x30B5;&#x30A4;&#x30C8;&#x3067;&#x3059;&#x3002;&#x30D9;&#x30F3;&#x30C1;&#x30DE;&#x30FC;&#x30AB;&#x30FC;&#x3082;&#x81EA;&#x5206;&#x306E;AWS&#x74B0;&#x5883;&#x306B;&#x30DB;&#x30B9;&#x30C8;&#x3059;&#x308B;&#x3053;&#x3068;&#x306B;&#x306F;&#x306A;&#x308A;&#x307E;&#x3059;&#x304C;&#xFF0C;&#x672C;&#x756A;&#x3055;&#x306A;&#x304C;&#x3089;&#x306E;&#x74B0;&#x5883;&#x3067;&#x7C21;&#x5358;&#x306B;&#x7D20;&#x632F;&#x308A;&#x304C;&#x3067;&#x304D;&#x307E;&#x3059;&#x3002;&#x3042;&#x308A;&#x304C;&#x305F;&#x3084;&#x3002;</p><figure class="kg-card kg-embed-card"><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fdiary.hatenablog.jp%2Fentry%2F2023%2F09%2F27%2F002428" title="&#x975E;&#x516C;&#x5F0F;ISUCON&#x7DF4;&#x7FD2;&#x30D7;&#x30E9;&#x30C3;&#x30C8;&#x30D5;&#x30A9;&#x30FC;&#x30E0;ISUNARABE&#x3092;&#x516C;&#x958B;&#x3057;&#x305F; - Write and Run" class="embed-card embed-blogcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;"></iframe></figure><h3 id="%E8%87%AA%E5%88%86%E3%81%A7%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97">&#x81EA;&#x5206;&#x3067;&#x30BB;&#x30C3;&#x30C8;&#x30A2;&#x30C3;&#x30D7;</h3><p>&#x305D;&#x306E;&#x4ED6;&#x306E;&#x65B9;&#x6CD5;&#x306F;&#xFF0C;ISUCON&#x306E;&#x516C;&#x5F0F;&#x30DA;&#x30FC;&#x30B8;&#x306B;&#x66F8;&#x3044;&#x3066;&#x3042;&#x308B;&#x306E;&#x3067;&#x53C2;&#x8003;&#x306B;&#x3057;&#x3066;&#x307F;&#x3066;&#x304F;&#x3060;&#x3055;&#x3044;&#x3002;&#x81EA;&#x5206;&#x3067;&#x74B0;&#x5883;&#x3092;&#x30DB;&#x30B9;&#x30C8;&#x3059;&#x308B;&#x306E;&#x3082;&#x52C9;&#x5F37;&#x306B;&#x306A;&#x308B;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x3002;</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://isucon.net/archives/54946542.html"><div class="kg-bookmark-content"><div class="kg-bookmark-title">ISUCON&#x306E;&#x904E;&#x53BB;&#x554F;&#x306B;&#x30C1;&#x30E3;&#x30EC;&#x30F3;&#x30B8;&#x3059;&#x308B;&#x305F;&#x3081;&#x306E;&#x30B7;&#x30F3;&#x30D7;&#x30EB;&#x306A;&#x74B0;&#x5883;&#x69CB;&#x7BC9; : ISUCON&#x516C;&#x5F0F;Blog</div><div class="kg-bookmark-description">&#x904E;&#x53BB;&#x306E;ISUCON&#x3067;&#x51FA;&#x984C;&#x3055;&#x308C;&#x305F;&#x554F;&#x984C;&#x3092;&#x30B7;&#x30F3;&#x30D7;&#x30EB;&#x306B;&#x74B0;&#x5883;&#x69CB;&#x7BC9;&#x3067;&#x304D;&#x308B;&#x30DA;&#x30FC;&#x30B8;&#x306A;&#x3069;&#x3092;&#x7D39;&#x4ECB;&#x3057;&#x307E;&#x3059;&#x3002; &#x521D;&#x3081;&#x3066;ISUCON&#x306B;&#x30C1;&#x30E3;&#x30EC;&#x30F3;&#x30B8;&#x3059;&#x308B;&#x3068;&#x3044;&#x3046;&#x65B9;&#x306F;&#x3001;&#x4E8B;&#x524D;&#x8B1B;&#x7FD2;&#x306E;&#x30B9;&#x30E9;&#x30A4;&#x30C9;&#x3084;&#x52D5;&#x753B;&#x3067;ISUCON&#x306E;&#x7AF6;&#x6280;&#x306E;&#x6D41;&#x308C;&#x3092;&#x307E;&#x3068;&#x3081;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;2021&#x5E74;&#x3068;2022&#x5E74;&#x3068;&#x305D;&#x308C;&#x305E;&#x308C;&#x3042;&#x308A;&#x307E;&#x3059;&#x306E;&#x3067;&#x53C2;&#x8003;&#x306B;&#x3057;&#x3066;&#x307F;&#x3066;&#x304F;&#x3060;&#x3055;&#x3044;&#x3002;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://livedoor.blogimg.jp/isucon/imgs/a/e/favicon.ico" alt="ISUCON&#x3067;&#x3044;&#x3044;&#x304B;&#x3093;&#x3058;&#x306B;&#x30B9;&#x30AD;&#x30EB;&#x30A2;&#x30C3;&#x30D7;&#x3057;&#x3088;&#x3046;"><span class="kg-bookmark-author">ISUCON&#x516C;&#x5F0F;Blog</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://livedoor.blogimg.jp/isucon/imgs/3/a/3a5ec2f3-s.png" alt="ISUCON&#x3067;&#x3044;&#x3044;&#x304B;&#x3093;&#x3058;&#x306B;&#x30B9;&#x30AD;&#x30EB;&#x30A2;&#x30C3;&#x30D7;&#x3057;&#x3088;&#x3046;"></div></a></figure><p><a href="https://github.com/matsuu">@matsuu</a>&#x3055;&#x3093;&#x304C;&#x6BCE;&#x5E74;&#x7C21;&#x5358;&#x306B;&#x74B0;&#x5883;&#x3092;&#x30BB;&#x30C3;&#x30C8;&#x30A2;&#x30C3;&#x30D7;&#x3067;&#x304D;&#x308B;&#x3088;&#x3046;&#x30E1;&#x30F3;&#x30C6;&#x30CA;&#x30F3;&#x30B9;&#x3057;&#x3066;&#x304F;&#x3060;&#x3055;&#x3063;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;&#x3042;&#x308A;&#x304C;&#x305F;&#x3084;&#x3002;</p><h2 id="%E8%87%AA%E5%88%86%E3%81%AEisucon%E8%A8%98">&#x81EA;&#x5206;&#x306E;ISUCON&#x8A18;</h2><h3 id="isucon12-1">ISUCON12</h3><p>&#x5927;&#x5B66;2&#x5E74;&#x306E;&#x982D;&#x304F;&#x3089;&#x3044;&#x306B;&#xFF0C;PlayGround&#x306E;&#x5148;&#x8F29;&#x304C;Slack&#x30C1;&#x30E3;&#x30F3;&#x30CD;&#x30EB;&#x3067;&#x52DF;&#x96C6;&#x3057;&#x3066;&#x3044;&#x305F;&#x306E;&#x304C;&#x59CB;&#x307E;&#x308A;&#x3067;&#x3057;&#x305F;&#x3002;&#x5F53;&#x6642;Django&#x3092;&#x5B66;&#x3093;&#x3067;&#x6848;&#x4EF6;&#x306B;&#x5165;&#x3063;&#x305F;&#x308A;&#xFF0C;&#x30E2;&#x30D0;&#x30A4;&#x30EB;&#x30A2;&#x30D7;&#x30EA;&#x3092;&#x4F5C;&#x3063;&#x305F;&#x308A;&#xFF0C;&#x30D5;&#x30ED;&#x30F3;&#x30C8;&#x30A8;&#x30F3;&#x30C9;&#x3092;&#x30D0;&#x30CB;&#x30E9;JS&#x3060;&#x3051;&#x3067;&#x4F5C;&#x3063;&#x3066;&#x3044;&#x305F;&#x308A;&#x3057;&#x305F;&#x9803;&#x3067;&#x3057;&#x305F;&#x3002;</p><p>&#x5F53;&#x6642;&#x30A4;&#x30F3;&#x30D5;&#x30E9;&#x7D4C;&#x9A13;&#x306A;&#x3069;&#x306F;&#x5168;&#x7136;&#x7121;&#x304B;&#x3063;&#x305F;&#x306E;&#x3067;&#x3059;&#x304C;&#x98DB;&#x3073;&#x3064;&#x3044;&#x3066;&#xFF0C;Go&#x8A00;&#x8A9E;&#x3092;&#x5B66;&#x3073;&#xFF0C;&#x904E;&#x53BB;&#x554F;&#x3084;&#x8B1B;&#x7FD2;&#x4F1A;&#xFF0C;&#x4E01;&#x5EA6;&#x5F53;&#x6642;&#x306B;&#x51FA;&#x305F;<a href="https://gihyo.jp/book/2022/978-4-297-12846-3">ISUCON&#x672C;</a>&#x3092;&#x898B;&#x306A;&#x304C;&#x3089;&#x4F55;&#x5E74;&#x5206;&#x3082;&#x7D20;&#x632F;&#x308A;&#x3092;&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;&#x5F53;&#x6642;&#x306F;ISUNARABE&#x306A;&#x3069;&#x3082;&#x7121;&#x304B;&#x3063;&#x305F;&#x306E;&#x3067;&#x81EA;&#x5206;&#x305F;&#x3061;&#x3067;&#x5168;&#x3066;&#x69CB;&#x7BC9;&#x3057;&#x3066;&#x3044;&#x305F;&#x306E;&#x3067;&#x3059;&#x304C;&#xFF0C;&#x8272;&#x3005;&#x306A;&#x7F60;&#x306B;&#x306F;&#x307E;&#x308A;&#x307E;&#x304F;&#x3063;&#x3066;&#x3044;&#x307E;&#x3057;&#x305F;&#x3002;SQLite&#x306B;&#x7FFB;&#x5F04;&#x3055;&#x308C;&#xFF0C;&#x7D50;&#x679C;&#x306F;&#x4E0A;&#x4F4D;20%&#x4F4D;&#x3067;&#x3057;&#x305F;&#x3002;</p><p>&#x5F53;&#x6642;&#x306F;&#x4E88;&#x9078;&#x30FB;&#x672C;&#x9078;&#x304C;&#x3042;&#x308A;&#x307E;&#x3057;&#x305F;&#x304C;&#xFF0C;&#x4E0A;&#x4F4D;30&#x30C1;&#x30FC;&#x30E0;&#x306B;&#x306F;&#x5165;&#x308C;&#x305A;&#x672C;&#x9078;&#x306B;&#x3044;&#x3051;&#x305A;&#x6094;&#x3057;&#x304B;&#x3063;&#x305F;&#x3067;&#x3059;&#x3002;&#x305F;&#x3060;&#xFF0C;&#x3053;&#x3053;&#x3067;&#x306E;&#x30A4;&#x30F3;&#x30D5;&#x30E9;&#x5468;&#x308A;&#x306E;&#x5B66;&#x3073;&#x3084;&#xFF0C;&#x30D5;&#x30EC;&#x30FC;&#x30E0;&#x30EF;&#x30FC;&#x30AF;&#x3092;&#x307B;&#x307C;&#x4F7F;&#x308F;&#x306A;&#x3044;&#x30D5;&#x30EB;&#x30B9;&#x30AF;&#x30E9;&#x30C3;&#x30C1;&#x3067;&#x306E;&#x30A2;&#x30D7;&#x30EA;&#x7406;&#x89E3;&#xFF0C;&#x8A08;&#x6E2C;&#x304B;&#x3089;&#x30C1;&#x30E5;&#x30FC;&#x30CB;&#x30F3;&#x30B0;&#x306E;&#x6D41;&#x308C;&#x307E;&#x3067;&#x3092;&#x5E83;&#x304F;&#x5B66;&#x3093;&#x3060;&#x3053;&#x3068;&#x3067;&#xFF0C;SRE&#x3092;&#x306F;&#x3058;&#x3081;&#x3068;&#x3057;&#x305F;&#x69D8;&#x3005;&#x306A;&#x30A4;&#x30F3;&#x30BF;&#x30FC;&#x30F3;&#x306E;&#x3054;&#x7E01;&#x306B;&#x3082;&#x3064;&#x306A;&#x304C;&#x308A;&#x307E;&#x3057;&#x305F;&#x3002;&#x8A98;&#x3063;&#x3066;&#x304F;&#x3060;&#x3055;&#x3063;&#x305F;&#x5148;&#x8F29;&#x65B9;&#x306B;&#x611F;&#x8B1D;&#x3002;</p><h3 id="isucon13">ISUCON13</h3><p>PlayGround&#x3067;&#x30D0;&#x30C3;&#x30AF;&#x30A8;&#x30F3;&#x30C9;&#x30B3;&#x30FC;&#x30B9;&#x3092;&#x4E00;&#x7DD2;&#x306B;&#x904B;&#x55B6;&#x3057;&#x3066;&#x3044;&#x305F;&#x30E1;&#x30F3;&#x30D0;&#x30FC;&#x3068;&#x4E00;&#x7DD2;&#x306B;&#x51FA;&#x5834;&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;</p><p>PlayGround&#x304B;&#x3089;&#x306F;&#x81EA;&#x5206;&#x306E;&#x30C1;&#x30FC;&#x30E0;&#x3068;&#x3082;&#x3046;&#x4E00;&#x30C1;&#x30FC;&#x30E0;&#x304C;&#x51FA;&#x308B;&#x3053;&#x3068;&#x306B;&#x306A;&#x308A;&#xFF0C;&#x81EA;&#x5206;&#x306E;&#x6628;&#x5E74;&#x306E;&#x77E5;&#x898B;&#x3082;&#x5171;&#x6709;&#x3057;&#x306A;&#x304C;&#x3089;&#x4E00;&#x7DD2;&#x306B;&#x5BFE;&#x7B56;&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;&#x7D50;&#x679C;&#x3068;&#x3057;&#x3066;&#x306F;&#x81EA;&#x5206;&#x306E;&#x529B;&#x3082;&#x632F;&#x308B;&#x308F;&#x305B;&#x308B;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x305A;&#xFF0C;&#x771F;&#x3093;&#x4E2D;&#x304F;&#x3089;&#x3044;&#x306E;&#x9806;&#x4F4D;&#x3067;&#x3057;&#x305F;&#x304C;&#xFF0C;Go&#x306B;&#x3082;&#x6163;&#x308C;&#x3066;&#x304D;&#x3066;&#x3084;&#x3063;&#x3066;&#x3044;&#x308B;&#x3053;&#x3068;&#x306E;&#x89E3;&#x50CF;&#x5EA6;&#x304C;&#x4E0A;&#x304C;&#x308A;&#xFF0C;&#x5468;&#x308A;&#x306E;&#x30E1;&#x30F3;&#x30D0;&#x30FC;&#x306B;&#x3082;&#x77E5;&#x898B;&#x3092;&#x5171;&#x6709;&#x3067;&#x304D;&#x3066;&#x826F;&#x304B;&#x3063;&#x305F;&#x3067;&#x3059;&#x3002;</p><p>&#x30C1;&#x30E5;&#x30FC;&#x30CB;&#x30F3;&#x30B0;&#x3092;&#x307F;&#x3093;&#x306A;&#x3067;&#x4E00;&#x500B;&#x4E00;&#x500B;&#x884C;&#x3063;&#x3066;&#x70B9;&#x6570;&#x304C;&#x4E0A;&#x304C;&#x3063;&#x3066;&#x3044;&#x304F;&#x306E;&#x306F;&#x697D;&#x3057;&#x3044;&#x3002;</p><h3 id="isucon14">ISUCON14</h3><p>ISUCON13&#x3067;&#x51FA;&#x305F;&#x30E1;&#x30F3;&#x30D0;&#x30FC;&#x306F;&#x5352;&#x696D;&#x3057;&#x3066;&#x3057;&#x307E;&#x3044;&#xFF0C;&#x8907;&#x6570;&#x4EBA;&#x3067;&#x5BFE;&#x7B56;&#x3059;&#x308B;&#x4F59;&#x529B;&#x306A;&#x3069;&#x3082;&#x7121;&#x304B;&#x3063;&#x305F;&#x306E;&#x3067;&#x51FA;&#x5834;&#x3092;&#x591A;&#x5C11;&#x8FF7;&#x3063;&#x3066;&#x3044;&#x305F;&#x3053;&#x3068;&#x3082;&#x3042;&#x308A;&#x307E;&#x3057;&#x305F;&#x304C;&#xFF0C;&#x5B66;&#x751F;&#x6700;&#x5F8C;&#x3068;&#x3044;&#x3046;&#x3053;&#x3068;&#x3067;&#xFF0C;&#x4E00;&#x4EBA;&#x3067;ISUCON14&#x306B;&#x51FA;&#x5834;&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;&#x7D50;&#x679C;&#x3068;&#x3057;&#x3066;&#xFF0C;&#x30B9;&#x30B3;&#x30A2;&#x306F;&#x826F;&#x304B;&#x3063;&#x305F;&#x7269;&#x306E;&#x6700;&#x5F8C;&#x306B;FAIL&#x3057;&#x3066;&#x3057;&#x307E;&#x3044;&#x307E;&#x3057;&#x305F;&#x3002;Write-Up&#x3092;&#x66F8;&#x3044;&#x305F;&#x306E;&#x3067;&#x3088;&#x3051;&#x308C;&#x3070;&#x3053;&#x3061;&#x3089;&#x3082;&#x662F;&#x975E;&#x3002;</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://zenn.dev/tak848/articles/20241208-isucon14-writeup"><div class="kg-bookmark-content"><div class="kg-bookmark-title">&#x5B66;&#x751F;&#x6700;&#x5F8C;&#x306E;ISUCON14&#x306B;&#x4E00;&#x4EBA;&#x3067;&#x51FA;&#x3066;30&#x4F4D;&#x4EE5;&#x5185;&#x306B;&#x5165;&#x3063;&#x305F;&#x3068;&#x601D;&#x3063;&#x305F;&#x3089;&#x5931;&#x683C;&#x3060;&#x3063;&#x305F;&#xFF01;&#x1F607;</div><div class="kg-bookmark-description"></div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://static.zenn.studio/images/logo-transparent.png" alt="ISUCON&#x3067;&#x3044;&#x3044;&#x304B;&#x3093;&#x3058;&#x306B;&#x30B9;&#x30AD;&#x30EB;&#x30A2;&#x30C3;&#x30D7;&#x3057;&#x3088;&#x3046;"><span class="kg-bookmark-author">Zenn</span><span class="kg-bookmark-publisher">TAK848</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://res.cloudinary.com/zenn/image/upload/s--o3RfO2o4--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:%E5%AD%A6%E7%94%9F%E6%9C%80%E5%BE%8C%E3%81%AEISUCON14%E3%81%AB%E4%B8%80%E4%BA%BA%E3%81%A7%E5%87%BA%E3%81%A630%E4%BD%8D%E4%BB%A5%E5%86%85%E3%81%AB%E5%85%A5%E3%81%A3%E3%81%9F%E3%81%A8%E6%80%9D%E3%81%A3%E3%81%9F%E3%82%89%E5%A4%B1%E6%A0%BC%E3%81%A0%E3%81%A3%E3%81%9F%EF%BC%81%20%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:TAK848%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9saDMuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2EtL0FPaDE0R2dHMjRsRFhTRUMwSmRxanRQY0ZxSXhOQUFwU0MyU21XdjNTMHV4PXM5Ni1j%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png" alt="ISUCON&#x3067;&#x3044;&#x3044;&#x304B;&#x3093;&#x3058;&#x306B;&#x30B9;&#x30AD;&#x30EB;&#x30A2;&#x30C3;&#x30D7;&#x3057;&#x3088;&#x3046;"></div></a></figure><p>&#x305D;&#x3057;&#x3066;&#xFF0C;&#x3084;&#x308B;&#x3068;&#x3084;&#x3063;&#x3071;&#x697D;&#x3057;&#x3044;&#x3093;&#x3067;&#x3059;&#x3088;&#x306D;&#x3002;ISUCON&#x3002;&#x7D20;&#x632F;&#x308A;&#x306F;&#x3067;&#x304D;&#x307E;&#x305B;&#x3093;&#x3067;&#x3057;&#x305F;&#x304C;&#xFF0C;&#x611F;&#x60F3;&#x6226;&#x304C;&#x307E;&#x3060;Open&#x4E2D;&#x306A;&#x306E;&#x3067;&#x5E74;&#x672B;&#x5E74;&#x59CB;&#x306B;&#x7D9A;&#x304D;&#x3092;&#x3084;&#x308A;&#x305F;&#x3044;&#x3068;&#x601D;&#x3063;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;</p><h3 id="%E6%9D%A5%E5%B9%B4%E4%BB%A5%E9%99%8D">&#x6765;&#x5E74;&#x4EE5;&#x964D;</h3><p>&#x76EE;&#x6307;&#x305B;&#xFF0C;1&#x70B9;&#x4EE5;&#x4E0A;&#xFF01;&#xFF01;&#xFF1F;&#x1F4AA;</p><h2 id="%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB">&#x304A;&#x308F;&#x308A;&#x306B;</h2><p>ISUCON&#x306F;&#x6280;&#x8853;&#x7684;&#x306A;&#x77E5;&#x898B;&#x3092;&#x5E45;&#x5E83;&#x304F;&#x5F97;&#x3089;&#x308C;&#x308B;&#x306E;&#x3067;&#xFF0C;&#x3053;&#x308C;&#x3092;&#x6D3B;&#x304B;&#x3057;&#x3064;&#x3064;&#xFF0C;&#x500B;&#x4EBA;&#x958B;&#x767A;&#x3057;&#x305F;&#x308A;&#xFF0C;&#x30B5;&#x30DD;&#x30FC;&#x30BF;&#x30FC;&#x30BA;&#x3055;&#x3093;&#x306A;&#x3069;&#x306E;&#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x306B;&#x51FA;&#x305F;&#x308A;&#xFF0C;&#x5B9F;&#x969B;&#x306B;&#x5C31;&#x696D;&#x578B;&#x30A4;&#x30F3;&#x30BF;&#x30FC;&#x30F3;&#x3084;&#x30D0;&#x30A4;&#x30C8;&#x306B;&#x53C2;&#x52A0;&#x3057;&#x3066;&#x307F;&#x308B;&#x3068;&#xFF0C;&#x6280;&#x8853;&#x3092;&#x8D85;&#x3048;&#x305F;&#x30C1;&#x30FC;&#x30E0;&#x958B;&#x767A;&#x30FB;&#x30D7;&#x30ED;&#x30C0;&#x30AF;&#x30C8;&#x958B;&#x767A;&#x30FB;&#x9577;&#x671F;&#x958B;&#x767A;&#x3068;&#x3044;&#x3063;&#x305F;&#x69D8;&#x3005;&#x306A;&#x8996;&#x70B9;&#x306E;&#x5B66;&#x3073;&#x304C;&#x3067;&#x304D;&#x308B;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x3002;&#x8272;&#x3005;&#x307E;&#x305A;&#x306F;&#x6311;&#x6226;&#x3060;&#x306A;&#x3041;&#x3068;&#x3002;</p><p>ISUCON&#x306B;&#x8208;&#x5473;&#x3092;&#x6301;&#x3063;&#x305F;&#x65B9;&#x306F;&#x662F;&#x975E;&#xFF0C;&#x305C;&#x3072;&#x904E;&#x53BB;&#x554F;&#x306A;&#x3069;&#x3092;&#x89E6;&#x308A;&#x306A;&#x304C;&#x3089;&#x30C1;&#x30E5;&#x30FC;&#x30CB;&#x30F3;&#x30B0;&#x306E;&#x6CE5;&#x81ED;&#x3055;&#x3068;&#x9762;&#x767D;&#x3055;&#x3092;&#x4F53;&#x611F;&#x3057;&#x3066;&#x307F;&#x3066;&#x304F;&#x3060;&#x3055;&#x3044;&#x3002;</p><p>&#x305D;&#x3057;&#x3066;&#x660E;&#x65E5;&#xFF08;&#xFF1F;&#xFF09;&#x306E;24&#x65E5;&#x76EE;&#x306E;&#x62C5;&#x5F53;&#x306F;&#xFF0C;kou&#x304F;&#x3093;&#x3067;&#x3059;&#xFF01;&#x304A;&#x697D;&#x3057;&#x307F;&#x306B;&#x301C;&#xFF01;</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="http://blog.shinonome.io/lottielab/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">&#x3010;Lottielab&#x3011;&#x30AF;&#x30EA;&#x30B9;&#x30DE;&#x30B9;&#x30D7;&#x30EC;&#x30BC;&#x30F3;&#x30C8;&#x3092;&#x5C4A;&#x3051;&#x3088;&#x3046;&#xFF01;&#x1F381;</div><div class="kg-bookmark-description">&#x30A2;&#x30CB;&#x30E1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x3064;&#x304D;&#x306E;&#x7F8E;&#x3057;&#x3044;Web&#x30B5;&#x30A4;&#x30C8;&#x30FB;&#x30A2;&#x30D7;&#x30EA;&#x30B1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x306E;&#x958B;&#x767A;&#x306B;&#x5F79;&#x7ACB;&#x3064;&#x4FBF;&#x5229;&#x306A;&#x30C4;&#x30FC;&#x30EB;&#x3092;&#x7D39;&#x4ECB;&#x3057;&#x307E;&#x3059;&#x1F64C;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="http://blog.shinonome.io/favicon.png" alt="ISUCON&#x3067;&#x3044;&#x3044;&#x304B;&#x3093;&#x3058;&#x306B;&#x30B9;&#x30AD;&#x30EB;&#x30A2;&#x30C3;&#x30D7;&#x3057;&#x3088;&#x3046;"><span class="kg-bookmark-author">Shinonome Tech Blog</span><span class="kg-bookmark-publisher">PlayGround</span></div></div><div class="kg-bookmark-thumbnail"><img src="http://blog.shinonome.io/content/images/2024/12/christmas3.png" alt="ISUCON&#x3067;&#x3044;&#x3044;&#x304B;&#x3093;&#x3058;&#x306B;&#x30B9;&#x30AD;&#x30EB;&#x30A2;&#x30C3;&#x30D7;&#x3057;&#x3088;&#x3046;"></div></a></figure><p>&#x3093;&#xFF0C;&#x3082;&#x3046;&#x516C;&#x958B;&#x3055;&#x308C;&#x3066;&#x3044;&#x308B;&#x2026;&#xFF01;<br></p><h2 id="%E5%8F%82%E8%80%83%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%9D%E3%81%86%E3%81%AA%E8%B3%87%E6%96%99%E4%BE%8B">&#x53C2;&#x8003;&#x306B;&#x306A;&#x308A;&#x305D;&#x3046;&#x306A;&#x8CC7;&#x6599;&#x4F8B;</h2><p>&#x672C;&#x6587;&#x4E2D;&#x3067;&#x3082;&#x3042;&#x3052;&#x307E;&#x3057;&#x305F;&#x304C;&#xFF0C;&#x4EE5;&#x4E0B;&#x306A;&#x3069;&#x306F;&#x975E;&#x5E38;&#x306B;&#x53C2;&#x8003;&#x306B;&#x306A;&#x308A;&#x307E;&#x3059;&#x3002;&#x3042;&#x308A;&#x304C;&#x305F;&#x3084;&#x3002;</p><p>ISUCON&#x4E8B;&#x524D;&#x8B1B;&#x7FD2;&#x4F1A;</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/8NjJcarqv50?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="ISUCON &#x4E8B;&#x524D;&#x8B1B;&#x7FD2; 2022 &#x5EA7;&#x5B66;"></iframe></figure><p>&#x6771;&#x5DE5;&#x5927;&#x306E;&#x30B5;&#x30FC;&#x30AF;&#x30EB;trap&#x3055;&#x3093;&#x306E;&#x8B1B;&#x7FD2;&#x4F1A;&#x8CC7;&#x6599;</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://isucon-workshop.trap.show/text/chapter-0/index.html"><div class="kg-bookmark-content"><div class="kg-bookmark-title">ISUCON&#x521D;&#x5FC3;&#x8005;&#x5411;&#x3051;&#x8B1B;&#x7FD2;&#x4F1A;</div><div class="kg-bookmark-description">ISUCON workshop for beginners in traP</div><div class="kg-bookmark-metadata"><span class="kg-bookmark-author">ISUCON&#x521D;&#x5FC3;&#x8005;&#x5411;&#x3051;&#x8B1B;&#x7FD2;&#x4F1A;</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://isucon-workshop.trap.show/assets/image/logo.png" alt="ISUCON&#x3067;&#x3044;&#x3044;&#x304B;&#x3093;&#x3058;&#x306B;&#x30B9;&#x30AD;&#x30EB;&#x30A2;&#x30C3;&#x30D7;&#x3057;&#x3088;&#x3046;"></div></a></figure><p>&#x300C;&#x9054;&#x4EBA;&#x304C;&#x6559;&#x3048;&#x308B;Web&#x30D1;&#x30D5;&#x30A9;&#x30FC;&#x30DE;&#x30F3;&#x30B9;&#x30C1;&#x30E5;&#x30FC;&#x30CB;&#x30F3;&#x30B0; &#x301C;ISUCON&#x304B;&#x3089;&#x5B66;&#x3076;&#x9AD8;&#x901F;&#x5316;&#x306E;&#x5B9F;&#x8DF5;&#x300D;&#x901A;&#x79F0;ISUCON&#x672C;</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://gihyo.jp/book/2022/978-4-297-12846-3"><div class="kg-bookmark-content"><div class="kg-bookmark-title">&#x9054;&#x4EBA;&#x304C;&#x6559;&#x3048;&#x308B;Web&#x30D1;&#x30D5;&#x30A9;&#x30FC;&#x30DE;&#x30F3;&#x30B9;&#x30C1;&#x30E5;&#x30FC;&#x30CB;&#x30F3;&#x30B0; &#x301C;ISUCON&#x304B;&#x3089;&#x5B66;&#x3076;&#x9AD8;&#x901F;&#x5316;&#x306E;&#x5B9F;&#x8DF5;</div><div class="kg-bookmark-description">LINE&#x682A;&#x5F0F;&#x4F1A;&#x793E;&#x304C;&#x4E3B;&#x50AC;&#x3059;&#x308B;Web&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x306E;&#x30D1;&#x30D5;&#x30A9;&#x30FC;&#x30DE;&#x30F3;&#x30B9;&#x30C1;&#x30E5;&#x30FC;&#x30CB;&#x30F3;&#x30B0;&#x30B3;&#x30F3;&#x30C6;&#x30B9;&#x30C8;&#xFF0C;ISUCON&#xFF08;Iikanjini Speed Up Contest&#xFF09;&#x3067;&#x6280;&#x8853;&#x3092;&#x7AF6;&#x3044;&#x5408;&#x3063;&#x3066;&#x304D;&#x305F;&#x8457;&#x8005;&#x304C;Web&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x9AD8;&#x901F;&#x5316;&#x306E;&#x305F;&#x3081;&#x306E;&#x8003;&#x3048;&#x65B9;&#x3068;&#x30CE;&#x30A6;&#x30CF;&#x30A6;&#x3092;&#x308F;&#x304B;&#x308A;&#x3084;&#x3059;&#x304F;&#x89E3;&#x8AAC;&#x3002;&#x672C;&#x66F8;&#x3067;&#x306F;&#xFF0C;&#x304A;&#x984C;&#x3068;&#x306A;&#x308B;Web&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x3092;&#x3072;&#x3068;&#x3064;&#x7528;&#x610F;&#x3057;&#x3066;&#xFF0C;&#x624B;&#x3092;&#x52D5;&#x304B;&#x3057;&#x306A;&#x304C;&#x3089;&#x9AD8;&#x901F;&#x5316;&#x624B;&#x6CD5;&#x3092;&#x5B66;&#x3093;&#x3067;&#x3044;&#x304D;&#x307E;&#x3059;&#x3002;Web&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x304C;&#x3069;&#x306E;&#x304F;&#x3089;&#x3044;&#x306E;&#x8CA0;&#x8377;&#x306B;&#x8010;&#x3048;&#x3089;&#x308C;&#x308B;&#x304B;&#xFF0C;&#x3069;&#x306E;&#x304F;&#x3089;&#x3044;&#x306E;&#x8CA0;&#x8377;&#x3067;&#x4E0D;&#x5177;&#x5408;&#x304C;&#x8D77;&#x3053;&#x308B;&#x304B;&#x3092;&#x691C;&#x8A3C;&#x3057;&#xFF0C;&#x4E0D;&#x5177;&#x5408;&#x304C;&#x8D77;&#x3053;&#x308B;&#x539F;&#x56E0;&#x3092;&#x7A81;&#x304D;&#x6B62;&#x3081;&#xFF0C;&#x6539;&#x5584;&#x3057;&#x3066;&#x3044;&#x304D;&#x307E;&#x3059;&#x3002;&#x307E;&#x305F;&#xFF0C;&#x8CA0;&#x8377;&#x306B;&#x5BFE;&#x5FDC;&#x3059;&#x308B;&#x65B9;&#x6CD5;&#x3060;&#x3051;&#x3067;&#x306A;&#x304F;&#xFF0C;&#x8CA0;&#x8377;&#x3092;&#x767A;&#x751F;&#x3055;&#x305B;&#x308B;&#x65B9;&#x6CD5;&#xFF08;&#x30D9;&#x30F3;&#x30C1;&#x30DE;&#x30FC;&#x30AB;&#x30FC;&#x306E;&#x4F5C;&#x6210;&#x65B9;&#x6CD5;&#xFF09;&#x3082;&#x7D39;&#x4ECB;&#x3057;&#x307E;&#x3059;&#x3002;&#x672C;&#x66F8;&#x3092;&#x8AAD;&#x3093;&#x3067;&#xFF0C;Web&#x30B5;&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://gihyo.jp/GHfavicon.svg" alt="ISUCON&#x3067;&#x3044;&#x3044;&#x304B;&#x3093;&#x3058;&#x306B;&#x30B9;&#x30AD;&#x30EB;&#x30A2;&#x30C3;&#x30D7;&#x3057;&#x3088;&#x3046;"><span class="kg-bookmark-author">&#x6280;&#x8853;&#x8A55;&#x8AD6;&#x793E;</span><span class="kg-bookmark-publisher">&#x85E4;&#x539F;&#x4FCA;&#x4E00;&#x90CE;&#xFF0C;&#x99AC;&#x5834;&#x4FCA;&#x5F70;&#xFF0C;&#x4E2D;&#x897F;&#x5EFA;&#x767B;&#xFF0C;&#x9577;&#x91CE;&#x96C5;&#x5E83;&#xFF0C;&#x91D1;&#x5B50;&#x9054;&#x54C9;&#xFF0C;&#x8349;&#x91CE;&#x7FD4;&#x3000;&#x8457;</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://image.gihyo.co.jp/assets/images/ogp/2022/9784297128463.jpg" alt="ISUCON&#x3067;&#x3044;&#x3044;&#x304B;&#x3093;&#x3058;&#x306B;&#x30B9;&#x30AD;&#x30EB;&#x30A2;&#x30C3;&#x30D7;&#x3057;&#x3088;&#x3046;"></div></a></figure>]]></content:encoded></item><item><title><![CDATA[webview_flutterの動きがOSによって違う！]]></title><description><![CDATA[webview_flutterに実装されているonPageStarted, onPageFinished, onUrlChangeの動きがOSごとにどう異なるか調べました。]]></description><link>http://blog.shinonome.io/webview_flutter_os_difference/</link><guid isPermaLink="false">67679cd984f04652f62047f2</guid><category><![CDATA[モバイル]]></category><dc:creator><![CDATA[PlayGround]]></dc:creator><pubDate>Sun, 22 Dec 2024 11:29:42 GMT</pubDate><media:content url="http://blog.shinonome.io/content/images/2024/12/----------2024-12-22-20.25.44.png" medium="image"/><content:encoded><![CDATA[<h1 id="%E5%BF%99%E3%81%97%E3%81%84%E6%96%B9%E5%90%91%E3%81%91">&#x5FD9;&#x3057;&#x3044;&#x65B9;&#x5411;&#x3051;</h1><img src="http://blog.shinonome.io/content/images/2024/12/----------2024-12-22-20.25.44.png" alt="webview_flutter&#x306E;&#x52D5;&#x304D;&#x304C;OS&#x306B;&#x3088;&#x3063;&#x3066;&#x9055;&#x3046;&#xFF01;"><p>Q. ios&#x3067;onPageFinished&#x304C;&#x547C;&#x3070;&#x308C;&#x306A;&#x3044;<br>A. URL&#x304C;&#x7121;&#x52B9;&#x306A;&#x5834;&#x5408;&#x306F;&#x547C;&#x3070;&#x308C;&#x306A;&#x3044;&#x3002;&#x7528;&#x9014;&#x306B;&#x3088;&#x308B;&#x304C;onUrlChange&#x3084;onWebResourceError&#x3092;&#x4F7F;&#x3046;&#x3068;&#x4EE3;&#x7528;&#x3067;&#x304D;&#x308B;&#x304B;&#x3082;&#x3002;OS&#x3054;&#x3068;&#x306B;&#x52D5;&#x304D;&#x304C;&#x9055;&#x3046;&#x53EF;&#x80FD;&#x6027;&#x3092;&#x982D;&#x306B;&#x5165;&#x308C;&#x3066;&#x304A;&#x304F;&#x3079;&#x3057;&#x3002;</p><pre><code>onUrlChange: (UrlChange change) {
	debugPrint(&apos;url change to ${change.url}&apos;);
},
onWebResourceError: (WebResourceError error) {
	debugPrint(&apos;Page resource error: ${error.url}&apos;);
},
</code></pre><h1 id="%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">&#x306F;&#x3058;&#x3081;&#x306B;</h1><p>&#x30A2;&#x30C9;&#x30D9;&#x30F3;&#x30C8;&#x30AB;&#x30EC;&#x30F3;&#x30C0;&#x30FC;22&#x65E5;&#x76EE;&#xFF01;playground&#x6240;&#x5C5E;&#x3001;&#x5B66;&#x90E8;4&#x5E74;&#x751F;&#x306E;ko_cha&#x3067;&#x3059;&#x3002;&#x53C2;&#x52A0;&#x3057;&#x305F;&#x30CF;&#x30C3;&#x30AB;&#x30BD;&#x30F3;&#x306E;&#x4E2D;&#x3067;&#x304A;&#x4E16;&#x8A71;&#x306B;&#x306A;&#x3063;&#x305F;&#xFF08;&#x82E6;&#x3057;&#x3081;&#x3089;&#x308C;&#x305F;&#xFF09;webview_flutter&#x306B;&#x3064;&#x3044;&#x3066;&#x66F8;&#x304D;&#x307E;&#x3059;&#x3002;<br><a href="https://pub.dev/packages/webview_flutter">https://pub.dev/packages/webview_flutter</a></p><h3 id="tokyo-flutter-hackathon">Tokyo Flutter Hackathon</h3><p>11/2,3&#x958B;&#x50AC;@Abema Towers<br><a href="https://tokyo-flutter-hackathon.connpass.com/event/326665/">https://tokyo-flutter-hackathon.connpass.com/event/326665/</a></p><p>&#x30C1;&#x30FC;&#x30E0;&#x30E1;&#x30F3;&#x30D0;&#x30FC;&#x306E;&#x30A2;&#x30C9;&#x30D9;&#x30F3;&#x30C8;&#x30AB;&#x30EC;&#x30F3;&#x30C0;&#x30FC;<br>&#x30D0;&#x30C3;&#x30AF;&#x30A8;&#x30F3;&#x30C9;&#x62C5;&#x5F53;&#x306E;Tatsuro&#x3055;&#x3093;<br><a href="http://blog.shinonome.io/dong-jing/">https://blog.shinonome.io/dong-jing/</a></p><p>&#x540C;&#x3058;&#x304F;&#x30E2;&#x30D0;&#x30A4;&#x30EB;&#x62C5;&#x5F53;&#x306E;yo&#x3055;&#x3093;<br>25&#x65E5;&#x62C5;&#x5F53;&#x3067;&#x3059;&#xFF01;<br>&#x4ED6;&#x306E;&#x5B66;&#x751F;&#x306E;&#x8A18;&#x4E8B;&#x3082;&#x305C;&#x3072;&#x3054;&#x89A7;&#x304F;&#x3060;&#x3055;&#x3044;&#x3002;<br><a href="https://qiita.com/advent-calendar/2024/playground">https://qiita.com/advent-calendar/2024/playground</a></p><p>&#x305D;&#x308C;&#x3067;&#x306F;&#x65E9;&#x901F;&#x672C;&#x984C;&#x306B;&#x5165;&#x308A;&#x307E;&#x3059;&#xFF01;</p><h1 id="ios%E7%89%88%E3%81%AE%E3%81%BF%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E5%8F%96%E5%BE%97%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84">ios&#x7248;&#x306E;&#x307F;&#x30A2;&#x30AF;&#x30BB;&#x30B9;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x53D6;&#x5F97;&#x304C;&#x3067;&#x304D;&#x306A;&#x3044;</h1><p>&#x3084;&#x308A;&#x305F;&#x304B;&#x3063;&#x305F;&#x3053;&#x3068;&#xFF1A;onPageFinished&#x304C;&#x547C;&#x3070;&#x308C;&#x305F;&#x6642;&#x306B;&#x30AF;&#x30A8;&#x30EA;&#x304B;&#x3089;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x3092;&#x53D6;&#x5F97;</p><p>&#x3057;&#x304B;&#x3057;&#x306A;&#x305C;&#x304B;ios&#x7248;&#x3060;&#x3051;onPageFinished&#x304C;&#x547C;&#x3070;&#x308C;&#x306A;&#x3044;&#x3068;&#x3044;&#x3046;&#x73FE;&#x8C61;&#x306B;&#x82E6;&#x3057;&#x3081;&#x3089;&#x308C;&#x307E;&#x3057;&#x305F;&#x3002;</p><p>&#x8ABF;&#x3079;&#x3066;&#x3044;&#x308B;&#x5185;&#x306B;&#x300C;URL&#x304C;&#x7121;&#x52B9;&#x3060;&#x3068;onPageFinished&#x304C;&#x547C;&#x3070;&#x308C;&#x306A;&#x3044;&#x300D;&#x3068;&#x3044;&#x3046;issue&#x3092;&#x898B;&#x3064;&#x3051;&#x305F;&#x306E;&#x3067;&#x3001;&#x3053;&#x308C;&#x304C;&#x539F;&#x56E0;&#x3060;&#x3068;&#x4EEE;&#x5B9A;&#x3057;&#x3066;&#x518D;&#x73FE;&#x3057;&#x3066;&#x307F;&#x307E;&#x3057;&#x305F;&#x3002;&#xFF08;&#x304B;&#x306A;&#x308A;&#x53E4;&#x3044;issue&#xFF09;<br><a href="https://github.com/flutter/flutter/issues/74987">https://github.com/flutter/flutter/issues/74987</a></p><h3 id="%E5%86%8D%E7%8F%BE">&#x518D;&#x73FE;</h3><p>&#x4F7F;&#x7528;&#x3057;&#x305F;&#x30B3;&#x30FC;&#x30C9;&#x306F;&#x6700;&#x5F8C;&#x306B;&#x8F09;&#x305B;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;<br>&#x30ED;&#x30B0;&#x30A4;&#x30F3;&#x6642;&#x306E;&#x30EA;&#x30C0;&#x30A4;&#x30EC;&#x30AF;&#x30C8;&#x306F;&#x77ED;&#x7E2E;URL&#x3092;&#x4F5C;&#x308B;&#x30B5;&#x30FC;&#x30D3;&#x30B9;bitly&#x3092;&#x7528;&#x3044;&#x3066;&#x518D;&#x73FE;&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;<br>&#x30A2;&#x30AF;&#x30BB;&#x30B9;&#x3057;&#x305F;&#x3089;&quot;<a href="https://flutter.devv/">https://flutter.devv/</a>&quot; &#x3068;&#x3044;&#x3046;&#x5B58;&#x5728;&#x3057;&#x306A;&#x3044;&#x30DA;&#x30FC;&#x30B8;&#x306B;&#x98DB;&#x3070;&#x3055;&#x308C;&#x308B;&#x3088;&#x3046;&#x306B;&#x3057;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;</p><p>PC&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x3067;&#x958B;&#x304F;&#x3068;&#x3053;&#x3046;&#x306A;&#x308A;&#x307E;&#x3059;&#x3002;&#x3061;&#x3083;&#x3093;&#x3068;&#xFF08;&#xFF1F;&#xFF09;&#x7121;&#x52B9;</p><figure class="kg-card kg-image-card"><img src="http://blog.shinonome.io/content/images/2024/12/----------2024-12-21-13.34.13.png" class="kg-image" alt="webview_flutter&#x306E;&#x52D5;&#x304D;&#x304C;OS&#x306B;&#x3088;&#x3063;&#x3066;&#x9055;&#x3046;&#xFF01;" loading="lazy" width="1376" height="686" srcset="http://blog.shinonome.io/content/images/size/w600/2024/12/----------2024-12-21-13.34.13.png 600w, http://blog.shinonome.io/content/images/size/w1000/2024/12/----------2024-12-21-13.34.13.png 1000w, http://blog.shinonome.io/content/images/2024/12/----------2024-12-21-13.34.13.png 1376w" sizes="(min-width: 720px) 720px"></figure><p>&#x4F59;&#x8AC7;&#x3067;&#x3059;&#x304C;<a href="https://www.flutter.de/">https://www.flutter.de/</a>&#x306F;&#x5B58;&#x5728;&#x3059;&#x308B;&#x3088;&#x3046;&#x3067;&#x3059;&#x7B11;</p><h3 id="%E5%AE%9F%E9%9A%9B%E3%81%AE%E5%8B%95%E3%81%8D">&#x5B9F;&#x969B;&#x306E;&#x52D5;&#x304D;</h3><p>Android</p><pre><code>I/flutter (16437): Page started loading: https://flutter.devv/
I/flutter (16437): Page finished loading: https://flutter.devv/
</code></pre><p>ios</p><pre><code>flutter: Page started loading: https://bit.ly/49Wjv5i
</code></pre><p>android&#x7248;&#x3060;&#x3068;onPageStarted&#x306E;&#x6642;&#x70B9;&#x3067;&#x30EA;&#x30C0;&#x30A4;&#x30EC;&#x30AF;&#x30C8;&#x5F8C;&#x306E;URL&#x304C;&#x8868;&#x793A;&#x3055;&#x308C;&#x308B;&#x2B50;&#xFE0F;android&#x7248;&#x3067;&#x306F;&#x30A8;&#x30E9;&#x30FC;&#x306B;&#x95A2;&#x4FC2;&#x306A;&#x304F;onPageFinished&#x304C;&#x547C;&#x3070;&#x308C;&#x308B;&#x3002;<br>&#x2B50;&#xFE0F;ios&#x7248;&#x3060;&#x3068;&#x30A8;&#x30E9;&#x30FC;&#x304C;&#x8D77;&#x304D;&#x305F;&#x969B;&#x306B;&#x306F;onPageFinished&#x304C;&#x8868;&#x793A;&#x3055;&#x308C;&#x306A;&#x3044;&#x3002;</p><h3 id="%E5%AF%BE%E7%AD%96">&#x5BFE;&#x7B56;</h3><p>&#x5BFE;&#x7B56;&#x3068;&#x3057;&#x3066;&#x306F;&#x4EE5;&#x4E0B;&#x306E;2&#x3064;&#x3092;&#x63D0;&#x6848;&#x3057;&#x307E;&#x3059;&#x3002;</p><ol><li>onUrlChange&#x3092;&#x4F7F;&#x3044;&#x3001;&#x30A8;&#x30E9;&#x30FC;&#x51E6;&#x7406;&#x3092;&#x5F85;&#x305F;&#x305A;URL&#x3092;&#x53D6;&#x5F97;&#x3059;&#x308B;&#x65B9;&#x6CD5;</li><li>onWebResourceError&#x3092;&#x4F7F;&#x3044;&#x3001;&#xFF08;Android&#x7248;&#x3068;&#x540C;&#x3058;&#x3088;&#x3046;&#x306B;&#xFF09;&#x30A8;&#x30E9;&#x30FC;&#x304C;&#x8D77;&#x304D;&#x3066;&#x3044;&#x305F;&#x3068;&#x3057;&#x3066;&#x3082;finish&#x6271;&#x3044;&#x3067;&#x51E6;&#x7406;&#x3059;&#x308B;</li></ol><pre><code>onUrlChange: (UrlChange change) {
	debugPrint(&apos;url change to ${change.url}&apos;);
},
onWebResourceError: (WebResourceError error) {
	debugPrint(&apos;Page resource error: ${error.url}&apos;);
},
</code></pre><p>&#x3069;&#x3061;&#x3089;&#x306E;OS&#x3067;&#x3082;&#x691C;&#x77E5;&#x3067;&#x304D;&#x308B;&#x306E;&#x3067;&#x3001;&#x4ECA;&#x56DE;&#x306E;&#x3088;&#x3046;&#x306B;&#x3068;&#x308A;&#x3042;&#x3048;&#x305A;&#x30AF;&#x30A8;&#x30EA;&#x3092;&#x53D6;&#x308A;&#x305F;&#x3044;&#x3060;&#x3051;&#x3067;&#x3042;&#x308C;&#x3070;&#x6709;&#x7528;&#x304B;&#x3068;&#x5B58;&#x3058;&#x307E;&#x3059;&#x3002;</p><h3 id="%E5%AF%BE%E7%AD%96%E5%BE%8C%E3%81%AE%E5%8B%95%E3%81%8D">&#x5BFE;&#x7B56;&#x5F8C;&#x306E;&#x52D5;&#x304D;</h3><p>Android</p><pre><code>I/flutter (16437): Page started loading: https://flutter.devv/
I/flutter (16437): Page resource error: https://flutter.devv/&#x3000;&#x2190;&#x8FFD;&#x52A0;&#x5206;
I/flutter (16437): Page finished loading: https://flutter.devv/
I/flutter (16437): url change to https://flutter.devv/&#x3000;&#x2190;&#x8FFD;&#x52A0;&#x5206;
</code></pre><p>ios</p><pre><code>flutter: url change to https://bit.ly/49Wjv5i&#x3000;&#x2190;&#x8FFD;&#x52A0;&#x5206;
flutter: Page started loading: https://bit.ly/49Wjv5i
flutter: url change to https://flutter.devv/&#x3000;&#x2190;&#x8FFD;&#x52A0;&#x5206;
flutter: Page resource error: https://flutter.devv/&#x3000;&#x2190;&#x8FFD;&#x52A0;&#x5206;
flutter: url change to null&#x3000;&#x2190;&#x8FFD;&#x52A0;&#x5206;
</code></pre><p></p><h1 id="%E3%81%A1%E3%82%87%E3%81%A3%E3%81%A8%E6%B7%B1%E6%8E%98%E3%82%8A">&#x3061;&#x3087;&#x3063;&#x3068;&#x6DF1;&#x6398;&#x308A;</h1><p>&#x3054;&#x8208;&#x5473;&#x304C;&#x3042;&#x308C;&#x3070;&#x304A;&#x4ED8;&#x304D;&#x5408;&#x3044;&#x304F;&#x3060;&#x3055;&#x3044;&#x3002;</p><h3 id="%E3%81%9D%E3%82%82%E3%81%9D%E3%82%82webviewflutter%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%81%A3%E3%81%A6%EF%BC%9F">&#x305D;&#x3082;&#x305D;&#x3082;webview_flutter&#x306E;&#x4E2D;&#x8EAB;&#x3063;&#x3066;&#xFF1F;</h3><blockquote>A Flutter plugin that provides a WebView widget.On iOS the WebView widget is backed by a <a href="https://developer.apple.com/documentation/webkit/wkwebview">WKWebView</a>. On Android the WebView widget is backed by a <a href="https://developer.android.com/reference/android/webkit/WebView">WebView</a>.</blockquote><p>&#x3068;&#x3042;&#x308B;&#x3088;&#x3046;&#x306B;&#x3001;&#x5B9F;&#x306F;&#x88CF;&#x5074;&#x3067;&#x306F;&#x5168;&#x304F;&#x5225;&#x306E;&#x3082;&#x306E;&#x304C;&#x52D5;&#x3044;&#x3066;&#x3044;&#x308B;&#x3088;&#x3046;&#x3067;&#x3059;&#x3002;<br>&#x305D;&#x308C;&#x305E;&#x308C;&#x306E;&#x547C;&#x3073;&#x51FA;&#x3055;&#x308C;&#x308B;&#x30BF;&#x30A4;&#x30DF;&#x30F3;&#x30B0;&#x3092;&#x5C11;&#x3057;&#x8ABF;&#x3079;&#x3066;&#x307F;&#x307E;&#x3057;&#x3087;&#x3046;&#x3002;</p><h3 id="webviewflutterandroid%E3%81%AE%E8%A3%8F%E5%81%B4">webview_flutter_android&#x306E;&#x88CF;&#x5074;</h3><p>webview_flutter&#x3068;Android&#x30CD;&#x30A4;&#x30C6;&#x30A3;&#x30D6;&#x306E;WebView&#x304C;&#x3069;&#x3046;&#x7E4B;&#x304C;&#x3063;&#x3066;&#x3044;&#x308B;&#x304B;&#x898B;&#x3066;&#x3044;&#x304D;&#x307E;&#x3059;&#x3002;<br>&#x2460;&#x30A2;&#x30F3;&#x30C9;&#x30ED;&#x30A4;&#x30C9;&#x7248;&#x306E;webview&#x3092;&#x53F8;&#x308B;&#x30D1;&#x30C3;&#x30B1;&#x30FC;&#x30B8;</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://pub.dev/packages/webview_flutter_android"><div class="kg-bookmark-content"><div class="kg-bookmark-title">webview_flutter_android | Flutter package</div><div class="kg-bookmark-description">A Flutter plugin that provides a WebView widget on Android.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://pub.dev/static/hash-ffjootqp/img/flutter-logo-32x32.png" alt="webview_flutter&#x306E;&#x52D5;&#x304D;&#x304C;OS&#x306B;&#x3088;&#x3063;&#x3066;&#x9055;&#x3046;&#xFF01;"><span class="kg-bookmark-author">Dart packages</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://pub.dev/static/hash-ffjootqp/img/pub-dev-icon-cover-image.png" alt="webview_flutter&#x306E;&#x52D5;&#x304D;&#x304C;OS&#x306B;&#x3088;&#x3063;&#x3066;&#x9055;&#x3046;&#xFF01;"></div></a></figure><p>&#x3053;&#x306E;&#x30D1;&#x30C3;&#x30B1;&#x30FC;&#x30B8;&#x304C;&#x3001;&#x2461;<a href="https://docs.flutter.dev/platform-integration/android/platform-views">PlatformView</a>&#x306E;TLHC&#x3068;&#x3044;&#x3046;&#x30E2;&#x30FC;&#x30C9;&#x3092;&#x4F7F;&#x3063;&#x3066;Android&#x30CD;&#x30A4;&#x30C6;&#x30A3;&#x30D6;UI&#x3092;&#x8868;&#x793A;&#x3057;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;</p><p>PlatformView&#x306B;&#x3064;&#x3044;&#x3066;&#x306F;&#x3053;&#x3061;&#x3089;&#x306E;&#x8A18;&#x4E8B;&#x304C;&#x5206;&#x304B;&#x308A;&#x3084;&#x3059;&#x304B;&#x3063;&#x305F;&#x3067;&#x3059;&#x3002;</p><p><br>&#x2462;Dart&#x5074;&#x306B;url&#x7B49;&#x306E;&#x60C5;&#x5831;&#x3092;&#x9001;&#x4FE1;: <a href="https://github.com/flutter/packages/blob/main/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/AndroidWebkitLibrary.g.kt">AndroidWebkitLibrary.g.kt</a></p><pre><code>fun onPageStarted(
      pigeon_instanceArg: android.webkit.WebViewClient,
      webViewArg: android.webkit.WebView,
      urlArg: String,
      callback: (Result&lt;Unit&gt;) -&gt; Unit
  ) {
    if (pigeonRegistrar.ignoreCallsToDart) {
      callback(
          Result.failure(
              AndroidWebKitError(&quot;ignore-calls-error&quot;, &quot;Calls to Dart are being ignored.&quot;, &quot;&quot;)))
      return
    }
    val binaryMessenger = pigeonRegistrar.binaryMessenger
    val codec = pigeonRegistrar.codec
    val channelName = &quot;dev.flutter.pigeon.webview_flutter_android.WebViewClient.onPageStarted&quot;
    val channel = BasicMessageChannel&lt;Any?&gt;(binaryMessenger, channelName, codec)
    channel.send(listOf(pigeon_instanceArg, webViewArg, urlArg)) {
      if (it is List&lt;*&gt;) {
        if (it.size &gt; 1) {
          callback(
              Result.failure(
                  AndroidWebKitError(it[0] as String, it[1] as String, it[2] as String?)))
        } else {
          callback(Result.success(Unit))
        }
      } else {
        callback(Result.failure(createConnectionError(channelName)))
      }
    }
  }
</code></pre><p></p><p>&#x2463;&#x547C;&#x3073;&#x51FA;&#x3057;&#x5143;: <a href="https://github.com/flutter/packages/blob/3515abab07d0bb2441277f43c2411c9b5e4ecf94/packages/webview_flutter/webview_flutter_android/android/src/main/java/io/flutter/plugins/webviewflutter/WebViewClientProxyApi.java#L44">WebViewClient</a></p><p>WebViewClient&#x30AF;&#x30E9;&#x30B9;&#x3092;&#x7D99;&#x627F;&#x3057;&#x305F;WebViewClientImpl&#x30AF;&#x30E9;&#x30B9;&#x304C;&#x30CD;&#x30A4;&#x30C6;&#x30A3;&#x30D6;&#x306E;WebView&#x304B;&#x3089;&#x72B6;&#x614B;&#x306E;&#x5909;&#x66F4;&#x3092;&#x53D7;&#x3051;&#x53D6;&#x3063;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;</p><p>WebViewClientImpl&#x30AF;&#x30E9;&#x30B9;&#x306E;onPageStarted&#x95A2;&#x6570;&#x3092;&#x30AA;&#x30FC;&#x30D0;&#x30FC;&#x30E9;&#x30A4;&#x30C9;&#x3057;&#x3001;dart&#x5074;&#x306B;&#x9001;&#x4FE1;&#x3059;&#x308B;&#x52D5;&#x304D;&#x306B;&#x66F8;&#x304D;&#x63DB;&#x3048;&#x3066;&#x3042;&#x308A;&#x307E;&#x3059;&#x3002;</p><pre><code class="language-java">public class WebViewClientProxyApi extends PigeonApiWebViewClient {
  /** Implementation of {@link WebViewClient} that passes arguments of callback methods to Dart. */
  @RequiresApi(Build.VERSION_CODES.N)
  public static class WebViewClientImpl extends WebViewClient {
    private final WebViewClientProxyApi api;
    private boolean returnValueForShouldOverrideUrlLoading = false;

    /**
     * Creates a {@link WebViewClient} that passes arguments of callbacks methods to Dart.
     *
     * @param api handles sending messages to Dart.
     */
    public WebViewClientImpl(@NonNull WebViewClientProxyApi api) {
      this.api = api;
    }

    @Override
    public void onPageStarted(@NonNull WebView view, @NonNull String url, @NonNull Bitmap favicon) {
      api.getPigeonRegistrar()
          .runOnMainThread(() -&gt; api.onPageStarted(this, view, url, reply -&gt; null));
    }

    @Override
    public void onPageFinished(@NonNull WebView view, @NonNull String url) {
      api.getPigeonRegistrar()
          .runOnMainThread(() -&gt; api.onPageFinished(this, view, url, reply -&gt; null));
    }

~~~
&#x4E2D;&#x7565;
~~~

  }
 }
</code></pre><p>&#x3053;&#x306E;&#x3088;&#x3046;&#x306B;Android&#x7248;&#x3067;onPageStarted,onPageFinished&#x304C;&#x547C;&#x3070;&#x308C;&#x308B;&#x30BF;&#x30A4;&#x30DF;&#x30F3;&#x30B0;&#x306F;&#x30CD;&#x30A4;&#x30C6;&#x30A3;&#x30D6;&#x306E;WebViewClient&#x30AF;&#x30E9;&#x30B9;&#x306B;&#x7531;&#x6765;&#x3059;&#x308B;&#x306E;&#x3067;&#x3001;&#x30BF;&#x30A4;&#x30DF;&#x30F3;&#x30B0;&#x3082;&#x30CD;&#x30A4;&#x30C6;&#x30A3;&#x30D6;&#x3068;&#x540C;&#x3058;&#x3060;&#x3068;&#x8003;&#x3048;&#x3089;&#x308C;&#x307E;&#x3059;&#x3002;</p><h3 id="ios%E7%89%88%E3%82%82%E5%B0%91%E3%81%97%E3%81%A0%E3%81%91">ios&#x7248;&#x3082;&#x5C11;&#x3057;&#x3060;&#x3051;</h3><p>&#x5148;&#x307B;&#x3069;&#x691C;&#x8A3C;&#x3057;&#x305F;Flutter&#x3067;&#x306E;&#x52D5;&#x304D;&#x3068;&#x540C;&#x3058;&#x3088;&#x3046;&#x306B;&#x3001;&#x30DA;&#x30FC;&#x30B8;&#x8AAD;&#x307F;&#x8FBC;&#x307F;&#x306B;&#x5931;&#x6557;&#x3057;&#x305F;&#x5834;&#x5408;&#x306F;&#x7D42;&#x4E86;&#x6271;&#x3044;&#x306B;&#x306A;&#x3089;&#x306A;&#x3044;&#x3088;&#x3046;&#x3067;&#x3059;&#x3002;&#xFF08;didFinish&#x304C;&#x547C;&#x3070;&#x308C;&#x306A;&#x3044;&#xFF09;<br><a href="https://stackoverflow.com/questions/71619574/wkwebview-does-not-call-didfinish-delegate-method">https://stackoverflow.com/questions/71619574/wkwebview-does-not-call-didfinish-delegate-method</a></p><p>ios&#x7248;&#x306E;&#x5185;&#x90E8;&#x5B9F;&#x88C5;&#x304C;&#x6C17;&#x306B;&#x306A;&#x308B;&#x65B9;&#x306F;&#x3001;&#x3053;&#x3061;&#x3089;&#x304B;&#x3089;&#x3054;&#x78BA;&#x8A8D;&#x304F;&#x3060;&#x3055;&#x3044;&#x3002;<br><a href="https://github.com/flutter/packages/tree/main/packages/webview_flutter/webview_flutter_wkwebview">https://github.com/flutter/packages/tree/main/packages/webview_flutter/webview_flutter_wkwebview</a></p><h1 id="%E7%B5%90%E8%AB%96">&#x7D50;&#x8AD6;</h1><p>&#x7C21;&#x5358;&#x306B;&#x307E;&#x3068;&#x3081;&#x308B;&#x3068;&#x3053;&#x3093;&#x306A;&#x611F;&#x3058;&#x3067;&#x3057;&#x3087;&#x3046;&#x304B;&#x3002;</p><!--kg-card-begin: html--><table>
<thead>
<tr>
<th></th>
<th>Android</th>
<th>ios</th>
</tr>
</thead>
<tbody>
<tr>
<td>onPageStarted</td>
<td>URL: &#x30EA;&#x30C0;&#x30A4;&#x30EC;&#x30AF;&#x30C8;&#x5F8C;</td>
<td>URL: &#x30EA;&#x30C0;&#x30A4;&#x30EC;&#x30AF;&#x30C8;&#x524D;</td>
</tr>
<tr>
<td>onPageFinished</td>
<td>&#x30A8;&#x30E9;&#x30FC;&#x767A;&#x751F;&#x6642;&#x3082;&#x5B9F;&#x884C;<br>URL: &#x30EA;&#x30C0;&#x30A4;&#x30EC;&#x30AF;&#x30C8;&#x5F8C;</td>
<td>&#x30A8;&#x30E9;&#x30FC;&#x767A;&#x751F;&#x6642;&#x306F;&#x5B9F;&#x884C;&#x3055;&#x308C;&#x306A;&#x3044;</td>
</tr>
<tr>
<td>onUrlChange</td>
<td>URL:&#x30EA;&#x30C0;&#x30A4;&#x30EC;&#x30AF;&#x30C8;&#x5F8C;&#x306E;&#x307F;</td>
<td>URL: &#x30EA;&#x30C0;&#x30A4;&#x30EC;&#x30AF;&#x30C8;&#x524D;&#x3001;&#x5F8C;&#x3001;&#x30A8;&#x30E9;&#x30FC;&#x6642;&#x306F;null&#x304C;&#x5165;&#x308B;</td>
</tr>
</tbody>
</table><!--kg-card-end: html--><h1 id="%E3%81%BE%E3%81%A8%E3%82%81">&#x307E;&#x3068;&#x3081;</h1><p>&#x300C;&#x30AF;&#x30ED;&#x30B9;&#x30D7;&#x30E9;&#x30C3;&#x30C8;&#x30D5;&#x30A9;&#x30FC;&#x30E0;&#x300D;&#x304C;&#x5F53;&#x305F;&#x308A;&#x524D;&#x3067;&#x306F;&#x306A;&#x3044;&#x3053;&#x3068;&#x3092;&#x5B9F;&#x611F;&#x3067;&#x304D;&#x305F;&#x826F;&#x3044;&#x6A5F;&#x4F1A;&#x3067;&#x3057;&#x305F;&#x3002;<br>&#x305F;&#x3060;&#x5272;&#x3068;&#x898B;&#x3064;&#x3051;&#x3084;&#x3059;&#x3044;&#x5DEE;&#x7570;&#x3060;&#x3063;&#x305F;&#x306E;&#x3067;&#x3001;&#x672A;&#x3060;&#x306B;&#x3053;&#x3061;&#x3089;&#x5074;&#x306E;&#x30DF;&#x30B9;&#x3092;&#x7591;&#x3063;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;<br>&#x4ED6;&#x306B;&#x3082;issue&#x3092;&#x7ACB;&#x3066;&#x3066;&#x3044;&#x305F;&#x4EBA;&#x304C;&#x3044;&#x305F;&#x306E;&#x3067;&#x9055;&#x3046;&#x3068;&#x4FE1;&#x3058;&#x305F;&#x3044;&#x3067;&#x3059;&#x304C;&#x3001;&#x3001;</p><p>3&#x5E74;&#x524D;&#x306E;issue&#x304C;&#x76F4;&#x3055;&#x308C;&#x3066;&#x3044;&#x306A;&#x3044;&#x3068;&#x3044;&#x3046;&#x3053;&#x3068;&#x306F;&#x3001;&#x3053;&#x3046;&#x3044;&#x3046;&#x4ED5;&#x69D8;&#x3067;&#x6C7A;&#x5B9A;&#x306A;&#x306E;&#x304B;&#x3082;...&#xFF1F;</p><p>&#x4F55;&#x306F;&#x3068;&#x3082;&#x3042;&#x308C;&#x30D1;&#x30C3;&#x30B1;&#x30FC;&#x30B8;&#x3092;&#x4F5C;&#x3063;&#x3066;&#x304F;&#x3060;&#x3055;&#x3063;&#x305F;&#x4F5C;&#x8005;&#x69D8;&#x306B;&#x611F;&#x8B1D;&#x3002;<br>&#x3044;&#x3064;&#x304B;OSS&#x306B;PR&#x3092;&#x51FA;&#x305B;&#x305F;&#x3089;&#x6700;&#x9AD8;&#x3067;&#x3059;&#x306D;&#x3002;</p><p>&#x660E;&#x65E5;&#x306F;&#x5F53;&#x56E3;&#x4F53;&#x306E;&#x5927;&#x30A8;&#x30FC;&#x30B9;@TAK848&#x3055;&#x3093;&#x3067;&#x3059;&#xFF01;</p><h1 id="%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89">&#x30B5;&#x30F3;&#x30D7;&#x30EB;&#x30B3;&#x30FC;&#x30C9;</h1><pre><code>import &apos;package:flutter/material.dart&apos;;
import &apos;package:webview_flutter/webview_flutter.dart&apos;;

const requestUrl = &apos;https://bit.ly/49Wjv5i&apos;;

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: &apos;Flutter Demo&apos;,
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const WebViewExample(),
    );
  }
}

class WebViewExample extends StatefulWidget {
  const WebViewExample({super.key});

  @override
  State&lt;WebViewExample&gt; createState() =&gt; _WebViewExampleState();
}

class _WebViewExampleState extends State&lt;WebViewExample&gt; {
  late final WebViewController controller;

  @override
  void initState() {
    controller =
        WebViewController()
          ..setNavigationDelegate(
            NavigationDelegate(
              onPageStarted: (String url) {
                print(&apos;Page started loading: $url&apos;);
              },
              onPageFinished: (String url) {
                print(&apos;Page finished loading: $url&apos;);
              },
              onUrlChange: (UrlChange change) {
                debugPrint(&apos;url change to ${change.url}&apos;);
              },
              onWebResourceError: (WebResourceError error) {
                debugPrint(&apos;Page resource error: ${error.url}&apos;);
              },
            ),
          )
          ..loadRequest(Uri.parse(requestUrl));
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(body: WebViewWidget(controller: controller));
  }
}
</code></pre><h1 id="%E5%8B%95%E4%BD%9C%E7%92%B0%E5%A2%83">&#x52D5;&#x4F5C;&#x74B0;&#x5883;</h1><p>webview_flutter: ^4.8.0<br>flutter&#x30D0;&#x30FC;&#x30B8;&#x30E7;&#x30F3;</p><pre><code>$ flutter --version
Flutter 3.28.0-0.1.pre &#x2022; channel beta &#x2022; https://github.com/flutter/flutter.git
Framework &#x2022; revision 3e493a3e4d (9 days ago) &#x2022; 2024-12-12 05:59:24 +0900
Engine &#x2022; revision 2ba456fd7f
Tools &#x2022; Dart 3.7.0 (build 3.7.0-209.1.beta) &#x2022; DevTools 2.41.0
</code></pre>]]></content:encoded></item><item><title><![CDATA[バックエンド開発未経験者がGo言語で開発をした件について]]></title><description><![CDATA[Pythonを使ってデータ分析を行ってきた学生がバックエンド開発をしてみました。]]></description><link>http://blog.shinonome.io/goyan-yu-wo/</link><guid isPermaLink="false">67662bce84f04652f6204594</guid><category><![CDATA[バックエンド]]></category><dc:creator><![CDATA[PlayGround]]></dc:creator><pubDate>Sat, 21 Dec 2024 05:46:50 GMT</pubDate><media:content url="http://blog.shinonome.io/content/images/2024/12/image-5.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h1 id="%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">&#x306F;&#x3058;&#x3081;&#x306B;</h1>
<!--kg-card-end: markdown--><img src="http://blog.shinonome.io/content/images/2024/12/image-5.png" alt="&#x30D0;&#x30C3;&#x30AF;&#x30A8;&#x30F3;&#x30C9;&#x958B;&#x767A;&#x672A;&#x7D4C;&#x9A13;&#x8005;&#x304C;Go&#x8A00;&#x8A9E;&#x3067;&#x958B;&#x767A;&#x3092;&#x3057;&#x305F;&#x4EF6;&#x306B;&#x3064;&#x3044;&#x3066;"><p>&#x306F;&#x3058;&#x3081;&#x307E;&#x3057;&#x3066;&#xFF01;&#x300C;PlayGround Advent Calender 2024&#x300D;21&#x65E5;&#x62C5;&#x5F53;&#x306E;Hiro&#x3067;&#x3059;&#x3002;</p><p>Playground&#x3067;&#x306F;&#x30C7;&#x30FC;&#x30BF;&#x30B5;&#x30A4;&#x30A8;&#x30F3;&#x30B9;&#x30B3;&#x30FC;&#x30B9;&#x3092;&#x4FEE;&#x4E86;&#x3057;&#x3001;&#x73FE;&#x5728;&#x306F;&#x6848;&#x4EF6;&#x306B;&#x53C2;&#x52A0;&#x3057;&#x305F;&#x308A;&#x30EC;&#x30D3;&#x30E5;&#x30FC;&#x3092;&#x62C5;&#x5F53;&#x3057;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;</p><p>&#x305F;&#x307E;&#x305F;&#x307E;&#x30A4;&#x30F3;&#x30BF;&#x30FC;&#x30F3;&#x5148;&#x3067;web&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x3092;&#x4F5C;&#x308B;&#x3053;&#x3068;&#x306B;&#x306A;&#x308A;&#x3001;Go&#x8A00;&#x8A9E;&#x3092;&#x9078;&#x629E;&#x3057;&#x3066;&#x30D0;&#x30C3;&#x30AF;&#x30A8;&#x30F3;&#x30C9;&#x958B;&#x767A;&#x3078;&#x6311;&#x307F;&#x307E;&#x3057;&#x305F;&#x1F525;</p><p></p><!--kg-card-begin: markdown--><h1 id="%E3%81%AA%E3%81%9Cgo%E8%A8%80%E8%AA%9E%E3%82%92%E9%81%B8%E6%8A%9E%E3%81%97%E3%81%9F%E3%81%AE%E3%81%8B%EF%BC%9F">&#x306A;&#x305C;Go&#x8A00;&#x8A9E;&#x3092;&#x9078;&#x629E;&#x3057;&#x305F;&#x306E;&#x304B;&#xFF1F;</h1>
<!--kg-card-end: markdown--><ul><li>&#x30B7;&#x30F3;&#x30D7;&#x30EB;&#x306A;&#x8A18;&#x6CD5;&#x3067;&#x53EF;&#x8AAD;&#x6027;&#x304C;&#x9AD8;&#x3044;</li><li>&#x30B3;&#x30F3;&#x30D1;&#x30A4;&#x30E9;&#x8A00;&#x8A9E;&#x3067;&#x3042;&#x308B;&#x305F;&#x3081;&#x51E6;&#x7406;&#x901F;&#x5EA6;&#x304C;&#x901F;&#x3044;</li><li>Gopher&#x304F;&#x3093;&#x304C;&#x304B;&#x308F;&#x3044;&#x3044;</li></ul><p>&#x306A;&#x3069;&#x306E;&#x7406;&#x7531;&#x304C;&#x3042;&#x308A;&#x307E;&#x3059;&#x304C;&#x3001;&#x4E00;&#x756A;&#x306F;&#x81EA;&#x5206;&#x3068;&#x958B;&#x767A;&#x30E1;&#x30F3;&#x30D0;&#x30FC;&#x304C;&#x89E6;&#x308C;&#x3066;&#x307F;&#x305F;&#x304B;&#x3063;&#x305F;&#x3068;&#x3044;&#x3046;&#x601D;&#x3044;&#x304C;&#x7406;&#x7531;&#x3067;&#x3059;&#x3002;</p><!--kg-card-begin: markdown--><h1 id="go%E8%A8%80%E8%AA%9E%E3%81%AE%E3%81%8A%E4%BD%9C%E6%B3%95">Go&#x8A00;&#x8A9E;&#x306E;&#x304A;&#x4F5C;&#x6CD5;</h1>
<!--kg-card-end: markdown--><p>&#x4ECA;&#x307E;&#x3067;&#x30C7;&#x30FC;&#x30BF;&#x30B3;&#x30FC;&#x30B9;&#x3067;&#x306F;Python&#x3057;&#x304B;&#x89E6;&#x308C;&#x305F;&#x3053;&#x3068;&#x306E;&#x306A;&#x304B;&#x3063;&#x305F;&#x79C1;&#x306B;&#x3068;&#x3063;&#x3066;&#x521D;&#x3081;&#x3066;&#x306E;&#x7D4C;&#x9A13;&#x304C;&#x3044;&#x304F;&#x3064;&#x304B;&#x3042;&#x308A;&#x307E;&#x3057;&#x305F;&#x306E;&#x3067;&#x5171;&#x6709;&#x3057;&#x307E;&#x3059;&#x3002;</p><!--kg-card-begin: markdown--><h2 id="%E5%9E%8B%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6">&#x578B;&#x306B;&#x3064;&#x3044;&#x3066;</h2>
<!--kg-card-end: markdown--><p>Go&#x8A00;&#x8A9E;&#x306F;Python&#x3068;&#x9055;&#x3063;&#x3066;&#x660E;&#x78BA;&#x306A;&#x578B;&#x4ED8;&#x3051;&#x304C;&#x5FC5;&#x9808;&#x3067;&#x3059;&#x3002;</p><p>Python&#x3060;&#x3068;&#x4EE5;&#x4E0B;&#x306E;&#x3088;&#x3046;&#x306B;&#x66F8;&#x3051;&#x307E;&#x3059;&#x304C;</p><!--kg-card-begin: markdown--><p><code>age = 21</code></p>
<!--kg-card-end: markdown--><p>Go&#x3060;&#x3068;&#x578B;&#x3092;&#x5B9A;&#x7FA9;&#x3059;&#x308B;&#x5FC5;&#x8981;&#x304C;&#x3042;&#x3063;&#x305F;&#x308A;&#x3057;&#x307E;&#x3059;&#x3002;</p><!--kg-card-begin: markdown--><p><code>var age int = 21</code></p>
<!--kg-card-end: markdown--><p>&#x3064;&#x307E;&#x308A;&#x30B3;&#x30FC;&#x30C9;&#x5185;&#x3067;&#x5909;&#x6570;&#x3092;&#x4F7F;&#x3046;&#x524D;&#x306B;&#x4E8B;&#x524D;&#x306B;&#x5BA3;&#x8A00;&#x3092;&#x3057;&#x306A;&#x3051;&#x308C;&#x3070;&#x306A;&#x3089;&#x306A;&#x3044;&#x3068;&#x3044;&#x3046;&#x3053;&#x3068;&#x3067;&#x3059;&#x3002;</p><!--kg-card-begin: markdown--><h2 id="%E9%96%A2%E6%95%B0%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6">&#x95A2;&#x6570;&#x306B;&#x3064;&#x3044;&#x3066;</h2>
<!--kg-card-end: markdown--><p>&#x3053;&#x308C;&#x304C;1&#x756A;&#x306E;&#x9055;&#x3044;&#x304B;&#x3082;&#x3057;&#x308C;&#x307E;&#x305B;&#x3093;&#x3002;</p><p>Python&#x306E;&#x5834;&#x5408;</p><!--kg-card-begin: markdown--><pre><code class="language-Python">def num(a, b): #&#x95A2;&#x6570;&#x540D;(&#x5F15;&#x6570;, &#x5F15;&#x6570;)
    return a + b
    
result = num(3, 4)
print(result) #7
</code></pre>
<!--kg-card-end: markdown--><p>Go&#x306E;&#x5834;&#x5408;</p><!--kg-card-begin: markdown--><pre><code class="language-Go">func num(a, b int) int { //func &#x95A2;&#x6570;(&#x5F15;&#x6570;&#x306E;&#x540D;&#x79F0; &#x578B;) &#x623B;&#x308A;&#x5024;&#x306E;&#x578B;
    return a + b
}
func main(){
    result := num()
    fmt.Println(result) //7
}
</code></pre>
<!--kg-card-end: markdown--><p>&#x3053;&#x306E;&#x3088;&#x3046;&#x306B;&#x95A2;&#x6570;&#x3060;&#x3051;&#x3067;&#x3082;&#x304B;&#x306A;&#x308A;&#x9055;&#x3044;&#x304C;&#x3042;&#x308A;&#x307E;&#x3059;&#x3002;</p><!--kg-card-begin: markdown--><h2 id="%E3%82%A8%E3%83%A9%E3%83%BC%E5%87%A6%E7%90%86%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6">&#x30A8;&#x30E9;&#x30FC;&#x51E6;&#x7406;&#x306B;&#x3064;&#x3044;&#x3066;</h2>
<!--kg-card-end: markdown--><p>Go&#x8A00;&#x8A9E;&#x306B;&#x306F;&#x4F8B;&#x5916;&#x51E6;&#x7406;&#x304C;&#x3042;&#x308A;&#x307E;&#x305B;&#x3093;&#x3002;</p><p>&#x3053;&#x308C;&#x306F;Go&#x8A00;&#x8A9E;&#x306E;&#x601D;&#x60F3;&#x7684;&#x306B;&#x300C;&#x610F;&#x56F3;&#x3057;&#x306A;&#x3044;&#x30A8;&#x30E9;&#x30FC;&#x306F;&#x5C11;&#x306A;&#x3044;&#x65B9;&#x304C;&#x826F;&#x3044;&#x300D;&#x3068;&#x3044;&#x3046;&#x601D;&#x60F3;&#x304C;&#x3042;&#x308B;&#x305F;&#x3081;&#x3067;&#x3042;&#x308A;&#x3001;&#x4EBA;&#x306B;&#x3088;&#x3063;&#x3066;&#x306F;Go&#x3092;&#x5ACC;&#x3046;&#x7406;&#x7531;&#x306B;&#x306A;&#x308B;&#x7B87;&#x6240;&#x3067;&#x3082;&#x3042;&#x308A;&#x307E;&#x3059;&#x3002;</p><p>&#x3064;&#x307E;&#x308A;Go&#x8A00;&#x8A9E;&#x306B;&#x306F;try-except&#x69CB;&#x6587;&#x304C;&#x5B58;&#x5728;&#x3057;&#x306A;&#x3044;&#x3068;&#x3044;&#x3046;&#x3053;&#x3068;&#x3002;</p><p>Python&#x306E;&#x5834;&#x5408;</p><!--kg-card-begin: markdown--><pre><code class="language-Python">def divide(a, b):
    return a / b  # b &#x304C; 0 &#x306E;&#x5834;&#x5408; ZeroDivisionError

try:
    result = divide(10, 0)
except ZeroDivisionError as e:
    print(&quot;Error occurred:&quot;, e)
</code></pre>
<!--kg-card-end: markdown--><p>Go&#x306E;&#x5834;&#x5408;</p><!--kg-card-begin: markdown--><pre><code class="language-Go">func divide(a, b float64) (float64, error) {
    if b == 0 {
        return 0, fmt.Errorf(&quot;division by zero&quot;)
    }
    return a / b, nil
}

func main() {
    result, err := divide(10, 0)
    if err != nil {
        fmt.Println(&quot;Error:&quot;, err)
        return
    }
    fmt.Println(&quot;Result:&quot;, result)
}
</code></pre>
<!--kg-card-end: markdown--><p>Go&#x3067;&#x306F;&#x6210;&#x529F;&#x306E;&#x5834;&#x5408;nil&#x3092;&#x3001;&#x30A8;&#x30E9;&#x30FC;&#x306E;&#x5834;&#x5408;error&#x3092;&#x8FD4;&#x3059;&#x6163;&#x7FD2;&#x304C;&#x3042;&#x308A;&#x307E;&#x3059;&#x3002;</p><p>&#x3057;&#x304B;&#x3057;&#x4F8B;&#x5916;&#x7684;&#x306B;panic&#x3068;recover&#x304C;&#x5B58;&#x5728;&#x3057;&#x307E;&#x3059;&#x3002;&#x901A;&#x5E38;&#x306E;&#x30D5;&#x30ED;&#x30FC;&#x3067;&#x306F;&#x5BFE;&#x51E6;&#x3057;&#x304D;&#x308C;&#x306A;&#x3044;&#x5834;&#x5408;&#x306B;panic&#x3067;&#x51E6;&#x7406;&#x3059;&#x308B;&#x5834;&#x5408;&#x3082;&#x3042;&#x308A;&#x307E;&#x3059;&#x3002;</p><!--kg-card-begin: markdown--><h1 id="%E5%88%9D%E3%82%81%E3%81%A6python%E4%BB%A5%E5%A4%96%E3%81%AE%E8%A8%80%E8%AA%9E%E3%82%92%E9%81%B8%E6%8A%9E%E3%81%99%E3%82%8B%E4%BA%BA%E3%81%AB%E5%90%91%E3%81%91%E3%81%A6">&#x521D;&#x3081;&#x3066;Python&#x4EE5;&#x5916;&#x306E;&#x8A00;&#x8A9E;&#x3092;&#x9078;&#x629E;&#x3059;&#x308B;&#x4EBA;&#x306B;&#x5411;&#x3051;&#x3066;</h1>
<!--kg-card-end: markdown--><ul><li>Python&#x3057;&#x304B;&#x4F7F;&#x3063;&#x305F;&#x3053;&#x3068;&#x306A;&#x3044;&#x3057;&#x3001;&#x4ED6;&#x306E;&#x8A00;&#x8A9E;&#x3092;&#x52C9;&#x5F37;&#x3057;&#x3066;&#x307F;&#x305F;&#x3044;&#x306A;&#x3042;</li><li>&#x30D0;&#x30C3;&#x30AF;&#x30A8;&#x30F3;&#x30C9;&#x3092;&#x4F5C;&#x3063;&#x3066;&#x307F;&#x305F;&#x3044;&#xFF01;</li></ul><p>&#x3053;&#x306E;&#x3088;&#x3046;&#x306A;&#x7406;&#x7531;&#x3092;&#x304A;&#x6301;&#x3061;&#x306E;&#x65B9;&#x306F;&#x601D;&#x3044;&#x5207;&#x3063;&#x3066;Go&#x8A00;&#x8A9E;&#x3092;&#x4F7F;&#x3063;&#x3066;&#x307F;&#x3066;&#x6B32;&#x3057;&#x3044;&#x3067;&#x3059;&#x3002;Go&#x8A00;&#x8A9E;&#x3058;&#x3083;&#x306A;&#x304B;&#x3063;&#x305F;&#x3068;&#x3057;&#x3066;&#x3082;&#x610F;&#x5916;&#x3068;&#x8AAD;&#x3081;&#x307E;&#x3059;&#x3057;&#x3001;&#x9811;&#x5F35;&#x308C;&#x3070;&#x66F8;&#x3051;&#x307E;&#x3059;&#x1F44D;</p><p></p><p>&#x672C;&#x5F53;&#x306F;&#x958B;&#x767A;&#x3092;12&#x6708;&#x672B;&#x3067;&#x7D42;&#x308F;&#x308B;&#x4E88;&#x5B9A;&#x3060;&#x3063;&#x305F;&#x306E;&#x3067;&#x3059;&#x304C;&#x8AF8;&#x4E8B;&#x60C5;&#x3082;&#x3042;&#x308A;&#x3001;&#x73FE;&#x5728;&#x3082;&#x958B;&#x767A;&#x4E2D;&#x3067;&#x3059;&#x3002;&#x305D;&#x306E;&#x8A71;&#x3082;&#x5225;&#x306E;&#x8A18;&#x4E8B;&#x3067;&#x66F8;&#x304D;&#x305F;&#x3044;&#x3068;&#x8003;&#x3048;&#x3066;&#x3044;&#x307E;&#x3059;&#x1F525;</p><p></p><p>&#x3053;&#x306E;&#x8A18;&#x4E8B;&#x3067;&#x306F;&#x307B;&#x3093;&#x306E;&#x4E00;&#x90E8;&#x3057;&#x304B;&#x7D39;&#x4ECB;&#x3067;&#x304D;&#x307E;&#x305B;&#x3093;&#x3067;&#x3057;&#x305F;&#x304C;&#x3001;Go&#x8A00;&#x8A9E;&#x306F;&#x73FE;&#x5728;&#x3082;&#x30A2;&#x30C3;&#x30D7;&#x30C7;&#x30FC;&#x30C8;&#x3055;&#x308C;&#x7D9A;&#x3051;&#x3066;&#x3044;&#x307E;&#x3059;&#xFF01;</p><!--kg-card-begin: markdown--><h2 id="%E3%81%8A%E3%81%BE%E3%81%91-gopher%E3%81%8F%E3%82%93%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6">&#x304A;&#x307E;&#x3051; Gopher&#x304F;&#x3093;&#x306B;&#x3064;&#x3044;&#x3066;</h2>
<!--kg-card-end: markdown--><p>Go&#x8A00;&#x8A9E;&#x306B;&#x306F;Gopher&#x304F;&#x3093;&#x3068;&#x3044;&#x3046;&#x30DE;&#x30B9;&#x30B3;&#x30C3;&#x30C8;&#x30AD;&#x30E3;&#x30E9;&#x30AF;&#x30BF;&#x30FC;&#x304C;&#x3044;&#x307E;&#x3059;&#x3001;&#x3053;&#x308C;&#x304C;&#x3081;&#x3063;&#x3061;&#x3083;&#x304B;&#x308F;&#x3044;&#x3044;&#x3002;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.shinonome.io/content/images/2024/12/Screenshot-2024-12-21-at-13.47.16.png" class="kg-image" alt="&#x30D0;&#x30C3;&#x30AF;&#x30A8;&#x30F3;&#x30C9;&#x958B;&#x767A;&#x672A;&#x7D4C;&#x9A13;&#x8005;&#x304C;Go&#x8A00;&#x8A9E;&#x3067;&#x958B;&#x767A;&#x3092;&#x3057;&#x305F;&#x4EF6;&#x306B;&#x3064;&#x3044;&#x3066;" loading="lazy" width="548" height="576"><figcaption>Gopher&#x304F;&#x3093;by <a href="https://go.dev/blog/gopher" rel="noopener noreferrer nofollow">Ren&#xE9;e French</a> CC BY 3.0</figcaption></figure><p>&#x304A;&#x6C17;&#x306B;&#x5165;&#x308A;&#x306F;&#x306A;&#x305C;&#x304B;&#x711A;&#x66F8;&#x3092;&#x3057;&#x3088;&#x3046;&#x3068;&#x3059;&#x308B;Gopher&#x304F;&#x3093;&#x3067;&#x3059;&#x3002;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.shinonome.io/content/images/2024/12/1675411656863-LJEWMCnhVM.webp" class="kg-image" alt="&#x30D0;&#x30C3;&#x30AF;&#x30A8;&#x30F3;&#x30C9;&#x958B;&#x767A;&#x672A;&#x7D4C;&#x9A13;&#x8005;&#x304C;Go&#x8A00;&#x8A9E;&#x3067;&#x958B;&#x767A;&#x3092;&#x3057;&#x305F;&#x4EF6;&#x306B;&#x3064;&#x3044;&#x3066;" loading="lazy" width="800" height="267" srcset="http://blog.shinonome.io/content/images/size/w600/2024/12/1675411656863-LJEWMCnhVM.webp 600w, http://blog.shinonome.io/content/images/2024/12/1675411656863-LJEWMCnhVM.webp 800w" sizes="(min-width: 720px) 720px"><figcaption>Gopher&#x304F;&#x3093;by <a href="https://go.dev/blog/gopher" rel="noopener noreferrer nofollow">Ren&#xE9;e French</a> CC BY 3.0</figcaption></figure><p></p><p>&#x4ECA;&#x56DE;&#x306F;&#x521D;&#x5FC3;&#x8005;&#x306A;&#x304C;&#x3089;Go&#x8A00;&#x8A9E;&#x306E;&#x7279;&#x5FB4;&#x306B;&#x3064;&#x3044;&#x3066;&#x7D39;&#x4ECB;&#x3057;&#x3066;&#x307F;&#x307E;&#x3057;&#x305F;&#x3002;</p><p>Go&#x8A00;&#x8A9E;&#x306B;&#x9650;&#x3089;&#x305A;&#x3001;&#x65B0;&#x3057;&#x3044;&#x8A00;&#x8A9E;&#x3078;&#x98DB;&#x3073;&#x8FBC;&#x3080;&#x304D;&#x3063;&#x304B;&#x3051;&#x3068;&#x306A;&#x308C;&#x3070;&#x5E78;&#x3044;&#x3067;&#x3059;&#x1F64C;</p><p>&#x6700;&#x5F8C;&#x307E;&#x3067;&#x8AAD;&#x3093;&#x3067;&#x3044;&#x305F;&#x3060;&#x304D;&#x3042;&#x308A;&#x304C;&#x3068;&#x3046;&#x3054;&#x3056;&#x3044;&#x307E;&#x3057;&#x305F;&#xFF01;</p><p>&#x660E;&#x65E5;&#x306F;kocha&#x3055;&#x3093;&#x306E;&#x8A18;&#x4E8B;&#x3067;&#x3059;&#xFF01;&#x304A;&#x697D;&#x3057;&#x307F;&#x306B;&#x1F440;</p>]]></content:encoded></item><item><title><![CDATA[CTF初心者によるCTFの紹介]]></title><description><![CDATA[CTF初心者がCTFの楽しいところを紹介します！]]></description><link>http://blog.shinonome.io/ctfchu-xin-zhe/</link><guid isPermaLink="false">6760366284f04652f620412f</guid><dc:creator><![CDATA[PlayGround]]></dc:creator><pubDate>Thu, 19 Dec 2024 15:50:00 GMT</pubDate><media:content url="http://blog.shinonome.io/content/images/2024/12/CTF_--.jpg" medium="image"/><content:encoded><![CDATA[<img src="http://blog.shinonome.io/content/images/2024/12/CTF_--.jpg" alt="CTF&#x521D;&#x5FC3;&#x8005;&#x306B;&#x3088;&#x308B;CTF&#x306E;&#x7D39;&#x4ECB;"><p>&#x3053;&#x3093;&#x306B;&#x3061;&#x306F;&#xFF01;&#x300C;PlayGround Advent Calender 2024&#x300D;20&#x65E5;&#x62C5;&#x5F53;&#x306E;miyu&#x3067;&#x3059;&#x3002;</p><p>PlayGround&#x3067;&#x306F;&#x30E2;&#x30D0;&#x30A4;&#x30EB;&#x30B3;&#x30FC;&#x30B9;&#x306B;&#x6240;&#x5C5E;&#x3057;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;</p><p>&#x4ECA;&#x5E74;&#x306F;&#x5927;&#x5B66;&#x3067;&#x30BB;&#x30AD;&#x30E5;&#x30EA;&#x30C6;&#x30A3;&#x7CFB;&#x306E;&#x7814;&#x7A76;&#x5BA4;&#x306B;&#x914D;&#x5C5E;&#x3055;&#x308C;&#x3066;&#x304B;&#x3089;&#x3068;&#x3044;&#x3046;&#x3082;&#x306E;&#x3001;CTF&#x306B;&#x53C2;&#x52A0;&#x3059;&#x308B;&#x6A5F;&#x4F1A;&#x304C;&#x591A;&#x304B;&#x3063;&#x305F;&#x5E74;&#x3067;&#x3057;&#x305F;&#x3002;CTF&#x3082;&#x30BB;&#x30AD;&#x30E5;&#x30EA;&#x30C6;&#x30A3;&#x3082;&#x307B;&#x3068;&#x3093;&#x3069;&#x5B66;&#x3093;&#x3060;&#x3053;&#x3068;&#x304C;&#x306A;&#x3044;&#x521D;&#x5FC3;&#x8005;&#x3067;&#x3057;&#x305F;&#x304C;&#x3001;&#x8B0E;&#x89E3;&#x304D;&#x304C;&#x597D;&#x304D;&#x306A;&#x3053;&#x3068;&#x3082;&#x3042;&#x308A;&#x3001;&#x5F90;&#x3005;&#x306B;CTF&#x306B;&#x306F;&#x307E;&#x308A;&#x3064;&#x3064;&#x3042;&#x308A;&#x307E;&#x3059;&#x3002;</p><p>&#x305D;&#x308C;&#x306A;&#x306E;&#x3067;&#x3053;&#x306E;&#x8A18;&#x4E8B;&#x3067;&#x306F;&#x3001;CTF&#x521D;&#x5FC3;&#x8005;&#x306B;&#x3088;&#x308B;CTF&#x306E;&#x697D;&#x3057;&#x3044;&#x3068;&#x3053;&#x308D;&#x3092;&#x7D39;&#x4ECB;&#x3057;&#x305F;&#x3044;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x3002;&#x300C;CTF&#x3063;&#x3066;&#x3069;&#x3046;&#x3044;&#x3046;&#x3044;&#x3046;&#x3082;&#x306E;&#x306A;&#x306E;&#xFF1F;&#x300D;&#x3068;&#x3044;&#x3046;&#x65B9;&#x306B;&#x305C;&#x3072;&#x8AAD;&#x3093;&#x3067;&#x3044;&#x305F;&#x3060;&#x304D;&#x305F;&#x3044;&#x3067;&#x3059;&#x3002;&#x8AAC;&#x660E;&#x304C;&#x62D9;&#x3044;&#x7B87;&#x6240;&#x3082;&#x591A;&#x3005;&#x3042;&#x308B;&#x304B;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x304C;&#x3001;&#x3054;&#x4E86;&#x627F;&#x304F;&#x3060;&#x3055;&#x3044;&#x3002;CTF&#x3092;&#x59CB;&#x3081;&#x3066;&#x307F;&#x3088;&#x3046;&#x3068;&#x3044;&#x3046;&#x304D;&#x3063;&#x304B;&#x3051;&#x306B;&#x306A;&#x3063;&#x3066;&#x3082;&#x3089;&#x3048;&#x305F;&#x3089;&#x5B09;&#x3057;&#x3044;&#x3067;&#x3059;&#x3002;</p><p>&#x6700;&#x5F8C;&#x306B;&#x4F5C;&#x6210;&#x3057;&#x305F;&#x304A;&#x8A66;&#x3057;&#x554F;&#x984C;&#x304C;&#x3042;&#x308B;&#x306E;&#x3067;&#x3088;&#x304B;&#x3063;&#x305F;&#x3089;&#x89E3;&#x3044;&#x3066;&#x307F;&#x3066;&#x304F;&#x3060;&#x3055;&#x3044;&#x3002;</p><h2 id="ctf%E3%81%A8%E3%81%AF">CTF&#x3068;&#x306F;</h2><hr><p>CTF&#xFF08;Capture The Flag&#xFF09;&#x3068;&#x306F;&#x3001;&#x60C5;&#x5831;&#x30BB;&#x30AD;&#x30E5;&#x30EA;&#x30C6;&#x30A3;&#x306B;&#x95A2;&#x3059;&#x308B;&#x554F;&#x984C;&#x3092;&#x89E3;&#x304D;&#x3001;flag&#x3068;&#x547C;&#x3070;&#x308C;&#x308B;&#x9375;&#x3092;&#x63A2;&#x3057;&#x51FA;&#x3059;&#x30B2;&#x30FC;&#x30E0;&#x3067;&#x3059;&#x3002;&#x60C5;&#x5831;&#x30BB;&#x30AD;&#x30E5;&#x30EA;&#x30C6;&#x30A3;&#x306E;&#x77E5;&#x8B58;&#x3092;&#x30B2;&#x30FC;&#x30E0;&#x3092;&#x697D;&#x3057;&#x307F;&#x306A;&#x304C;&#x3089;&#x5B66;&#x3079;&#x308B;&#x7AF6;&#x6280;&#x3068;&#x3057;&#x3066;&#x4EBA;&#x6C17;&#x304C;&#x9AD8;&#x3044;&#x3067;&#x3059;&#x3002;</p><h2 id="ctf%E3%81%AE%E5%95%8F%E9%A1%8C%E5%88%86%E9%87%8E">CTF&#x306E;&#x554F;&#x984C;&#x5206;&#x91CE;</h2><hr><p>CTF&#x306E;&#x554F;&#x984C;&#x306E;&#x5206;&#x91CE;&#x3092;&#x3044;&#x304F;&#x3064;&#x304B;&#x7D39;&#x4ECB;&#x3057;&#x307E;&#x3059;&#x3002;&#x5927;&#x4F1A;&#x306A;&#x3069;&#x306B;&#x3088;&#x3063;&#x3066;&#x30B8;&#x30E3;&#x30F3;&#x30EB;&#x306E;&#x5206;&#x3051;&#x65B9;&#x304C;&#x5C11;&#x3057;&#x7570;&#x306A;&#x3063;&#x3066;&#x3044;&#x305F;&#x308A;&#x3059;&#x308B;&#x306E;&#x3067;&#x3001;&#x3053;&#x3053;&#x3067;&#x7D39;&#x4ECB;&#x3059;&#x308B;&#x5206;&#x91CE;&#x304C;&#x5168;&#x3066;&#x3067;&#x306F;&#x3042;&#x308A;&#x307E;&#x305B;&#x3093;&#x3002;</p><!--kg-card-begin: markdown--><ul>
<li>Crypto
<ul>
<li>&#x6697;&#x53F7;&#x3092;&#x89E3;&#x8AAD;&#x3059;&#x308B;&#x554F;&#x984C;</li>
</ul>
</li>
<li>Reversing
<ul>
<li>&#x30D0;&#x30A4;&#x30CA;&#x30EA;&#x89E3;&#x6790;&#x306E;&#x554F;&#x984C;</li>
</ul>
</li>
<li>Web
<ul>
<li>Web&#x30A2;&#x30D7;&#x30EA;&#x30B1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x306E;&#x8106;&#x5F31;&#x6027;&#x3092;&#x5229;&#x7528;&#x3057;&#x305F;&#x554F;&#x984C;</li>
</ul>
</li>
<li>Steganography
<ul>
<li>&#x753B;&#x50CF;&#x3084;&#x97F3;&#x58F0;&#x3092;&#x542B;&#x3081;&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x304B;&#x3089;&#x30C7;&#x30FC;&#x30BF;&#x3092;&#x629C;&#x304D;&#x51FA;&#x3059;&#x3088;&#x3046;&#x306A;&#x554F;&#x984C;</li>
</ul>
</li>
<li>Osint
<ul>
<li>&#x4E00;&#x822C;&#x306B;&#x516C;&#x958B;&#x3055;&#x308C;&#x3066;&#x3044;&#x308B;&#x60C5;&#x5831;&#x304B;&#x3089;&#x5206;&#x6790;&#x3059;&#x308B;&#x554F;&#x984C;</li>
</ul>
</li>
<li>Pwn
<ul>
<li>&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30E0;&#x306E;&#x8106;&#x5F31;&#x6027;&#x3092;&#x5229;&#x7528;&#x3057;&#x3066;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x306B;&#x4FB5;&#x5165;&#x3059;&#x308B;&#x3088;&#x3046;&#x306A;&#x554F;&#x984C;</li>
</ul>
</li>
<li>Misc
<ul>
<li>&#x305D;&#x306E;&#x4ED6;&#x306E;&#x554F;&#x984C;</li>
</ul>
</li>
</ul>
<!--kg-card-end: markdown--><p>&#x3053;&#x306E;&#x3088;&#x3046;&#x306B;CTF&#x3067;&#x306F;&#x3068;&#x3066;&#x3082;&#x5E45;&#x5E83;&#x3044;&#x5206;&#x91CE;&#x306E;&#x554F;&#x984C;&#x304C;&#x51FA;&#x984C;&#x3055;&#x308C;&#x307E;&#x3059;&#x3002;&#x300C;&#x3053;&#x308C;&#x3089;&#x5168;&#x3066;&#x306E;&#x77E5;&#x8B58;&#x304C;&#x5FC5;&#x8981;&#x306A;&#x306E;&#xFF1F;&#x300D;&#x3068;&#x601D;&#x3046;&#x3068;&#x3001;CTF&#x3092;&#x59CB;&#x3081;&#x308B;&#x30CF;&#x30FC;&#x30C9;&#x30EB;&#x304C;&#x9AD8;&#x3044;&#x3088;&#x3046;&#x306B;&#x611F;&#x3058;&#x308B;&#x304B;&#x3082;&#x3057;&#x308C;&#x307E;&#x305B;&#x3093;&#x3002;&#x3067;&#x3059;&#x304C;&#x3001;&#x81EA;&#x5206;&#x306E;&#x5F97;&#x610F;&#x30B8;&#x30E3;&#x30F3;&#x30EB;&#x306B;&#x5408;&#x308F;&#x305B;&#x3066;&#x7279;&#x5B9A;&#x306E;&#x5206;&#x91CE;&#x306E;&#x554F;&#x984C;&#x3060;&#x3051;&#x3067;&#x3082;CTF&#x306F;&#x5341;&#x5206;&#x697D;&#x3057;&#x3080;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x307E;&#x3059;&#x3002;</p><p>CTF&#x306E;&#x5927;&#x4F1A;&#x306F;&#x5236;&#x9650;&#x6642;&#x9593;&#x5185;&#x306E;&#x3042;&#x308B;&#x30C1;&#x30FC;&#x30E0;&#x6226;&#x304C;&#x591A;&#x3044;&#x305F;&#x3081;&#x3001;&#x554F;&#x984C;&#x3092;&#x89E3;&#x304F;&#x5F79;&#x5272;&#x5206;&#x62C5;&#x304C;&#x91CD;&#x8981;&#x306B;&#x306A;&#x308A;&#x307E;&#x3059;&#x3002;&#x305D;&#x308C;&#x306A;&#x306E;&#x3067;&#x3001;&#x3069;&#x308C;&#x304B;&#x4E00;&#x3064;&#x306E;&#x5206;&#x91CE;&#x304C;&#x5F97;&#x610F;&#x3068;&#x3044;&#x3046;&#x65B9;&#x3082;&#x5927;&#x6D3B;&#x8E8D;&#x3059;&#x308B;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x307E;&#x3059;&#x3002;</p><h2 id="%E5%A5%BD%E3%81%8D%E3%81%AA%E5%88%86%E9%87%8E">&#x597D;&#x304D;&#x306A;&#x5206;&#x91CE;</h2><hr><p>CTF&#x306E;&#x4E2D;&#x3067;&#x3082;&#x3001;Crypto&#x3001;Steganography&#x3001;Osint&#x306E;&#x5206;&#x91CE;&#x306E;&#x554F;&#x984C;&#x304C;&#x597D;&#x304D;&#x3067;&#x3059;&#x3002;&#x79C1;&#x306F;Web&#x7CFB;&#x306E;&#x4E8B;&#x524D;&#x77E5;&#x8B58;&#x304C;&#x307B;&#x3068;&#x3093;&#x3069;&#x306A;&#x304B;&#x3063;&#x305F;&#x306E;&#x3067;&#x3001;Web&#x3084;Reversing&#x306E;&#x554F;&#x984C;&#x306F;&#x3001;&#x7C21;&#x5358;&#x306A;&#x96E3;&#x6613;&#x5EA6;&#x306E;&#x554F;&#x984C;&#x306B;&#x3082;&#x6B6F;&#x304C;&#x7ACB;&#x3061;&#x307E;&#x305B;&#x3093;&#x3067;&#x3057;&#x305F;&#x3002;&#x3067;&#x3059;&#x304C;&#x3001;&#x3053;&#x306E;3&#x3064;&#x306E;&#x5206;&#x91CE;&#x306E;&#x554F;&#x984C;&#x306F;Web&#x3084;&#x30B3;&#x30F3;&#x30D4;&#x30E5;&#x30FC;&#x30BF;&#x306E;&#x4E8B;&#x524D;&#x77E5;&#x8B58;&#x3092;&#x305D;&#x3053;&#x307E;&#x3067;&#x5FC5;&#x8981;&#x3068;&#x3057;&#x306A;&#x3044;&#x305F;&#x3081;&#x3001;&#x79C1;&#x306B;&#x3082;&#x53D6;&#x308A;&#x639B;&#x304B;&#x308A;&#x3084;&#x3059;&#x304B;&#x3063;&#x305F;&#x3067;&#x3059;&#x3002;</p><h3 id="crypto">Crypto</h3><p>&#x4E3B;&#x306B;&#x6697;&#x53F7;&#x3092;&#x5FA9;&#x53F7;&#x3059;&#x308B;&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30E0;&#x3092;&#x66F8;&#x3044;&#x3066;&#x554F;&#x984C;&#x3092;&#x89E3;&#x304D;&#x307E;&#x3059;&#x3002;&#x307E;&#x305A;&#x3069;&#x306E;&#x3088;&#x3046;&#x306A;&#x6697;&#x53F7;&#x5316;&#x304C;&#x65BD;&#x3055;&#x308C;&#x3066;&#x3044;&#x308B;&#x304B;&#x3092;&#x8AAD;&#x307F;&#x53D6;&#x308A;&#x3001;&#x305D;&#x306E;&#x6697;&#x53F7;&#x306B;&#x3064;&#x3044;&#x3066;&#x60C5;&#x5831;&#x3092;&#x691C;&#x7D22;&#x3057;&#x3001;&#x6697;&#x53F7;&#x5316;&#x3055;&#x308C;&#x305F;&#x6587;&#x5B57;&#x3092;&#x89E3;&#x8AAD;&#x3059;&#x308B;&#x305F;&#x3081;&#x306E;&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30E0;&#x3092;&#x66F8;&#x304D;&#x307E;&#x3059;&#x3002;&#xFF08;&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30E0;&#x306E;&#x4F5C;&#x6210;&#x306F;&#x3088;&#x304F;ChatGPT&#x306B;&#x983C;&#x3063;&#x305F;&#x308A;&#x3057;&#x307E;&#x3059;&#xFF09;</p><p>&#x30A2;&#x30EB;&#x30D5;&#x30A1;&#x30D9;&#x30C3;&#x30C8;&#x3092;&#x305A;&#x3089;&#x3057;&#x3066;&#x89E3;&#x304F;&#x30B7;&#x30FC;&#x30B6;&#x30FC;&#x6697;&#x53F7;&#x3001;&#x7D20;&#x56E0;&#x6570;&#x5206;&#x89E3;&#x3067;&#x89E3;&#x8AAD;&#x3059;&#x308B;RSA&#x6697;&#x53F7;&#x306A;&#x3069;&#x3001;&#x540D;&#x524D;&#x306F;&#x805E;&#x3044;&#x305F;&#x3053;&#x3068;&#x3042;&#x308B;&#x306A;&#x3041;&#x3068;&#x3044;&#x3046;&#x5370;&#x8C61;&#x3067;&#x3057;&#x305F;&#x304C;&#x3001;&#x5B9F;&#x969B;&#x306B;&#x81EA;&#x5206;&#x3067;&#x89E3;&#x8AAD;&#x3067;&#x304D;&#x305F;&#x6642;&#x306B;&#x306F;&#x3068;&#x3066;&#x3082;&#x5B09;&#x3057;&#x304B;&#x3063;&#x305F;&#x3067;&#x3059;&#x3002;&#x6570;&#x5B66;&#x3084;&#x30D1;&#x30BA;&#x30EB;&#x304C;&#x597D;&#x304D;&#x306A;&#x65B9;&#x306F;&#x3001;&#x304D;&#x3063;&#x3068;Crypto&#x554F;&#x984C;&#x3082;&#x9762;&#x767D;&#x3044;&#x3068;&#x601D;&#x3046;&#x306F;&#x305A;&#x3067;&#x3059;&#x3002;</p><h3 id="steganography">Steganography</h3><p>&#x4E0E;&#x3048;&#x3089;&#x308C;&#x305F;&#x753B;&#x50CF;&#x3084;&#x97F3;&#x58F0;&#x3092;&#x89E3;&#x6790;&#x3057;&#x307E;&#x3059;&#x3002;&#x4F8B;&#x3048;&#x3070;&#x3001;&#x753B;&#x50CF;&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x306B;&#x96A0;&#x3055;&#x308C;&#x305F;&#x4ED6;&#x306E;&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x3092;&#x898B;&#x3064;&#x3051;&#x305F;&#x308A;&#x3001;&#x97F3;&#x58F0;&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x306B;&#x9332;&#x97F3;&#x3055;&#x308C;&#x3066;&#x3044;&#x308B;&#x97F3;&#x306E;&#x6CE2;&#x5F62;&#x304B;&#x3089;&#x30D2;&#x30F3;&#x30C8;&#x3092;&#x898B;&#x3064;&#x3051;&#x305F;&#x308A;&#x3057;&#x307E;&#x3059;&#x3002;&#x30C4;&#x30FC;&#x30EB;&#x3092;&#x99C6;&#x4F7F;&#x3057;&#x3066;&#x96A0;&#x3055;&#x308C;&#x305F;&#x8981;&#x7D20;&#x3092;&#x898B;&#x3064;&#x3051;&#x3066;&#x3044;&#x304F;&#x306E;&#x304C;&#x9762;&#x767D;&#x304F;&#x3066;&#x597D;&#x304D;&#x3067;&#x3059;&#x3002;&#x4E00;&#x756A;&#x5B9D;&#x63A2;&#x3057;&#x306E;&#x3088;&#x3046;&#x306A;&#x30B8;&#x30E3;&#x30F3;&#x30EB;&#x3060;&#x3068;&#x601D;&#x3063;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;</p><h3 id="osint">Osint</h3><p>&#x3068;&#x306B;&#x304B;&#x304F;&#x30CD;&#x30C3;&#x30C8;&#x304B;&#x3089;&#x60C5;&#x5831;&#x3092;&#x53CE;&#x96C6;&#x3057;&#x3066;&#x554F;&#x984C;&#x3092;&#x89E3;&#x304F;&#x30D2;&#x30F3;&#x30C8;&#x3092;&#x63A2;&#x3057;&#x307E;&#x3059;&#x3002;&#x4E0E;&#x3048;&#x308C;&#x305F;&#x5199;&#x771F;&#x304B;&#x3089;&#x305D;&#x308C;&#x304C;&#x64AE;&#x5F71;&#x3055;&#x308C;&#x305F;&#x4F4D;&#x7F6E;&#x3092;&#x7279;&#x5B9A;&#x3059;&#x308B;&#x3088;&#x3046;&#x306A;&#x3001;&#x307E;&#x3055;&#x306B;GeoGuessr&#x306E;&#x3088;&#x3046;&#x306A;&#x554F;&#x984C;&#x3082;&#x3042;&#x308A;&#x307E;&#x3059;&#x3002;&#x554F;&#x984C;&#x3092;&#x89E3;&#x304F;&#x4E0A;&#x3067;&#x4E8B;&#x524D;&#x77E5;&#x8B58;&#x3092;&#x5FC5;&#x8981;&#x3068;&#x305B;&#x305A;&#x3001;&#x691C;&#x7D22;&#x80FD;&#x529B;&#x304C;&#x52DD;&#x8CA0;&#x306E;&#x9375;&#x3068;&#x306A;&#x308B;&#x306E;&#x3067;&#x3001;CTF&#x304C;&#x521D;&#x3081;&#x3066;&#x306E;&#x65B9;&#x3067;&#x3082;&#x697D;&#x3057;&#x3044;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x3002;</p><h2 id="ctf%E3%82%92%E3%82%84%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86">CTF&#x3092;&#x3084;&#x3063;&#x3066;&#x307F;&#x3088;&#x3046;</h2><hr><p>CTF&#x3092;&#x59CB;&#x3081;&#x3066;&#x307F;&#x3088;&#x3046;&#x304B;&#x306A;&#x3068;&#x601D;&#x3063;&#x305F;&#x3089;&#x3001;&#x5E38;&#x8A2D;&#x306E;CTF&#x304C;&#x3042;&#x308B;&#x306E;&#x3067;&#x305C;&#x3072;&#x53D6;&#x308A;&#x7D44;&#x3093;&#x3067;&#x307F;&#x307E;&#x3057;&#x3087;&#x3046;&#x3002;</p><!--kg-card-begin: markdown--><ul>
<li><a href="https://picoctf.org/">picoCTF</a>
<ul>
<li>&#x3053;&#x3061;&#x3089;&#x306F;&#x30B5;&#x30A4;&#x30C8;&#x306F;&#x82F1;&#x8A9E;&#x306A;&#x306E;&#x3067;&#x3059;&#x304C;&#x3001;&#x6709;&#x540D;&#x306A;CTF&#x306A;&#x306E;&#x3067;&#x65E5;&#x672C;&#x8A9E;&#x3067;&#x66F8;&#x304B;&#x308C;&#x305F;writeup&#x3068;&#x547C;&#x3070;&#x308C;&#x308B;&#x554F;&#x984C;&#x306E;&#x89E3;&#x304D;&#x65B9;&#x306E;&#x8A18;&#x4E8B;&#x304C;&#x305F;&#x304F;&#x3055;&#x3093;&#x30D2;&#x30C3;&#x30C8;&#x3057;&#x307E;&#x3059;&#x3002;</li>
</ul>
</li>
<li><a href="https://ctf.cpaw.site/index.php">CpawCTF</a>
<ul>
<li>&#x65E5;&#x672C;&#x8A9E;&#x306E;&#x5E38;&#x8A2D;CTF&#x3067;&#x3059;&#x3002;</li>
</ul>
</li>
</ul>
<!--kg-card-end: markdown--><p>&#x307E;&#x305F;&#x3001;CTF&#x306E;&#x5927;&#x4F1A;&#x3082;&#x69D8;&#x3005;&#x306A;&#x56E3;&#x4F53;&#x304C;&#x958B;&#x50AC;&#x3057;&#x3066;&#x304A;&#x308A;&#x3001;&#x4E2D;&#x306B;&#x306F;&#x521D;&#x5FC3;&#x8005;&#x5411;&#x3051;&#x306E;&#x5927;&#x4F1A;&#x3082;&#x3042;&#x308B;&#x306E;&#x3067;&#x3001;&#x305C;&#x3072;&#x30C1;&#x30A7;&#x30C3;&#x30AF;&#x3057;&#x3066;&#x307F;&#x3066;&#x304F;&#x3060;&#x3055;&#x3044;&#x3002;</p><h3 id="%E3%81%8A%E8%A9%A6%E3%81%97%E5%95%8F%E9%A1%8C">&#x304A;&#x8A66;&#x3057;&#x554F;&#x984C;</h3><p>&#x6700;&#x5F8C;&#x306B;CTF&#x306E;&#x3088;&#x3046;&#x306A;&#x554F;&#x984C;&#x3092;&#x4F5C;&#x6210;&#x3057;&#x305F;&#x306E;&#x3067;&#x3001;&#x3088;&#x304B;&#x3063;&#x305F;&#x3089;&#x89E3;&#x3044;&#x3066;&#x307F;&#x3066;&#x304F;&#x3060;&#x3055;&#x3044;&#x3002;</p><p>&#xFF08;&#x554F;&#x984C;&#x306E;&#x30AF;&#x30AA;&#x30EA;&#x30C6;&#x30A3;&#x306B;&#x3064;&#x3044;&#x3066;&#x306F;&#x3054;&#x5BB9;&#x8D66;&#x304F;&#x3060;&#x3055;&#x3044;&#x3002;&#xFF09;</p><p>&#x203B;&#x7B54;&#x3048;&#x306E;&#x5F62;&#x5F0F;&#x306F;&#x3001;&#x901A;&#x5E38;&#x306E;CTF&#x306E;&#x3088;&#x3046;&#x306A;flag{xxx}&#x3068;&#x3044;&#x3046;&#x5F62;&#x5F0F;&#x3067;&#x306F;&#x306A;&#x304F;&#x3001;&#x305F;&#x3060;&#x306E;&#x6587;&#x5B57;&#x5217;&#x3067;&#x3059;&#x3002;</p><h3 id="q1">Q1&#x3000;</h3><p>&#x30B8;&#x30E3;&#x30F3;&#x30EB;&#xFF1A;Crypto</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.shinonome.io/content/images/2024/12/--1.png" class="kg-image" alt="CTF&#x521D;&#x5FC3;&#x8005;&#x306B;&#x3088;&#x308B;CTF&#x306E;&#x7D39;&#x4ECB;" loading="lazy" width="1080" height="1080" srcset="http://blog.shinonome.io/content/images/size/w600/2024/12/--1.png 600w, http://blog.shinonome.io/content/images/size/w1000/2024/12/--1.png 1000w, http://blog.shinonome.io/content/images/2024/12/--1.png 1080w" sizes="(min-width: 720px) 720px"><figcaption>&#x30B3;&#x30D4;&#x30DA;&#x7528;&#xFF1A;Qvfwghaog</figcaption></figure><!--kg-card-begin: markdown--><details><summary>&#x30D2;&#x30F3;&#x30C8;</summary>
<p>&#x30B7;&#x30FC;&#x30B6;&#x30FC;&#x6697;&#x53F7;</p>
</details><!--kg-card-end: markdown--><!--kg-card-begin: markdown--><details><summary>&#x7B54;&#x3048;</summary>
<p><strong>&#x300C;Christmas&#x300D;</strong></p>
<p>&#x3053;&#x308C;&#x306F;&#x30B7;&#x30FC;&#x30B6;&#x30FC;&#x6697;&#x53F7;&#x3067;&#x3059;&#x3002;&#x30B5;&#x30F3;&#x30BF;&#x30AF;&#x30ED;&#x30FC;&#x30B9;&#x304C;&#x3084;&#x3063;&#x3066;&#x304F;&#x308B;12&#x6708;&#x3001;key=12&#x306B;&#x8A2D;&#x5B9A;&#x3057;&#x3066;&#x5FA9;&#x53F7;&#x3057;&#x307E;&#x3059;&#x3002;<br>
&#x30E1;&#x30EA;&#x30FC;&#x30AF;&#x30EA;&#x30B9;&#x30DE;&#x30B9;&#xFF01;&#x1F385;</p>
</details><!--kg-card-end: markdown--><h3 id="q2">Q2</h3><p>&#x30B8;&#x30E3;&#x30F3;&#x30EB;&#xFF1A;Osint</p><figure class="kg-card kg-image-card"><img src="http://blog.shinonome.io/content/images/2024/12/--2.png" class="kg-image" alt="CTF&#x521D;&#x5FC3;&#x8005;&#x306B;&#x3088;&#x308B;CTF&#x306E;&#x7D39;&#x4ECB;" loading="lazy" width="1080" height="1080" srcset="http://blog.shinonome.io/content/images/size/w600/2024/12/--2.png 600w, http://blog.shinonome.io/content/images/size/w1000/2024/12/--2.png 1000w, http://blog.shinonome.io/content/images/2024/12/--2.png 1080w" sizes="(min-width: 720px) 720px"></figure><!--kg-card-begin: markdown--><details><summary>&#x30D2;&#x30F3;&#x30C8;</summary>
<p>&#x307E;&#x305A;&#x306F;&#x753B;&#x50CF;&#x691C;&#x7D22;&#xFF01;</p>
</details><!--kg-card-end: markdown--><!--kg-card-begin: markdown--><details><summary>&#x7B54;&#x3048;</summary>
<p><strong>&#x300C;&#x5C0F;&#x5343;&#x8C37;&#x5E02;&#x5F79;&#x6240;&#x300D;</strong></p>
<p>&#x691C;&#x7D22;&#x3059;&#x308B;&#x3068;&#x5C0F;&#x5343;&#x8C37;&#x5E02;&#x5F79;&#x6240;&#x306B;&#x8A2D;&#x7F6E;&#x3055;&#x308C;&#x305F;&#x30B3;&#x30A4;&#x30AD;&#x30F3;&#x30B0;&#x306E;&#x30DD;&#x30B1;&#x3075;&#x305F;&#x3067;&#x3042;&#x308B;&#x3053;&#x3068;&#x304C;&#x308F;&#x304B;&#x308A;&#x307E;&#x3059;&#x3002;</p>
<img src="http://blog.shinonome.io/content/images/2024/12/----------2024-12-17-10.40.55.png" width="500" alt="CTF&#x521D;&#x5FC3;&#x8005;&#x306B;&#x3088;&#x308B;CTF&#x306E;&#x7D39;&#x4ECB;">
</details><!--kg-card-end: markdown--><h3 id="q3">Q3</h3><p>&#x30B8;&#x30E3;&#x30F3;&#x30EB;&#xFF1A;Crypto</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.shinonome.io/content/images/2024/12/--3-1.png" class="kg-image" alt="CTF&#x521D;&#x5FC3;&#x8005;&#x306B;&#x3088;&#x308B;CTF&#x306E;&#x7D39;&#x4ECB;" loading="lazy" width="1080" height="1080" srcset="http://blog.shinonome.io/content/images/size/w600/2024/12/--3-1.png 600w, http://blog.shinonome.io/content/images/size/w1000/2024/12/--3-1.png 1000w, http://blog.shinonome.io/content/images/2024/12/--3-1.png 1080w" sizes="(min-width: 720px) 720px"><figcaption>&#x30B3;&#x30D4;&#x30DA;&#x7528;&#xFF1A;&#x1F43F;&#x1F458;&#x1F467;&#x1F467;&#x1F470;&#x1F445;&#x1F45C;&#x1F46E;&#x1F450;&#x1F45C;&#x1F458;&#x1F469;&#x1F418;</figcaption></figure><!--kg-card-begin: markdown--><details><summary>&#x30D2;&#x30F3;&#x30C8;</summary>
<p>Base100</p>
</details><!--kg-card-end: markdown--><!--kg-card-begin: markdown--><details><summary>&#x7B54;&#x3048;</summary>
<p><strong>&#x300C;HapyNewYear!&#x300D;</strong></p>
<p>Base100&#x3067;&#x5909;&#x63DB;&#x3055;&#x308C;&#x305F;&#x6697;&#x53F7;&#x3067;&#x3057;&#x305F;&#x3002;&#x3053;&#x3061;&#x3089;&#x306E;&#x30C4;&#x30FC;&#x30EB;&#x306A;&#x3069;&#x3092;&#x4F7F;&#x3046;&#x3068;&#x5FA9;&#x53F7;&#x3067;&#x304D;&#x307E;&#x3059;&#x3002;<br>
<a href="https://www.dcode.fr/base100-emoji-encoding">https://www.dcode.fr/base100-emoji-encoding</a></p>
<p>Base100&#x306F;&#x6700;&#x8FD1;&#x77E5;&#x3063;&#x3066;&#x3001;&#x7D75;&#x6587;&#x5B57;&#x306B;&#x5909;&#x63DB;&#x3059;&#x308B;&#x306E;&#x304C;&#x304B;&#x308F;&#x3044;&#x304B;&#x3063;&#x305F;&#x306E;&#x3067;&#x51FA;&#x984C;&#x3057;&#x305F;&#x304F;&#x306A;&#x308A;&#x307E;&#x3057;&#x305F;&#x3002;</p>
</details><!--kg-card-end: markdown--><h2 id="%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB">&#x304A;&#x308F;&#x308A;&#x306B;</h2><hr><p>&#x79C1;&#x81EA;&#x8EAB;CTF&#x3092;&#x901A;&#x3057;&#x3066;&#x30BB;&#x30AD;&#x30E5;&#x30EA;&#x30C6;&#x30A3;&#x306B;&#x8208;&#x5473;&#x3092;&#x6301;&#x3064;&#x3088;&#x3046;&#x306B;&#x306A;&#x308A;&#x307E;&#x3057;&#x305F;&#x3002;CTF&#x3067;&#x77E5;&#x3063;&#x305F;&#x77E5;&#x8B58;&#x304C;&#x305D;&#x306E;&#x307E;&#x307E;&#x30BB;&#x30AD;&#x30E5;&#x30EA;&#x30C6;&#x30A3;&#x95A2;&#x9023;&#x306E;&#x5B66;&#x3073;&#x306B;&#x7E4B;&#x304C;&#x3063;&#x305F;&#x308A;&#x3059;&#x308B;&#x3053;&#x3068;&#x3082;&#x3042;&#x308A;&#x3001;CTF&#x3092;&#x59CB;&#x3081;&#x3066;&#x307F;&#x3066;&#x3088;&#x304B;&#x3063;&#x305F;&#x3068;&#x601D;&#x3046;&#x5834;&#x9762;&#x304C;&#x591A;&#x3044;&#x3067;&#x3059;&#x3002;&#x307E;&#x3060;&#x307E;&#x3060;&#x521D;&#x5FC3;&#x8005;&#x306A;&#x306E;&#x3067;&#x3001;&#x3053;&#x308C;&#x304B;&#x3089;&#x3082;CTF&#x3092;&#x697D;&#x3057;&#x307F;&#x306A;&#x304C;&#x3089;&#x9811;&#x5F35;&#x308A;&#x305F;&#x3044;&#x3067;&#x3059;&#x3002;</p><p>CTF&#x306F;&#x610F;&#x5916;&#x3068;&#x6C17;&#x8EFD;&#x306B;&#x59CB;&#x3081;&#x3089;&#x308C;&#x308B;&#x3088;&#x3068;&#x3044;&#x3046;&#x3053;&#x3068;&#x3092;&#x304A;&#x4F1D;&#x3048;&#x3067;&#x304D;&#x3066;&#x3044;&#x3066;&#x305F;&#x3089;&#x5B09;&#x3057;&#x3044;&#x3067;&#x3059;&#x3002;</p><p>&#x6700;&#x5F8C;&#x307E;&#x3067;&#x8AAD;&#x3093;&#x3067;&#x3044;&#x305F;&#x3060;&#x304D;&#x3042;&#x308A;&#x304C;&#x3068;&#x3046;&#x3054;&#x3056;&#x3044;&#x307E;&#x3057;&#x305F;&#xFF01;</p><p>&#x660E;&#x65E5;&#x306F;Hiro&#x3055;&#x3093;&#x306E;&#x8A18;&#x4E8B;&#x3067;&#x3059;&#xFF01;&#x304A;&#x697D;&#x3057;&#x307F;&#x306B;&#xFF01;</p>]]></content:encoded></item><item><title><![CDATA[The EU Artificial Intelligence Act]]></title><description><![CDATA[こちらの記事では本年、欧州連合理事会にて承認され2026年より本格適用される、世界初の包括的なAI開発運用規制法についてお話していこうと思います。]]></description><link>http://blog.shinonome.io/eu-ai-act/</link><guid isPermaLink="false">675392fb84f04652f6202bc5</guid><category><![CDATA[テクノロジー]]></category><dc:creator><![CDATA[PlayGround]]></dc:creator><pubDate>Wed, 18 Dec 2024 15:09:00 GMT</pubDate><media:content url="http://blog.shinonome.io/content/images/2024/12/20241207_001949_746.png" medium="image"/><content:encoded><![CDATA[<img src="http://blog.shinonome.io/content/images/2024/12/20241207_001949_746.png" alt="The EU Artificial Intelligence Act"><p></p><p>&#x3053;&#x3093;&#x306B;&#x3061;&#x306F;&#xFF01;</p><p><a href="https://qiita.com/advent-calendar/2024/playground">PlayGroundAdventCalendar2024</a> 19&#x65E5;&#x76EE;&#x62C5;&#x5F53;&#x3001;&#x30C7;&#x30FC;&#x30BF;&#x30B3;&#x30FC;&#x30B9;&#x306E;Yukari&#x3067;&#x3059;&#x3002;</p><p>&#x8FD1;&#x9803;&#x306F;EU,&#x65E5;&#x672C;&#x3092;&#x4E2D;&#x5FC3;&#x3068;&#x3057;&#x305F;&#x30C7;&#x30FC;&#x30BF;&#x4FDD;&#x8B77;&#x3001;AI&#x30AC;&#x30D0;&#x30CA;&#x30F3;&#x30B9;&#x3001;AI&#x306E;&#x502B;&#x7406;&#x7684;&#x30FB;&#x6CD5;&#x7684;&#x67A0;&#x7D44;&#x307F;&#x306B;&#x3064;&#x3044;&#x3066;&#x5B66;&#x3093;&#x3067;&#x3044;&#x307E;&#x3059;&#x3002;</p><p>&#x3053;&#x3061;&#x3089;&#x306E;&#x8A18;&#x4E8B;&#x3067;&#x306F;&#x672C;&#x5E74;&#x3001;&#x6B27;&#x5DDE;&#x9023;&#x5408;&#x7406;&#x4E8B;&#x4F1A;&#x306B;&#x3066;&#x627F;&#x8A8D;&#x3055;&#x308C;2026&#x5E74;&#x3088;&#x308A;&#x672C;&#x683C;&#x9069;&#x7528;&#x3055;&#x308C;&#x308B;&#x3001;<em>&#x4E16;&#x754C;&#x521D;&#x306E;&#x5305;&#x62EC;&#x7684;&#x306A;AI&#x958B;&#x767A;&#x904B;&#x7528;&#x898F;&#x5236;&#x6CD5;</em>&#x306B;&#x3064;&#x3044;&#x3066;&#x304A;&#x8A71;&#x3057;&#x3066;&#x3044;&#x3053;&#x3046;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x3002;</p><h2 id="1-%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">1. &#x306F;&#x3058;&#x3081;&#x306B;</h2><p>&#x3000;&#x8FD1;&#x5E74;&#x3001;AI&#x7523;&#x696D;&#x306F;&#x98DB;&#x8E8D;&#x7684;&#x306A;&#x767A;&#x5C55;&#x3092;&#x9042;&#x3052;&#x3001;&#x79C1;&#x305F;&#x3061;&#x306E;&#x751F;&#x6D3B;&#x3084;&#x793E;&#x4F1A;&#x306B;&#x6DF1;&#x3044;&#x5F71;&#x97FF;&#x3092;&#x4E0E;&#x3048;&#x308B;&#x5B58;&#x5728;&#x3068;&#x306A;&#x308A;&#x307E;&#x3057;&#x305F;&#x3002;&#x305D;&#x306E;&#x4E00;&#x65B9;&#x3067;&#x3001;&#x3053;&#x306E;&#x6025;&#x901F;&#x306A;&#x767A;&#x5C55;&#x306B;&#x4F34;&#x3044;&#x3001;&#x502B;&#x7406;&#x7684;&#x8AB2;&#x984C;&#x3084;&#x30C7;&#x30FC;&#x30BF;&#x4FDD;&#x8B77;&#x3001;&#x8457;&#x4F5C;&#x6A29;&#x3068;&#x3044;&#x3063;&#x305F;&#x591A;&#x5C90;&#x306B;&#x308F;&#x305F;&#x308B;&#x554F;&#x984C;&#x304C;&#x6D6E;&#x304D;&#x5F6B;&#x308A;&#x306B;&#x306A;&#x308A;&#x3064;&#x3064;&#x3042;&#x308A;&#x307E;&#x3059;&#x3002;</p><p>&#x3053;&#x308C;&#x307E;&#x3067;&#x3053;&#x3046;&#x3057;&#x305F;&#x8AB2;&#x984C;&#x306B;&#x5305;&#x62EC;&#x7684;&#x306B;&#x5BFE;&#x5FDC;&#x3059;&#x308B;&#x660E;&#x78BA;&#x306A;&#x898F;&#x5236;&#x304C;&#x5B58;&#x5728;&#x3057;&#x306A;&#x304B;&#x3063;&#x305F;&#x4E2D;&#x3067;&#x3001;EU AI Act&#x306F;&#x3001;&#x4E16;&#x754C;&#x3067;&#x521D;&#x3081;&#x3066;&#x306E;&#x5305;&#x62EC;&#x7684;&#x306A;AI&#x898F;&#x5236;&#x6CD5;&#x3068;&#x3057;&#x3066;&#x6CE8;&#x76EE;&#x3055;&#x308C;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;&#x3053;&#x306E;&#x6CD5;&#x5F8B;&#x306F;EU&#x57DF;&#x5185;&#x3092;&#x5BFE;&#x8C61;&#x3068;&#x3057;&#x305F;&#x3082;&#x306E;&#x3067;&#x3059;&#x304C;&#x3001;&#x305D;&#x306E;&#x5F71;&#x97FF;&#x306F;EU&#x3092;&#x8D85;&#x3048;&#x3001;AI&#x3092;&#x5229;&#x7528;&#x3059;&#x308B;&#x65E5;&#x672C;&#x3092;&#x542B;&#x3080;&#x4E16;&#x754C;&#x5404;&#x56FD;&#x306B;&#x6CE2;&#x53CA;&#x3057;&#x307E;&#x3059;&#x3002;&#x672C;&#x8A18;&#x4E8B;&#x3067;&#x306F;EU AI Act&#x3068;&#x306F;&#x5177;&#x4F53;&#x7684;&#x306B;&#x3069;&#x306E;&#x3088;&#x3046;&#x306A;&#x6CD5;&#x5F8B;&#x306A;&#x306E;&#x304B;&#x3001;&#x3069;&#x3046;&#x3044;&#x3063;&#x305F;&#x5F71;&#x97FF;&#x304C;&#x53CA;&#x307C;&#x3055;&#x308C;&#x308B;&#x306E;&#x304B;&#x306B;&#x3064;&#x3044;&#x3066;&#x7D39;&#x4ECB;&#x30FB;&#x8003;&#x5BDF;&#x3057;&#x3066;&#x3044;&#x304D;&#x307E;&#x3059;&#x3002;</p><p></p><h2 id="2-the-eu-artificial-intelligence-act%E3%81%A8%E3%81%AF">2. The EU Artificial Intelligence Act&#x3068;&#x306F;</h2><p>&#x3000;EU AI Act&#x3068;&#x306F;2021&#x5E74;4&#x6708;&#x306B;&#x6B27;&#x5DDE;&#x59D4;&#x54E1;&#x4F1A;&#x304C;&#x63D0;&#x6848;&#x3057;&#x305F;&#x4E16;&#x754C;&#x521D;&#x306E;&#x5305;&#x62EC;&#x7684;&#x306A;AI&#x6CD5;&#x898F;&#x5236;&#x3067;&#x3001;2024&#x5E74;3&#x6708;&#x306B;&#x63A1;&#x629E;&#x3092;&#x5F97;&#x307E;&#x3057;&#x305F;&#x3002;EU&#x306E;&#x30C7;&#x30B8;&#x30BF;&#x30EB;&#x6226;&#x7565;&#x306E;&#x8981;&#x3067;&#x3042;&#x308A;&#x3001;&#x6280;&#x8853;&#x9769;&#x65B0;&#x306B;&#x91CD;&#x70B9;&#x3092;&#x7F6E;&#x304D;&#x3064;&#x3064;&#x3001;AI&#x6280;&#x8853;&#x306E;&#x502B;&#x7406;&#x7684;&#x3067;&#x5B89;&#x5168;&#x306A;&#x6D3B;&#x7528;&#x3092;&#x4FC3;&#x9032;&#x3057;&#x3001;&#x4EBA;&#x6A29;&#x4FDD;&#x8B77;&#x3084;&#x5E02;&#x5834;&#x306E;&#x516C;&#x5E73;&#x6027;&#x3092;&#x78BA;&#x4FDD;&#x3059;&#x308B;&#x305F;&#x3081;&#x306B;&#x8A2D;&#x8A08;&#x3055;&#x308C;&#x307E;&#x3057;&#x305F;&#x3002;</p><p>EU AI Act&#x306F;&#x3001;<em>AI&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x306E;&#x30EA;&#x30B9;&#x30AF;&#x30EC;&#x30D9;&#x30EB;</em>&#x306B;&#x5FDC;&#x3058;&#x305F;&#x898F;&#x5236;&#x3092;&#x8A2D;&#x3051;&#x308B;&#x6CD5;&#x7684;&#x67A0;&#x7D44;&#x307F;&#x3067;&#x3042;&#x308A;&#x3001;&#x3053;&#x306E;&#x30EA;&#x30B9;&#x30AF;&#x30D9;&#x30FC;&#x30B9;&#x306E;&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;&#x306F;&#x3001;&#x3059;&#x3079;&#x3066;&#x306E;AI&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x3092;&#x4E00;&#x5F8B;&#x306B;&#x898F;&#x5236;&#x3059;&#x308B;&#x306E;&#x3067;&#x306F;&#x306A;&#x304F;&#x3001;&#x305D;&#x306E;&#x7528;&#x9014;&#x3084;&#x5F71;&#x97FF;&#x306E;&#x91CD;&#x5927;&#x6027;&#x306B;&#x5FDC;&#x3058;&#x3066;&#x898F;&#x5236;&#x3092;&#x6BB5;&#x968E;&#x7684;&#x306B;&#x8A2D;&#x3051;&#x308B;&#x3082;&#x306E;&#x3067;&#x3059;&#x3002;</p><figure class="kg-card kg-image-card"><img src="http://blog.shinonome.io/content/images/2024/12/pyramid_7F5843E5-9386-8052-931F5C4E98C6E5F2_75757.jpg" class="kg-image" alt="The EU Artificial Intelligence Act" loading="lazy" width="521" height="325"></figure><h3 id="1%E8%A8%B1%E5%AE%B9%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%83%AA%E3%82%B9%E3%82%AFunacceptable-risk%E5%8E%9F%E5%89%87%E7%A6%81%E6%AD%A2">1.&#x8A31;&#x5BB9;&#x3067;&#x304D;&#x306A;&#x3044;&#x30EA;&#x30B9;&#x30AF;(Unacceptable Risk) -&#x539F;&#x5247;&#x7981;&#x6B62;</h3><p>&#x4EBA;&#x306E;&#x751F;&#x547D;&#x3084;&#x57FA;&#x672C;&#x7684;&#x4EBA;&#x6A29;&#x306B;&#x76F4;&#x63A5;&#x7684;&#x306B;&#x8105;&#x5A01;&#x3092;&#x3082;&#x305F;&#x3089;&#x3059;&#x3068;&#x8003;&#x3048;&#x3089;&#x308C;&#x308B;AI&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x3002;&#x3053;&#x306E;&#x30AB;&#x30C6;&#x30B4;&#x30EA;&#x30FC;&#x306B;&#x8A72;&#x5F53;&#x3059;&#x308B;&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x306F;&#x3001;EU&#x57DF;&#x5185;&#x3067;&#x306E;&#x4F7F;&#x7528;&#x304C;&#x5168;&#x9762;&#x7684;&#x306B;&#x7981;&#x6B62;&#x3055;&#x308C;&#x308B;&#x3002;</p><ul><li>&#x653F;&#x5E9C;&#x306B;&#x3088;&#x308B;&#x30BD;&#x30FC;&#x30B7;&#x30E3;&#x30EB;&#x30B9;&#x30B3;&#x30A2;&#x30EA;&#x30F3;&#x30B0;(&#x500B;&#x4EBA;&#x306E;&#x884C;&#x52D5;&#x3084;&#x7279;&#x6027;&#x306B;&#x57FA;&#x3065;&#x3044;&#x3066;&#x793E;&#x4F1A;&#x7684;&#x306A;&#x30B9;&#x30B3;&#x30A2;&#x3092;&#x4ED8;&#x3051;&#x3001;&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x3084;&#x6A5F;&#x4F1A;&#x3078;&#x306E;&#x30A2;&#x30AF;&#x30BB;&#x30B9;&#x3092;&#x5236;&#x9650;&#x3059;&#x308B;&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x3002;)</li><li>&#x516C;&#x5171;&#x7A7A;&#x9593;&#x3067;&#x306E;&#x30EA;&#x30A2;&#x30EB;&#x30BF;&#x30A4;&#x30E0;&#x9060;&#x9694;&#x751F;&#x4F53;&#x8A8D;&#x8A3C;(&#x30D7;&#x30E9;&#x30A4;&#x30D0;&#x30B7;&#x30FC;&#x3092;&#x4FB5;&#x5BB3;&#x3057;&#x3001;&#x4E0D;&#x9069;&#x5207;&#x306A;&#x76E3;&#x8996;&#x3084;&#x5DEE;&#x5225;&#x306B;&#x5229;&#x7528;&#x3055;&#x308C;&#x308B;&#x53EF;&#x80FD;&#x6027;&#x304C;&#x3042;&#x308B;&#x751F;&#x4F53;&#x8A8D;&#x8A3C;&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x3002;)</li></ul><p></p><h3 id="2%E9%AB%98%E3%83%AA%E3%82%B9%E3%82%AFhigh-risk%E5%8E%B3%E6%A0%BC%E3%81%AA%E7%9B%A3%E6%9F%BB%E3%81%A8%E8%A6%8F%E5%88%B6%E3%81%AE%E5%AF%BE%E8%B1%A1">2.&#x9AD8;&#x30EA;&#x30B9;&#x30AF;(High Risk) -&#x53B3;&#x683C;&#x306A;&#x76E3;&#x67FB;&#x3068;&#x898F;&#x5236;&#x306E;&#x5BFE;&#x8C61;</h3><p>&#x500B;&#x4EBA;&#x306E;&#x751F;&#x6D3B;&#x3084;&#x6A29;&#x5229;&#x306B;&#x5927;&#x304D;&#x306A;&#x5F71;&#x97FF;&#x3092;&#x4E0E;&#x3048;&#x308B;&#x53EF;&#x80FD;&#x6027;&#x304C;&#x9AD8;&#x3044;AI&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x3002;&#x3053;&#x308C;&#x3089;&#x306E;&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x306F;&#x3001;&#x53B3;&#x683C;&#x306A;&#x76E3;&#x67FB;&#x3068;&#x898F;&#x5236;&#x3092;&#x53D7;&#x3051;&#x308B;&#x5FC5;&#x8981;&#x304C;&#x3042;&#x308A;&#x307E;&#x3059;&#x3002;</p><p>&#x9AD8;&#x30EA;&#x30B9;&#x30AF;&#x3068;&#x7279;&#x5B9A;&#x3055;&#x308C;&#x305F; AI &#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x306B;&#x306F;&#x3001;&#x6B21;&#x306E;&#x7528;&#x9014;&#x3067;&#x4F7F;&#x7528;&#x3055;&#x308C;&#x308B; AI &#x30C6;&#x30AF;&#x30CE;&#x30ED;&#x30B8;&#x30FC;&#x306A;&#x3069;&#x304C;&#x542B;&#x307E;&#x308C;&#x307E;&#x3059;&#x3002;</p><ul><li>&#x56FD;&#x6C11;&#x306E;&#x751F;&#x547D;&#x3068;&#x5065;&#x5EB7;&#x3092;&#x5371;&#x967A;&#x306B;&#x3055;&#x3089;&#x3059;&#x53EF;&#x80FD;&#x6027;&#x306E;&#x3042;&#x308B;&#x91CD;&#x8981;&#x30A4;&#x30F3;&#x30D5;&#x30E9;&#xFF08;&#x4F8B;&#xFF1A;&#x4EA4;&#x901A;&#xFF09;</li><li>&#x6559;&#x80B2;&#x3084;&#x8077;&#x696D;&#x8A13;&#x7DF4;&#x306A;&#x3069;&#x3001;&#x6559;&#x80B2;&#x3078;&#x306E;&#x30A2;&#x30AF;&#x30BB;&#x30B9;&#x3084;&#x8077;&#x696D;&#x4E0A;&#x306E;&#x9032;&#x8DEF;&#x3092;&#x6C7A;&#x5B9A;&#x3059;&#x308B;&#x53EF;&#x80FD;&#x6027;&#x306E;&#x3042;&#x308B;&#x3082;&#x306E;&#xFF08;&#x4F8B;&#xFF1A;&#x8A66;&#x9A13;&#x306E;&#x63A1;&#x70B9;&#x306A;&#x3069;&#xFF09;</li><li>&#x88FD;&#x54C1;&#x306E;&#x5B89;&#x5168;&#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#xFF08;&#x4F8B;&#xFF1A;&#x30ED;&#x30DC;&#x30C3;&#x30C8;&#x652F;&#x63F4;&#x624B;&#x8853;&#x306B;&#x304A;&#x3051;&#x308B;AI&#x306E;&#x5FDC;&#x7528;&#xFF09;</li><li>&#x96C7;&#x7528;&#x3001;&#x52B4;&#x50CD;&#x8005;&#x306E;&#x7BA1;&#x7406;&#x3001;&#x81EA;&#x55B6;&#x696D;&#x3078;&#x306E;&#x30A2;&#x30AF;&#x30BB;&#x30B9;&#xFF08;&#x4F8B;&#xFF1A;&#x63A1;&#x7528;&#x624B;&#x7D9A;&#x304D;&#x306E;&#x305F;&#x3081;&#x306E;&#x5C65;&#x6B74;&#x66F8;&#x30BD;&#x30FC;&#x30C8;&#x30FB;&#x30BD;&#x30D5;&#x30C8;&#x30A6;&#x30A7;&#x30A2;&#xFF09;</li><li>&#x5FC5;&#x8981;&#x4E0D;&#x53EF;&#x6B20;&#x306A;&#x6C11;&#x9593;&#x304A;&#x3088;&#x3073;&#x516C;&#x5171;&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#xFF08;&#x4F8B;&#xFF1A;&#x5E02;&#x6C11;&#x304C;&#x30ED;&#x30FC;&#x30F3;&#x3092;&#x7D44;&#x3080;&#x6A5F;&#x4F1A;&#x3092;&#x596A;&#x3046;&#x4FE1;&#x7528;&#x30B9;&#x30B3;&#x30A2;&#x30EA;&#x30F3;&#x30B0;&#xFF09;</li><li>&#x56FD;&#x6C11;&#x306E;&#x57FA;&#x672C;&#x7684;&#x6A29;&#x5229;&#x3092;&#x4FB5;&#x5BB3;&#x3059;&#x308B;&#x53EF;&#x80FD;&#x6027;&#x306E;&#x3042;&#x308B;&#x6CD5;&#x57F7;&#x884C;&#xFF08;&#x4F8B;&#xFF1A;&#x8A3C;&#x62E0;&#x306E;&#x4FE1;&#x983C;&#x6027;&#x8A55;&#x4FA1;&#xFF09;</li><li>&#x79FB;&#x6C11;&#x3001;&#x4EA1;&#x547D;&#x3001;&#x56FD;&#x5883;&#x7BA1;&#x7406;&#xFF08;&#x4F8B;&#xFF1A;&#x30D3;&#x30B6;&#x7533;&#x8ACB;&#x306E;&#x81EA;&#x52D5;&#x5BE9;&#x67FB;&#xFF09;</li><li>&#x53F8;&#x6CD5;&#x3068;&#x6C11;&#x4E3B;&#x7684;&#x30D7;&#x30ED;&#x30BB;&#x30B9;&#x306E;&#x7BA1;&#x7406;&#xFF08;&#x4F8B;&#xFF1A;&#x88C1;&#x5224;&#x5224;&#x6C7A;&#x3092;&#x691C;&#x7D22;&#x3059;&#x308B;AI&#x30BD;&#x30EA;&#x30E5;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#xFF09;</li></ul><p></p><h3 id="3-%E9%99%90%E5%AE%9A%E7%9A%84%E3%83%AA%E3%82%B9%E3%82%AFlimited-risk%E9%80%8F%E6%98%8E%E6%80%A7%E7%BE%A9%E5%8B%99">3. &#x9650;&#x5B9A;&#x7684;&#x30EA;&#x30B9;&#x30AF;(Limited Risk) -&#x900F;&#x660E;&#x6027;&#x7FA9;&#x52D9;</h3><p>&#x76F4;&#x63A5;&#x7684;&#x306A;&#x5371;&#x967A;&#x306F;&#x5C11;&#x306A;&#x3044;&#x304C;&#x3001;&#x8AA4;&#x89E3;&#x3084;&#x60AA;&#x7528;&#x3092;&#x9632;&#x3050;&#x305F;&#x3081;&#x306B;&#x900F;&#x660E;&#x6027;&#x306E;&#x78BA;&#x4FDD;&#x304C;&#x6C42;&#x3081;&#x3089;&#x308C;&#x308B;AI&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x3002;&#x3053;&#x306E;&#x30AB;&#x30C6;&#x30B4;&#x30EA;&#x306E;&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x306F;&#x3001;&#x5229;&#x7528;&#x8005;&#x306B;AI&#x3092;&#x4F7F;&#x7528;&#x3057;&#x3066;&#x3044;&#x308B;&#x3053;&#x3068;&#x3092;&#x660E;&#x793A;&#x3059;&#x308B;&#x7FA9;&#x52D9;&#x304C;&#x3042;&#x308A;&#x307E;&#x3059;&#x3002;</p><ul><li>&#x30C1;&#x30E3;&#x30C3;&#x30C8;&#x30DC;&#x30C3;&#x30C8;(AI&#x304C;&#x5FDC;&#x7B54;&#x3057;&#x3066;&#x3044;&#x308B;&#x3053;&#x3068;&#x3092;&#x660E;&#x793A;&#x3059;&#x308B;&#x5FC5;&#x8981;&#x3042;&#x308A;&#x3002;&#x30AB;&#x30B9;&#x30BF;&#x30DE;&#x30FC;&#x30B5;&#x30DD;&#x30FC;&#x30C8;&#x3067;&#x4F7F;&#x308F;&#x308C;&#x308B;&#x30C1;&#x30E3;&#x30C3;&#x30C8;&#x30DC;&#x30C3;&#x30C8;&#x304C;&#x3001;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x306B;&#x300C;AI&#x304C;&#x5FDC;&#x7B54;&#x3057;&#x3066;&#x3044;&#x307E;&#x3059;&#x300D;&#x3068;&#x8868;&#x793A;&#x3059;&#x308B;&#x30B1;&#x30FC;&#x30B9;&#x3002;)</li><li>&#x611F;&#x60C5;&#x8A8D;&#x8B58;&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#xFF08;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x306E;&#x611F;&#x60C5;&#x3084;&#x53CD;&#x5FDC;&#x3092;&#x89E3;&#x6790;&#x3059;&#x308B;AI&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x3002;&#x9867;&#x5BA2;&#x306E;&#x8868;&#x60C5;&#x3092;&#x8AAD;&#x307F;&#x53D6;&#x3063;&#x3066;&#x5E83;&#x544A;&#x3092;&#x6700;&#x9069;&#x5316;&#x3059;&#x308B;AI&#x642D;&#x8F09;&#x306E;&#x30C7;&#x30B8;&#x30BF;&#x30EB;&#x30B5;&#x30A4;&#x30CD;&#x30FC;&#x30B8;&#x3002;&#xFF09;</li><li>&#x30C7;&#x30A3;&#x30FC;&#x30D7;&#x30D5;&#x30A7;&#x30A4;&#x30AF;(AI&#x751F;&#x6210;&#x52D5;&#x753B;&#x3084;&#x753B;&#x50CF;&#x304C;&#x8AA4;&#x89E3;&#x3092;&#x62DB;&#x304B;&#x306A;&#x3044;&#x3088;&#x3046;&#x3001;&#x300C;AI&#x3067;&#x4F5C;&#x6210;&#x3055;&#x308C;&#x307E;&#x3057;&#x305F;&#x300D;&#x3068;&#x3044;&#x3046;&#x30E9;&#x30D9;&#x30EB;&#x3092;&#x4ED8;&#x3051;&#x308B;&#x306A;&#x3069;&#x3002;)</li></ul><h3 id="4%E6%9C%80%E5%B0%8F%E9%99%90%E3%81%AE%E3%83%AA%E3%82%B9%E3%82%AFminimal-risk">4.&#x6700;&#x5C0F;&#x9650;&#x306E;&#x30EA;&#x30B9;&#x30AF;(Minimal Risk)</h3><p>&#x4E0A;&#x8A18;&#x4E09;&#x3064;&#x4EE5;&#x5916;&#x306E;&#x4E00;&#x822C;&#x7684;&#x306B;&#x4F7F;&#x7528;&#x3055;&#x308C;&#x3066;&#x3044;&#x308B;AI&#x306F;&#x898F;&#x5236;&#x5BFE;&#x8C61;&#x5916;&#x3068;&#x306A;&#x308A;&#x307E;&#x3059;&#x3002;</p><ul><li>&#x30B9;&#x30D1;&#x30E0;&#x30D5;&#x30A3;&#x30EB;&#x30BF;&#x30FC;(&#x96FB;&#x5B50;&#x30E1;&#x30FC;&#x30EB;&#x306E;&#x30B9;&#x30D1;&#x30E0;&#x3092;&#x81EA;&#x52D5;&#x691C;&#x51FA;&#x30FB;&#x9664;&#x53BB;&#x3059;&#x308B;&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x3002;)</li><li>&#x97F3;&#x58F0;&#x30A2;&#x30B7;&#x30B9;&#x30BF;&#x30F3;&#x30C8;(&#x30B9;&#x30DE;&#x30FC;&#x30C8;&#x30D5;&#x30A9;&#x30F3;&#x3084;&#x30B9;&#x30DE;&#x30FC;&#x30C8;&#x30B9;&#x30D4;&#x30FC;&#x30AB;&#x30FC;&#x306E;&#x97F3;&#x58F0;&#x8A8D;&#x8B58;&#x6280;&#x8853;&#x3002;)</li><li>&#x30D3;&#x30C7;&#x30AA;&#x30B2;&#x30FC;&#x30E0;AI(&#x30B2;&#x30FC;&#x30E0;&#x5185;&#x30AD;&#x30E3;&#x30E9;&#x30AF;&#x30BF;&#x30FC;&#x306E;&#x884C;&#x52D5;&#x3092;&#x5236;&#x5FA1;&#x3059;&#x308B;&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x3002;)</li></ul><p>&#x73FE;&#x5728; EU &#x3067;&#x4F7F;&#x7528;&#x3055;&#x308C;&#x3066;&#x3044;&#x308B; AI &#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x306E;&#x5927;&#x90E8;&#x5206;&#x306F;&#x3001;&#x3053;&#x306E;&#x30AB;&#x30C6;&#x30B4;&#x30EA;&#x306B;&#x8A72;&#x5F53;&#x3057;&#x307E;&#x3059;&#x3002;</p><h2 id="3-eu-ai-act%E3%81%AE%E9%81%A9%E7%94%A8%E7%AF%84%E5%9B%B2%E5%8F%8A%E3%81%B3%E7%BD%B0%E5%89%87">3. EU AI Act&#x306E;&#x9069;&#x7528;&#x7BC4;&#x56F2;&#x53CA;&#x3073;&#x7F70;&#x5247;</h2><p>&#x3000;EU AI Act&#x306F;&#x3001;AI&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x306E;&#x5B89;&#x5168;&#x6027;&#x3068;&#x502B;&#x7406;&#x6027;&#x3092;&#x78BA;&#x4FDD;&#x3059;&#x308B;&#x305F;&#x3081;&#x306B;&#x7B56;&#x5B9A;&#x3055;&#x308C;&#x305F;&#x6CD5;&#x898F;&#x5236;&#x3067;&#x3059;&#x304C;&#x3001;&#x305D;&#x306E;&#x7BA1;&#x8F44;&#x3084;&#x9069;&#x7528;&#x7BC4;&#x56F2;&#x306F;EU&#x57DF;&#x5185;&#x306B;&#x7559;&#x307E;&#x3089;&#x305A;&#x3001;&#x4E16;&#x754C;&#x5404;&#x56FD;&#x306B;&#x5F71;&#x97FF;&#x3092;&#x53CA;&#x307C;&#x3059;&#x53EF;&#x80FD;&#x6027;&#x304C;&#x3042;&#x308A;&#x307E;&#x3059;&#x3002;</p><p><strong>AI&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x306E;&#x5B9A;&#x7FA9;</strong><br>&#x7570;&#x306A;&#x308B;&#x30EC;&#x30D9;&#x30EB;&#x306E;&#x81EA;&#x5F8B;&#x6027;&#x3092;&#x6301;&#x3064;&#x3088;&#x3046;&#x8A2D;&#x8A08;&#x3055;&#x308C;&#x3001;&#x5C55;&#x958B;&#x5F8C;&#x306B;&#x9069;&#x5FDC;&#x6027;&#x3092;&#x793A;&#x3059;&#x53EF;&#x80FD;&#x6027;&#x304C;&#x3042;&#x308B;&#x6A5F;&#x68B0;&#x30D9;&#x30FC;&#x30B9;&#x306E;&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x3067;&#x3042;&#x308A;&#x3001;&#x660E;&#x793A;&#x7684;&#x307E;&#x305F;&#x306F;&#x6697;&#x9ED9;&#x7684;&#x306A;&#x76EE;&#x7684;&#x306E;&#x305F;&#x3081;&#x306B;&#x3001;&#x53D7;&#x3051;&#x53D6;&#x3063;&#x305F;&#x5165;&#x529B;&#x60C5;&#x5831;&#x304B;&#x3089;&#x4E88;&#x6E2C;&#x3001;&#x30B3;&#x30F3;&#x30C6;&#x30F3;&#x30C4;&#x3001;&#x63A8;&#x5968;&#x3001;&#x307E;&#x305F;&#x306F;&#x610F;&#x601D;&#x6C7A;&#x5B9A;&#x3068;&#x3044;&#x3063;&#x305F;&#x51FA;&#x529B;&#x3092;&#x751F;&#x6210;&#x3057;&#x3001;&#x305D;&#x308C;&#x306B;&#x3088;&#x3063;&#x3066;&#x7269;&#x7406;&#x7684;&#x307E;&#x305F;&#x306F;&#x4EEE;&#x60F3;&#x7684;&#x306A;&#x74B0;&#x5883;&#x306B;&#x5F71;&#x97FF;&#x3092;&#x4E0E;&#x3048;&#x308B;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x308B;&#x3082;&#x306E;&#x3092;&#x6307;&#x3057;&#x307E;&#x3059;&#x3002;</p><p><strong>&#x5546;&#x696D;&#x7528;&#x304A;&#x3088;&#x3073;&#x975E;&#x5546;&#x696D;&#x7528;</strong><br>&#x5546;&#x696D;&#x76EE;&#x7684;&#x306E;AI&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x3060;&#x3051;&#x3067;&#x306A;&#x304F;&#x3001;&#x975E;&#x5546;&#x696D;&#x76EE;&#x7684;&#x3067;&#x4F7F;&#x7528;&#x3055;&#x308C;&#x308B;AI&#xFF08;&#x4F8B;: &#x516C;&#x5171;&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x5411;&#x3051;&#x306E;AI&#xFF09;&#x3082;&#x898F;&#x5236;&#x306E;&#x5BFE;&#x8C61;&#x3067;&#x3059;&#x3002;</p><h3 id="%E5%AF%BE%E8%B1%A1%E3%81%A8%E3%81%AA%E3%82%8B%E4%B8%BB%E4%BD%93"><strong>&#x5BFE;&#x8C61;&#x3068;&#x306A;&#x308B;&#x4E3B;&#x4F53;</strong></h3><ol><li><strong>EU&#x57DF;&#x5185;&#x306E;&#x4E8B;&#x696D;&#x8005;</strong><br>EU&#x57DF;&#x5185;&#x3067;AI&#x3092;&#x958B;&#x767A;&#x3001;&#x63D0;&#x4F9B;&#x3001;&#x307E;&#x305F;&#x306F;&#x4F7F;&#x7528;&#x3059;&#x308B;&#x3059;&#x3079;&#x3066;&#x306E;&#x4F01;&#x696D;&#x3084;&#x7D44;&#x7E54;&#x304C;&#x898F;&#x5236;&#x306E;&#x5BFE;&#x8C61;&#x3068;&#x306A;&#x308A;&#x307E;&#x3059;&#x3002;</li><li><strong>EU&#x57DF;&#x5916;&#x306E;&#x4E8B;&#x696D;&#x8005;</strong><br>EU&#x57DF;&#x5916;&#x306B;&#x62E0;&#x70B9;&#x3092;&#x7F6E;&#x304F;&#x4E8B;&#x696D;&#x8005;&#x3067;&#x3042;&#x3063;&#x3066;&#x3082;&#x3001;&#x4EE5;&#x4E0B;&#x306E;&#x5834;&#x5408;&#x306B;&#x306F;EU AI Act&#x306E;&#x898F;&#x5236;&#x306B;&#x6E96;&#x62E0;&#x3059;&#x308B;&#x5FC5;&#x8981;&#x304C;&#x3042;&#x308A;&#x307E;&#x3059;&#x3002;</li><li><strong>EU&#x5E02;&#x5834;&#x5411;&#x3051;&#x306B;AI&#x88FD;&#x54C1;&#x3084;&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x3092;&#x63D0;&#x4F9B;&#x3059;&#x308B;&#x5834;&#x5408;</strong><br>&#x4F8B;&#xFF1A;&#x65E5;&#x672C;&#x306E;&#x81EA;&#x52D5;&#x8ECA;&#x30E1;&#x30FC;&#x30AB;&#x30FC;&#x304C;EU&#x3067;&#x8CA9;&#x58F2;&#x3059;&#x308B;&#x81EA;&#x52D5;&#x904B;&#x8EE2;&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x3002;</li><li><strong>EU&#x57DF;&#x5185;&#x306E;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x3092;&#x5BFE;&#x8C61;&#x3068;&#x3059;&#x308B;&#x5834;&#x5408;</strong><br>&#x4F8B;&#xFF1A;&#x7C73;&#x56FD;&#x306E;&#x4F01;&#x696D;&#x304C;EU&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x5411;&#x3051;&#x306B;&#x30AA;&#x30F3;&#x30E9;&#x30A4;&#x30F3;AI&#x30C4;&#x30FC;&#x30EB;&#x3092;&#x63D0;&#x4F9B;&#x3002;</li></ol><h3 id="%E5%AF%BE%E8%B1%A1%E3%81%A8%E3%81%AA%E3%82%8Bai%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0"><strong>&#x5BFE;&#x8C61;&#x3068;&#x306A;&#x308B;AI&#x30B7;&#x30B9;&#x30C6;&#x30E0;</strong></h3><p>EU AI Act&#x306F;&#x3001;&#x305D;&#x306E;&#x30EA;&#x30B9;&#x30AF;&#x30D9;&#x30FC;&#x30B9;&#x306E;&#x30A2;&#x30D7;&#x30ED;&#x30FC;&#x30C1;&#x306B;&#x57FA;&#x3065;&#x304D;&#x3001;&#x3059;&#x3079;&#x3066;&#x306E;AI&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x3092;&#x4EE5;&#x4E0B;&#x306E;&#x30AB;&#x30C6;&#x30B4;&#x30EA;&#x306B;&#x5206;&#x985E;&#x3057;&#x3001;&#x9069;&#x7528;&#x3057;&#x307E;&#x3059;&#x3002;</p><ul><li>&#x8A31;&#x5BB9;&#x3067;&#x304D;&#x306A;&#x3044;&#x30EA;&#x30B9;&#x30AF;&#xFF08;Unacceptable Risk&#xFF09;</li><li>&#x9AD8;&#x30EA;&#x30B9;&#x30AF;&#xFF08;High Risk&#xFF09;</li><li>&#x9650;&#x5B9A;&#x7684;&#x30EA;&#x30B9;&#x30AF;&#xFF08;Limited Risk&#xFF09;</li><li>&#x6700;&#x5C0F;&#x9650;&#x306E;&#x30EA;&#x30B9;&#x30AF;&#xFF08;Minimal Risk&#xFF09;</li></ul><p>&#x3053;&#x308C;&#x306B;&#x3088;&#x308A;&#x3001;&#x898F;&#x5236;&#x306F;AI&#x306E;&#x4F7F;&#x7528;&#x7528;&#x9014;&#x3084;&#x5F71;&#x97FF;&#x529B;&#x306B;&#x5FDC;&#x3058;&#x3066;&#x7570;&#x306A;&#x308B;&#x5F37;&#x5EA6;&#x3067;&#x9069;&#x7528;&#x3055;&#x308C;&#x307E;&#x3059;&#x3002;</p><h3 id="%E7%BD%B0%E5%89%87"><strong>&#x7F70;&#x5247;</strong></h3><p><strong>&#x7981;&#x6B62;(&#x8A31;&#x5BB9;&#x3067;&#x304D;&#x306A;&#x3044;&#x30EA;&#x30B9;&#x30AF;)AI&#x9055;&#x53CD;</strong><br>&#x6700;&#x9AD8;35,00&#x4E07;&#x20AC;&#x3001;&#x307E;&#x305F;&#x306F;&#x9055;&#x53CD;&#x8005;&#x304C;&#x4F01;&#x696D;&#x306E;&#x5834;&#x5408;&#x306F;&#x3001;&#x524D;&#x5E74;&#x5EA6;&#x4F1A;&#x8A08;&#x306E;&#x5168;&#x4E16;&#x754C;&#x306E;&#x5E74;&#x9593;&#x7DCF;&#x58F2;&#x4E0A;&#x9AD8;&#x306E;7%&#x306E;&#x3044;&#x305A;&#x308C;&#x304B;&#x9AD8;&#x984D;&#x306A;&#x65B9;&#x3002;</p><p><strong>&#x9AD8;&#x30EA;&#x30B9;&#x30AF;AI&#x3001;&#x3082;&#x3057;&#x304F;&#x306F;&#x9650;&#x5B9A;&#x7684;&#x30EA;&#x30B9;&#x30AF;AI&#x9055;&#x53CD;</strong><br>&#x6700;&#x9AD8;15,00&#x4E07;&#x20AC;&#x3001;&#x307E;&#x305F;&#x306F;&#x9055;&#x53CD;&#x8005;&#x304C;&#x4F01;&#x696D;&#x306E;&#x5834;&#x5408;&#x306F;&#x3001;&#x524D;&#x5E74;&#x5EA6;&#x4F1A;&#x8A08;&#x306E;&#x5168;&#x4E16;&#x754C;&#x306E;&#x5E74;&#x9593;&#x7DCF;&#x58F2;&#x4E0A;&#x9AD8;&#x306E;3%&#x306E;&#x3044;&#x305A;&#x308C;&#x304B;&#x9AD8;&#x984D;&#x306A;&#x65B9;&#x3002;</p><p><strong>&#x7B2C;&#x4E09;&#x8005;&#x8A8D;&#x8A3C;&#x6A5F;&#x95A2;&#x53C8;&#x306F;&#x56FD;&#x5185;&#x7BA1;&#x8F44;&#x5F53;&#x5C40;&#x306E;&#x8981;&#x8ACB;&#x306B;&#x5BFE;&#x3059;&#x308B;&#x3001;&#x4E0D;&#x6B63;&#x78BA;&#x3001;&#x4E0D;&#x5B8C;&#x5168;&#x53C8;&#x306F;&#x8AA4;&#x89E3;&#x3092;&#x62DB;&#x304F;&#x60C5;&#x5831;&#x306E;&#x63D0;&#x4F9B;</strong><br>&#x6700;&#x9AD8;750&#x4E07;&#x20AC;&#x3001;&#x307E;&#x305F;&#x306F;&#x9055;&#x53CD;&#x8005;&#x304C;&#x4F01;&#x696D;&#x306E;&#x5834;&#x5408;&#x306F;&#x3001;&#x524D;&#x5E74;&#x5EA6;&#x4F1A;&#x8A08;&#x306E;&#x5168;&#x4E16;&#x754C;&#x306E;&#x5E74;&#x9593;&#x7DCF;&#x58F2;&#x4E0A;&#x9AD8;&#x306E;1%&#x306E;&#x3044;&#x305A;&#x308C;&#x304B;&#x9AD8;&#x984D;&#x306A;&#x65B9;&#x3002;</p><h2 id="4-%E6%97%A5%E6%9C%AC%E3%81%B8%E3%81%AE%E5%BD%B1%E9%9F%BF">4. &#x65E5;&#x672C;&#x3078;&#x306E;&#x5F71;&#x97FF;</h2><p>&#x3000;EU AI Act&#x306F;&#x751F;&#x6210;AI&#x306A;&#x3069;&#x306E;&#x57FA;&#x76E4;&#x30E2;&#x30C7;&#x30EB;&#x306E;&#x958B;&#x767A;&#x3084;&#x3001;AI&#x3092;&#x6D3B;&#x7528;&#x3057;&#x305F;&#x30B5;&#x30FC;&#x30D3;&#x30B9;&#x306E;&#x63D0;&#x4F9B;&#x3092;&#x884C;&#x3046;&#x5E45;&#x5E83;&#x3044;&#x4F01;&#x696D;&#x3092;&#x5BFE;&#x8C61;&#x3068;&#x3057;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;&#x3053;&#x308C;&#x306B;&#x3088;&#x308A;&#x3001;&#x65E5;&#x672C;&#x4F01;&#x696D;&#x3082;&#x4EE5;&#x4E0B;&#x306E;&#x5BFE;&#x5FDC;&#x304C;&#x6C42;&#x3081;&#x3089;&#x308C;&#x307E;&#x3059;&#x3002;</p><p><strong>&#x65E5;&#x672C;&#x306E;AI&#x898F;&#x5236;&#x306E;&#x73FE;&#x72B6;</strong><br>&#x73FE;&#x72B6;&#x306E;&#x65E5;&#x672C;&#x3067;&#x306F;&#x3001;AI&#x306B;&#x95A2;&#x3059;&#x308B;&#x6CD5;&#x898F;&#x5236;&#x306F;&#x6B27;&#x5DDE;&#x307B;&#x3069;&#x53B3;&#x3057;&#x304F;&#x3042;&#x308A;&#x307E;&#x305B;&#x3093;&#x3002;&#x653F;&#x5E9C;&#x306F;&#x300C;AI&#x6226;&#x7565;&#x4F1A;&#x8B70;&#x300D;&#x3092;&#x901A;&#x3058;&#x3066;&#x65B0;&#x305F;&#x306A;&#x6CD5;&#x898F;&#x5236;&#x306E;&#x5C0E;&#x5165;&#x3092;&#x691C;&#x8A0E;&#x3057;&#x3066;&#x3044;&#x307E;&#x3059;&#x304C;&#x3001;&#x73FE;&#x6642;&#x70B9;&#x3067;&#x306F;&#x5177;&#x4F53;&#x7684;&#x306A;&#x898F;&#x5236;&#x306F;&#x6574;&#x5099;&#x3055;&#x308C;&#x3066;&#x3044;&#x307E;&#x305B;&#x3093;&#x3002;</p><p><strong>&#x65E5;&#x672C;&#x4F01;&#x696D;&#x3078;&#x306E;&#x5F71;&#x97FF;&#x3068;&#x5BFE;&#x5FDC;</strong></p><ul><li><strong>&#x5B89;&#x5168;&#x6027;&#x3068;&#x4FE1;&#x983C;&#x6027;&#x306E;&#x78BA;&#x4FDD;</strong>: AI&#x30B7;&#x30B9;&#x30C6;&#x30E0;&#x306E;&#x5B89;&#x5168;&#x6027;&#x3084;&#x4FE1;&#x983C;&#x6027;&#x3092;&#x78BA;&#x4FDD;&#x3059;&#x308B;&#x305F;&#x3081;&#x306E;&#x4F53;&#x5236;&#x6574;&#x5099;&#x304C;&#x5FC5;&#x8981;&#x3067;&#x3059;&#x3002;&#x4F8B;&#x3048;&#x3070;&#x3001;&#x5BCC;&#x58EB;&#x901A;&#x306F;2019&#x5E74;&#x306B;&#x5916;&#x90E8;&#x306E;&#x5C02;&#x9580;&#x5BB6;&#x306B;&#x3088;&#x308B;&#x59D4;&#x54E1;&#x4F1A;&#x3092;&#x8A2D;&#x7F6E;&#x3057;&#x3001;&#x81EA;&#x793E;&#x306E;AI&#x306E;&#x5B89;&#x5168;&#x6027;&#x3092;&#x5BA2;&#x89B3;&#x7684;&#x306B;&#x8A55;&#x4FA1;&#x3059;&#x308B;&#x4F53;&#x5236;&#x3092;&#x6574;&#x5099;&#x3057;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;</li><li><strong>&#x30EA;&#x30B9;&#x30AF;&#x7BA1;&#x7406;&#x306E;&#x5F37;&#x5316;</strong>: AI&#x306E;&#x5229;&#x7528;&#x306B;&#x4F34;&#x3046;&#x30EA;&#x30B9;&#x30AF;&#x3092;&#x9069;&#x5207;&#x306B;&#x8A55;&#x4FA1;&#x3057;&#x3001;&#x7BA1;&#x7406;&#x3059;&#x308B;&#x4F53;&#x5236;&#x306E;&#x69CB;&#x7BC9;&#x304C;&#x6C42;&#x3081;&#x3089;&#x308C;&#x307E;&#x3059;&#x3002;NEC&#x306F;2018&#x5E74;&#x306B;&#x4EBA;&#x6A29;&#x3084;&#x30D7;&#x30E9;&#x30A4;&#x30D0;&#x30B7;&#x30FC;&#x306E;&#x89B3;&#x70B9;&#x304B;&#x3089;AI&#x30D3;&#x30B8;&#x30CD;&#x30B9;&#x306E;&#x6226;&#x7565;&#x3092;&#x7ACB;&#x3066;&#x308B;&#x5C02;&#x9580;&#x7D44;&#x7E54;&#x3092;&#x8A2D;&#x7ACB;&#x3057;&#x3001;&#x30EA;&#x30B9;&#x30AF;&#x7BA1;&#x7406;&#x306E;&#x5F37;&#x5316;&#x3092;&#x9032;&#x3081;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;</li></ul><h2 id="5-%E3%81%BE%E3%81%A8%E3%82%81">5. &#x307E;&#x3068;&#x3081;</h2><p>&#x3000;EU AI Act&#x306F;&#x3001;AI&#x6280;&#x8853;&#x306E;&#x53EF;&#x80FD;&#x6027;&#x3092;&#x6700;&#x5927;&#x9650;&#x306B;&#x5F15;&#x304D;&#x51FA;&#x3057;&#x3064;&#x3064;&#x3001;&#x305D;&#x306E;&#x30EA;&#x30B9;&#x30AF;&#x3092;&#x9069;&#x5207;&#x306B;&#x7BA1;&#x7406;&#x3059;&#x308B;&#x305F;&#x3081;&#x306E;&#x4E16;&#x754C;&#x521D;&#x306E;&#x5305;&#x62EC;&#x7684;&#x306A;&#x898F;&#x5236;&#x3067;&#x3059;&#x3002;&#x3053;&#x306E;&#x6CD5;&#x5F8B;&#x306F;&#x3001;&#x502B;&#x7406;&#x7684;&#x3067;&#x6301;&#x7D9A;&#x53EF;&#x80FD;&#x306A;AI&#x793E;&#x4F1A;&#x306E;&#x5B9F;&#x73FE;&#x306B;&#x5411;&#x3051;&#x305F;&#x91CD;&#x8981;&#x306A;&#x4E00;&#x6B69;&#x3068;&#x306A;&#x308B;&#x3067;&#x3057;&#x3087;&#x3046;&#x3002;</p><p>&#x65E5;&#x672C;&#x306B;&#x3068;&#x3063;&#x3066;&#x3082;&#x3001;EU AI Act&#x3092;&#x5358;&#x306A;&#x308B;&#x898F;&#x5236;&#x3068;&#x6349;&#x3048;&#x308B;&#x306E;&#x3067;&#x306F;&#x306A;&#x304F;&#x3001;&#x4FE1;&#x983C;&#x6027;&#x306E;&#x9AD8;&#x3044;AI&#x6280;&#x8853;&#x3092;&#x958B;&#x767A;&#x3059;&#x308B;&#x30C1;&#x30E3;&#x30F3;&#x30B9;&#x3068;&#x3057;&#x3066;&#x6D3B;&#x7528;&#x3059;&#x308B;&#x3053;&#x3068;&#x304C;&#x91CD;&#x8981;&#x3067;&#x306F;&#x306A;&#x3044;&#x3067;&#x3057;&#x3087;&#x3046;&#x304B;&#x3002;&#x672C;&#x8A18;&#x4E8B;&#x3092;&#x901A;&#x3058;&#x3066;&#x3001;EU AI Act&#x306B;&#x3064;&#x3044;&#x3066;&#x7406;&#x89E3;&#x304C;&#x6DF1;&#x307E;&#x308A;&#x3001;AI&#x6280;&#x8853;&#x304C;&#x3082;&#x305F;&#x3089;&#x3059;&#x672A;&#x6765;&#x3092;&#x8003;&#x3048;&#x308B;&#x4E00;&#x52A9;&#x3068;&#x306A;&#x308C;&#x3070;&#x5E78;&#x3044;&#x3067;&#x3059;&#x3002;</p><p>&#x6700;&#x5F8C;&#x307E;&#x3067;&#x3054;&#x89A7;&#x3044;&#x305F;&#x3060;&#x304D;&#x3001;&#x3042;&#x308A;&#x304C;&#x3068;&#x3046;&#x3054;&#x3056;&#x3044;&#x307E;&#x3057;&#x305F;&#x3002;</p><p>&#x660E;&#x65E5;&#x306F;miyu&#x3055;&#x3093;&#x3067;&#x3059;&#x3002;&#x3088;&#x308D;&#x3057;&#x304F;&#x304A;&#x9858;&#x3044;&#x3057;&#x307E;&#x3059;&#xFF01;</p><h2 id="6-%E5%8F%82%E8%80%83%E6%96%87%E7%8C%AE">6. &#x53C2;&#x8003;&#x6587;&#x732E;</h2><p>&#x30FB;<a href="https://www.europarl.europa.eu/doceo/document/TA-9-2024-0138-FNL-COR01_EN.pdf" rel="noopener noreferrer">CORRIGENDUM European Parliament</a><br>&#x30FB;<a href="https://digital-strategy.ec.europa.eu/en/policies/regulatory-framework-ai" rel="noopener noreferrer">AI Act, Shaping Europe&apos;s digital future European Commission</a><br>&#x30FB;<a href="https://www3.nhk.or.jp/news/html/20240527/k10014461461000.html" rel="noopener noreferrer">EU&#x3067;AI&#x306E;&#x898F;&#x5236;&#x6CD5;&#x6210;&#x7ACB; &#x65E5;&#x672C;&#x4F01;&#x696D;&#x3067;&#x3082;&#x5B89;&#x5168;&#x6027;&#x78BA;&#x4FDD;&#x3078;&#x5BFE;&#x5FDC;&#x5F37;&#x5316; NHK</a><br>&#x30FB;<a href="https://artificialintelligenceact.eu/" rel="noopener noreferrer">The EU Artificial Intelligence Act Up-to-date developments and analyses of the EU AI Act EU Artificial Intelligent Act</a><br><br></p>]]></content:encoded></item><item><title><![CDATA[資格の話]]></title><description><![CDATA[資格の紹介です。効率的な勉強方法、安く受験する方法などを書きました。]]></description><link>http://blog.shinonome.io/certification/</link><guid isPermaLink="false">674d33ff84f04652f6201b6a</guid><category><![CDATA[データサイエンス]]></category><category><![CDATA[インフラ]]></category><dc:creator><![CDATA[PlayGround]]></dc:creator><pubDate>Tue, 17 Dec 2024 15:24:00 GMT</pubDate><media:content url="http://blog.shinonome.io/content/images/2024/12/DALL-E-2024-12-04-00.12.00---A-modern-and-minimalist-design-with-a-single-certification-badge-icon-prominently-placed-in-the-center-of-a-soft-peach-gradient-background--formatted--1.webp" medium="image"/><content:encoded><![CDATA[<img src="http://blog.shinonome.io/content/images/2024/12/DALL-E-2024-12-04-00.12.00---A-modern-and-minimalist-design-with-a-single-certification-badge-icon-prominently-placed-in-the-center-of-a-soft-peach-gradient-background--formatted--1.webp" alt="&#x8CC7;&#x683C;&#x306E;&#x8A71;"><p></p><p>AdventCalendar2024 12/18&#x62C5;&#x5F53;&#x306E;shima&#x3067;&#x3059;&#x3002;</p><p>&#x53BB;&#x5E74;&#x3001;&#x30C7;&#x30FC;&#x30BF;&#x30B3;&#x30FC;&#x30B9;&#x3092;&#x4FEE;&#x4E86;&#x3057;&#x3001;&#x4ECA;&#x306F;&#x540C;&#x30B3;&#x30FC;&#x30B9;&#x3067;&#x30E1;&#x30F3;&#x30BF;&#x30FC;&#x30EA;&#x30FC;&#x30C0;&#x30FC;&#x3092;&#x52D9;&#x3081;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;</p><p>&#x3053;&#x306E;&#x30D6;&#x30ED;&#x30B0;&#x3067;&#x306F;&#x3001;&#x50D5;&#x304C;&#x4ECA;&#x5E74;&#x53D7;&#x3051;&#x3066;&#x304D;&#x305F;&#x8CC7;&#x683C;&#x306B;&#x3064;&#x3044;&#x3066;&#x8A71;&#x3057;&#x3066;&#x3044;&#x3053;&#x3046;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x3002;</p><p>&#x3053;&#x308C;&#x304B;&#x3089;&#x6311;&#x3080;&#x65B9;&#x306E;&#x4E00;&#x52A9;&#x3068;&#x306A;&#x308C;&#x3070;&#x5E78;&#x3044;&#x3067;&#x3059;&#x3002;</p><!--kg-card-begin: markdown--><h2 id="%E7%9B%AE%E7%9A%84">&#x76EE;&#x7684;</h2>
<p>&#x3053;&#x3046;&#x3059;&#x308C;&#x3070;&#x3088;&#x304B;&#x3063;&#x305F;&#x306A;&#x3001;&#x3042;&#x3042;&#x3059;&#x308C;&#x3070;&#x3088;&#x304B;&#x3063;&#x305F;&#x306A;&#x3068;&#x3044;&#x3046;&#x3053;&#x3068;&#x304C;&#x8272;&#x3005;&#x3042;&#x3063;&#x305F;&#x306E;&#x3067;&#x3001;&#x7686;&#x3055;&#x3093;&#x304C;&#x540C;&#x3058;&#x8F4D;&#x3092;&#x8E0F;&#x307E;&#x306A;&#x3044;&#x3088;&#x3046;&#x306B;&#x7948;&#x3063;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;</p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><h2 id="%E7%B4%B9%E4%BB%8B%E3%81%99%E3%82%8B%E8%B3%87%E6%A0%BC">&#x7D39;&#x4ECB;&#x3059;&#x308B;&#x8CC7;&#x683C;</h2>
<p>1.AWS SAA<br>
2.AWS MLS<br>
3.&#x5FDC;&#x7528;&#x60C5;&#x5831;&#x6280;&#x8853;&#x8005;&#x8A66;&#x9A13;<br>
4.E&#x8CC7;&#x683C;</p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><h2 id="1aws-saa">1.AWS SAA</h2>
<hr>
<p><img src="http://blog.shinonome.io/content/images/2024/12/----------2024-12-02-14.13.00.png" alt="&#x8CC7;&#x683C;&#x306E;&#x8A71;" loading="lazy"></p>
<p>&#x6700;&#x8FD1;&#x4EBA;&#x6C17;&#x306A;AWS&#x306E;&#x8CC7;&#x683C;&#x3067;&#x3059;&#x3002;</p>
<p>&#x30EC;&#x30D9;&#x30EB;&#x611F;&#x306F;&#x3053;&#x3093;&#x306A;&#x611F;&#x3058;&#x3089;&#x3057;&#x3044;<br>
FOUNDATIONAL&#x2192;ASSOCIATE&#x2192;SPECIALTY&#x2192;PROFESSIONAL</p>
<p>&#x4E2D;&#x3067;&#x3082;SAA&#x306F;&#x3001;AWS&#x306E;&#x8CC7;&#x683C;&#x3092;&#x53D6;&#x308B;&#x4EBA;&#x304C;&#x6700;&#x521D;&#x306B;&#x53D6;&#x308B;&#x3053;&#x3068;&#x304C;&#x591A;&#x3044;&#x8CC7;&#x683C;&#x3067;&#x3059;&#x3002;<br>
&#x672A;&#x7D4C;&#x9A13;&#x3067;&#x3082;&#x53D6;&#x5F97;&#x306F;&#x53EF;&#x80FD;&#x3067;&#x3059;&#x304C;&#x3001;&#x30CD;&#x30C3;&#x30C8;&#x30EF;&#x30FC;&#x30AF;&#x306E;&#x77E5;&#x8B58;&#x306F;&#x5C11;&#x3057;&#x3042;&#x3063;&#x305F;&#x65B9;&#x304C;&#x3044;&#x3044;&#x3067;&#x3059;&#x3002;</p>
<p>AWS&#x8A8D;&#x5B9A;&#x8CC7;&#x683C;&#x306E;&#x6709;&#x52B9;&#x671F;&#x9650;&#x306F;&#x201D;3&#x5E74;&#x9593;&#x201D;&#x306A;&#x306E;&#x3067;&#x3001;&#x53D7;&#x3051;&#x308B;&#x30BF;&#x30A4;&#x30DF;&#x30F3;&#x30B0;&#x3082;&#x6C17;&#x306B;&#x3057;&#x307E;&#x3057;&#x3087;&#x3046;&#x3002;</p>
<blockquote>
<p>&#x52C9;&#x5F37;&#x671F;&#x9593;&#xFF1A;1&#x30F6;&#x6708;&#x304F;&#x3089;&#x3044;<br>
&#x53D7;&#x9A13;&#x6599;&#xFF1A;&#xA5;20,000<br>
&#x6709;&#x52B9;&#x671F;&#x9650;&#xFF1A;&#x53D6;&#x5F97;&#x304B;&#x3089;3&#x5E74;</p>
</blockquote>
<h3 id="%E4%BD%BF%E3%81%A3%E3%81%9F%E6%95%99%E6%9D%90">&#x4F7F;&#x3063;&#x305F;&#x6559;&#x6750;</h3>
<p><a href="http://">https://x.gd/dUVnB</a><br>
<a href="http://">https://x.gd/fAc5J</a></p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><h2 id="2aws-mls">2.AWS MLS</h2>
<hr>
<p><img src="http://blog.shinonome.io/content/images/2024/12/----------2024-12-02-20.39.00.png" alt="&#x8CC7;&#x683C;&#x306E;&#x8A71;" loading="lazy"><br>
SPECIALTY&#x3068;&#x805E;&#x304F;&#x3068;&#x96E3;&#x3057;&#x305D;&#x3046;&#x306B;&#x611F;&#x3058;&#x307E;&#x3059;&#x304C;&#x305D;&#x3093;&#x306A;&#x3053;&#x3068;&#x3042;&#x308A;&#x307E;&#x305B;&#x3093;&#x3067;&#x3057;&#x305F;&#xFF08;MLS&#x4EE5;&#x5916;&#x306F;&#x5206;&#x304B;&#x308A;&#x307E;&#x305B;&#x3093;&#x304C;&#xFF09;&#x3002;&#x306A;&#x3093;&#x306A;&#x3089;&#x500B;&#x4EBA;&#x7684;&#x306B;SAA&#x306E;&#x65B9;&#x304C;&#x96E3;&#x3057;&#x304B;&#x3063;&#x305F;&#x3067;&#x3059;&#x3002;<br>
&#x6295;&#x8CC7;(&#x304A;&#x91D1;)&#x3092;&#x60DC;&#x3057;&#x307E;&#x306A;&#x3044;&#x306E;&#x3067;&#x3042;&#x308C;&#x3070;&#x3001;&#x3068;&#x308A;&#x3042;&#x3048;&#x305A;&#x53D6;&#x3063;&#x3068;&#x3053;&#x3046;&#x304F;&#x3089;&#x3044;&#x306E;&#x611F;&#x899A;&#x3067;&#x53D6;&#x3063;&#x3061;&#x3083;&#x3046;&#x306E;&#x3082;&#x3044;&#x3044;&#x304B;&#x3082;&#x3057;&#x308C;&#x306A;&#x3044;&#x3067;&#x3059;&#x3002;</p>
<p>&#x4EE5;&#x4E0B;&#x306E;&#x65B9;&#x6CD5;&#x3067;&#x5B89;&#x304F;&#x53D7;&#x9A13;&#x3067;&#x304D;&#x307E;&#x3059;<br>
&#x30FB;&#x8CC7;&#x683C;&#x3092;&#x53D6;&#x5F97;&#x3059;&#x308B;&#x3068;&#x3001;&#x6B21;&#x56DE;&#x53D7;&#x9A13;&#x6642;&#x306B;&#x534A;&#x984D;&#x3067;&#x8A66;&#x9A13;&#x3092;&#x53D7;&#x3051;&#x308B;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x307E;&#x3059;&#x3002;<br>
&#x30FB;&#x516C;&#x5F0F;&#x30AD;&#x30E3;&#x30F3;&#x30DA;&#x30FC;&#x30F3;&#x3092;&#x78BA;&#x8A8D;&#x3057;&#x307E;&#x3057;&#x3087;&#x3046;&#x3002;&#x73FE;&#x5728;&#x306F;2025/2/15&#x307E;&#x3067;FOUNDATIONAL&#x306E;&#x518D;&#x53D7;&#x9A13;&#x304C;&#x7121;&#x6599;&#x306B;&#x306A;&#x308B;&#x30AD;&#x30E3;&#x30F3;&#x30DA;&#x30FC;&#x30F3;&#x3092;&#x3084;&#x3063;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;</p>
<blockquote>
<p>&#x52C9;&#x5F37;&#x671F;&#x9593;&#xFF1A;1&#x30F6;&#x6708;&#x304F;&#x3089;&#x3044;<br>
&#x53D7;&#x9A13;&#x6599;&#xFF1A;&#xA5;40,000<br>
&#x6709;&#x52B9;&#x671F;&#x9650;&#xFF1A;&#x53D6;&#x5F97;&#x304B;&#x3089;3&#x5E74;</p>
</blockquote>
<h3 id="%E4%BD%BF%E3%81%A3%E3%81%9F%E6%95%99%E6%9D%90">&#x4F7F;&#x3063;&#x305F;&#x6559;&#x6750;</h3>
<p>AWS Black Belt&#x3068;&#x3044;&#x3046;YouTube&#x52D5;&#x753B;<br>
<a href="https://x.gd/wTzjU">Udemy&#x306E;&#x6559;&#x6750;</a><br>
&#x203B;&#x8A66;&#x9A13;&#x3067;&#x306F;&#x3001;&#x3053;&#x306E;&#x554F;&#x984C;&#x96C6;&#x3068;&#x5168;&#x304F;&#x540C;&#x3058;&#x554F;&#x984C;&#x304C;&#x4F55;&#x554F;&#x304B;&#x51FA;&#x984C;&#x3055;&#x308C;&#x307E;&#x3057;&#x305F;</p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><h2 id="3%E5%BF%9C%E7%94%A8%E6%83%85%E5%A0%B1%E6%8A%80%E8%A1%93%E8%80%85%E8%A9%A6%E9%A8%93">3.&#x5FDC;&#x7528;&#x60C5;&#x5831;&#x6280;&#x8853;&#x8005;&#x8A66;&#x9A13;</h2>
<hr>
<p><img src="http://blog.shinonome.io/content/images/2024/12/pkin3a0000007xdp.png" alt="&#x8CC7;&#x683C;&#x306E;&#x8A71;" loading="lazy"><br>
&#x3010;&#x53C2;&#x8003;&#x3011;<a href="http://">https://x.gd/M4JOt</a></p>
<p>&#x5348;&#x524D;&#x8A66;&#x9A13;&#xFF1A;150&#x5206;<br>
&#x5348;&#x5F8C;&#x8A66;&#x9A13;&#xFF1A;150&#x5206;<br>
&#x8A08;&#xFF1A;300&#x5206;<br>
&#x9577;&#x3044;&#x3067;&#x3059;&#x306D;&#x3047;&#x3002;&#x5348;&#x524D;&#x306F;4&#x629E;&#x554F;&#x984C;&#x3001;&#x5348;&#x5F8C;&#x306F;&#x9577;&#x6587;&#x554F;&#x984C;&#x3067;&#x3059;&#x3002;<br>
&#x5348;&#x524D;&#x8A66;&#x9A13;&#x306F;&#x904E;&#x53BB;&#x554F;&#x304B;&#x3089;&#x540C;&#x3058;&#x554F;&#x984C;&#x3082;&#x51FA;&#x3066;&#x304D;&#x307E;&#x3059;&#x304C;&#x3001;&#x5348;&#x5F8C;&#x8A66;&#x9A13;&#x306F;&#x56DE;&#x306B;&#x3088;&#x3063;&#x3066;&#x96E3;&#x5EA6;&#x304C;&#x5927;&#x304D;&#x304F;&#x5909;&#x308F;&#x308B;&#x3053;&#x3068;&#x3082;&#x3042;&#x308B;&#x306E;&#x3067;&#x904B;&#x8981;&#x7D20;&#x9AD8;&#x3081;&#x3067;&#x3059;&#x3002;<br>
&#x5348;&#x5F8C;&#x8A66;&#x9A13;&#x306F;&#x3001;&#x89E3;&#x304F;&#x554F;&#x984C;&#x3092;4&#x3064;&#x9078;&#x3079;&#x308B;&#x306E;&#x3067;&#x3059;&#x304C;&#x3001;6&#x3064;&#x304F;&#x3089;&#x3044;&#x5BFE;&#x7B56;&#x3057;&#x3066;&#x304A;&#x304D;&#x307E;&#x3057;&#x3087;&#x3046;&#x3002;</p>
<p>&#x4F55;&#x304B;&#x3089;&#x59CB;&#x3081;&#x305F;&#x3089;&#x3044;&#x3044;&#x304B;&#x5206;&#x304B;&#x3089;&#x306A;&#x3044;IT&#x521D;&#x5FC3;&#x8005;&#x306A;&#x3069;&#x306B;&#x304A;&#x3059;&#x3059;&#x3081;&#x3067;&#x3059;&#x3002;&#x305D;&#x308C;&#x306B;&#x3001;&#x7D50;&#x69CB;&#x77E5;&#x540D;&#x5EA6;&#x304C;&#x3042;&#x308B;&#x306E;&#x3067;&#x65E5;&#x672C;&#x3067;&#x306F;&#x8A55;&#x4FA1;&#x3055;&#x308C;&#x307E;&#x3059;&#x3002;</p>
<p>&#x57FA;&#x672C;&#x60C5;&#x5831;&#x304B;&#x3089;&#x59CB;&#x3081;&#x308B;&#x65B9;&#x3082;&#x3044;&#x307E;&#x3059;&#x304C;&#x3001;&#x3086;&#x304F;&#x3086;&#x304F;&#x5FDC;&#x7528;&#x60C5;&#x5831;&#x3092;&#x53D6;&#x308B;&#x3064;&#x3082;&#x308A;&#x3067;&#x3042;&#x308C;&#x3070;&#x3001;&#x57FA;&#x672C;&#x60C5;&#x5831;&#x3092;&#x53D7;&#x3051;&#x308B;&#x5FC5;&#x8981;&#x306F;&#x306A;&#x3044;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x3002;<br>
&#x52C9;&#x5F37;&#x65B9;&#x6CD5;&#x3068;&#x3057;&#x3066;&#x306F;&#x3001;&#x53C2;&#x8003;&#x66F8;&#x3092;&#x8AAD;&#x3093;&#x3067;&#x304B;&#x3089;&#x904E;&#x53BB;&#x554F;&#x3092;&#x89E3;&#x304D;&#x307E;&#x3059;&#x3002;&#x904E;&#x53BB;&#x554F;&#x304B;&#x3089;&#x89E3;&#x3044;&#x3066;&#x3082;&#x3044;&#x3044;&#x3067;&#x3059;&#x304C;&#x3001;&#x96E3;&#x3057;&#x304F;&#x3066;&#x5FC3;&#x304C;&#x6298;&#x308C;&#x308B;&#x53EF;&#x80FD;&#x6027;&#x304C;&#x3042;&#x308A;&#x307E;&#x3059;&#x3002;<br>
&#x53C2;&#x8003;&#x66F8;&#x304C;&#x96E3;&#x3057;&#x304F;&#x611F;&#x3058;&#x305F;&#x5834;&#x5408;&#x306F;&#x3001;<a href="https://www.youtube.com/@kihonzyouhou">YouTube&#x306E;&#x89E3;&#x8AAC;&#x52D5;&#x753B;</a>&#x3092;&#x898B;&#x305F;&#x308A;&#x3001;AI&#x306B;&#x805E;&#x3044;&#x305F;&#x308A;&#x3057;&#x3066;&#x3044;&#x307E;&#x3057;&#x305F;&#x3002;</p>
<blockquote>
<p>&#x52C9;&#x5F37;&#x671F;&#x9593;&#xFF1A;2&#x30F6;&#x6708;&#x304F;&#x3089;&#x3044;<br>
&#x53D7;&#x9A13;&#x6599;&#xFF1A;&#xA5;7,500</p>
</blockquote>
<h3 id="%E4%BD%BF%E3%81%A3%E3%81%9F%E6%95%99%E6%9D%90">&#x4F7F;&#x3063;&#x305F;&#x6559;&#x6750;</h3>
<p>&#x904E;&#x53BB;&#x554F;&#x9053;&#x5834;<br>
<a href="https://www.youtube.com/@kihonzyouhou">&#x3010;&#x57FA;&#x672C;&#x60C5;&#x5831;&#x6280;&#x8853;&#x8005;&#x8A66;&#x9A13;YouTuber&#x3011;&#x3059;&#x30FC;&#x3055;&#x3093;</a><br>
&#x203B;&#x57FA;&#x672C;&#x60C5;&#x5831;&#x306E;&#x30C1;&#x30E3;&#x30F3;&#x30CD;&#x30EB;&#x3067;&#x3059;&#x304C;&#x3001;&#x5FDC;&#x7528;&#x60C5;&#x5831;&#x3082;&#x307B;&#x3068;&#x3093;&#x3069;&#x540C;&#x3058;&#x3067;&#x3059;&#x3002;<br>
&#x300E;2024&#x3000;&#x9AD8;&#x5EA6;&#x5348;&#x524D;&#x2160;&#x30FB;&#x5FDC;&#x7528;&#x60C5;&#x5831;&#x3000;&#x5348;&#x524D;&#x8A66;&#x9A13;&#x5BFE;&#x7B56;&#x66F8;&#x300F;<br>
&#x300E;2024&#x3000;&#x5FDC;&#x7528;&#x60C5;&#x5831;&#x6280;&#x8853;&#x8005;&#x3000;&#x5348;&#x5F8C;&#x554F;&#x984C;&#x306E;&#x91CD;&#x70B9;&#x5BFE;&#x7B56;&#x300F;<br>
&#x300E;&#x30CB;&#x30E5;&#x30FC;&#x30B9;&#x30DA;&#x30C3;&#x30AF;&#x30C6;&#x30AD;&#x30B9;&#x30C8; &#x5FDC;&#x7528;&#x60C5;&#x5831;&#x6280;&#x8853;&#x8005; 2024&#x5E74;&#x5EA6;&#x7248;&#x300F;&#x203B;&#x5348;&#x524D;&#x3068;&#x5348;&#x5F8C;&#x3092;&#x30AB;&#x30D0;&#x30FC;<br>
&#x203B;&#x53C2;&#x8003;&#x66F8;&#x306E;1&#x3064;&#x76EE;&#x3068;3&#x3064;&#x76EE;&#x306F;&#x3069;&#x3063;&#x3061;&#x304B;&#x7247;&#x65B9;&#x3067;&#x3044;&#x3044;&#x3067;&#x3059;&#x3002;</p>
<!--kg-card-end: markdown--><p></p><!--kg-card-begin: markdown--><h2 id="4e%E8%B3%87%E6%A0%BC">4.E&#x8CC7;&#x683C;</h2>
<p><img src="http://blog.shinonome.io/content/images/2024/12/JDLA-Deep-Learning-for-ENGINEER-2024--2_image--1-.png" alt="&#x8CC7;&#x683C;&#x306E;&#x8A71;" loading="lazy"><br>
G&#x691C;&#x5B9A;&#x306F;&#x30D3;&#x30B8;&#x30CD;&#x30B9;&#x5411;&#x3051;&#x3001;E&#x8CC7;&#x683C;&#x306F;&#x30A8;&#x30F3;&#x30B8;&#x30CB;&#x30A2;&#x5411;&#x3051;&#x3068;&#x8A00;&#x308F;&#x308C;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;&#x3053;&#x3053;&#x3067;&#x306F;E&#x8CC7;&#x683C;&#x3092;&#x7D39;&#x4ECB;&#x3057;&#x307E;&#x3059;&#x304C;&#x3001;G&#x691C;&#x5B9A;&#x3067;&#x3082;&#x5341;&#x5206;&#x3060;&#x3068;&#x81EA;&#x5206;&#x306F;&#x601D;&#x3044;&#x307E;&#x3059;&#x3002;G&#x691C;&#x5B9A;&#x306F;&#x53D7;&#x9A13;&#x6599;&#x304C;&#xA5;5,500&#x3068;&#x826F;&#x5FC3;&#x7684;&#x306A;&#x91D1;&#x984D;&#x3067;&#x3042;&#x308B;&#x3046;&#x3048;&#x3001;&#x53D7;&#x9A13;&#x6761;&#x4EF6;&#x3082;&#x3042;&#x308A;&#x307E;&#x305B;&#x3093;&#x3002;</p>
<p>&#x5185;&#x5BB9;&#x306F;&#x96E3;&#x3057;&#x3044;&#x3067;&#x3059;&#x304C;&#x3001;&#x53D7;&#x304B;&#x308B;&#x305F;&#x3081;&#x306B;&#x5FC5;&#x8981;&#x306A;&#x70B9;&#x6570;&#x306F;&#x3042;&#x307E;&#x308A;&#x9AD8;&#x304F;&#x306A;&#x3044;&#x3068;&#x601D;&#x308F;&#x308C;&#x307E;&#x3059;&#x3002;<br>
2024#2&#x3067;&#x306F;5&#x5272;&#x3082;&#x6E80;&#x305F;&#x306A;&#x3044;&#x65B9;&#x3067;&#x3082;&#x5408;&#x683C;&#x3055;&#x308C;&#x3066;&#x3044;&#x308B;&#x65B9;&#x304C;&#x3044;&#x307E;&#x3057;&#x305F;&#x3002;</p>
<blockquote>
<p>&#x52C9;&#x5F37;&#x671F;&#x9593;&#xFF1A;&#x4EBA;&#x306B;&#x3088;&#x308B;<br>
&#xFF08;&#x76EE;&#x5B89;&#xFF1A;JDLA&#x8A8D;&#x5B9A;&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30E0;1&#x30F6;&#x6708; + &#x5BFE;&#x7B56;2&#x30F6;&#x6708;&#xFF09;<br>
&#x8CBB;&#x7528;&#xFF1A;<br>
JDLA&#x8A8D;&#x5B9A;&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30E0;&#xFF08;&#x6700;&#x5B89;:&#xA5;25,300&#xFF09;+ &#x53D7;&#x9A13;&#x6599;&#xFF08;&#x5B66;&#x751F;&#xFF1A;&#xA5;22,000&#xFF09;+ &#x53C2;&#x8003;&#x66F8;&#xFF08;&#xA5;6,050&#xFF09;= &#xA5;53,350</p>
</blockquote>
<h3 id="%E7%AF%80%E7%B4%84%E6%96%B9%E6%B3%95">&#x7BC0;&#x7D04;&#x65B9;&#x6CD5;</h3>
<h4 id="%E3%83%BBjdla%E8%AA%8D%E5%AE%9A%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0">&#x30FB;JDLA&#x8A8D;&#x5B9A;&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30E0;</h4>
<p>&#x8CBB;&#x7528;&#x3092;&#x6291;&#x3048;&#x308B;&#x305F;&#x3081;&#x306B;&#x306F;JDLA&#x8A8D;&#x5B9A;&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30E0;&#x9078;&#x3073;&#x304C;&#x91CD;&#x8981;&#x3002;<br>
&#x53D7;&#x8B1B;&#x6599;&#x306F;&#x8B1B;&#x5EA7;&#x306B;&#x3088;&#x3063;&#x3066;&#x5927;&#x304D;&#x304F;&#x5909;&#x308F;&#x308A;&#x3001;&#x7D04;7&#x4E07;&#x5186;&#xFF5E;80&#x4E07;&#x5186;&#x7A0B;&#x5EA6;&#x306E;&#x3082;&#x306E;&#x307E;&#x3067;&#x3042;&#x308B;&#x3089;&#x3057;&#x3044;&#xFF08;&#x307B;&#x307C;&#x307C;&#x3063;&#x25CB;&#x304F;&#x308A;&#x3067;&#x3059;&#x306D;&#xFF09;&#x3002;<br>
&#x50D5;&#x304C;&#x53D7;&#x8B1B;&#x3057;&#x305F;&#x8B1B;&#x5EA7;&#x306F;&#x3001;&#x4ECA;&#x5B58;&#x5728;&#x3059;&#x308B;&#x8B1B;&#x5EA7;&#x306E;&#x4E2D;&#x3067;&#x4E00;&#x756A;&#x5B89;&#x3044;&quot;&#x30E9;&#x30D3;&#x30C3;&#x30C8;&#x30FB;&#x30C1;&#x30E3;&#x30EC;&#x30F3;&#x30B8;&quot;&#x3068;&#x3044;&#x3046;&#x8B1B;&#x5EA7;&#x3067;&#x3059;&#x3002;<br>
&#x3053;&#x306E;&#x8B1B;&#x5EA7;&#x306F;&#x5165;&#x4F1A;&#x91D1;&#xA5;22,000+&#xFFE5;3,300/&#x6708;&#x3068;&#x3044;&#x3046;&#x30D7;&#x30E9;&#x30F3;&#x3067;&#x3001;1&#x30F6;&#x6708;&#x3067;&#x4FEE;&#x4E86;&#x3055;&#x305B;&#x308B;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x308C;&#x3070;&#x3001;&#xA5;25,300&#x3067;&#x6E08;&#x307F;&#x307E;&#x3059;&#x3002;&#x305F;&#x3060;&#x3001;&#x7559;&#x610F;&#x3057;&#x306A;&#x3051;&#x308C;&#x3070;&#x3044;&#x3051;&#x306A;&#x3044;&#x70B9;&#x306F;&#x3001;1&#x30F6;&#x6708;&#x4EE5;&#x5185;&#x3067;&#x4FEE;&#x4E86;&#x3057;&#x305F;&#x3068;&#x3057;&#x3066;&#x3082;&#xFF12;&#x30F6;&#x6708;&#x5206;&#x6255;&#x3046;&#x3053;&#x3068;&#x306B;&#x306A;&#x308B;&#x5834;&#x5408;&#x304C;&#x3042;&#x308B;&#x3053;&#x3068;&#x3067;&#x3059;&#x3002;&#x8A73;&#x7D30;&#x306F;<a href="https://x.gd/4ALvV7">&#x3053;&#x3061;&#x3089;</a></p>
<h3 id="%E6%B3%A8%E6%84%8F%E7%82%B9">&#x6CE8;&#x610F;&#x70B9;</h3>
<h4 id="%E3%83%BB%E5%8F%97%E9%A8%93%E6%96%99">&#x30FB;&#x53D7;&#x9A13;&#x6599;</h4>
<p>&#x4E88;&#x7D04;&#x671F;&#x9650;&#x306F;&#x53D7;&#x9A13;&#x65E5;&#x524D;&#x65E5;&#x3067;&#x3059;&#x304C;&#x3001;<strong>&#x5B66;&#x751F;&#x5272;&#x5F15;</strong>&#x3092;&#x5229;&#x7528;&#x3055;&#x308C;&#x308B;&#x5834;&#x5408;&#x306F;&#x3001;&#x65E9;&#x3081;&#x306B;&#x305D;&#x306E;&#x7533;&#x8ACB;&#x3092;&#x3059;&#x308B;&#x5FC5;&#x8981;&#x304C;&#x3042;&#x308A;&#x307E;&#x3059;&#x3002;&#xFF08;&#x9593;&#x306B;&#x5408;&#x308F;&#x306A;&#x304B;&#x3063;&#x305F;&#x4EBA;&#x9593;&#x304C;&#x3053;&#x3053;&#x306B;&#x3044;&#x307E;&#x3059;&#xFF09;<br>
<a href="http://">https://x.gd/inWmi</a></p>
<h4 id="%E3%83%BB%E6%96%B0%E3%82%B7%E3%83%A9%E3%83%90%E3%82%B9">&#x30FB;&#x65B0;&#x30B7;&#x30E9;&#x30D0;&#x30B9;</h4>
<p>E&#x8CC7;&#x683C;&#xFF08;&#x30A8;&#x30F3;&#x30B8;&#x30CB;&#x30A2;&#x8CC7;&#x683C;&#xFF09;2024 #2&#x304B;&#x3089;&#x30B7;&#x30E9;&#x30D0;&#x30B9;&#xFF08;&#x51FA;&#x984C;&#x7BC4;&#x56F2;&#xFF09;&#x304C;&#x5909;&#x66F4;&#x3055;&#x308C;&#x307E;&#x3057;&#x305F;&#x3002;<br>
E&#x8CC7;&#x683C;&#x306E;&#x53C2;&#x8003;&#x66F8;&#x3068;&#x3044;&#x3048;&#x3070;&#x9ED2;&#x672C;&#x3067;&#x3059;&#x304C;&#x3001;&#x65E7;&#x30B7;&#x30E9;&#x30D0;&#x30B9;&#x7528;&#x3067;&#x3059;&#x3002;&#x3059;&#x3067;&#x306B;&#x65B0;&#x30B7;&#x30E9;&#x30D0;&#x30B9;&#x5BFE;&#x5FDC;&#x306E;&#x53C2;&#x8003;&#x66F8;&#x304C;&#x51FA;&#x7248;&#x3055;&#x308C;&#x3066;&#x3044;&#x308B;&#x3089;&#x3057;&#x3044;&#x306E;&#x3067;&#x305D;&#x3061;&#x3089;&#x3092;&#x8CFC;&#x5165;&#x3055;&#x308C;&#x305F;&#x65B9;&#x304C;&#x3044;&#x3044;&#x304B;&#x3082;&#x3057;&#x308C;&#x307E;&#x305B;&#x3093;&#x3002;<a href="https://x.gd/om0wm">https://x.gd/om0wm</a></p>
<p>&#x50D5;&#x304C;&#x53D7;&#x9A13;&#x3057;&#x305F;&#x6642;&#x306F;&#x65B0;&#x30B7;&#x30E9;&#x30D0;&#x30B9;&#x306E;&#x6559;&#x6750;&#x304C;&#x306A;&#x304B;&#x3063;&#x305F;&#x306E;&#x3067;&#x3001;&#x65B0;&#x30B7;&#x30E9;&#x30D0;&#x30B9;&#x306E;&#x7528;&#x8A9E;&#x304B;&#x3089;&#x8272;&#x3005;&#x8ABF;&#x3079;&#x307E;&#x3057;&#x305F;&#x3002;<br>
&#x305D;&#x306E;&#x6642;&#x306B;&#x53C2;&#x8003;&#x306B;&#x306A;&#x3063;&#x305F;&#x30B5;&#x30A4;&#x30C8;&#x304C;&#x30E1;&#x30E2;&#x306B;&#x6B8B;&#x3063;&#x3066;&#x3044;&#x305F;&#x306E;&#x3067;&#x3001;&#x3053;&#x3053;&#x306B;&#x3082;&#x8A8D;&#x3081;&#x3066;&#x304A;&#x304D;&#x307E;&#x3059;&#x3002;</p>
<p><a href="https://qiita.com/kazuyaminakuchi/items/c3a0066e90cfdfc8a859">&#x30CA;&#x30A4;&#x30FC;&#x30D6;&#x30D9;&#x30A4;&#x30BA;</a><br>
<a href="https://qiita.com/jyori112/items/80b21422b15753a1c5a4">&#x6700;&#x5C24;&#x63A8;&#x5B9A;&#x3001;MAP&#x63A8;&#x5B9A;&#x3001;&#x30D9;&#x30A4;&#x30BA;&#x63A8;&#x5B9A;</a><br>
<a href="https://sitest.jp/blog/?p=6784">&#x30E6;&#x30FC;&#x30AF;&#x30EA;&#x30C3;&#x30C9;&#x8DDD;&#x96E2;&#x3001;&#x30DE;&#x30F3;&#x30CF;&#x30C3;&#x30BF;&#x30F3;&#x8DDD;&#x96E2;&#x3001;&#x30DE;&#x30CF;&#x30E9;&#x30CE;&#x30D3;&#x30B9;&#x8DDD;&#x96E2;&#x3001;Lp&#x8DDD;&#x96E2;</a><br>
<a href="https://qiita.com/fridericusgauss/items/f3d8575abfe7f67f1d7d">&#x30E6;&#x30FC;&#x30AF;&#x30EA;&#x30C3;&#x30C9;&#x8DDD;&#x96E2;&#x3001;&#x30DE;&#x30F3;&#x30CF;&#x30C3;&#x30BF;&#x30F3;&#x8DDD;&#x96E2;&#x3001;&#x30DE;&#x30CF;&#x30E9;&#x30CE;&#x30D3;&#x30B9;&#x8DDD;&#x96E2;&#x3001;Lp&#x8DDD;&#x96E2;</a><br>
<a href="https://di-acc2.com/analytics/ai/10801/">micro&#x5E73;&#x5747;/macro&#x5E73;&#x5747;</a><br>
<a href="https://teratail.com/questions/204358">Lp pooling</a><br>
<a href="https://deepsquare.jp/2021/08/wideresnet/">WideResNet</a><br>
<a href="https://dx-consultant-fast-evolving.com/mobilenet/">MobileNet</a><br>
<a href="https://www.acceluniverse.com/blog/developers/2020/02/SSD.html">SSD</a><br>
<a href="https://cvml-expertguide.net/terms/dl/object-detection/faster-r-cnn/">Faster r cnn</a><br>
<a href="https://qiita.com/shtmr/items/4283c851bc3d9721ed96">Faster r cnn</a><br>
<a href="https://www.skillupai.com/blog/tech/segmentation1/">&#x30C0;&#x30A4;&#x30EC;&#x30A4;&#x30C8;&#x7573;&#x307F;&#x8FBC;&#x307F;</a><br>
<a href="https://dx-consultant-fast-evolving.com/googlenet/">GoogleNet</a><br>
<a href="https://data-analytics.fun/2022/09/15/instance-normalization/">&#x30B9;&#x30BF;&#x30A4;&#x30EB;&#x5909;&#x63DB;&#x306E;&#x30A4;&#x30F3;&#x30B9;&#x30BF;&#x30F3;&#x30B9;&#x6B63;&#x898F;&#x5316;</a><br>
<a href="https://qiita.com/tancoro/items/35d0925de74f21bfff14">&#x8DDD;&#x96E2;&#x5B66;&#x7FD2;</a><br>
<a href="https://tech-blog.optim.co.jp/entry/2021/10/01/100000">&#x8DDD;&#x96E2;&#x5B66;&#x7FD2;</a><br>
<a href="https://youtu.be/XOekdMBhMxU?si=hqNYQ2SNMBEf8xFU">Transformer</a><br>
<a href="https://qiita.com/omiita/items/0049ade809c4817670d7">Vision Transformer</a><br>
<a href="https://data-analytics.fun/2020/09/04/understanding-gelu/">GELU&#x95A2;&#x6570;</a><br>
<a href="https://qiita.com/Nurkic/items/a382fc84a34fd0ae9400">&#x5B9D;&#x304F;&#x3058;&#x4EEE;&#x8AAC;</a><br>
<a href="https://x.gd/9aBzB">&#x8EFD;&#x91CF;&#x5316;</a><br>
<a href="https://qiita.com/cvcarnavi/items/68dcda71e90321574a2b">YOLO</a><br>
<a href="https://cvml-expertguide.net/terms/dl/layers/convolution-layer/grouped-convolution/">&#x30B0;&#x30EB;&#x30FC;&#x30D7;&#x7573;&#x307F;&#x8FBC;&#x307F;</a><br>
<a href="https://qiita.com/cyberailab/items/d11862852eccc17585e8">SegNet</a><br>
<a href="https://cvml-expertguide.net/terms/dl/semantic-segmentation/fcn/">FCN</a><br>
<a href="https://maruring.hatenablog.com/entry/2021/07/17/115103">&#x53CC;&#x65B9;&#x5411;RNN</a><br>
<a href="https://nisshingeppo.com/ai/whats-ensemble/">&#x30A2;&#x30F3;&#x30B5;&#x30F3;&#x30D6;&#x30EB;&#x5B66;&#x7FD2;</a><br>
<a href="https://qiita.com/RAD0N/items/7a192a4a5351f481c99f">kd-tree</a></p>
<h3 id="%E4%BD%BF%E3%81%A3%E3%81%9F%E6%95%99%E6%9D%90">&#x4F7F;&#x3063;&#x305F;&#x6559;&#x6750;</h3>
<p>&#x300E;&#x5FB9;&#x5E95;&#x653B;&#x7565;&#x30C7;&#x30A3;&#x30FC;&#x30D7;&#x30E9;&#x30FC;&#x30CB;&#x30F3;&#x30B0;E&#x8CC7;&#x683C;&#x30A8;&#x30F3;&#x30B8;&#x30CB;&#x30A2;&#x554F;&#x984C;&#x96C6; &#x5FB9;&#x5E95;&#x653B;&#x7565;&#x30B7;&#x30EA;&#x30FC;&#x30BA;&#x300F;<br>
&#x203B;&#x3044;&#x308F;&#x3086;&#x308B;&#x9ED2;&#x672C;&#x3002;&#x65E7;&#x30B7;&#x30E9;&#x30D0;&#x30B9;&#x5BFE;&#x5FDC;&#x306A;&#x306E;&#x3067;&#x3001;&#x4F7F;&#x3046;&#x3068;&#x3057;&#x3066;&#x3082;&#x5148;&#x306B;&#x65B0;&#x30B7;&#x30E9;&#x30D0;&#x30B9;&#x306B;&#x76EE;&#x3092;&#x901A;&#x3057;&#x3066;&#x304F;&#x3060;&#x3055;&#x3044;<br>
&#x300E;&#x30BC;&#x30ED;&#x304B;&#x3089;&#x4F5C;&#x308B;Deep Learning &#x2015;Python&#x3067;&#x5B66;&#x3076;&#x30C7;&#x30A3;&#x30FC;&#x30D7;&#x30E9;&#x30FC;&#x30CB;&#x30F3;&#x30B0;&#x306E;&#x7406;&#x8AD6;&#x3068;&#x5B9F;&#x88C5;&#x300F;<br>
&#x300E;&#x30BC;&#x30ED;&#x304B;&#x3089;&#x4F5C;&#x308B;Deep Learning &#x2777; &#x2015;&#x81EA;&#x7136;&#x8A00;&#x8A9E;&#x51E6;&#x7406;&#x7DE8;&#x300F;<br>
&#x300E;&#x30BC;&#x30ED;&#x304B;&#x3089;&#x4F5C;&#x308B;Deep Learning &#x2779; &#x2015;&#x5F37;&#x5316;&#x5B66;&#x7FD2;&#x7DE8;&#x300F;<br>
&#x300E;&#x751F;&#x6210; Deep Learning &#x7B2C;2&#x7248;&#x300F;<br>
&#x300E;GAN&#x30C7;&#x30A3;&#x30FC;&#x30D7;&#x30E9;&#x30FC;&#x30CB;&#x30F3;&#x30B0;&#x5B9F;&#x88C5;&#x30CF;&#x30F3;&#x30C9;&#x30D6;&#x30C3;&#x30AF;&#x300F;<br>
&#x203B;&#x30BC;&#x30ED;&#x3064;&#x304F;&#x306F;&#x307B;&#x307C;&#x5FC5;&#x9808;&#x3068;&#x8003;&#x3048;&#x3066;&#x304F;&#x3060;&#x3055;&#x3044;&#x3002;&#x4E0B;&#x4E8C;&#x3064;&#x306F;&#x751F;&#x6210;AI,&#x3068;&#x308A;&#x308F;&#x3051;VAE&#x3084;GAN&#x306B;&#x3064;&#x3044;&#x3066;&#x308F;&#x304B;&#x308A;&#x3084;&#x3059;&#x304F;&#x89E3;&#x8AAC;&#x3055;&#x308C;&#x3066;&#x3044;&#x307E;&#x3059;</p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><p>&#x660E;&#x65E5;&#x306F; Yukari &#x3055;&#x3093;&#x3067;&#x3059;&#x3002;1&#x65E5;&#x65E9;&#x3044;&#x3051;&#x3069;&#x8A95;&#x751F;&#x65E5;&#x304A;&#x3081;&#x3067;&#x3068;&#x3046;&#x1F389;&#x1F389;&#x1F389;</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[トークンについて少し共有]]></title><description><![CDATA[PlayGround アドベントカレンダー 12/17担当のmotoakiです！
最近ログイン機能を実装していてトークンについて学んだので共有します！]]></description><link>http://blog.shinonome.io/about-token/</link><guid isPermaLink="false">675ea17f84f04652f6203edd</guid><category><![CDATA[バックエンド]]></category><dc:creator><![CDATA[PlayGround]]></dc:creator><pubDate>Mon, 16 Dec 2024 15:05:00 GMT</pubDate><media:content url="http://blog.shinonome.io/content/images/2024/12/----------2024-12-17-0.07.04.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h1 id="1-%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6">1. &#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x306B;&#x3064;&#x3044;&#x3066;</h1>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><img src="http://blog.shinonome.io/content/images/2024/12/----------2024-12-17-0.07.04.png" alt="&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x306B;&#x3064;&#x3044;&#x3066;&#x5C11;&#x3057;&#x5171;&#x6709;"><p>&#x4ECA;&#x56DE;&#x5B9F;&#x88C5;&#x3059;&#x308B;&#x306B;&#x3042;&#x305F;&#x308A;&#x30A2;&#x30AF;&#x30BB;&#x30B9;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x3068;&#x30EA;&#x30D5;&#x30EC;&#x30C3;&#x30B7;&#x30E5;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x3092;&#x4F7F;&#x7528;&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;<br>
&#x30A2;&#x30AF;&#x30BB;&#x30B9;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x306F;&#x6709;&#x52B9;&#x306A;&#x6642;&#x9593;&#x304C;&#x77ED;&#x304F;&#x3001;&#x3053;&#x306E;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x3092;&#x30D8;&#x30C3;&#x30C0;&#x30FC;&#x306B;&#x542B;&#x3081;&#x3066;&#x30EA;&#x30AF;&#x30A8;&#x30B9;&#x30C8;&#x3092;&#x9001;&#x308A;&#x307E;&#x3059;&#x3002;&#x30D0;&#x30C3;&#x30AF;&#x30A8;&#x30F3;&#x30C9;&#x3067;&#x51E6;&#x7406;&#x3092;&#x884C;&#x3046;&#x524D;&#x306B;&#x30A2;&#x30AF;&#x30BB;&#x30B9;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x306E;&#x8A8D;&#x8A3C;&#x3092;&#x3057;&#x3001;&#x30EA;&#x30AF;&#x30A8;&#x30B9;&#x30C8;&#x3092;&#x9001;&#x3063;&#x305F;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x304C;&#x30ED;&#x30B0;&#x30A4;&#x30F3;&#x6E08;&#x307F;&#x306E;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x304B;&#x5224;&#x5225;&#x3057;&#x307E;&#x3059;&#x3002;&#x30EA;&#x30D5;&#x30EC;&#x30C3;&#x30B7;&#x30E5;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x306F;&#x30A2;&#x30AF;&#x30BB;&#x30B9;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x3092;&#x9001;&#x3063;&#x305F;&#x969B;&#x306B;&#x671F;&#x9650;&#x304C;&#x5207;&#x308C;&#x3066;&#x3044;&#x305F;&#x6642;&#x306B;&#x3001;&#x30EA;&#x30D5;&#x30EC;&#x30C3;&#x30B7;&#x30E5;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x3092;&#x9001;&#x308A;&#x307E;&#x3059;&#x3002;&#x3053;&#x306E;&#x6642;&#x30EA;&#x30D5;&#x30EC;&#x30C3;&#x30B7;&#x30E5;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x3082;&#x6709;&#x52B9;&#x306A;&#x6642;&#x9593;&#x304C;&#x5236;&#x9650;&#x3055;&#x308C;&#x3066;&#x304A;&#x308A;&#x3001;&#x6709;&#x52B9;&#x3060;&#x3063;&#x305F;&#x5834;&#x5408;&#x306F;&#x8A8D;&#x8A3C;&#x304C;&#x901A;&#x308A;&#x30A2;&#x30AF;&#x30BB;&#x30B9;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x3092;&#x518D;&#x767A;&#x884C;&#x3067;&#x304D;&#x308B;&#x3088;&#x3046;&#x306B;&#x3057;&#x307E;&#x3059;&#x3002;&#x3082;&#x3057;&#x30EA;&#x30D5;&#x30EC;&#x30C3;&#x30B7;&#x30E5;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x3082;&#x6709;&#x52B9;&#x3067;&#x306A;&#x304B;&#x3063;&#x305F;&#x5834;&#x5408;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x306F;&#x30ED;&#x30B0;&#x30A4;&#x30F3;&#x3057;&#x306A;&#x304A;&#x3059;&#x5FC5;&#x8981;&#x304C;&#x3042;&#x308A;&#x307E;&#x3059;&#x3002;</p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><h1 id="2-%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E6%A9%9F%E8%83%BD%E3%81%AE%E3%83%95%E3%83%AD%E3%83%BC%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6">2. &#x30ED;&#x30B0;&#x30A4;&#x30F3;&#x6A5F;&#x80FD;&#x306E;&#x30D5;&#x30ED;&#x30FC;&#x306B;&#x3064;&#x3044;&#x3066;</h1>
<!--kg-card-end: markdown--><p>&#x4ECA;&#x56DE;&#x81EA;&#x5206;&#x304C;&#x5B9F;&#x88C5;&#x3057;&#x305F;&#x30ED;&#x30B0;&#x30A4;&#x30F3;&#x6A5F;&#x80FD;&#x306E;&#x7C21;&#x5358;&#x306A;&#x30D5;&#x30ED;&#x30FC;&#x3092;&#x8F09;&#x305B;&#x3066;&#x304A;&#x304D;&#x307E;&#x3059;</p><!--kg-card-begin: markdown--><ol>
<li>&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x540D;&#x3001;&#x30D1;&#x30B9;&#x30EF;&#x30FC;&#x30C9;&#x3092;body&#x306B;&#x542B;&#x3081;&#x3066;&#x30EA;&#x30AF;&#x30A8;&#x30B9;&#x30C8;&#x3092;&#x9001;&#x308B;&#x3002;</li>
<li>&#x30C7;&#x30FC;&#x30BF;&#x30D9;&#x30FC;&#x30B9;&#x304B;&#x3089;&#x30EA;&#x30AF;&#x30A8;&#x30B9;&#x30C8;&#x306E;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x540D;&#x3068;&#x4E00;&#x81F4;&#x3059;&#x308B;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x30A4;&#x30F3;&#x30B9;&#x30BF;&#x30F3;&#x30B9;&#x3092;&#x53D6;&#x5F97;&#x3059;&#x308B;</li>
<li>&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x30A4;&#x30F3;&#x30B9;&#x30BF;&#x30F3;&#x30B9;&#x306E;&#x30D1;&#x30B9;&#x30EF;&#x30FC;&#x30C9;&#x3068;&#x30EA;&#x30AF;&#x30A8;&#x30B9;&#x30C8;&#x306E;&#x30D1;&#x30B9;&#x30EF;&#x30FC;&#x30C9;&#x304C;&#x4E00;&#x81F4;&#x3057;&#x305F;&#x3089;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x767A;&#x884C;&#x3078;</li>
<li>&#x30A2;&#x30AF;&#x30BB;&#x30B9;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x3001;&#x30EA;&#x30D5;&#x30EC;&#x30C3;&#x30B7;&#x30E5;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x3092;&#x4F5C;&#x6210;&#x3057;&#x3001;&#x30EA;&#x30D5;&#x30EC;&#x30C3;&#x30B7;&#x30E5;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x306F;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x30A4;&#x30F3;&#x30B9;&#x30BF;&#x30F3;&#x30B9;&#x306B;&#x683C;&#x7D0D;&#x3059;&#x308B;</li>
<li>&#x30EA;&#x30D5;&#x30EC;&#x30C3;&#x30B7;&#x30E5;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x3068;&#x30A2;&#x30AF;&#x30BB;&#x30B9;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x3092;&#x30EC;&#x30B9;&#x30DD;&#x30F3;&#x30B9;&#x3068;&#x3057;&#x3066;&#x8FD4;&#x3059;&#x3002;</li>
</ol>
<!--kg-card-end: markdown--><p>&#x4EE5;&#x4E0A;&#x304C;&#x4ECA;&#x56DE;&#x81EA;&#x5206;&#x304C;&#x5B9F;&#x88C5;&#x3057;&#x305F;&#x30ED;&#x30B0;&#x30A4;&#x30F3;&#x6A5F;&#x80FD;&#x306E;&#x7C21;&#x5358;&#x306A;&#x30D5;&#x30ED;&#x30FC;&#x3067;&#x3059;</p><!--kg-card-begin: markdown--><h1 id="3-%E5%85%B7%E4%BD%93%E7%9A%84%E3%81%AA%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E5%91%A8%E3%82%8A%E3%81%AE%E8%A7%A3%E8%AA%AC">3. &#x5177;&#x4F53;&#x7684;&#x306A;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x5468;&#x308A;&#x306E;&#x89E3;&#x8AAC;</h1>
<!--kg-card-end: markdown--><p>&#x4EE5;&#x4E0B;&#x304C;&#x81EA;&#x5206;&#x304C;&#x5B9F;&#x88C5;&#x3057;&#x305F;&#x5B9F;&#x969B;&#x306E;&#x30B3;&#x30FC;&#x30C9;&#x3067;&#x3059;&#x3002;</p><!--kg-card-begin: markdown--><pre><code>var accessSecret = []byte(os.Getenv(&quot;ACCESS_SECRET_KEY&quot;))
var refreshSecret = []byte(os.Getenv(&quot;REFRESH_SECRET_KEY&quot;))

func (s *AuthService) GenerateTokens(username string) (accessToken, refreshToken string, err error) {
user, _ := s.userRepository.FindByUsername(username)
accessClaims := jwt.MapClaims{
	&quot;user_id&quot;: user.ID,
	&quot;exp&quot;:     time.Now().Add(time.Minute * 15).Unix(),
}
accessToken, err = jwt.NewWithClaims(jwt.SigningMethodHS256, accessClaims).SignedString(accessSecret)
if err != nil {
	return &quot;&quot;, &quot;&quot;, err
}

// &#x30EA;&#x30D5;&#x30EC;&#x30C3;&#x30B7;&#x30E5;&#x30C8;&#x30FC;&#x30AF;&#x30F3;
refreshClaims := jwt.MapClaims{
	&quot;user_id&quot;: user.ID,
	&quot;exp&quot;:     time.Now().Add(time.Hour * 24 * 7).Unix(), // &#x6709;&#x52B9;&#x671F;&#x9650;7&#x65E5;
}

refreshToken, err = jwt.NewWithClaims(jwt.SigningMethodHS256, refreshClaims).SignedString(refreshSecret)
if err != nil {
	return &quot;&quot;, &quot;&quot;, err
}

err = s.userRepository.CreateAccessToken(user, refreshToken)
if err != nil {
	return &quot;&quot;, &quot;&quot;, err
}

return accessToken, refreshToken, nil
}
</code></pre>
<!--kg-card-end: markdown--><p>JWT&#x306F;&#x4EE5;&#x4E0B;&#x306E;&#x3088;&#x3046;&#x306B;&#x69CB;&#x6210;&#x3055;&#x308C;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;</p><p>&lt;header&gt;.&lt;payload&gt;.&lt;signature&gt;</p><p>&#x3053;&#x306E;&#x6642;&#x3001;JWT&#x751F;&#x6210;&#x6642;&#x306B;header&#x306E;&#x30C7;&#x30FC;&#x30BF;&#x306F;&#x5909;&#x66F4;&#x3055;&#x308C;&#x305A;&#x306B;payload&#x304C;&#x52D5;&#x7684;&#x306A;&#x306E;&#x3067;&#x3001;&#x7570;&#x306A;&#x308B;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x3092;&#x751F;&#x6210;&#x3067;&#x304D;&#x308B;&#x306E;&#x306F;payload&#x304C;&#x52D5;&#x7684;&#x3060;&#x304B;&#x3089;&#x3067;&#x3059;&#x3002;&#x305D;&#x3057;&#x3066;signature&#x306F;payload&#x306B;&#x4F9D;&#x5B58;&#x3057;&#x3066;&#x3044;&#x308B;&#x306E;&#x3067;&#x3001;signature&#x3082;&#x52D5;&#x7684;&#x3067;&#x3059;&#x3002;</p><p>&#x4E0A;&#x8A18;&#x306E;&#x30B3;&#x30FC;&#x30C9;&#x3067;payload&#x306B;&#x8A72;&#x5F53;&#x3059;&#x308B;&#x306E;&#x306F;accessClaims&#x3068;refreshClaims&#x3067;&#x3059;&#x3002;&#x3053;&#x3053;&#x3067;&#x52D5;&#x7684;&#x306A;&#x7406;&#x7531;&#x306F;&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x898B;&#x3066;&#x3044;&#x305F;&#x3060;&#x3051;&#x308B;&#x3068;&#x5206;&#x304B;&#x308B;&#x901A;&#x308A;&#x3001;&#x6709;&#x52B9;&#x671F;&#x9650;&#x304C;&#x30C7;&#x30FC;&#x30BF;&#x306B;&#x542B;&#x307E;&#x308C;&#x3066;&#x3044;&#x3066;&#x3001;&#x305D;&#x306E;&#x6709;&#x52B9;&#x671F;&#x9650;&#x306F;&#x305D;&#x306E;&#x6642;&#x70B9;&#x306E;&#x6642;&#x9593;&#x304C;&#x95A2;&#x4FC2;&#x3057;&#x3066;&#x3044;&#x308B;&#x306E;&#x3067;&#x3001;payload&#x304C;&#x52D5;&#x7684;&#x3060;&#x3068;&#x308F;&#x304B;&#x308A;&#x307E;&#x3059;&#x3002;</p><!--kg-card-begin: markdown--><h1 id="4-%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%AF%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E5%81%B4%E3%81%A7%E4%BF%9D%E5%AD%98%E3%81%97%E3%81%AA%E3%81%8F%E3%81%A6%E8%89%AF%E3%81%84%E3%81%AE%E3%81%8B">4. &#x30A2;&#x30AF;&#x30BB;&#x30B9;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x306F;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x5074;&#x3067;&#x4FDD;&#x5B58;&#x3057;&#x306A;&#x304F;&#x3066;&#x826F;&#x3044;&#x306E;&#x304B;</h1>
<!--kg-card-end: markdown--><p>&#x5B9F;&#x88C5;&#x3057;&#x3066;&#x3044;&#x308B;&#x6642;&#x306B;&#x30EA;&#x30D5;&#x30EC;&#x30C3;&#x30B7;&#x30E5;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x306F;&#x30C7;&#x30FC;&#x30BF;&#x30D9;&#x30FC;&#x30B9;&#x306B;&#x4FDD;&#x5B58;&#x3057;&#x3066;&#x3044;&#x308B;&#x306E;&#x306B;&#x30A2;&#x30AF;&#x30BB;&#x30B9;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x306F;&#x4FDD;&#x5B58;&#x3057;&#x306A;&#x3044;&#x3053;&#x3068;&#x306B;&#x7591;&#x554F;&#x3092;&#x6301;&#x3063;&#x305F;&#x306E;&#x3067;&#x7C21;&#x5358;&#x306B;&#x89E3;&#x8AAC;&#x3057;&#x307E;&#x3059;&#x3002;</p><!--kg-card-begin: markdown--><h2 id="%E3%81%9D%E3%82%82%E3%81%9D%E3%82%82%E4%BD%95%E3%81%A7%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AB%E4%BF%9D%E5%AD%98%E3%81%97%E3%82%88%E3%81%86%E3%81%A8%E6%80%9D%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%8B">&#x305D;&#x3082;&#x305D;&#x3082;&#x4F55;&#x3067;&#x30C7;&#x30FC;&#x30BF;&#x30D9;&#x30FC;&#x30B9;&#x306B;&#x4FDD;&#x5B58;&#x3057;&#x3088;&#x3046;&#x3068;&#x601D;&#x3063;&#x305F;&#x306E;&#x304B;</h2>
<p>&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x3092;&#x4F7F;&#x7528;&#x3059;&#x308B;&#x7406;&#x7531;&#x306F;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x304C;&#x30ED;&#x30B0;&#x30A4;&#x30F3;&#x3057;&#x3066;&#x3044;&#x308B;&#x304B;&#x5224;&#x5225;&#x3059;&#x308B;&#x305F;&#x3081;&#x3067;&#x3059;&#x3002;<br>
&#x30EA;&#x30AF;&#x30A8;&#x30B9;&#x30C8;&#x3092;&#x9001;&#x3063;&#x3066;&#x304D;&#x305F;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x306B;&#x5BFE;&#x3057;&#x3066;&#x6B63;&#x5E38;&#x306A;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x3067;&#x3042;&#x308B;&#x3068;&#x8A8D;&#x8A3C;&#x3057;&#x306A;&#x3051;&#x308C;&#x3070;&#x306A;&#x308A;&#x307E;&#x305B;&#x3093;&#x3002;&#x3053;&#x3053;&#x3067;&#x81EA;&#x5206;&#x306F;&#x767A;&#x884C;&#x3057;&#x305F;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x3092;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x5074;&#x3067;&#x3082;&#x4FDD;&#x5B58;&#x3057;&#x3066;&#x304A;&#x304D;&#x3001;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x306E;&#x30EA;&#x30AF;&#x30A8;&#x30B9;&#x30C8;&#x306B;&#x542B;&#x307E;&#x308C;&#x308B;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x3068;&#x7167;&#x5408;&#x3057;&#x3066;&#x8A8D;&#x8A3C;&#x3059;&#x308C;&#x3070;&#x826F;&#x3044;&#x306E;&#x3067;&#x306F;&#x306A;&#x3044;&#x304B;&#x3068;&#x8003;&#x3048;&#x307E;&#x3057;&#x305F;&#x3002;&#x306A;&#x306E;&#x3067;&#x8A8D;&#x8A3C;&#x3059;&#x308B;&#x4E0A;&#x3067;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x3092;&#x3053;&#x3061;&#x3089;&#x3067;&#x3082;&#x6301;&#x3063;&#x3066;&#x304A;&#x304B;&#x306A;&#x3044;&#x3068;&#x8A8D;&#x8A3C;&#x3067;&#x304D;&#x306A;&#x3044;&#x306E;&#x3067;&#x306F;&#x306A;&#x3044;&#x304B;&#x3068;&#x601D;&#x3063;&#x3066;&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;</p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><h2 id="%E3%81%AA%E3%81%9C%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E5%81%B4%E3%81%A7%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%82%92%E4%BF%9D%E5%AD%98%E3%81%97%E3%81%AA%E3%81%8F%E3%81%A6%E3%82%82%E8%AA%8D%E8%A8%BC%E3%81%A7%E3%81%8D%E3%82%8B%E3%81%AE%E3%81%8B">&#x306A;&#x305C;&#x30B5;&#x30FC;&#x30D0;&#x30FC;&#x5074;&#x3067;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x3092;&#x4FDD;&#x5B58;&#x3057;&#x306A;&#x304F;&#x3066;&#x3082;&#x8A8D;&#x8A3C;&#x3067;&#x304D;&#x308B;&#x306E;&#x304B;</h2>
<p>&#x3053;&#x3053;&#x3067;&#x91CD;&#x8981;&#x306A;&#x306E;&#x304C;&#x30B7;&#x30FC;&#x30AF;&#x30EC;&#x30C3;&#x30C8;&#x30AD;&#x30FC;&#x3067;&#x3059;&#x3002;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x306E;signature&#x306E;&#x90E8;&#x5206;&#x306F;header&#x3068;payload&#x3068;&#x30B7;&#x30FC;&#x30AF;&#x30EC;&#x30C3;&#x30C8;&#x30AD;&#x30FC;&#x3092;&#x7528;&#x3044;&#x3066;&#x4F5C;&#x6210;&#x3055;&#x308C;&#x307E;&#x3059;&#x3002;&#x3067;&#x3059;&#x304C;&#x3001;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x306B;&#x306F;&#x30B7;&#x30FC;&#x30AF;&#x30EC;&#x30C3;&#x30C8;&#x30AD;&#x30FC;&#x306B;&#x3064;&#x3044;&#x3066;&#x306E;&#x60C5;&#x5831;&#x306F;&#x8F09;&#x3063;&#x3066;&#x3044;&#x307E;&#x305B;&#x3093;&#x3002;&#x3067;&#x306F;&#x3069;&#x3046;&#x3084;&#x3063;&#x3066;&#x691C;&#x8A3C;&#x3059;&#x308B;&#x306E;&#x3067;&#x3057;&#x3087;&#x3046;&#x304B;&#x3002;<br>
&#x305D;&#x308C;&#x306F;&#x30EA;&#x30AF;&#x30A8;&#x30B9;&#x30C8;&#x3067;&#x9001;&#x3063;&#x3066;&#x304D;&#x305F;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x304B;&#x3089;header&#x3068;payload&#x3092;&#x53D6;&#x308A;&#x51FA;&#x3057;&#x307E;&#x3059;&#x3002;&#x3053;&#x306E;header&#x3068;payload&#x3068;&#x30B7;&#x30FC;&#x30AF;&#x30EC;&#x30C3;&#x30C8;&#x30AD;&#x30FC;&#x304B;&#x3089;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x3092;&#x4F5C;&#x6210;&#x3057;&#x307E;&#x3059;&#x3002;&#x3053;&#x306E;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x3068;&#x9001;&#x3063;&#x3066;&#x304D;&#x305F;&#x30C8;&#x30FC;&#x30AF;&#x30F3;&#x3092;&#x6BD4;&#x8F03;&#x3057;&#x3066;&#x691C;&#x8A3C;&#x3067;&#x304D;&#x307E;&#x3059;&#x3002;</p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><h1 id="5-%E6%9C%80%E5%BE%8C%E3%81%AB">5. &#x6700;&#x5F8C;&#x306B;</h1>
<p>&#x4ECA;&#x56DE;&#x30D6;&#x30ED;&#x30B0;&#x3092;&#x4F5C;&#x6210;&#x3057;&#x3066;&#x307F;&#x3066;&#x3001;&#x60C5;&#x5831;&#x3092;&#x3046;&#x307E;&#x304F;&#x307E;&#x3068;&#x3081;&#x305F;&#x308A;&#x69CB;&#x6210;&#x3059;&#x308B;&#x3053;&#x3068;&#x306F;&#x3068;&#x3066;&#x3082;&#x96E3;&#x3057;&#x304F;&#x611F;&#x3058;&#x307E;&#x3057;&#x305F;&#xFF01;<br>
&#x8AAD;&#x307F;&#x306B;&#x304F;&#x3044;&#x90E8;&#x5206;&#x306F;&#x3042;&#x308B;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x304C;&#x3054;&#x5BB9;&#x8D66;&#x304F;&#x3060;&#x3055;&#x3044;<br>
&#x3082;&#x3057;&#x3053;&#x306E;&#x30D6;&#x30ED;&#x30B0;&#x4E0A;&#x3067;&#x9593;&#x9055;&#x3048;&#x305F;&#x89E3;&#x91C8;&#x304C;&#x3042;&#x308A;&#x307E;&#x3057;&#x305F;&#x3089;&#x3054;&#x9023;&#x7D61;&#x3057;&#x3066;&#x3044;&#x305F;&#x3060;&#x3051;&#x308B;&#x3068;&#x3042;&#x308A;&#x304C;&#x305F;&#x3044;&#x3067;&#x3059;&#xFF01;<br>
&#x6B21;&#x56DE;&#x306F;shima&#x3055;&#x3093;&#x3067;&#x3059;&#xFF01;&#x304A;&#x697D;&#x3057;&#x307F;&#x306B;&#xFF01;</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[[神の言語] Lispに触れてみた話]]></title><description><![CDATA[[神の言語] Lispに触れてみた話]]></description><link>http://blog.shinonome.io/adventcal_2024_12_16/</link><guid isPermaLink="false">6748808a84f04652f6200bec</guid><category><![CDATA[バックエンド]]></category><dc:creator><![CDATA[PlayGround]]></dc:creator><pubDate>Mon, 16 Dec 2024 11:31:00 GMT</pubDate><media:content url="http://blog.shinonome.io/content/images/2024/11/----------2024-11-28-234249.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="http://blog.shinonome.io/content/images/2024/11/----------2024-11-28-234249.png" alt="[&#x795E;&#x306E;&#x8A00;&#x8A9E;] Lisp&#x306B;&#x89E6;&#x308C;&#x3066;&#x307F;&#x305F;&#x8A71;"><p>&#x3053;&#x3093;&#x306B;&#x3061;&#x306F;&#xFF01;AdventCalender2024 16&#x65E5;&#x76EE;&#x62C5;&#x5F53;&#x306E;yuki&#x3067;&#x3059;&#xFF0E;<br>
&#x4ECA;&#x56DE;&#x306F;&#xFF0C;&#x4EE5;&#x524D;&#x304B;&#x3089;&#x305A;&#x3063;&#x3068;&#x6C17;&#x306B;&#x306A;&#x3063;&#x3066;&#x3044;&#x305F;&#xFF0C;&#x71B1;&#x72C2;&#x7684;&#x306A;&#x30D5;&#x30A1;&#x30F3;&#x304C;&#x3044;&#x308B;&#x3053;&#x3068;&#x3067;&#x6709;&#x540D;&#x306A;Lisp&#x3092;&#x8A66;&#x3057;&#x306B;&#x89E6;&#x3063;&#x3066;&#x307F;&#x305F;&#x8A71;&#x3092;&#x3057;&#x3088;&#x3046;&#x304B;&#x306A;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#xFF0E;<br>
&#x826F;&#x304B;&#x3063;&#x305F;&#x3089;&#x8AAD;&#x3093;&#x3067;&#x307F;&#x3066;&#x304F;&#x3060;&#x3055;&#x3044;&#xFF01;</p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><h1 id="%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">&#x306F;&#x3058;&#x3081;&#x306B;</h1>
<p><strong>Lisp</strong>&#x3068;&#x306F;&#xFF0C;&#x3059;&#x3079;&#x3066;&#x306E;&#x30C7;&#x30FC;&#x30BF;&#x3068;&#x30B3;&#x30FC;&#x30C9;&#x3092;()&#x3067;&#x56F2;&#x308F;&#x308C;&#x305F;&#x5F0F;&#x3068;&#x3057;&#x3066;&#x8868;&#x73FE;&#x3059;&#x308B;&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30DF;&#x30F3;&#x30B0;&#x8A00;&#x8A9E;&#x3067;&#xFF0C;&#x8A08;&#x7B97;&#x5F0F;&#x306E;&#x8A18;&#x8FF0;&#x3084;&#x30C7;&#x30FC;&#x30BF;&#xFF0C;&#x95A2;&#x6570;&#x306E;&#x5B9A;&#x7FA9;&#xFF0C;&#x547C;&#x3073;&#x51FA;&#x3057;&#xFF0C;&#x5236;&#x5FA1;&#x306A;&#x3069;<strong>&#x307B;&#x3068;&#x3093;&#x3069;&#x3059;&#x3079;&#x3066;&#x306E;&#x69CB;&#x6210;&#x8981;&#x7D20;&#x3092;()&#x3067;&#x62EC;&#x3063;&#x305F;&#x30EA;&#x30B9;&#x30C8;&#x3067;&#x8868;&#x3059;</strong>&#x3068;&#x3044;&#x3046;&#x306A;&#x306B;&#x3084;&#x3089;&#x51C4;&#x305D;&#x3046;&#x306A;&#x8A00;&#x8A9E;&#x3067;&#x3059;&#xFF0E;</p>
<p>1958&#x5E74;&#x306B;MIT&#x306E;<strong>&#x30B8;&#x30E7;&#x30F3;&#x30FB;&#x30DE;&#x30C3;&#x30AB;&#x30FC;&#x30B7;&#x30FC;&#x6C0F;</strong>&#x306B;&#x3088;&#x308A;&#x958B;&#x767A;&#x3055;&#x308C;&#x305F;Lisp&#x306F;&#xFF0C;&#x975E;&#x5E38;&#x306B;&#x30A2;&#x30AB;&#x30C7;&#x30DF;&#x30C3;&#x30AF;&#x306A;&#x8A00;&#x8A9E;&#x3067;FORTRAN&#x306B;&#x6B21;&#x3044;&#x3067;<strong>&#x53E4;&#x3044;&#x9AD8;&#x7D1A;&#x8A00;&#x8A9E;&#x306E;&#x3072;&#x3068;&#x3064;</strong>&#x306B;&#x306A;&#x3063;&#x3066;&#x3044;&#x307E;&#x3059;&#xFF0E;<br>
<strong>&#x4EBA;&#x5DE5;&#x77E5;&#x80FD;</strong>&#x306E;&#x7814;&#x7A76;&#x7528;&#x8A00;&#x8A9E;&#x3068;&#x3057;&#x3066;&#x4E3B;&#x306B;&#x4F7F;&#x7528;&#x3055;&#x308C;&#x3066;&#x3044;&#x305F;&#x3053;&#x3068;&#x3067;&#x3082;&#x6709;&#x540D;&#x3067;&#x3059;&#x304C;&#xFF0C;&#x305D;&#x306E;&#x6570;&#x5B66;&#x7531;&#x6765;&#x306E;&#x6587;&#x6CD5;&#x306E;&#x7F8E;&#x3057;&#x3055;&#x3068;&#x62E1;&#x5F35;&#x6027;&#x306B;&#x3088;&#x3063;&#x3066;&#xFF0C;&#x3053;&#x308C;&#x307E;&#x3067;&#x71B1;&#x72C2;&#x7684;&#x306A;&#x30D5;&#x30A1;&#x30F3;&#x3092;&#x591A;&#x304F;&#x751F;&#x307F;&#x51FA;&#x3057;&#x3066;&#x304D;&#x307E;&#x3057;&#x305F;&#xFF0E;</p>
<p>&#x3053;&#x306E;&#x8A18;&#x4E8B;&#x306F;&#x3042;&#x304F;&#x307E;&#x3067;Lisp&#x3092;&#x8EFD;&#x304F;&#x89E6;&#x3063;&#x3066;&#x307F;&#x305F;&#x611F;&#x60F3;&#x306A;&#x306E;&#x3067;<strong>&#x6E29;&#x304B;&#x3044;&#x76EE;</strong>&#x3067;&#x898B;&#x3066;&#x3044;&#x305F;&#x3060;&#x304D;&#x305F;&#x3044;&#x306E;&#x3067;&#x3059;&#x304C;&#xFF0C;&#x9762;&#x767D;&#x3044;&#x8A00;&#x8A9E;&#x3060;&#x306A;&#x3068;&#x611F;&#x3058;&#x305F;&#x306E;&#x3067;&#x5171;&#x6709;&#x3057;&#x305F;&#x3044;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#xFF0E;</p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><h1 id="lisp%E3%82%92%E6%9B%B8%E3%81%84%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86">Lisp&#x3092;&#x66F8;&#x3044;&#x3066;&#x307F;&#x3088;&#x3046;</h1>
<p>Lisp&#x306F;&#x305D;&#x306E;&#x62E1;&#x5F35;&#x6027;&#x306E;&#x6240;&#x4EE5;&#x304B;&#x3089;&#x65B9;&#x8A00;&#x304C;&#x3044;&#x304F;&#x3064;&#x304B;&#x3042;&#x308B;&#x306E;&#x3067;&#x3059;&#x304C;&#xFF0C;&#x305D;&#x306E;&#x4E2D;&#x3067;&#x3082;&#x6709;&#x540D;&#x3067;&#x5B9F;&#x7528;&#x7684;&#x306A;Common Lisp&#x3092;&#x5C0E;&#x5165;&#x3057;&#x307E;&#x3059;&#xFF0E;</p>
<h2 id="clisp%E3%81%AE%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89">clisp&#x306E;&#x30C0;&#x30A6;&#x30F3;&#x30ED;&#x30FC;&#x30C9;</h2>
<pre><code class="language-bash">sudo apt update
sudo apt install clisp
</code></pre>
<p><strong>Linux</strong><br>
&#x4E0A;&#x306E;&#x30B3;&#x30DE;&#x30F3;&#x30C9;&#x3067;&#x7C21;&#x5358;&#x306B;&#x5C0E;&#x5165;&#x3067;&#x304D;&#x307E;&#x3059;</p>
<p><strong>Windows</strong><br>
&#x3053;&#x3061;&#x3089;&#x306E;&#x30B5;&#x30A4;&#x30C8;&#x304B;&#x3089;&#x30C0;&#x30A6;&#x30F3;&#x30ED;&#x30FC;&#x30C9;&#x3067;&#x304D;&#x307E;&#x3059;<br>
<a href="https://sourceforge.net/projects/clisp/">https://sourceforge.net/projects/clisp/</a></p>
<pre><code class="language-bash">brew install clisp
</code></pre>
<p><strong>macOS</strong><br>
&#x4E0A;&#x306E;&#x30B3;&#x30DE;&#x30F3;&#x30C9;&#x3067;&#x7C21;&#x5358;&#x306B;&#x5C0E;&#x5165;&#x3067;&#x304D;&#x307E;&#x3059;</p>
<hr>
<p>&#x5C0E;&#x5165;&#x304C;&#x3067;&#x304D;&#x305F;&#x3089;&#x30BF;&#x30FC;&#x30DF;&#x30CA;&#x30EB;&#x306B;<strong>clisp</strong>&#x3068;&#x5165;&#x529B;&#x3059;&#x308B;&#x3053;&#x3068;&#x3067;&#xFF0C;&#x81EA;&#x52D5;&#x7684;&#x306B;REPL&#x3068;&#x3044;&#x3046;&#x30A4;&#x30F3;&#x30BF;&#x30D7;&#x30EA;&#x30BF;&#x578B;&#x306E;&#x5B9F;&#x884C;&#x74B0;&#x5883;&#x306B;&#x5165;&#x308B;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x307E;&#x3059;&#xFF0E;&#x4EE5;&#x4E0B;&#x306E;&#x3088;&#x3046;&#x306B;&#x306A;&#x308C;&#x3070;OK&#x3067;&#x3059;&#xFF0E;</p>
<pre><code class="language-bash">  i i i i i i i       ooooo    o        ooooooo   ooooo   ooooo
  I I I I I I I      8     8   8           8     8     o  8    8
  I  \ `+&apos; /  I      8         8           8     8        8    8
   \  `-+-&apos;  /       8         8           8      ooooo   8oooo
    `-__|__-&apos;        8         8           8           8  8
        |            8     o   8           8     o     8  8
  ------+------       ooooo    8oooooo  ooo8ooo   ooooo   8

Welcome to GNU CLISP 2.49.93+ (2018-02-18) &lt;http://clisp.org/&gt;

Copyright (c) Bruno Haible, Michael Stoll 1992-1993
Copyright (c) Bruno Haible, Marcus Daniels 1994-1997
Copyright (c) Bruno Haible, Pierpaolo Bernardi, Sam Steingold 1998
Copyright (c) Bruno Haible, Sam Steingold 1999-2000
Copyright (c) Sam Steingold, Bruno Haible 2001-2018

Type :h and hit Enter for context help.

[1]&gt;
</code></pre>
<p>&#x3053;&#x3063;&#x304B;&#x3089;&#x5148;&#x306F;&#x3088;&#x304F;&#x308F;&#x304B;&#x3089;&#x306A;&#x3044;&#x3053;&#x3068;&#x306B;&#x306A;&#x3063;&#x305F;&#x3089; <strong>:q&#x3068;&#x6253;&#x3066;&#x3070;&#x3068;&#x308A;&#x3042;&#x3048;&#x305A;&#x306F;&#x5927;&#x4E08;&#x592B;</strong>&#x3067;&#x3059;&#xFF0E;</p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><h2 id="%E7%89%B9%E5%BE%B4%E7%9A%84%E5%80%8B%E4%BA%BA%E7%9A%84%E3%81%AA%E6%96%87%E6%B3%95%E3%82%92%E7%B0%A1%E5%8D%98%E3%81%AB%E6%95%B4%E7%90%86">&#x7279;&#x5FB4;&#x7684;(&#x500B;&#x4EBA;&#x7684;)&#x306A;&#x6587;&#x6CD5;&#x3092;&#x7C21;&#x5358;&#x306B;&#x6574;&#x7406;</h2>
<p>&#x524D;&#x63D0;&#x3068;&#x3057;&#x3066;&#x6700;&#x521D;&#x306B;&#x3082;&#x5C11;&#x3057;&#x8FF0;&#x3079;&#x305F;&#x306E;&#x3067;&#x3059;&#x304C;&#xFF0C;Lisp&#x306E;&#x6587;&#x6CD5;&#x3068;&#x3044;&#x3046;&#x306E;&#x306F;&#x975E;&#x5E38;&#x306B;&#x30B7;&#x30F3;&#x30D7;&#x30EB;&#x3067;&#xFF0C;<strong>&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x69CB;&#x6210;&#x3059;&#x308B;&#x65B9;&#x6CD5;&#x306F;()&#x3092;&#x4F7F;&#x3063;&#x3066;&#x30EA;&#x30B9;&#x30C8;&#x306B;&#x3059;&#x308B;&#x3060;&#x3051;</strong>&#x3067;&#x3059;&#xFF01;(&#x3053;&#x308C;&#x304C;&#x521D;&#x5FC3;&#x8005;&#x306E;&#x50D5;&#x3092;&#x82E6;&#x3057;&#x3081;&#x307E;&#x3057;&#x305F;&#x304C;)</p>
<p>&#x305F;&#x3060;&#x5F8C;&#x306B;&#x3082;&#x8FF0;&#x3079;&#x307E;&#x3059;&#x304C;&#xFF0C;Lisp&#x306E;&#x30B3;&#x30FC;&#x30C9;&#x306F;&#xFF0C;<strong>(&#x30B3;&#x30DE;&#x30F3;&#x30C9; &#x5F15;&#x6570;1 &#x5F15;&#x6570;2 ...)</strong> &#x3068;&#x3044;&#x3046;&#x30D5;&#x30A9;&#x30FC;&#x30E0;&#x3068;&#x3044;&#x3046;&#x69CB;&#x9020;(&#x30B3;&#x30DE;&#x30F3;&#x30C9;&#x306F;&#x901A;&#x5E38;&#x95A2;&#x6570;)&#x3092;&#x3068;&#x308B;&#x5FC5;&#x8981;&#x306F;&#x3042;&#x308A;&#xFF0C;&#x3053;&#x306E;&#x5F8C;&#x51FA;&#x3066;&#x304F;&#x308B;&#x30B3;&#x30FC;&#x30C9;&#x306F;&#x3059;&#x3079;&#x3066;&#x3053;&#x306E;&#x5F62;&#x306B;&#x5F93;&#x3063;&#x3066;&#x3044;&#x308B;&#x306E;&#x304C;&#x5206;&#x304B;&#x308B;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#xFF0E;</p>
<p>&#x3053;&#x308C;&#x3060;&#x3051;&#x3067;&#x306F;&#x3088;&#x304F;&#x5206;&#x304B;&#x3089;&#x306A;&#x3044;&#x306E;&#x3067;&#x65E9;&#x901F;&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x898B;&#x3066;&#x3044;&#x304D;&#x307E;&#x3057;&#x3087;&#x3046;!</p>
<h3 id="%E5%9B%9B%E5%89%87%E6%BC%94%E7%AE%97">&#x56DB;&#x5247;&#x6F14;&#x7B97;</h3>
<p>&#x56DB;&#x5247;&#x6F14;&#x7B97;&#x3067;&#x3059;&#x304C;&#xFF0C;&#x3044;&#x304D;&#x306A;&#x308A;Lisp&#x304C;Lisp&#x3067;&#x3042;&#x308B;&#x6240;&#x4EE5;&#x304C;&#x5206;&#x304B;&#x308A;&#x307E;&#x3059;&#xFF0E;Lisp&#x3067;3+5&#x306E;&#x7D50;&#x679C;&#x3092;&#x51FA;&#x529B;&#x3059;&#x308B;&#x305F;&#x3081;&#x306B;&#x306F;</p>
<pre><code class="language-lisp">&gt;(+ 3 5)
8
</code></pre>
<p>&#x3068;&#x30AA;&#x30DA;&#x30E9;&#x30F3;&#x30C9;&#x8A18;&#x6CD5;&#x3067;&#x8A18;&#x8FF0;&#x3059;&#x308B;&#x5FC5;&#x8981;&#x304C;&#x3042;&#x308A;&#x307E;&#x3059;.<br>
&#x3053;&#x308C;&#x306F;&#xFF0C;Lisp&#x304C;&#x6700;&#x4F4E;&#x9650;&#x306E;&#x30EB;&#x30FC;&#x30EB;&#x3067;&#x66F8;&#x304F;&#x305F;&#x3081;&#x3067;&#x3042;&#x308A;&#xFF0C;+&#x3092;&#x6F14;&#x7B97;&#x5B50;&#x3068;&#x3059;&#x308B;&#x3068;&#x3044;&#x3046;&#x30EB;&#x30FC;&#x30EB;&#x3059;&#x3089;Lisp&#x306B;&#x3068;&#x3063;&#x3066;<strong>&#x7121;&#x99C4;</strong>&#x3067;&#x3042;&#x308B;&#x3068;&#x3044;&#x3046;&#x3053;&#x3068;&#x3067;&#x3057;&#x3087;&#x3046;&#xFF0E;<br>
Lisp&#x306B;&#x304A;&#x3051;&#x308B; <strong>+&#x306F;&#x95A2;&#x6570;&#x3067;&#x3042;&#x3063;&#x3066;</strong> &#x5F8C;&#x308D;&#x306E;3&#x3068;5&#x304C;&#x305D;&#x308C;&#x305E;&#x308C;&#x5F15;&#x6570;&#x3067;&#x3042;&#x308B;&#x3068;&#x6349;&#x3048;&#x308B;&#x3068;&#xFF0C;&#x5272;&#x3068;&#x7406;&#x89E3;&#x3067;&#x304D;&#x308B;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#xFF0E;</p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><h3 id="%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E5%A4%89%E6%95%B0%E3%81%AE%E5%AE%9A%E7%BE%A9">&#x30B0;&#x30ED;&#x30FC;&#x30D0;&#x30EB;&#x5909;&#x6570;&#x306E;&#x5B9A;&#x7FA9;</h3>
<p>&#x30B0;&#x30ED;&#x30FC;&#x30D0;&#x30EB;&#x5909;&#x6570;&#x306E;&#x5B9A;&#x7FA9;&#x306F;&#x4EE5;&#x4E0B;&#x306E;&#x3088;&#x3046;&#x306B;&#x5B9A;&#x7FA9;&#x3067;&#x304D;&#x307E;&#x3059;&#xFF0E;(* &#x3067;&#x62EC;&#x3063;&#x3066;&#x3044;&#x308B;&#x306E;&#x306F;&#xFF0C;&#x30ED;&#x30FC;&#x30AB;&#x30EB;&#x5909;&#x6570;&#x3068;&#x533A;&#x5225;&#x3059;&#x308B;&#x305F;&#x3081;&#x306E;&#x6163;&#x7FD2;&#x3060;&#x305D;&#x3046;&#x3067;&#x3059;&#xFF0E;)</p>
<pre><code class="language-Lisp">&gt;(defparameter *a* 3)
*A*
</code></pre>
<pre><code class="language-Lisp">&gt;*a*
3
</code></pre>
<p>&#x5909;&#x6570;&#x306B;&#x6570;&#x5024;&#x304C;&#x4EE3;&#x5165;&#x3055;&#x308C;&#x3066;&#x3044;&#x308B;&#x3053;&#x3068;&#x304C;&#x5206;&#x304B;&#x308A;&#x307E;&#x3059;.</p>
<h3 id="%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E9%96%A2%E6%95%B0%E3%81%AE%E5%AE%9A%E7%BE%A9">&#x30B0;&#x30ED;&#x30FC;&#x30D0;&#x30EB;&#x95A2;&#x6570;&#x306E;&#x5B9A;&#x7FA9;</h3>
<p>&#x30B0;&#x30ED;&#x30FC;&#x30D0;&#x30EB;&#x95A2;&#x6570;&#x3092;&#x5B9A;&#x7FA9;&#x3059;&#x308B;&#x306B;&#x306F;&#x4EE5;&#x4E0B;&#x306E;&#x3088;&#x3046;&#x306B;&#x66F8;&#x304D;&#x307E;&#x3059;&#xFF0E;&#x8A66;&#x3057;&#x306B;n*(n-1)&#x3092;&#x5B9A;&#x7FA9;&#x3057;&#x305F;&#x95A2;&#x6570;&#x3092;&#x66F8;&#x3044;&#x3066;&#x307F;&#x307E;&#x3059;&#xFF0E;</p>
<pre><code class="language-Lisp">&gt;(defun ex_cal(n) (* n (- n 1)))
EX_CAL
</code></pre>
<p>&#x30AA;&#x30DA;&#x30E9;&#x30F3;&#x30C9;&#x8A18;&#x6CD5;&#x3068;&#x304B;&#x3063;&#x3053;&#x306E;&#x591A;&#x3055;&#x306B;&#x60B6;&#x7D76;&#x3057;&#x3066;&#x304F;&#x3060;&#x3055;&#x3044;&#xFF0E;</p>
<pre><code class="language-Lisp">&gt;(ex_cal *a*)
6
</code></pre>
<p>&#x3053;&#x306E;&#x95A2;&#x6570;&#x3092;&#x4F7F;&#x3063;&#x3066;&#x307F;&#x308B;&#x3068;&#x671F;&#x5F85;&#x3055;&#x308C;&#x308B;&#x51FA;&#x529B;&#x306B;&#x306A;&#x3063;&#x3066;&#x3044;&#x307E;&#x3059;&#xFF0E;</p>
<h3 id="%E3%82%B3%E3%83%BC%E3%83%89%E3%81%A8%E3%83%87%E3%83%BC%E3%82%BF">&#x30B3;&#x30FC;&#x30C9;&#x3068;&#x30C7;&#x30FC;&#x30BF;</h3>
<p>Lisp&#x306B;&#x306F;&#x30B3;&#x30FC;&#x30C9;&#x3068;&#x30C7;&#x30FC;&#x30BF;&#x3068;&#x3044;&#x3046;2&#x3064;&#x306E;&#x6982;&#x5FF5;&#x304C;&#x3042;&#x308B;&#x306E;&#x3067;&#x3059;&#x304C;&#xFF0C;&#x3053;&#x308C;&#x306F;&#x81F3;&#x3063;&#x3066;&#x5358;&#x7D14;&#x3067;&#xFF0C;<strong>&#x30B3;&#x30FC;&#x30C9;&#x3068;&#x3057;&#x3066;&#x66F8;&#x3044;&#x305F;&#x3082;&#x306E;&#x306F;&#x30B3;&#x30F3;&#x30D4;&#x30E5;&#x30FC;&#x30BF;&#x306F;&#x5B9F;&#x884C;&#x3057;&#x3088;&#x3046;&#x3068;&#x3059;&#x308B;</strong>&#x3057;&#xFF0C;<strong>&#x30C7;&#x30FC;&#x30BF;&#x3068;&#x3057;&#x3066;&#x66F8;&#x3044;&#x305F;&#x3082;&#x306E;&#x306F;&#x5B9F;&#x884C;&#x305B;&#x305A;&#xFF0C;&#x305F;&#x3060;&#x306E;&#x30C7;&#x30FC;&#x30BF;&#x3068;&#x3057;&#x3066;&#x6271;&#x3046;</strong>&#x3068;&#x3044;&#x3046;&#x3060;&#x3051;&#x3067;&#x3059;&#xFF0E;</p>
<p>&#x305F;&#x3060;&#x3053;&#x3053;&#x3067;<strong>&#x91CD;&#x8981;</strong>&#x306A;&#x306E;&#x306F;&#xFF0C;&#x30B3;&#x30FC;&#x30C9;&#x3068;&#x30C7;&#x30FC;&#x30BF;&#x304C;Lisp&#x306F;&#x3069;&#x3061;&#x3089;&#x3082;&#x30EA;&#x30B9;&#x30C8;&#x3067;&#x69CB;&#x6210;&#x3055;&#x308C;&#x3066;&#x3044;&#x308B;&#x305F;&#x3081;&#x306B;&#xFF0C;<strong>&#x30B3;&#x30FC;&#x30C9;&#x304C;&#x30C7;&#x30FC;&#x30BF;&#x3067;&#x3042;&#x308A;&#xFF0C;&#x30C7;&#x30FC;&#x30BF;&#x304C;&#x30B3;&#x30FC;&#x30C9;&#x3067;&#x3042;&#x308B;</strong>&#x3068;&#x3044;&#x3046;&#x7279;&#x6027;&#x3092;&#x6301;&#x3063;&#x3066;&#x3044;&#x308B;&#x3053;&#x3068;&#x3067;&#x3059;.<br>
&#x3053;&#x308C;&#x304C;&#x5F8C;&#x3067;&#x8A71;&#x3059;Lisp&#x306E;&#x30DE;&#x30AF;&#x30ED;&#x3068;&#x3044;&#x3046;&#x3082;&#x306E;&#x3092;&#x8D85;&#x5F37;&#x529B;&#x306A;&#x3082;&#x306E;&#x306B;&#x3057;&#x3066;&#x3044;&#x307E;&#x3059;&#xFF0E;</p>
<p>&#x30B3;&#x30FC;&#x30C9;&#x306F;&#xFF0C;&#x4E0A;&#x3067;&#x8FF0;&#x3079;&#x305F;&#x3088;&#x3046;&#x306B;<strong>&#x30D5;&#x30A9;&#x30FC;&#x30E0;&#x578B;</strong>&#x3067;&#x3042;&#x308B;&#x5FC5;&#x8981;&#x304C;&#x3042;&#x308A;&#x307E;&#x3059;&#x304C;&#xFF0C;&#x30C7;&#x30FC;&#x30BF;&#x306B;&#x3057;&#x305F;&#x3044;&#x6642;&#x306F;()&#x306E;&#x524D;&#x306B;&apos;&#x3092;&#x4ED8;&#x3051;&#x308B;&#x3060;&#x3051;&#x3067;&#x3088;&#x3044;&#x3067;&#x3059;&#xFF0E;</p>
<pre><code class="language-Lisp">&gt;&apos;(orange apple)
(ORANGE APPLE)
</code></pre>
<pre><code class="language-Lisp">&gt; &apos;(+ 2 3)
(+ 2 3)
</code></pre>
<p>&#x4E0A;&#x3067;&#x306F;&#x30B3;&#x30FC;&#x30C9;&#x3067;&#x3042;&#x3063;&#x305F;&#x3082;&#x306E;&#x3082;&#x30C7;&#x30FC;&#x30BF;&#x306B;&#x3067;&#x304D;&#x307E;&#x3059;&#xFF0E;</p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><h1 id="%E3%81%AA%E3%81%9Clisp%E3%82%92%E6%9B%B8%E3%81%8F%E3%81%AE%E3%81%8B">&#x306A;&#x305C;Lisp&#x3092;&#x66F8;&#x304F;&#x306E;&#x304B;</h1>
<p>&#x3053;&#x3053;&#x307E;&#x3067;&#x7C21;&#x5358;&#x306A;&#x6587;&#x6CD5;&#x3092;&#x898B;&#x3066;&#x304D;&#x307E;&#x3057;&#x305F;&#x304C;&#xFF0C;&#x306A;&#x305C;&#x4ED6;&#x306E;&#x8A00;&#x8A9E;&#x304C;&#x3042;&#x308B;&#x306B;&#x3082;&#x95A2;&#x308F;&#x3089;&#x305A;&#xFF0C;Lisp&#x3092;&#x66F8;&#x304F;&#x5FC5;&#x8981;&#x304C;&#x3042;&#x308B;&#x306E;&#x304B;&#xFF0C;&#x975E;&#x5E38;&#x306B;&#x7591;&#x554F;&#x3060;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#xFF0E;&#x305D;&#x306E;&#x7B54;&#x3048;&#x3068;&#x3057;&#x3066;&#x4E00;&#x756A;&#x306B;&#x3042;&#x304C;&#x308B;&#x306E;&#x306F;&#xFF0C;<strong>&#x30DE;&#x30AF;&#x30ED;</strong>&#x3067;&#x3057;&#x3087;&#x3046;&#xFF0E;</p>
<h2 id="%E3%83%9E%E3%82%AF%E3%83%AD%E3%81%A8%E3%81%AF">&#x30DE;&#x30AF;&#x30ED;&#x3068;&#x306F;</h2>
<p>Lisp&#x306E;&#x30DE;&#x30AF;&#x30ED;&#x306F;&#xFF0C;&#x7C21;&#x5358;&#x306B;&#x8A00;&#x3046;&#x3068;<strong>&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x66F8;&#x304F;&#x305F;&#x3081;&#x306E;&#x30B3;&#x30FC;&#x30C9;</strong>&#x3067;&#x3059;&#xFF0E;&#x3053;&#x306E;&#x3088;&#x3046;&#x306B;&#x50D5;&#x304C;&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x66F8;&#x3044;&#x305F;&#x3089;&#xFF0C;&#x3053;&#x3046;Lisp&#x306E;&#x30B3;&#x30FC;&#x30C9;&#x306B;&#x5909;&#x63DB;&#x3057;&#x3066;&#x306D;&#xFF0C;&#x3068;&#x3042;&#x3089;&#x304B;&#x3058;&#x3081;&#x4F1D;&#x3048;&#x3066;&#x304A;&#x304F;&#x306E;&#x304C;&#x30DE;&#x30AF;&#x30ED;&#x306E;&#x30A4;&#x30E1;&#x30FC;&#x30B8;&#x3067;&#x3059;&#xFF0E;&#x66F8;&#x304D;&#x65B9;&#x306F;&#x304A;&#x304A;&#x3088;&#x305D;&#x4EE5;&#x4E0B;&#x306E;&#x901A;&#x308A;&#x3067;&#x3059;&#xFF0E;</p>
<pre><code class="language-Lisp">&gt;(defmacro &#x30B3;&#x30FC;&#x30C9;&#x3092;&#x66F8;&#x304F;&#x305F;&#x3081;&#x306E;&#x30B3;&#x30FC;&#x30C9; &apos;&#x5909;&#x63DB;&#x8A9E;&#x306E;Lisp&#x30B3;&#x30FC;&#x30C9;&#x306E;&#x30C7;&#x30FC;&#x30BF;&#x5F62;)
</code></pre>
<p>&#x4F8B;&#x3048;&#x3070;&#x4F55;&#x5EA6;&#x3082;&#x3053;&#x306E;&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x66F8;&#x304F;&#x306E;&#x306F;&#x9577;&#x304F;&#x3066;&#x9762;&#x5012;&#x3060;&#x306A;&#x3068;&#x3044;&#x3046;&#x6642;&#x306B;&#x30DE;&#x30AF;&#x30ED;&#x3092;&#x66F8;&#x3044;&#x3066;&#x304A;&#x304F;&#x3053;&#x3068;&#x306B;&#x3088;&#x3063;&#x3066;&#xFF0C;&#x52B9;&#x7387;&#x5316;&#x3059;&#x308B;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x307E;&#x3059;&#xFF01;</p>
<p>&#x305F;&#x3060;&#x305D;&#x308C;&#x306F;&#x95A2;&#x6570;&#x3067;&#x306F;&#x3060;&#x3081;&#x306A;&#x306E;&#x304B;&#x3068;&#x3044;&#x3046;&#x7591;&#x554F;&#x304C;&#x3042;&#x308B;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#xFF0E;&#x5927;&#x304D;&#x304F;&#x9055;&#x3046;&#x306E;&#x306F;&#xFF0C;&#x95A2;&#x6570;&#x306F;&#x5F15;&#x6570;&#x304C;&#x5373;&#x6642;&#x306B;&#x8A55;&#x4FA1;&#x3055;&#x308C;&#x308B;&#x306E;&#x306B;&#x5BFE;&#x3057;&#x3066;&#xFF0C;&#x30DE;&#x30AF;&#x30ED;&#x306F;<strong>&#x5F15;&#x6570;&#x304C;&#x8A55;&#x4FA1;&#x3055;&#x308C;&#x308B;&#x524D;&#x306B;&#x305D;&#x306E;&#x307E;&#x307E;&#x306E;&#x5F62;&#x3067;&#x30DE;&#x30AF;&#x30ED;&#x306B;&#x6E21;&#x3055;&#x308C;&#x308B;</strong>&#x70B9;&#x3067;&#x3059;&#xFF0E;<br>
(&#x5177;&#x4F53;&#x7684;&#x306A;&#x4F8B;&#x306F;&#x4E0B;&#x3067;&#x3084;&#x308A;&#x307E;&#x3059;)</p>
<p>&#x30DE;&#x30AF;&#x30ED;&#x3092;&#x4F7F;&#x3046;&#x3068;&#xFF0C;&#x4ED6;&#x306E;&#x8A00;&#x8A9E;&#x3067;&#x306F;&#x3042;&#x3089;&#x304B;&#x3058;&#x3081;&#x5B9A;&#x3081;&#x3089;&#x308C;&#x3066;&#x3044;&#x308B;<strong>&#x8A00;&#x8A9E;&#x4ED5;&#x69D8;(if&#x3084;for&#x306A;&#x3069;&#x306E;&#x69CB;&#x6587;)&#x3092;&#x52DD;&#x624B;&#x306B;&#x30AB;&#x30B9;&#x30BF;&#x30DE;&#x30A4;&#x30BA;&#x3057;&#x305F;&#x308A;&#xFF0C;&#x81EA;&#x5206;&#x3067;&#x65B0;&#x305F;&#x306B;&#x751F;&#x307F;&#x51FA;&#x3057;&#x305F;&#x308A;&#x3059;&#x308B;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x308B;</strong>&#x3088;&#x3046;&#x306B;&#x306A;&#x308A;&#x307E;&#x3059;&#xFF01;</p>
<p>&#x306A;&#x306E;&#x3067;&#xFF0C;&#x81EA;&#x5206;&#x306E;&#x597D;&#x304D;&#x306A;&#x3088;&#x3046;&#x306B;&#x8A00;&#x8A9E;&#x4ED5;&#x69D8;&#x3092;&#x5909;&#x66F4;&#x3057;&#x305F;&#x308A;&#x4ED8;&#x3051;&#x52A0;&#x3048;&#x305F;&#x308A;&#x3057;&#x3066;&#xFF0C;<strong>&#x7279;&#x5B9A;&#x306E;&#x30BF;&#x30B9;&#x30AF;&#x3092;&#x884C;&#x3046;&#x306E;&#x306B;&#x7279;&#x5316;&#x3057;&#x305F;&#x8A00;&#x8A9E;&#x3092;&#x4F5C;&#x3063;&#x305F;&#x308A;&#x3059;&#x308B;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x308B;</strong>&#x3088;&#x3046;&#x306B;&#x306A;&#x308B;&#x308F;&#x3051;&#x3067;&#x3059;&#xFF0E;(&#x3060;&#x304B;&#x3089;&#x4EBA;&#x5DE5;&#x77E5;&#x80FD;&#x306E;&#x7814;&#x7A76;&#x306B;&#x4F7F;&#x308F;&#x308C;&#x3066;&#x3044;&#x305F;&#x306E;&#x304B;&#x3082;)</p>
<h3 id="%E3%83%A1%E3%82%BF%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6">&#x30E1;&#x30BF;&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30DF;&#x30F3;&#x30B0;&#x306B;&#x3064;&#x3044;&#x3066;</h3>
<p><strong>&#x30E1;&#x30BF;&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30DF;&#x30F3;&#x30B0;</strong>&#x3068;&#x306F;&#xFF0C;&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30E0;&#x81EA;&#x8EAB;&#x304C;&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x751F;&#x6210;&#x3059;&#x308B;&#x6280;&#x8853;&#x306E;&#x3053;&#x3068;&#x3067;&#xFF0C;&#x30DE;&#x30AF;&#x30ED;&#x306F;&#x307E;&#x3055;&#x306B;&#x305D;&#x308C;&#x306B;&#x5F53;&#x3066;&#x306F;&#x307E;&#x308A;&#x307E;&#x3059;&#xFF0E;Lisp&#x306F;&#x57FA;&#x672C;&#x30EB;&#x30FC;&#x30EB;&#x304C;&#x6975;&#x3081;&#x3066;&#x5358;&#x7D14;&#x3067;&#xFF0C;&#x30B3;&#x30FC;&#x30C9;&#x3068;&#x30C7;&#x30FC;&#x30BF;&#x3092;&#x540C;&#x3058;&#x3088;&#x3046;&#x306B;&#x6271;&#x3046;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x308B;&#x306E;&#x3067;&#xFF0C;&#x53F3;&#x306B;&#x51FA;&#x308B;&#x8A00;&#x8A9E;&#x304C;&#x3044;&#x306A;&#x3044;&#x307B;&#x3069;&#x305D;&#x306E;&#x62E1;&#x5F35;&#x304C;&#x67D4;&#x8EDF;&#x3067;&#x3059;&#xFF0E;</p>
<p>&#x7279;&#x306B;Lisp&#x306E;&#x30A4;&#x30F3;&#x30BF;&#x30D7;&#x30EA;&#x30BF;(&#x30B3;&#x30F3;&#x30D4;&#x30E5;&#x30FC;&#x30BF;&#x304C;&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x89E3;&#x91C8;&#x3067;&#x304D;&#x308B;&#x3088;&#x3046;&#x306B;&#x3059;&#x308B;&#x305F;&#x3081;&#x306E;&#x30BD;&#x30D5;&#x30C8;&#x30A6;&#x30A7;&#x30A2;)&#x3092;<strong>Lisp&#x81EA;&#x8EAB;&#x3067;&#x66F8;&#x304F;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x3066;&#x3057;&#x307E;&#x3046;</strong>&#x3068;&#x3044;&#x3046;&#x8A71;&#x306F;&#x672C;&#x5F53;&#x306B;&#x9A5A;&#x304D;&#x3067;&#x3059;...</p>
<h3 id="%E3%83%9E%E3%82%AF%E3%83%AD%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B">&#x30DE;&#x30AF;&#x30ED;&#x3092;&#x4F7F;&#x3063;&#x3066;&#x307F;&#x308B;</h3>
<p>&#x30DE;&#x30AF;&#x30ED;&#x3092;&#x8A66;&#x3057;&#x306B;&#x66F8;&#x3044;&#x3066;&#x307F;&#x307E;&#x3057;&#x305F;&#x304C;&#xFF0C;&#x306A;&#x304B;&#x306A;&#x304B;&#x96E3;&#x3057;&#x3044;&#x3067;&#x3059;&#xFF0E;(&#x6B63;&#x78BA;&#x306B;&#x30DE;&#x30AF;&#x30ED;&#x3092;&#x4F7F;&#x3048;&#x3066;&#x3044;&#x306A;&#x304B;&#x3063;&#x305F;&#x3089;&#x3059;&#x307F;&#x307E;&#x305B;&#x3093;)</p>
<p><strong>1.(+ 3 5)&#x3092;(3 + 5)&#x306B;&#x3057;&#x3066;&#x3084;&#x308B;</strong><br>
Lisp&#x306B;&#x5BFE;&#x3057;&#x3066;&#x306E;&#x5192;&#x6D9C;&#x304B;&#x3082;&#x3057;&#x308C;&#x307E;&#x305B;&#x3093;&#x304C;&#xFF0C;&#x3084;&#x3063;&#x3066;&#x307F;&#x307E;&#x3057;&#x305F;&#xFF0E;<br>
&#x307E;&#x305A;&#xFF0C;&#x95A2;&#x6570;&#x3067;&#x3053;&#x308C;&#x3092;&#x5B9F;&#x73FE;&#x3057;&#x3088;&#x3046;&#x3068;&#x3059;&#x308B;&#x3068;&#xFF0C;</p>
<pre><code class="language-Lisp">&gt;(defun infix(a op b) (op a b))
</code></pre>
<p>&#x3068;&#x306A;&#x3063;&#x3066;&#xFF0C;&#x4F5C;&#x3063;&#x305F;&#x95A2;&#x6570;&#x3092;&#x4F7F;&#x304A;&#x3046;&#x3068;(infix 3 + 5)&#x3068;&#x6253;&#x3064;&#x3068;&#xFF0C;&#x3084;&#x306F;&#x308A;&#x5F15;&#x6570;&#x304C;&#x5148;&#x306B;&#x8A55;&#x4FA1;&#x3055;&#x308C;&#x3066;&#x3057;&#x307E;&#x3044;&#xFF0C;+&#x306F;&#x95A2;&#x6570;&#x306A;&#x306E;&#x3067;Lisp&#x306E;&#x8A00;&#x8A9E;&#x4ED5;&#x69D8;&#x306B;&#x7E1B;&#x3089;&#x308C;&#x3066;&#x6587;&#x6CD5;&#x30A8;&#x30E9;&#x30FC;&#x304C;&#x51FA;&#x3066;&#x3057;&#x307E;&#x3044;&#x307E;&#x3059;&#xFF0E;</p>
<p>&#x305D;&#x3053;&#x3067;<strong>&#x30DE;&#x30AF;&#x30ED;</strong>&#x3092;&#x4F7F;&#x3044;&#x307E;&#x3059;&#xFF0E;</p>
<pre><code class="language-Lisp">&gt;(defmacro infix (a op b) `(,op ,a ,b))

&gt;(infix 3 + 5)
8
</code></pre>
<p>&#x3068;&#x66F8;&#x304F;&#x3068;&#xFF0C;&#x51FA;&#x529B;&#x3055;&#x308C;&#x307E;&#x3057;&#x305F;&#xFF01;<br>
&#x3053;&#x3053;&#x3067;&#x306F;(infix 3+5)&#x3068;&#x50D5;&#x304C;&#x66F8;&#x3044;&#x305F;&#x3089;(infix + 3 5)&#x306B;&#x5909;&#x63DB;&#x3057;&#x3066;&#x30B3;&#x30F3;&#x30D1;&#x30A4;&#x30EB;&#x3057;&#x3066;&#x306D;&#x3068;&#x4F1D;&#x3048;&#x305F;&#x3068;&#x3044;&#x3046;&#x306E;&#x304C;&#x30A4;&#x30E1;&#x30FC;&#x30B8;&#x3067;&#x3059;&#xFF0E;</p>
<p><strong>2.Lisp&#x306E;for&#x6587;&#x3092;python&#x98A8;&#x306B;&#x3057;&#x3066;&#x307F;&#x305F;</strong><br>
Lisp&#x306E;for&#x6587;&#x304C;&#x304B;&#x306A;&#x308A;&#x3044;&#x304B;&#x3064;&#x304B;&#x3063;&#x305F;&#x306E;&#x3067;&#xFF0C;python&#x98A8;&#x306B;&#x3057;&#x3066;&#x307F;&#x305F;&#x3044;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#xFF0E;</p>
<pre><code class="language-Lisp">&gt;(do ((i 1 (+ 1 i)))
((&gt; i 5))
(print i))
</code></pre>
<p>&#x307E;&#x305A;&#x306F;Lisp&#x306E;for&#x30EB;&#x30FC;&#x30D7;</p>
<pre><code class="language-Lisp">&gt;(defmacro for (var (start end) &amp;body body)
`(do ((,var ,start (+ 1 ,var)))
((&gt;= ,var ,end))
,@body))
</code></pre>
<p>&#x30DE;&#x30AF;&#x30ED;&#x3067;&#x66F8;&#x304D;&#x63DB;&#x3048;&#x305F;&#x3082;&#x306E;</p>
<pre><code class="language-Lisp">&gt;(for i (1 5) (print i))
1 
2 
3 
4 
NIL
</code></pre>
<p>&#x7D50;&#x679C; &#x304B;&#x306A;&#x308A;&#x66F8;&#x304D;&#x3084;&#x3059;&#x304F;&#x306A;&#x308A;&#x307E;&#x3057;&#x305F;&#xFF0E;</p>
<p>&#x4ECA;&#x56DE;&#x306F;&#x7C21;&#x5358;&#x306A;&#x4F8B;&#x306E;&#x307F;&#x306B;&#x306A;&#x3063;&#x3066;&#x3057;&#x307E;&#x3063;&#x305F;&#x306E;&#x3067;&#xFF0C;&#x30DE;&#x30AF;&#x30ED;&#x306E;<strong>&#x9A5A;&#x7570;</strong>&#x304C;&#x611F;&#x3058;&#x3089;&#x308C;&#x308B;&#x307E;&#x3067;&#x81EA;&#x5206;&#x3067;&#x52C9;&#x5F37;&#x3057;&#x305F;&#x3044;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#xFF01;&#xFF01;</p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><h1 id="%E3%81%BE%E3%81%A8%E3%82%81">&#x307E;&#x3068;&#x3081;</h1>
<p>&#x30FB;Lisp&#x306F;&#x3059;&#x3079;&#x3066;&#x30EA;&#x30B9;&#x30C8;&#x5F62;&#x3067;&#x8A18;&#x8FF0;&#x3059;&#x308B;&#x3068;&#x3044;&#x3046;&#x8D85;&#x6700;&#x4F4E;&#x9650;&#x306E;&#x30EB;&#x30FC;&#x30EB;&#x3067;&#x69CB;&#x6210;&#x3055;&#x308C;&#x3066;&#x304A;&#x308A;&#xFF0C;&#x6975;&#x3081;&#x3066;&#x62E1;&#x5F35;&#x6027;&#x304C;&#x9AD8;&#x3044;&#x6545;&#x306B;Lisper&#x3068;&#x547C;&#x3070;&#x308C;&#x308B;&#x4FE1;&#x8005;&#x3092;&#x751F;&#x307F;&#x51FA;&#x3057;&#x3066;&#x304D;&#x305F;<br>
&#x30FB;Lisp&#x3092;Lisp&#x3067;&#x66F8;&#x304F;&#x3053;&#x3068;&#x3055;&#x3048;&#x3067;&#x304D;&#x308B;&#x30DE;&#x30AF;&#x30ED;&#x3068;&#x3044;&#x3046;&#x6A5F;&#x80FD;&#x304C;&#x5B58;&#x5728;&#x3057;&#xFF0C;&#x8D85;&#x5F37;&#x529B;<br>
&#x30FB;Lisper&#x3078;&#x306E;&#x9053;&#x306E;&#x308A;&#x306F;&#x9577;&#x3044;</p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><p>&#x4ECA;&#x56DE;&#x306F;Lisp&#x306E;&#x57FA;&#x790E;&#x7684;&#x306A;&#x5185;&#x5BB9;&#x3060;&#x3051;&#x306B;&#x306A;&#x3063;&#x3066;&#x3057;&#x307E;&#x3044;&#x307E;&#x3057;&#x305F;&#x304C;&#xFF0C;&#x304B;&#x306A;&#x308A;&#x5947;&#x5999;&#x306A;&#x8A00;&#x8A9E;&#x3067;&#x5B66;&#x3093;&#x3067;&#x3044;&#x3066;&#x975E;&#x5E38;&#x306B;&#x697D;&#x3057;&#x304B;&#x3063;&#x305F;&#x306E;&#x3067;&#xFF0C;Lisper&#x306B;&#x8FD1;&#x3065;&#x304F;&#x305F;&#x3081;&#x306B;&#x4ECA;&#x5F8C;&#x3082;&#x66F8;&#x304D;&#x7D9A;&#x3051;&#x3066;&#x307F;&#x3088;&#x3046;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#xFF01;(&#x307E;&#x305F;&#x6210;&#x9577;&#x3057;&#x3066;&#x8A18;&#x4E8B;&#x306B;&#x3067;&#x304D;&#x305F;&#x3089;&#x3044;&#x3044;&#x306A;&#x3042;)</p>
<p>&#x660E;&#x65E5;&#x306F;&#x540C;&#x3058;&#x304F;Backend&#x306E;motoaki&#x306E;&#x8A18;&#x4E8B;&#x306B;&#x306A;&#x308A;&#x307E;&#x3059;&#xFF01;&#x304A;&#x697D;&#x3057;&#x307F;&#x306B;&#xFF01;</p>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><h3 id="%E5%8F%82%E8%80%83%E8%B3%87%E6%96%99">&#x53C2;&#x8003;&#x8CC7;&#x6599;</h3>
<p>[1]&#x300C;Land of Lisp&#x300D;  Conrad Barski, M.D.&#x8457;<br>
[2] &#x3068;&#x307B;&#x307B;&#x306E;LISP&#x5165;&#x9580;  <a href="https://www.tohoho-web.com/ex/lisp.html#repl">https://www.tohoho-web.com/ex/lisp.html#repl</a></p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[ヘッドレスUIライブラリを使ってみる]]></title><description><![CDATA[React向けのヘッドレスUIライブラリの紹介と実際にドロップダウンメニューを作ってみます]]></description><link>http://blog.shinonome.io/hetudoresuuiraiburari/</link><guid isPermaLink="false">675bd0c284f04652f6203dbb</guid><category><![CDATA[フロントエンド]]></category><dc:creator><![CDATA[PlayGround]]></dc:creator><pubDate>Sat, 14 Dec 2024 15:02:00 GMT</pubDate><media:content url="http://blog.shinonome.io/content/images/2024/12/Slide-16_9---1-1.jpg" medium="image"/><content:encoded><![CDATA[<img src="http://blog.shinonome.io/content/images/2024/12/Slide-16_9---1-1.jpg" alt="&#x30D8;&#x30C3;&#x30C9;&#x30EC;&#x30B9;UI&#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x30EA;&#x3092;&#x4F7F;&#x3063;&#x3066;&#x307F;&#x308B;"><p><a href="https://qiita.com/advent-calendar/2024/playground">PlayGroundAdventCalender2024</a>&#x306E;15&#x65E5;&#x76EE;</p><p>&#x3053;&#x3093;&#x306B;&#x3061;&#x306F;&#x3001;&#x30C7;&#x30B6;&#x30A4;&#x30F3;&#x30B3;&#x30FC;&#x30B9;&#x306E;Haru&#x3067;&#x3059;<br>PlayGround&#x3067;&#x306F;&#x30C7;&#x30B6;&#x30A4;&#x30F3;&#x30B3;&#x30FC;&#x30B9;&#x3067;&#x3059;&#x304C;&#x3001;&#x500B;&#x4EBA;&#x3067;&#x306F;Web&#x958B;&#x767A;&#x3092;&#x5168;&#x822C;&#x7684;&#x306B;&#x5B66;&#x3093;&#x3067;&#x3044;&#x307E;&#x3059;</p><p>&#x305D;&#x3057;&#x3066;&#x4ECA;&#x56DE;&#x306F;React&#x3067;&#x4F7F;&#x3048;&#x308B;&#x30D8;&#x30C3;&#x30C9;&#x30EC;&#x30B9;UI&#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x304A;&#x30EA;&#x306B;&#x3064;&#x3044;&#x3066;&#x7D39;&#x4ECB;&#x3057;&#x305F;&#x3044;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;</p><h2 id="%E3%83%98%E3%83%83%E3%83%89%E3%83%AC%E3%82%B9-ui-%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA-%E3%81%A8%E3%81%AF">&#x30D8;&#x30C3;&#x30C9;&#x30EC;&#x30B9; UI &#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x30EA; &#x3068;&#x306F;</h2><p>&#x305D;&#x3082;&#x305D;&#x3082;&#x3053;&#x308C;&#x304C;&#x4F55;&#x304B;&#x77E5;&#x3063;&#x3066;&#x3044;&#x307E;&#x3059;&#x304B;&#xFF1F;</p><p>&#x300C;&#x30B9;&#x30BF;&#x30A4;&#x30EB;&#x4EE5;&#x5916;&#x306E;<strong>&#x632F;&#x308B;&#x821E;&#x3044;</strong>&#x3092;&#x63D0;&#x4F9B;&#x3059;&#x308B;&#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x30EA;&#x300D;<br>&#x306E;&#x3053;&#x3068;&#x3067;&#x3059;</p><p>&#x5F93;&#x6765;&#x306E;UI&#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x30EA;&#x3067;&#x306F;&#x5143;&#x3005;&#x30B9;&#x30BF;&#x30A4;&#x30EB;&#x304C;&#x3064;&#x3044;&#x3066;&#x3044;&#x307E;&#x3059;<br>&#x30DC;&#x30BF;&#x30F3;&#x306B;&#x306F;&#x8272;&#x304C;&#x3064;&#x3044;&#x3066;&#x3066;&#x3001;&#x4F59;&#x767D;&#x304C;&#x3042;&#x3063;&#x3066;&#x3001;&#x30DB;&#x30D0;&#x30FC;&#x3057;&#x305F;&#x308A;&#x30AF;&#x30EA;&#x30C3;&#x30AF;&#x3057;&#x305F;&#x6642;&#x306B;&#x5909;&#x5316;&#x3059;&#x308B;&#x3068;&#x3044;&#x3046;&#x3088;&#x3046;&#x306A;&#x611F;&#x3058;&#x3067;&#x3059;</p><p>&#x305D;&#x308C;&#x3089;&#x304C;<strong>&#x306A;&#x3044;</strong>&#x306E;&#x304C;&#x30D8;&#x30C3;&#x30C9;&#x30EC;&#x30B9;UI&#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x30EA;&#x3068;&#x306A;&#x308A;&#x307E;&#x3059;</p><p>&#x305D;&#x306E;&#x305F;&#x3081;&#x5B8C;&#x5168;&#x30AA;&#x30EA;&#x30B8;&#x30CA;&#x30EB;&#x306E;&#x30C7;&#x30B6;&#x30A4;&#x30F3;&#x306B;&#x3059;&#x308B;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x308B;&#x306E;&#x3067;&#x3059;</p><!--kg-card-begin: markdown--><h3 id="%E3%81%84%E3%81%8F%E3%81%A4%E3%81%8B%E7%B4%B9%E4%BB%8B">&#x3044;&#x304F;&#x3064;&#x304B;&#x7D39;&#x4ECB;</h3>
<ul>
<li><a href="https://www.radix-ui.com/primitives">Radix UI</a>
<ul>
<li>shadcn/ui&#x3067;&#x3082;&#x4F7F;&#x308F;&#x308C;&#x3066;&#x3044;&#x308B;&#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x30EA;</li>
</ul>
</li>
<li><a href="https://headlessui.com/">HeadlessUI</a>
<ul>
<li>TailwindCSS&#x3068;&#x540C;&#x3058;&#x958B;&#x767A;&#x5143;&#x306A;&#x306E;&#x3067;TailwindCSS&#x3068;&#x306E;&#x76F8;&#x6027;&#x304C;&#x3044;&#x3044;</li>
</ul>
</li>
<li><a href="https://react-spectrum.adobe.com/react-aria/index.html">React aria</a>
<ul>
<li>Adobe&#x304C;&#x4F5C;&#x3063;&#x3066;&#x304A;&#x308A;&#x3001;&#x30A2;&#x30AF;&#x30BB;&#x30B7;&#x30D3;&#x30EA;&#x30C6;&#x30A3;&#x306B;&#x7279;&#x5316;&#x3057;&#x3066;&#x3044;&#x308B;</li>
</ul>
</li>
</ul>
<p>&#x4ED6;&#x306B;&#x3082;&#x8272;&#x3005;&#x3042;&#x3063;&#x305F;&#x308A;&#x5F93;&#x6765;&#x306E;UI&#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x30EA;&#x304C;&#x30D8;&#x30C3;&#x30C9;&#x30EC;&#x30B9;&#x5316;&#x3057;&#x3066;&#x3044;&#x305F;&#x308A;&#x3082;&#x3059;&#x308B;&#x306E;&#x3067;&#x3001;&#x6C17;&#x306B;&#x306A;&#x3063;&#x305F;&#x65B9;&#x306F;&#x8ABF;&#x3079;&#x3066;&#x307F;&#x3066;&#x304F;&#x3060;&#x3055;&#x3044;&#xFF01;</p>
<!--kg-card-end: markdown--><h2 id="%E5%AE%9F%E9%9A%9B%E3%81%AB%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B">&#x5B9F;&#x969B;&#x306B;&#x4F7F;&#x3063;&#x3066;&#x30B3;&#x30F3;&#x30DD;&#x30FC;&#x30CD;&#x30F3;&#x30C8;&#x3092;&#x4F5C;&#x3063;&#x3066;&#x307F;&#x308B;</h2><p>&#x7D39;&#x4ECB;&#x3057;&#x305F;&#x4E2D;&#x3067;&#x3082;TailwindCSS&#x3068;&#x76F8;&#x6027;&#x3068;&#x3044;&#x3044;HeadlessUI&#x3092;&#x4F7F;&#x3063;&#x3066;&#x3001;&#x30C9;&#x30ED;&#x30C3;&#x30D7;&#x30C0;&#x30A6;&#x30F3;&#x30E1;&#x30CB;&#x30E5;&#x30FC;&#x3092;&#x4F5C;&#x3063;&#x3066;&#x3044;&#x3053;&#x3046;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://headlessui.com/react/menu"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Headless UI</div><div class="kg-bookmark-description">Completely unstyled, fully accessible UI components, designed to integrate beautifully with Tailwind CSS.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://headlessui.com/apple-touch-icon.png" alt="&#x30D8;&#x30C3;&#x30C9;&#x30EC;&#x30B9;UI&#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x30EA;&#x3092;&#x4F7F;&#x3063;&#x3066;&#x307F;&#x308B;"><span class="kg-bookmark-author">Headless UI</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://headlessui.com/_next/static/media/social-card.46834755.jpg" alt="&#x30D8;&#x30C3;&#x30C9;&#x30EC;&#x30B9;UI&#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x30EA;&#x3092;&#x4F7F;&#x3063;&#x3066;&#x307F;&#x308B;"></div></a></figure><h3 id="%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E6%8A%80%E8%A1%93%E6%A7%8B%E6%88%90">&#x4F7F;&#x7528;&#x3059;&#x308B;&#x6280;&#x8853;&#x69CB;&#x6210;</h3><ul><li>React v18.3.1</li><li>Vite v6.0.1</li><li>Tailwind CSS v3.4.16</li><li>@headlessui/react v2.2.0</li></ul><h3 id="%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89">&#x74B0;&#x5883;&#x69CB;&#x7BC9;</h3><p>&#x3053;&#x306E;Tailwind CSS&#x306E;&#x30C9;&#x30AD;&#x30E5;&#x30E1;&#x30F3;&#x30C8;&#x306E;&#x624B;&#x9806;&#x3067;&#x3084;&#x3063;&#x3066;&#x3044;&#x304D;&#x307E;&#x3059;<br>(&#x672C;&#x984C;&#x3068;&#x306F;&#x9055;&#x3046;&#x306E;&#x3067;&#x7C21;&#x6F54;&#x306B;&#x9032;&#x3081;&#x307E;&#x3059;)</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://tailwindcss.com/docs/guides/vite"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Install Tailwind CSS with Vite - Tailwind CSS</div><div class="kg-bookmark-description">Setting up Tailwind CSS in a Vite project.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://tailwindcss.com/favicons/apple-touch-icon.png?v=3" alt="&#x30D8;&#x30C3;&#x30C9;&#x30EC;&#x30B9;UI&#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x30EA;&#x3092;&#x4F7F;&#x3063;&#x3066;&#x307F;&#x308B;"><span class="kg-bookmark-author">Tailwind CSS</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://tailwindcss.com/api/og?path=/docs/guides/vite" alt="&#x30D8;&#x30C3;&#x30C9;&#x30EC;&#x30B9;UI&#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x30EA;&#x3092;&#x4F7F;&#x3063;&#x3066;&#x307F;&#x308B;"></div></a></figure><p>&#x307E;&#x305A;&#x306F;Vite&#x3067;React&#x306E;&#x30D7;&#x30ED;&#x30B8;&#x30A7;&#x30AF;&#x30C8;&#x4F5C;&#x6210;</p><figure class="kg-card kg-code-card"><pre><code>npm create vite@latest my-project -- --template react</code></pre><figcaption>&#x30BF;&#x30FC;&#x30DF;&#x30CA;&#x30EB;</figcaption></figure><p>Tailwind CSS&#x3092;&#x30A4;&#x30F3;&#x30B9;&#x30C8;&#x30FC;&#x30EB;</p><figure class="kg-card kg-code-card"><pre><code>npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p</code></pre><figcaption>&#x30BF;&#x30FC;&#x30DF;&#x30CA;&#x30EB;</figcaption></figure><p>Tailwind CSS&#x306E;&#x9069;&#x7528;&#x7BC4;&#x56F2;&#x3092;&#x6307;&#x5B9A;</p><figure class="kg-card kg-code-card"><pre><code class="language-jsx">/** @type {import(&apos;tailwindcss&apos;).Config} */
export default {
  content: [
    &quot;./index.html&quot;,
    &quot;./src/**/*.{js,ts,jsx,tsx}&quot;,
  ],
  theme: {
    extend: {},
  },
  plugins: [],
}</code></pre><figcaption>tailwind.config.js</figcaption></figure><p>&#x4ED6;&#x306E;&#x4E0D;&#x8981;&#x306A;CSS&#x306F;&#x524A;&#x9664;&#x3057;&#x3001;&#x3053;&#x308C;&#x3060;&#x3051;&#x52A0;&#x3048;&#x308B;</p><figure class="kg-card kg-code-card"><pre><code class="language-css">@tailwind base;
@tailwind components;
@tailwind utilities;</code></pre><figcaption>index.css</figcaption></figure><p>&#x3053;&#x308C;&#x3067;Tailwind CSS&#x306E;&#x30BB;&#x30C3;&#x30C8;&#x30A2;&#x30C3;&#x30D7;&#x307E;&#x3067;&#x3067;&#x304D;&#x305F;&#x306E;&#x3067;&#x3001;&#x5B9F;&#x884C;&#x3059;&#x308B;</p><figure class="kg-card kg-code-card"><pre><code>npm run dev</code></pre><figcaption>&#x30BF;&#x30FC;&#x30DF;&#x30CA;&#x30EB;</figcaption></figure><h3 id="headlessui%E3%81%AE%E5%B0%8E%E5%85%A5">HeadlessUI&#x306E;&#x5C0E;&#x5165;</h3><p>&#x3067;&#x306F;&#x3084;&#x3063;&#x3068;&#x672C;&#x984C;&#x306E;HeadlessUI&#x3092;&#x5165;&#x308C;&#x3066;&#x3044;&#x304D;&#x307E;&#x3057;&#x3087;&#x3046;</p><p>&#x3068;&#x306F;&#x8A00;&#x3063;&#x3066;&#x3082;&#x3001;&#x30B7;&#x30F3;&#x30D7;&#x30EB;&#x306B;&#x30A4;&#x30F3;&#x30B9;&#x30C8;&#x30FC;&#x30EB;&#x3059;&#x308B;&#x3060;&#x3051;&#x3067;&#x3059;</p><pre><code>npm install @headlessui/react</code></pre><h3 id="%E3%83%89%E3%83%AD%E3%83%83%E3%83%97%E3%83%80%E3%82%A6%E3%83%B3%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%92%E4%BD%9C%E3%82%8B">&#x30C9;&#x30ED;&#x30C3;&#x30D7;&#x30C0;&#x30A6;&#x30F3;&#x30E1;&#x30CB;&#x30E5;&#x30FC;&#x3092;&#x4F5C;&#x308B;</h3><p>&#x3053;&#x3053;&#x304B;&#x3089;&#x4F5C;&#x3063;&#x3066;&#x3044;&#x304F;&#x306E;&#x3067;&#x3059;&#x304C;&#x3001;&#x30D8;&#x30C3;&#x30C9;&#x30EC;&#x30B9;UI&#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x30EA;&#x3068;&#x3044;&#x3046;&#x3053;&#x3068;&#x304C;&#x308F;&#x304B;&#x308A;&#x3084;&#x3059;&#x3044;&#x3088;&#x3046;&#x306B;&#x307E;&#x305A;&#x306F;&#x4F55;&#x3082;&#x30B9;&#x30BF;&#x30A4;&#x30EB;&#x3092;&#x6307;&#x5B9A;&#x305B;&#x305A;&#x4F5C;&#x308A;&#x307E;&#x3059;</p><figure class="kg-card kg-code-card"><pre><code class="language-tsx">import { Menu, MenuButton, MenuItem, MenuItems } from &quot;@headlessui/react&quot;;

function App() {
	return (
		&lt;Menu&gt;
			&lt;MenuButton&gt;open&lt;/MenuButton&gt;
			&lt;MenuItems&gt;
				&lt;MenuItem&gt;
					&lt;a href=&quot;#&quot;&gt;item1&lt;/a&gt;
				&lt;/MenuItem&gt;
				&lt;MenuItem&gt;
					&lt;a href=&quot;#&quot;&gt;item2&lt;/a&gt;
				&lt;/MenuItem&gt;
				&lt;MenuItem&gt;
					&lt;a href=&quot;#&quot;&gt;item3&lt;/a&gt;
				&lt;/MenuItem&gt;
			&lt;/MenuItems&gt;
		&lt;/Menu&gt;
	);
}

export default App;

</code></pre><figcaption>App.tsx</figcaption></figure><p>&#x3053;&#x308C;&#x306F;&#x672C;&#x5F53;&#x306B;&#x5FC5;&#x8981;&#x306A;&#x3082;&#x306E;&#x3092;import&#x3057;&#x305F;&#x3060;&#x3051;&#x3067;&#x3059;&#x306D;</p><p>&#x3067;&#x306F;&#x753B;&#x9762;&#x306F;&#x3069;&#x3046;&#x306A;&#x3063;&#x3066;&#x308B;&#x3067;&#x3057;&#x3087;&#x3046;&#x304B;&#xFF1F;</p><figure class="kg-card kg-image-card"><img src="http://blog.shinonome.io/content/images/2024/12/Pasted-image-20241213112850.png" class="kg-image" alt="&#x30D8;&#x30C3;&#x30C9;&#x30EC;&#x30B9;UI&#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x30EA;&#x3092;&#x4F7F;&#x3063;&#x3066;&#x307F;&#x308B;" loading="lazy" width="377" height="321"></figure><p><code>MenuButton</code>&#x306E;open&#x3060;&#x3051;&#x3060;&#x8868;&#x793A;&#x3055;&#x308C;&#x3066;&#x3044;&#x307E;&#x3059;<br>&#x307E;&#x3042;&#x3001;&#x3053;&#x308C;&#x306F;&#x30C9;&#x30ED;&#x30C3;&#x30D7;&#x30C0;&#x30A6;&#x30F3;&#x30E1;&#x30CB;&#x30E5;&#x30FC;&#x306A;&#x306E;&#x3067;&#x3001;&#x30AF;&#x30EA;&#x30C3;&#x30AF;&#x3057;&#x3066;&#x307F;&#x307E;&#x3059;</p><figure class="kg-card kg-image-card"><img src="http://blog.shinonome.io/content/images/2024/12/Pasted-image-20241213113049.png" class="kg-image" alt="&#x30D8;&#x30C3;&#x30C9;&#x30EC;&#x30B9;UI&#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x30EA;&#x3092;&#x4F7F;&#x3063;&#x3066;&#x307F;&#x308B;" loading="lazy" width="377" height="321"></figure><p>&#x4E2D;&#x306E;<code>MenuItems</code>&#x304C;&#x51FA;&#x3066;&#x304D;&#x307E;&#x3057;&#x305F;<br>&#x3053;&#x308C;&#x304C;&#x30C9;&#x30ED;&#x30C3;&#x30D7;&#x30C0;&#x30A6;&#x30F3;&#x306A;&#x306E;&#x304B;&#x30FC;&#x3063;&#x3066;&#x304F;&#x3089;&#x3044;&#x30B9;&#x30BF;&#x30A4;&#x30EB;&#x306A;&#x3044;&#x3067;&#x3059;&#x3088;&#x306D;&#x7B11;</p><p>&#x305F;&#x3060;&#x30AF;&#x30EA;&#x30C3;&#x30AF;&#x3057;&#x305F;&#x3089;&#x4E2D;&#x8EAB;&#x304C;&#x51FA;&#x3066;&#x304F;&#x308B;&#x6319;&#x52D5;&#x306F;&#x3053;&#x308C;&#x3060;&#x3051;&#x3067;&#x4F5C;&#x308C;&#x307E;&#x3057;&#x305F;<br>&#x3042;&#x3068;&#x306F;&#x597D;&#x304D;&#x306B;&#x30B9;&#x30BF;&#x30A4;&#x30EA;&#x30F3;&#x30B0;&#x3059;&#x308C;&#x3070;&#x826F;&#x3044;&#x3060;&#x3051;&#x3067;&#x3059;</p><p>&#x81EA;&#x4F5C;&#x3059;&#x308B;&#x3088;&#x308A;&#x5727;&#x5012;&#x7684;&#x306B;<strong>&#x697D;</strong>&#x3067;&#x3059;&#x3088;&#x306D;<br>&#x305D;&#x3057;&#x3066;&#x3001;&#x666E;&#x901A;&#x306B;&#x4F7F;&#x3063;&#x3066;&#x3044;&#x308B;&#x5206;&#x306B;&#x306F;&#x30B9;&#x30BF;&#x30A4;&#x30EB;&#x304C;&#x306A;&#x3044;&#x3060;&#x3051;&#x306B;&#x898B;&#x3048;&#x307E;&#x3059;&#x304C;&#x3001;&#x30D8;&#x30C3;&#x30C9;&#x30EC;&#x30B9;UI&#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x30EA;&#x306B;&#x306F;&#x30A2;&#x30AF;&#x30BB;&#x30B7;&#x30D3;&#x30EA;&#x30C6;&#x30A3;&#x304C;&#x8003;&#x616E;&#x3055;&#x308C;&#x3066;&#x308B;&#x3082;&#x306E;&#x304C;&#x591A;&#x3044;&#x3067;&#x3059;<br>(&#x30B9;&#x30AF;&#x30EA;&#x30FC;&#x30F3;&#x30EA;&#x30FC;&#x30C0;&#x30FC;&#x3084;&#x30AD;&#x30FC;&#x30DC;&#x30FC;&#x30C9;&#x64CD;&#x4F5C;&#x306A;&#x3069;)</p><p>&#x3053;&#x308C;&#x3082;&#x30E1;&#x30EA;&#x30C3;&#x30C8;&#x306E;1&#x3064;&#x306B;&#x306A;&#x308A;&#x307E;&#x3059;</p><p>&#x3067;&#x3082;&#x307E;&#x3042;&#x6D41;&#x77F3;&#x306B;&#x3053;&#x306E;&#x307E;&#x307E;&#x3067;&#x306F;&#x4F7F;&#x308F;&#x306A;&#x3044;&#x306E;&#x3067;&#x30B9;&#x30BF;&#x30A4;&#x30EA;&#x30F3;&#x30B0;&#x3057;&#x3066;&#x3044;&#x304D;&#x307E;&#x3057;&#x3087;&#x3046;&#xFF01;</p><h3 id="tailwind-css-%E3%81%A7%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AA%E3%83%B3%E3%82%B0">Tailwind CSS &#x3067;&#x30B9;&#x30BF;&#x30A4;&#x30EA;&#x30F3;&#x30B0;</h3><p>&#x4E00;&#x5FDC;HeadlessUI&#x306E;&#x30C9;&#x30AD;&#x30E5;&#x30E1;&#x30F3;&#x30C8;&#x306B;&#x306F;&#x3059;&#x3067;&#x306B;&#x30B9;&#x30BF;&#x30A4;&#x30EA;&#x30F3;&#x30B0;&#x3055;&#x308C;&#x305F;&#x30B3;&#x30FC;&#x30C9;&#x4F8B;&#x3082;&#x8F09;&#x3063;&#x3066;&#x3044;&#x308B;&#x306E;&#x3067;&#x53C2;&#x8003;&#x306B;&#x3057;&#x3066;&#x307F;&#x3066;&#x304F;&#x3060;&#x3055;&#x3044;</p><p>&#x30A2;&#x30A4;&#x30B3;&#x30F3;&#x306F;&#x540C;&#x3058;&#x304F;Tailwind CSS&#x306E;&#x958B;&#x767A;&#x8005;&#x304C;&#x4F5C;&#x3063;&#x305F;Heroicons&#x3068;&#x3044;&#x3046;&#x3082;&#x306E;&#x3092;&#x4F7F;&#x3044;&#x307E;&#x3059;</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://heroicons.com/solid"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Heroicons</div><div class="kg-bookmark-description">Beautiful hand-crafted SVG icons, by the makers of Tailwind CSS.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://heroicons.com/_next/static/media/apple-touch-icon.822687be.png" alt="&#x30D8;&#x30C3;&#x30C9;&#x30EC;&#x30B9;UI&#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x30EA;&#x3092;&#x4F7F;&#x3063;&#x3066;&#x307F;&#x308B;"><span class="kg-bookmark-author">Heroicons</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://heroicons.com/_next/static/media/social-card.fefc68e0.jpg" alt="&#x30D8;&#x30C3;&#x30C9;&#x30EC;&#x30B9;UI&#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x30EA;&#x3092;&#x4F7F;&#x3063;&#x3066;&#x307F;&#x308B;"></div></a></figure><p>&#x203B;Tailwind CSS&#x306E;&#x5177;&#x4F53;&#x7684;&#x306A;&#x8A18;&#x6CD5;&#x306B;&#x3064;&#x3044;&#x3066;&#x306F;&#x89E3;&#x8AAC;&#x3057;&#x307E;&#x305B;&#x3093;</p><p>&#x3088;&#x304F;&#x3042;&#x308B;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x30A2;&#x30A4;&#x30B3;&#x30F3;&#x30AF;&#x30EA;&#x30C3;&#x30AF;&#x3057;&#x305F;&#x3089;&#x51FA;&#x3066;&#x304F;&#x308B;&#x30E1;&#x30CB;&#x30E5;&#x30FC;&#x306B;&#x3057;&#x3066;&#x307F;&#x3088;&#x3046;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;</p><p>&#x306A;&#x306E;&#x3067;&#x307E;&#x305A;&#x306F;<code>MenuButton</code>&#x3092;&#x30A2;&#x30A4;&#x30B3;&#x30F3;&#x306B;&#x3057;&#x307E;&#x3059;</p><figure class="kg-card kg-code-card"><pre><code class="language-tsx">&lt;MenuButton className={&quot;rounded-full w-12 h-12 border&quot;}&gt;
	&lt;img
		src=&quot;/image.png&quot;
		alt=&quot;user icon&quot;
		className=&quot;rounded-full&quot;
	/&gt;
&lt;/MenuButton&gt;</code></pre><figcaption>App.tsx</figcaption></figure><figure class="kg-card kg-image-card"><img src="http://blog.shinonome.io/content/images/2024/12/Pasted-image-20241213143326.png" class="kg-image" alt="&#x30D8;&#x30C3;&#x30C9;&#x30EC;&#x30B9;UI&#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x30EA;&#x3092;&#x4F7F;&#x3063;&#x3066;&#x307F;&#x308B;" loading="lazy" width="670" height="592" srcset="http://blog.shinonome.io/content/images/size/w600/2024/12/Pasted-image-20241213143326.png 600w, http://blog.shinonome.io/content/images/2024/12/Pasted-image-20241213143326.png 670w"></figure><p>&#x305D;&#x3057;&#x3066;<code>MenuItems</code>&#x306B;&#x306F;&#x3042;&#x308A;&#x305D;&#x3046;&#x306A;&#x611F;&#x3058;&#x306E;&#x30D7;&#x30ED;&#x30D5;&#x30A3;&#x30FC;&#x30EB;&#x30FB;&#x8A2D;&#x5B9A;&#x30FB;&#x30ED;&#x30B0;&#x30A2;&#x30A6;&#x30C8;&#x306E;3&#x3064;&#x3092;&#x542B;&#x3081;&#x3066;&#x307F;&#x307E;&#x3057;&#x305F;<br>&#x305D;&#x308C;&#x305E;&#x308C;&#x30A2;&#x30A4;&#x30B3;&#x30F3;&#x3082;&#x3064;&#x3051;&#x3066;&#x3044;&#x307E;&#x3059;</p><figure class="kg-card kg-code-card"><pre><code class="language-tsx">&lt;MenuItems
anchor={&quot;bottom end&quot;}
transition
className={&quot;rounded-full w-12 h-12 border data-[hover]:brightness-95 data-[open]:brightness-95 data-[focus]:outline-1 data-[focus]:outline-neutral-700&quot;}
&gt;
	&lt;MenuItem&gt;
		&lt;button className=&quot;group flex w-full items-center gap-2 rounded-lg py-2 px-3 data-[focus]:bg-neutral-400/10&quot;&gt;
			&lt;UserIcon className=&quot;size-4 fill-black/50&quot; /&gt;
			&#x30D7;&#x30ED;&#x30D5;&#x30A3;&#x30FC;&#x30EB;
		&lt;/button&gt;
	&lt;/MenuItem&gt;
	&lt;MenuItem&gt;
		&lt;button className=&quot;group flex w-full items-center gap-2 rounded-lg py-2 px-3 data-[focus]:bg-neutral-400/10&quot;&gt;
			&lt;Cog6ToothIcon className=&quot;size-4 fill-black/50&quot; /&gt;
			&#x8A2D;&#x5B9A;
		&lt;/button&gt;
	&lt;/MenuItem&gt;
	&lt;MenuItem&gt;
		&lt;button className=&quot;group flex w-full items-center gap-2 rounded-lg py-2 px-3 data-[focus]:bg-neutral-400/10&quot;&gt;
			&lt;ArrowRightStartOnRectangleIcon className=&quot;size-4 fill-black/50&quot; /&gt;
			&#x30ED;&#x30B0;&#x30A2;&#x30A6;&#x30C8;
		&lt;/button&gt;
	&lt;/MenuItem&gt;
&lt;/MenuItems&gt;

</code></pre><figcaption>App.tsx</figcaption></figure><figure class="kg-card kg-image-card"><img src="http://blog.shinonome.io/content/images/2024/12/Pasted-image-20241213143807.png" class="kg-image" alt="&#x30D8;&#x30C3;&#x30C9;&#x30EC;&#x30B9;UI&#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x30EA;&#x3092;&#x4F7F;&#x3063;&#x3066;&#x307F;&#x308B;" loading="lazy" width="754" height="642" srcset="http://blog.shinonome.io/content/images/size/w600/2024/12/Pasted-image-20241213143807.png 600w, http://blog.shinonome.io/content/images/2024/12/Pasted-image-20241213143807.png 754w" sizes="(min-width: 720px) 720px"></figure><p>&#x3053;&#x306E;&#x3088;&#x3046;&#x306A;&#x611F;&#x3058;&#x306B;&#x306A;&#x308A;&#x307E;&#x3057;&#x305F;</p><p><code>transition</code>&#x3092;&#x4F7F;&#x3063;&#x3066;&#x30A2;&#x30CB;&#x30E1;&#x30FC;&#x30B7;&#x30E7;&#x30F3;&#x3092;&#x3064;&#x3051;&#x305F;&#x308A;&#x3001;&#x30DB;&#x30D0;&#x30FC;&#x6642;&#x306E;&#x5909;&#x5316;&#x3092;&#x3064;&#x3051;&#x305F;&#x5B8C;&#x6210;&#x7CFB;&#x304C;&#x4EE5;&#x4E0B;&#x306B;&#x306A;&#x308A;&#x307E;&#x3059;&#xFF01;</p><figure class="kg-card kg-video-card"><div class="kg-video-container"><video src="http://blog.shinonome.io/content/media/2024/12/-----2024-12-13-14.55.47.mp4" poster="https://img.spacergif.org/v1/754x642/0a/spacer.png" width="754" height="642" playsinline preload="metadata" style="background: transparent url(&apos;http://blog.shinonome.io/content/images/2024/12/media-thumbnail-ember1291.jpg&apos;) 50% 50% / cover no-repeat;"></video><div class="kg-video-overlay"><button class="kg-video-large-play-icon"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/></svg></button></div><div class="kg-video-player-container"><div class="kg-video-player"><button class="kg-video-play-icon"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><path d="M23.14 10.608 2.253.164A1.559 1.559 0 0 0 0 1.557v20.887a1.558 1.558 0 0 0 2.253 1.392L23.14 13.393a1.557 1.557 0 0 0 0-2.785Z"/></svg></button><button class="kg-video-pause-icon kg-video-hide"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><rect x="3" y="1" width="7" height="22" rx="1.5" ry="1.5"/><rect x="14" y="1" width="7" height="22" rx="1.5" ry="1.5"/></svg></button><span class="kg-video-current-time">0:00</span><div class="kg-video-time">/<span class="kg-video-duration"></span></div><input type="range" class="kg-video-seek-slider" max="100" value="0"><button class="kg-video-playback-rate">1&#xD7;</button><button class="kg-video-unmute-icon"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><path d="M15.189 2.021a9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h1.794a.249.249 0 0 1 .221.133 9.73 9.73 0 0 0 7.924 4.85h.06a1 1 0 0 0 1-1V3.02a1 1 0 0 0-1.06-.998Z"/></svg></button><button class="kg-video-mute-icon kg-video-hide"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><path d="M16.177 4.3a.248.248 0 0 0 .073-.176v-1.1a1 1 0 0 0-1.061-1 9.728 9.728 0 0 0-7.924 4.85.249.249 0 0 1-.221.133H5.25a3 3 0 0 0-3 3v2a3 3 0 0 0 3 3h.114a.251.251 0 0 0 .177-.073ZM23.707 1.706A1 1 0 0 0 22.293.292l-22 22a1 1 0 0 0 0 1.414l.009.009a1 1 0 0 0 1.405-.009l6.63-6.631A.251.251 0 0 1 8.515 17a.245.245 0 0 1 .177.075 10.081 10.081 0 0 0 6.5 2.92 1 1 0 0 0 1.061-1V9.266a.247.247 0 0 1 .073-.176Z"/></svg></button><input type="range" class="kg-video-volume-slider" max="100" value="100"></div></div></div></figure><h2 id="%E3%81%BE%E3%81%A8%E3%82%81">&#x307E;&#x3068;&#x3081;</h2><p>&#x30D8;&#x30C3;&#x30C9;&#x30EC;&#x30B9;UI&#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x30EA;&#x306E;&#x7D39;&#x4ECB;&#x3068;&#x5B9F;&#x969B;&#x306B;&#x30C9;&#x30ED;&#x30C3;&#x30D7;&#x30C0;&#x30A6;&#x30F3;&#x30E1;&#x30CB;&#x30E5;&#x30FC;&#x3092;&#x4F5C;&#x3063;&#x3066;&#x307F;&#x307E;&#x3057;&#x305F;</p><p>MUI&#x306E;&#x3088;&#x3046;&#x306A;UI&#x30E9;&#x30A4;&#x30D6;&#x30E9;&#x30EA;&#x3068;&#x9055;&#x3044;&#x3001;&#x7F6E;&#x304F;&#x3060;&#x3051;&#x3067;&#x826F;&#x3044;&#x3068;&#x3044;&#x3046;&#x306E;&#x3067;&#x306F;&#x306A;&#x3044;&#x306E;&#x3067;&#x30D8;&#x30C3;&#x30C9;&#x30EC;&#x30B9;&#x306E;&#x65B9;&#x304C;&#x826F;&#x3044;&#x308F;&#x3051;&#x3067;&#x306F;&#x3042;&#x308A;&#x307E;&#x305B;&#x3093;<br>&#x81EA;&#x7531;&#x5EA6;&#x304C;&#x9AD8;&#x304F;&#x72EC;&#x81EA;&#x306E;&#x30C7;&#x30B6;&#x30A4;&#x30F3;&#x306B;&#x3057;&#x305F;&#x3044;&#x6642;&#x306B;&#x4FBF;&#x5229;&#x306A;&#x306E;&#x3067;&#x3001;&#x9078;&#x629E;&#x80A2;&#x3068;&#x3057;&#x3066;&#x77E5;&#x3063;&#x3066;&#x304A;&#x304F;&#x306E;&#x304C;&#x826F;&#x3044;&#x306E;&#x304B;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#xFF01;</p><p>&#x660E;&#x65E5;&#x306F;yuuki&#x3055;&#x3093;&#x3067;&#x3059;&#x3002;&#x3088;&#x308D;&#x3057;&#x304F;&#x304A;&#x9858;&#x3044;&#x3057;&#x307E;&#x3059;&#xFF01;</p>]]></content:encoded></item></channel></rss>