Material-UI は、マテリアルデザインを提供する React コンポーネントライブラリです。
Material-UI のインストール
Material-UI のコアパッケージ (@material-ui/core
) は、npm
コマンドで簡単にインストールできます。
マテリアルデザイン系のアイコン を使いたい場合は、@material-ui/icons
パッケージもインストールしておきます。
Next.js の create-next-app
コマンドでプロジェクトを作成済みであれば、これだけで Material-UI コンポーネントを使う準備は完了です。
Material-UI のデフォルトテーマは Roboto フォントを使用する ので、次のようなコードを head
要素内に記述する必要がありますが、これは後述の _document.tsx
で設定します。
Material-UI は font weight に 300/400/500/700 のいずれかを使用するので、上記のように読み込むデータを制限することで、ロード時間を削減できます。
Material-UI のコンポーネントを使ってみる
Material-UI のインストールができたら、あとは、各コンポーネントの実装ファイルから import
するだけで使用できます。
次の例では、Button コンポーネントと、ButtonGroup コンポーネントを使っています。
Next.js 用の App / Document コンポーネント設定
Material-UI を Next.js アプリから使用する場合は、サーバーサイドレンダリングとの兼ね合いで、pages/_app.tsx
と pages/_document.tsx
を作成して、スタイル定義の処理順序を制御しておく必要があります。
これを入れておかないと、makeStyle などを使ったスタイル設定 がうまく反映されず、次のようなエラーになったりします。
これは、サーバーサイド側で生成された CSS クラス名が、クライアント側で参照しようとしているクラス名と食い違ってしまった場合に発生します(クラス名を自動生成する仕組みのため、タイミングによって発生します)。
具体的な対応方法に関しては、Material-UI のドキュメントには下記のコードを参照、と書かれていますが、こちらは残念ながら TypeScript に対応していないので、ここでは TypeScript 化したコードを載せておきます。
pages/_document.tsx
では、Roboto フォントの読み込みも行っています。
上記のファイルからテーマ設定ファイル theme.ts
を参照しているので、これも作成しておきます。
サイト全体のプライマリカラーや、セカンダリカラーをここで設定できます。
関連記事