📰
2026年3月8日(土)号
Security: 4件Frontend: 197件infra: 4件Backend: 66件Tools: 79件GenAI: 43件other: 10件
GenAIAnnouncementEN

Verification debt: the hidden cost of AI-generated code

AIが生成するコードはしばしば誤りを含み、人間がその検証、デバッグ、修正を行う必要があるため、「検証負債」と呼ばれる隠れたコストが発生する。この負債は、コードの信頼性が低いにもかかわらず、人間が生成されたコードを受け入れがちであることから生じる。結果として、開発者は新しい機能の作成ではなく、AIが生成したコードの品質保証に時間を取られ、全体的な生産性が低下する。これは、AIによるコーディングがまだ「思春期」段階にあり、完全に自律的ではないことを示している。

  • •AI生成コードは一見効率的だが、信頼性の低さから「検証負債」を生み出し、実質的な生産性を低下させる。
  • •開発者は、AI生成コードの検証、デバッグ、修正に多くの時間を費やし、これが生産性のボトルネックとなっている。
  • •AIのコーディング能力はまだ発展途上にあり、人間の専門知識が品質保証に不可欠である。

Why it matters

この問題は、AIを活用したソフトウェア開発の真の生産性を評価し、将来的な開発ワークフローを設計する上で不可欠な視点を提供するからである。

medium·2026/03/07 17:08
70
GenAITutorialEN

Run prompts on a schedule - Claude Code Docs

Claude Code Docsの記事では、プロンプトを自動的にスケジュール実行する方法が解説されています。`@claude.task`デコレータでタスクを定義し、`@claude.schedule`デコレータとcron式を用いて実行間隔を設定することで、日報の生成、コンテンツの定期的作成、システムの監視といった反復的なAIタスクを自動化できます。エラーハンドリングやロギングの重要性にも触れており、開発者はより堅牢な自動化ワークフローを構築可能です。これにより、手動での実行にかかる手間を削減し、生産性を向上させることが期待されます。

  • •Claude Code Docsは、`@claude.schedule`デコレータとcron式を使用してプロンプトの定期実行を可能にします。
  • •日報作成、コンテンツ生成、監視などの反復的なAIタスクを自動化し、効率を向上させることができます。
  • •タスク定義には`@claude.task`デコレータが用いられ、堅牢なシステムのためにエラーハンドリングとロギングが推奨されます。

Why it matters

この機能により、AIモデルを使った定型業務の自動化が容易になり、手動での介入を減らし、運用の効率と信頼性を大幅に向上させることができます。

claude·
49
SecurityAnnouncementEN

React は javascript スキームを使った XSS を防ぐことができない

Reactは通常、HTMLエスケープによってクロスサイトスクリプティング(XSS)を防ぎますが、`<a>`タグの`href`属性に`javascript:`スキームを含むURLが直接設定された場合、この保護は機能しません。ユーザーからの入力や信頼できないソースのコンテンツを`href`に直接渡すと、悪意のあるJavaScriptが実行される危険性があります。`dangerouslySetInnerHTML`だけでなく、通常のprops経由でも`javascript:`スキームが許容されるため、開発者はURLサニタイズを徹底する必要があります。

  • •ReactのXSS対策は主にHTMLエスケープであり、`href`属性に指定された`javascript:`スキームのURLは防げない。
  • •ユーザー入力や外部ソースからの`javascript:`スキームを含むURLを`<a>`タグの`href`に設定するとXSSのリスクがある。
  • •`dangerouslySetInnerHTML`だけでなく、通常のprops経由でも`javascript:`スキームの実行が可能であり、URLサニタイズが必須である。

Why it matters

Reactアプリケーションにおいて、ユーザーからの入力や外部データを扱う際にURLのサニタイズを怠ると、予期せぬXSS脆弱性を生み出す可能性があるため、開発者はこの特性を理解し対策を講じる必要があります。

azukiazusa·2023/02/25 15:00
44
BackendTutorialEN

Next.js の Server Actions について

Next.js 13.4以降で導入されたServer Actionsは、`"use server"`ディレクティブを使って、クライアントコンポーネントから直接サーバー側のロジックを実行できる機能です。これにより、個別のAPIエンドポイントを作成する手間が省け、フォームからのデータミューテーションやキャッシュの再検証が容易になります。Reactの`useFormState`や`useFormStatus`と組み合わせることで、フォームの状態管理も効率的に行え、開発者の生産性向上に貢献します。

  • •`"use server"`ディレクティブを使用し、クライアントからサーバー関数を直接呼び出すことを可能にする。
  • •APIエンドポイントの定義を不要にし、データミューテーションとキャッシュの再検証を簡素化する。
  • •HTMLの`<form>`要素の`action`プロパティに直接指定でき、`useFormState`や`useFormStatus`との連携も可能。

Why it matters

Server Actionsは、Next.jsアプリケーションにおけるサーバーとクライアント間のデータ連携を大幅に簡素化し、開発者がより効率的に堅牢なウェブアプリケーションを構築できるようにするため重要です。

azukiazusa·2023/05/06 05:13
42
DevToolsTutorialEN

Next.js で OpenTelemetry を使用した計装を行う

この記事では、Next.jsアプリケーションにおけるOpenTelemetryを用いた計装の具体的な実装方法を詳述しています。Next.js特有のサーバーサイド、クライアントサイド、エッジランタイムでのコード実行環境を考慮し、`register.ts`や`instrumentation.ts`を使ったトレーシングの設定手順が説明されています。また、Vercel環境における制約(例: Node.jsの`fs`モジュール利用不可)への対応策や、Grafana Tempoへのトレースデータ送信例も紹介されており、複雑なNext.jsアプリケーションの可観測性を向上させるための実践的なガイドとなっています。

  • •Next.jsにOpenTelemetryを導入することで、分散システムにおけるアプリケーションの挙動を詳細に追跡できます。
  • •`register.ts`と`instrumentation.ts`ファイルを活用し、Next.jsのサーバーサイドおよびエッジランタイムでOpenTelemetryの計装を効果的に設定する方法が示されています。
  • •Vercelなどのエッジ環境では、OpenTelemetryのSDK選択や初期化にNode.jsのAPI利用不可といった制約があるため、特別な考慮が必要です。

Why it matters

Next.jsのような複雑なフレームワークでOpenTelemetryを適切に設定することは、本番環境でのパフォーマンス問題の特定、デバッグ、およびシステム全体の健全性の監視に不可欠であり、開発効率と運用安定性を大幅に向上させます。

azukiazusa·2024/11/10 08:53
42
GenAITutorialEN

AIで簡単にウェブページ上でさまざまなタスクを実行できるようになる「PageAgent」を使ってみた

ウェブページ上で様々なタスクをAIが自動実行するツール「PageAgent」の検証記事です。PageAgentは、ユーザーがテキストで指示を与えるだけで、ウェブスクレイピングやフォーム入力、情報収集といった複雑な作業をブラウザ上で代行します。内部ではOpenAIのGPT-4Vを使用しており、ウェブサイトの視覚情報とテキスト情報を総合的に判断して操作を決定します。ローカル環境で動作し、インストールから実際のタスク実行までが詳細に解説されており、その可能性と課題が示されています。

  • •AIによるブラウザ自動操作: PageAgentはAIがウェブブラウザを直接操作し、ユーザーのテキスト指示に基づいてウェブ上のタスクを自動実行します。
  • •GPT-4Vの活用: OpenAIのGPT-4VをAIエンジンとして使用し、ウェブページの視覚情報とテキスト情報を統合的に理解・判断して正確な操作を行います。
  • •多様なタスク対応と課題: 情報収集、フォーム入力、ウェブスクレイピングなど多岐にわたる用途が期待される一方、複雑なタスクや曖昧な指示では誤動作することもあり、今後の改善が期待されます。

Why it matters

このツールは、ウェブブラウザを介した日常的な作業や情報収集をAIが自動化することで、ユーザーの生産性を大幅に向上させる可能性を秘めているため重要です。

gigazine·
40
FrontendTutorialEN

Next.js の Interception Routes について

Next.js 13/14で導入されたApp RouterのInterception Routesは、ユーザーが別のページへ遷移する際、そのコンテンツを現在のページのレイアウト内にオーバーレイ表示させる機能です。例えば、画像ギャラリーで特定の画像をクリックした際に、URLは画像の詳細を示すものの、見た目上は元のギャラリーページの上にモーダルとして画像が表示されます。これにより、ページ全体の再ロードなしにコンテンツを表示し、ユーザー体験を向上させます。ファイルシステムベースのルーティング規約として(.)や(..)、(...)を用いて、インターセプトするルートの階層を柔軟に指定できる点が特徴です。

  • •Next.js App Routerの機能で、現在のレイアウトを保持しつつ、別のルートのコンテンツをオーバーレイとして表示する。
  • •写真ギャラリーの画像詳細をモーダルで表示する際など、既存ページのURLコンテキストを維持したままコンテンツを見せるユースケースに適している。
  • •ファイルシステムルーティングに(.) (同じ階層) や(..) (一つ上の階層) といった特定の規約を用いて、インターセプトするルートを指定する。

