SHOEISHA iD

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

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

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

Web ComponentsのUIライブラリ「Ionic Framework」を解説──既存のデザインシステムを活用する方法とは?

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

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

Ionic Framework

 Ionic Framework(アイオニックフレームワーク)は、Ionic社が開発している、モバイルアプリ開発フレームワークです。

図1:Ionic FrameworkのWebサイト
図1:Ionic FrameworkのWebサイト

 モバイルアプリといえば、AndroidであればKotlin言語(Jetpack Compose)、iOSアプリであればSwift言語(Swift UI)でUIを組むのが一般的です。一方で、Ionic FrameworkはWeb技術に寄り添った開発体験のために、ブラウザ技術を流用してUIを表示しています。そのため、HTML、CSS、JavaScriptを用いてモバイルアプリを開発できるのです。

 また、Ionic Frameworkはモバイルアプリのよくある画面部品を広く押さえたデザインシステムを構築しており、Web Components仕様で振る舞いとスタイルを整備したUIライブラリを構築しています。本連載で紹介してきたLitではなく、Ionic社が開発したStencilというフレームワークでWeb Componentsの画面部品を実装してありますが、最終的にはWeb Componentsの仕様にしっかりと則ったカスタム要素が提供されるので、HTMLファイルやLit製のコンポーネントからでも問題なく利用できます。

 Ionic Frameworkを用いたモバイルアプリ開発では、Web Components製のカスタム要素を、さらにAngularReactVueといったフレームワークで加工したものを利用することで、大規模なアプリケーションの状態管理にも耐えられるようになっています。

 また、Capacitorというモバイルアプリエンジンの上でこれらを動かすことで、Webの技術で作られた画面群がAndroidアプリやiOSアプリとして動作できるようになっています。

図2:Ionic FrameworkとCapacitorを組み合わせるとモバイルアプリが作れる
図2:Ionic FrameworkとCapacitorを組み合わせるとモバイルアプリが作れる

 さて、このようにさまざまな技術を組み合わせてモバイルアプリを組み上げるIonic Frameworkですが、デザインシステムとしてのエッセンスはWeb Components部分に凝縮されています。簡単なWebサイトを作るだけなら、Web Components製のUIライブラリとしてIonic Frameworkを利用するだけでも、十分な価値があるのです。

 本記事では、デザインシステムがWeb Components実装に落とし込まれたUIライブラリとしてのIonic Frameworkに着目し、実際にブラウザ上で動かしてみます。もし、本記事をきっかけにIonic FrameworkのUIが気に入った場合は、もう少し学習の範囲を広げて、Node.jsやNPM、Angularなどを学び、モバイルアプリをストアに公開できるところまで進んでみてください。

はじめてのIonic Framework

 それでは、実際にIonic Frameworkの画面部品をブラウザに表示してみましょう。Ionic Frameworkは、通常はNode.jsのパッケージマネージャであるNPMを用いてセットアップすることが想定されています。

 しかし、本連載ではNPMを用いずにブラウザの機能のみでライブラリを利用したいので、script要素へCDN(コンテンツ配信ネットワーク)サービスのURLを指定して、ライブラリを読み込む方式をとります。CDNを利用する場合のインストール方法は、こちらのドキュメントに記載されています。

 まずは簡単な例で、動作することを確認してみましょう。リスト1のHTMLファイルを用意して、何らかのWebサーバーに設置し、ブラウザで表示してみてください。

[リスト1]ionic-sample.html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Ionic FrameworkでリッチなUIを扱う</title>

  <!-- (1) Ionic Frameworkのライブラリ読み込み (ES Modules) -->
  <script type="module" src="https://cdn.jsdelivr.net/npm/@ionic/core/dist/ionic/ionic.esm.js"></script>
  <!-- (2) Ionic Frameworkのライブラリ読み込み (ES Modules非対応ブラウザ向け) -->
  <script nomodule src="https://cdn.jsdelivr.net/npm/@ionic/core/dist/ionic/ionic.js"></script>
  <!-- (3) Ionic Frameworkのスタイルシート読み込み -->
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ionic/core/css/ionic.bundle.css" />

