【ITニュース解説】Day 22 - Alert Component Part 1 - Alert List and Alert Components
2025年09月20日に「Dev.to」が公開したITニュース「Day 22 - Alert Component Part 1 - Alert List and Alert Components」について初心者にもわかりやすく解説しています。
ITニュース概要
Webサイトの通知表示に使われる「アラートコンポーネント」とそのリストを、Vue 3、Angular 20、Svelte 5の主要JavaScriptフレームワークで作成した。DaisyUIとTailwindCSSでUIを構築し、コンポーネント間のデータ連携やイベント通知の実装方法を学び、再利用可能なUI部品の基本を習得した。
ITニュース解説
このニュース記事は、ウェブアプリケーション開発において非常に一般的に使われる「アラートコンポーネント」という部品を、代表的な3つのJavaScriptフレームワーク(Vue 3、Angular 20、Svelte 5)でどのように作成するかを、システムエンジニアを目指す初心者にも分かりやすく解説している。アラートコンポーネントとは、ユーザーに何らかのメッセージ(情報、成功、警告、エラーなど)を伝えるために表示される小さなポップアップやバナーのようなもので、ウェブサイトのあちこちで目にすることができるUI要素だ。
システムエンジニアを目指す上で、このようなUI(ユーザーインターフェース)部品を効率的に、そして再利用可能な形で作成する技術は非常に重要になる。この解説では、コンポーネント指向開発の基本的な考え方と、各フレームワークにおけるその実現方法を具体的に説明する。
まず、開発の共通基盤として「DaisyUI」というUIコンポーネントライブラリと「TailwindCSS」というユーティリティファーストのCSSフレームワークが用いられている。DaisyUIは、TailwindCSSの上に構築されており、あらかじめデザインされた様々なUI部品を提供してくれるため、開発者はデザインに時間をかけずに機能の実装に集中できる。TailwindCSSは、HTMLに直接スタイリングのためのクラスを追加していくことで、柔軟かつ高速にデザインを適用できるのが特徴だ。記事では、これらのライブラリを各フレームワークのプロジェクトにインストールし、設定する方法から説明が始まる。
次に、このプロジェクトの核となる「アラートコンポーネント」と、それらをまとめて表示する「アラートリストコンポーネント」という二つの部品の作り方に焦点を当てている。 最初に作成するのは「アラートリストコンポーネント」で、これはDaisyUIから提供されている情報、成功、警告、エラーといった様々な種類のアラートのHTMLコードをそのままコピーして配置するところから始める。これは、まず全体の構造を把握し、それから個々のアラートを再利用可能な部品(コンポーネント)として切り出すという、一般的な開発手法の良い例だ。
そして、その個々のアラートを「アラートコンポーネント」として独立させる。このアラートコンポーネントを再利用可能にするためには、アラートの種類(情報、成功など)、アイコン、表示するメッセージといった要素を、外部から「プロパティ(Props)」として受け取れるようにする必要がある。
具体的には、アラートの種類を受け取るtypeというプロパティを定義し、このtypeの値に基づいて、アラートの見た目を制御するCSSクラスを動的に生成する。例えば、typeがinfoであればalert-infoというクラスを、successであればalert-successというクラスをHTML要素に適用するようにしている。これにより、一つのアラートコンポーネントのコードで、様々な種類のアラートを表現できる。
また、アラートの種類に応じて表示するアイコンも変わる。記事では、v-ifやif-else-if、@ifといったフレームワークの機能を使って、typeの値に基づいて適切なSVGアイコンを条件付きで描画する方法が示されている。ただし、この方法はアイコンの種類が増えるとコードが複雑になるため、より拡張性の高い方法(パート2で解説)があることにも触れている。
アラートに表示するメッセージは、「スロット(Slot)」や「スニペット(Snippet)」、「NgContent」といったフレームワークの機能を使って柔軟に受け渡す。これらの機能は、親コンポーネントから子コンポーネントの特定の場所にコンテンツ(ここではアラートメッセージ)を埋め込むための仕組みであり、コンポーネントの再利用性を高める上で非常に重要だ。例えば、アラートコンポーネントの内部に<span><slot /></span>と記述しておけば、親コンポーネントからは<Alert>ここにメッセージ</Alert>のように、タグの間にメッセージを記述するだけで、それが子コンポーネントのslotの位置に表示されるようになる。
さらに、アラートには「閉じるボタン」を追加する機能も実装されている。このボタンがクリックされたときに、アラート自身を非表示にするだけでなく、親コンポーネント(アラートリスト)に対して「このアラートは閉じられたよ」というイベントを通知する必要がある。この「子から親へのイベント通知」の仕組みは、フレームワークによって表現が異なる。
Vue 3ではdefineEmitsを使ってカスタムイベントを定義し、emits('closed', type)のようにイベントを発行する。親コンポーネントは@closed="handleClosed"のようにイベントを購読する。Svelte 5では、親コンポーネントが子コンポーネントに「コールバック関数」をプロパティとして渡すことで実現する。子がその関数を呼び出すことで親に通知する。Angular 20ではoutputデコレータを使ってイベントエミッタを定義し、emit(type())でイベントを発行する。親コンポーネントはoutputバインディング(closeNotificationイベント)を購読する。
これらの仕組みは、いずれも子コンポーネントが親コンポーネントに影響を与えるための標準的な方法であり、コンポーネント間の連携を理解する上で不可欠だ。
個々のアラートコンポーネントが完成したら、いよいよ「アラートリストコンポーネント」でそれらを複数表示する。アラートリストコンポーネントは、v-forや#each、@forといったフレームワークの繰り返し構文を使って、アラートのデータ配列をループ処理し、各データに対してアラートコンポーネントを描画する。このとき、先ほど実装したプロパティ(type、messageなど)をアラートコンポーネントに渡し、閉じるイベントも購読して適切な処理を行う。
最後に、「Appコンポーネント」が登場する。これはアプリケーション全体のルートとなるコンポーネントで、アラートのデータ(種類とメッセージの配列)を保持し、それをアラートリストコンポーネントにプロパティとして渡す役割を担う。これにより、データの流れはAppコンポーネントからアラートリストコンポーネントへ、そして個々のアラートコンポーネントへと一方向に流れていくことになる。
このように、このニュース記事は、ウェブアプリケーション開発におけるコンポーネント指向の基本的な考え方、すなわちUIを小さな部品に分割し、それらを組み合わせて大きなアプリケーションを構築していくプロセスを、具体的なコード例を交えながら体系的に解説している。各フレームワークで機能の実現方法は異なるが、プロパティによるデータ受け渡し、イベントによる通知、動的なコンテンツ描画といった概念は共通しており、これらを理解することがシステムエンジニアとしての一歩となるだろう。このパート1では基礎を固め、今後はアイコンの動的描画やアラートの再表示など、より高度な機能の実装へと進んでいく計画である。