Why it matters

現在のページの文脈を維持しつつ、別のコンテンツをオーバーレイ表示できるため、アプリケーションのユーザー体験とURL管理を高度に両立させます。

azukiazusa·2023/04/09 04:38
38
BackendTutorialEN

MCP サーバーの Streamable HTTP transport を試してみる

この記事では、Minecraftサーバー制御プロトコルMCPのRust実装である「mcp-server-rust」における「Streamable HTTP transport」の導入が紹介されています。通常gRPCを使用するMCPに対し、このトランスポートは`hyper`と`tokio`を利用してHTTP経由でのリクエスト・レスポンス送受信を実現します。リクエストとレスポンスはBase64でエンコードされ、HTTPボディとしてやり取りされるため、既存のHTTPサービスとの連携が容易になり、デバッグの簡素化も期待されます。

  • •「Streamable HTTP transport」は、通常gRPCを使用するMCP(Message Control Protocol)をHTTP経由で通信可能にする機能です。
  • •このトランスポートは、`hyper`と`tokio`を用いてHTTPサーバーを構築し、MCPのリクエスト・レスポンスをBase64エンコードしてHTTPボディとして送受信します。
  • •HTTP通信への対応により、既存のHTTPベースのシステムとの統合が容易になり、gRPCクライアントを必要とせずにMCPサーバーを操作できる柔軟性が生まれます。

Why it matters

この技術により、Minecraftサーバーの制御プロトコルMCPがより汎用的なHTTPインフラと容易に連携できるようになり、開発と運用における柔軟性と利便性が向上します。

azukiazusa·2025/04/19 00:29
38
BackendTutorialEN

Vercel で MCP サーバーを構築する

この記事では、Vercelのサーバーレスプラットフォーム上でMinecraft Pocket Edition (MCP) サーバーの構築を試みた経緯が詳細に説明されています。著者は当初、PocketMine-MPを直接デプロイしようとしましたが、Vercel関数の実行時間制限(最大60秒)に直面し、失敗しました。次に、リアルタイム通信を可能にするWebSocketの利用を検討し、`ws-php`と`vercel-php`を組み合わせて実装を試みました。しかし、基本的なWebSocketサーバーは動作するものの、永続的な接続と連続稼働が求められるゲームサーバーはVercelのサーバーレス環境には適さないという結論に至りました。

  • •VercelでMinecraft Pocket Edition (MCP) サーバーの構築を試みたが、サーバーレス関数の短時間実行制限(最大60秒)が主要な課題となった。
  • •`PocketMine-MP`を直接Vercel環境で永続的に実行することは、サーバーレスの特性上不可能であった。
  • •WebSocketを活用した接続を検討したが、永続的な接続と長時間の稼働が求められるゲームサーバーは、Vercelのサーバーレスアーキテクチャには根本的に不向きであると結論付けられた。

Why it matters

この試みは、サーバーレスプラットフォームの特性と限界を具体的に示し、用途に応じた適切な技術選定の重要性を浮き彫りにします。

azukiazusa·2025/05/11 08:50
38
GenAIAnnouncementEN

AI エージェントがインタラクティブな UI を返すことを可能にする MCP UI

MCP UIはMCPを拡張し、AIエージェントの応答をテキストだけでなくインタラクティブなUIとして表示できるようにするフレームワークです。TypeScriptとRubyのSDKが提供されており、サーバー側(@mcp-ui/server)とクライアント側(@mcp-ui/client)に分かれています。クライアントSDKはReactコンポーネントとWebコンポーネントの両方をサポートしています。サーバー実装にはCloudflareのagentsパッケージを使用し、McpAgentクラスを継承してMCPツールを定義します。UIコンポーネントはMCPのResourceとして提供され、Resource LinkまたはEmbedded Resourceとしてツール応答に含めることができます。

  • •MCP UIはMCPを拡張し、AIエージェントがグラフ・購入フォーム・画像ギャラリーなどのインタラクティブなUIを返せるようにする
  • •TypeScript SDKは@mcp-ui/server(サーバー側)と@mcp-ui/client(クライアント側)の2つに分かれており、ReactおよびWebコンポーネントに対応
  • •CloudflareのagentsパッケージとStreamable HTTPを組み合わせてリモートMCPサーバーを実装し、createUIResource関数でUIリソースを生成する

Why it matters

AIエージェントとのインタラクションがテキスト応答を超えてリッチなUIへ進化することで、チャットインターフェース上での商取引・データ可視化・フォーム入力など、より実用的なユースケースが広がります。

azukiazusa·2025/08/09 01:49
38
GenAITutorialEN

Claude Code のツール検索ツールを有効にして MCP のトークン使用量を削減する

LLMは不要な情報がコンテキストに含まれると「コンテキストの腐敗(Context rot)」によりパフォーマンスが低下する。Claude CodeではMCPツールの定義が通常すべて事前にコンテキストウィンドウへ読み込まれ、playwright・next-devtools・serenaの3ツールだけで約39,000トークン(全体の約20%)を消費する例もある。ツール検索ツールを有効にすると、ClaudeはMCPSearchツールを使って必要なツールをキーワード検索またはツール名直接指定で動的に探し出す。これにより事前ロードが不要となり、実際に使ったツールだけがコンテキストに含まれるようになる。

  • •`ENABLE_TOOL_SEARCH=true claude` で起動するとMCPツール定義の事前ロードがなくなり、トークン使用量を大幅削減できる
  • •MCPSearchツールはキーワード検索(最大5件返却)とツール名直接指定(`select:<tool_name>`)の2つのクエリモードを持つ
  • •playwright・next-devtools・serenaの3ツール合計で約39,000トークン(コンテキスト全体の約20%)が削減対象になりうる

Why it matters

MCPツールを多数導入しているチームや個人にとって、トークンコストの削減とモデルパフォーマンスの向上が同時に見込めるため、Claude Codeをより効率的・経済的に運用できるようになる。

azukiazusa·2025/12/30 05:32
38
FrontendTutorialEN

Sapper + contentful + VercelのJamstackで高速なブログを構築する

この記事は、筆者が以前利用していたGatsby構成から、Sapper、Contentful、Vercelを用いたJamstackブログへの移行について詳述しています。Sapperを静的サイトジェネレータとして利用し、Contentfulでコンテンツを管理、そしてVercelでデプロイする一連の流れが紹介されています。特に`npm run export`コマンドで静的サイトを生成し、`vercel deploy`で簡単に公開できる点が強調されており、高い表示速度と開発効率の向上が期待できるモダンな構築手法です。

  • •Sapperを利用した静的サイト生成と、Svelteベースの軽量で高速なフロントエンド開発が可能です。
  • •ContentfulをヘッドレスCMSとして活用し、コンテンツとプレゼンテーション層を分離することで、柔軟なコンテンツ管理を実現します。
  • •Vercelによる簡単なデプロイ、CI/CD連携、およびグローバルCDNによる高速なコンテンツ配信を活用し、保守性とパフォーマンスを向上させます。

Why it matters

このJamstack構成は、開発の効率性とウェブサイトのパフォーマンス、セキュリティを高いレベルで両立させる現代的なブログ構築手法を提供します。

azukiazusa·2021/02/13 15:00
35
DevToolsTutorialEN

【TypeScript】type-challenges で学ぶ高度な型

TypeScriptの高度な型を学ぶために、`type-challenges`というGitHubリポジトリが非常に有効だと紹介されています。`infer`や`extends`を用いた条件型の基本的な使い方や、`extends`による型制約、そして`Omit`や`Pick`、`Exclude`、`ReturnType`、`Parameters`、`Awaited`などの主要なユーティリティ型の仕組みについて解説されています。問題を実際に解くことで、抽象的な概念だけでなく具体的なTypeScriptの型の挙動を深く理解し、実践的なスキルを習得できると強調しています。

  • •`type-challenges`は、TypeScriptの`infer`や`extends`を使った条件型、ユーティリティ型など、高度な型を学ぶための実践的なツールである。
  • •`infer`による型推論、`extends`による型比較と制約、そして`Omit`や`Pick`などの組み込みユーティリティ型の内部動作が理解できる。
  • •実際に問題を解くことで、TypeScriptの型システムの複雑なメカニズムに対する深い洞察と、応用力が身につく。

