SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

再利用性とカプセル化のためのWeb Componentsを基礎から学ぶ

進化し続けるフロントエンド技術「Web Components」はライブラリ不要!――気軽に始めて開発の生産性を高めよう

再利用性とカプセル化のためのWeb Componentsを基礎から学ぶ 第1回

  • X ポスト
  • このエントリーをはてなブックマークに追加

Web Components とは

 再利用性やカプセル化について理解が深まり、UI部品の必要性が見えてきたかと思います。こういった課題感を解決するために、各ブラウザの開発元が協力しながら長い期間を費やして整備されたのが、「Web Components」と呼ばれるJavaScript向けのAPI機能群です。

 図1:Web Componentsの公式ドキュメント

 JavaScriptでいくつかの機能を呼び出すことによって、<my-great-beautiful-button> のような標準にはないHTMLタグを自作して再利用することができます(リスト1)。

[リスト1]自作のHTMLタグを再利用できる
<div>
  <my-great-beautiful-button>
    <span slot="label">submit now!</span><!-- (1) 表示内容が差し替え可能 -->
  </my-great-beautiful-button>
</div>
<div style="margin-top: 8px;">
  <!-- (2) 独自の属性を渡すこともできる -->
  <my-great-beautiful-button backgroundColor="#008CCF" color="#FFFFFF" >
    <span slot="label">submit now!</span>
  </my-great-beautiful-button>
</div>

 リスト1をHTMLに埋め込んで実行すると、図2のようになります。

図2:再利用したボタン

 通常の <button> にスタイルを当てて、角丸やパディングなどで見た目を整えてみました。(1)の要素を差し替えればボタンの表示テキストを変更できたり、(2)で属性を書き換えれば背景色やテキスト色を任意の色にできたりと、拡張性を持った要素も作成できます。

 この独自の要素の内部で利用しているCSSスタイル定義は要素の外側に影響を与えませんし、要素の外側で定義したスタイルが要素の内部へ影響を与える方法は限られます。どうやらこれは、再利用性とカプセル化を実現してくれそうです。

Web Componentsの3要素

 さて、Web Componentsの簡単な例を見て、何ができそうな技術なのかをざっくりと触れられたところで、そろそろWeb Componentsとはどんな技術なのかについてお話ししておきましょう。

 公式ドキュメントによれば、Web Componentsは次に挙げる3つの主要な技術の組み合わせで成り立っています。

  • カスタム要素(Custom Elements)
  • シャドウ DOM(Shadow DOM)
  • HTML テンプレート(HTML Templates)

 細かいAPIの解説については次回以降に行うとして、今回は概要を押さえていきましょう。

 カスタム要素は、すでに例示したように独自のHTMLタグの表示や振る舞いを定義する機能です。この機能によって定義されたカスタム要素は、通常のHTMLタグと同様にWebサイト制作に利用できます。

 シャドウDOMは、カプセル化された「隠しDOMツリー」を生成し、通常のDOMツリーに紐付ける機能です。この「隠しDOMツリー」は、通常のDOMツリーをは別にレンダリングされるため、通常のDOMツリーから影響を受けたり、影響を与えたりする心配をせずに要素を作成できます。

 HTMLテンプレートは、<template><slot> 要素を利用して、再利用可能なHTML構造を定義する機能です。カスタム要素の内部でも利用でき、文書構造を再利用したい場合に重宝します。

 上記3点の中で特にわかりづらいのがシャドウDOMなので、少し補足します。開発者ツールでDOMツリーの自作タグを配置した箇所を見てみると、#shadow-root という項目が表示されています(図3)。これが隠された状態のシャドウDOMツリーです。

図3:Dev ToolsとシャドウDOM

 シャドウDOMツリーは通常のDOMツリー構築とは別のライフサイクルでレンダリングされるため、開発者ツールでも一旦は隠された状態で表示されます。レンダリングがひと段落した以降は、図4のようにシャドウDOMの内部を展開して確認することもできます。

図4:シャドウDOMを展開して実装を確認する

 カスタム要素に紐づけられたシャドウDOMの中に隠蔽される形で、HTML文書とスタイルが定義されている様子が見えました。

 このように、Web Componentsで独自の要素を作成する際は、まずカスタム要素を定義し、その中に作成したシャドウDOMツリーに文書構造やスタイルの定義を行っていくことになります。

次のページ
カスタム要素を作ってみる

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
再利用性とカプセル化のためのWeb Componentsを基礎から学ぶ連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 中川幸哉(ナカガワユキヤ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/15921 2022/06/03 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング