AstroJS 上で React Icons を使用する
1. はじめに
AstroJS は、モダンな Web 開発のための Static Site Generator (SSG) です。このフレームワークは、パフォーマンスを最優先に設計されており、ページのロード時間を最小限に抑えるために、必要な JavaScript の量を削減することに焦点を当てています。AstroJS は、コンポーネントベースの開発をサポートしており、React、Vue、Svelte など、複数のフロントエンドフレームワークやライブラリで書かれたコンポーネントを 1 つのプロジェクト内で組み合わせて使用することができます。
React Icons は、React プロジェクトで使えるアイコンのライブラリです。このライブラリを使用することで、FontAwesome、Ionicons、Material Design icons などの有名なアイコンセットからアイコンを簡単にインポートして、React アプリケーション内で直接使用することができます。React Icons は、アイコンをコンポーネントとして扱うことができるため、React のコンポーネントベースのアーキテクチャにうまくフィットし、アイコンのサイズや色などのスタイリングもプロパティを通じて簡単にカスタマイズすることができます。
実現したいこととしては、AstroJS プロジェクト内で React Icons を使用することです。AstroJS は、React を公式で統合する仕組み 1 が準備されています。そのため、統合手順に従って React を統合した後、React Icons パッケージをインストールすることで、AstroJS プロジェクト内で React Icons を使用することが出来ます。本記事では、その手順について記述します。
2. ベースプロジェクトを準備する
以降、Node.js と Yarn がインストールされている前提で記述します。もしも、開発環境が整っていない場合は各自で準備をお願いします。Node.js に関しては AstroJS の要求 2 に従って、Ver.18.14.1 以上をインストールしておきます。パッケージマネージャーに関しては、npm でも pnpm でも、なんでも大丈夫です。
まず初めに、ベースとなるプロジェクトを生成します。yarn create astro
を実行すればベースプロジェクトを生成してくれます。Git Initialization だけ不要なので外していますが、基本的に Recommend を選択しています。cd mad-magnitude/
→ yarn run dev
ベースプロジェクトを起動して http://localhost:4321/ にアクセス出来れば、ひとまず完了です。
3. AstroJS と React を統合する
AstroJS と React を統合する方法は簡単です。以下のコードを実行すれば自動的にパッケージのインストールから astro.config.mjs
の書き換えまでやってくれます。もしもマニュアルでインストールしたい場合は公式ドキュメント 1 に掲載されているので、そちらを参照ください。
4. React Icons をインストールする
以下のコマンドで React Icons をインストールします。
実際に動作するか検証します。ここでは、src/pages/index.astro
の 4 行目と 9 行目に React Icons のコードを追加して、起動します。
左上にハートのアイコンが表示されれば正常に動作しています。
<FaHeart />
は React コンポーネントなので、React プロジェクト内のコンポーネントと同じような操作が可能です。例えば、以下のようにスタイリングすることも可能です。
5. おわりに
ここまで、AstroJS プロジェクト内で React Icons を使用する方法について記述してきました。筆者の開発環境や上記の組み合わせでは問題なく実行することが出来ましたが、使用する環境や組み合わせによってはエラーが発生する場合があるようです。その場合は、以下のようなコードを astro.config.mjs
に追加することで回避できるようです 3 4 。
-
@astrojs/react | Docs:https://docs.astro.build/ja/guides/integrations-guide/react/ ↩ ↩2
-
Astroを自動CLIでインストール | Docs:https://docs.astro.build/ja/install/auto/ ↩
-
Build fails when using a React component with react-icons within an astro file · Issue #7629 · withastro/astro:https://github.com/withastro/astro/issues/7629 ↩
-
Astroでreact-iconsを使う方法 #astro - Qiita:https://qiita.com/Ahoxa/items/fac0ca129aeb1e5dd7f2 ↩