Why it matters

`type-challenges`を通じて高度なTypeScriptの型を習得することは、より堅牢で保守性の高いコードを書く能力を高め、複雑な型定義を理解し活用するために不可欠です。

azukiazusa·2021/10/16 15:00
35
BackendTutorialEN

君は return と await return の違いを理解して使っているか

この記事は、JavaScript/TypeScriptの非同期関数における`return Promise`と`await return Promise`の微妙ながら重要な違いを解説しています。`return Promise`はPromiseオブジェクトを直接返し、呼び出し元のPromiseの状態に直接影響を与えますが、`await return Promise`はPromiseの解決を待ってからその値を返します。この違いは、特に`finally`ブロックの実行順序に影響し、`await return`を使用することで非同期操作完了後のリソース解放などがより確実に実行されるメリットがあります。一方で、パフォーマンスやスタックトレースの違いも考慮に入れる必要があります。

  • •`return Promise`はPromiseオブジェクトを直接返すため、関数自身の`finally`ブロックがPromiseの解決前に実行される可能性がある。
  • •`await return Promise`はPromiseの解決を待ってからその値を返すため、関数自身の`finally`ブロックはPromiseの解決後に確実に実行される。
  • •`await return`はエラーハンドリングやリソース解放の確実性を高めるが、わずかなパフォーマンスオーバーヘッドやスタックトレースに違いが生じることがある。

Why it matters

この違いを理解することで、非同期処理における意図しない動作やリソースリークを防ぎ、より堅牢で予測可能なコードを書くことができるため重要です。

azukiazusa·2022/04/02 15:00
35
FrontendTutorialEN

【React】アクセシビリティに考慮したアコーディオンを実装する

この記事では、Reactアプリケーションでアクセシブルなアコーディオンを実装する方法を紹介しています。HTMLの`<details>`/`<summary>`要素では柔軟性に欠けるため、`react-accessible-accordion`というライブラリの活用を推奨しています。このライブラリを使うことで、WAI-ARIAのガイドラインに沿った構造と属性が自動的に付与され、キーボード操作やスクリーンリーダーへの対応が容易になります。基本的な使い方から、カスタムスタイリング、複数の項目を開閉できる制御アコーディオンの実装方法まで解説しており、より高度な要件にも対応可能です。開発者は、このライブラリを用いて、デザイン性とアクセシビリティを両立したアコーディオンを効率的に構築できます。

  • •「react-accessible-accordion」ライブラリは、ReactでWAI-ARIAに準拠したアクセシブルなアコーディオンを簡単に実装できる。
  • •このライブラリは、基本的な構造だけでなく、カスタムスタイリングや複数のアコーディオン項目を制御する機能も提供する。
  • •HTMLの`<details>`/`<summary>`要素よりも高い柔軟性とアクセシビリティの考慮が必要な場合に特に有効である。

Why it matters

アクセシブルなアコーディオンは、情報へのアクセス性を高め、あらゆるユーザーがWebコンテンツを円滑に利用できるユニバーサルデザインの実現に不可欠だからです。

azukiazusa·2022/10/28 15:00
35
DevToolsTutorialEN

TypeScript のような構文で OpenAPI のスキーマを定義する TypeSpec

TypeSpecは、TypeScriptに似た直感的で簡潔な構文を用いて、OpenAPIスキーマを定義するための言語です。複雑になりがちなYAMLやJSONでのOpenAPI記述の課題を解決し、API定義の可読性と保守性を大幅に向上させることを目指しています。@getや@postなどのデコレーターを活用し、HTTPメソッドやパス、リクエスト/レスポンス構造を直接的に記述できるのが特徴です。定義されたTypeSpecコードからはOpenAPI 3.xやJSON Schemaなどの形式を生成でき、Microsoftによって開発されています。

  • •TypeScriptライクな構文でOpenAPIスキーマを定義でき、従来の記述方法よりも高い可読性と簡潔性を提供します。
  • •APIのHTTP操作(GET, POSTなど)やパス、リクエスト/レスポンス構造をデコレーターを用いて直接記述できます。
  • •TypeSpecコードからOpenAPI 3.xやJSON Schemaを生成可能で、複雑なAPI定義のメンテナンス問題を解決します。

Why it matters

TypeSpecは、複雑なAPI定義の作成と保守における課題を解決し、API開発の効率と品質を向上させる革新的なアプローチを提供するため重要です。

azukiazusa·2024/01/27 04:48
35
FrontendTutorialEN

CSS トランジションの開始時のスタイルを定義する `@starting-style` ルール

これまでCSSトランジションでは、`display: none`や`content-visibility: hidden`などによって要素が非表示から表示状態に変わる際、要素の初期スタイルが定義されておらず、アニメーションが開始される前に一瞬デフォルトの位置にジャンプしてしまう問題がありました。`@starting-style`ルールは、要素が表示される直前の「開始スタイル」を明示的に定義することで、この問題が解消され、より自然で洗練されたUIアニメーションが可能になります。これにより、ユーザー体験が向上し、開発者はより制御されたトランジションを実装できます。

  • •`@starting-style`は、`display: none`などから表示状態に変わる要素のトランジション開始時のスタイルを定義します。
  • •これまでのトランジションで発生していた、アニメーション開始前の要素の「ジャンプ」現象を解消します。
  • •CSSトランジションと組み合わせて使用することで、よりスムーズで意図通りのアニメーションを実現し、ユーザー体験を向上させます。

Why it matters

`@starting-style`により、CSSアニメーションの破綻を防ぎ、より洗練されたユーザーインターフェースを簡単に実装できるようになるため、ウェブサイトやアプリケーションのUX向上に貢献します。

azukiazusa·2024/06/09 06:22
35
SecurityIncidentEN

npm の人気パッケージ 「coa」と「rc」にマルウェアが埋め込まれた

2019年11月、人気のあるnpmパッケージ「coa」と「rc」のいくつかのバージョン(coa 2.0.2, 2.1.2, 2.1.3 および rc 1.2.9, 1.3.9, 2.3.9)に悪意のあるコードが埋め込まれていることが発見されました。これは、開発者のnpmアカウントが乗っ取られたことによって行われた供給連鎖攻撃です。マルウェアは、Linux、macOS、Windows上でElectrumウォレットの秘密鍵や、Linux/macOS上でSSH/AWSの認証情報を窃取しようと試みました。これらのパッケージは非常に広範囲で使用されており、数百万の開発者やプロジェクトに影響を与える可能性がありました。npmは直ちに対策を講じ、ユーザーには安全なバージョンへのアップデートと、開発環境での認証情報のローテーションを推奨しました。

  • •人気npmパッケージの侵害: 「coa」と「rc」という非常に人気の高いnpmパッケージの特定バージョンにマルウェアが仕込まれた。
  • •サプライチェーン攻撃: 開発者のnpmアカウントが乗っ取られ、悪意のあるバージョンが公開されたことによる供給連鎖攻撃である。
  • •マルウェアの機能と影響: マルウェアはElectrumウォレットの秘密鍵やAWS/SSHの認証情報を盗むことを目的としており、数百万の開発者に影響を及ぼす可能性があった。

Why it matters

この事件は、広く利用されるオープンソースソフトウェアのサプライチェーン攻撃がもたらす深刻なリスクと、開発者アカウントのセキュリティ強化の重要性を改めて浮き彫りにしました。

azukiazusa·2021/11/06 15:00
69
SecurityTutorialEN

パスキーによる認証をブラウザで実装してみる

この記事は、WebAuthn APIを活用したブラウザでのパスキー認証の実装方法に焦点を当てています。パスキーはFIDO2規格に基づく新しいパスワードレス認証方式であり、`navigator.credentials.create()`による登録と`navigator.credentials.get()`による認証の具体的なステップが詳細に解説されています。セキュリティを確保するため、チャレンジの検証、公開鍵の保存、署名の検証といったサーバーサイドでの厳格な処理が不可欠であると強調されています。

  • •パスキー認証はWebAuthn APIを介してブラウザに実装され、登録には`navigator.credentials.create()`、認証には`navigator.credentials.get()`を使用します。
  • •パスキーは公開鍵暗号に基づき、ユーザーの認証器(デバイス)が秘密鍵を管理し、サーバーは対応する公開鍵を保存します。
  • •セキュリティ確保のため、サーバーサイドでのチャレンジ検証、認証器データの検証、署名の検証といった処理が不可欠です。

Why it matters

パスキー認証はパスワードに代わる強力なセキュリティと向上したユーザー体験を提供するため、その実装方法を理解することは現代のWebサービス開発者にとって重要です。