</head>
<body>
  <!-- (6) Ionic Frameworkのコンポーネントを使う -->
  <ion-app>
    <!-- (7) ヘッダー -->
    <ion-header>
      <ion-toolbar>
        <ion-title>Ionic FrameworkでリッチなUIを扱う</ion-title>
      </ion-toolbar>
    </ion-header>
    <!-- (8) コンテンツ -->
    <ion-content class="ion-padding">
      <!-- (9) テキストを表示 -->
      <ion-text color="primary">color=primaryのテキストです</ion-text>
      <!-- (10) ボタンを表示 -->
      <ion-button>
        <!-- (11) ボタンの左端にアイコンを表示 -->
        <ion-icon slot="start" name="add-circle"></ion-icon>
        追加
      </ion-button>
    </ion-content>
  </ion-app>
  
  <!-- (4) Ioniconsのライブラリ読み込み (ES Modules) -->
  <script type="module" src="https://cdn.jsdelivr.net/npm/ionicons/dist/ionicons/ionicons.esm.js"></script>
  <!-- (5) Ioniconsのライブラリ読み込み (ES Modules非対応ブラウザ向け) -->
  <script nomodule src="https://cdn.jsdelivr.net/npm/ionicons/dist/ionicons/ionicons.js"></script>
</body>
</html>

 リスト1をブラウザに表示すると、図3のような表示になります。

図3:ionic-sample.htmlをブラウザに表示した
図3:ionic-sample.htmlをブラウザに表示した

 セットアップは簡単です。公式ドキュメントの通りに、 <head>要素の中に(1)(2)のJavaScript読み込みと(3)のCSS読み込みを記載し、 <body>要素の末尾に(4)(5)のJavaScript読み込みを記載するだけです。

 (1)(2)はWeb Componentsで作成した画面部品群の読み込み、(3)は個別のカスタム要素に隠蔽しなかった汎用的なスタイルの読み込みで、この3つは必ず記載する必要があります。(4)(5)は、Ionic Frameworkの独自のアイコン集であるIonicons(アイオニコンズ)を利用したい場合に読み込みます。

 Ioniconsの利用はオプションではありますが、利用することでUIが華やかになるので、ぜひ利用すると良いでしょう。

 (6)の <ion-app>と、その内側が、Ionic Frameworkの提供するカスタム要素による実装になります。(7)の<ion-header>は画面上部に固定したUIを配置するためのレイアウト用カスタム要素です。実際にUIとして表示されている「影がついたヘッダー」は、その直下に指定した<ion-toolbar>によって表示されています。(8)の<ion-content>がWebサイトの本文やWebアプリのメインコンテンツを表示する部分です。

 今回は(3)で読み込んだCSSを適用してpaddingを付けるためにion-paddingのクラス指定を行いました。(9)はテキスト表示です。デザインシステムのテーマ機能で定義したカラーパレットの色の名前をcolor属性に指定することで、文字の色を変えることができます。使用できる色の名前は、公式ドキュメントのテーマに関するページの「配色」の項で確認できます。

 執筆時点では、図4のような色が使用できました。

図4:Ionic Frameworkの配色設定
図4:Ionic Frameworkの配色設定

 (9)ではcolor="primary"を指定したので、青い色でテキストが描画されたわけですね。(10)では<ion-button>を使用してボタンを表示しています。内側には直接テキストだけを書いても使用できますが、(11)のように内部に<ion-icon>を配置することで、アイコン付きのボタンにして、視認性を向上することもできます。

 お手元で表示して、ボタンを押してみるとわかりますが、しっかりとクリック時のフィードバックのアニメーションもついており、アプリを作っているような気分にさせてくれます。

Web Componentsであることを確認する

 動作環境のセットアップ自体は、ほぼ<script>要素を配置しただけで終わってしまったので、まるで魔法のようにも見えてしまいますね。しかし、これは間違いなく、これまで学んできたWeb Componentsの仕組みで作られたカスタム要素の組み合わせによるものなのです。

 試しに、ブラウザの開発者ツールを開いてみてください。ボタンのDOM要素を調べてみると、図5のように、Web Componentsの構成要素であるShadow DOMによる描画が行われていることがわかります。

図5:ボタンのDOM要素を調べる
図5:ボタンのDOM要素を調べる

 また、カスタム要素内のシャドウホスト(擬似クラス:hostによって表現される)に紐づいたスタイルも確認できますね。これは間違いなく、本連載で扱ってきたWeb Componentsの仕組みによって作られていることがわかります。

次のページ
Ionic FrameworkとLitでToDoアプリを作る

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

  • 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/17622 2023/04/25 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング