🐙

Icônesを利用してNext.jsでアイコンを簡単利用

2023/06/02に公開

はじめに

  • 様々なアイコンを検索できる便利なサイト「Icônes」を紹介します。
  • Next.js でアイコンを利用する方法を紹介します。
  • 簡単ですが、ソースは以下におきます。

https://github.com/hayato94087/next-icones-sample-

Icônes について

  • Icônes とは複数のアイコンライブラリから横断的にアイコンを検索できるサイトです。
  • アイコンライブラリも種類が豊富でアニメーション付きのアイコン、特定テーマのアイコン、色付きのアイコンなど様々準備されています。
  • 異なるライブラリのアイコンをまとめてアイコンフォントを作成できます。

サービスサイト

https://icones.js.org/

GitHub

https://github.com/antfu/icones

Icônes はコリスで紹介されていますので、こちらを確認いただくと良いです。説明が重複するので、この記事では詳細な説明は割愛します。

https://coliss.com/articles/build-websites/operation/work/icon-explorer-with-searching-icones.html

便利なリンク

自身のメモとしてもよく使いそうなリンクを残しておきます。

アイコンを横断検索するときのリンク

アイコンライブラリー横断で検索するときのリンクです。

https://icones.js.org/collection/all

アイコン一覧のリンク

サポートしているアイコンライブラリーの一覧です。

https://icones.js.org/settings

アイコンを使う場合

Next.js でアイコンを使う場合の一例を記載します。

まず欲しいアイコンを検索します。

1つ選びます。(アイコンの色も変えることができます)

ComponentsReact TS をクリックし、コピーします。

ペーストして、Next.js x TypeScript で、コンポーネントとしてこれはそのまま利用できます。

export function MaterialSymbolsLogin(props: SVGProps<SVGSVGElement>) {
  return (
    <svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" {...props}><path fill="currentColor" d="M12 21v-2h7V5h-7V3h7q.825 0 1.413.588T21 5v14q0 .825-.588 1.413T19 21h-7Zm-2-4l-1.375-1.45l2.55-2.55H3v-2h8.175l-2.55-2.55L10 7l5 5l-5 5Z"></path></svg>
  )
}

参考までにNext.jsプロジェクトで利用

新規プロジェクト作成します。

$ pnpm create next-app@latest next-icones-sample --typescript --eslint --import-alias "@/*" --src-dir --use-pnpm --tailwind --app

プロジェクトフォルダに移動します。

$ cd next-icones-sample

関連ファイルを作成します。

$ mkdir src/components
$ touch src/components/MaterialSymbolsLogin.tsx

ComponentsReact TS をクリックし、コピペします。

変更点は 2 点あります。

  • import { SVGProps } from "react"; は足りなかったので追記しておきます。
  • Tailwind で色指定したいため、fill="currentColor" は削除しています。
MaterialSymbolsLogin.tsx
import { SVGProps } from "react";

export function MaterialSymbolsLogin(props: SVGProps<SVGSVGElement>) {
  return (
    <svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" {...props}><path d="M12 21v-2h7V5h-7V3h7q.825 0 1.413.588T21 5v14q0 .825-.588 1.413T19 21h-7Zm-2-4l-1.375-1.45l2.55-2.55H3v-2h8.175l-2.55-2.55L10 7l5 5l-5 5Z"></path></svg>
  )
}

page.tsx を適当に編集しました。
<MaterialSymbolsLogin className="fill-red-500"/> では、Tailwind で色を指定しています。

src/app/page.tsx
import Link from "next/link";
import { MaterialSymbolsLogin } from "@/components/MaterialSymbolsLogin";

export default function Home() {
  return (
    <main className="h-screen w-screen bg-white">
      <Link
        href="/login"
        className="flex flex-row justify-center items-center rounded-lg px-2 pt-2 pb-2 border-[2px] border-main500 shadow-md space-x-2 md:px-4 w-[130px] border-[#fe9611]"
      >
        <MaterialSymbolsLogin className="fill-red-500"/>
        <label className="text-sm font-bold text-black">ログイン</label>
      </Link>
    </main>
  );
}

開発環境で確認します。

$ pnpm dev

実行結果です。

まとめ

  • 様々なアイコンを検索できる便利なサイト「Icônes」を紹介しました。
  • Next.js でアイコンを利用する方法を紹介しました。
  • パッケージインストールしなくても簡単に使うことができました。
  • 簡単ですが、ソースは以下におきます。

https://github.com/hayato94087/next-icones-sample-

参考

Discussion