azukiazusa·2025/02/08 01:13
47
FrontendReleaseEN

React v19 から forwardRef が不要になる

React v19のリリースにより、Refのフォワーディングの仕組みが大幅に変更されます。これまでRefを子コンポーネントに渡す際には`forwardRef`高階コンポーネントを使用する必要がありましたが、v19からはRefを通常のpropsとして直接渡すことが可能になります。この変更は、特にUIライブラリなどで頻繁にRefを扱うコンポーネントの開発を簡素化し、ボイラープレートコードを削減します。内部的には、React Compilerがこの最適化を可能にし、Refを自動的に変換・処理することで開発体験が向上します。

  • •React v19以降、`forwardRef`を使用せずにRefを直接propsとして子コンポーネントに渡せるようになる。
  • •これにより、コンポーネントの記述が簡潔になり、特にUIライブラリの開発や共通コンポーネントの設計が容易になる。
  • •この機能はReact Compilerによって実現されており、Refの自動変換・処理が行われる。

Why it matters

この変更により、Reactコンポーネント、特にライブラリ開発においてRefの扱いが大幅に簡素化され、開発効率とコードの可読性が向上します。

azukiazusa·2024/04/27 15:00
44
FrontendTutorialEN

Next.js 型安全なルーティングを使う

Next.jsのルーティングは文字列ベースのため、動的パラメータや検索パラメータの利用時に型不一致やURL間違いによる実行時エラーのリスクがあります。本記事は、この課題を解決する`typed-routes`ライブラリの導入方法を詳細に解説。`typed-routes`は`app`ディレクトリ構造からルーティング情報を型として自動生成し、`next/link`や`router.push`使用時の間違いをコンパイル時に検知します。これにより、開発者はルーティングに関するミスを早期に発見でき、開発体験の向上と実行時エラーの削減に貢献します。

  • •Next.jsのルーティングは文字列ベースであり、動的パラメータや検索パラメータ使用時に型不一致による実行時エラーのリスクがある。
  • •`typed-routes`ライブラリを導入することで、`app`ディレクトリ構造からルーティング情報をTypeScriptの型として自動生成できる。
  • •型安全なルーティングにより、`next/link`や`router.push`利用時の間違いをコンパイル時に検出し、開発体験とアプリケーションの安定性を向上させる。

Why it matters

ルーティングの型安全性を確保することで、開発初期段階でのエラー検出を可能にし、アプリケーションの安定性と開発効率を大幅に向上させます。

azukiazusa·2024/04/28 06:46
42
GenAITutorialEN

Vercel AI SDK で MCP クライアントをツールとして利用する

この記事では、Vercel AI SDKの`tool`スキーマと`useTools`フックを用いて、MCPクライアントである`mineflayer`をAIエージェントの外部ツールとして利用するデモが解説されています。これにより、AIがユーザーの指示に基づいてMinecraftサーバー上でコマンドを実行できるようになります。Vercel AI SDKの柔軟なツール連携機能が、外部アプリケーションとの連携を容易にすることが示されています。

  • •Vercel AI SDKのツール機能(`tool`スキーマ、`useTools`フック)を使って、AIが外部アプリケーションを呼び出す仕組みを構築できる。
  • •mineflayerを基盤とするMCPクライアントをツールとして登録することで、AIがMinecraftサーバーに接続し、コマンドを送信できる。
  • •AIが外部アプリケーションと連携することで、より実践的なタスク実行や自動化の可能性が広がる。

Why it matters

このアプローチは、AIが外部のアプリケーションやサービスと連携し、現実世界のアクションを実行するための道を開くため、AIの応用範囲を大きく広げます。

azukiazusa·2025/03/30 01:22
42
BackendTutorialEN

Firebase③ Cloud Storage

Firebase Cloud Storageは、ウェブやモバイルアプリから画像、動画、音声ファイルなどのオブジェクトデータを保存・取得・削除できるサービスです。Firebase Authenticationと連携することで、ユーザー認証に基づくアクセス制御を容易に実装でき、セキュリティを確保しながらファイルを管理できます。記事では、Web SDKを使ったファイルのアップロード、ダウンロード、削除の基本的なコード例が紹介されており、セキュリティルールの設定についても触れられています。

  • •Firebase Cloud Storageは、オブジェクトデータの保存・管理サービスであり、Firebase Authenticationとの連携により安全なアクセス制御が可能。
  • •Web SDKなどを利用して、画像のアップロード、ダウンロード、削除といったファイル操作を簡単に実装できる。
  • •ストレージのセキュリティルールを設定することで、ファイルの読み書き権限を細かく制御し、不正アクセスを防ぐことができる。

Why it matters

Firebase Cloud Storageを利用することで、開発者はバックエンドのファイル管理システムを構築する手間を省き、安全かつ効率的にユーザーコンテンツを扱えるようになります。

azukiazusa·2020/05/02 15:00
38
FrontendTutorialEN

アクセシビリティが考慮された React Aria のドラッグアンドドロップ

React Ariaは、一般的にアクセシビリティが不足しがちなドラッグアンドドロップ機能に対し、`useDragAndDrop`フックを通じて包括的なソリューションを提供します。このフックは、キーボード操作(矢印キーでの移動、Space/Enterでの選択・決定)やスクリーンリーダーへの自動アナウンスをサポートし、開発者が複雑なARIA属性やフォーカス管理を自身で実装する手間を省きます。内部的なドラッグアンドドロップだけでなく、外部との連携も可能で、開発者はアクセシビリティを深く意識することなく、ユーザーフレンドリーなインタラクションを簡単に構築できます。これにより、より多くのユーザーがスムーズにドラッグアンドドロップ機能を利用できるようになります。

  • •React Ariaの`useDragAndDrop`フックは、ドラッグアンドドロップにおけるアクセシビリティ問題を解決します。
  • •キーボード操作、スクリーンリーダーへのアナウンス、ARIA属性の自動付与など、包括的なアクセシビリティ機能を提供します。
  • •開発者は複雑なアクセシビリティ対応を意識することなく、ユーザーフレンドリーなドラッグアンドドロップ機能を実装できます。

Why it matters

この機能により、ドラッグアンドドロップが困難だったユーザーもWebアプリケーションをより効果的に操作できるようになり、アクセシブルなウェブ体験が向上します。

azukiazusa·2024/09/07 06:17
38
DevToolsTutorialEN

ESLint を MCP サーバーとして実行する

この記事では、ESLintをMCP (Micro-Service Communication Protocol)サーバーとして実行し、永続的なプロセスでリント処理を行うことで、従来の実行方式の課題を解決する方法が紹介されています。各リント要求ごとにNode.jsプロセスを起動するオーバーヘッドがなくなるため、特に大規模プロジェクトでのパフォーマンスが大幅に向上します。VS CodeのESLint拡張機能もこのサーバーモードを利用しており、開発者はより迅速なフィードバックを得られるようになります。これにより、開発体験の改善に繋がると説明されています。

  • •ESLintをMCPサーバーとして実行することで、従来のNode.jsプロセス起動のオーバーヘッドを削減し、リント速度を向上させる。
  • •TypeScript Language Server (tsserver) と同様に、ESLintが永続プロセスとして動作することで、開発中のリアルタイムフィードバックが高速化される。
  • •VS CodeのESLint拡張機能は既にこのサーバーモードを利用しており、開発者は意識せずにその恩恵を受けている。

Why it matters

ESLintをサーバーとして実行することで、開発時のリント処理が大幅に高速化され、開発者はよりスムーズかつ効率的にコード品質を維持できるようになるため、開発体験が大きく向上します。

azukiazusa·2025/05/05 01:45
38
GenAITutorialEN

MCP の Structured tool output を試してみる

この記事では、Microsoft Buildで発表された「Structured tool output」機能がMicrosoft Copilot for Microsoft 365 (MCP)でどのように機能するかを検証しています。具体的には、「Send an email」ツールを使い、メール作成指示後に「JSON形式で結果を返して」と追加で指示することで、宛先や件名、本文を含む構造化されたJSON出力を得ることに成功しました。この機能は、Copilotの実行結果をプログラムで利用したり、他のシステムと連携したりする際に非常に有用であると述べられています。将来的には、Microsoft Copilot Studioでカスタムツールと組み合わせることで、より高度な連携が可能になると期待されています。

  • •Microsoft Copilot for Microsoft 365 (MCP) の「Structured tool output」機能を試す手順と結果を説明しています。
  • •「Send an email」ツールを使用し、メール作成の指示後にJSON形式での出力を要求することで、構造化されたメール情報が取得できることを示しました。
  • •この機能は、Copilotの出力を他のシステムと連携させたり、プログラム的に利用したりする際に大きなメリットがあると考えられています。

