<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>ソフトウェア on Parker Chang&#39;s Web</title>
    <link>https://49822b8f.my-site-hugo-6kx.pages.dev/ja/software/</link>
    <description>Recent content in ソフトウェア on Parker Chang&#39;s Web</description>
    <generator>Hugo</generator>
    <language>ja</language>
    <lastBuildDate>Sun, 13 Apr 2025 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://49822b8f.my-site-hugo-6kx.pages.dev/ja/software/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>私がどのようにWordPressサイトを構築したか</title>
      <link>https://49822b8f.my-site-hugo-6kx.pages.dev/ja/software/wordpress-hosting/</link>
      <pubDate>Sun, 13 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://49822b8f.my-site-hugo-6kx.pages.dev/ja/software/wordpress-hosting/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;注:&lt;/strong&gt; この記事は AI によって翻訳されています。もし不自然な表現や誤りがありましたら、メールやその他の手段でお知らせいただけると幸いです。フィードバックをいただけると助かります！&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;昨年、仕事でいくつかの大規模な WordPress サイトを扱いました。そこで学んだ WordPress 構築戦略を記録し、共有します。&lt;/p&gt;&#xA;&lt;p&gt;このサイトも後で WordPress に変更する予定です。変更後、なぜ、そしてどのように変更したかをまた共有します。&lt;/p&gt;&#xA;&lt;p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;  &#xA;  &#xA;&lt;figure&gt;&lt;img src=&#34;https://s.w.org/style/images/about/WordPress-logotype-standard.png&#34; alt=&#34;WordPress Logo&#34; class=&#34;mx-auto my-0 rounded-md&#34; /&gt;&#xA;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;wordpresscom-vs-wordpressorg&#34; class=&#34;relative group&#34;&gt;WordPress.com vs WordPress.org &lt;span class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100&#34;&gt;&lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34; style=&#34;text-decoration-line: none !important;&#34; href=&#34;#wordpresscom-vs-wordpressorg&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;まずは公式の 2 種類のプランについて触れます。エンジニアとして、私はずっと &lt;a href=&#34;https://wordpress.org/&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;WordPress.org&lt;/a&gt; しか知りませんでした。少し前に友人から聞かれて初めて &lt;a href=&#34;https://wordpress.com/&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;WordPress.com&lt;/a&gt; の存在を知りました。&lt;/p&gt;&#xA;&lt;p&gt;WordPress.com は Automattic 社が提供する全方位型のホスティングサービスで、Web ページ上でクリックするだけでサイトを作成できます。しかし、その分自由度は極めて低く、テーマのカスタマイズは難しく、多くのプラグインが使えず、無料版は非常に機能が制限されているため、事実上課金が必要です。&lt;/p&gt;&#xA;&lt;p&gt;WordPress.org はオープンソースの WordPress ソフトウェアをダウンロードできます。自分のニーズに合わせてデプロイでき、ほぼ制限はありません——プラグインのインストール、テーマの修正、または様々な魔法のようなカスタマイズが自由に行えます。ただし、サーバーの管理、更新、バックアップは自分で行う必要があります。&lt;/p&gt;&#xA;&lt;p&gt;とはいえ、WordPress.org にも市場にはプロセスを簡素化する多くの統合ソリューションがあり、必ずしもエンジニアに依頼する必要はありません。また、WordPress.com を使っている人も、制限が多すぎて安くないため、遅かれ早かれ乗り換えることになるだろうという予感がします。&lt;/p&gt;&#xA;&lt;p&gt;この記事でも WordPress.org を使用します。多少の技術知識が必要ですが、できるだけプロセスを明確に説明します。&lt;/p&gt;&#xA;&lt;h2 id=&#34;wordpressorg-市場のホスティングプラン&#34; class=&#34;relative group&#34;&gt;WordPress.org 市場のホスティングプラン &lt;span class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100&#34;&gt;&lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34; style=&#34;text-decoration-line: none !important;&#34; href=&#34;#wordpressorg-%e5%b8%82%e5%a0%b4%e3%81%ae%e3%83%9b%e3%82%b9%e3%83%86%e3%82%a3%e3%83%b3%e3%82%b0%e3%83%97%e3%83%a9%e3%83%b3&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;ここで紹介するものは使用したことはありませんが、価格といくつかの予備的な観察を分析してみます。&lt;/p&gt;&#xA;&lt;h3 id=&#34;1-従来のレンタルサーバー例bluehost&#34; class=&#34;relative group&#34;&gt;1. 従来のレンタルサーバー（例：&lt;a href=&#34;https://www.bluehost.com/&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;BlueHost&lt;/a&gt;） &lt;span class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100&#34;&gt;&lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34; style=&#34;text-decoration-line: none !important;&#34; href=&#34;#1-%e5%be%93%e6%9d%a5%e3%81%ae%e3%83%ac%e3%83%b3%e3%82%bf%e3%83%ab%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc%e4%be%8bbluehost&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;基本料金は月額 2.95 ドル（約 460 円）で、すぐにサイトを立ち上げることができ、その中で直接ドメインを購入することもできます。&lt;/p&gt;</description>
    </item>
    <item>
      <title>個人サイト</title>
      <link>https://49822b8f.my-site-hugo-6kx.pages.dev/ja/software/my-site/</link>
      <pubDate>Sun, 03 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://49822b8f.my-site-hugo-6kx.pages.dev/ja/software/my-site/</guid>
      <description></description>
    </item>
    <item>
      <title>Hugo で静的サイトを作る</title>
      <link>https://49822b8f.my-site-hugo-6kx.pages.dev/ja/software/my-first-tech-post/</link>
      <pubDate>Sat, 02 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://49822b8f.my-site-hugo-6kx.pages.dev/ja/software/my-first-tech-post/</guid>
      <description></description>
    </item>
    <item>
      <title>JavaScriptにおけるeval、リスク、そして代替案について</title>
      <link>https://49822b8f.my-site-hugo-6kx.pages.dev/ja/software/talk-about-js-eval/</link>
      <pubDate>Sat, 30 Sep 2023 00:00:00 +0000</pubDate>
      <guid>https://49822b8f.my-site-hugo-6kx.pages.dev/ja/software/talk-about-js-eval/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;注:&lt;/strong&gt; この記事は AI によって翻訳されています。もし不自然な表現や誤りがありましたら、メールやその他の手段でお知らせいただけると幸いです。フィードバックをいただけると助かります！&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;はじめに&#34; class=&#34;relative group&#34;&gt;はじめに &lt;span class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100&#34;&gt;&lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34; style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e3%81%af%e3%81%98%e3%82%81%e3%81%ab&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;最近、Google Sheets が提供する App Script を使って友人のために小さなクローラーを書き、ウェブ上の情報を自動的に移動・整理しようとしました。その際、HTML ソース内の&lt;code&gt;&amp;lt;script /&amp;gt;&lt;/code&gt;の情報が直接読み取れないことに気づきました。ChatGPT に聞いたところ、突然&lt;code&gt;eval&lt;/code&gt;を使用した実装を提示されました。以前は使ってはいけないということしか知らなかったので、今回は&lt;strong&gt;どのような時に使われる可能性があるのか&lt;/strong&gt;、&lt;strong&gt;なぜ使ってはいけないのか&lt;/strong&gt;、そして&lt;strong&gt;どのような代替案があるのか&lt;/strong&gt;について真剣に理解することにしました。&lt;/p&gt;&#xA;&lt;p&gt;この記事では、&lt;code&gt;eval&lt;/code&gt;を簡単に紹介した後、一つの使用事例と一つの面接問題を取り上げます。&lt;/p&gt;&#xA;&lt;h2 id=&#34;eval-基本紹介&#34; class=&#34;relative group&#34;&gt;&lt;code&gt;eval&lt;/code&gt; 基本紹介 &lt;span class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100&#34;&gt;&lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34; style=&#34;text-decoration-line: none !important;&#34; href=&#34;#eval-%e5%9f%ba%e6%9c%ac%e7%b4%b9%e4%bb%8b&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;eval(script);&lt;/code&gt; は JavaScript の組み込み関数です。&lt;/p&gt;&#xA;&lt;p&gt;渡された script 文字列（String）を JavaScript の式（Expression）または文（Statement）として実行することができます。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;使用シーン：「実行したい script を信頼しており、かつ String を JS コードとして実行したい場合」&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;戻り値-return-value&#34; class=&#34;relative group&#34;&gt;戻り値 (Return value) &lt;span class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100&#34;&gt;&lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34; style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%88%bb%e3%82%8a%e5%80%a4-return-value&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;パラメータが String の場合、JS の実際の実行結果を返します。その String が実行可能な JS コードでない場合は、&lt;code&gt;Error: {script} is not defined&lt;/code&gt;を返します。&lt;/p&gt;</description>
    </item>
    <item>
      <title>CallbackからAsync/Awaitへ：順次フェードインアニメーションを例に</title>
      <link>https://49822b8f.my-site-hugo-6kx.pages.dev/ja/software/from-callback-to-async/</link>
      <pubDate>Mon, 21 Aug 2023 00:00:00 +0000</pubDate>
      <guid>https://49822b8f.my-site-hugo-6kx.pages.dev/ja/software/from-callback-to-async/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;注:&lt;/strong&gt; この記事は AI によって翻訳されています。もし不自然な表現や誤りがありましたら、メールやその他の手段でお知らせいただけると幸いです。フィードバックをいただけると助かります！&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;まえがき&#34; class=&#34;relative group&#34;&gt;まえがき &lt;span class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100&#34;&gt;&lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34; style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e3%81%be%e3%81%88%e3%81%8c%e3%81%8d&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;この記事は、Callback Hell、Promise、Async/Await という言葉は聞いたことがあるけれど、実務で触れたことがない、あるいはその進化の過程がよくわからないという方向けに書かれています。「クリック後に要素を一つずつフェードインさせる」機能を実装しながら、これら 3 つの方法でどのように実装するかをステップバイステップで見ていきます。&lt;/p&gt;&#xA;&lt;p&gt;機能の MVP（実用最小限の製品）は以下のようになります：&lt;/p&gt;&#xA;&lt;p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;  &#xA;  &#xA;&lt;figure&gt;&lt;img src=&#34;https://49822b8f.my-site-hugo-6kx.pages.dev/software-development/from-callback-to-async/fading-example.gif&#34; alt=&#34;Fading Example&#34; class=&#34;mx-auto my-0 rounded-md&#34; /&gt;&#xA;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;直感的な考え方：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;フェードインは要素に transition を設定し、クリック時に opacity を変更すればいい。&lt;/li&gt;&#xA;&lt;li&gt;一つずつフェードイン？ということは、後ろの要素のフェードインは前の要素のフェードイン完了を「待つ」必要がある？&lt;/li&gt;&#xA;&lt;li&gt;JS で「待つ」といえば setTimeout が第一候補。一つずつ待つなら、一つの setTimeout が終わったら、別の setTimeout を呼べばいい。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;そこで、以下のようなコードを書きました：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;startBtn&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; document.&lt;span style=&#34;color:#a6e22e&#34;&gt;getElementById&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;startBtn&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;container&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; document.&lt;span style=&#34;color:#a6e22e&#34;&gt;getElementById&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;container&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;first&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; document.&lt;span style=&#34;color:#a6e22e&#34;&gt;getElementById&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;first&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;second&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; document.&lt;span style=&#34;color:#a6e22e&#34;&gt;getElementById&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;second&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;third&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; document.&lt;span style=&#34;color:#a6e22e&#34;&gt;getElementById&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;third&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;forth&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; document.&lt;span style=&#34;color:#a6e22e&#34;&gt;getElementById&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;forth&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fifth&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; document.&lt;span style=&#34;color:#a6e22e&#34;&gt;getElementById&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;fifth&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;resetBtn&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; document.&lt;span style=&#34;color:#a6e22e&#34;&gt;getElementById&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;reset&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;startBtn&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;addEventListener&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;click&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; () {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;style&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;display&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;none&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;container&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;classList&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;remove&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;hidden&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;setTimeout&lt;/span&gt;(() =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;first&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;classList&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;remove&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;hidden&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;setTimeout&lt;/span&gt;(() =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;second&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;classList&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;remove&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;hidden&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;setTimeout&lt;/span&gt;(() =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;third&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;classList&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;remove&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;hidden&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;setTimeout&lt;/span&gt;(() =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;forth&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;classList&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;remove&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;hidden&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;setTimeout&lt;/span&gt;(() =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;fifth&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;classList&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;remove&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;hidden&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;setTimeout&lt;/span&gt;(() =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &lt;span style=&#34;color:#a6e22e&#34;&gt;resetBtn&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;classList&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;remove&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;hidden&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }, &lt;span style=&#34;color:#ae81ff&#34;&gt;500&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          }, &lt;span style=&#34;color:#ae81ff&#34;&gt;500&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }, &lt;span style=&#34;color:#ae81ff&#34;&gt;500&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      }, &lt;span style=&#34;color:#ae81ff&#34;&gt;500&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }, &lt;span style=&#34;color:#ae81ff&#34;&gt;500&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }, &lt;span style=&#34;color:#ae81ff&#34;&gt;500&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;});&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;書き終わりました。各要素は 0.5 秒ごとに順次フェードインします。これで完了&amp;hellip;ですか？&lt;/p&gt;</description>
    </item>
    <item>
      <title>Googleサードパーティログインの実装（Vue / Express）</title>
      <link>https://49822b8f.my-site-hugo-6kx.pages.dev/ja/software/google-oauth-login/</link>
      <pubDate>Sun, 23 Oct 2022 00:00:00 +0000</pubDate>
      <guid>https://49822b8f.my-site-hugo-6kx.pages.dev/ja/software/google-oauth-login/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;注:&lt;/strong&gt; この記事は AI によって翻訳されています。もし不自然な表現や誤りがありましたら、メールやその他の手段でお知らせいただけると幸いです。フィードバックをいただけると助かります！&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;はじめに&#34; class=&#34;relative group&#34;&gt;はじめに &lt;span class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100&#34;&gt;&lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34; style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e3%81%af%e3%81%98%e3%82%81%e3%81%ab&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;最近、会社でサードパーティログインを連携する必要がありました。初めてのことだったので、かなりの落とし穴にはまりました。また、Google がまた改訂したようで、ネットで見つけた多くの記事はすでに使えなくなっていたため、連携のプロセスを共有し記録することにしました。&lt;/p&gt;&#xA;&lt;p&gt;基本的に、&lt;a href=&#34;https://github.com/google/google-api-javascript-client&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Google Sign-in JavaScript library&lt;/a&gt; を使って連携している場合、Google はすでに非推奨（&lt;a href=&#34;https://developers.google.com/identity/sign-in/web/reference&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;deprecated&lt;/a&gt;）にしており、2023/03/31 には完全に廃止され、ダウンロードや使用ができなくなる予定です。ですので、以前に&lt;a href=&#34;https://developers.google.com/identity/sign-in/web/reference&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;このプロセス&lt;/a&gt;に従って実装した方は、急いでリファクタリングしてください！&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;この記事では、Vue3 と Express を使用して简易的な Google サードパーティログインを実装する手順を案内します！&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;（新しい Sign In With Google ボタンを使用するほか、新しい Google One Tap 機能もあります）&lt;/p&gt;&#xA;&lt;p&gt;私は Google 純正のライブラリのみを使用しており、他人がラップしたものは使用していないため、React の場合でも構文を少し変えれば使用できます！&lt;/p&gt;&#xA;&lt;p&gt;現在、Google ログインの連携はますます簡単になっています。他人がラップしたライブラリを使用して結合度を高めることはお勧めしません。私の会社でも最近、以前使用していたライブラリがメンテナンスされなくなったため、再実装することになったからです。&lt;/p&gt;&#xA;&lt;h2 id=&#34;概要&#34; class=&#34;relative group&#34;&gt;概要 &lt;span class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100&#34;&gt;&lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34; style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a6%82%e8%a6%81&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;連携プロセスは 4 つのステップに分かれます：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Google Cloud で OAuth Consent Screen と Credentials を設定する&lt;/li&gt;&#xA;&lt;li&gt;フロントエンド：初期化 ＆ Google Button の表示&lt;/li&gt;&#xA;&lt;li&gt;フロントエンド：ユーザーが同意を押した後、Google Credential をバックエンドに POST し、返ってきた Authorization Token を持って正常にログインし、User Data を取得します！&lt;/li&gt;&#xA;&lt;li&gt;バックエンド：POST の Route で Google Credential を受け取った後、Google Auth Library で検証し、Google User Data を取得します。これらの User Data を DB に保存するか、対応する Authorization Token と User Data をフロントエンドに返します。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;このステップを読んだだけではまだ疑問があると思いますので、以下で手取り足取り実装していきます！&lt;/p&gt;</description>
    </item>
    <item>
      <title>Webフォントについて語る — デザイン、ファイル形式、そしてフロントエンドの読み込み</title>
      <link>https://49822b8f.my-site-hugo-6kx.pages.dev/ja/software/talk-about-web-font/</link>
      <pubDate>Thu, 28 Oct 2021 00:00:00 +0000</pubDate>
      <guid>https://49822b8f.my-site-hugo-6kx.pages.dev/ja/software/talk-about-web-font/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;注:&lt;/strong&gt; この記事は AI によって翻訳されています。もし不自然な表現や誤りがありましたら、メールやその他の手段でお知らせいただけると幸いです。フィードバックをいただけると助かります！&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;以前、&lt;a href=&#34;https://www.instagram.com/designnotdeep/&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;設事未深&lt;/a&gt; のフォント大補帖（フォント集）が配布され、フォント受け取りブームが起きました。スライド、ポスター、SNS 投稿以外に、Web ページでどのようにフォントが使われているか考えたことはありますか？&lt;/p&gt;&#xA;&lt;p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;  &#xA;  &#xA;&lt;figure&gt;&lt;img src=&#34;https://cdn-images-1.medium.com/max/800/0*OEf5PYLRWXCaS_Op&#34; alt=&#34;typewritter&#34; class=&#34;mx-auto my-0 rounded-md&#34; /&gt;&#xA;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;photo by &lt;a href=&#34;https://unsplash.com/@diklein&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;David Klein&lt;/a&gt; on &lt;a href=&#34;https://unsplash.com/&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;以前、&lt;a href=&#34;https://www.instagram.com/designnotdeep/&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;設事未深&lt;/a&gt; のフォント大補帖がブームを巻き起こしました。スライド、ポスター、SNS 投稿以外に、Web ページでどのようにフォントが使われているか考えたことはありますか？&lt;/p&gt;&#xA;&lt;p&gt;そこで今日は、Web ページでのフォント使用に関する知識と技術的な詳細を共有します。前半は一般的な知識で、後半は Web ページでのフォント使用に関する技術的な話が多くなります。フロントエンドエンジニアでない方は、適宜読み飛ばしてください！&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;この記事を通じて、以下のことをお伝えします 👇&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;フォントの誕生（非専門家版）&lt;/li&gt;&#xA;&lt;li&gt;フォントファイルの種類&lt;/li&gt;&#xA;&lt;li&gt;Web ページでのフォント使用方法&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;フォントデザインのプロセス&#34; class=&#34;relative group&#34;&gt;フォントデザインのプロセス &lt;span class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100&#34;&gt;&lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34; style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e3%83%95%e3%82%a9%e3%83%b3%e3%83%88%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%81%ae%e3%83%97%e3%83%ad%e3%82%bb%e3%82%b9&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;紹介に入る前に、フォントがどのようにデザインされるのか非常に気になったので、デザイナーの友人にフォントデザインについていくつか質問しました。ここでプロセスの概要を簡単に紹介します。&lt;/p&gt;&#xA;&lt;p&gt;繁体字中国語の場合、まずいくつかの決まった文字を作ります。これらの文字を作れば、漢字の画数の法則を大体カバーできます。例えば「永」はすべての異なる画数を含んでおり、「鷹」は横棒が多い場合のテストになるなどです。&lt;/p&gt;&#xA;&lt;p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;  &#xA;  &#xA;&lt;figure&gt;&lt;img src=&#34;https://cdn-images-1.medium.com/max/800/0*Yn16A9M8O252zZw9.jpg&#34; alt=&#34;&#34; class=&#34;mx-auto my-0 rounded-md&#34; /&gt;&#xA;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.easyatm.com.tw/wiki/%E6%B0%B8%E5%AD%97%E5%85%AB%E6%B3%95&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;https://www.easyatm.com.tw/wiki/%E6%B0%B8%E5%AD%97%E5%85%AB%E6%B3%95&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;次に、&lt;a href=&#34;https://glyphsapp.com/&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;strong&gt;Glyphs&lt;/strong&gt;&lt;/a&gt; や &lt;a href=&#34;https://fontforge.org/en-US/&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;strong&gt;FontForge&lt;/strong&gt;&lt;/a&gt; などのソフトウェアを使用して詳細を調整します。ほとんどの漢字を作り終えたら、並べて一貫性を確認し、最後は一気に残りの漢字を作り上げます。&lt;/p&gt;&#xA;&lt;h3 id=&#34;web-ページの繁体字中国語は何文字デザインする必要があるのか&#34; class=&#34;relative group&#34;&gt;Web ページの繁体字中国語は何文字デザインする必要があるのか？ &lt;span class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100&#34;&gt;&lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34; style=&#34;text-decoration-line: none !important;&#34; href=&#34;#web-%e3%83%9a%e3%83%bc%e3%82%b8%e3%81%ae%e7%b9%81%e4%bd%93%e5%ad%97%e4%b8%ad%e5%9b%bd%e8%aa%9e%e3%81%af%e4%bd%95%e6%96%87%e5%ad%97%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%81%99%e3%82%8b%e5%bf%85%e8%a6%81%e3%81%8c%e3%81%82%e3%82%8b%e3%81%ae%e3%81%8b&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;漢字の総量については、教育部の&lt;a href=&#34;https://dict.variants.moe.edu.tw/variants/rbt/home.do&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;異体字字典&lt;/a&gt;に 10 万字以上収録されていますが、Google Font が提供する&lt;a href=&#34;https://richer.tw/google_font_info/noto-serif-tc-cut&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Noto Sans TC&lt;/a&gt;ファイルを見ると、Web ページで読み込む必要がある文字数は約 1 万 5 千字程度です。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Design System — フロントエンドエンジニアも知っておくべきこと</title>
      <link>https://49822b8f.my-site-hugo-6kx.pages.dev/ja/software/design-system/</link>
      <pubDate>Wed, 22 Sep 2021 00:00:00 +0000</pubDate>
      <guid>https://49822b8f.my-site-hugo-6kx.pages.dev/ja/software/design-system/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;注:&lt;/strong&gt; この記事は AI によって翻訳されています。もし不自然な表現や誤りがありましたら、メールやその他の手段でお知らせいただけると幸いです。フィードバックをいただけると助かります！&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Design System について話す前に、一つの概念に触れておきたいと思います。「事前計画 &amp;gt; 実装」。&lt;/p&gt;&#xA;&lt;p&gt;ソフトウェアエンジニアの本質は実は建築家に非常に近く、彼らが家を建てるのに対し、私たちはシステムを構築します。&lt;/p&gt;&#xA;&lt;p&gt;良い家には優れた建築設計が必要であり、設計図の計画、建物全体の構造の理解、事前の計画設計に多くの時間を費やします。&lt;/p&gt;&#xA;&lt;p&gt;この概念はウェブページにおける &lt;strong&gt;Design System&lt;/strong&gt; に相当します！&lt;/p&gt;&#xA;&lt;h2 id=&#34;design-system-の前身--atomic-design&#34; class=&#34;relative group&#34;&gt;Design System の前身 — Atomic Design &lt;span class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100&#34;&gt;&lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34; style=&#34;text-decoration-line: none !important;&#34; href=&#34;#design-system-%e3%81%ae%e5%89%8d%e8%ba%ab--atomic-design&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;Design System について話す前に、&lt;strong&gt;Atomic Design&lt;/strong&gt; という概念について話す必要があります。&lt;/p&gt;&#xA;&lt;p&gt;結局のところ、ウェブページアーキテクチャ設計全体の先駆者は、2013 年に Atomic Design を提唱し、最初の口火を切った Brad Frost だと言えるでしょう。&lt;/p&gt;&#xA;&lt;p&gt;その後、Google が 2014 年に Material Design を作成し、2016 年に Airbnb がより完全な Design System を提唱しました。詳細は &lt;a href=&#34;https://www.youtube.com/watch?v=TuLY1cYM57g&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Karri Saarinen, Principle Designer at Airbnb&lt;/a&gt; の講演を参照してください。&lt;/p&gt;&#xA;&lt;h3 id=&#34;ではatomic-design-とは何でしょうか&#34; class=&#34;relative group&#34;&gt;では、Atomic Design とは何でしょうか？ &lt;span class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100&#34;&gt;&lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34; style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e3%81%a7%e3%81%afatomic-design-%e3%81%a8%e3%81%af%e4%bd%95%e3%81%a7%e3%81%97%e3%82%87%e3%81%86%e3%81%8b&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;まずこの画像を見てみましょう：&lt;/p&gt;</description>
    </item>
    <item>
      <title>フロントエンドフレームワーク第0課：フレームワークを学ぶ前に知っておくべきこと</title>
      <link>https://49822b8f.my-site-hugo-6kx.pages.dev/ja/software/frontend-framework-101/</link>
      <pubDate>Sun, 11 Jul 2021 00:00:00 +0000</pubDate>
      <guid>https://49822b8f.my-site-hugo-6kx.pages.dev/ja/software/frontend-framework-101/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;注:&lt;/strong&gt; この記事は AI によって翻訳されています。もし不自然な表現や誤りがありましたら、メールやその他の手段でお知らせいただけると幸いです。フィードバックをいただけると助かります！&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;フロントエンドフレームワークの選択は、多くの初心者（私を含む）にとって常に大きな疑問でした。私は当初、会社が React を使用していたため、React を書くしかありませんでした。最近、縁あって Angular に触れる機会があり、それがきっかけで「フロントエンドフレームワーク」について、「フレームワーク」とは一体何を指すのか？何が「フレームワーク」と呼ばれるのか？なぜフロントエンドでそれを使用する必要があるのか？使用しないとどうなるのか？Vue3 がすごいと聞いたが、学ぶべきか？などの問題について、より深く考えるようになりました。&lt;/p&gt;&#xA;&lt;p&gt;そしてこの記事は、上記の問題のいくつかを解決するための私の思考であり、フレームワークを学び始める前に知っておくべき基本的な概念だとも考えています。&lt;/p&gt;&#xA;&lt;h2 id=&#34;web-の歴史について簡単に&#34; class=&#34;relative group&#34;&gt;Web の歴史について簡単に &lt;span class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100&#34;&gt;&lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34; style=&#34;text-decoration-line: none !important;&#34; href=&#34;#web-%e3%81%ae%e6%ad%b4%e5%8f%b2%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6%e7%b0%a1%e5%8d%98%e3%81%ab&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;技術の発展は日進月歩ですが、技術の本質は「問題解決」にあります。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;技術の文脈を理解することで、目の前の技術を理解し、将来の発展を想像するのに大いに役立つと信じています。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;strong&gt;1990 年代：Web の誕生&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;1990 年 12 月 20 日、ティム・バーナーズ＝リーは&lt;a href=&#34;http://info.cern.ch/hypertext/WWW/TheProject.html&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;最初のウェブサイト&lt;/a&gt;を書き、World Wide Web を設計しました。&lt;/li&gt;&#xA;&lt;li&gt;この時期は静的なウェブページが主で、せいぜい動的なメニューや画像効果がある程度でした。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;2000 年代：Web 2.0 ＋ Ajax&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2004 年の Web 2.0 の誕生により、ウェブページの対話性が向上し始めました。Facebook (2004) や Youtube (2005) はこの時期に登場しました。&lt;/li&gt;&#xA;&lt;li&gt;Ajax の非同期リクエストの応用により、ウェブページはブラウザではなく JS を介してリクエストを送信できるようになったため、データを更新するためにリロードする必要がなくなりました。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;2010 年代：Web アプリケーション（Web Application）概念の出現&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;この時期から、Web の複雑さと対話性は大幅に向上し、当初はデスクトップアプリケーション（Desktop Application）でしかできなかったことができるようになってきました。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;このような高い対話性を持つウェブサイトが必要とする基本的な処理に対応するために、フロントエンドフレームワークが誕生しました。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Angular 1.0 (2010)&lt;/li&gt;&#xA;&lt;li&gt;React (2013)&lt;/li&gt;&#xA;&lt;li&gt;Vue (2014)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;（より詳細な進化の歴史に興味がある場合は、下部に参考リンクを添付します）&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
