<?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">
    <channel>
      <title>azukiazusa のテックブログ2</title>
      <link>https://azukiazusa.dev</link>
    <description>Web フロントエンド要素多めの技術ブログです。週に1度更新されます。</description>
      <lastBuildDate>Sat, 11 Apr 2026 11:23:28 GMT</lastBuildDate>
      <image>
        <url>https://azukiazusa.dev/favicon.png</url>
        <title>azukiazusa のテックブログ2</title>
        <link>https://azukiazusa.dev</link>
      </image>
      <atom:link href="https://azukiazusa.dev/rss.xml" rel="self" type="application/rss+xml" />
      <language>
        <![CDATA[ja]]>
      </language>
    
      <item>
        <title><![CDATA[Claude の Advisor tool を活用して性能とコストのバランスを最適化する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/claude-advisor-tool]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/claude-advisor-tool]]></guid>
        <description><![CDATA[Claude に新たに追加された advisor tool を使用すると、通常のタスクは軽量モデルに任せつつ、必要に応じて高性能モデルに相談することで、性能とコストのバランスを最適化できます。この記事では Claude Code 内で advisor tool を活用する方法について紹介します。]]></description>
        <pubDate>Sat, 11 Apr 2026 08:15:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Canvas 内に直接 HTML を描画できる HTML in Canvas API について]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/html-in-canvas-api]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/html-in-canvas-api]]></guid>
        <description><![CDATA[HTML in Canvas API は WICG で提案されている API で、Canvas 内に直接 HTML を描画できるようにするものです。現在の `<canvas>` 要素にはリッチテキストや HTML コンテンツを描画する標準的な方法が存在しないという課題があります。この記事では HTML in Canvas の使用方法やユースケースについて説明します。]]></description>
        <pubDate>Fri, 10 Apr 2026 10:17:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[大規模にエージェントを構築する Claude Managed Agents を試してみた]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/claude-managed-agents]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/claude-managed-agents]]></guid>
        <description><![CDATA[Claude Managed Agents は Claude を自律的なエージェントとして動作させるためのハーネスとインフラストラクチャーを提供します。長時間かかるタスクや非同期のタスクを実行するために使用するのが想定されています。この記事では実際に Claude Managed Agents を試してみた内容を紹介します。]]></description>
        <pubDate>Thu, 09 Apr 2026 10:03:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Codex の Sandbox とエージェントの承認について]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/codex-sandbox-agent-authorization]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/codex-sandbox-agent-authorization]]></guid>
        <description><![CDATA[コーディングエージェントの自動承認の範囲をどこまで許可するかは、ユーザー体験とセキュリティのバランスを取る上で重要な設計指針の1つです。Codex ではサンドボックス機能を提供することで、エージェントが安全に自律的に動作できる環境を実現しています。この記事では、Codex のサンドボックスの仕組みと、サンドボックス外でコマンドを実行する際の承認プロセスについて説明します。]]></description>
        <pubDate>Sun, 05 Apr 2026 02:29:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Boneyard で正確なスケルトンローダーを生成する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/skeleton-loader-boneyard]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/skeleton-loader-boneyard]]></guid>
        <description><![CDATA[スケルトンローダーは、コンテンツが読み込まれる前に表示されるプレースホルダーで、ユーザーに対して読み込み中であることを視覚的に示すためのものです。Boneyard はスケルトンローダーの手動の計測と更新の手間を解消するためのフレームワークです。この記事では、Boneyard を使用してスケルトンローダーを簡単に実装する方法について説明します。]]></description>
        <pubDate>Sat, 04 Apr 2026 05:19:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Codex のネットワークアクセス設定]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/30uyLGZmaCjSEC1BYiqAAx]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/30uyLGZmaCjSEC1BYiqAAx]]></guid>
        <description><![CDATA[デフォルトの `workspace-write` サンドボックスではネットワークアクセスは無効です。外部通信を許可したい場合は、`config.toml` で明示的に有効にします。
]]></description>
        <pubDate>Fri, 03 Apr 2026 17:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Codex の smart_approvals で承認の負担を軽減する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/5TTAVp7txRAnb0ANaDciqs]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/5TTAVp7txRAnb0ANaDciqs]]></guid>
        <description><![CDATA[コーディングエージェントに多く承認を求められると、本当に確認が必要なコマンドの実行を見落とす確率が高まります。Codex には `smart_approvals` という設定があります。これは承認が必要になったとき、その一部をそのままユーザーに投げるのではなく、まず `guardian reviewer` というサブエージェント経由で扱うための実験的な機能です。]]></description>
        <pubDate>Fri, 03 Apr 2026 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Codex Hooks で終了時に通知を出す]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/5OI2cJuMTqMVB7G1jrsfXU]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/5OI2cJuMTqMVB7G1jrsfXU]]></guid>
        <description><![CDATA[Codex では `hooks` を使って、特定のタイミングで任意のコマンドを実行できます。例えば応答が終わるたびに通知したい場合は `Stop hook` を使います。]]></description>
        <pubDate>Fri, 03 Apr 2026 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Claude Code の hooks で if フィールドでフックが呼び出される条件を指定する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/5x6WH26PPFDOKOhIDXKMQp]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/5x6WH26PPFDOKOhIDXKMQp]]></guid>
        <description><![CDATA[v2.1.85 で、Claude Code の hooks で if フィールドを指定できるようになりました。if フィールドには、フックが呼び出される条件を指定できます。条件に一致しない場合はプロセス自体が起動しないため、オーバーヘッド削減にもなります。]]></description>
        <pubDate>Thu, 02 Apr 2026 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[difit-review スキルでエージェント自身に変更点をコメントしてもらおう]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/difit-review-agent-comment]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/difit-review-agent-comment]]></guid>
        <description><![CDATA[difit はローカルの git 差分を GitHub スタイルのインターフェースで確認できる CLI ツールです。difit-review スキルを使用することでエージェントがコードの変更点にコメントを残した状態で difit を起動できます。この記事では、difit-review スキルを使用してエージェント自身にコードの変更点をコメントしてもらう方法を紹介します。]]></description>
        <pubDate>Thu, 02 Apr 2026 10:20:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Claude Code から Codex を呼び出すためのプラグイン codex-plugin-cc]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/claude-code-codex-plugin]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/claude-code-codex-plugin]]></guid>
        <description><![CDATA[Codex プラグインを使用すると、Claude Code から Codex を呼び出してコードレビューをしたり、タスクを委任するといったことが簡単にできるようになります。この記事では、Codex プラグインの使用方法と、どのような方法で Codex を呼び出しているのかといった内部の仕組みについて紹介します。]]></description>
        <pubDate>Tue, 31 Mar 2026 10:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Cline Kanban で複数のコーディングエージェントを一括管理する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/cline-kanban]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/cline-kanban]]></guid>
        <description><![CDATA[Cline Kanban は人間が数十個のエージェントを運用するうえで正気を保つためにはどうすればいいか、という問いに対する 1 つの答えとして、Cline が開発したツールです。Cline Kanban はカンバン方式のビューを提供します。各カードは稼働中のエージェントを表しており、どのエージェントが実行中で、どのエージェントが作業がブロックされているのか、どのエージェントが完了しているのかを一目で把握できるようになっています。]]></description>
        <pubDate>Sat, 28 Mar 2026 08:18:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Figma のキャンバスを AI エージェントから操作してデザインしよう]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/use-figma-mcp-tool]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/use-figma-mcp-tool]]></guid>
        <description><![CDATA[2026 年 3 月末、Figma の MCP サーバーに Figma のキャンバスを直接操作できる `use_figma` ツールが追加されました。`use_figma` ツールは Figma Plugin API を通じて Figma ファイル上で JavaScript を直接実行する汎用ツールとして設計されている点が特徴です。この記事では、実際に `use_figma` ツールを使用して Figma のキャンバスを操作する方法を試してみます。]]></description>
        <pubDate>Sat, 28 Mar 2026 03:45:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Storybook MCP を試してみた]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/storybook-mcp]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/storybook-mcp]]></guid>
        <description><![CDATA[Storybook MCP は Storybook と AI エージェントを接続し、エージェントがコンポーネントドキュメントを参照しつつコードを生成したり、ストーリーを作成して UI コンポーネントをテストしたりできるようにする機能です。この記事では、Storybook MCP を実際に試してみた内容を紹介します。]]></description>
        <pubDate>Wed, 25 Mar 2026 10:52:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Claude Code と Discord 連携はどのように動作しているのか？]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/how-discord-integration-works]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/how-discord-integration-works]]></guid>
        <description><![CDATA[Claude Code v2.1.80 から Research Preview 版として Claude Code channels（以下、チャンネル）が利用できるようになりました。チャンネルとは実行中の Claude Code のセッションに対して、外部からイベントを送ることができる MCP サーバーのことです。この記事では、Claude Code と Discord 連携がどのように動作しているのか、その仕組みを解説します。]]></description>
        <pubDate>Sun, 22 Mar 2026 02:24:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Discord から Claude Code とやり取りしてみた]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/discord-claude-code]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/discord-claude-code]]></guid>
        <description><![CDATA[Claude Code v2.1.80 から Research Preview 版として Claude Code channels（以下、チャンネル）が利用できるようになりました。チャンネルとは実行中の Claude Code のセッションに対して、外部からイベントを送ることができる MCP サーバーのことです。この記事では、Discord からチャンネルを通じて Claude Code とやり取りする方法を紹介します。]]></description>
        <pubDate>Fri, 20 Mar 2026 05:01:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[npm パッケージに Agent Skills を同梱する TanStack intent]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/tanstack-intent-to-bundle-agent-skills-with-npm-packages]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/tanstack-intent-to-bundle-agent-skills-with-npm-packages]]></guid>
        <description><![CDATA[ライブラリのメンテナが Agent Skills を生成・検証して npm パッケージに同梱することを支援するツールである `@tanstack/intent` を使用して、ライブラリの使用者側と、メンテナ側の両方の観点から Agent Skills を利用する方法を紹介します。]]></description>
        <pubDate>Sun, 15 Mar 2026 02:13:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[新時代のフロントエンドツールチェイン Vite+ を試してみた]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/try-vite-plus]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/try-vite-plus]]></guid>
        <description><![CDATA[Vite+ は Vite, Vitest, Oxlint, Oxfmt, Rolldown, tsdown といった人気のツールを統合し、開発, テスト, ビルド, リント, フォーマットなどのフロントエンド開発に必要な機能を1つのツールチェインで提供する新しいフロントエンドツールチェインです。この記事では実際に Vite+ をインストールして、プロジェクトのセットアップから開発、テスト、ビルドまでの一連の流れを試してみました。]]></description>
        <pubDate>Fri, 13 Mar 2026 10:43:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[CSS によるスクロールトリガーアニメーション]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/scroll-triggered-animations-css]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/scroll-triggered-animations-css]]></guid>
        <description><![CDATA[要素が画面内に入った時にアニメーションを開始するスクロールトリガーアニメーションは、これまでは JavaScript を使用して `Intersection Observer API` を利用する方法が一般的でした。JavaScript を使わずに CSS だけで実装を完結できるようになる `animation-trigger` という新しい CSS プロパティが登場しました。]]></description>
        <pubDate>Thu, 12 Mar 2026 10:30:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Skill Create スキルを使用したスキルの作成と改善]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/skill-create-skill-creation-and-improvement]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/skill-create-skill-creation-and-improvement]]></guid>
        <description><![CDATA[オープンスタンダードである Agent Skills に従い Claude Code にドメインの専門知識や組織のナレッジを提供するスキルが最近注目を集めていますが、スキルの作成にはいくつかのハードルがあります。Anthropic は skill-creator と呼ばれるスキルの作成と改善のプロセス、パフォーマンス測定を支援するツールを提供しています。この記事では skill-creator を使用してスキルを作成・改善を行うプロセスを実際に体験してみます]]></description>
        <pubDate>Sat, 07 Mar 2026 02:08:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[iOS Safari で触覚フィードバックを実現する WebHaptics]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/ios-safari-web-haptics]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/ios-safari-web-haptics]]></guid>
        <description><![CDATA[WebHaptics は、Web アプリケーションで触覚フィードバックを実装するための JavaScript ライブラリです。iOS Safari でも触覚フィードバックを提供することができます。この記事では、WebHaptics ライブラリの概要と、どのようにして iOS Safari で触覚フィードバックを実現しているのかについて解説します。]]></description>
        <pubDate>Wed, 04 Mar 2026 09:52:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[`clamp()` 関数を使用したレスポンシブなフォントサイズ]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/responsive-font-size-clamp]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/responsive-font-size-clamp]]></guid>
        <description><![CDATA[レスポンシブデザインにおいてメディアクエリを使用して異なる画面サイズに対して異なるフォントサイズを指定する方法は一般的ですが、いくつかの課題点もあります。`clamp()` 関数を使用することで、画面幅の変化に対してフォントサイズが滑らかに変化するようにできます。また煩雑なメディアクエリの管理を減らすことができます。]]></description>
        <pubDate>Sun, 01 Mar 2026 00:50:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[AI エージェントを通じてコードとキャンバスを接続するデザインツール Paper を試してみた]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/ai-agent-design-tool-paper]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/ai-agent-design-tool-paper]]></guid>
        <description><![CDATA[Paper は AI エージェントを通じてコードとキャンバスを双方向に接続するデザインツールで、AI にデザインの作成やコードへの変換を任せることができます。Paper の MCP サーバーのツールを組み合わせることでキャンバス上のノードの情報を取得したり、デザインを挿入・編集したりすることができます。この記事では実際に Paper を試して、コードからデザインへ、デザインからコードへの双方向のワークフローがどのように実現されているのかを紹介します。]]></description>
        <pubDate>Thu, 26 Feb 2026 10:45:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[プラットフォームごとの Chat ボットの実装を抽象化する Chat SDK]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/chat-bot-implementation-chat-sdk]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/chat-bot-implementation-chat-sdk]]></guid>
        <description><![CDATA[Chat SDK は TypeScript で記述されたライブラリで、1 つのコードベースで複数のチャットプラットフォームに対応するチャットボットを開発できるようになります。イベント型アーキテクチャを採用しており、メンション, メッセージ, リアクション, スラッシュコマンドなどのイベントに型安全なハンドラーを定義できます。この記事では実際に Chat SDK を使用して、Slack 向けのチャットボットを実装する方法を紹介します。]]></description>
        <pubDate>Wed, 25 Feb 2026 10:15:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[テキストサイズの拡大設定の問題と解決策]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/text-scaling-issues]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/text-scaling-issues]]></guid>
        <description><![CDATA[WCAG 2.2 では、ユーザーが画像拡大ソフトや支援技術を使用せずに、200% までテキストを拡大してもコンテンツが正しく表示されることを要求しています。しかし、テキストサイズの拡大に関しては、ブラウザや OS の設定を尊重せず、ユーザーがテキストサイズを拡大してもコンテンツが拡大されないという問題が長年存在していました。この記事では、この問題の原因と解決策について解説します。]]></description>
        <pubDate>Tue, 24 Feb 2026 10:40:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Claude Code デスクトップで Worktree を作成するとき .worktreeinclude で .gitignore で除外されているファイルを含める]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/claude-code-worktree-worktreeinclude-gitignore]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/claude-code-worktree-worktreeinclude-gitignore]]></guid>
        <description><![CDATA[Git Worktree を作成するとき、.gitignore に指定している .env ファイルなどがコピーされないという問題があります。この問題を解決するために Claude Code のデスクトップバージョンでは .worktreeinclude で .gitignore で除外されているファイルを含めることができます。]]></description>
        <pubDate>Mon, 23 Feb 2026 02:42:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[デスクトップ Claude Code の Preview 機能で UI を直接確認する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/claude-code-preview]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/claude-code-preview]]></guid>
        <description><![CDATA[Claude Code のデスクトップアプリに新しい Preview 機能がリリースされました。これを使用すると、コードから起動したアプリケーションの UI を直接確認しながら、同時にログやコードも確認して問題を解決できます。この記事では Preview 機能の使い方を紹介します。]]></description>
        <pubDate>Sat, 21 Feb 2026 02:13:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Claude Code to Figma を使ってコードから Figma デザインを生成する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/claude-code-to-figma]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/claude-code-to-figma]]></guid>
        <description><![CDATA[Claude Code to Figma はコードから Figma デザインを生成するための機能です。Figma MCP サーバーの `generate_figma_design` ツールを使用して、ローカルで開発したコードから Figma デザインを生成して、さらに Figma 上で編集した内容をコードに反映させるという双方向のワークフローが実現できるようになります。]]></description>
        <pubDate>Wed, 18 Feb 2026 10:22:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[AI エージェントのセッションを Git 互換のデータベースに保存する Entire CLI]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/entire-for-saving-ai-agent-sessions-as-git-compatible-database]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/entire-for-saving-ai-agent-sessions-as-git-compatible-database]]></guid>
        <description><![CDATA[Entire CLI は AI エージェントのセッションを Git 互換のデータベースとして保存するためのツールです。Git レポジトリで Entire を有効にすると、AI エージェントのセッションをチェックポイントとして保存できるようになります。チェックポイントではユーザーのプロンプトや AI エージェントの応答、ツールの使用履歴、AI がコードを書いた割合などを確認できます。]]></description>
        <pubDate>Sat, 14 Feb 2026 02:38:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Web アプリケーションをツール化する WebMCP]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/webmcp-for-web-applications]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/webmcp-for-web-applications]]></guid>
        <description><![CDATA[WebMCP は Web 開発者が Web アプリケーションの機能をツールとして公開できるようにする JavaScript インターフェイスです。これにより AI エージェントが Web アプリケーションの機能を直接呼び出して操作できるようになります。]]></description>
        <pubDate>Wed, 11 Feb 2026 01:44:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[React で動画を作る Remotion]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/react-remotion]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/react-remotion]]></guid>
        <description><![CDATA[Remotion は React を使ってプログラム的に動画を作成できるフレームワークです。CSS や SVG、Canvas API などのウェブ技術を活用したり、変数や関数、ループ、条件分岐などのプログラミングの概念を利用して動画を生成できます。この記事では Remotion の基本的な使い方を紹介します。]]></description>
        <pubDate>Sun, 08 Feb 2026 04:52:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Claude Code のオーケストレーション機能であるエージェントチームを試してみた]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/trying-claude-code-agent-teams]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/trying-claude-code-agent-teams]]></guid>
        <description><![CDATA[Claude Code のエージェントチームを使用すると、複数の Claude Code インスタンスが連携して動作するようになります。この記事では、Claude Code のエージェントチーム機能を試し、どのように動作するかを探ってみます。]]></description>
        <pubDate>Sat, 07 Feb 2026 05:09:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[MoonBit の宣言 UI ライブラリ Luna を使ってみる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/moonbit-declarative-ui-library-luna-ui]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/moonbit-declarative-ui-library-luna-ui]]></guid>
        <description><![CDATA[Luna は MoonBit と JavaScript を使用して Web アプリケーションのユーザーインターフェースを構築するための宣言型 UI ライブラリです。この記事では、Luna UI と MoonBit を使用してシンプルなカウンターアプリケーションを作成する方法を紹介します。]]></description>
        <pubDate>Sun, 01 Feb 2026 05:57:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[MoonBit で RESTful API サーバーを構築する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/moonbit-restful-api-server]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/moonbit-restful-api-server]]></guid>
        <description><![CDATA[MoonBit は、WebAssembly や JavaScript にコンパイルできる新しいプログラミング言語です。この記事では、MoonBit を使用してシンプルな RESTful API サーバーを作成する方法を紹介します。]]></description>
        <pubDate>Sun, 01 Feb 2026 04:50:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[AI とインタラクティブな UI のやり取りを実現する MCP Apps]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/ai-interactive-ui-with-mcp-apps]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/ai-interactive-ui-with-mcp-apps]]></guid>
        <description><![CDATA[MCP Apps は MCP にインタラクティブな UI コンポーネントを返す方法を標準化した拡張機能です。この記事では MCP Apps を使用してインタラクティブな UI コンポーネントをエージェントが返す方法について試してみます。]]></description>
        <pubDate>Tue, 27 Jan 2026 11:05:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[はじめての MoonBit]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/getting-started-with-moonbit]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/getting-started-with-moonbit]]></guid>
        <description><![CDATA[MoonBit は WebAssembly と JavaScript にコンパイル可能な新しいプログラミング言語です。Rust 風のシンタックスと関数型プログラミングの特徴を持ちながら、ガベージコレクションを採用しているという特徴があります。この記事では MoonBit の基本的な使い方をチュートリアル形式で紹介します。]]></description>
        <pubDate>Sun, 25 Jan 2026 04:41:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[新しいデザインツール Pencil を試してみた]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/new-design-tool-pencil]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/new-design-tool-pencil]]></guid>
        <description><![CDATA[Pencil は Figma のような使用感で UI デザインができるツールです。Pencil MCP サーバーを利用して双方向に AI コーディングツールと連携し、デザインからコードを書き出したり、プロンプトでデザインを生成したりすることができます。]]></description>
        <pubDate>Sat, 24 Jan 2026 05:09:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[TUI を構築するための Typescript ライブラリ OpenTUI]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/build-tui-with-opentui]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/build-tui-with-opentui]]></guid>
        <description><![CDATA[AI コーディングエージェントの普及により、ターミナルベースの TUI アプリケーションの需要が高まっています。OpenTUI は Typescript で TUI アプリケーションを簡単に構築できるライブラリです。この記事では OpenTUI の特徴と基本的な使い方を紹介します。]]></description>
        <pubDate>Sun, 18 Jan 2026 02:17:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[AI エージェントのために CLI でブラウザを操作する agent-browser]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/agent-browser-for-ai-agents]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/agent-browser-for-ai-agents]]></guid>
        <description><![CDATA[agent-browser は Vercel が開発した CLI でブラウザを操作するツールであり、AI エージェントにブラウザ操作能力を提供するために設計されています。この記事では agent-browser のインストール方法、基本的な使い方、AI エージェントからの利用方法について紹介します。]]></description>
        <pubDate>Mon, 12 Jan 2026 06:25:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Claude Code のステータスラインを TUI でカスタマイズできる ccstatusline]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/claude-code-ccstatusline]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/claude-code-ccstatusline]]></guid>
        <description><![CDATA[Claude Code のステータスラインは oh-my-zsh のターミナルプロンプトのようにカスタマイズ可能です。これにより現在のブランチやトークンの使用量などを一目で確認できるようになります。この記事では TUI で簡単にステータスラインをカスタマイズできる ccstatusline の使い方を紹介します。]]></description>
        <pubDate>Sat, 10 Jan 2026 01:30:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[1 つの Step で完結するバックエンドフレームワーク Motia を試してみた]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/motia-backend-framework]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/motia-backend-framework]]></guid>
        <description><![CDATA[Motia はバックエンド開発をシンプルにすることを目指したコードファーストのバックエンドフレームワークです。この記事では Motia を使用して簡単な TODO REST API を構築する方法を紹介します。]]></description>
        <pubDate>Mon, 05 Jan 2026 10:23:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Figma MCP でデザインシステムを提供して AI コーディングエージェントに一貫したフロントエンドコードを書かせる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/using-figma-mcp-to-provide-design-system-for-ai-coding-agents]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/using-figma-mcp-to-provide-design-system-for-ai-coding-agents]]></guid>
        <description><![CDATA[AI コーディングエージェントにフロントエンドのコードを書かせる際、Figma MCP を使用してデザインコンテキストやデザイントークンを提供することで、一貫したデザインガイドラインを遵守させる方法を紹介します。]]></description>
        <pubDate>Sat, 03 Jan 2026 01:27:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Claude Code のツール検索ツールを有効にして MCP のトークン使用量を削減する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/enable-claude-code-tool-search-to-reduce-mcp-token-usage]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/enable-claude-code-tool-search-to-reduce-mcp-token-usage]]></guid>
        <description><![CDATA[Claude Code のツール検索ツールを有効にすることで、MCP ツールの定義を事前にコンテキストウィンドウに読み込まず、必要に応じて動的にツールを検索・呼び出しできます。これにより、多数の MCP ツールをインストールしている場合でもトークン使用量を大幅に削減できる可能性があります。この記事では Claude Code のツール検索ツールの概要と使用方法を紹介します。]]></description>
        <pubDate>Tue, 30 Dec 2025 05:32:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[2025 年に読んでよかった本]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/books-i-liked-in-2025]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/books-i-liked-in-2025]]></guid>
        <description><![CDATA[AI を活用するための技術というのはとりわけ新しいものではなく、過去の知見を基盤として構築されていることが多いです。それゆえに、AI 時代だからこそ基礎的な知識を体系的に学ぶことができる書籍に学ぶことに価値を求めるのです。この記事では 2025 年に読んで特に印象に残った本をいくつか紹介します。]]></description>
        <pubDate>Sat, 27 Dec 2025 02:10:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Claude Code の LSP サポート]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/claude-code-lsp-support]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/claude-code-lsp-support]]></guid>
        <description><![CDATA[Claude Code のバージョン 2.0.74 から LSP（Language Server Protocol）サポートが追加されました。LSP サポートにより、Claude Code はコードベースに対してシンボルの定義検索、参照検索、ホバー情報の取得などの操作が可能になります。この記事では Claude Code の LSP サポートの概要と使用方法を紹介します。]]></description>
        <pubDate>Sat, 20 Dec 2025 06:12:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[ブラウザから要素を選択してエージェントにコンテキストを提供する React Grab を試してみた]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/try-react-grab-for-agents]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/try-react-grab-for-agents]]></guid>
        <description><![CDATA[React Grab はブラウザ上で要素を選択し、その要素に対応するコードコンテキストをコーディングエージェントに提供するライブラリです。この記事では React Grab のセットアップ方法と使用方法を紹介します。]]></description>
        <pubDate>Sun, 14 Dec 2025 01:47:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[フルスタックフレームワーク TanStack Start を試してみた]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/try-tanstack-start]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/try-tanstack-start]]></guid>
        <description><![CDATA[TanStack Start は TanStack Router と Vite をベースにしたフルスタック React フレームワークです。型安全なルーティング、サーバーサイドレンダリング、ストリーミング、サーバー関数、API ルートなどの機能を提供します。この記事では TanStack Start の概要と基本的な使い方を紹介します。]]></description>
        <pubDate>Sat, 13 Dec 2025 05:30:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[TypeScript 向けの AI フレームワーク TanStack AI を試してみた]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/try-tanstack-ai]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/try-tanstack-ai]]></guid>
        <description><![CDATA[TanStack AI は TanStack チームが開発する TypeScript 向けの軽量な AI フレームワークです。LLM プロバイダーのインターフェイスを抽象化し、ツール呼び出しやチャット機能を提供します。この記事では TanStack AI の概要と基本的な使い方を紹介します。]]></description>
        <pubDate>Sun, 07 Dec 2025 06:26:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Claude のプログラミングによるツール呼び出し]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/claude-programmatic-tool-calling]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/claude-programmatic-tool-calling]]></guid>
        <description><![CDATA[MCP ツールの呼び出しはコンテキスト汚染や推論のオーバーヘッドなどの課題があります。Claude のプログラムによるツール呼び出し機能を利用することで、これらの課題を解決する方法について解説します。]]></description>
        <pubDate>Sun, 07 Dec 2025 02:42:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Claude のツール検索ツールを試してみた]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/trying-claude-tool-finder]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/trying-claude-tool-finder]]></guid>
        <description><![CDATA[MCP では多くのツール定義が LLM のコンテキストを圧迫する問題があります。Claude のツール検索ツールを使用すると、必要に応じて関連するツールのみを LLM に提供でき、コンテキスト圧迫を軽減できます。この記事では Claude の TypeScript クライアントを使用して、ツール検索ツールを実際に使用した例を紹介します。]]></description>
        <pubDate>Sun, 30 Nov 2025 06:11:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Claude Code のプランモードがより正確な計画を立てられるようになっていた]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/claude-code-plan-mode-improved]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/claude-code-plan-mode-improved]]></guid>
        <description><![CDATA[Claude Code のプランモードはリリース当初から定期的に改善が加えられており、より正確な計画を立てられるようになっています。この記事では最近の改善点について紹介します。]]></description>
        <pubDate>Sun, 30 Nov 2025 05:39:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[読んだ本は忘れていい ― 年間300冊読む私の読書術]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/my-reading-techniques-300-books-a-year]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/my-reading-techniques-300-books-a-year]]></guid>
        <description><![CDATA[以前 YAPC::Fukuoka 2025 で発表した探求の技術では「良いアウトプットを出すためには良いインプットが必要」であるという主張を裏付けるために、私が年間 300 冊の本を読む読書習慣があることを紹介しました。この記事では私がどのような目的で本を読み、どのように本を選び、どのように読書時間を確保し、そして読んだ内容をどのように扱っているのかについて紹介します。]]></description>
        <pubDate>Tue, 25 Nov 2025 12:17:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[MCP におけるインタラクティブな UI を標準化する拡張機能 MCP Apps の提案]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/mcp-standard-ui-extension]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/mcp-standard-ui-extension]]></guid>
        <description><![CDATA[MCP Apps は MCP の拡張機能として、AI エージェントがインタラクティブな UI コンポーネントを返すための標準化された方法を提供します。この記事では MCP Apps の概要と実装方法について解説します。]]></description>
        <pubDate>Sat, 22 Nov 2025 06:09:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[標準の Web API で URL のパターンマッチングを処理する URLPattern]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/urlpattern-web-api]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/urlpattern-web-api]]></guid>
        <description><![CDATA[Web アプリケーションにおけるルーティングは重要な要素です。URL Pattern API は URL のパターンマッチングを標準化するための Web API であり、ブラウザやサーバーサイド環境で一貫した方法で URL パターンを処理できます。この記事では、URLPattern API の基本的な使い方とパターン構文について解説します。]]></description>
        <pubDate>Thu, 13 Nov 2025 12:33:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[MCP ツールのコンテキスト圧迫の問題とその解決策]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/mcp-tool-context-overflow]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/mcp-tool-context-overflow]]></guid>
        <description><![CDATA[MCP の普及に伴い、多数のツール定義が LLM のコンテキストを圧迫する課題が浮上しています。本記事では Progressive disclosure（段階的開示）による最小限の情報提供、MCP を使ったコード実行によるツール呼び出しの効率化、単一の検索ツールによるコンテキスト削減など、実践的な解決策を Claude Skills や Cloudflare Code Mode の事例とともに解説します。]]></description>
        <pubDate>Sun, 09 Nov 2025 01:38:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Claude Code のサンドボックス機能を試してみた]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/claude-code-sandbox-feature]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/claude-code-sandbox-feature]]></guid>
        <description><![CDATA[Claude Code をはじめとする AI コーディングエージェントは、コマンドを実行するたびにユーザーの承認を求める仕組みが備わっていますが、これには開発サイクルの低下や承認疲れといった問題があります。Claude Code のサンドボックス機能は、ファイルシステムやネットワークへのアクセスを制限し、安全に動作させるための仕組みです。この記事では、Claude Code のサンドボックス機能の仕組みと利用方法について解説します。]]></description>
        <pubDate>Sat, 01 Nov 2025 05:47:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Claude Skills でエージェントに専門的なタスクを実行させる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/claude-skills-custom-skills-for-claude]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/claude-skills-custom-skills-for-claude]]></guid>
        <description><![CDATA[Claude Skills は Claude が特定のタスクを実行するためのカスタムスキルを作成・共有できる新しい機能です。この記事では、Claude Skills の仕組みと作成方法、MCP ツールとの違いについて解説します。]]></description>
        <pubDate>Sun, 26 Oct 2025 01:23:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Remix v3 を実際に動かして試してみた]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/try-remix-v3]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/try-remix-v3]]></guid>
        <description><![CDATA[2025 年 10 月に発表された Remix v3 は React から独立し、Web 標準技術を活用した新しいフレームワークへと進化しました。この記事では、Remix v3 のセットアップ手順と新機能を実際に動かして試してみた内容を紹介します。]]></description>
        <pubDate>Sat, 18 Oct 2025 06:10:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Playwright Agents によるテストの自動生成を試してみた]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/playwright-agents]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/playwright-agents]]></guid>
        <description><![CDATA[Playwright v1.56 で導入された Playwright Agents は、Planner、Generator、Healer の 3 つのエージェントで構成されており、アプリケーションコードを解析してテストケースの計画、テストコードの生成、失敗したテストの修正を自動化できます。この記事では、Claude Code から Playwright Agents を呼び出して、シンプルなカンバンアプリのテストコードを自動生成する手順を紹介します。]]></description>
        <pubDate>Sun, 12 Oct 2025 02:39:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[ChatGPT 内でアプリを直接操作する Apps SDK に自作のアプリを接続する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/chatgpt-apps-sdk]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/chatgpt-apps-sdk]]></guid>
        <description><![CDATA[Apps in ChatGPT は ChatGPT のチャット内で会話の流れに応じて外部のアプリを呼び出し、インタラクティブな操作を可能にする機能です。アプリごとに独自の UI コンポーネントを提供し、ユーザーはチャット画面からシームレスな体験でアプリを操作できます。この記事では Apps SDK を使用して、実際に ChatGPT 内で動作するシンプルなアプリを作成する手順を紹介します。]]></description>
        <pubDate>Sat, 11 Oct 2025 02:31:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Claude Code の設定をプラグインで共有する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/claude-code-plugins]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/claude-code-plugins]]></guid>
        <description><![CDATA[Claude Code は強力なコーディング支援ツールですが、効果的に活用するためには適切な設定が必要です。プラグインを使用することで、スラッシュコマンド、サブエージェント、MCP サーバー、フックなどの設定をパッケージ化し、他のユーザーと簡単に共有できます。この記事では、Claude Code のプラグインの作成方法と利用方法について解説します。]]></description>
        <pubDate>Fri, 10 Oct 2025 10:32:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[MCP のツールアノテーションでユーザーにヒントを提供する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/mcp-tool-annotations]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/mcp-tool-annotations]]></guid>
        <description><![CDATA[MCP ではツールアノテーションを使用して、ユーザーにツールの動作に関するヒントを提供できます。例えば `readOnlyHint` を設定することで、ツールがデータを変更しないことを示すことができます。この記事では TypeScript SDK を使用して MCP サーバーでツールアノテーションを設定し、Claude Code クライアントでどのように表示されるかを確認します。]]></description>
        <pubDate>Sat, 04 Oct 2025 01:18:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Chrome DevTools MCP で AI エージェントのフロントエンド開発をサポートする]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/chrome-devtools-mcp]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/chrome-devtools-mcp]]></guid>
        <description><![CDATA[自律的な AI エージェントを利用したコーディングでは、生成したコードを実行した結果からフィードバックを得て、コードを改善していく反復的なプロセスが重要です。しかし、フロントエンド開発では、生成したコードはブラウザ上で実行されるため、AI エージェントが直接コードを実行したり、ブラウザのコンソールログを取得したりすることは困難です。Chrome DevTools MCP はこの課題を解決するためのツールです。]]></description>
        <pubDate>Sat, 27 Sep 2025 01:46:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[YAML ファイルで AI エージェントを構築する cagent]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/yaml-file-defined-ai-agent-cagent]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/yaml-file-defined-ai-agent-cagent]]></guid>
        <description><![CDATA[cagent は Docker 社が開発した AI エージェントフレームワークです。YAML ファイルでエージェントの振る舞い・役割・使用するツールを宣言的に定義でき、コードを 1 行も書かずにエージェントを構築できます。この記事では cagent の概要とインストール方法、YAML ファイルの書き方、実際にエージェントを動作させるまでの手順を解説します。]]></description>
        <pubDate>Tue, 23 Sep 2025 01:05:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[browserslist で Baseline を設定できるようになった]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/56oQ43Wsd5tNqdkjVx962C]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/56oQ43Wsd5tNqdkjVx962C]]></guid>
        <description><![CDATA[browserslist は、フロントエンド開発において、どのブラウザをサポートするかを指定するためのツールです。これにより、開発者はターゲットとするブラウザの範囲を簡単に定義でき、CSS や JavaScript のトランスパイルやポリフィルの適用を自動化できます。
]]></description>
        <pubDate>Mon, 22 Sep 2025 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[GitHub Actions で YAML アンカーを使う]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/2fhsF5dtyd30gLbArJnkb1]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/2fhsF5dtyd30gLbArJnkb1]]></guid>
        <description><![CDATA[GitHub Actions のワークフローで YAML アンカーがサポートされました。YAML アンカーを使用すると、ワークフロー内でコードの重複を避け、共通の設定を再利用できます]]></description>
        <pubDate>Sat, 20 Sep 2025 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[AI エージェントのための Agent Payments Protocol (AP2) を試してみた]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/trying-agent-payments-protocol-ap2]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/trying-agent-payments-protocol-ap2]]></guid>
        <description><![CDATA[現状の決済システムでは人間が信頼できる画面上で直接購入ボタンをクリックすることを前提としており、自立型の AI エージェントがユーザーに代わって決済することは想定されていません。そこで Google により Agent Payments Protocol (AP2) と呼ばれる新しいプロトコルが提案されました。プラットフォーム間でエージェント主導の決済を安全に開始・処理することを可能にします。この記事では AP2 のサンプルコードを実際に試してみた手順を紹介します。]]></description>
        <pubDate>Sat, 20 Sep 2025 05:30:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[pnpm の minimumReleaseAge オプションでサプライチェーン攻撃を防ぐ]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/4vvHYJCCU0KH7hIajLRkVL]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/4vvHYJCCU0KH7hIajLRkVL]]></guid>
        <description><![CDATA[最近は npm パッケージのサプライチェーン攻撃が増えています。幸いほとんどの場合悪意のあるパッケージは公開から 1 週間以内に削除されるため、公開から一定期間が経過したパッケージのみをインストールすることでリスクを軽減できます。]]></description>
        <pubDate>Sat, 13 Sep 2025 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[自然言語で CI/CD パイプラインを定義する Agentic Workflows]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/natural-language-ci-cd-with-agentic-workflows]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/natural-language-ci-cd-with-agentic-workflows]]></guid>
        <description><![CDATA[Agentic Workflows は自然言語で CI/CD パイプラインを定義できるツールとして GitHub Next が開発しています。自然言語で定義されたワークフローは GitHub CLI の拡張機能として提供される gh aw コマンドでコンパイルして実行できます。これは継続体なAI（Continuous AI）を実現するためのツールです。]]></description>
        <pubDate>Sat, 13 Sep 2025 02:26:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[仕様駆動開発を支える Spec Kit を試してみた]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/spec-driven-development-with-spec-kit]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/spec-driven-development-with-spec-kit]]></guid>
        <description><![CDATA[仕様駆動開発（Specification-Driven Development, SDD）は、AI コーディングエージェントを活用した新しいソフトウェア開発スタイルです。GitHub が提供する Spec Kit は、仕様駆動開発を支援するためのツールキットであり、AI との対話を通じて正確な受け入れ基準の定義とコード生成を支援します。この記事では Spec Kit を使用して仕様駆動開発を試してみます。]]></description>
        <pubDate>Sun, 07 Sep 2025 01:58:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[AI コーディングエージェントの管理を行う Vibe Kanban を試してみた]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/coding-agent-management-vibe-kanban]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/coding-agent-management-vibe-kanban]]></guid>
        <description><![CDATA[Vibe Kanban は、AI コーディングエージェントの管理を支援するためのツールです。カンバン方式の UI でタスク管理を行い、各タスクに対して AI エージェントを割り当てて人間がその進捗を管理できます。この記事では Vibe Kanban を使用して AI コーディングエージェントの管理を実際に試してみます。]]></description>
        <pubDate>Sat, 30 Aug 2025 05:19:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Claude Code の学習モードで自分の手でコードを書く練習をしよう]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/claude-code-learning-mode]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/claude-code-learning-mode]]></guid>
        <description><![CDATA[コーディングに AI エージェントを活用する流れはもはや避けられないものとなっています。しかし、AI エージェントによってコーディングの多くが自動化されると、開発者が自分の手でコードを書く機会は減少してしまうというジレンマがあります。Claude Code の学習モードを使用すると、自分の手でコードを書く練習ができます。学習モードでは、AI エージェントはユーザー自身にも一部のコードの生成を依頼します。この記事では、Claude Code の学習モードの使い方について解説します。]]></description>
        <pubDate>Sat, 23 Aug 2025 04:01:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[コーディングエージェントが参照するファイルを統一する AGENTS.md]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/1UIDYiElwAL6Gxm0eMGaGT]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/1UIDYiElwAL6Gxm0eMGaGT]]></guid>
        <description><![CDATA[コーディングエージェントを使用する際にはプロジェクトの技術スタックやビルド手順、コーディング規約を記載したドキュメントを用意して、コンテキストに含めるのが一般的な手法です。

しかし、　コーディングエージェントの製品ごとに異なるファイル名で用意しなければいけないという問題がありました。]]></description>
        <pubDate>Tue, 19 Aug 2025 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[LLM へのプロンプトを構造化された文書で管理する POML]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/poml-prompt-structured-document]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/poml-prompt-structured-document]]></guid>
        <description><![CDATA[POML (Prompt Orchestration Markup Language) は、Microsoft によって提案されたプロンプトを構造化された文書として管理するためのマークアップ言語です。プロンプト開発における構造の欠如や複雑なデータとの統合の困難さ、特定のフォーマットへの依存性といった課題を解決することを目指しています。]]></description>
        <pubDate>Sat, 16 Aug 2025 02:31:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[AI エージェントがインタラクティブな UI を返すことを可能にする MCP UI]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/mcp-ui]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/mcp-ui]]></guid>
        <description><![CDATA[MCP UI は Model Context Protocol (MCP) を拡張して、AI エージェントがインタラクティブな UI コンポーネントを返すことを可能にする仕組みです。これにより、AI エージェントとのチャットの返答としてグラフや画像ギャラリー、購入フォームなどを表示できます。この記事では MCP UI の SDK を利用して、AI エージェントがインタラクティブな UI コンポーネントを返す方法を試してみます。]]></description>
        <pubDate>Sat, 09 Aug 2025 01:49:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[コーディングのための LLM モデル Qwen3-Coder を試してみた]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/coding-agent-qwen3-corder]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/coding-agent-qwen3-corder]]></guid>
        <description><![CDATA[Alibaba が開発した Qwen3-Coder を使用したコーディングエージェント Qwen Code を試してみた記事です。OpenRouter 経由での認証設定、コードベースの調査、リファクタリング、テストコード生成などの実際の使用例を紹介しています。]]></description>
        <pubDate>Sun, 03 Aug 2025 00:49:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[コーディングエージェントの能力を拡張する Serena を試してみた]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/serena-coding-agent]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/serena-coding-agent]]></guid>
        <description><![CDATA[LSP を活用してセマンティックなコード検索・編集能力を提供する MCP サーバー Serena の導入・使用方法を紹介。Claude Code でのオンボーディングからリファクタリングまでの実践的な活用例を解説します。]]></description>
        <pubDate>Sat, 02 Aug 2025 02:11:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[SvelteKit の remote functions でコンポーネント内で非同期にデータを取得する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/sveltekit-remote-functions]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/sveltekit-remote-functions]]></guid>
        <description><![CDATA[SvelteKit の remote functions を使用することで、コンポーネント内で直接非同期にデータを取得したり、サーバーにデータを書き込むことができます。これにより、コンポーネントごとに必要なデータを個別に取得できるようになり、コードの責任の分離が容易になります。remote functions は SvelteKit v2.27 以降で利用可能です。]]></description>
        <pubDate>Fri, 01 Aug 2025 10:31:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Claude Code でカスタムサブエージェントを作成する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/create-custom-sub-agent-in-claude-code]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/create-custom-sub-agent-in-claude-code]]></guid>
        <description><![CDATA[Claude Code では特定の種類のタスクを処理するために呼び出されるカスタムサブエージェントを作成できます。カスタムサブエージェントを使用することでメインの会話セッションとは別に独立したコンテキストウィンドウを持つことができ、コンテキストの汚染を防ぐことができます。この記事では、Claude Code でカスタムサブエージェントを作成する方法とその利点について解説します。]]></description>
        <pubDate>Sat, 26 Jul 2025 03:17:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Cookie を管理する非同期 API CookieStore]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/7KZCLXbHxoaCfJ92aES3uE]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/7KZCLXbHxoaCfJ92aES3uE]]></guid>
        <description><![CDATA[従来の JavaScript では Cookie の管理は `document.cookie` を使用して文字列で行われていました。しかし、文字列での Cookie 管理は面倒で間違いやすいです。また `document.cookie` は同期的に動作するため、Cookie の更新が完了するまでイベントループがブロックされてしまいます。さらに `document` オブジェクトに依存しているため、Web Worker や Service Worker などの非同期環境では使用できません。

このような問題を解決するために、非同期 API `CookieStore` が導入されました。`CookieStore` は非同期的に Cookie の読み書きを行うことができ、さらに Cookie の属性をオブジェクトとして扱うことができます。]]></description>
        <pubDate>Fri, 25 Jul 2025 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[私のキャリアに影響を与えたコンピューター・IT の定番書籍]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/computer-it-books]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/computer-it-books]]></guid>
        <description><![CDATA[現代は知らないことがあればすぐにインターネットで調べたり、AI に質問できる時代です。このような時代において本を読む必要はあるのでしょうか？答えは Yes です。なぜなら、検索をしたり AI に質問をするためには、ある程度の基礎知識が必要だからです。この記事では私のキャリアにおいて影響を与えたであろうコンピューター・IT の定番書籍を紹介します。]]></description>
        <pubDate>Sun, 20 Jul 2025 02:26:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[AWS の エージェント IDE Kiro を使ってみた]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/kiro-agent-ide]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/kiro-agent-ide]]></guid>
        <description><![CDATA[Kiro は AWS が開発した IDE 内蔵型の AI コーディングエージェントです。Kiro の特徴は単なるバイブコーディングにとどまらず、スペックを使用して仕様駆動開発でアプリケーションを開発できることです。この記事では Kiro を使ったアプリケーション開発の流れを紹介します。]]></description>
        <pubDate>Tue, 15 Jul 2025 11:19:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[サンドボックス環境を MCP サーバーで提供する Container Use]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/mcp-server-container-use]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/mcp-server-container-use]]></guid>
        <description><![CDATA[AI コーディングエージェントは便利ですが、任意の Bash コマンドを実行できるため、ユーザーのシステムに影響を与える可能性があります。Container Use は MCP サーバーとして動作し、AI コーディングエージェントにサンドボックス環境を提供します。この記事では Container Use の利用方法について紹介します。]]></description>
        <pubDate>Sun, 13 Jul 2025 10:44:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[v0 の SDK を試してみる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/try-v0-sdk]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/try-v0-sdk]]></guid>
        <description><![CDATA[v0 は Vercel が開発した AI ベースの Web アプリケーション・UI 生成ツールです。v0 のプラットフォーム API を使用すると、v0 の機能を自身のコードから利用できます。この記事では v0 TypeScript SDK を使用して、v0 のプラットフォーム API を試してみます。]]></description>
        <pubDate>Sat, 12 Jul 2025 00:32:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Claude Code で前回の会話の続きを開始する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/1U7o1oYd6dUDaf3xOM5HVd]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/1U7o1oYd6dUDaf3xOM5HVd]]></guid>
        <description><![CDATA[Claude Code でうっかりセッションを閉じてしまった経験が一度はあるのではないでしょうか？一度セッションを終了すると会話のコンテキストが失われてしまいますが、Claude Code では前回の会話の続きを開始する方法があります。
]]></description>
        <pubDate>Fri, 11 Jul 2025 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[値の補間計算を簡潔に記述できる CSS の `progress` 関数]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/css-progress-function]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/css-progress-function]]></guid>
        <description><![CDATA[CSS の `progress` 関数は、2 つの長さの値の間の進捗を計算するための数学関数です。流体タイポグラフィやレスポンシブなレイアウト調整に利用できます。流体タイポグラフィは `clamp` 関数を使用して実装することもできますが、`progress` 関数を使用することでより意図を明確に記述できます。この記事では、CSS の `progress` 関数の構文と使用例について解説します。]]></description>
        <pubDate>Sun, 06 Jul 2025 00:41:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Claude Code の Hooks で作業が終わった後にフォーマッターを実行する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/claude-code-hooks-run-formatter]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/claude-code-hooks-run-formatter]]></guid>
        <description><![CDATA[Claude Code hooks は Claude Code のライフサイクルの特定のタイミングで実行されるユーザー定義のシェルスクリプトです。hooks を使用することで、コードのフォーマットを常に実行することができます。この記事では hooks を使用してコードの変更後に prettier が実行されるように設定してみましょう。]]></description>
        <pubDate>Tue, 01 Jul 2025 02:03:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[ワンクリックで MCP サーバーをインストールする .dxt ファイル]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/one-click-mcp-server-installation-dxt-file]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/one-click-mcp-server-installation-dxt-file]]></guid>
        <description><![CDATA[Model Context Protocol (MCP) サーバーは LLM が外部のツールと対話するための標準的な方法ですが、インストールが複雑でハードル高いという課題があります。`.dxt` ファイルは MCP サーバーを簡単にインストールできるパッケージ形式です。これを使用することでユーザーはターミナルを操作したり JSON ファイルを編集することなく MCP サーバーを利用できるようになります。]]></description>
        <pubDate>Sat, 28 Jun 2025 23:17:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[MCP の Structured tool output を試してみる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/mcp-structured-output]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/mcp-structured-output]]></guid>
        <description><![CDATA[MCP の 2025-06-18 バージョンでは Structured tool output がサポートされました。ツールの定義で `outputSchema` を出力のスキーマを定義し、`structuredContent` フィールドに構造化された出力を返すことができます。この記事では MCP の TypeScript SDK を使用して Structured tool output を試してみます。]]></description>
        <pubDate>Sat, 28 Jun 2025 05:47:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Claude Code でカスタムスラッシュコマンドを作成する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/claude-code-custom-slash-command]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/claude-code-custom-slash-command]]></guid>
        <description><![CDATA[Claude Code では `/` で始まる文字列がスラッシュコマンドとして定義されておりあらかじめ割り当てられた操作を実行できます。スラッシュコマンドはユーザーが独自に定義することもできます。この記事では、Claude Code でカスタムスラッシュコマンドを作成する方法について説明します。]]></description>
        <pubDate>Sat, 21 Jun 2025 23:10:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[ブラウザから MCP サーバーに接続する use-mcp React フック]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/use-mcp-react-hook]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/use-mcp-react-hook]]></guid>
        <description><![CDATA[use-mcp はリモートの MCP サーバーに接続するための React フックです。ツールの呼び出しや認証を簡単に行うことができます。この記事では、use-mcp を使用して MCP サーバーに接続し、ツールを呼び出す方法と、OAuth 認証の実装方法について解説します。]]></description>
        <pubDate>Sat, 21 Jun 2025 04:31:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[A2A プロトコルの JavaScript SDK を試してみる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/a2a-protocol-js-sdk]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/a2a-protocol-js-sdk]]></guid>
        <description><![CDATA[A2A プロトコルはエージェント間の通信を標準化するためのプロトコルです。JavaScript SDK を使って A2A サーバーとクライアントを実装し、エージェント間通信を試してみます。]]></description>
        <pubDate>Sun, 15 Jun 2025 02:01:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[バイブコーディングチュートリアル：Claude Code でカンバンアプリケーションを作成しよう]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/vibe-coding-tutorial-create-app-with-claude-code]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/vibe-coding-tutorial-create-app-with-claude-code]]></guid>
        <description><![CDATA[バイブコーディングとは、AI エージェントを活用して直感的にアプリケーションを開発する新しいコーディングスタイルです。このチュートリアルでは、Claude Code を使って Next.js でカンバンボードアプリケーションを作成します。]]></description>
        <pubDate>Thu, 12 Jun 2025 10:55:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[OpenAI Agents の TypeScript SDK]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/openai-agents-sdk-typescript]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/openai-agents-sdk-typescript]]></guid>
        <description><![CDATA[OpenAI Agents SDK は AI エージェントを構築するためのパッケージです。軽量で使いやすく、抽象化を最小限に抑えているのが特徴です。この記事では、OpenAI Agents SDK の TypeScript バージョンの使用例を紹介します。]]></description>
        <pubDate>Sun, 08 Jun 2025 00:18:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[フロントエンドアプリケーションがエージェントに接続する方法を標準化する AG-UI]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/how-to-standardize-frontend-apps-connecting-to-agents]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/how-to-standardize-frontend-apps-connecting-to-agents]]></guid>
        <description><![CDATA[AG-UI はフロントエンドアプリケーションがエージェントに接続する方法を標準化するプロトコルです。この記事では AG-UI を使用してフロントエンドアプリケーションがエージェントに接続する方法を紹介します。]]></description>
        <pubDate>Sat, 07 Jun 2025 00:45:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Claude Code のタスクの完了を通知する方法]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/4LdKycAFdBPzDkBfCfInVQ]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/4LdKycAFdBPzDkBfCfInVQ]]></guid>
        <description><![CDATA[AI を使用してコードの生成を行う際、ある程度の時間待機する必要があります。その間ターミナルに張り付いて観察するのではなく、タスクが完了したタイミングで通知を受け取ることができれば、他の作業をしながら待機することができます。

Claude Code でタスクの完了を通知する方法を 3 つ紹介します。]]></description>
        <pubDate>Tue, 03 Jun 2025 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[コーディングエージェントの現状の整理とエンジニアの仕事の変化について]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/coding-agents-and-developers-work]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/coding-agents-and-developers-work]]></guid>
        <description><![CDATA[AI によるコーディングの支援はコード補完型からチャット型、そして自律型へと進化しています。この記事では現時点で主流となっているコーディングエージェントの種類とその特徴を整理したうえで、エンジニアの仕事の変化について考察します。]]></description>
        <pubDate>Sun, 01 Jun 2025 02:36:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Claude Code Action で Claude Code を GitHub に統合しよう]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/claude-code-action-github-integration]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/claude-code-action-github-integration]]></guid>
        <description><![CDATA[Claude Code Action は Claude Code を GitHub Actions のワークフローに統合するためのアクションです。これを使用することで、GitHub 上でコードの生成やレビューを AI に依頼することができます。]]></description>
        <pubDate>Sun, 25 May 2025 00:32:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Mastra の A2A プロトコルサポート]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/mastra-a2a-protocol-support]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/mastra-a2a-protocol-support]]></guid>
        <description><![CDATA[Mastra は A2A プロトコルをサポートしています。Mastra サーバーを構築することで A2A プロトコルに準拠したサーバーが立ち上がります。この記事では Mastra を使用して A2A プロトコルに準拠したサーバーを構築し、Mastra のクライアント SDK を使用して A2A プロトコルの仕様に従い通信を行う方法を紹介します。]]></description>
        <pubDate>Sat, 24 May 2025 02:39:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[TypeScript で AI エージェントを構築する VoltAgent]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/typescript-ai-agent-voltagent]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/typescript-ai-agent-voltagent]]></guid>
        <description><![CDATA[VoltAgent は TypeScript で AI を活用したアプリケーションを構築するためのツールキットです。VoltAgent Console を使用すると、エージェントの状態をリアルタイムで確認したり、エージェントのワークフローを可視化できる点が特徴です。]]></description>
        <pubDate>Sun, 18 May 2025 09:18:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[React Router の Server Components 対応]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/react-router-server-components]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/react-router-server-components]]></guid>
        <description><![CDATA[React Router はプレビュー版として Server Components に対応しました。これにより loader や actions を使用してデータを返す際にコンポーネント渡したり、Server Components ファーストのサーバーコンポーネントルートを作成できるようになりました。この記事では React Router の Server Components 対応を実際に試してみます。]]></description>
        <pubDate>Sun, 18 May 2025 00:46:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Vercel で MCP サーバーを構築する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/vercel-mcp-server]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/vercel-mcp-server]]></guid>
        <description><![CDATA[Model Context Protocol (MCP) の 2025-03-26 の仕様では新たに Streamable HTTP が追加され、リモート MCP サーバーへの注目が集まっています。この記事では Next.js を使用して Vercel 上に MCP サーバーを構築する方法を紹介します。]]></description>
        <pubDate>Sun, 11 May 2025 08:50:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Cloudflare で MCP サーバーを構築する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/cloudflare-mcp-server]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/cloudflare-mcp-server]]></guid>
        <description><![CDATA[Model Context Protocol (MCP) の 2025-03-26 の仕様では新たに Streamable HTTP が追加され、リモート MCP サーバーへの注目が集まっています。この記事では `agents` フレームワークを使用して Cloudflare 上に MCP サーバーを構築する方法を紹介します。]]></description>
        <pubDate>Sun, 11 May 2025 03:08:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Error インスタンスかどうか判定する Error.isError() メソッド]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/error-is-error]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/error-is-error]]></guid>
        <description><![CDATA[Error.isError() メソッドは、オブジェクトが Error インスタンスかどうかを判定するためのメソッドです。今までも instanceof 演算子を使用して判定することができましたが、偽陽性と偽陰性が発生する可能性があります。Error.isError() メソッドは Array.isArray() と同じく内部スロットを使用して判定するため、より堅牢に判定することができます。]]></description>
        <pubDate>Sun, 11 May 2025 01:37:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Docker の MCP Toolkit を試してみる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/docker-mcp-toolkit]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/docker-mcp-toolkit]]></guid>
        <description><![CDATA[Docker の MCP Toolkit はコンテナ化された MCP サーバーを AI エージェントと統合するための Docker Desktop の拡張機能です。コンテナ化された環境で MCP サーバーを実行することができ、信頼された Docker MCP カタログから MCP ツールを簡単にインストールできる点が特徴です。]]></description>
        <pubDate>Sat, 10 May 2025 01:10:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[ESLint を MCP サーバーとして実行する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/eslint-mcp-server]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/eslint-mcp-server]]></guid>
        <description><![CDATA[ESLint v9.26.0 から MCP サーバーとして実行できるようになりました。この機能により LLM（大規模言語モデル）は ESLint のルールを使用してコードを修正することができるようになります。]]></description>
        <pubDate>Mon, 05 May 2025 01:45:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[actions/ai-inference を使って GitHub Actions のワークフローから AI モデルを呼び出す]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/actions-ai-interface-github-actions]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/actions-ai-interface-github-actions]]></guid>
        <description><![CDATA[actions/ai-inference は GitHub Actions のワークフローから AI モデルを呼び出すための公式のアクションです。これを使用することで CI/CD のワークフローから AI モデルを簡単に利用できるようになります。この記事ではプルリクエスト上で AI に記事のレビューをしてもらうという実践的な使用例を紹介します。]]></description>
        <pubDate>Fri, 02 May 2025 23:27:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[UI の一部を非表示にする React の Activity コンポーネント]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/react-activity-component]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/react-activity-component]]></guid>
        <description><![CDATA[React の新しい実験的なコンポーネントとして `<Activity>` が追加されました。これは UI の表示非表示を切り替えるために使用されます。従来の条件付きレンダリングとは異なり、アンマウントされた場合にも状態を保持する点が特徴です。]]></description>
        <pubDate>Sun, 27 Apr 2025 06:18:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[AIと本音トーク：エンジニアの仕事、これからどうなる？]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/ai-talk-what-will-happen-to-engineers]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/ai-talk-what-will-happen-to-engineers]]></guid>
        <description><![CDATA[「AI コーディングエージェントの台頭によりエンジニアの働き方はどう変わるのか？」というテーマについて AI と人間のインタビューを通じて探ります。]]></description>
        <pubDate>Sat, 26 Apr 2025 02:01:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Ink を使って CLI アプリを React で書く]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/ink-cli-app]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/ink-cli-app]]></guid>
        <description><![CDATA[Ink は CLI アプリを React で書くためのライブラリです。Flexbox レイアウトエンジンである Yoga を使用しているため、Web アプリケーションと同じような CSS を使って UI を構築できることが特徴です。Codex や Claude Code といったコーディングエージェントの CLI アプリが Ink で書かれています。]]></description>
        <pubDate>Sun, 20 Apr 2025 00:45:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[MCP サーバーの Streamable HTTP transport を試してみる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/mcp-server-streamable-http-transport]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/mcp-server-streamable-http-transport]]></guid>
        <description><![CDATA[MCP では stdio と Streamable HTTP の 2 つの transport が定義されています。TypeScript SDK では v1.10.0 から Streamable HTTP transport がリリースされました。この記事では MCP サーバーを構築し、Streamable HTTP transport を試してみます。]]></description>
        <pubDate>Sat, 19 Apr 2025 00:29:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[AI エージェントの連携を標準化する A2A プロトコルを試してみる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/ai-a2a-protocol]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/ai-a2a-protocol]]></guid>
        <description><![CDATA[AI エージェント同士の連携を標準化するために Agent2Agent プロトコル（A2A）を発表しました。A2A プロトコルは基盤となるフレームワークやベンダーに依存せず、エージェント同士が安全な方法で相互に通信できるように設計されています。この記事ではサンプルコードを通じて A2A プロトコルを使用した AI エージェントの連携を体験してみます。]]></description>
        <pubDate>Fri, 11 Apr 2025 22:50:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[コーディング AI エージェントを自作してみよう]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/build-your-own-coding-ai-agent]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/build-your-own-coding-ai-agent]]></guid>
        <description><![CDATA[好むと好まずと関わらず、ソフトウェア開発において AI の活用は重要なパラダイムシフトの 1 つです。AI エージェントはユーザーからの指示を元に自律的にタスクを選択し、実行します。この記事では、コーディング AI エージェントを自作する過程を紹介します。]]></description>
        <pubDate>Sat, 05 Apr 2025 00:31:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Vercel AI SDK で MCP クライアントをツールとして利用する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/vercel-ai-sdk-mcp-client]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/vercel-ai-sdk-mcp-client]]></guid>
        <description><![CDATA[MCP（Model Context Protocol）は LLM に追加のコンテキストを提供するための標準化されたプロトコルです。Vercel AI SDK は v4.2 から MCP をサポートしており、MCP クライアントをツールとして利用できます。この記事では Vercel AI SDK を使って MCP ツールを使用する方法を紹介します。]]></description>
        <pubDate>Sun, 30 Mar 2025 01:22:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[::scroll-button と ::scroll-marker を使って CSS だけでカルーセルを作る]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/css-only-carousel]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/css-only-carousel]]></guid>
        <description><![CDATA[カルーセルは Web アプリケーションでよく使われる UI コンポーネントの一つであるものの、標準化された実装方法が存在しないため、各ライブラリやフレームワークで独自の実装が行われています。この問題を解決するため、CSS だけを使用してカルーセルを実装するための新しい仕様が提案されています。:この仕様では ::scroll-button と ::scroll-marker 擬似要素を使用してカルーセルを実装します。]]></description>
        <pubDate>Sat, 22 Mar 2025 01:47:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Vercel AI SDK を使って Next.js アプリに AI 機能を追加する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/vercel-ai-sdk-nextjs]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/vercel-ai-sdk-nextjs]]></guid>
        <description><![CDATA[Vercel AI SDK は TypeScript 向けの AI 機能を活用するプロダクトを構築するためのツールです。AI SDK は AI モデルのプロバイダー間における API の違いを抽象化することで、開発者はアプリケーションの開発に集中できるようになります。この記事では Vercel AI SDK の使い方を確認し、最終的に Next.js で構築した Web アプリケーションに AI 機能を追加する方法を紹介します。]]></description>
        <pubDate>Sun, 16 Mar 2025 11:29:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[TypeScript で MCP サーバーを実装し、Claude Desktop から利用する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/typescript-mcp-server]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/typescript-mcp-server]]></guid>
        <description><![CDATA[MCP（Model Context Protocol）とはアプリケーションが LLM にコンテキストを提供する方法を標準化するプロトコルです。MCP を使用することで、LLM は外部ツールやサービスからコンテキストを取得するだけでなく、コードの実行やデータの保存など、さまざまなアクションを実行できるようになります。この記事では MCP サーバーを TypeScript で実装する方法を紹介します。]]></description>
        <pubDate>Fri, 14 Mar 2025 10:59:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[TypeScript 製の AI エージェントフレームワーク Mastra]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/typescript-ai-agent-framework-mastra]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/typescript-ai-agent-framework-mastra]]></guid>
        <description><![CDATA[Mastra は TypeScript 製の AI エージェントフレームワークであり Gatsby の開発チームによって開発されています。Mastra サーバーを実行することで REST API サーバーを介してエージェントとやり取りすることができます。Mastra はAI エージェントを構築するために必要なプリミティブな機能を提供するために設計されています。]]></description>
        <pubDate>Sun, 09 Mar 2025 01:16:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[ブログで llms.txt を提供してみた]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/llms-txt]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/llms-txt]]></guid>
        <description><![CDATA[従来のウェブサイトは人間用のマークアップが主であり、bot が情報を収集するために無駄な情報が多く含まれています。一方でウェブサイトを提供する側にとっても AI エージェントにより過剰なスクレイピングによりサーバーの負荷がかかることが問題となっています。LLM に適したコンテンツを提供するために Answer.AI の共同創業者である Jeremy Howard 氏により `llms.txt` というファイルが提案されました。]]></description>
        <pubDate>Sat, 08 Mar 2025 02:04:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[インラインで条件分岐する CSS の if() 関数]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/inline-conditional-css-if-function]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/inline-conditional-css-if-function]]></guid>
        <description><![CDATA[if() 関数は CSS Values and Units Module Level 5 という仕様で提案されている関数です。if() 関数は CSS でインラインの条件分岐を可能にします。]]></description>
        <pubDate>Sat, 01 Mar 2025 06:41:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[ブラウザで非同期イベントストリームを処理する Observable API]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/observable-api-for-handling-asynchronous-event-streams-in-the-browser]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/observable-api-for-handling-asynchronous-event-streams-in-the-browser]]></guid>
        <description><![CDATA[Observable API は非同期イベントストリームを処理するための API です。 EventTarget に .when() メソッドを追加し addEventListener() よりも宣言的で優れたイベントハンドリングを提供します。]]></description>
        <pubDate>Sat, 22 Feb 2025 09:39:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[ブラウザに広くサポートされていない CSS を検証する require-baseline ESLint ルール]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/require-baseline-eslint-rule-to-validate-css-not-widely-supported-in-browsers]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/require-baseline-eslint-rule-to-validate-css-not-widely-supported-in-browsers]]></guid>
        <description><![CDATA[Baseline はブラウザで利用可能な JavaScript や CSS のサポート状況を明確化するプロジェクトです。ESLint/CSS の require-baseline ルールを使用することで、Baseline でサポートされていない CSS プロパティや値を検出することができます。]]></description>
        <pubDate>Sat, 22 Feb 2025 08:27:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[アップグレードされた CSS の `attr()` 関数を使う]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/upgraded-css-attr-function]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/upgraded-css-attr-function]]></guid>
        <description><![CDATA[`attr()` 関数は HTML の属性を読み取り、それを CSS で利用できるようにする関数です。従来までは `content` プロパティのみで使用できましたが、CSS Values and Units Module Level 5 ではこの制限が見直され、`attr()` 関数がカスタムプロパティを含む任意の CSS プロパティで使用できるようになりました。]]></description>
        <pubDate>Sat, 22 Feb 2025 08:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[ボタンが押し込まれた状態を表す Press Button の提案]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/proposal-press-button]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/proposal-press-button]]></guid>
        <description><![CDATA[UI デザインにおいてボタンが「押し込まれた」状態を表現することはしばしばあります。しかし、ネイティブの HTML 要素では表現できず `aria-pressed` 属性を使用する必要がありました。Press Button Proposal では `type="press"` 属性を追加することでボタンが押し込まれた状態を表現することが提案されています。]]></description>
        <pubDate>Sat, 22 Feb 2025 07:47:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Deno v2.2 で追加されたビルドイン OpenTelemetry サポートを試してみる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/deno-v2-2-opentelemetry]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/deno-v2-2-opentelemetry]]></guid>
        <description><![CDATA[Deno v2.2 でビルドインの OpenTelemetry サポートが追加されました。アプリケーションのコードに変更を加えることなく、Deno のビルトイン API から自動的にテレメトリーデータを計装できるようになります。]]></description>
        <pubDate>Sat, 22 Feb 2025 06:42:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Prisma で OpenTelemetry のトレースデータを計装する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/prisma-opentelemetry-trace]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/prisma-opentelemetry-trace]]></guid>
        <description><![CDATA[Prisma は OpenTelemetry の仕様に準拠したトレースデータを計装するためのパッケージを提供しています。この記事では、Prisma で OpenTelemetry のトレースデータを計装する方法について紹介します。]]></description>
        <pubDate>Fri, 21 Feb 2025 11:14:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Vitest で型のテストを書く]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/3dFzPfbB3nnbqPzTqnjPRV]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/3dFzPfbB3nnbqPzTqnjPRV]]></guid>
        <description><![CDATA[Vitest では `expectTypeOf` や `assetType` を使って型のテストを書くことができます。自作のユーティリティ型が期待する型を返すか検査したり、言語ファイルの JSON スキーマが同じ型を返すことを確認するなどに利用できます。]]></description>
        <pubDate>Wed, 19 Feb 2025 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[スキーマバリデーションライブラリの標準インターフェース standard-schema]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/schema-validation-library-standard-interface-standard-schema]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/schema-validation-library-standard-interface-standard-schema]]></guid>
        <description><![CDATA[スキーマバリデーションライブラリはここ数年で人気を集めています。多くのライブラリが登場する中で、standard-schema はスキーマバリデーションライブラリの標準インターフェースを提供します。これにより、エコシステムツールがユーザー定義の型検証ツールをより簡単に受け入れられるようにすることを目指しています。]]></description>
        <pubDate>Sat, 15 Feb 2025 01:03:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[CSS で関数を定義できるようになる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/34rVQfZ80z5Naegm2PUyEr]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/34rVQfZ80z5Naegm2PUyEr]]></guid>
        <description><![CDATA[Chrome Canary で CSS 関数のプロトタイプが実装されました。CSS Functions and Mixins Module という仕様に基づいて実装されており、`@function` ルールを使用して開発者が関数を定義できるようになります。]]></description>
        <pubDate>Sat, 08 Feb 2025 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[パスキーによる認証をブラウザで実装してみる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/implement-path-key-in-browser]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/implement-path-key-in-browser]]></guid>
        <description><![CDATA[パスキーとはパスワードに代わる認証方法で、生体認証やデバイス PIN を使ってログインができる仕組みです。ユーザーはパスワードを覚える必要がなく、またフィッシング攻撃にも強いという点からよりセキュア認証方法として注目を集めています。この記事では WebAuthn を使ってパスキーをブラウザで実装する方法を紹介します。]]></description>
        <pubDate>Sat, 08 Feb 2025 01:13:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[React Server Components を手軽に扱うフレームワーク react-server]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/react-server]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/react-server]]></guid>
        <description><![CDATA[react-server は Node.js で JavaScript ファイルを実行するかのように React Server Components を扱うことを目的としたフレームワークです。Next.js の機能が過剰に感じられるような小さなアプリケーションを開発する際に有用です。]]></description>
        <pubDate>Sat, 01 Feb 2025 01:57:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Bun v1.2 では package.json にコメントを書ける]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/1eezsoj4N31abTOpvD9fag]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/1eezsoj4N31abTOpvD9fag]]></guid>
        <description><![CDATA[`package.json` は JSON フォーマットのファイルであるため、コメントを書くことができません。`package.json` に定義したスクリプトの説明を書いておくことは重要です。別のファイルに説明を書いたり、`//` で始まるキーを使用してコメントを書くハックが生まれるなど、様々な方法が考案されていたのが思い出されます。]]></description>
        <pubDate>Fri, 31 Jan 2025 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[TypeScript 5.8 で追加される erasableSyntaxOnly フラグ]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/HTNCfn46WT831quJrV2aJ]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/HTNCfn46WT831quJrV2aJ]]></guid>
        <description><![CDATA[TypeScript 5.8 で `erasableSyntaxOnly` フラグが追加される予定です。このフラグは `enum` や `namespace`、`Class Parameter properties` などの「消去可能ではない」構文をエラーとして検知するためのものです。
]]></description>
        <pubDate>Mon, 27 Jan 2025 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[型安全にクエリパラメーターを扱う nuqs]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/type-safe-query-string-parameters-with-nuqs]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/type-safe-query-string-parameters-with-nuqs]]></guid>
        <description><![CDATA[フロントエンドの状態管理のパターンとしてクエリパラメータを信頼できる唯一の情報源(single source of truth)として扱うことがあります。ですが、クエリパラメーターの型が文字列であるため、型安全性が保証されないという課題があります。この記事では `nuqs` というライブラリを使用してクエリパラメーターを型安全に扱う方法について解説します。]]></description>
        <pubDate>Sat, 25 Jan 2025 01:33:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[ダイアログの Light dismiss を有効にする `<dialog closedby>` 属性]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/dialog-closedby-attribute-for-light-dismiss]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/dialog-closedby-attribute-for-light-dismiss]]></guid>
        <description><![CDATA[`<dialog closedby>` 属性はダイアログの外側をクリックした際にダイアログを閉じる Light dismiss 機能を実現するための属性です。closedby 属性は `any`, `closerequest`, `none` の 3 つの値を受け付けます。]]></description>
        <pubDate>Tue, 21 Jan 2025 09:04:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[React の `<ViewTransition>` コンポーネントで宣言的にページ遷移アニメーションを追加する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/declarative-page-transition-animation-with-react-viewtransition-component]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/declarative-page-transition-animation-with-react-viewtransition-component]]></guid>
        <description><![CDATA[`<ViewTransition>` コンポーネントは React の実験的なバージョンとして導入されました。これは View Transition API を 宣言的な方法で使用できるようにするものです。]]></description>
        <pubDate>Sun, 19 Jan 2025 03:50:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[MPA でページ遷移アニメーションを行う `@view-transition` CSS アットルール]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/view-transition-css-at-rule-for-page-transition-animation-in-mpa]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/view-transition-css-at-rule-for-page-transition-animation-in-mpa]]></guid>
        <description><![CDATA[View Transition API はページを遷移する際に簡単にアニメーションを追加できる API です。SPA では `document.startViewTransition()` メソッドを DOM が変更される前に呼び出すことでページ遷移アニメーションを追加できます。MPA の場合 CSS アットルール `@view-transition` を使用できます。SPA の場合と異なり、JavaScript を使用せずに CSS だけでアニメーションを追加できる点が特徴です。]]></description>
        <pubDate>Sat, 18 Jan 2025 13:47:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[scroll-state() CSS コンテナクエリを使用して sticky で張り付いたときに境界線を出す]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/scroll-state-function-to-show-border-when-sticky]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/scroll-state-function-to-show-border-when-sticky]]></guid>
        <description><![CDATA[scroll-state() はコンテナ要素のスクロール状態に応じてスタイルを変更することができるコンテナクエリです。例えば、スクロール中にヘッダーを sticky な場合の境界線を表示することが挙げられます。]]></description>
        <pubDate>Sat, 18 Jan 2025 10:59:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[ユーザーにヒントを表示するための `popover=hint` 属性]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/popover-hint-attribute]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/popover-hint-attribute]]></guid>
        <description><![CDATA[ポップオーバー API は 2024 年の Baseline に組み込まれており、主要なブラウザでサポートされています。Chrome Beta 133 では 3 番目の値として `hint` が追加されました。`popover=hint` はユーザーに対してヒントを表示する「ツールチップ」として動作します。この記事では `popover=hint` 属性について詳しく見ていきます。]]></description>
        <pubDate>Sat, 18 Jan 2025 03:25:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Node.js で TypeScript を直接実行できるようになった]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/6Dpm3KfJdorewgzFu8kvv4]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/6Dpm3KfJdorewgzFu8kvv4]]></guid>
        <description><![CDATA[Node.js v23.6.0 から `--experimental-strip-types` フラグがデフォルトで有効になりました。これにより、Node.js でTypeScript を直接実行できるようになります。]]></description>
        <pubDate>Sat, 11 Jan 2025 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[AI エディター Cursor を試してみる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/try-ai-editor-cursor]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/try-ai-editor-cursor]]></guid>
        <description><![CDATA[AI エディター Cursor は GitHub Copilot と同様にコードの補完やチャットによるコードの生成をサポートしてくれます。Cursor は VS Code をフォークして作られており、既存の VS Code の拡張機能やキーバインドをそのまま利用することも特徴の 1 つです。]]></description>
        <pubDate>Sat, 11 Jan 2025 03:04:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[GitHub Actions で再利用可能なワークフローを作成する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/github-actions-reusable-workflow]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/github-actions-reusable-workflow]]></guid>
        <description><![CDATA[GitHub Actions で CI/CD 環境を構築する際に、同じような処理を複数のファイルで記述するようなことがよくあります。この記事では、GitHub Actions で再利用可能なワークフローを作成する方法と、実際に再利用可能なワークフローを作成する手順を紹介します。]]></description>
        <pubDate>Sat, 04 Jan 2025 02:30:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[2024 年に読んでよかった本]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/books-read-in-2024]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/books-read-in-2024]]></guid>
        <description><![CDATA[私は今年 1 年間でおおよそ 300 冊の本を読んだようです。その中から、特に印象に残った本をいくつか紹介します。]]></description>
        <pubDate>Sat, 28 Dec 2024 11:59:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[カード UI の入れ子のリンクの問題を解決する Link Area Delegation の提案]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/link-area-delegation-proposal]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/link-area-delegation-proposal]]></guid>
        <description><![CDATA[多くのウェブサイトではリンクを入れ子にしたカード UI が利用されています。しかし、このような UI では HTML 仕様に違反していたり、ハッキーな手法で実装されていることがあります。Open UI コミュニティでは Link Area Delegation という提案を行っており、標準化された方法で入れ子のリンクを実装することで UX やアクセシビリティを損なうことを防ぐことを目的としています。この記事では Link Area Delegation の内容について紹介します。]]></description>
        <pubDate>Sat, 21 Dec 2024 01:30:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[MSW で Web Socket のリクエストをモックする]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/msw-mock-web-socket-request]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/msw-mock-web-socket-request]]></guid>
        <description><![CDATA[Mock Service Worker (MSW) の v2.6.0 から Web Socket のリクエストをモックすることができるようになりました。Web Socket のサポートのリクエストは 2020 年から存在しており、多くの議論の末 4 年の歳月を経てリリースされた機能となります。この記事では、MSW で Web Socket のリクエストをモックする方法を紹介します。]]></description>
        <pubDate>Sat, 14 Dec 2024 01:52:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Testing Library の debug で出力される行数を多くする方法]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/239ZgsDWxE249fBsJVCrje]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/239ZgsDWxE249fBsJVCrje]]></guid>
        <description><![CDATA[Testing Library では要素の取得に失敗した場合にレンダリングされた HTML がコンソールに表示されます。しかし、デフォルトで出力される行は 7000 に制限されているため目的の要素が表示される前に表示が終了してしまうことがしばしばあります。]]></description>
        <pubDate>Wed, 11 Dec 2024 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Zod を使って OpenAI の構造化された出力を扱う]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/zod-openai-structured-output]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/zod-openai-structured-output]]></guid>
        <description><![CDATA[OpenAI の gpt-4o-2024-08-06 以降のモデルではパラメータとして JSON Schema を指定することで構造化された出力をサポートしています。Node.js 向けの OpenAI SDK では Zod を使ってスキーマを定義し、構造化された出力を扱うことができます。この記事では実際に Zod を使って OpenAI の構造化された出力を扱う方法を紹介します。]]></description>
        <pubDate>Sat, 07 Dec 2024 01:49:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Tailwind CSS v4 で導入される CSS First Configurations]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/tailwind-css-v4-css-first-configurations]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/tailwind-css-v4-css-first-configurations]]></guid>
        <description><![CDATA[Tailwind CSS v4 における最も大きな変更点の 1 つは、CSS First Configurations です。今まで `tailwind.config.js` で設定していたテーマなどの設定を CSS ファイル内で行うことができるようになります。]]></description>
        <pubDate>Sat, 30 Nov 2024 02:21:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[アクセシビリティツリーを比較する Playwright の Aria snapshots がよさそう]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/playwright-aria-snapshot]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/playwright-aria-snapshot]]></guid>
        <description><![CDATA[Playwright の Aria snapshots はアクセシビリティツリーを比較することでテストする手法です。アクセシビリティツリーは DOM のスナップショットテストと比較して、外部から見た振る舞いが変わりづらいという利点があります。`.toMatchAriaSnapshot()` メソッドを使ってアクセシビリティツリーのスナップショットテストを行うことができます。]]></description>
        <pubDate>Sun, 24 Nov 2024 00:23:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Node.js では標準モジュールで Promise timer が使える]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/5fGDdRNfZNvgS1iAURPEXe]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/5fGDdRNfZNvgS1iAURPEXe]]></guid>
        <description><![CDATA[人為的な遅延を発生させるために、`setTimeout` を Promise をラップする方法がよく使われています。これにより、`await` を使って任意の秒数処理を遅らせることができます。]]></description>
        <pubDate>Sat, 16 Nov 2024 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[新しいパッケージマネージャーの vlt を使ってみる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/new-package-manager-vlt]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/new-package-manager-vlt]]></guid>
        <description><![CDATA[vlt は npm と互換性のあるパッケージマネージャーです。`npm` と同じように、パッケージのインストールや script の実行ができます。また、npm registry 互換のサーバーレジストリである vsr も同時に提供されています。]]></description>
        <pubDate>Sat, 16 Nov 2024 06:36:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Next.js で OpenTelemetry を使用した計装を行う]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/instrumentation-with-opentelemetry-in-nextjs]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/instrumentation-with-opentelemetry-in-nextjs]]></guid>
        <description><![CDATA[この記事では Next.js で OpenTelemetry を使用した計装を行う方法について紹介します。Next.js では `instrumentation.ts` ファイルを使用して監視ツールやログツールの計装を設定できます。]]></description>
        <pubDate>Sun, 10 Nov 2024 08:53:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Next.js の "use cache" ディレクティブによるキャッシュ制御]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/cache-control-with-use-cache-directive-in-nextjs]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/cache-control-with-use-cache-directive-in-nextjs]]></guid>
        <description><![CDATA[Next.js の App Router はデフォルトでキャッシュされる設計でリリースされました。一方でデフォルトでキャッシュされることに対して不満を持つ開発者も多かったように思います。このようなフィードバックを受けて、Next.js 15 ではいくつかのキャッシュ戦略が変更されました。さらに現在 canary チャンネルで提供されている dynamicIO フラグを有効にすることで、"use cache" ディレクティブを用いてキャッシュを制御できるようになります。]]></description>
        <pubDate>Sat, 02 Nov 2024 05:07:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[JavaScript でスタイルシートを構築する CSSStyleSheet]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/cssstylesheet-to-build-stylesheets-in-javascript]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/cssstylesheet-to-build-stylesheets-in-javascript]]></guid>
        <description><![CDATA[CSSStyleSheet インターフェースは、JavaScript でスタイルシートを構築し、操作するための API です。CSSStyleSheet() コンストラクターで新しいスタイルシートを作成し、.replaceSync() メソッドでスタイルを適用できます。]]></description>
        <pubDate>Sat, 26 Oct 2024 02:59:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[react-to-web-component を使って React コンポーネントを Web Components に変換する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/react-to-web-component]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/react-to-web-component]]></guid>
        <description><![CDATA[@r2wc/react-to-web-component は React コンポーネントを Web Components に変換するためのライブラリです。このライブラリを使用することで、React コンポーネントを任意の HTML 要素として使用することが可能になります。]]></description>
        <pubDate>Sun, 20 Oct 2024 12:06:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[HTML だけで Shadow DOM を構築するための宣言型 Shadow DOM]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/declarative-shadow-dom]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/declarative-shadow-dom]]></guid>
        <description><![CDATA[宣言型 Shadow DOM は `<template>` 要素を使用して Shadow DOM を構築する方法です。宣言型 Shadow DOM を使用することで、従来の JavaScript を使用した Shadow DOM の構築方法と比較して、サーバーサイドレンダリング（SSR）に対応しているため、パフォーマンスの向上や SEO 対策に期待されます。]]></description>
        <pubDate>Sat, 19 Oct 2024 06:45:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Chrome の組み込み AI の Language Detection API で言語を判定する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/chrome-internal-ai-language-detection-api]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/chrome-internal-ai-language-detection-api]]></guid>
        <description><![CDATA[Language Detection API は Chrome に組み込まれた AI により、クライアントサイドで言語を判定するための提案です。この API を利用することで、テキストの言語を判定することが可能になります。]]></description>
        <pubDate>Mon, 14 Oct 2024 07:58:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Chrome の組み込み AI の Summarization API を試してみる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/try-chrome-internal-ai-summarization-api]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/try-chrome-internal-ai-summarization-api]]></guid>
        <description><![CDATA[Google では大規模言語モデル（LLM）などの AI モデルをブラウザに直接統合するように設計された、Web プラットフォーム API とブラウザ機能を開発しています。これには Gimini Nano という AI モデルが含まれており、デスクトップパソコンにおいてローカルで実行されるように設計されています。この記事では Summarization API を使用して、文章を要約してみます。]]></description>
        <pubDate>Sun, 13 Oct 2024 04:27:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Storybook と Vitest の統合したコンポーネントテスト]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/storybook-and-vitest-integration]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/storybook-and-vitest-integration]]></guid>
        <description><![CDATA[Storybook v8.3 以降、ストーリーをテストするためのテストランナーとして Vitest を使用できるようになりました。Vitest を使用することで複雑なセットアップが不要になります。また、推奨されているブラウザモードを使用することで、実際のブラウザでの挙動をより正確に再現できます。]]></description>
        <pubDate>Sun, 06 Oct 2024 06:39:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[UI を閉じる動作を処理する CloseWatcher API]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/close-watcher-api]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/close-watcher-api]]></guid>
        <description><![CDATA[CloseWatcher API は UI を閉じる動作を処理するための API です。キーボードの `Esc` キー、Android の戻るボタンなどのデバイス固有のメカニズムによって閉じるイベントを提供します。]]></description>
        <pubDate>Sat, 28 Sep 2024 06:08:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[ユーザーのカラースキーマ設定を上書きする web preferences API の提案]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/2fo3q3hxoB0bSvZBDghtCM]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/2fo3q3hxoB0bSvZBDghtCM]]></guid>
        <description><![CDATA[ユーザーのカラーテーマの設定によりスタイルを変更するためには、`prefers-color-scheme` メディアクエリを使用することが一般的です。しかし、多くのウェブサイトでは OS の設定とは独立してカラースキーマを設定する機能が提供されています。この場合、`prefers-color-scheme` メディアクエリを使用せずに、`class` 属性を使ったスタイルの切り替えが行われます。]]></description>
        <pubDate>Sat, 21 Sep 2024 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[スタイルをカスタマイズ可能な新しい `<select>` 要素]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/customizable-select-element]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/customizable-select-element]]></guid>
        <description><![CDATA[従来の `<select>` 要素は CSS を利用したスタイルを適用することができないため、多くの開発者にとって課題となっていました。この問題を解決するために新しい既存の `<select>` 要素をカスタマイズする手段が提案されました。この疑似要素を利用することで、開発者は `<select>` 要素のスタイルをカスタマイズをオプトインできるようになります。]]></description>
        <pubDate>Sat, 21 Sep 2024 02:59:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[`calc-size()` や `interpolate-size: allow-keywords;` で `height: auto;` な要素のアニメーションをサポートする]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/calc-size-animation]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/calc-size-animation]]></guid>
        <description><![CDATA[CSS において height プロパティを 0 から auto に変化させた場合に、アニメーションが適用されないのはよく知られた問題です。この記事では calc-size() 関数を使って height: auto; な要素のアニメーションを実装する方法を紹介します。]]></description>
        <pubDate>Sat, 14 Sep 2024 06:06:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[アクセシビリティが考慮された React Aria のドラッグアンドドロップ]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/react-aria-drag-and-drop]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/react-aria-drag-and-drop]]></guid>
        <description><![CDATA[React Aria は Adobe により提供されている React 用のコンポーネントライブラリであり、アクセシビリティを最優先した設計となっています。本記事では、React Aria により提供されているドラッグアンドドロップ機能を紹介します。]]></description>
        <pubDate>Sat, 07 Sep 2024 06:17:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[フィーチャーフラグの標準規格 OpenFeature の React SDK を試してみる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/openfeature-react-sdk]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/openfeature-react-sdk]]></guid>
        <description><![CDATA[OpenFeature はフィーチャーフラグのオープンな規格です。特定のベンダーに依存しない API や SDK が提供されています。フィーチャーフラグの API の標準化により、ベンダーロックインを回避し、フィーチャーフラグのツールを自由に選択できるようになります。この記事では OpenFeature の React SDK を使ってフィーチャーフラグを評価する方法を紹介します。]]></description>
        <pubDate>Sat, 31 Aug 2024 07:56:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[React Aria でアクセシブルなコンポーネントを作成する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/react-aria-accessible-component]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/react-aria-accessible-component]]></guid>
        <description><![CDATA[React Aria は Adobe が提供する React 用のコンポーネントライブラリです。スタイルを持たずに UI の機能やロジックのみを提供するいわゆるヘッドレス UI ライブラリであり、特に React Aria はアクセシビリティを最優先した設計となっているのが特徴です。ヘッドレス UI ライブラリを用いて UI コンポーネントを実装することで、開発者はビジネスロジックやデザインに集中することができます。]]></description>
        <pubDate>Sun, 25 Aug 2024 06:34:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[@axe-core/playwright によるアクセシビリティテストの自動化]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/axe-core-playwright]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/axe-core-playwright]]></guid>
        <description><![CDATA[axe-core は axe というアクセシビリティテストツールのコアエンジンで、オープンソースとして提供されています。この記事では、E2E テストフレームワークの Playwright と axe-core を組み合わせて使用して、アクセシビリティテストを自動化する方法について紹介します。]]></description>
        <pubDate>Sun, 18 Aug 2024 03:53:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[box-shadow で実装されたフォーカスリングはハイコントラストモードで表示されない]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/box-shadow-focus-ring-not-visible-in-high-contrast-mode]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/box-shadow-focus-ring-not-visible-in-high-contrast-mode]]></guid>
        <description><![CDATA[フォーカスリングとは、キーボード操作でフォーカスが当たった要素を視覚的に示すための UI デザインのことです。フォーカスリングのカスタマイズに `box-shadow` プロパティを使うことがありますが、ハイコントラストモードではフォーカスリングが表示されない問題があります。この記事では、ハイコントラストモードでフォーカスリングを表示する方法について解説します。]]></description>
        <pubDate>Sun, 11 Aug 2024 05:42:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[CSS の `reading-flow` プロパティで要素の読み上げ順を制御する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/css-reading-flow-property]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/css-reading-flow-property]]></guid>
        <description><![CDATA[Flex や Grid コンテナ内では要素の見た目上の順序と DOM 上の順序が異なることがあります。このような状態はキーボード操作やスクリーンリーダーなどの支援技術を使うユーザーにとって混乱を招く可能性があります。CSS の `reading-flow` プロパティ個の問題を解決するためのプロパティです。見た目上の順序に従って読み上げ順を制御することができます。]]></description>
        <pubDate>Sat, 03 Aug 2024 06:33:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[CSS でランダムな値を扱う `random()` と `random-item()` 関数]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/css-random-function]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/css-random-function]]></guid>
        <description><![CDATA[`random()` と `random-item()` 関数は CSS でランダムな値を扱うための関数です。`random()` 関数は最小値と最大値を引数に取り、その範囲内のランダムな数値を返します。`random-item()` 関数は引数に渡したリストの中からランダムに 1 つの値を返します。]]></description>
        <pubDate>Sun, 28 Jul 2024 08:06:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[新しいビルドツールの Farm]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/new-build-tool-farm]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/new-build-tool-farm]]></guid>
        <description><![CDATA[Farm は Rust 製の新しいビルドツールです。パフォーマンスを重視して設計されており、Vite と互換性のある JavaScript プラグインをサポートしているという特徴があります。バンドルの戦略には Partial Bundling というものを採用しており、モジュールのネットワークリクエスト数を削減するため、20 ~ 30 のファイルにバンドルするという特徴があります。]]></description>
        <pubDate>Sun, 21 Jul 2024 06:44:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[CSS の `@property` ルールでカスタムプロパティを定義する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/define-custom-properties-with-css-property-rule]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/define-custom-properties-with-css-property-rule]]></guid>
        <description><![CDATA[CSS の @property ルールを使うことで、CSS のカスタムプロパティを定義できます。カスタムプロパティを定義することでプロパティの構文チェック、デフォルト値の設定、プロパティが値を継承するかどうかの設定などが可能になります。カスタムプロパティに誤った値が代入されることを防いだり、グラデーションのアニメーションなど、従来は実装が難しかった機能をサポートすることができます。]]></description>
        <pubDate>Sat, 13 Jul 2024 07:16:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[スタイルの適用範囲を限定する CSS の `@scope` ルール]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/scope-rule-in-css]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/scope-rule-in-css]]></guid>
        <description><![CDATA[`@scope` アットルールは特定のセレクタの範囲に限定したスタイルを適用するためのルールです。`@scope` のルールセットに 1 つの CSS セレクタを指定すると、そのセレクタがスコープのルートとなります。`@scope` ルール内のスタイルはそのセレクタの範囲内でのみ適用されます。]]></description>
        <pubDate>Sun, 07 Jul 2024 07:46:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[CSS のカスケードレイヤー `@layer` を使ってスタイルを階層化して管理する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/manage-styles-structurally-with-css-cascade-layer]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/manage-styles-structurally-with-css-cascade-layer]]></guid>
        <description><![CDATA[CSS の `@layer` ルールは、カスケードレイヤーを宣言するために使用されます。カスケードレイヤーとは、スタイルの優先度をレイヤー（階層）に分けて管理する仕組みです。`@layer` ルールを使用することでスタイルの記述順や詳細度に関係なくスタイルを宣言できるため、新しい形式の CSS 設計を実現することができます。]]></description>
        <pubDate>Sun, 30 Jun 2024 07:47:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[TypeScript で配列の要素を取得する時 `.at()` メソッドを使うとより安全]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/1I2o5hV41vUHNH8mMXWN9h]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/1I2o5hV41vUHNH8mMXWN9h]]></guid>
        <description><![CDATA[JavaScript で配列にアクセスする際、配列の長さを超えるインデックスを指定すると `undefined` が返されることがあります。しかし、TypeScript の型定義上では、配列の長さを超えるインデックスを指定しても `undefined` 型が返されることはありません。これはランタイムエラーを引き起こす恐れがあります。]]></description>
        <pubDate>Mon, 24 Jun 2024 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[CSS で条件分岐を行う `@when/@else` ルール]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/when-else-rule-in-css]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/when-else-rule-in-css]]></guid>
        <description><![CDATA[`@when/@else` アットルールは条件付きスタイルをまとめて記述するためのルールです。`@media` や `@support` の条件を `@when` にわたすことで、`true` の場合には `@when` ブロック内のスタイルが、`false` の場合には `@else` ブロック内のスタイルが適用されます。このルールを使うことでより簡潔なコードを書くことができます。]]></description>
        <pubDate>Sat, 22 Jun 2024 06:36:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[SVG アイコンの表示に mask-image CSS プロパティを使用する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/use-mask-image-css-property-to-display-svg-icons]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/use-mask-image-css-property-to-display-svg-icons]]></guid>
        <description><![CDATA[mask-image プロパティは CSS でマスキングを行うためのプロパティであり、SVG アイコンを表示する際に有用です。mask-image プロパティを使用することで、外部の SVG ファイルを読み込みつつ、アイコンの色を CSS で指定することが可能になります。]]></description>
        <pubDate>Sat, 15 Jun 2024 06:35:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Chrome の 組み込み AI Gemini Nano を試してみる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/try-chrome-internal-ai-gemini-nano]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/try-chrome-internal-ai-gemini-nano]]></guid>
        <description><![CDATA[Chrome 126 から Gemini Nano という AI がデスクトップクライアントに組み込まれる予定です。Gemini Nano は Google の AI モデルの中で最も小さいモデルです。デスクトップクライアントに直接組み込まれることで、ユーザーの手元の環境で AI を利用できることが特徴です。開発者は JavaScript から Chrome に組み込まれた Gemini Nano にアクセスして生成 AI の機能を実装することができます。]]></description>
        <pubDate>Tue, 11 Jun 2024 10:19:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[CSS トランジションの開始時のスタイルを定義する `@starting-style` ルール]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/starting-style-rule-for-css-transitions]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/starting-style-rule-for-css-transitions]]></guid>
        <description><![CDATA[`@starting-style` ルールは、CSS トランジションの開始時のスタイルを定義するためのアットルールです。CSS トランジションの既定のルールでは前回のスタイル変更イベントでレンダリングされていなかった要素では、アニメーションが適用されない、`display: none` から他の値に変更した場合にアニメーションが適用されないといった問題があります。`@starting-style` ルールを使用することでこれらの問題を解決できます。]]></description>
        <pubDate>Sun, 09 Jun 2024 06:22:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[scrollbar-gutter CSS プロパティでスクロールバーの切り替わりによる画面のガタツキを解消する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/scrollbar-gutter-css-property-to-prevent-screen-jitter-due-to-scroll-bar-switching]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/scrollbar-gutter-css-property-to-prevent-screen-jitter-due-to-scroll-bar-switching]]></guid>
        <description><![CDATA[子要素が親要素のボックスからはみ出した時、overflow プロパティの値が auto または scroll の場合にスクロールバーが表示されます。スクロールバーがクラシックスクロールバーの場合、スクロールバーの表示・非表示によりボックスの幅が変わるため、画面がガタつくことがあります。scrollbar-gutter プロパティを使うとスクロールバー用のスペースをあらかじめ確保でき、画面のガタツキを解消できます。]]></description>
        <pubDate>Sat, 01 Jun 2024 06:30:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[SvelteKit チュートリアル - 記事投稿サイトを作ってみよう]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/sveltekit-tutorial-create-a-blog-site]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/sveltekit-tutorial-create-a-blog-site]]></guid>
        <description><![CDATA[SvelteKit は Svelte と Vite で構築たフレームワークです。SvelteKit は Web アプリケーションを開発するために必要な機能を提供します。この記事では、SvelteKit を使用して記事投稿サイトを作成するチュートリアルを紹介します。記事投稿サイトは、記事の一覧表示、記事の詳細表示、記事の投稿、記事の削除の機能を持つシンプルな Web アプリケーションです。]]></description>
        <pubDate>Sun, 26 May 2024 05:28:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Svelte v5 で導入されるスニペット機能]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/svelte-v5-snippet-feature]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/svelte-v5-snippet-feature]]></guid>
        <description><![CDATA[Svelte v5 ではスニペットと呼ばれる新しい機能が導入されます。スニペットとは、コンポーネント内で使用できる再利用可能なマークアップのことです。`#snippet` ディレクティブを使用してスニペットを定義し、引数を受け取ることができます。スニペットを呼び出す際には `@render` ディレクティブを使用します。またスニペットは単なる値として扱われるため、コンポーネントの Props として渡すことができます。]]></description>
        <pubDate>Sun, 19 May 2024 04:36:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[楽観的更新を行うための React の useOptimistic フック]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/react-use-optimistic-hook]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/react-use-optimistic-hook]]></guid>
        <description><![CDATA[React v19 では楽観的更新を行うための `useOptimistic` フックが導入される予定です。楽観的更新とは、ユーザーの操作に対して非同期処理の完了を待たずに UI を更新する手法のことです。楽観的更新によりユーザーの操作に対して即座にフィードバックを提供できるため、UX の向上につながります。]]></description>
        <pubDate>Sun, 12 May 2024 04:43:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Svelte v5 における イベントハンドラの変更点]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/svelte-v5-event-handlers]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/svelte-v5-event-handlers]]></guid>
        <description><![CDATA[Svelte v5 では、イベントハンドラの書き方が一新され、いくつか非推奨となった書き方があります。この記事では、Svelte v4 と Svelte v5 のイベントハンドラの書き方の違いについて見ていきます。]]></description>
        <pubDate>Sun, 05 May 2024 06:15:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Svelte v5 で導入された Runes によるリアクティビティシステム]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/svelte-reactivity-system-with-runes]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/svelte-reactivity-system-with-runes]]></guid>
        <description><![CDATA[Svelte v5 で導入された Runes によるリアクティビティシステムについて解説します。従来の Svelte は純粋な JavaScript のコードのみを使用してリアクティビティを実現していましたが、アプリケーションが大規模になると複雑性が増すという問題がありました。Runes は Svelte のリアクティビティシステムをより柔軟にし、アプリケーションの規模が大きくなってもシンプルさを保つことを目指しています。]]></description>
        <pubDate>Sat, 04 May 2024 05:54:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[エラーや非同期処理をより安全に扱うための TypeScript ライブラリ Effect-TS]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/typescript-library-for-safer-error-handling-and-async-operations-effect-ts]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/typescript-library-for-safer-error-handling-and-async-operations-effect-ts]]></guid>
        <description><![CDATA[Effect-TS は、開発者が複雑なエラーや非同期処理をより安全に開発できるようにすることを目的とした TypeScript ライブラリです。Effect-TS は、TypeScript の型システムを活用して、本番のアプリケーションにおける実用的な問題を解決することを目指しています。]]></description>
        <pubDate>Mon, 29 Apr 2024 05:54:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Next.js 型安全なルーティングを使う]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/nextjs-typed-routes]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/nextjs-typed-routes]]></guid>
        <description><![CDATA[Next.js では実験的な機能として、型安全なルーティングを利用できます。この機能を使うことでリンク先のパス名を静的に検査できるため、typo などのエラーを事前に防ぐことができます。]]></description>
        <pubDate>Sun, 28 Apr 2024 06:46:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[React v19 から forwardRef が不要になる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/53WOkRFJq2m0UvpiEH4RV8]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/53WOkRFJq2m0UvpiEH4RV8]]></guid>
        <description><![CDATA[今までの React では `ref` をコンポーネントの Props として渡す際に、`forwardRef` を使ってラップする必要がありました。しかし、React v19 からは `forwardRef` が不要になり、`ref` を直接渡すことができるようになりました。]]></description>
        <pubDate>Sat, 27 Apr 2024 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Remix v2.9 で導入された Single Fetch]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/single-fetch-in-remix]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/single-fetch-in-remix]]></guid>
        <description><![CDATA[Remix v2.9 で導入された Single Fetch はクライアントサイドでのページ遷移が行われた際に、サーバーへの複数の HTTP リクエストを並行して行う代わりに、1 つの HTTP リクエストを実行しまとめてレスポンスを返す機能です。Single Fetch は v2.9 ではフィーチャーフラグとして提供されており、v3 以降ではデフォルトの挙動となります。]]></description>
        <pubDate>Sat, 27 Apr 2024 05:08:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Math.max() にスプレッド構文で大きな配列を渡すとエラーになる恐れがある]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/6Q3axtdkljrdkl9jiahurP]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/6Q3axtdkljrdkl9jiahurP]]></guid>
        <description><![CDATA[`Math.max()` は、引数に渡された数値のうち最大のものを返す JavaScript の組み込み関数です。この関数は任意の数の引数を受け取るので、配列最大値を求めたい場合にはスプレッド構文で展開して渡す使い方が一般的です。しかし、引数の数が多すぎるとエラーになることがあります。]]></description>
        <pubDate>Sun, 21 Apr 2024 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[コンテナ要素に基づく相対的な CSS の単位（cqw, cqh, cqi, cqb, cqmin, cqmax）]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/relative-css-units-based-on-container-elements]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/relative-css-units-based-on-container-elements]]></guid>
        <description><![CDATA[コンテナクエリ単位とは、コンテナ要素に基づいてスタイルを定義するための相対的な長さを表す単位です。例えば `1cqw` はコンテナ要素の幅の 1% に相当します。]]></description>
        <pubDate>Sun, 21 Apr 2024 02:22:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[CSS でファイルのアップロードボタンをカスタマイズする ::file-selector-button 疑似要素]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/3xubuPzazJ86RlN8Br7Lm3]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/3xubuPzazJ86RlN8Br7Lm3]]></guid>
        <description><![CDATA[`::file-selector-button` 疑似要素を使用することで、`<input type="file">` 要素のデフォルトのボタンのスタイルをカスタマイズできます。現在すべてのモダンブラウザでサポートされています。
]]></description>
        <pubDate>Mon, 15 Apr 2024 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[ポップアップが画面内に収まらない場合に自動的に表示位置を調整する CSS Anchor Positioning]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/css-anchor-positioning]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/css-anchor-positioning]]></guid>
        <description><![CDATA[CSS Anchor Positioning とは、特定の要素を Anchor（基準）としてツールチップなどの要素の位置を決定する機能の総称です。CSS Anchor Positioning を使用することで、Floating UI のように自動で画面内に表示されるツールチップやコンテキストメニューを実装できます。]]></description>
        <pubDate>Sat, 13 Apr 2024 06:49:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Promise や Context から値を読み取る use React フック]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/promise-context-value-react-hook]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/promise-context-value-react-hook]]></guid>
        <description><![CDATA[React の Canary および experimental チャンネルでのみ利用可能な `use` フックについて解説します。`use` フックは Promise や Context から値を読み取るためのフックで、Promise の値を同期的に読み取ることができます。その他の React フックと異なり、`if` 文やループ内で呼び出すことができる点が特徴として挙げられます。]]></description>
        <pubDate>Sun, 07 Apr 2024 01:33:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[親要素のスタイルの基づいてスタイルを適用するコンテナスタイルクエリー CSS]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/container-style-query-in-css]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/container-style-query-in-css]]></guid>
        <description><![CDATA[CSS の @container ルールは、コンテナ（親要素）の特性に基づいてスタイルを適用するためのルールです。コンテナースタイルクエリーはコンテナサイズクエリーとコンテナスタイルクエリーの 2 種類に分類されます。コンテナスタイルクエリは style() 関数記法で定義されたスタイルを @container ルールで評価し、指定された条件が一致する場合にスタイルが適用されます。]]></description>
        <pubDate>Sat, 30 Mar 2024 05:12:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[CSS: ダークモードで値を切り替える light-dark 関数]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/5DNVLeqAtB5yYui390DNvS]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/5DNVLeqAtB5yYui390DNvS]]></guid>
        <description><![CDATA[light-dark 関数は CSS のカラー関数で、引数に 2 つのカラー値を取り、ライトモードのときには 1 つ目の値をを、ダークモードのときには 1 つ目の値を返します。

`color-scheme` プロパティの値もしくはユーザーの OS のダークモード設定によって切り替わります。]]></description>
        <pubDate>Wed, 27 Mar 2024 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[CSS から React コンポーネントを生成する MistCSS]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/css-to-react-component-with-mistcss]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/css-to-react-component-with-mistcss]]></guid>
        <description><![CDATA[MistCSS は CSS in JS になぞらえた JS from CSS というコンセプトで、CSS から React コンポーネントを生成するツールです。ピュアな CSS を記述できるので、学習コストが低い、パフォーマンスに影響がないといったメリットがあります。]]></description>
        <pubDate>Sat, 23 Mar 2024 05:18:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[単体テストでスクリーンリーダーをシミュレートする Virtual Screen Reader]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/unit-test-visual-screen-reader]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/unit-test-visual-screen-reader]]></guid>
        <description><![CDATA[Virtual Screen Reader は単体テストのためにスクリーンリーダをシミュレートするライブラリです。このライブラリを使うことでマウスやキボードの操作をテストするように、スクリーンリーダーにより期待する読み上げが行われるかどうかをテストできます。なお、Virtual Screen Reader はあくまでスクリーンリーダーの挙動を模倣したものであり、現実で使われているスクリーンリーダーによるテストを代替するものではないことに注意してください。]]></description>
        <pubDate>Sat, 16 Mar 2024 04:20:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[TypeScript 5.5 で関数による型の絞り込みが改善される]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/2jii12VuEFgjUUEzSDpjEy]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/2jii12VuEFgjUUEzSDpjEy]]></guid>
        <description><![CDATA[従来までは、TypeScript で関数の引数の型を絞り込んだ結果を返す場合には、ユーザー定義型ガードとして `x is string` のような形式で型ガードを定義する必要がありました。TypeScript 5.5 では自動で型の絞り込みが推論されるようになります。]]></description>
        <pubDate>Fri, 15 Mar 2024 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[フォームのアクセシビリティを考える]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/form-accessibility]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/form-accessibility]]></guid>
        <description><![CDATA[今日の Web におけるフォームはユーザーが情報を入力して対話するための重要な要素です。支援技術を利用しているユーザーがフォームの入力を妨げられることは当然避けるべきでしょう。また障害の有無に関わらず、ユーザーに迷いを与えたり、入力ミスを誘発するようなフォームはユーザーがタスクを完了せずに途中で離脱してしまう可能性が高まり、ビジネスの観点からも望ましくありません。この記事ではフォームのアクセシビリティについて考え、実際のフォームの実装においてどのような点に注意すべきかを紹介します。]]></description>
        <pubDate>Sun, 10 Mar 2024 05:06:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[CSS メディアクエリで比較演算子が使える]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/75AEHrLoJIw1jQtCgE02Xn]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/75AEHrLoJIw1jQtCgE02Xn]]></guid>
        <description><![CDATA[CSS のメディアクエリで比較演算子（`<`, `>`, `<=`, `>=`）が使えます。この記法を Range Syntax と呼びます。この記法は従来の `min-width` や `max-width` といった記法と比べて、より直感的に記述できるため便利です。]]></description>
        <pubDate>Sat, 02 Mar 2024 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[React Server Components を使うためのミニマムなフレームワーク Waku]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/react-server-components-minimal-framework-waku]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/react-server-components-minimal-framework-waku]]></guid>
        <description><![CDATA[Waku は小規模から中規模の React プロジェクトを構築するためのミニマムなフレームワークです。従来は React Server Components を使うためには Next.js のような比較的大規模なフレームワークが必要でした。Waku もまた React Server Components に対応しているため、最小限の構成で React Server Components を使いたい場合に適しています。]]></description>
        <pubDate>Sat, 02 Mar 2024 07:13:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[1 つの AbortController で複数の fetch をキャンセルできる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/1qEr3YBzjVTUbtDrlTdGHG]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/1qEr3YBzjVTUbtDrlTdGHG]]></guid>
        <description><![CDATA[`AbortController` は、fetch API でリクエストをキャンセルするためのオブジェクトです。`AbortController` は複数のリクエストを 1 度にキャンセルできます。]]></description>
        <pubDate>Thu, 29 Feb 2024 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[CSS の reverse 系の値は可能な限り使わない]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/6TnCzA1HWOiWmIAVx0a3Gx]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/6TnCzA1HWOiWmIAVx0a3Gx]]></guid>
        <description><![CDATA[CSS の reverse 系の値とは、`flex-direction` の `row-reverse` や `column-reverse` などのことです。これらの値は、アクセシビリティの観点からできる限り使用を避けるべきです。]]></description>
        <pubDate>Tue, 27 Feb 2024 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[新しい UI テストの手法を提供するテストライブラリ SafeTest]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/safetest-a-test-library-offering-a-new-ui-testing-approach]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/safetest-a-test-library-offering-a-new-ui-testing-approach]]></guid>
        <description><![CDATA[SafeTest は Playwright と Jest/Vitest を組み合わせた UI テストライブラリです。特定のライブラリに依存せず、React, Vue, Angular, Svelte などのフレームワークに対応しています。SafeTest は単体テストと Playwright を使った E2E テストの手法を組み合わせることで、それぞれの手法が抱える欠点を補うことを目指しています。]]></description>
        <pubDate>Sun, 25 Feb 2024 04:14:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[技術の素振りのために記事を書く]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/write-articles-for-technical-practice]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/write-articles-for-technical-practice]]></guid>
        <description><![CDATA[技術の素振りを、ここではある特定の言語やフレームワークに対する理解を深めるために、その技術を使って何かしらの成果物を作成することと定義します。素振りの目的としては、ドキュメントからは読み取れない Pro/Con を得ること、その技術が実際のプロジェクトで使えるかどうか調査するといった事項があげられるでしょう。ただ素振りするだけではぼんやりと頭に知識が入っている状態になりがちですが、他者への説明というアウトプットを意識することで、コードを書くことによって得られた知見を整理できるようになります。]]></description>
        <pubDate>Tue, 20 Feb 2024 09:16:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[初心者向けの単純なルールを作る]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/beginner-friendly-simple-rules]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/beginner-friendly-simple-rules]]></guid>
        <description><![CDATA[新しい物事を始めるときは複雑な理屈は抜きにして、単純なルールが規定されていることが初心者にとって大切です。この理屈は開発時の設計やコーディングルールにも当てはまると思います。単純なルールとして lint を設定したり、コンポーネント化して複雑な部分を隠蔽することですべての開発者にとってコードをコミットしやすくなります。]]></description>
        <pubDate>Mon, 19 Feb 2024 09:59:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[type-safe とプログレッシブエンハンスメント、アクセシビリティヘルパーを備えたフォームライブラリ Conform]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/type-safe-and-progressive-enhancement-form-library-conform]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/type-safe-and-progressive-enhancement-form-library-conform]]></guid>
        <description><![CDATA[Conform は React 向けのフォームライブラリです。type-safe であること、Web 標準を利用したプログレッシブエンハンスメントや、アクセシビリティヘルパーを特徴としており、Next.js の Server Actions や Remix に対応しています。]]></description>
        <pubDate>Sun, 18 Feb 2024 04:30:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[フルスタック Web フレームワーク HonoX を使ってみる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/full-stack-web-framework-honox]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/full-stack-web-framework-honox]]></guid>
        <description><![CDATA[HonoX は Hono と Vite をベースにしたフルスタック Web フレームワークです。Hono が提供するサーバーサイドやクライアントサイドの機能を使いつつ、ファイルベースルーティングや Islands Architecture などの新しい機能を使うことができます。]]></description>
        <pubDate>Sat, 10 Feb 2024 07:55:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Tailwind CSS を使う時に一緒に入れたいライブラリ]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/tailwind-css-libs]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/tailwind-css-libs]]></guid>
        <description><![CDATA[Tailwind CSS を使う上でクラス名をスッキリと書くために一緒に入れたいライブラリを紹介します]]></description>
        <pubDate>Sat, 03 Feb 2024 10:26:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Hono で Server-Sent Events によるストリーミングを実装する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/hono-streaming-response]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/hono-streaming-response]]></guid>
        <description><![CDATA[Server-Sent events（SSE）は、サーバーからクライアントに向けてイベントをストリーミングするための仕組みです。WebSocket と比較すると、サーバーからの単方向の通信、HTTP で通信するという特徴があります。この記事では Hono を使って OpenAI API を使ったテキスト生成をストリーミングする方法を紹介します。]]></description>
        <pubDate>Thu, 01 Feb 2024 11:43:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[npm は isntall でもコマンドを実行できる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/5g2wGcIq0uuPn1jn9soemE]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/5g2wGcIq0uuPn1jn9soemE]]></guid>
        <description><![CDATA[npm は install の alias として isntall が用意されているので、typo して isntall と打ってもコマンドが実行されます。]]></description>
        <pubDate>Wed, 31 Jan 2024 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[クラス名の結合をする軽量ライブラリの clsx]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/5KH0RavVHAFFwAHMcLQGSg]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/5KH0RavVHAFFwAHMcLQGSg]]></guid>
        <description><![CDATA[clsx は、複数のクラス名を結合するための軽量ライブラリです。条件によってクラスを付け替えたり、グルーピングをする際に簡潔に記述できます。]]></description>
        <pubDate>Sat, 27 Jan 2024 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[TypeScript のような構文で OpenAPI のスキーマを定義する TypeSpec]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/typescript-like-syntax-for-openapi-schemas]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/typescript-like-syntax-for-openapi-schemas]]></guid>
        <description><![CDATA[TypeSepc は TypeScript にインスパイアされた言語で、開発者が親しみやすい構文で OpenAPI のスキーマを定義できます。モデルを使ってデータの構造を定義し、`@route` デコレーターを使って REST API のエンドポイントを定義します。]]></description>
        <pubDate>Sat, 27 Jan 2024 04:48:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[CSS で絶対に最前面に表示したい要素には z-index:calc(infinity) を指定する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/5BUGlsWJn2QzxIgFYvkrds]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/5BUGlsWJn2QzxIgFYvkrds]]></guid>
        <description><![CDATA[いつの時代にも z-index の管理には頭を悩ませます。z-index の値には 1 以外の値を許可しないなどの管理方法がありますが、外部のライブラリを使用してる場合に勝つことができません。

そこで　z-index の値に `calc(infinity)` を指定すると、絶対に最前面に表示させることができます。
]]></description>
        <pubDate>Thu, 25 Jan 2024 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Node.js esm の dirname と filename]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/3YJDVYrF4mHiqMsnmzUQvW]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/3YJDVYrF4mHiqMsnmzUQvW]]></guid>
        <description><![CDATA[commonjs では `__dirname` と `__filename` でファイルのパスを取得できますが ES Modules では使えません。

今まで同等の API が存在していなかったのですが、Node.js v20.11.0 で `import.meta.dirname` と `import.meta.filename` が追加されました。]]></description>
        <pubDate>Tue, 23 Jan 2024 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Bun でクロスプラットフォームなシェルスクリプト]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/bun-cross-platform-shell-script]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/bun-cross-platform-shell-script]]></guid>
        <description><![CDATA[Bun の `$` を使うと、クロスプラットフォームなシェルスクリプト（Bun Shell）を書くことができます。Bun Shell は macOS (zsh)、Linux (bash)、および Windows (cmd) と OS の違いを気にせずにシェルスクリプトを書ける、JavaScript オブジェクトとのやりとりが可能であることが特徴です。]]></description>
        <pubDate>Sat, 20 Jan 2024 11:01:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[MSW v2 では　Web 標準の Fetch API をサポート]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/73zH9ULSIWeA55tA6corT8]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/73zH9ULSIWeA55tA6corT8]]></guid>
        <description><![CDATA[Mock Service Worke（MSW） v2 では　Web 標準の Fetch API をサポートしました。]]></description>
        <pubDate>Sun, 14 Jan 2024 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Remix の SPA モード]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/remix-spa-mode]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/remix-spa-mode]]></guid>
        <description><![CDATA[Remix は React のフルスタックフレームワークで、Web 標準に基づいた API で構築されていることが特徴です。Node.js のようなサーバーサイドの JavaScript 環境で動作することを前提としています。しかし、現実の世界ではサーバーを用意せずに、静的なファイルをホスティングするだけの環境で Web アプリケーションを構築することが有効な場合も多くあります。このような需要を満たすために、Remix v2.5.0 から実験的に SPA モードが導入されました。]]></description>
        <pubDate>Sun, 14 Jan 2024 02:22:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[TypeScript で任意の文字列を受け取りつつエディタの補完を効かせる型]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/4Tq3csJ5BwAXPR4OBuJvIo]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/4Tq3csJ5BwAXPR4OBuJvIo]]></guid>
        <description><![CDATA[
すべての文字列を受け入れつつ、特定の文字列のみを補完候補に表示させたい場合があります。例えば、CSS の色を指定するプロパティの値には、カラーコードで指定する `#000000` や `#ffffff` などの文字列を受け入れつつ、`red` や `blue` などの特定の文字列を指定します。]]></description>
        <pubDate>Fri, 12 Jan 2024 10:13:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[React でコンポーネントの Props の型を取得する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/3rHXViGZDvnLN3TGQqZ2TP]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/3rHXViGZDvnLN3TGQqZ2TP]]></guid>
        <description><![CDATA[プリミティブな UI を構築するとき、button や input などの HTML 要素をラップしたコンポーネントを作成することがあります。このようなコンポーネントでは、HTML 要素の Props に加えて、コンポーネント固有の Props を定義することが多いです。]]></description>
        <pubDate>Thu, 11 Jan 2024 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[配列をグループ化する Object.groupBy 静的メソッド]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/47G6Ncc9VEZ1qOIGaZ9eOx]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/47G6Ncc9VEZ1qOIGaZ9eOx]]></guid>
        <description><![CDATA[Object.groupBy 静的メソッドは、ES2024 で追加された配列をグループ化する関数です。配列の各要素に対してグループ化のキーを指定することで、グループ化されたオブジェクトを返します。]]></description>
        <pubDate>Wed, 10 Jan 2024 20:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[TailwindCSS で複数行のテキストを省略するとき]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/5VaSPYejGTbfPNm8xK8TqN]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/5VaSPYejGTbfPNm8xK8TqN]]></guid>
        <description><![CDATA[TailwindCSS で長いテキストを省略するときには、`truncate` クラスを使用します。しかし、`truncate` クラスは 1 行のテキストにしか対応していません。]]></description>
        <pubDate>Wed, 10 Jan 2024 17:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[tabIndex には 0 と -1 だけを指定する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/23dS5pxOnX9UmrJFiCERQw]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/23dS5pxOnX9UmrJFiCERQw]]></guid>
        <description><![CDATA[tabIndex 属性は、フォーカス可能な要素を指定するための属性です。この属性自由な数値を指定できますが、これはアクセシビリティの観点から推奨されていません。
]]></description>
        <pubDate>Wed, 10 Jan 2024 16:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Svelte の Props 省略記法]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/7hqTwjmQ3nlA7Nt8W6eceS]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/7hqTwjmQ3nlA7Nt8W6eceS]]></guid>
        <description><![CDATA[Svelte ではコンポーネントに Props を渡す際に省略記法が使えます。]]></description>
        <pubDate>Wed, 10 Jan 2024 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[GitHub Copilot Chat の inline chat のキーボードショートカットを無効にする]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/4byw2Sh9S0AQfqL9Tyz08q]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/4byw2Sh9S0AQfqL9Tyz08q]]></guid>
        <description><![CDATA[GitHub Copilot Chat を VSCode で使用していると、エディタ上で ⌘ + i を押すと inline chat が表示されます。しかし、このショートカットはコードの補完を表示するためにも使われていました。このショートカットに慣れていた人にとっては、inline chat が表示されるのは意図しない動作でしょう。]]></description>
        <pubDate>Tue, 09 Jan 2024 16:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[details 要素の name 属性による排他的アコーディオン]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/1BPeVzWipcnv9IIopiScEd]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/1BPeVzWipcnv9IIopiScEd]]></guid>
        <description><![CDATA[`details` 要素は、開閉可能なコンテンツをマークアップするための要素です。`details` 要素に新たに `name` 属性が追加され排他的アコーディオンとして利用できるようになりました。]]></description>
        <pubDate>Tue, 09 Jan 2024 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[GitLens で特定のコミットを除外する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/5LiIo1l7qCJN5ptnXUjl8u]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/5LiIo1l7qCJN5ptnXUjl8u]]></guid>
        <description><![CDATA[GitLens の使用時に、機械的にフォーマットされたコミットがあるとコードの変更履歴を確認する際に邪魔になってしまいます。この記事では、GitLens で特定のコミットを除外する方法を紹介します。]]></description>
        <pubDate>Mon, 08 Jan 2024 16:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[大きさが自動で変わる textarea を CSS だけで実現]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/48N6K7RZKQhKT83zsu1AMS]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/48N6K7RZKQhKT83zsu1AMS]]></guid>
        <description><![CDATA[テキストの入力量に応じて自動で高さが変わる textarea をよく見かけると思います。Slack や X の入力欄がそうですね。]]></description>
        <pubDate>Mon, 08 Jan 2024 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[TailwindCSS の data 属性]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/shorts/PQPy2VKlf5RDNssDCgdnP]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/shorts/PQPy2VKlf5RDNssDCgdnP]]></guid>
        <description><![CDATA[TailwindCSS v3.2 からは data 属性を使って、条件付きでスタイルを適用できます。
]]></description>
        <pubDate>Sun, 07 Jan 2024 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[静的サイト向けの全文検索エンジンと UI ライブラリの Pagefind]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/static-site-search-engine-and-ui-library-pagefind]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/static-site-search-engine-and-ui-library-pagefind]]></guid>
        <description><![CDATA[Pagefind は、静的サイト向けの全文検索エンジンと UI ライブラリです。特定のフレームワークに依存しない JavaScript ライブラリとして実装されており、静的サイトジェネレーターで生成された HTML ファイルに対して検索機能を追加できます。]]></description>
        <pubDate>Sat, 06 Jan 2024 06:52:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[2023 年に読んでよかった本]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/books-i-read-in-2023]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/books-i-read-in-2023]]></guid>
        <description><![CDATA[年末なので 2023 年のまとめっぽい記事を書きたくなりました。今年は 1 年間でおおよそ 300 冊の本をよんだようです（そのうち 3 割ほどはラノベなのですが...）。その中でも特に印象に残った本を紹介します。]]></description>
        <pubDate>Sat, 30 Dec 2023 10:22:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[input[type=checkbox] 要素に switch 属性を指定することによる HTML 標準のスイッチ UI の提案]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/input-type-checkbox-switch]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/input-type-checkbox-switch]]></guid>
        <description><![CDATA[スイッチは多くのウェブサイトで使われているものの、HTML の標準要素としては存在していませんでした。そのため多くの開発者は、スイッチを実装するために独自の実装を行っていましたが、このような独自の実装はアクセシビリティの問題を引き起こす可能性がありました。この問題を解決するために、WHATWG により `input[type="checkbox"]` 要素に `switch` 属性を追加することが提案されました。この属性を指定することで、チェックボックスをスイッチとして利用できます。]]></description>
        <pubDate>Sat, 23 Dec 2023 07:31:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[OpenTelemetry Collector をカスタムビルドする]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/custom-build-opentelemetry-collector]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/custom-build-opentelemetry-collector]]></guid>
        <description><![CDATA[本番環境では OpenTelemetry Collector Contrib を使用せず、必要なコンポーネントのみを含むようにカスタムビルドすることが推奨されています。この記事では、OpenTelemetry Collector をカスタムビルドする方法について紹介します。]]></description>
        <pubDate>Wed, 20 Dec 2023 11:49:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[CSS だけで動くスクロールドリブンアニメーション]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/scroll-driven-animation]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/scroll-driven-animation]]></guid>
        <description><![CDATA[Google Chrome 115 で追加されたスクロールドリブンアニメーションを使うことで、今まで JavaScript を使わなれけば実装できなかったようなスクロールと連動するアニメーションを CSS だけで実装できるようになりました。スクロールの進行状況に応じてバーを伸縮させるようなアニメーションや、要素が画面内に入ったタイミングでアニメーションを開始するようなことが実装できます。]]></description>
        <pubDate>Sun, 17 Dec 2023 04:29:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Storybook v8 の React Server Components サポート]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/storybook-v8-react-server-components]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/storybook-v8-react-server-components]]></guid>
        <description><![CDATA[Storybook v8 では `experimentalNextRSC` オプションにより React Server Components をサポートしています。しかし、このオプションは React Server Components としての動作を再現しているわけではありません。サーバーサイドで Storybook が動作してるわけではなく、非同期コンポーネントをクライアントでレンダリングしているに過ぎないことに留意すべきです。]]></description>
        <pubDate>Sat, 09 Dec 2023 09:17:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[MSW v2 で `HttpResponse.json()` の型がおかしいときの対処法]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/msw-v2-httpresponse-json-type-error]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/msw-v2-httpresponse-json-type-error]]></guid>
        <description><![CDATA[MSW v2 の `HttpResponse.json()` の第 2 引数の型は `Response` オブジェクトの初期化時に渡すオプションを指定できます。しかし、tsconfig.json の設定によっては、この型がおかしくなることがあります。その場合には、`tsconfig.json` の `compilerOptions.lib` に `dom` を追加するのが一時的な対処法です。]]></description>
        <pubDate>Sat, 02 Dec 2023 08:42:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[React Server Components のテスト手法]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/server-components-testing]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/server-components-testing]]></guid>
        <description><![CDATA[現代におけるコンポーネントのテストは Testing Library を用いてテストを行うことが一般的です。しかし、2023 年　11 月現在、Testing Library はまだ Server Components のテストを十分にサポートしていません。そのため、Server Components のテストを行うには、別の方法を用いる必要があります。この記事では、Testing Library を用いずに Server Components のテストを行う方法について説明します。]]></description>
        <pubDate>Sun, 26 Nov 2023 05:21:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[HTML 標準でコンボボックスを実現する `<combobox>` 要素の提案]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/combobox-element]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/combobox-element]]></guid>
        <description><![CDATA[コンボボックスとは、テキストボックスとドロップダウンリストを組み合わせた UI コンポーネントです。コンボボックスはユーザーがテキストボックスに入力した文字列に基づいて、ドロップダウンリストのアイテムをフィルタリングできます。`<combobox>` 要素は、HTML の標準でコンボボックスを実現することを目的としています。]]></description>
        <pubDate>Sat, 18 Nov 2023 11:47:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[なぜ Server Actions を使うのか]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/why-use-server-actions]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/why-use-server-actions]]></guid>
        <description><![CDATA[Next.js 14 の Server Actions の stable リリースに発表は大きな反響を呼びました。特に `<button>` の `formAction` 属性内で直接 SQL クエリを実行するコードは多くの人に衝撃を与えていました。Server Actions の是非について語る時、導入の背景にユーザー体験の向上があるという観点を忘れてはいけません。また、セキュリティ上の観点についてどのように考えるべきでしょうか？]]></description>
        <pubDate>Sun, 12 Nov 2023 05:10:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[パッケージマネージャーを npm に移行するときには `npm install --package-lock-only` コマンドを使うとよい]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/use-the-npm-install-package-lock-only-command-when-migrating-package-managers-to-npm]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/use-the-npm-install-package-lock-only-command-when-migrating-package-managers-to-npm]]></guid>
        <description><![CDATA[既存のプロジェクトで npm に移行する際に `npm install --package-lock-only` を使うことで、依存パッケージのバージョンを変更することなく lock ファイルを移行できます。]]></description>
        <pubDate>Tue, 07 Nov 2023 10:40:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Server Actions の戻り値には JSX を使える]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/server-actions-return-jsx]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/server-actions-return-jsx]]></guid>
        <description><![CDATA[Server Actions の戻り値には、シリアライズ可能なデータ型を返す必要があります。ドキュメントでは Server Actions の戻り値に JSX を使うことはサポートされていないと記述されていますが、実際には Server Actions の戻り値に JSX を使うことができます。ただし、公式にサポートされている仕様ではないので、思わぬバグを踏む、将来追加される機能に対応しないおそれがあることを理解した上で、使うかどうかを判断する必要があります。]]></description>
        <pubDate>Sat, 04 Nov 2023 05:45:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Server Actions のフォームバリデーションにおいて useFormState でエラーメッセージを表示する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/use-form-state-to-display-error-messages-in-server-actions-forms]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/use-form-state-to-display-error-messages-in-server-actions-forms]]></guid>
        <description><![CDATA[Next.js の Server Actions でフォームを作成する際に、どのような方法でバリデーションを行い、エラーメッセージを表示する際にどのような手段が考えられるでしょうか。プログレッシブエンハンスメントの恩恵を受けるために、サーバーサイドでバリデーションを行いその結果を表示する方法が効果的です。`useFormStatus` フックはこの一連の動作を行うために使用します。]]></description>
        <pubDate>Tue, 31 Oct 2023 10:16:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[GitLens で特定のコミットを除外する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/exclude-specific-commits-from-github-history]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/exclude-specific-commits-from-github-history]]></guid>
        <description><![CDATA[GitLens の使用時に、機械的にフォーマットされたコミットがあるとコードの変更履歴を確認する際に邪魔になってしまいます。この記事では、GitLens で特定のコミットを除外する方法を紹介します。]]></description>
        <pubDate>Sat, 28 Oct 2023 01:30:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[JavaScript なしでインタラクションを追加する Invokers]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/invokers-to-add-interactions-without-javascript]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/invokers-to-add-interactions-without-javascript]]></guid>
        <description><![CDATA[Invokers は JavaScript なしでインタラクションを追加するための提案です。`<button>` 要素に `invoketarget` 属性を指定することで、値として指定した id を持つ `<dialog>` などの要素の開閉状態を切り替えることが可能となります。]]></description>
        <pubDate>Sun, 22 Oct 2023 01:37:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[URL が有効かどうかを判定する `URL.canParse()` メソッド]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/url-canparse-method]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/url-canparse-method]]></guid>
        <description><![CDATA[`URL.canParse()` メソッドは与えられた URL 文字列が有効であるかどうかを判定します。URL 文字列が有効であれば `true` を、無効であれば `false` を返します。これは URL コンストラクターを用いた `try...catch` 文による判定よりも簡潔に記述できます。]]></description>
        <pubDate>Sun, 15 Oct 2023 05:28:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[:user-valid、:user-invalid 擬似クラスでユーザーの操作の後に検証を行う]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/user-valid-and-user-invalid-pseudo-classes]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/user-valid-and-user-invalid-pseudo-classes]]></guid>
        <description><![CDATA[ユーザーの操作の後にフォームの検証に基づき有効か無効かを示すために使用できる :user-valid、:user-invalid 擬似クラスを紹介します。従来の :valid、:invalid 擬似クラスと異なり、ユーザーがフォームに入力するまではスタイルを適用されません。]]></description>
        <pubDate>Fri, 13 Oct 2023 11:16:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[focusgroup で矢印キーによるフォーカスナビゲーションを実装する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/focusgroup-arrow-key-focus-navigation]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/focusgroup-arrow-key-focus-navigation]]></guid>
        <description><![CDATA[カスタム UI ウィジェットを実装する際には、ウィジェットのロールに応じたキーボード操作によるフォーカスナビゲーションを実装することが求められています。従来このようなキーボード操作は JavaScript を用いて実装する必要がありました。`focusgroup` の提案は、このようなキーボード操作を独立して使用できるプリミティブとして提案されています。この機能を利用することで、開発者は JavaScript を用いることなく一貫したフォーカスナビゲーションを実装できます。]]></description>
        <pubDate>Mon, 09 Oct 2023 05:22:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[`<details>` 要素の `name` 属性による排他的なアコーディオンの実装]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/details-name-attribute-accordion]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/details-name-attribute-accordion]]></guid>
        <description><![CDATA[`<details>` 要素の `name` 属性を利用してグループ化することにより、排他的なアコーディオンを JavaScript なしで実装できます。]]></description>
        <pubDate>Sun, 08 Oct 2023 06:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[よりカスタマイズ可能なセレクトボックスを実現する `selectlist` 要素]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/selectlist-element-for-a-more-customizable-select-box]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/selectlist-element-for-a-more-customizable-select-box]]></guid>
        <description><![CDATA[`<selectlist>` 要素は、デザインをカスタマイズできなかった従来の `<select>` 要素の問題を解決するために Open UI グループにより提案されている要素です。`<selectlist>` の構成要素の多くはスロットとして提供されていて、高いカスタマイズ性を備えているのが特徴です。]]></description>
        <pubDate>Sat, 07 Oct 2023 07:46:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[`history.replaceState()` にはブラウザによって呼び出し回数制限がある]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/history-replacestate-rate-limit]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/history-replacestate-rate-limit]]></guid>
        <description><![CDATA[`history.replaceState()` は、ブラウザの履歴を変更するための API です。使用例としてユーザーのアクションによる UI の状態の変更に合わせて、URL のクエリパラメータを変更することが挙げられます。この API はブラウザにより呼び出し回数に制限が設けられており、使い方を誤ると予期せぬ挙動が発生するおそれがあります。]]></description>
        <pubDate>Sun, 01 Oct 2023 04:11:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[モーダルの開閉状態を URL で管理する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/manage-modal-state-with-url]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/manage-modal-state-with-url]]></guid>
        <description><![CDATA[モーダルの開閉状態を URL で管理することで、状態を復元したり、状態を共有できるなどのメリットがあります。この記事では、Next.js を例に URL でモーダルの開閉状態を管理する方法を紹介します。]]></description>
        <pubDate>Sun, 24 Sep 2023 07:38:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Bun の Web フレームワーク ElysiaJS のチュートリアル]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/elysiajs-tutorial]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/elysiajs-tutorial]]></guid>
        <description><![CDATA[ElysiaJS は Bun の Web フレームワークです。高いパフォーマンスと、シンプルな API や厳格な型チェックにより生産性に優れているという特徴があります。また柔軟性が高く、多くのプラグインを組み合わせて利用できます。この記事では、ElysiaJS を使って簡単なタスク管理アプリの Web API を作成してみます。]]></description>
        <pubDate>Sat, 16 Sep 2023 02:34:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Bun workspace で始めるモノレポ生活]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/bun-workspace]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/bun-workspace]]></guid>
        <description><![CDATA[Bun では `package.json` の `workspaces` を使用することでモノレポの管理が可能です。この記事では Bun によるモノレポを試してみます。]]></description>
        <pubDate>Fri, 15 Sep 2023 11:53:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Bun のマクロを使ってフィーチャートグルを実装する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/use-bun-macro-to-differentiate-new-features]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/use-bun-macro-to-differentiate-new-features]]></guid>
        <description><![CDATA[Bun にはマクロはビルド時に実行される関数です。関数が返す値がインラインにバンドルファイルに埋め込まれます。マクロには、実行してインライン化した後に、デッドコードを削除するという特徴があります。この機能を使ってフィーチャートグルを実装してみましょう。]]></description>
        <pubDate>Thu, 14 Sep 2023 11:50:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Bun の Plugins で CSV ファイルを直接 import する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/import-css-file-directly-in-bun-plugin]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/import-css-file-directly-in-bun-plugin]]></guid>
        <description><![CDATA[Bun の Plugins API を使用することで、任意の拡張子のファイルのサポートを追加できます。例えば Bun の公式の動画では、Plugins API を使用して Rust ファイル（.rs）を直接 import できる仕組みも作れることが紹介されています。]]></description>
        <pubDate>Wed, 13 Sep 2023 12:11:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[OpenTelemetry Collector の Connector を使ってログをメトリックに変換する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/convert-logs-to-metrics-with-opentelemetry-collector-connector]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/convert-logs-to-metrics-with-opentelemetry-collector-connector]]></guid>
        <description><![CDATA[OpenTelemetry には、メトリック、トレース、ログの 3 つの形式があります。これらの形式はそれぞれ別のパイプラインで処理されます。ある形式のデータを別の形式に変換し、あたかも 1 つのパイプライン上でデータを処理したい場合に Connector を使用します。例えば、あるパイプラインはログのパイプラインのエクスポーターとメトリックのパイプラインのレシーバーとして動作します。このような場合、Connector はログをメトリックに変換する役割を担います。]]></description>
        <pubDate>Sat, 09 Sep 2023 03:51:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[最小限のコードで動く最も汚いコードから始める]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/start-with-the-ugliest-code-that-works]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/start-with-the-ugliest-code-that-works]]></guid>
        <description><![CDATA[コードを書く際の重要な要点は、読みやすく他人に理解される「良いコード」を書くことです。しかし、完璧を目指して最初から書こうとすると行き詰まります。代わりに、荒削りながらも動くコードを作成し、徐々にリファクタリングして完成度を高めます。型エラーやリントエラーを無視しても構わないので、まずは動くものを作成しましょう。それからリファクタリングして「良いコード」を作成できます。]]></description>
        <pubDate>Sat, 02 Sep 2023 23:57:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[OpenTelemetry を使用して Node.js アプリケーションを計装する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/instrumenting-Node-js-applications-with-open-telemetry]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/instrumenting-Node-js-applications-with-open-telemetry]]></guid>
        <description><![CDATA[OpenTelemetry は Observability のフレームワークであり、トレース・メトリクス・ログなどのテレメトリーデータを作成、管理するためのツールキットです。OpenTelemetry はベンダーに依存しない形で標準化されたプロトコルとツールを提供していることが特徴です。この記事では Node.js アプリケーションを計装して Prometheus にデータを送信する方法を紹介します。]]></description>
        <pubDate>Sat, 26 Aug 2023 08:38:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[await は Promise 以外のオブジェクトでも値を取り出せる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/await-is-not-only-for-promise]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/await-is-not-only-for-promise]]></guid>
        <description><![CDATA[await キーワードは `then()` という名前のメソッドを持つオブジェクトに対して使用できます。このようなオブジェクトを thenable object と呼びます。await キーワードが Promise オブジェクトではなく thenable オブジェクトを対象としているのは、ライブラリの相互運用のためです。]]></description>
        <pubDate>Sun, 20 Aug 2023 08:41:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[【React】メモ化したコンポーネントに children を渡すと効果がなくなる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/react-memoized-component-children]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/react-memoized-component-children]]></guid>
        <description><![CDATA[React.memo は Props が変更されないかぎり、コンポーネントを再レンダリングしないようにする関数です。この関数はコンポーネントの余分なレンダリングを防ぎ、パフォーマンスを向上させる目的で使用されます。しかし、React.memo の使い方を誤ると意図しない再レンダリングが発生してしまうことがあります。ここではメモ化したコンポーネントに children を渡すと効果がなくなるというケースについて説明します。]]></description>
        <pubDate>Sun, 13 Aug 2023 04:25:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[アニメーションの無効設定は prefers-reduced-motion に任せるか、アプリケーションの設定で制御するか]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/prefers-reduced-motion-or-application-settings]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/prefers-reduced-motion-or-application-settings]]></guid>
        <description><![CDATA[prefers-reduced-motion とは、ユーザーの環境設定によって余計な動きを抑制することを要求したことを検出するメディアクエリです。この設定は各 OS ごとに設定できます。ユーザーがアニメーションを無効にできることは、アクセシビリティの観点で重要です。prefers-reduced-motion によりアニメーションを無効にするのでも十分ですが、アプリケーションの設定として持たせるべきだと考えています。]]></description>
        <pubDate>Sun, 06 Aug 2023 05:25:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[【書評】RustとWebAssemblyによるゲーム開発は Rust 開発における設計を学べる良書]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/rust-wasm-game-dev-book]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/rust-wasm-game-dev-book]]></guid>
        <description><![CDATA[本のタイトルは「Rust と WebAssembly によるゲーム開発」となっていますが、反して WebAssembly についての話題はほとんど出てきません。主に Rust における開発の設計についての話題が中心となっています。]]></description>
        <pubDate>Sun, 30 Jul 2023 13:39:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[グラフのアクセシビリティについて考える]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/graph-accessibility]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/graph-accessibility]]></guid>
        <description><![CDATA[`<canvas>` や `<svg>` 要素で描画されたグラフは、スクリーンリーダーを使用するユーザーにとって内容を正しく理解することが難しいです。この記事では、グラフの内容をスクリーンリーダーを使用するユーザーに伝える方法について考えてみます。]]></description>
        <pubDate>Sat, 29 Jul 2023 08:19:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[React.memo でメモ化したコンポーネントはモック関数が使えない]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/react-memo-mocked-component-cannot-use-mock-function]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/react-memo-mocked-component-cannot-use-mock-function]]></guid>
        <description><![CDATA[テストにおいて子コンポーネントをモックしたい場合には通常のテストと同様に jest.mock() を使います。しかし、React.memo() でメモ化したコンポーネントはモック自体には成功するものの、mockImplementation のようなモック関数が使えません。]]></description>
        <pubDate>Sat, 22 Jul 2023 12:15:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Document Picture in Picture で任意の要素を Picture in Picture する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/document-picture-in-picuture-any-element]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/document-picture-in-picuture-any-element]]></guid>
        <description><![CDATA[Document Picture-in-Picture は、`<video>` 要素に限らず任意の要素を PiP できるようにする提案です。これにより、動画以外の要素を PiP できるようになります。主なユースケースとして、カスタムのメディア・コントロールを使用したり、プレイリストとともに動画を PiP することが挙げられます。]]></description>
        <pubDate>Sun, 16 Jul 2023 05:38:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[スナップショットテストとアサーションテスト]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/snapshot-test-vs-assertion-test]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/snapshot-test-vs-assertion-test]]></guid>
        <description><![CDATA[この記事では、スナップショットテストとアサーションテストの違いを説明します。また、それぞれのアプローチでテストを書いたときのメリットとデメリットを見ていき、どちらのアプローチを採用すべきか考えていきます。]]></description>
        <pubDate>Sat, 08 Jul 2023 06:10:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[pnpm でパッケージにパッチを当てる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/pnpm-patch]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/pnpm-patch]]></guid>
        <description><![CDATA[`pnpm patch` コマンドを使うと、依存パッケージのコードを直接書き換えることができます。]]></description>
        <pubDate>Sat, 01 Jul 2023 05:37:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[aria-label を使いすぎない]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/do-not-use-aria-label-too-much]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/do-not-use-aria-label-too-much]]></guid>
        <description><![CDATA[aria-label 属性はコンテンツに対してアクセシブルな名前を与えるために使用します。aria-label 属性を使用する代表例として、中身がアイコンのボタンがあげられます。aria-label 属性は手軽に使えますが、できる限り一般的な形式でテキストを提供することが望ましいです。]]></description>
        <pubDate>Sun, 25 Jun 2023 04:17:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[スクリーンリーダーに配慮したテキスト表記]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/screen-reader-friendly-text-notation]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/screen-reader-friendly-text-notation]]></guid>
        <description><![CDATA[文字を機械的に判断するスクリーンリーダーでは、人間の目によって判断できる文字について異なる解釈をするおそれがあります。そのような場合、利用者に正しい文章の意図を伝えられません。スクリーンリーダーに配慮したテキストの表記法を紹介します。]]></description>
        <pubDate>Sun, 18 Jun 2023 03:15:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[ポップオーバー API で JavaScript を使わずにポップアップを表示する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/popover-api]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/popover-api]]></guid>
        <description><![CDATA[Chrome 114 から追加されたポップオーバー API を使うと、JavaScript を使わずに簡単にポップアップを表示することができます。]]></description>
        <pubDate>Sun, 11 Jun 2023 05:12:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Vue.js でジェネリックコンポーネントを使う]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/vue-generic-component]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/vue-generic-component]]></guid>
        <description><![CDATA[Vue.js 3.3 から `<script setup>` 構文を使用してコンポーネントを記述する際に、型引数を指定することができるようになりました。TypeScript で関数に型引数を指定するのと同じように、コンポーネントの props の型を指定することができます。]]></description>
        <pubDate>Sun, 04 Jun 2023 05:16:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[GIF アニメーションの使用を控える]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/avoid-using-gif-animation]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/avoid-using-gif-animation]]></guid>
        <description><![CDATA[技術記事を書く際に、GIF アニメーションを使用することがあるかと思います。しかし、GIF アニメーションを使用することはアクセシビリティ上問題となります。この記事では、GIF アニメーションを使用することを避けるべき理由を説明します。]]></description>
        <pubDate>Sun, 28 May 2023 05:34:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[list-style: none スタイルを指定した ul 要素には list ロールを指定すべき]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/list-style-none-styled-ul-element-should-have-a-list-role]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/list-style-none-styled-ul-element-should-have-a-list-role]]></guid>
        <description><![CDATA[WAI-ARIA における role 属性を使用する際のプラクティスとして、暗黙のロールを明示しないというものがあります。しかし、`<ul>` 要素は暗黙のロールとして `list` ロールを持っていますが、明示的に `list` ロールを宣言するべきです。]]></description>
        <pubDate>Sun, 21 May 2023 05:13:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Vitest のブラウザテスト]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/vitest-browser-test]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/vitest-browser-test]]></guid>
        <description><![CDATA[Vitest は実験的な機能として、ブラウザモードをサポートしています。ブラウザテストは Node.js 上で jsdom を用いてテストを実効するよりも信頼性の高い方法ですが、テストのセットアップに時間がかかるといったデメリットも存在します。]]></description>
        <pubDate>Sun, 14 May 2023 05:04:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Next.js の Server Actions について]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/nextjs-server-action]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/nextjs-server-action]]></guid>
        <description><![CDATA[Next.js の Server Actions はサーバーサイドのデータのミューテーション、クライアント JavaScript の削減、プログレッシブエンハンスメントなフォームを実現します。]]></description>
        <pubDate>Sat, 06 May 2023 05:13:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[SvelteKit のフォーム操作]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/sveltekit-form-action]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/sveltekit-form-action]]></guid>
        <description><![CDATA[SvelteKit のフォームは Web 標準の機能のみで完結しています。つまり、クライアントサイドでは JavaScript を一切使用せずにサーバーにデータを送信できるのです。さらに、JavaScript を利用できる環境であるならばリッチなユーザー体験を追加できます。例えば、フォームを送信した後ページ全体の再読み込みを行わずに、フォームの送信結果を表示することができたり、バリデーションメッセージを即座に表示できたりします。]]></description>
        <pubDate>Sun, 30 Apr 2023 04:59:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Array.prototype.with() とは]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/what-is-array-prototype-with]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/what-is-array-prototype-with]]></guid>
        <description><![CDATA[`Array.prototype.with()` は、非破壊的に配列の要素を置き換えるためのメソッドです。非破壊的とは、元の配列を変更せずに新しい配列を返すということです。`arr` に対して `with()` を実行しても、`arr` は変更されず、新しい配列のコピーが返されます。]]></description>
        <pubDate>Sun, 23 Apr 2023 03:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Tailwind CSS のダークモードで System, Light, Dark を切り替える]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/tailwind-css-dark-mode-system-light-dark]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/tailwind-css-dark-mode-system-light-dark]]></guid>
        <description><![CDATA[ダークモードの設定では、OS の設定と同期させるか、ライトモードまたはダークモードに手動で切り替えるかの 3 つの選択肢が用意されていることがあります。手動でライトモードとダークモードを切り替える場合に比べて、OS の設定を自動で反映できるメリットがあります。]]></description>
        <pubDate>Sun, 16 Apr 2023 01:49:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Next.js の Interception Routes について]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/nextjs-interception-routes]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/nextjs-interception-routes]]></guid>
        <description><![CDATA[Intercepting routes は Next.js 13.3 から追加された機能で、App Router（app ディレクトリ）において使用できます。Intercepting routes ではブラウザの URL を遷移先のものに上書きしつつ、現在のレイアウトに新しいページを表示できます。これは例えば Instagram のように、ユーザーのプロフィールから写真をクリックすると、写真をモーダルを開き、ページを更新したり共通したりするとデフォルトのレイアウトで表示する場合などに便利です。]]></description>
        <pubDate>Sun, 09 Apr 2023 04:38:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Cloudflare Workers のためのフルスタックツールキット Superflare を試してみた]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/tried-superflare-a-full-stack-toolkit-for-cloudflare-workers]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/tried-superflare-a-full-stack-toolkit-for-cloudflare-workers]]></guid>
        <description><![CDATA[Superflare は Cloudflare Workers 用のフルスタックツールキットです。D1 Database 向けの ORM や R2 Storage 向けのユーティリティなどの機能を提供しています。Superflare 自体はフレームワークを謳っておりません。実際に、Superflare は Remix、Next.js、Nuxt.js などのフレームワークと組み合わせることで効果を発揮します。]]></description>
        <pubDate>Sun, 02 Apr 2023 02:23:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[HTML の仕様に search 要素が追加された]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/the-search-element-has-been-added-to-the-html-specification]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/the-search-element-has-been-added-to-the-html-specification]]></guid>
        <description><![CDATA[HTML Standardに新しい`<search>`要素が追加された。これまで、ARIAには`<search>`に相当するHTML要素がなかったため、`<div role="search">`しか代替要素がなかった。新たに`<search>`要素を使用することにより、WAI-ARIA を使用せずともsearchランドマークを定義できるようになった。通常、`<search>`要素は少なくとも1つの入力要素を含んでおり、検索を開始するためのボタンもあることが期待されている。]]></description>
        <pubDate>Sun, 26 Mar 2023 07:50:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[ChatGPT3 で出力の形式を固定したい場合には例を提示してあげるとよさそう]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/it-may-be-helpful-to-provide-an-example-when-you-want-to-fix-the-output-format-in-chatgpt3]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/it-may-be-helpful-to-provide-an-example-when-you-want-to-fix-the-output-format-in-chatgpt3]]></guid>
        <description><![CDATA[ChatGPT は毎回異なる出力を返すことがあるため、APIやアプリ開発にとって不都合が生じる。そこで、出力の例を提示することで固定した形式の回答を得やすくすることができる。提示するためのプロンプトは区切り文字を使用して区切ることが推奨され、回答は通常、「例」に基づいた形式で得られる。]]></description>
        <pubDate>Sun, 19 Mar 2023 04:13:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[TypeScript で網羅性をチェックする]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/exhaustive-checks-in-typescript]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/exhaustive-checks-in-typescript]]></guid>
        <description><![CDATA[パターンマッチを備えている言語では、コンパイル時に網羅性が検査され、網羅的でない場合にはコンパイルエラーとなります。例えば Rust では match 式は網羅性を検査します。列挙型が取りうる値をすべて網羅していない場合にはコンパイルエラーとなります。TypeScript にはパターンマッチがないため、網羅性の検査は行われません。ですが、TypeScript では `never` 型を利用することで網羅性の検査を行うことができます。]]></description>
        <pubDate>Sat, 11 Mar 2023 05:37:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[SvelteKit で環境変数を使う]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/using-environment-variables-with-sveltekit]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/using-environment-variables-with-sveltekit]]></guid>
        <description><![CDATA[SvelteKit プロジェクトは Vite を使用しているので、`import.meta.env` から環境変数を参照できます。単に環境変数を参照するだけならば十分です。ですが SvelteKit により提供されている環境変数の仕組みを使用すると、型安全に環境変数を参照できる、公開してはいけない値をクライアントから参照できなくなるなどのメリットを得られます。]]></description>
        <pubDate>Sat, 04 Mar 2023 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[React は javascript スキームを使った XSS を防ぐことができない]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/react-javascript-xss]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/react-javascript-xss]]></guid>
        <description><![CDATA[React を使用していた場合に引き起こす可能性がある XSS 脆弱性の例として、javascript スキームを使った XSS があります。この記事では、javascript スキームを使った XSS についての説明とその対策について紹介します。]]></description>
        <pubDate>Sat, 25 Feb 2023 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[TypeScript + ESModules の開発環境をシュッと作る]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/typescript-esmodules]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/typescript-esmodules]]></guid>
        <description><![CDATA[ほぼ設定なしで TypeScript + ESModules の開発環境をシュッと作る時のレシピです。]]></description>
        <pubDate>Sat, 18 Feb 2023 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Web アプリケーションエンジニアのためのウェブアクセシビリティの基礎]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/web-accessibility-basics-every-web-application-engineer-needs-to-know]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/web-accessibility-basics-every-web-application-engineer-needs-to-know]]></guid>
        <description><![CDATA[ウェブアプリケーションエンジニアを対象に、アクセシビリティの対応について解説した記事。アクセシビリティを向上させるためには、正しいHTMLの書き方が必要である。HTML要素には、アクセシビリティに関する機能が元々備わっているため、適切なHTMLを選択し使用することが大切だ。複雑なUIの場合はWAI-ARIAを使用し、ARIA Authoring Practices Guideに基づき適切に実装する必要がある。UIライブラリ選びの際には、WAI-ARIAに従った実装を行っているかが基準の1つとなる。]]></description>
        <pubDate>Sat, 18 Feb 2023 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[React Hook Form で Zod を使う時の 5 つパターン]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/react-hook-form-zod-5-patterns]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/react-hook-form-zod-5-patterns]]></guid>
        <description><![CDATA[React Hook Form で Zod を使用する時によくあるバリデーションのパターンを 5 つ紹介します]]></description>
        <pubDate>Sat, 11 Feb 2023 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[SvelteKit でページ遷移時のプログレスバーを表示する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/sveltekit-navigate-progressbar]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/sveltekit-navigate-progressbar]]></guid>
        <description><![CDATA[SPA で画面遷移をする場合、MPA の場合と違い、ブラウザがローディングの表示を行ってくれません。リンクをクリックしてから画面遷移が完了するまで何も表示されないので、ユーザーからすると何も反応していないように感じてしまいます。 SPA で画面遷移した時にプログレスバーを表示したい場合には NProgress が最適です。コンパクトな JavaScript ライブラリでフレームワークを選ばず利用できます。この記事では SvelteKit で NProgress を使用する方法を紹介します。]]></description>
        <pubDate>Sun, 05 Feb 2023 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[アクセシビリティに考慮したツールチップを実装する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/accessible-tooltip]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/accessible-tooltip]]></guid>
        <description><![CDATA[ツールチップとは、ある要素に対する補足情報を与える UI です。通常ある要素に対してマウスホバーまたはキーボードでフォーカスした時少しのディレイの後に、ユーザーの操作によらず自動的にポップアップして表示されます。このポップアップはユーザーの操作をブロッキングするものではありません。ユーザーがマウスのホバー外すかフォーカスが外れた場合にツールチップは非表示となります。]]></description>
        <pubDate>Sat, 04 Feb 2023 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[focus() メソッドで CSS の :focus-visible 擬似クラスが適用されるかどうかは最後の操作によって異なる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/focus-css-focus-visible]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/focus-css-focus-visible]]></guid>
        <description><![CDATA[:focus-visible 擬似クラスはユーザーの入力方法によって異なるフォーカス表示をしたい時に便利です。この擬似クラスはキーボード操作によりフォーカスされた場合に適用されますが、マウス操作によりフォーカスした場合には適用されません。  それでは、JavaScript の focus()メソッドによりフォーカスされた場合には、`:focus-visible` 擬似クラスは適用されるのでしょうか？実はこれは最後 `focus()` メソッドが呼ばれる前に要素にフォーカスがあったかどうかにより異なります。]]></description>
        <pubDate>Sat, 28 Jan 2023 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[テストコード内では条件分岐を書かないようにする]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/avoid-writing-conditional-branches-in-the–test-code]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/avoid-writing-conditional-branches-in-the–test-code]]></guid>
        <description><![CDATA[誰でも読める愚直なコードであることの 1 つの目安として、テストコードの中に if 文や三項演算子などの条件分岐が入り込んでいていないことが上げられます。if 文が存在するコードはアンチパターンであるといえます。実際に if 文がテストコードの中に入り込んだ例を見てみましょう。]]></description>
        <pubDate>Sat, 21 Jan 2023 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[無効にしたボタンにフォーカスさせたいときには aria-disabled を使う]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/use-aria-disabled-to-give-focus-to-disabled-button]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/use-aria-disabled-to-give-focus-to-disabled-button]]></guid>
        <description><![CDATA[例えばフォームの項目になにか入力されるまで、送信ボタンを無効にしたい状況があるかと思います。このような場合には `<button>` に `disabled` 属性を与えることでフォームの送信を無効にできます。`disabled` 属性はデフォルトでコントロールを無効にする一般的に期待されるすべての機能を提供するため、多くの場合はこの属性を使用するべきです。しかし `disabled` 属性には 1 つ問題点が存在します。それは Tab キーによるフォーカスができなくなるという点です。]]></description>
        <pubDate>Sat, 14 Jan 2023 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[単体テストの単位はコードではなく振る舞いである]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/the-unit-of-unit-testing-is-behavior-not-code]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/the-unit-of-unit-testing-is-behavior-not-code]]></guid>
        <description><![CDATA[単体テストの目的は、ソフトウェア開発プロジェクトを持続可能なものにすることです。この目的を達成するための単体テストの機能の 1 つにリファクタリングに対する耐性が上げられます。これは内部のコードを変更した前後でも、外部の振る舞いから見た振る舞いが壊れていないことを保証してくれる度合いです。この耐性が高ければ、開発者は安全にコードを変更できます。  この記事では、単体テストをコード単位で書いた場合と振る舞い単位で書いた場合をそれぞれ提示して、リファクタリングに対する耐性がどのように異なるのかを見ていきます。]]></description>
        <pubDate>Sat, 07 Jan 2023 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[今すぐできる Web アクセシビリティ改善]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/accessibility-improvements-you-can-make-now]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/accessibility-improvements-you-can-make-now]]></guid>
        <description><![CDATA[アクセシビリティの対応は、要件定義段階から設計したりなど大変そうなイメージはあります。実際に本格的に対応するにはどの達成基準を目標にするか決めたり、入念なテストが必要になるなど確かに一朝一夕で対応できるわけではないでしょう。  ですが、完璧な対応を目指すのではなく、少しづづ改善できるところから進めることこともできます。実際にやってみると、簡単な HTML や CSS のコードの修正でもよい改善を得られたりします。  この記事では比較的低コストで実践入門できるアクセシビリティの改善を紹介します。]]></description>
        <pubDate>Fri, 30 Dec 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Web フロントエンドの実装において本来の機能を損なってはいけない]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/do-not-compromise-html-functionality-in-your-web-front-end-implementation]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/do-not-compromise-html-functionality-in-your-web-front-end-implementation]]></guid>
        <description><![CDATA[データの取得・ルーティング・フォームの値の管理に至るまで JavaScript で制御するようになった結果、本来備わっていた機能を損なう形で実装されるような間違いが起きるケースも発生してしまいました。見た目上操作に不都合がないのですが、修飾キーが有効でなかったりと、とある要素が当然に持っているべき機能が失われていることがよくあります。]]></description>
        <pubDate>Sat, 24 Dec 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Satori + SvelteKit で OGP 画像を自動生成する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/satori-sveltekit-ogp-image]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/satori-sveltekit-ogp-image]]></guid>
        <description><![CDATA[Satori とは Vercel が公開している OGP 画像生成ライブラリです。OGP 画像を表示したい場合、記事ごとに対応する OGP 画像が必要になるわけで、新しい記事を投稿するたびに新たな画像を生成しなければいけません。都度画像を生成する手間は取れないわけで、このOGP 画像を生成する工程を自動化する仕組みが必要となります。Satori は記事のタイトルなどをもとに動的 OGP 画像を生成するユースケースのために使用できます。]]></description>
        <pubDate>Sat, 17 Dec 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[TailwindCSS のダークモードでページ読み込み時に一瞬ライトモードで表示されてしまうときの対応法]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/what-to-do-when-tailwindcss-is-momentarily-displayed-in-light-mode-in-dark-mode]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/what-to-do-when-tailwindcss-is-momentarily-displayed-in-light-mode-in-dark-mode]]></guid>
        <description><![CDATA[ユーザーの OS の設定や LocalStorage の値をもとにダークモードかどうか判定する場合、コンテンツが読み込まれる前にスクリプトの実行が完了している必要があります。]]></description>
        <pubDate>Sat, 10 Dec 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Pa11y CI でアクセシビリティテストを GitHub Actions で実行する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/pa11y-ci-githubactions]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/pa11y-ci-githubactions]]></guid>
        <description><![CDATA[Pa11y とは Web Content Accessibility Guidelines (WCAG) をベースに HTML のアクセシビリティを検査するツールです。適合レベル AA を対象にテストします。Pa11y にはいくつかの種類がありますが、その中でも Pa11y CI は CI 上で実行することにフォーカスしています。]]></description>
        <pubDate>Sat, 03 Dec 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[モノレポで GitHub Actions の jest coverage report を動かす]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/monorepo-github-actions-jest-coverage-report-action]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/monorepo-github-actions-jest-coverage-report-action]]></guid>
        <description><![CDATA[jest coverage reportは GitHuba Actions のワークフローの1つで Jest で実行したテストのコードカバレッジをプルリクエスト上にコメントしてくれます。  この記事では yarn workspaces 使用して作成したモノレポ構築のレポジトリで jest coverage report を動かしてみます。]]></description>
        <pubDate>Sat, 26 Nov 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[TypeScript 4.9 で in 演算子による型の絞り込みが改善された]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/typescript-4-9-in]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/typescript-4-9-in]]></guid>
        <description><![CDATA[TypeScript において `in` 演算子を `unknown` 型に対して使用した際の挙動が改善されました。]]></description>
        <pubDate>Sat, 19 Nov 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[React Router の defer で重要なデータを先に描画する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/react-router-defer]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/react-router-defer]]></guid>
        <description><![CDATA[あるページの中で重要ではない付随的なデータの取得を待たずに、重要なデータの取得が完了したタイミングでページを表示させたい場合があります。例えば、ブログの記事のページを遷移する場合、ユーザーにとって記事のコンテンツは重要なデータですが、それに付随するコメントやいいねの数はそれほど重要ではないので、それらのデータの取得を待つ必要がありません。  この記事では React Router の loaderを使用して重要なデータの完了のみを待機する方法を試してみます。]]></description>
        <pubDate>Fri, 11 Nov 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[【React】アクセシビリティに考慮したタブを実装する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/react-accessible-tab]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/react-accessible-tab]]></guid>
        <description><![CDATA[タブとは、ページ内でコンテンツを切り替えるために使用する UI です。タブ初期表示ではいずれか一つのタブパネルが表示されており、関連するタブがアクティブなスタイルで表示されます。それぞれのタブには関連するタブパネルがあり、タブを選択することで表示されるタブパネルがタブに関連するものに切り替わります。]]></description>
        <pubDate>Sat, 05 Nov 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[【React】アクセシビリティに考慮したアコーディオンを実装する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/react-accessible-accordion]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/react-accessible-accordion]]></guid>
        <description><![CDATA[アコーディオンは見出しであるヘッダーとコンテンツであるパネルから構成された UI が垂直に積み重ねられたセットです。ユーザーはヘッダーをクリックすることで、ヘッダーに関連付けられたパネルの表示・非表示を切り替えることができます。  アコーディオンは1つのページ内で複数のセクションのコンテンツを表示する際に、スクロールを減らすためによく　使用されます。例えば、「よくある質問」のようなページで使われていることを見たことがあるかと思います]]></description>
        <pubDate>Fri, 28 Oct 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[【React】アクセシビリティに考慮したリストボックスを実装する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/Implement-accessibil-listbox-in-react]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/Implement-accessibil-listbox-in-react]]></guid>
        <description><![CDATA[リストボックスにアクセシビリティ上求められる要件を確認した後に、React で実際に要件に従った実装をおこないます。]]></description>
        <pubDate>Sat, 22 Oct 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Qwik City でブログアプリを作る]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/qwik-city-blog-app]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/qwik-city-blog-app]]></guid>
        <description><![CDATA[Qwik City は Qwik のメタフレームワークです。React における Next.js、Vue.js における Nuxt.js のような関係と同等です。]]></description>
        <pubDate>Sat, 15 Oct 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[イベントのバブリングは DOM ツリーではなく React ツリーに従う]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/event-bubbling-follows-the-react-tree-not-the-dom-tree]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/event-bubbling-follows-the-react-tree-not-the-dom-tree]]></guid>
        <description><![CDATA[イベントのバブリングとは、ある要素で発生したイベントがその親要素まで伝播することです。React でポータルを使用した場合、DOM ツリー状親子関係でなかったとしても、React ツリー上親子関係であればイベントがバブリングされます。]]></description>
        <pubDate>Sat, 08 Oct 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[【React】state のリフトダウンパターン]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/react-state]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/react-state]]></guid>
        <description><![CDATA[React において不要な再レンダリングを避けるためのいくつかのパターンを紹介します]]></description>
        <pubDate>Sat, 01 Oct 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Jest で beforeunload イベントをテストする]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/jest-beforeunload]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/jest-beforeunload]]></guid>
        <description><![CDATA[beforeunload イベントをテストする方法を紹介します]]></description>
        <pubDate>Sat, 24 Sep 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[CSS 擬似クラス「:focus-within」]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/css-pseudo-class-focus-within]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/css-pseudo-class-focus-within]]></guid>
        <description><![CDATA[:focus-within は CSS の擬似クラスであり、その要素または子孫要素にフォーカスがある場合に一致します。]]></description>
        <pubDate>Sat, 17 Sep 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[アクセシブルなダイアログに必要なこと]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/dialog-accessibility]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/dialog-accessibility]]></guid>
        <description><![CDATA[ダイアログをアクセシビルに実装するための要件を確認しましょう。]]></description>
        <pubDate>Sat, 10 Sep 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Sanitizer API で HTML を安全に使用する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/sanitizer-api-html]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/sanitizer-api-html]]></guid>
        <description><![CDATA[ユーザーが入力した情報をそのまま表示するとクロスサイトスクリプティング（XSS）脆弱性につながる問題があることはよく知られています文字列の無害化はこのようにライブラリの実装に頼っている状況でしたが、WING により Sanitizer API という仕様が策定されました。Sanitizer API により外部ライブラリの依存無しで XSS の対策が可能となります。]]></description>
        <pubDate>Sat, 03 Sep 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Hono + Cloudflare Workers で REST API を作ってみよう]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/hono-cloudflare-workers-rest-api]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/hono-cloudflare-workers-rest-api]]></guid>
        <description><![CDATA[Hono は TypeScript/JavaScript のシンプルな Web フレームワークです。Hono という名前は日本語の「炎」に由来します。  Hono の特徴としては以下の点が挙げられています。  - ウルトラファスト - 依存関係なし - ミドルウェア - TypeScript - マルチプラットフォーム]]></description>
        <pubDate>Sat, 27 Aug 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Fetch Upload Streaming でチャットアプリを作ってみる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/fetch-upload-streaming]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/fetch-upload-streaming]]></guid>
        <description><![CDATA[Fetch Upload Streaming とは、ブラウザの JavaScript の POST リクエストで HTTP のストリーミングを行える機能です。より具体的には、Fetch API の `body` に ReadableStream を渡せるようになります。]]></description>
        <pubDate>Sat, 20 Aug 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[AngularJS のチュートリアルを React にリプレイスしてみた③]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/angularjs-react-3]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/angularjs-react-3]]></guid>
        <description><![CDATA[それではいよいよ、AnguarJS のルーティングモジュールである `ngRoute` を置き換えましょう。この置き換えが完了したら AngularJS を完全に取り除くことができます。]]></description>
        <pubDate>Sat, 13 Aug 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[AngularJS のチュートリアルを React にリプレイスしてみた②]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/angularjs-react-2]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/angularjs-react-2]]></guid>
        <description><![CDATA[AngularJS のチュートリアルを React にリプレイスします。今回の記事では AngularJS のコンポーネントをすべてリプレイスして、angular-resorce の代わりに API クライアントを実装します。]]></description>
        <pubDate>Sat, 06 Aug 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[AngularJS のチュートリアルを React にリプレイスしてみた①]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/angularjs-react]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/angularjs-react]]></guid>
        <description><![CDATA[AngularJS のチュートリアルを React にリプレイスします。]]></description>
        <pubDate>Sat, 30 Jul 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[pnpm は npm と何が違うのか]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/pnpm-npm]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/pnpm-npm]]></guid>
        <description><![CDATA[pnpm は npm、yarn と並ぶ JavaScript のパッケージマネージャーです。pnpm と言う名前は「performant npm」に由来します。]]></description>
        <pubDate>Sat, 23 Jul 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[MSW の実践活用例]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/examples-of-msw-practice-Applications]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/examples-of-msw-practice-Applications]]></guid>
        <description><![CDATA[msw の実践で活用する例を紹介します]]></description>
        <pubDate>Sat, 16 Jul 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Volar で Vuetify2.x  の補完を効かせる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/volar-vuetify2-x]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/volar-vuetify2-x]]></guid>
        <description><![CDATA[Volar + Vuetify 2.x を利用する場合、型定義ファイルを作成してグローバルコンポーネントを定義する必要があります。]]></description>
        <pubDate>Sat, 09 Jul 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[【TypeScript】Zod でスキーマ宣言とバリデーションを実施する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/schema-declaration-and-validation-in-zod]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/schema-declaration-and-validation-in-zod]]></guid>
        <description><![CDATA[[Zod](https://github.com/colinhacks/zod) は TypeScript first でスキーマ宣言とバリデーションを実施するためのライブラリです。  一度バリデータを宣言すれば、Zod が自動的に TypeScript の型を推論してくれるという特徴があります。このおかげで重複した型宣言を排除できます。  また、Zod はエコシステムも多く存在しており、OpenApi、Nest.js、Prisma、react-hook-form などと組み合わせて使うことができます。]]></description>
        <pubDate>Sat, 02 Jul 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[おまえら禁じられたインデックスアクセスを平気で使ってんじゃねえか！わかってんのか？『ランタイムエラー』が生まれたのは人間がコンパイラオプションに甘えたせいだろうがよ！]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/typescript-no-unchecked-indexed-access]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/typescript-no-unchecked-indexed-access]]></guid>
        <description><![CDATA[TypeScript 4.1 から noUncheckedIndexedAccess オプションが追加されました。このオプションは上記のような配列のアクセスやオブジェクトのプロパティのアクセスをより厳密にします。  具体的には、配列に対するインデックスアクセスやインデックスシグネチャを通じたプロパティのアクセスは常に `undefined` とのユニオン型となります。]]></description>
        <pubDate>Sat, 25 Jun 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Deno Web フレームワーク Fresh チュートリアル]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/fresh-tutorial]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/fresh-tutorial]]></guid>
        <description><![CDATA[Fresh は Deno 製の Web フレームワークです。事前のビルドを必要せず、エッジでレンダリングを提供するという特徴があります。また、Islands Architecture を採用しており、デフォルトではクライアントに JavaScript が配信されることがありません。]]></description>
        <pubDate>Sat, 18 Jun 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Atomic CSS エンジン - UnoCSS]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/atomic-css-engine-unocss]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/atomic-css-engine-unocss]]></guid>
        <description><![CDATA[UnoCSS はフレームワークではなく、Atomic CSS エンジンです。全ては柔軟性とパフォーマンスを考慮して設計されています。UnoCSS にはコアユーティリティはなく、すべての機能はプリセットで提供されます。]]></description>
        <pubDate>Fri, 10 Jun 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Vue 向けの Vite 製の UI コンポーネントカタログツール Histoire]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/histoire-a-ui-component-cataloging-tool-from-Vite]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/histoire-a-ui-component-cataloging-tool-from-Vite]]></guid>
        <description><![CDATA[Histoireはフランス語で「Story」という意味の単語であり、Storybook のように UI コンポーネントのカタログを作成するツールです。Vite にネイティブ対応、Vue の SFC 形式で Story を書けるといった特徴があります。]]></description>
        <pubDate>Sat, 04 Jun 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Jest Preview がけっこーすごい]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/jest-preview]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/jest-preview]]></guid>
        <description><![CDATA[Jest Preview とは Jest で実行中のテストに debug() 関数を仕込むことで、実行中のテストが作成した HTML をブラウザでプレビューしながらデバッグできるライブラリです。]]></description>
        <pubDate>Sat, 28 May 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Playwright でコンポーネントテスト]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/playwright-component-testing]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/playwright-component-testing]]></guid>
        <description><![CDATA[Playwright は E2E テストのための Node.js フレームワークです。v1.22.0 から React,Vue.js,Svelte のコンポーネントに対してテストを実行できるようになりました。つまりもともと備えていた E2E レベルのテストに加えて、結合レベルのテストまでカバーできるようになったということです。]]></description>
        <pubDate>Sat, 21 May 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Tailwind CSS ベースの UI フレームワークという選択肢]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/tailwind-css-ui-library-option]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/tailwind-css-ui-library-option]]></guid>
        <description><![CDATA[この記事を読んでいるみなさんも、Vuetify や MUI のような UI フレームワークを使用したことがあるでしょう。これらの UI フレームワークは Web アプリケーションでよく使われる UI パーツを非常に高機能で提供しており、多大な工数の削減に貢献しています。  その一方で、細かなスタイルの調整に手間取り余分に時間を取られ苦労を経験している方も多いのではないでしょうか？]]></description>
        <pubDate>Sat, 14 May 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Node.js の標準 API にテストランナーが追加された]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/node-js-api]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/node-js-api]]></guid>
        <description><![CDATA[JavaScript のテストランナーといえば、Jest　がデファクトスタンダードと言えるでしょう。最近は Vitest と呼ばれる新たなテストランナーも登場していますが、しばらくは Jest が使われ続けられることでしょう。  そんな中、Node.js 18 から標準 API としてテストランナーが組み込まれました。まだ実験的な機能ではありますが、サードパーティのライブラリを使用せずに扱えることもあって注目を集めています。]]></description>
        <pubDate>Sat, 07 May 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Rust の魅力に感じた点]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/what-i-found-attractive-aboutr-rust]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/what-i-found-attractive-aboutr-rust]]></guid>
        <description><![CDATA[最近は [Rust](https://www.rust-lang.org/) と呼ばれるプログラミング言語を趣味として触っています。[SWC](https://swc.rs/) や [Rome](https://rome.tools/) のように Rust で作成されたフロントエンドツールが増えていることから興味を持ったのですが、実際に触ってみて Rust が高い人気を誇る理由がよく分かるようになりました。  この記事では私が Rust を触ってみて魅力に感じた点を列挙していきます。]]></description>
        <pubDate>Sat, 30 Apr 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[markuplint で構文チェックを始めよう]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/start-syntax-checking-with-markuplint]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/start-syntax-checking-with-markuplint]]></guid>
        <description><![CDATA[HTML の構文チェックを実施するには適切なツールを導入するのがよいでしょう。この記事では markuplint と呼ばれる HTML の静的解析ツールを紹介します。markuplint は JSX(React),Vue,Svlete のようなテンプレートエンジンにも対応しています。]]></description>
        <pubDate>Sat, 23 Apr 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Node.js のバージョン管理には Volta がよい]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/node-js-volta]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/node-js-volta]]></guid>
        <description><![CDATA[皆さん Node.js のバージョン管理ツールには何を使っておりますでしょうか？上記の中でも私がオススメするのは [volta](https://volta.sh/) です。volta は 1.0 がリリースされたのが2020年12月と比較的新しいツールです。]]></description>
        <pubDate>Sat, 16 Apr 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[npm workspace で始めるモノレポ生活]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/Starting--monorepol-with-npm-workspace]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/Starting--monorepol-with-npm-workspace]]></guid>
        <description><![CDATA[workspace は複数のパッケージ（`package.json`）をレポジトリを管理するために使用されます。このようなレポジトリは**モノレポ**として知られています。]]></description>
        <pubDate>Sat, 09 Apr 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[君は return と await return の違いを理解して使っているか]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/return-await-return]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/return-await-return]]></guid>
        <description><![CDATA[`Promise` を返す非同期関数を扱う時 `Promise` をそのまま返す書き方と `Promise` を `await` してから返す二通りの方法があります。これらは一見同じように動作するように見えますが異なる点が存在します。]]></description>
        <pubDate>Sat, 02 Apr 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[import type { ... } from "./module" とは何者何か]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/import-type-from-module]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/import-type-from-module]]></guid>
        <description><![CDATA[TypeScript のプロジェクトにおいて `import type { ... } from "./module"` という記述を見たことはないでしょうか？  これは Type-Only imports and export と呼ばれる機能で TypeScript3.8 より導入されました。これは名前の通りモジュールから型情報のみをインポートするために使用されます。これは通常の利用用途ではあまり考慮する必要はないのですが、特定の問題に立ち向かうために利用されることがあります。]]></description>
        <pubDate>Sat, 26 Mar 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[anonymous default export はやめたほうがいいかもね]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/anonymous-default-export]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/anonymous-default-export]]></guid>
        <description><![CDATA[`anonymous default export` とは名前の通り匿名でデフォルトエクスポートを宣言することです。必ず名前を付与しなければいけない名前付きエクスポートと異なり、以下はすべて有効な構文です。]]></description>
        <pubDate>Sat, 19 Mar 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[msw でリクエストを検証する方法]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/msw-request-assertions]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/msw-request-assertions]]></guid>
        <description><![CDATA[msw 使ってテストを記述した時期待したリクエストが送信されているのか検査したくなるかもしれません。リクエストを検証する方法と、それを回避する方法を紹介します。]]></description>
        <pubDate>Sat, 12 Mar 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Storybook 単体でインタラクションテストを実施する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/storybook-testing]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/storybook-testing]]></guid>
        <description><![CDATA[Storybook の Component Story Format 3.0 では新機能として play() 関数が追加されました。  `play()` 関数は Storybook 上で ユーザーのインタラクションな操作を表現することができます。  以前は composeStories() 関数により Storybook 上で作成したストーリーを Jest で再利用する方法を書いたのですが、どうやら Storybook のみで完結してテストを実行することができるようですのでこちらを試してみます。]]></description>
        <pubDate>Sat, 05 Mar 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Web フロントエンドエンジニアなら当然 Rust も書けますよね？？]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/web-rust]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/web-rust]]></guid>
        <description><![CDATA[本記事では Yew を利用して Web アプリケーションを作成してみたいと思います。Yew は React や Vue などと同じくコンポーネントベースのフレームワークでインタラクティブな UI を作成できます。]]></description>
        <pubDate>Sat, 26 Feb 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Q：v-for の key に 配列のインデックスを使うのは犯罪ですか？#Shorts]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/v-for-key-as-index]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/v-for-key-as-index]]></guid>
        <description><![CDATA[結論：  - `v-for` ディレクティブに渡す配列要素が決して変わらないことがわかっているのであれば使っても良い。 - `id` 属性を持っているのであれば常に `id` 属性を `key` に使用するべき。]]></description>
        <pubDate>Sat, 19 Feb 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Q：TypeScript の関数の返り値の型を明示的に書かないのは犯罪ですか？#Shorts]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/q-typescript-shorts]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/q-typescript-shorts]]></guid>
        <description><![CDATA[TypeScript において関数の返り値の型は推論させることは可能ですが、これはコードベース全体に意図しない型の変更による影響が広がる可能性があります。]]></description>
        <pubDate>Sat, 12 Feb 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Node.js に fetch がやってきた]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/node-js-fetch]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/node-js-fetch]]></guid>
        <description><![CDATA[Node.js で fetch が使えるようになる]]></description>
        <pubDate>Sat, 05 Feb 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[アクセシビリティを自動で検査する仕組みを整える]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/vue-a11y-testing]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/vue-a11y-testing]]></guid>
        <description><![CDATA[様々な方法でアクセシビリティを自動で検査します]]></description>
        <pubDate>Sat, 29 Jan 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Storybook の interaction testing と jest を組み合わせる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/compose-storybook-interaction-testing-jest]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/compose-storybook-interaction-testing-jest]]></guid>
        <description><![CDATA[Storybook の Component Story Format 3.0 では新機能として `play()` 関数が追加されました。  `play()` 関数は Storybook 上で ユーザーのクリックやフォーム入力のようなインタラクションな操作を表現することができます。  `play()` 関数の大きな特徴としては Component Story Format の移植性の高さを利用して Storybook 上で定義したインタラクションを `Jest` など他の領域においても再利用できることです。]]></description>
        <pubDate>Sat, 22 Jan 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Vite だと require() が使えないよ〜]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/vite-require]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/vite-require]]></guid>
        <description><![CDATA[皆様はすでにプロジェクトに Vite は導入されていらっしゃいますでしょうか？私はできていません。  Vite はフロントエンドのビルディングツールであり、従来の Webpack 等と比較して高速に動作するといった特徴があります。Vue.js を開発した Evan You 氏によって開発ツールではありますが Vue.js に限らず React や Svelte にも対応しています。]]></description>
        <pubDate>Sat, 15 Jan 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[フロントエンドのテストのモックには msw を使うのが最近の流行りらしい]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/using-msw-to-mock-front-end-tests-seems-to-be-the-latest-trend]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/using-msw-to-mock-front-end-tests-seems-to-be-the-latest-trend]]></guid>
        <description><![CDATA[最近のテスト手法として API コールをモックする際に Jest ではなく [Mock Service Worker](https://mswjs.io/) (以下 `msw` ）を使用する手法が注目されています。実施にどのように使用されているのか見ていきましょう。]]></description>
        <pubDate>Sat, 08 Jan 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[【Vue.js】ref vs reactive]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/vue-js-ref-vs-reactive]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/vue-js-ref-vs-reactive]]></guid>
        <description><![CDATA[さて、そんな Compositon API ですがリアクティブなデータを定義する際に `reactive` と `ref` の2つの方法が用意されています。 `reactive` と `ref` どちらを使用するのがよいのか公式からも推奨する方法がありませんので、どちらを使用するべきか迷ってしまうところです。  `reactive` と `ref` のそれぞれのメリット・デメリットを確認してみましょう。]]></description>
        <pubDate>Sat, 01 Jan 2022 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Vitest と呼ばれるテスティングフレームワークがめちゃくちゃ早いらしいな]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/testingframework-vitest]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/testingframework-vitest]]></guid>
        <description><![CDATA[Vitest は Vite ベースの JavaScript のテスティングフレームワークです。]]></description>
        <pubDate>Sat, 25 Dec 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Vuetify 3 Alpha の主な変更点]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/vuetify-3-alpha-mejar-changes]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/vuetify-3-alpha-mejar-changes]]></guid>
        <description><![CDATA[[Vuetify](https://vuetifyjs.com/) は Vue.js で多く使われている UI コンポーネントです。現在のバージョンは Vue 3 には対応していません。  現在 Vue 3 に対応する Alpha 版の Vuetify 3 が公開されています。開発スケジュールは以下のとおりになっています。]]></description>
        <pubDate>Sat, 18 Dec 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Nuxt3 の新しい機能いろいろ]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/nuxt3-new-features]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/nuxt3-new-features]]></guid>
        <description><![CDATA[現在 Nuxt.js は バージョン3がパブリックベータ版として提供されています。 Nuxt.js が 2 → 3 に移行するにあたってたくさんの新機能が追加されました。]]></description>
        <pubDate>Sat, 11 Dec 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[CSS で印刷用のスタイルを設定できる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/css-print-style]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/css-print-style]]></guid>
        <description><![CDATA[大抵のブラウザでは Web ページを印刷することができます。 しかし Web ページをそのまま印刷しようとすると改ページがおかしくなったりレイアウトがおかしくなってしまうことがあるでしょう。そもそも Web ページはディスプレイで表示することを目的としているので印刷には不向きなものです。  とはいえ Web ページを印刷したいというニーズは少なからずあるとは思います、そのようば場合には `@media print` などのような印刷用の CSS を利用することで見た目を整えることができます]]></description>
        <pubDate>Sat, 04 Dec 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[フォーカストラップとは?  〜アクセシブルなモーダル〜]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/fucus-trap-accessible-modal]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/fucus-trap-accessible-modal]]></guid>
        <description><![CDATA[フォーカストラップ(またはループ)とは、ウェブページをキーボードで操作する際にフォーカスをとある領域からはみ出さないようにすることです。フォーカス可能な要素を抽出してその中をループすることで実現ができます。  登場シーンとしてはモーダルで使われることが多いです。実際に例を交えて確認してみましょう。]]></description>
        <pubDate>Sat, 27 Nov 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Webpack5 Module Federation ではじめるマイクロフロントエンド]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/webpack5-module-federation]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/webpack5-module-federation]]></guid>
        <description><![CDATA[Webpack5 の Module Federation を使用してマイクロフロントエンドを作成します。]]></description>
        <pubDate>Sat, 20 Nov 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Youtube すごい裏ワザ！！！]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/youtube-trick]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/youtube-trick]]></guid>
        <description><![CDATA[Tab キーでページを操作した時のみ表示される「ナビゲーションをスキップ」は一般にスキップリンクと呼ばれるものであり、ウェブアクセシビリティのガイドライン (W3C 勧告) である WCAG 2.0にあるブロックスキップと呼ばれる達成基準を達成する方法として上げられています。]]></description>
        <pubDate>Sat, 13 Nov 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[ npm の人気パッケージ 「coa」と「rc」にマルウェアが埋め込まれた]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/npm-coa-rc-embded-malware]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/npm-coa-rc-embded-malware]]></guid>
        <description><![CDATA[2021/11/5 npm パッケージ 「coa」と「rc」がハイジャックされ、パスワードを盗むマルウェアが埋め込まれました。現在の時点では問題のあったバージョンはすべて取り除かれています。]]></description>
        <pubDate>Sat, 06 Nov 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[ボックスモデル]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/css-box-model]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/css-box-model]]></guid>
        <description><![CDATA[CSS にはボックスという概念があります。ブラウザは文書をレイアウトする際に、それぞれの要素を CSS のボックスモデルに基づいた長方形の箱（ボックス）として表現します。つまりは、HTMLの個々の要素はすべてボックスにからできており、それらのボックスが組み合わさることによってページ全体が表現されます。  ボックスは CSS において最も基本的な概念であり、ボックスを理解することは CSS でレイアウトを構成したり要素同士を揃えるための手助けとなることでしょう。]]></description>
        <pubDate>Sat, 30 Oct 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[【TypeScript】type-challenges 中級編]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/typescript-type-challenges]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/typescript-type-challenges]]></guid>
        <description><![CDATA[[type-challengs](https://github.com/type-challenges/type-challenges) の medium レベルをやります。]]></description>
        <pubDate>Sat, 23 Oct 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[【TypeScript】type-challenges で学ぶ高度な型]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/typescript-type-challenges-advanced-types]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/typescript-type-challenges-advanced-types]]></guid>
        <description><![CDATA[type-challengesを知っていますか？  これは TypeScript の型についての問題集で、問題文の条件を満たす独自のユーティリティ型を作るチャレンジです。いわゆる「型パズル」ってやつですね。  問題の回答はPlayground上で行えるので実際に手を動かしながら問題を解くことができます。型パズルを通じてTypeScript の高度な型について学んでいきましょう。]]></description>
        <pubDate>Sat, 16 Oct 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[lodash-es lodash 違い]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/lodash-es-lodash]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/lodash-es-lodash]]></guid>
        <description><![CDATA[[lodash-es](https://www.npmjs.com/package/lodash-es) とは [lodash](https://lodash.com/) を `ES module` 形式で提供しているライブラリです。]]></description>
        <pubDate>Sat, 09 Oct 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Q: TypeScript を使っているのに関数の引数のオブジェクトや配列に `readonly` を付与しないのは犯罪ですか？ #Shorts]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/q-typescript-readonly-shorts]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/q-typescript-readonly-shorts]]></guid>
        <description><![CDATA[質問来てた👉  Q: TypeScript を使っているのに関数の引数のオブジェクトや配列に `readonly` を付与しないのは犯罪ですか？  結論：犯罪になる場合がある。 まず、配列の引数に `readonly` を付与しておけば以下の利点を得られます。  - うっかり関数の内部で引数の値を変更してしまうコードを書いてしまったときにコンパイルエラーが得られる - 関数の利用者が安心して関数を呼び出せる]]></description>
        <pubDate>Sat, 02 Oct 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[【Vue.js】script setup 構文がすごくすごい]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/vue-js-script-setup]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/vue-js-script-setup]]></guid>
        <description><![CDATA[Vue.js 3.x から script setup 構文が使えるようになりました。これは単一ファイルコンポーネント(SFC)内で Composition API を使用している際に使える糖衣構文です。下記のようなメリットを得ることができ、公式からも使用が推奨されています。]]></description>
        <pubDate>Sat, 25 Sep 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Vuex 5 でどのように変わるのか。]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/vuex-5]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/vuex-5]]></guid>
        <description><![CDATA[ 現在リリースされている最新のバージョンは Vuex 4 です。 これは Vuex 3 と互換性のあるバージョンで Vue 3 で使用するためのものであり、 Vuex 3 と同じ API となっています。  Vuex 5 は Vue 3 において　Composition API による Reactivity API が登場したことにより Reactivitty API によってどのように Vuex をどうさせるか再考されたバージョンとなっています。]]></description>
        <pubDate>Sat, 25 Sep 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[【Vue3.2】styleタグ内でJavaScript変数をバインドできる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/vue3-2-style-javascript]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/vue3-2-style-javascript]]></guid>
        <description><![CDATA[Vue.js3.2からは、JavaScriptの変数をCSS変数としてバインドできるようになりました。  つまりは、CSSの値を動的に設定できるということです。  ものは試しのやってみましょう。]]></description>
        <pubDate>Sat, 18 Sep 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Vue2のプロジェクトをVue3へマイグレーションsする]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/vue2-vue3]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/vue2-vue3]]></guid>
        <description><![CDATA[Vue 3が正式リリースされてから約1年が経過しました。  Vuetifyのリリース目標である2021年Q3も近づく中でそろそろVue3へのアップデートを検討されている方もいらっしゃることでしょうか？  この記事ではVue 2からVue 3への移行手順を記述していきます。]]></description>
        <pubDate>Sat, 11 Sep 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[【Vue.js】Mixinを使うのはもうやめよう]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/vue-js-mixin]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/vue-js-mixin]]></guid>
        <description><![CDATA[禁止まで言ってしまうとなんだか強い言葉のように聞こえてしまいますが、mixinは基本的にあまり良いアプローチとは考えられません。  実際に、Reactにも過去にはMixinが存在していましたが現在は廃止されています。]]></description>
        <pubDate>Sat, 04 Sep 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[あの日見たaxiosの機能を僕達はまだ知らない。]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/axios]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/axios]]></guid>
        <description><![CDATA[axiosは、JavaScriptにおけるHTTPクライアントのデファクトスタンダードといえるでしょう。  Promiseベースで非同期通信を行えるHTTPクライアントとして、ブラウザ標準のfatchやjQuery.ajaxなどがありますが、特にaxiosがよく使われているのには豊富なオプションや設定に理由付けられるでしょう。  axiosの機能について私のように詳しくなくても直感的にHTTPリクエストを送れるのも良い点の1つですが、せっかくなのでaxiosでどのようなことができるのがを見ていきましょう。]]></description>
        <pubDate>Sat, 28 Aug 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[VuetifyのテーマをCSS変数として使用する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/vuetify-theme-css-variables]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/vuetify-theme-css-variables]]></guid>
        <description><![CDATA[VuetifyのテーマをCSSの変数として生成して使用します。]]></description>
        <pubDate>Sat, 21 Aug 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[青春JSDocはTypeScript先輩の夢を見ない]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/jsdoc-typescript]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/jsdoc-typescript]]></guid>
        <description><![CDATA[時には、TypeScriptという概念が存在しない退屈な世界で開発を行わなけらばならない状況はあるでしょう。私はもはやキーボードでタイピングすることすらままなりません。  そんなJavaScriptしか利用できない状況で代替手段となるのが、JSDocです。JSDocのアノテーションによって型を付与することによって最低限の支援を受けることができます。]]></description>
        <pubDate>Sat, 14 Aug 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[【TypeScript】型定義をする際にもDRY原則を守る]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/typescript-dry-type-definition]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/typescript-dry-type-definition]]></guid>
        <description><![CDATA[DRY原則は非常に有名な原則ですし、普段から特に考えずとも自然と重複をさけるようなコードを書いている方も多いことでしょう。  とはいえ、TypeScriptにおいて`interface`や`type`などを用いて型定義を行う際に重複した型定義を行ってしまうことはないでしょうか？ TypeScriptには型定義をする際に重複を抑える手段は確かに存在します。そのようないくつかの方法を紹介します。]]></description>
        <pubDate>Sat, 07 Aug 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Jest setTimeout()のようなでタイマー関数をテストする]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/jest-timer-test]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/jest-timer-test]]></guid>
        <description><![CDATA[JavaScriptには、setTimeout()のような時間に関する便利な機能が用意されています。しかし、これらの関数はユニットテストを記述する際に厄介です。Jestのタイマーモックはこのような場合に利用できる便利な機能です。]]></description>
        <pubDate>Sat, 31 Jul 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[【TypeScript】型アノテーションと型アサーションの違い]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/typescript-type-annotation-vs-type-assetion]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/typescript-type-annotation-vs-type-assetion]]></guid>
        <description><![CDATA[型アノテーションと型アサーションによる変数宣言は、一見同じ結果をもたらすように見えます。しかし、型アサーションには明確な欠点が存在します。]]></description>
        <pubDate>Fri, 23 Jul 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[【mongoose】日付のカラムで時間ごとにグループ化してドキュメント数をカウントする]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/mongoose-group-by-hour-count]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/mongoose-group-by-hour-count]]></guid>
        <description><![CDATA[タイトルのとおりです]]></description>
        <pubDate>Sat, 17 Jul 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[【mongoose】Cannot overwrite 'Model' model once compiled. エラーの直し方]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/mongoose-cannot-overwrite-model-model-once-compiled-error-handling]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/mongoose-cannot-overwrite-model-model-once-compiled-error-handling]]></guid>
        <description><![CDATA[mongooseで遭遇するCannot overwrite 'Model' model once compiled. エラーの解消方法です]]></description>
        <pubDate>Sat, 10 Jul 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[JSONオブジェクトのあれこれ]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/json-object]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/json-object]]></guid>
        <description><![CDATA[`JSON`オブジェクトはJavaScriptにおいて、JSONをパースしたり値をJSONに変換するためにもっぱら使われます。  普段使っている`JSON.stringify()`や`JSON.parse()`にはオプショナルな引数を渡すことによってその振る舞いを変更することができます。]]></description>
        <pubDate>Sat, 03 Jul 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[【JavaScript】Objectがプリミティブに変換されるとき]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/javascript-object]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/javascript-object]]></guid>
        <description><![CDATA[JavaScriptがプリミティブな値に変換されるとき、string型に変換されようとするか、number型に変換されようとするかで挙動が変化する]]></description>
        <pubDate>Sat, 26 Jun 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[ReactのErrorBoundaryで内部のエラーをキャッチする]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/react-errorboundary]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/react-errorboundary]]></guid>
        <description><![CDATA[Error Boundaryとは、自身の子コンポーネントツリーで発生したJavaScriptのエラーをキャッチ・記録しフォールバックのUIを表示するコンポーネントです。  例えるなら、`try/catch`構文を行うコンポーネントのようなものと言えます。]]></description>
        <pubDate>Sat, 19 Jun 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[仕事で役に立つかもしれないHTML5のマイナー要素]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/useful-minor-html5]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/useful-minor-html5]]></guid>
        <description><![CDATA[HTMLは書いたことがありますか？プログラミング初心者が最初の一歩として書き出すのに好まれる言語ですが、セマンティクスを追求すると奥深い言語だとわかります。タグの種類も数多くあり、全てを把握している人はそう多くなないでしょう。  今回は、そんなHTMLの普段の仕事では余り見かけないであろう要素を紹介していきます。]]></description>
        <pubDate>Sat, 12 Jun 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Nuxt Sentryでユーザーフィードバックを受け取る]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/nuxt-sentry-user-feedback]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/nuxt-sentry-user-feedback]]></guid>
        <description><![CDATA[Sentryでは、エラーが発生した際に簡単にユーザーフォードバックを求めるダイアログを表示することができます。  Nuxt.jsでは、エラーが発生した際には`layouts/error.vue`へ遷移させることでエラーページを表示するので、このエラーコンポーネントにダイアログを表示させる処理を書いていきます。]]></description>
        <pubDate>Sat, 05 Jun 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Node.js(Express)でcsvを生成してダウンロード]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/node-js-express-csv]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/node-js-express-csv]]></guid>
        <description><![CDATA[Node.js(Express)でCSVファイルを生成してダウンロードさせます。]]></description>
        <pubDate>Sat, 29 May 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[CKADにも合格した]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/also-passed-ckad]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/also-passed-ckad]]></guid>
        <description><![CDATA[開発者向けのK8sの試験であるCKADにも合格したので同様に合格体験記を記載したいと思います。 といっても、大枠の部分はCKAのときとあまり変わらないのでCKAと異なる部分を中心に記載したいと思います。]]></description>
        <pubDate>Sat, 22 May 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Vue CLIで作成したプロジェクトをViteに置き換える]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/vue-cli-vite]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/vue-cli-vite]]></guid>
        <description><![CDATA[Viteは、一言でいうとフロントエンドのめっちゃ早いビルドツールです。Vue CLIで作成したプロジェクトをViteに置き換えるためにvue-cli-plugin-viteをというプラグインを使います。]]></description>
        <pubDate>Sat, 15 May 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[ KubernetesのapiVersion]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/kubernetes-apiversion]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/kubernetes-apiversion]]></guid>
        <description><![CDATA[Kubernetesのマニフェストを作成するときには、`apiVersion`フィールドを指定する必要があります。 例えば`Pod`の場合には`v1`を、`Deployment`の場合には`apps/v1`を指定しますが、これらはどのようなルールで記述するのでしょうか。]]></description>
        <pubDate>Sat, 08 May 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[etcdのバックアップとリストア]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/etcd-backup-restore]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/etcd-backup-restore]]></guid>
        <description><![CDATA[etcdは、kubernetesのクラスターの情報を保存するkey-valueストアです。]]></description>
        <pubDate>Sat, 01 May 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[kubectl JSONpath]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/kubectl-jsonpath]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/kubectl-jsonpath]]></guid>
        <description><![CDATA[kubectlはアウトプットの形式としてJSONPathをサポートしています。]]></description>
        <pubDate>Sat, 24 Apr 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Vue.jsでIE11対応]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/vue-js-for-ie11]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/vue-js-for-ie11]]></guid>
        <description><![CDATA[人生でときにはIE11に対応させなければいけない時があるでしょう。Vue.jsでIE11に対応しなけらばいけなくなったときに読むものを記載しておきます。]]></description>
        <pubDate>Sat, 17 Apr 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[e2eテスティングフレームワークCypress]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/e2e-cypress]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/e2e-cypress]]></guid>
        <description><![CDATA[Cypressは、JavaScript製のE2Eテスティングフレームワークです。 実行速度が早い、HTTPリクエストの実行を待つなどテストが壊れにくい仕組みが整っています]]></description>
        <pubDate>Sat, 10 Apr 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Kubernetes Tips]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/kubernetes-tips]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/kubernetes-tips]]></guid>
        <description><![CDATA[知っていると時間を短縮できるようなkubectlコマンドのtipsです。]]></description>
        <pubDate>Sat, 03 Apr 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Sassの基礎文法]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/basic-sass-syntax]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/basic-sass-syntax]]></guid>
        <description><![CDATA[SassはCSSのメタ言語です。CSSに比べてコード量が減り、保守性が優れるといった開発体験を向上させてくれる特徴があります。]]></description>
        <pubDate>Sat, 27 Mar 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Kustomizeとは]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/what-is-kustomize]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/what-is-kustomize]]></guid>
        <description><![CDATA[Kustomizeとは、Kuberbetsコミュニティのsig-cliが提供しているマニフェストのテンプレーティングツールです。環境ごとにマニフェストを生成したり特定のフィールドを上書きするといった機能が提供されています。]]></description>
        <pubDate>Sat, 20 Mar 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[KubernetesのパッケージマネージャーHelm]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/kubernetes-helm]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/kubernetes-helm]]></guid>
        <description><![CDATA[Helmは、Kubernetsのパッケージマネージャーです。 例えば、npmを利用して第三者が作成したパッケージをレポジトリで管理して検索・インストールするように、Helmではチャート(Chart)と呼ばれる設定ファイルをレポジトリで管理しています。]]></description>
        <pubDate>Sat, 13 Mar 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Kubernetes用語集]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/kubernetes-glossary]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/kubernetes-glossary]]></guid>
        <description><![CDATA[ 仕事上kubernetesを学ぶ必要が出てきました。 筆者のレベルは、Docker・kubernetesの概念・必要性をやんわりと理解している状態です。  勉強をすすめる上で、わからない用語が次々と出てきたて頭の中がパンクしそうになったので、簡潔に随時まとめることとしました。]]></description>
        <pubDate>Sat, 06 Mar 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[DenoでREST API]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/deno-rest-api]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/deno-rest-api]]></guid>
        <description><![CDATA[この記事では、Denoを使い簡単なCRUD操作を行うREST APIを構築します。]]></description>
        <pubDate>Sat, 27 Feb 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[TailwindCSSでダークモード]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/tailwindcss-dark-mode]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/tailwindcss-dark-mode]]></guid>
        <description><![CDATA[昨今のアプリケーションでは、ダークモードを提供しているのがもはや当たり前になってきました。 OSのレベルでダークモードを設定することができ、ダークモードが提供されていないサイトは眩しく感じしてしまって敬遠してしまうなんて経験はあるのではないでしょうか？  そんな一般化されたダークモードの提供をTailwind CSSで実装します。]]></description>
        <pubDate>Sat, 20 Feb 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[はじめてのGraphQL]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/what-is-graphql]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/what-is-graphql]]></guid>
        <description><![CDATA[GraphQLとは、Facebookが開発したAPI向けのクエリ言語です。RESTに変わるサーバーとクライアントの通信手段として注目を集めています。 リクエスト・レスポンスの型の定義ができる、フロント側から取得するデータを選択することができるなどの特徴があります。 GraphQL自体はSQLのようなクエリ言語としての位置づけなので、Java、Node.js、Ruby、JavaScript、Pythonなど様々な言語で利用することができます。]]></description>
        <pubDate>Tue, 16 Feb 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Sapper + contentful + VercelのJamstackで高速なブログを構築する]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/sapper-contentful-vercel-jamstack-blog]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/sapper-contentful-vercel-jamstack-blog]]></guid>
        <description><![CDATA[JamstackのJamはJavaScript/APIs/Markupの頭文字です。 従来の手法と比較して、高速化・堅牢なセキュリティ。より簡単なスケーラブル・開発体験の向上という特徴を持っています。実行時にAPIから取得したデータを動的にレンダリングせずに、ビルド時にAPIから取得して静的なHTMLとして出力されます。]]></description>
        <pubDate>Sat, 13 Feb 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[【Svelte + TypeScript + tailwindcss】本検索サイト チュートリアル]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/svelte-typescript-tailwindcss-book-search-app-tutorial]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/svelte-typescript-tailwindcss-book-search-app-tutorial]]></guid>
        <description><![CDATA[この記事でははSvelte + TypeScript + tailwindcssで本検索サイトを作成します。 Svelteを使ってアプリケーションを作成1から作成することができます。 以下のことが学べます。  - Svelteの基礎文法 - Svelteのルーティング - Svelteのストア  HTML・CSS・JavaScriptの基礎的な理解がある人が対象です。]]></description>
        <pubDate>Sat, 06 Feb 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Vue3 コンポーネントのテスト]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/vue3-test-components]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/vue3-test-components]]></guid>
        <description><![CDATA[コンポーネントのテストをするのフレームワークとしてJest、vue-test-utils 2を利用します。Vue2系をターゲットにしているvue-test-utils 1とは一部APIが異なります。]]></description>
        <pubDate>Tue, 02 Feb 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[TailWindCSSとは]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/what-is-tailwindcss]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/what-is-tailwindcss]]></guid>
        <description><![CDATA[TailWindCSSはBootStrap・Materialize CSSなどに代表するCSSフレームワークの一つです。 その特徴として、**Utility First**を掲げています。]]></description>
        <pubDate>Sat, 30 Jan 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[ JavaScriptライブラリ Svelteとは]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/what-is-svelte]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/what-is-svelte]]></guid>
        <description><![CDATA[Svelteとは、ReactやVue.jsのような宣言的UIライブラリの一種です。その最大の特徴は、ReactやVue.js・Angularと異なりSvelteはコンパイラであることを謳っているところです。Svelteによってコンパイルされたコードは、すべてVanilla JS  - ネイティブのJavaScript- にで生成されます。 そのため、コンパイル後のファイルサイズも小さくパフォーマンス上での利点が期待されています。]]></description>
        <pubDate>Sat, 23 Jan 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Firebase Functions https.onCall()トリガーでアプリから簡単に呼び出す]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/firebase-functions-https-oncall]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/firebase-functions-https-oncall]]></guid>
        <description><![CDATA[Firebase Functionsとは、Firebaseの提供するサーバレスフレームワークです。HTTPSリクエストによって関数を実行したり、FireStore・Cloud Storage・AuthenticationのCRUDイベントをトリガーに関数を実行することができます。使用できる言語はJavaScript・TypeScriptに限られているというデメリットはあるものの、手軽にデプロイでき簡単にプロジェクトの他のFirebaseの機能と統合できるメリットがあります。]]></description>
        <pubDate>Sat, 09 Jan 2021 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[JavaScript テストフレームワークのJestのモックがすごくすごい]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/jest-mock]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/jest-mock]]></guid>
        <description><![CDATA[Jestは、JavaScriptのシンプルなテスティングフレームワークです。ゼロコンフィグを謳っており、細かい設定なしに動作させることが可能です。  Jestの中でも特に強力な機能がモッキングです。Jestのモックを利用すれば、外部ライブラリであろうとモジュール外のオブジェクトを簡単にモック化することができます。  実際に、テストコードの例を見ていきましょう。]]></description>
        <pubDate>Tue, 15 Dec 2020 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Vue.js Composition APIでTODOアプリ作成]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/vue-js-composition-api-todo-app]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/vue-js-composition-api-todo-app]]></guid>
        <description><![CDATA[Vue3 Composition APIを使って、ハンズオン形式でTODOアプリを作成していきます。]]></description>
        <pubDate>Sat, 12 Dec 2020 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[イマドキのJavaScriptの書き方]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/how-to-write-javascript-in-the-modern-world]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/how-to-write-javascript-in-the-modern-world]]></guid>
        <description><![CDATA[JavaScriptはES2015以降から言語自体が大きく変化しました。 ES2015以降も、毎年JavaScriptはアップデートが行われており、最新の使用はES2020となっています。  このように、JavaScriptという言語は日々進化を遂げています。ES2015より前の書き方の多くが非推奨となっており、過去のWebや本の情報は現在ではあまり役に立たなくなっています。 そんなJavaScriptのイマドキの書き方を見ていきましょう。]]></description>
        <pubDate>Fri, 04 Dec 2020 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[すぐに使える！JavaScriptの華麗な配列操作]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/javascript-array-operations]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/javascript-array-operations]]></guid>
        <description><![CDATA[JavaScriptで配列操作をする際には、まずはJavascriptが持つ配列のメソッドを眺めて見るとよいでしょう。JavaScriptはライブラリに頼らなくとも自前で高度な操作を可能にしてくれます。  組み込みの配列メソッドはたくさんありますが、その中で私がよく使うメソッドを紹介します。]]></description>
        <pubDate>Sat, 28 Nov 2020 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Go言語 テスト]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/go-test]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/go-test]]></guid>
        <description><![CDATA[Go言語の提供するテストはシンプルです。テストのために覚えることは多くはありません。 Go言語の単体テスト用の機能は`testing`という標準パッケージとして提供されています。ベンチマークやカバレッジ、標準出力のテストなどをカバーしています。 また、テストは`go test`コマンドによって実行されます。サードパーティのツールなどは必要ありません。まずはこの`testing`パッケージの内容を見ていきます。]]></description>
        <pubDate>Sat, 14 Nov 2020 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Go 言語　標準パッケージでHTTPサーバー]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/go-http]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/go-http]]></guid>
        <description><![CDATA[Go言語は、標準パッケージでHTTPサーバーと基本的なHTTPクライアントを提供します。 使用するのは、net/httpというパッケージです。]]></description>
        <pubDate>Sat, 07 Nov 2020 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Go言語 ポインター]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/go-pointer]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/go-pointer]]></guid>
        <description><![CDATA[Go言語には、ポインタがあります。 ポインタとは、メモリのアドレスのことです。アドレスは`0xc0000b4008`のような16進数で表されます。]]></description>
        <pubDate>Sat, 31 Oct 2020 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Go言語 構造体・インターフェース]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/go-struct-interface]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/go-struct-interface]]></guid>
        <description><![CDATA[構造体(Struct)とは、フィールドの集まりです。JavaScriptのオブジェクトよく似ており、データをまとめて1つの集まりの値として表現します。  例えば、座標を表すには緯度と経度がフィールドとして必要になるでしょう。緯度と経度をそれぞれ別の変数として宣言することはできますが、間違いが生じやすく面倒な処理になってしまいます。]]></description>
        <pubDate>Sat, 24 Oct 2020 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Go言語　コレクション（配列・スライス・マップ）]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/go-collection]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/go-collection]]></guid>
        <description><![CDATA[配列は決まった長さを持つ要素を並べた順序のあるコレクションです。 Go言語の配列は固定長になっており、宣言時に長さと要素型を指定します。 長さは後から変更することはできません。 Go言語の配列は柔軟性に欠けるため、実際にはあまり使用されません。可変長であるスライスがよく使われます。 マップはキーと値によって宣言されます。これは、連想配列のようなものです。]]></description>
        <pubDate>Sat, 17 Oct 2020 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Go言語　型・関数・メソッド]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/go-type-function-method]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/go-type-function-method]]></guid>
        <description><![CDATA[ Go言語は静的型付け言語であり、全ての変数は何らかの型に属し、異なる型同士の演算といった問題点の多くはコンパイル時に検出されます。 関数の宣言にはfuncキーワードを使用します。関数の引数と戻り値には型を指定します。戻り値を複数持たせられる、戻り値に名前をつけることができるといった特徴があります。 クラスやオブジェクトはないですが、メソッドはあります。メソッドは型に紐付けられます。]]></description>
        <pubDate>Sat, 03 Oct 2020 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Go言語基礎文法]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/what-is-go]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/what-is-go]]></guid>
        <description><![CDATA[Go言語(Golang）は、2009年にGoogleによって開発されたオープンソースの静的型付け、コンパイルされるプログラミング言語です。Go言語はコンパイルされるプログラミング言語です。 Go言語はシンプルで、信頼性が高く、効果的なソフトウェアを構築します。]]></description>
        <pubDate>Sat, 26 Sep 2020 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[CSSの設計]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/css-design]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/css-design]]></guid>
        <description><![CDATA[今この文章を読んでいる人ならば、少なくともCSSには触れたことがあると思います。CSSはとても簡単に記述できますが、それゆえにCSSは「壊れやすい」のです。なぜCSSは壊れやすくなってしまうのでしょうか。CSSには「すべてがグローバルスコープ」「複雑化するWeb開発」といった問題点があげられます。そのような状態に対する解決策として、CSSの設計が誕生しました。]]></description>
        <pubDate>Sat, 12 Sep 2020 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Express + TypeScript + MondoDBでやる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/express-typescript-mondodb]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/express-typescript-mondodb]]></guid>
        <description><![CDATA[ Expressは、Node.jsのWebアプリケーションでもっとも利用されているフレームワークです。Expressは、HTTPによるWeb上の相互作用とNOde.jsプラットフォームの中間に位置するので、ある種のミドルウェアと言えます。 Expressを利用して、MVCモデルのアプリケーションを開発してみます。 データベースにはMongoDBを利用し、さらにTypeScriptで書いてみます。]]></description>
        <pubDate>Sat, 13 Jun 2020 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Node.js - サーバーサイドのJavaScript]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/node-js]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/node-js]]></guid>
        <description><![CDATA[Node.jsは、V8 Javascriptエンジン上に構築されたJavaScriptの実行環境です。サーバーサイドのJavaScript環境であり、非同期、イベント駆動といった特徴があります。]]></description>
        <pubDate>Sat, 06 Jun 2020 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Firebase④ Cloud FireStore - クエリ]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/firebase-cloud-firestore-query]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/firebase-cloud-firestore-query]]></guid>
        <description><![CDATA[Firebase4回目の記事です。 前回は、Firebaseにおける単一のドキュメントに対するCRUD操作までを取り扱いました。 今回は複数のコレクションから取得するためのクエリについて説明していきます。]]></description>
        <pubDate>Sat, 23 May 2020 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Denoとはなにか - 実際に使ってみる]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/what-is-deno]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/what-is-deno]]></guid>
        <description><![CDATA[Denoは、Node.jsの製作者であるRyan Dahlによって作られた、新しいJS/TSランタイムです。簡単に説明すると、Node.jsのイケてなかったところを改良したものがDenoになります。]]></description>
        <pubDate>Sat, 16 May 2020 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Firebase③ Cloud Storage]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/firebase-cloud-storage]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/firebase-cloud-storage]]></guid>
        <description><![CDATA[Firebase3週目の記事です。 今回は、主に画像などのデータを保存するストレージ機能を提供するCloud Storageを取り扱います。 Vue.jsを利用したブログにサムネイル画像を設定する機能をもとに説明していきます。]]></description>
        <pubDate>Sat, 02 May 2020 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[JavaScript ECMAScriptとかBabelとか]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/javascript-ecmascript-babel]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/javascript-ecmascript-babel]]></guid>
        <description><![CDATA[JavaScript ECMAScriptとかBabelとか]]></description>
        <pubDate>Thu, 30 Apr 2020 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Firebase④ Cloud FireStore]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/firebase-cloud-firestore]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/firebase-cloud-firestore]]></guid>
        <description><![CDATA[Cloud FireStore(以下FireStore)とは、FireBaseの提供するドキュメント指向型 のNoSQLデータベースです。 NoSQLとしての特徴としてのスキーマレス、スケーラブルといった特徴のほかにリアルタイムアップデート、セキュリティルール、オフラインサポートといった独自の特徴を備えており、特にバックエンドを介さずにクライントサイドから直接操作できるという点が大きなポイントです。 また、β版から正式リリースされたのが2019年2月ということもあり、比較的新しい技術です。]]></description>
        <pubDate>Sat, 25 Apr 2020 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[Firebase② Firebase Authentication]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/firebase-firebase-authentication]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/firebase-firebase-authentication]]></guid>
        <description><![CDATA[Firebase第二弾です。 Firebase Authenticationのメールアドレスによるログインと、FireStorageについて説明していきます。]]></description>
        <pubDate>Sat, 18 Apr 2020 15:00:00 GMT</pubDate>
      </item>
    

      <item>
        <title><![CDATA[firebaseとは]]></title>
        <link><![CDATA[https://azukiazusa.dev/blog/what-is-firebase]]></link>
      <guid isPermaLink="false"><![CDATA[https://azukiazusa.dev/blog/what-is-firebase]]></guid>
        <description><![CDATA[Firebaseは、Googleが提供するバックエンドサービスです。 Firebaseは、バックエンドのサービスを担ってくれるので、開発者はアプリケーションの開発に専念することができ、バックエンドで動くサービスを作成、管理する必要はありません。 そのため、素早くアプリケーションをリリースるることができます。 Firebaseは、iOS/AndroidアプリからWebサービスまで幅広く使えます。 認証、データベース、ストレージなどたくさんの機能が使用できます。]]></description>
        <pubDate>Sat, 11 Apr 2020 15:00:00 GMT</pubDate>
      </item>
    
    </channel>
  </rss>