Why it matters

この機能により、Copilotの生成する情報を単なる自然言語からプログラムで処理可能な構造化データへと変換できるため、自動化や他システムとの連携可能性が大きく広がります。

azukiazusa·2025/06/28 05:47
38
DevToolsTutorialEN

Chrome DevTools MCP で AI エージェントのフロントエンド開発をサポートする

AIエージェントによる自律的なコーディングでは、コード実行結果からフィードバックを得る反復プロセスが重要ですが、フロントエンド開発ではブラウザ上での実行結果をAIが直接取得できないという課題がありました。Chrome DevTools MCPはこの課題を解決するMCPサーバーで、PuppeteerによるブラウザのAI自動操作、デバッグ情報の取得、パフォーマンストレースを実現します。Claude CodeなどのMCP対応AIエージェントであればツールを問わず利用可能で、`claude mcp add`コマンドで簡単にセットアップできます。記事では実際にWebページのパフォーマンス問題をAIが自動分析するデモが紹介されており、Web Vitalsスコアやボトルネック箇所の特定まで自動で行えることが示されています。

  • •Chrome DevTools MCPにより、AIエージェントがPuppeteerを通じてブラウザを自動操作し、コンソールログ・ネットワークログ・スクリーンショットを取得できるようになる
  • •MCP対応のAIエージェント(Claude Code、Codex、Geminiなど)であればどのツールでも利用可能で、`claude mcp add chrome-devtools npx chrome-devtools-mcp@latest`で簡単に導入できる
  • •パフォーマンストレース機能により、Web Vitalsスコアの計測やボトルネックの自動特定が可能になり、人間の介入なしにフロントエンドのパフォーマンス分析ができる

Why it matters

フロントエンド開発においてAIエージェントが「目」を持てるようになり、人間がブラウザ結果を手動で共有する手間が省けることで、完全自律型のフロントエンド開発ループが実現に近づく。

azukiazusa·2025/09/27 01:46
38
FrontendAnnouncementEN

HTML 標準でコンボボックスを実現する `<combobox>` 要素の提案

ウェブアプリケーションで頻繁に利用されるコンボボックス(検索候補の表示や国の選択など)は、これまで`<input type="text">`と複雑なARIA属性を組み合わせて実装されており、その正確な実装が困難でアクセシビリティ問題を引き起こすことがありました。このような課題を解決するため、Open UI Community Groupは、HTMLの新しい標準要素として`<combobox>`を提案しています。`<combobox>`要素は、ARAIを明示的に記述することなく、デフォルトでアクセシブルなコンボボックスを簡単に実現することを目指しており、開発者はより少ないコードで一貫性のあるUIを構築できるようになります。この提案が採用されれば、ユーザーエクスペリエンスの向上とウェブ全体のアクセシビリティ改善に大きく貢献すると期待されています。これはまだ提案段階であり、今後の標準化プロセスに注目が集まっています。

  • •現在、コンボボックスUIは複雑なARIA属性を用いた`<input type="text">`で実装されており、アクセシビリティの確保が難しいという課題がある。
  • •Open UI Community Groupは、この問題を解決するため、HTML標準要素としてネイティブでアクセシブルな`<combobox>`要素の導入を提案している。
  • •`<combobox>`は、開発者の実装負担を軽減し、デフォルトで適切なアクセシビリティを提供することで、ウェブ全体のユーザーエクスペリエンス向上に寄与することが期待される。

Why it matters

この提案は、ウェブで頻繁に使われるコンボボックスUIのアクセシビリティと開発効率を大幅に改善し、より包括的なウェブ体験を実現するために重要です。

azukiazusa·2023/11/18 11:47
38
DevToolsTutorialEN

kubectl JSONpath

この記事は、KubernetesのCLIツールであるkubectlでリソース情報をJSON形式で出力し、その出力からJSONPath式を用いて特定のデータを抽出する技術について詳しく説明しています。`{.items[*].metadata.name}`のような基本的な構文から、配列やオブジェクトからの情報取得、`range`を使った詳細な整形、さらに`?()`によるフィルタリングや`{}`で複数のフィールドを選択する方法まで、具体的な例を交えながら解説しています。これにより、kubectlの出力から必要な情報を柔軟かつ効率的に取り出すことが可能になります。

  • •kubectl get -o jsonpath='...'コマンドでKubernetesリソースから特定の情報を抽出できる。
  • •JSONPathは、配列の全要素アクセス`[*]`、条件付きフィルタリング`?()`、複数フィールド選択`{}`など、多様な式をサポートする。
  • •`range`キーワードを使用することで、抽出したデータをより複雑な形式で整形して出力することが可能になる。

Why it matters

kubectlの出力から必要な情報だけを正確に、かつプログラム的に抽出できるようになるため、スクリプト作成や自動化において非常に有用です。

azukiazusa·2021/04/24 15:00
35
FrontendAnnouncementEN

Vuetify 3 Alpha の主な変更点

Vuetify 3 Alphaは、Vue 3に特化したUIフレームワークとして登場し、内部的にTypeScriptとComposition APIを全面的に採用することで開発体験が向上しています。WebpackやViteといった様々なビルドシステムに対応し、これまで別途設定が必要だったa-la-carte(ツリーシェイキング)がデフォルトで有効になったため、バンドルサイズ削減に貢献します。テーマシステムやグリッドシステムもCSS変数やCSS Gridベースで完全に再構築され、より柔軟なカスタマイズが可能になりました。

  • •Vue 3専用となり、内部実装にTypeScriptとComposition APIを全面的に採用し、型定義が改善。
  • •a-la-carte(ツリーシェイキング)がデフォルトで有効化され、WebpackとViteの両方のビルドシステムに対応。
  • •テーマシステムとグリッドシステムがCSS変数およびCSS Gridベースで完全に刷新され、カスタマイズ性が向上。

Why it matters

これは、Vuetifyが最新のVueエコシステムに完全に適合し、開発体験とパフォーマンスを大幅に向上させるため、今後のVueプロジェクトにおけるUI開発の選択肢として重要となる。

azukiazusa·2021/12/18 15:00
35
BackendReleaseEN

Node.js の標準 API にテストランナーが追加された

Node.jsのバージョン18.7.0以降で、組み込みのテストランナーである`node:test`モジュールが利用可能になりました。この新機能により、JestやMochaといった外部のテストフレームワークに依存せず、Node.js環境内で直接テストを記述し実行できます。非同期テストへの対応、`beforeEach`などの各種フック、`only`や`skip`オプション、そしてCLIからのテスト実行やウォッチモードなど、充実した機能が提供されており、標準機能でありながら高い柔軟性を持っています。

  • •Node.js v18.7.0以降で、`node:test`モジュールが標準のテストランナーとして導入された。
  • •非同期テスト、各種フック、CLI実行、ウォッチモードなど、外部フレームワーク並みの豊富な機能を提供する。
  • •これにより、外部のテストライブラリへの依存が不要となり、Node.jsアプリケーションのテスト環境構築が簡素化される。

Why it matters

Node.jsプロジェクトにおいて外部依存を減らし、よりシンプルで効率的な開発環境のセットアップが可能になるため、開発プロセス全体の改善に貢献します。

azukiazusa·2022/05/07 15:00
35
DevToolsTutorialEN

Pa11y CI でアクセシビリティテストを GitHub Actions で実行する

この記事では、Pa11y CIを用いてWebサイトのアクセシビリティテストを自動化し、GitHub Actionsに統合する手順を詳細に説明しています。まず、Pa11y CIのインストール方法、テスト対象URL、基準(WCAG2AAなど)、除外ルールを設定する`pa11yci.json`ファイルの作成方法を紹介。次に、静的サイトをローカルでテストするために`http-server`を使い、Pa11y CIを実行する方法を示します。最後に、GitHub Actionsのワークフローを構築し、Node.js環境でPa11y CIを自動実行してアクセシビリティの問題を継続的に検出する具体的な設定例を提供しています。

  • •Pa11y CIは、`axe-core`などのランナーを使用し、WCAG基準に基づいたWebサイトのアクセシビリティテストを自動化するCLIツールである。
  • •`pa11yci.json`ファイルで、テスト対象となるURL、適用するアクセシビリティ標準(例: WCAG2AA)、無視するルールなどを柔軟に設定できる。
  • •GitHub ActionsのワークフローにPa11y CIの実行ステップを組み込むことで、プルリクエスト時などに自動でアクセシビリティチェックを実行し、開発プロセスでの品質維持・向上に貢献できる。

Why it matters

アクセシビリティテストをCI/CDに組み込むことで、開発の初期段階から継続的に問題を発見し、より包括的で高品質なWebサイト開発を実現できるため重要です。

azukiazusa·2022/12/03 15:00
35
FrontendTutorialEN

単体テストでスクリーンリーダーをシミュレートする Virtual Screen Reader

アクセシビリティ検証は通常、実際のスクリーンリーダーを用いて手動で行われるため、テストの自動化が困難でした。「Virtual Screen Reader」は、この課題を解決すべく、単体テスト内でスクリーンリーダーの動作を仮想的に再現するライブラリとして開発されました。このツールを使用することで、WebページのDOMツリーを探索し、スクリーンリーダーがコンテンツをどのように読み上げるか、ARIA属性が正しく機能しているかなどをプログラムで確認できるようになります。これにより、開発プロセスにアクセシビリティテストを組み込み、効率的に品質を向上させることが可能になります。

  • •Virtual Screen Reader (VSR)は、単体テスト環境でスクリーンリーダーの動作をシミュレートするライブラリ。
  • •実際のスクリーンリーダーを用いた手動でのアクセシビリティテストにおける自動化の難しさという課題を解決することを目指している。
  • •DOMツリーの探索や、スクリーンリーダーが読み上げるコンテンツの検証を自動で行うことを可能にする。

Why it matters

このライブラリは、Webフロントエンド開発においてアクセシビリティテストの自動化を促進し、より多くのユーザーが利用しやすいWebサイトやアプリケーションの開発に貢献します。

azukiazusa·2024/03/16 04:20
35
DevToolsTutorialEN

Storybook と Vitest の統合したコンポーネントテスト

本記事では、Storybookで定義されたコンポーネントのインタラクションを`play`関数を通じてVitestで再利用し、ブラウザ環境でテストを実行する手法が紹介されています。`@vitest/browser`とPlaywrightを組み合わせてより実環境に近いテストを実現し、さらにMSW (Mock Service Worker) を導入することでAPIモックを共通化し、テストの信頼性と開発効率を向上させるアプローチが詳しく説明されています。

  • •Storybookの`play`関数で定義したインタラクションテストをVitestで再利用し、テストコードの重複を避ける。
  • •`@vitest/browser`とPlaywrightを利用して、より実環境に近いブラウザベースのコンポーネントテストをVitestで実現する。
  • •MSWを導入してAPIモックをStorybookとVitest間で共通化し、テストの独立性と一貫性を高める。

Why it matters

このアプローチにより、フロントエンドのコンポーネントテストが高速かつ一貫性のあるものになり、開発者の生産性向上とコード品質の安定に貢献します。

azukiazusa·2024/10/06 06:39
35
GenAIAnnouncementEN

Addicted to Claude Code–Help

この記事では、あるユーザーがAnthropicのAIモデルであるClaudeが提供するコーディング支援機能に深く依存している様子が描かれています。Claudeはコードの生成、デバッグ、リファクタリングなど多岐にわたるプログラミングタスクにおいて非常に効率的で正確であるため、ユーザーは日々の開発ワークフローにおいて手放せない存在になっているようです。その高い実用性により、開発者の生産性向上に大きく貢献していることが伺えます。

  • •Claudeのコーディング支援機能は非常に高性能で、ユーザーは日常業務で手放せないと感じています。
  • •コード生成、デバッグ、リファクタリングなど、幅広い開発タスクでClaudeが活用されています。
  • •その高い利便性から、ユーザーは「中毒」と表現するほどClaudeに依存しており、AIが開発者のワークフローに深く統合されている現状を示しています。

Why it matters

この事例は、AIアシスタントがいかに開発者の生産性を劇的に向上させ、プログラミングの未来を再形成しつつあるかを示しています。

ycombinator·2026/03/07 17:12
62
GenAITutorialEN

Skill Create スキルを使用したスキルの作成と改善

Agent Skillsへの注目が高まる中、スキル作成には「非エンジニアでも作れるか」「評価をどう定量化するか」という課題が存在する。Anthropicはこれらを解決するためにskill-creatorを提供しており、スキルのゼロからの作成・既存スキルの編集・パフォーマンス測定をサポートする。skill-creator自体もAgent Skillのベストプラクティスに従って構築されており、SKILL.mdを核として、システムプロンプトへの読み込みが3段階で行われる設計になっている。スキル説明のname/descriptionは常時ロードされるため文字数制限があり、本文は500行以内が推奨される。

  • •スキルの評価は定量指標を使いにくく主観的になりがちで、継続的改善の指針も不明確という課題がある
  • •skill-creatorはスキルの作成・編集・評価・パフォーマンス測定を一貫して支援するAnthropicのプラグイン
  • •SKILL.mdの読み込みは3段階(name/description常時→本文はスキル呼び出し時→追加リソースは必要に応じて)で設計されており、コンテキスト効率を考慮している

Why it matters

スキルによる組織ナレッジの共有・自動化が進む中、評価・改善プロセスを体系化するskill-creatorは、非エンジニアを含む幅広い層がAIエージェントの恩恵を受けるための重要な基盤となる。

azukiazusa·2026/03/07 02:08
47
SecurityAnnouncementEN

pnpm の minimumReleaseAge オプションでサプライチェーン攻撃を防ぐ

npm パッケージを標的にしたサプライチェーン攻撃が増加しているが、悪意のあるパッケージの多くは公開後 1 週間以内に削除される傾向がある。pnpm 10.16.0 では `minimumReleaseAge` オプションが追加され、公開から指定した分数(例: 1440 分 = 1 日)が経過したパッケージのみをインストールする制限が設けられた。これにより、ゼロデイ的に仕込まれた悪意のあるパッケージをインストールするリスクを下げられる。一方で特定のパッケージを制限の対象外にしたい場合は `minimumReleaseAgeExclude` オプションでパッケージ名を列挙することで対応できる。

  • •pnpm 10.16.0 で `minimumReleaseAge` オプションが導入され、公開から指定期間(分単位)が経過したパッケージのみインストール可能になった
  • •悪意のある npm パッケージの多くは公開後 1 週間以内に削除されるため、このオプションはサプライチェーン攻撃に対して有効な防御策となる
  • •`minimumReleaseAgeExclude` オプションを使うと、react などの特定パッケージを制限の対象外にして常に最新版をインストールできる

Why it matters

npm エコシステムへのサプライチェーン攻撃が増加する中、設定一つで悪意のある新規パッケージを自動的に排除できるこのオプションは、プロジェクトのセキュリティ体制を手軽に強化する実践的な手段となる。

azukiazusa·2025/09/13 15:00
44
FrontendTutorialEN

Next.js の "use cache" ディレクティブによるキャッシュ制御

Next.jsの`use cache`ディレクティブは、`"use client"`や`"use server"`と同様のディレクティブで、React Server Components (RSC)内で実行される関数の戻り値をキャッシュします。これは、同じ引数で関数が再度呼び出された際に、以前計算された結果を再利用することで、高コストな計算やデータ取得の実行を回避し、パフォーマンスを向上させることを目的としています。`fetch` APIのデータキャッシュとは異なり、`use cache`はネットワークリクエストの応答ではなく、関数の実行結果そのものをキャッシュする点が特徴です。主にサーバーサイドでのレンダリング時に活用され、アプリケーションの応答性を高めます。

  • •`use cache`ディレクティブは、React Server Components内で関数の戻り値をキャッシュするために使用される。
  • •`fetch` APIのデータキャッシュ(ネットワーク応答をキャッシュ)とは異なり、`use cache`は関数の実行結果自体をキャッシュする。
  • •高コストな計算やデータ取得をメモ化し、同じ引数での再実行を避けることで、サーバーサイドレンダリングのパフォーマンスを向上させる。

Why it matters

このディレクティブは、Next.jsアプリケーション、特にReact Server Componentsを活用する際のサーバー側パフォーマンスを最適化し、より高速なユーザーエクスペリエンスを提供するために重要です。

azukiazusa·2024/11/02 05:07
42
FrontendTutorialEN

HTML だけで Shadow DOM を構築するための宣言型 Shadow DOM

