Mokelab Blog

Material Design Components(MDC) の導入

前回はビルドプロセスで sass(scss)を扱えるようにしました。今回は Material Design Components の導入方法について説明します。

Material Design Components(MDC)とは

Material Design Components とは、マテリアルデザインに沿ったデザインを実現するのに役立つライブラリです。マテリアルデザインでは「ここは高さ 48dp にしましょう」といったガイドラインが提示されていますが、その実装は各プラットフォームで「がんばる」という状況でした。この「がんばる」部分を助けてくれるのがこの Material Design Components です。各プラットフォーム向けのライブラリが用意されており、もちろん Web 用もあります。Web 用のライブラリは MDC Web と呼びます。

MDC をアプリに追加する

公式ドキュメントはこちらにあります。MDC Web ではコンポーネント毎に npm パッケージが用意されています。全部まとめて追加する場合は、次のように material-components-web を追加します。

$ npm install material-components-web
(中略)

+ material-components-web@4.0.0
added 47 packages from 1 contributor and audited 1789050 packages in 18.25s

必要なものだけをインストールする場合は、次のように @material/コンポーネント名 を追加します。どの npm パッケージを追加すればよいかは各コンポーネントの解説ページに書かれています。

$ npm install @material/button
(中略)

+ @material/button@4.0.0
added 13 packages and audited 1787946 packages in 9.839s

コンポーネントの使い方

早速ライブラリを使ってみましょう。各コンポーネントの解説ページは次のような構成になっています。

スタイル部分は scss の import で導入することになっています。前回の記事で scss を扱えるようにしたのはこのためです。

TopPage のボタンを MDC のボタンにしてみる

練習として、第7回で TopPage に追加したボタンを MDC のボタンにしてみましょう。ボタンの説明はこちら にあります。

ボタンを導入するには、 @material/button パッケージを追加します。

$ npm install @material/button

次に、HTML Structure にしたがってボタン部分を置き換えます。TopPage のテンプレートは index.html に書いていました。

<script id="topTemplate" type="text/plain">
  <h1>Top page</h1>
  <button class="mdc-button" on-click="toSecond">
    <span class="mdc-button__label">次の画面へ</span>
  </button>
</script>

scss で何を import すればよいかは、説明ページの Styles に書かれています。myStyle.scss に追加しましょう。

@import "@material/button/mdc-button";

body {
  background-color: antiquewhite;
}

ここまででも見た目はマテリアルデザインになるのですが、ボタンをタップしたときのリップルエフェクトがまだ実現できていません。これは JavaScript(TypeScript)側で追加します。ここまで作ってきた Web アプリは表示を Ractive.js に任せているので、TopPage が表示された後に実行されるようにします。

import Ractive from "ractive";
import page from "page";
import { MDCRipple } from "@material/ripple";

export class TopPage implements IPage {
  private ractive!: Ractive;

  onCreate(): void {
    this.ractive = new Ractive({
      el: "#container",
      template: "#topTemplate",
      on: {
        // 表示されたあとに実行される
        complete: () => {
          const buttonRipple = new MDCRipple(
            document.querySelector(".mdc-button")!
          );
        },
        toSecond: () => {
          // /second に遷移する
          page("/second");
        },
      },
    });
  }
}

実際に確認してみましょう。今回は何も指定をしていないので、フラットなボタンとして表示されました。

まとめ

MDC Web をアプリに追加する方法を説明しました。前回までの準備ができていれば、導入自体はそこまで難しくはないでしょう。

本サイトではサービス向上のため、Google Analyticsを導入しています。分析にはCookieを利用しています。