この記事は、HTMLだけでShadow DOMを構築できる新しいWeb標準である「宣言型Shadow DOM(Declarative Shadow DOM; DSD)」について解説しています。従来のShadow DOMはJavaScriptの`attachShadow()`メソッドで作成されていましたが、DSDは`<template shadowroot="open">`属性を使うことで、HTMLに直接Shadow DOMを記述できるようになります。この技術の最大の利点は、Webコンポーネントのサーバーサイドレンダリング(SSR)を大幅に簡素化し、初期表示時の描画パフォーマンス向上やFOUC(スタイルが適用されるまでのちらつき)の防止に貢献することです。現在、Chrome、Edge、Operaでサポートされており、他のブラウザも実装を進めています。

  • •HTMLのみでのShadow DOM構築: 宣言型Shadow DOMは、JavaScriptを使わず`<template shadowroot="open">`属性を用いてHTML内でShadow DOMを直接定義できる新しい標準です。
  • •SSRと初期表示の改善: Webコンポーネントのサーバーサイドレンダリング(SSR)を効率化し、初期表示の高速化とFOUC(スタイルが適用されるまでのちらつき)の防止に大きく寄与します。
  • •ブラウザサポートと将来性: 現在、Chrome、Edge、Operaでサポートされており、FirefoxやSafariも実装に向けて動いているため、今後のWeb開発において重要な技術となることが期待されます。

Why it matters

宣言型Shadow DOMは、WebコンポーネントのSSRと初期ロードパフォーマンスを根本的に改善し、より高速で堅牢なWebアプリケーション開発を可能にするため重要です。

azukiazusa·2024/10/19 06:45
41
DevToolsTutorialEN

モノレポで GitHub Actions の jest coverage report を動かす

モノレポ環境でJestのカバレッジレポートをGitHub Actionsに統合する際、`coverage-action`がデフォルトでサブプロジェクトの絶対パスを正しく扱えない問題が発生します。本記事では、この問題を解決するために、各サブプロジェクトでJestテストを実行し`cobertura`形式のカバレッジファイルを生成する方法を提案しています。生成された複数の`cobertura-coverage.xml`ファイルを`coverage-action`にグロブパターンで渡すことで、モノレポ全体としてのカバレッジレポートを効果的にGitHub Actions上で表示できるようになります。これにより、開発者はモノレポ内のコード品質を効率的に追跡できます。

  • •モノレポでJestのカバレッジレポートをGitHub Actionsに統合する際、`coverage-action`がサブプロジェクトの絶対パスを認識できない問題がある。
  • •各サブプロジェクトで`jest --coverage --coverageReporters=text --coverageReporters=cobertura`を実行し、`cobertura-coverage.xml`ファイルを生成する。
  • •生成された複数の`cobertura-coverage.xml`ファイルを`coverage-action`にグロブパターン(例: `**/cobertura-coverage.xml`)で渡すことで、モノレポ全体のカバレッジを報告できる。

Why it matters

この方法は、モノレポにおけるGitHub Actions上でのJestカバレッジレポートの正確かつ効率的な表示を可能にし、開発者がコード品質を維持・向上させる上で役立ちます。

azukiazusa·2022/11/26 15:00
38
BackendTutorialEN

TypeScript で MCP サーバーを実装し、Claude Desktop から利用する

この記事では、クラウドベースのAIモデルであるClaude 3.5 Sonnetが持つファイルアップロードや直接実行の制限を克服するため、TypeScriptで独自のMCPサーバーを構築するプロセスを詳述しています。構築したサーバーは、Claude Desktopのローカルツール実行機能を通じて利用され、AIがMinecraftサーバーと対話するための橋渡しをします。これにより、AIはローカル環境で直接コマンドを実行し、よりリッチなインタラクションが可能になります。さらに、`mc-protocol-client`ライブラリを利用してMinecraftプロトコルのハンドリングを行う方法も解説されています。

  • •Claude 3.5 Sonnetのファイルアップロードや直接実行の制約を、ローカルで動作するツール連携で解決する。
  • •TypeScriptと`mc-protocol-client`ライブラリを用いて、Minecraft Protocolを解釈・実行するカスタムサーバーを実装する。
  • •Claude Desktopのローカルツール実行機能を利用し、AIからカスタムMCPサーバー経由でMinecraftサーバーへコマンドを送信・実行する。

Why it matters

これは、AIモデルのローカル環境での活用範囲を広げ、クラウドAIの制約を受けずにAIが多様なツールと連携できる可能性を示しています。

azukiazusa·2025/03/14 10:59
38
DevToolsTutorialEN

Docker の MCP Toolkit を試してみる

DockerのMCP Toolkitは、異なるCPUアーキテクチャ向けDockerイメージのクロスビルドプロセスを簡素化するツール群です。著者は、シンプルなウェブアプリケーションを例に、このツールキットを使ってamd64とarm64の両プラットフォームで動作するDockerイメージを構築する手順を試しました。具体的には、`docker buildx create`でビルダーを設定し、`docker buildx build`コマンドでマルチプラットフォームイメージを作成・プッシュする流れを実践しています。これにより、M1 MacのようなARMベースの環境でも、従来のx86-64環境でも動作する柔軟なコンテナイメージを提供できることが示されています。最終的に、GitHub Actionsとの連携の可能性にも言及しており、CI/CDパイプラインへの組み込みが期待されます。

  • •MCP Toolkitは、`docker buildx`を活用し、マルチプラットフォーム対応のDockerイメージ作成を容易にする。
  • •ビルドキャッシュを効率的に利用することで、異なるアーキテクチャ向けのイメージを高速かつ安定して構築できる。
  • •GitHub ActionsなどのCI/CDパイプラインに組み込むことで、開発からデプロイメントまでのプロセスを自動化・効率化できる。

Why it matters

異なるCPUアーキテクチャが混在する現代の環境において、単一のDockerイメージで多様なプラットフォームに対応できるため、開発とデプロイメントの柔軟性と効率を大幅に向上させます。

azukiazusa·2025/05/10 01:10
38
DevToolsTutorialEN

サンドボックス環境を MCP サーバーで提供する Container Use

本記事では、Minecraft: Pi Edition (MCP) サーバーのプログラム開発において、Dockerコンテナを用いたサンドボックス環境の構築方法を解説しています。Raspberry Piなどの限られたリソースで開発を行う際、Dockerを使うことでホスト環境を汚さずに独立した開発環境を簡単に準備・破棄できます。具体的な手順として、Dockerfileでのイメージ作成、docker-composeでのコンテナ管理、SSH経由での開発、そしてVS Code Remote - Containersの活用が紹介されており、効率的かつ安全な開発フローが実現可能です。

  • •Dockerコンテナを利用することで、MCPサーバーの開発に特化したサンドボックス環境を容易に構築できる。
  • •Dockerfileとdocker-compose.ymlを用いて、MCPサーバーと開発環境の隔離と管理を効率化する。
  • •VS Code Remote - Containersのようなツールを活用することで、コンテナ内の開発体験を向上させ、よりシームレスな開発が可能になる。

Why it matters

このアプローチにより、開発者はMCPサーバーのプロジェクトでホスト環境を汚すことなく、隔離された環境で迅速かつ安全に開発・テストを進めることができます。

azukiazusa·2025/07/13 10:44
38
DevToolsTutorialEN

MCP のツールアノテーションでユーザーにヒントを提供する

MCPはLLMが外部ツールと連携するための標準プロトコルで、ツール実行時にユーザーの許可が必要になるケースがある。ツールアノテーションは、ツールの性質(読み取り専用か、破壊的か、冪等か等)をクライアントやユーザーに伝えるヒント情報として機能する。アノテーションの種類には `readOnlyHint`・`destructiveHint`・`idempotentHint`・`openWorldHint` などがある。ただしこれらはあくまでヒントであり、実際の動作を保証するものではないため、セキュリティ判断の根拠にはならない。記事ではTypeScript SDKを使ったTODOリスト管理MCPサーバーを例に、アノテーションの設定方法と表示を実践的に解説している。

  • •MCPツールアノテーションは `readOnlyHint`・`destructiveHint`・`idempotentHint`・`openWorldHint`・`title` の5種類があり、ツールの動作特性をクライアントに伝えるヒントとして機能する
  • •アノテーションはあくまで「ヒント」であり、MCPサーバーが実際の動作を保証するものではないため、セキュリティ上の判断基準として使用してはならない
  • •TypeScript SDKを使ったTODOリスト管理サーバーの実装例で、`add_todo`(書き込み)と `list_todos`(読み取り専用)にそれぞれ適切なアノテーションを設定する方法を具体的に示している

Why it matters

MCPツールアノテーションを適切に設定することで、LLMがツールを呼び出す際のユーザー体験と意思決定の質が向上し、意図しない破壊的操作のリスクを低減できる。

azukiazusa·2025/10/04 01:18
38
FrontendTutorialEN

親要素のスタイルの基づいてスタイルを適用するコンテナスタイルクエリー CSS

コンテナスタイルクエリーは、CSSの新たな提案であり、親要素のカスタムプロパティ(CSS変数)の状態に基づいて子要素にスタイルを適用することを可能にします。従来のコンテナクエリーが親のサイズによってスタイルを変化させるのに対し、スタイルクエリーはテーマや状態に応じたスタイリングを実現します。これは、コンポーネント指向の開発において、親コンポーネントが持つスタイル情報に基づいて子コンポーネントの見え方を制御する際に非常に強力なツールとなります。特に、テーマの切り替えやコンポーネントの状態管理(例:ダークモード、アクティブ状態)が、より効率的かつ宣言的に行えるようになる点が注目されます。

  • •コンテナスタイルクエリーは、親要素のCSSカスタムプロパティ(CSS変数)の値に基づいてスタイルを適用するCSSの新機能です。
  • •従来のコンテナクエリー(サイズに基づくスタイル適用)とは異なり、親のスタイル状態によって子要素の表示を変更できます。
  • •これにより、テーマの適用やコンポーネントの状態管理(例:ダークモード、バリアント)がより柔軟かつ宣言的に実装できるようになります。

Why it matters

この機能は、コンポーネントの再利用性を高め、親コンポーネントのスタイル状態に基づいて子コンポーネントの見た目を簡単に制御できるようになるため、より堅牢で柔軟なUI開発を可能にします。

azukiazusa·2024/03/30 05:12
38
GenAITutorialEN

Kubernetes Tips

この記事では、Kubernetesのデバッグ、リソース管理、運用効率向上に役立つ様々なヒントが提供されています。特に、`kubectl debug`コマンドとエフェメラルコンテナを用いた効果的なデバッグ手法や、Podのリソース確保と上限設定(RequestsとLimits)の重要性が強調されています。また、`Kube-shell`や`k9s`といった便利なCLIツールの活用も紹介されており、開発者の生産性向上と安定したシステム運用に貢献します。

  • •`kubectl debug`コマンドとエフェメラルコンテナを活用し、実行中のPodのデバッグを効率的に行う。
  • •Podのリソース設定において、RequestsとLimitsを適切に設定することで、システムの安定性とリソースの最適利用を図る。
  • •`Kube-shell`や`k9s`といったKubernetes特化のCLIツールを導入し、コマンド操作の生産性と視認性を向上させる。

Why it matters

これらのヒントを実践することで、Kubernetes環境におけるデバッグ作業が迅速化し、リソースの適正な管理によりシステムの安定性が向上し、結果として開発者の生産性とサービスの信頼性が高まります。

azukiazusa·2021/04/03 15:00
35
FrontendTutorialEN

アクセシビリティを自動で検査する仕組みを整える

著者は、Vue.jsプロジェクトでアクセシビリティを確保するための自動検査プロセスを詳細に説明しています。まず、`eslint-plugin-vuejs-accessibility`を用いた静的解析により、コードレベルでの問題を早期に発見する重要性を強調。次に、`Playwright`と連携した`axe-core`を使用してE2Eテストで広範囲なアクセシビリティチェックを行う方法や、`Vue Testing Library`と`Jest`を組み合わせたコンポーネントテストでの`axe-core`の活用法を具体的に示しています。これらのツールを組み合わせることで、開発フェーズごとにアクセシビリティ問題を検知し、網羅的かつ効率的なテスト体制を構築できると述べています。ただし、自動検査はあくまで補助であり、最終的な品質保証には専門家による手動検査が不可欠であることも補足しています。

  • •Vue.jsプロジェクトのアクセシビリティ検査には、静的解析(`eslint-plugin-vuejs-accessibility`)、コンポーネントテスト(`axe-core` + `Jest` + `Vue Testing Library`)、E2Eテスト(`axe-core` + `Playwright`)の組み合わせが効果的である。
  • •`axe-core`は、E2Eテストフレームワーク(`Playwright`)やコンポーネントテストフレームワーク(`Jest`)と連携することで、実行時にアクセシビリティルールに違反する問題を自動的に検出できる。
  • •自動検査は初期段階での問題発見に役立つが、網羅的な検証には専門家による手動テストが不可欠であり、自動検査はあくまでその支援ツールとして位置づけられる。

Why it matters

開発の初期段階からアクセシビリティの自動検査を導入することで、問題の早期発見と修正が可能になり、ユーザー体験の向上と手戻りコストの削減に繋がるため重要です。

azukiazusa·2022/01/29 15:00
35
FrontendTutorialEN

AngularJS のチュートリアルを React にリプレイスしてみた③

AngularJSのチュートリアルをReactで再構築するシリーズの第3弾として、Reactアプリケーションにおける状態管理の課題を取り上げ、その解決策としてReduxが紹介されています。Reduxの3原則(単一の真実の源、状態の読み取り専用、純粋関数による変更)が説明され、アクション、リデューサー、ストアの作成を通じてReduxの状態管理システムを構築する方法が具体的に示されています。また、`react-redux`を用いてReactコンポーネントとReduxストアを連携させる手順も解説されており、大規模なアプリケーションにおけるReduxの有効性と、その導入によるボイラープレート増加のトレードオフにも言及しています。

  • •Reactにおける複雑な状態管理の課題を解決するため、Reduxを導入する意義と基本的な概念を説明。
  • •Reduxの3原則(Storeは一つ、Stateは読み取り専用、変更は純粋なReducerで行う)と、Fluxアーキテクチャとの関連性を解説。
  • •アクション定義、リデューサー実装、ストア設定、`react-redux`を使ったコンポーネント接続まで、具体的なコード例を交えながらReduxの実装手順を詳細に解説。

Why it matters

現代のWebアプリケーション開発において、複雑化するフロントエンドの状態管理は重要な課題であり、Reduxはその構造化されたアプローチで大規模アプリケーション開発の効率と保守性を高めるため、その理解は非常に価値があります。

azukiazusa·2022/08/13 15:00
35
FrontendReleaseEN

Storybook v8 の React Server Components サポート

Storybook v8では、React Server Components (RSC) のサポートが導入され、特にNext.jsでRSCを活用する開発者にとって大きな進歩となります。このバージョンアップにより、StorybookはRSCをClientコンポーネントとしてレンダリングする仕組みを取り入れ、RSC固有のビルドエラーを回避しながらコンポーネントのプレビューを実現します。具体的には、`storybook/next` プリセットを使用することでNext.jsのRSC環境をエミュレートし、RSCとClientコンポーネントが混在する複雑なアプリケーションでもStorybookを安定して利用できるようになります。これにより、モダンなReact開発におけるコンポーネントの分離とテストの体験が向上します。

  • •Storybook v8はReact Server Components (RSC) のネイティブサポートを導入し、RSCを用いるNext.jsアプリケーションのコンポーネント開発を強力に支援します。
  • •RSCをClientコンポーネントとしてレンダリングする特別な仕組みにより、RSC特有のビルドエラーを回避し、Storybook上でのコンポーネントのプレビューと検証を可能にします。
  • •`storybook/next` プリセットを利用することでNext.jsのRSC環境をエミュレートし、RSCとClientコンポーネントが混在するモダンなアプリケーションにおけるStorybookの利用が安定します。

Why it matters

このサポートにより、開発者はReact Server Componentsを積極的に採用するモダンなReactアプリケーションでもStorybookを継続して利用でき、コンポーネント開発の効率性と信頼性が大幅に向上します。

azukiazusa·2023/12/09 09:17
35
FrontendAnnouncementEN

Remix v2.9 で導入された Single Fetch

Remix v2.9で導入された「Single Fetch」は、従来のネストされたルーティングにおける複数の`loader`からのデータ取得を最適化する機能です。以前はルート階層の`loader`ごとに個別のHTTP GETリクエストが発生していましたが、Single Fetchにより、これらが単一のHTTP POSTリクエストに集約されます。サーバーはこの単一リクエスト内で複数の`loader`を並行処理し、結果をまとめて単一のJSONレスポンスとして返します。これによりネットワークの往復回数が大幅に削減され、特に低速なネットワーク環境下でのパフォーマンス向上が期待されます。

  • •Remix v2.9で導入されたSingle Fetchは、ルーティング時のデータ取得を単一のHTTP POSTリクエストに統合します。
  • •これにより、ネストされたルートの`loader`ごとに発生していた個別のデータリクエストがなくなり、ネットワークの往復回数が削減されます。
  • •サーバー側で複数の`loader`が並行処理され、一括で結果が返されるため、データ取得のウォーターフォール問題が解消され、パフォーマンスが向上します。

Why it matters

この機能は、ネットワークリクエスト数を減らし、特に低速なネットワークやモバイル環境でのRemixアプリケーションのデータ読み込み速度とユーザー体験を大幅に向上させるため重要です。

azukiazusa·2024/04/27 05:08
35