guillermolg00/morphicons

ストロークベースのアイコンをスプリングフィジクスで自動的に変形させるTypeScript・React・Vue・Svelte対応ライブラリです。

開発の材料自由に使える · MITWeb・Next.js・フルスタックTypeScript難易度
2,789👀 200 保存
80フォーク1Issue
デモ・公式サイトをひらくmorphicons.com

中辛 の解説

TypeScript 製のアイコン変形エンジンで、React 18+・Vue 3.3+・Svelte 5・React Native 0.71+ に対応しています。ストローク型アイコンデータ(d属性やIconNode)を入力して、2次元Procrustes解析と極座標補間で最適な変形経路を算出します。SSRフレンドリーで、サーバー側で静的SVGを出力し、クライアント側のハイドレーション時に動作開始します。難度は中程度(変形計算は自動、フレームワーク統合は単純)で、デモサイト morphicons.com で実際の動作が確認できます。

こんなリポジトリです

こんなときに便利です

  • メニュー開閉ボタンでハンバーガーアイコンを × に変形させるUI
  • タブナビゲーションで選択状態の切り替え時にアイコン形状を滑らかに遷移させる
  • ダークモード切り替え時に太陽・月アイコンを動的に変形させるテーマ切り替えUI

主な機能

Procrustes 解析による自動回転計算(手書き定義不要)React・Vue・Svelte・React Native・Web Component の 5 フレームワーク対応SSR フレンドリー(サーバー側で静的 SVG、クライアント側でハイドレーション)

ほかとの違い

既存のアイコンモーフィングは手書き回転定義か座標補間による歪みのいずれかですが、morphicons は数学的に最適な形状対応を自動計算し、回転は宣言ではなく 2D Procrustes 問題の解から自動導出されます。

このリポジトリの作り方

はじめてですか? むずかしくありません — 上から順にたどれば、自分の環境で動かして味見できます。

準備するもの

  • Node.js 18+(またはBun)
  • React 18+ / Vue 3.3+ / Svelte 5 / React Native 0.71+(該当バインディングの場合)
  • react-native-svg 14+(React Native バインディングの場合)

すぐに始める

  1. パッケージをインストールします。
bun add morphicons
  1. React でコンポーネントをインポートして使用します(他フレームワークも同じパターン)。
import { MorphIcon } from "morphicons/react";
import { Menu, X } from "lucide"; // データをインポート(コンポーネントではなく)
import { useState } from "react";

function App() {
  const [open, setOpen] = useState(false);
  return (
    <button onClick={() => setOpen(o => !o)} aria-expanded={open}>
      <MorphIcon icon={open ? X : Menu} />
    </button>
  );
}
  1. バニラ(フレームワークなし)で使う場合は DOM ドライバーを使用します。
import { createMorph } from "morphicons/dom";
import { Menu, X } from "lucide";

const pathEl = document.querySelector("path");
const m = createMorph(pathEl, Menu);
m.morphTo(X, "snappy");
  1. Vue の場合:
<script setup>
import { ref } from "vue";
import { MorphIcon, type MorphHandle } from "morphicons/vue";
import { Menu, X } from "lucide";

const open = ref(false);
const morph = ref(null);
</script>

<template>
  <button @click="open = !open">
    <MorphIcon :icon="open ? X : Menu" />
  </button>
</template>
  1. Svelte 5 の場合:
<script lang="ts">
  import { MorphIcon } from "morphicons/svelte";
  import { Menu, X } from "lucide";

  let open = $state(false);
</script>

<button onclick={() => { open = !open }}>
  <MorphIcon icon={open ? X : Menu} />
</button>
  1. React Native の場合(react-native-svg 14+ が必須):
import { MorphIcon } from "morphicons/react-native";
import { Menu, X } from "lucide";
import { useState } from "react";

function App() {
  const [open, setOpen] = useState(false);
  return (
    <MorphIcon icon={open ? X : Menu} />
  );
}

ギット飯トライで味見

入れるのが面倒で少し不安だったなら — 安全スキャンからインストールまで、ターミナル一行で終わります。

ターミナルに貼り付ければ、ギット飯の安全スキャン → 隔離フォルダへ clone → インストール → 実行方法の案内まで自動です。はじめてでも大丈夫 — この一行だけです。

npx gitbap-try guillermolg00/morphicons

Node.js さえあれば、インストールなしで動きます · ギット飯トライとは? →

スター推移 · 7日

2,7897日間の増加数を計算するための比較データが不足しています

確認日時

使いやすさ · まねしやすいか

サンプル評点 34/100
  • ゆるいライセンス
  • テストあり
  • サンプル集
  • 最近の更新
  • AGENTS.md
  • llms.txt
  • テンプレート

最近の更新あり · 2026 年に作成

「Web・Next.js・フルスタック」 こういうリポジトリを毎週受け取りませんか?

毎週月曜の朝、選んだ一膳だけ。広告なし · いつでも解除。

自分のリポジトリですか? README にギット飯バッジを貼る
[![깃밥](https://www.gitbap.com/badge/guillermolg00/morphicons.svg)](https://www.gitbap.com/r/guillermolg00/morphicons)
Claude からそのまま使う — ギット飯のつなぎ方

ギット飯を Claude につなぐと、こうしたリポジトリを Claude・Cursor・Codex から直接さがして試せます。

方法 ① コネクタ URL

Claude の設定 → コネクタにこのアドレスを貼り付け。

https://www.gitbap.com/api/mcp
方法 ② プラグイン(試用まで)

プラグインを入れると /gitbap-trending·/gitbap-try のスラッシュコマンドで、その場でリポジトリを試せます。Claude Code で下の 2 行を順に実行してください。

/plugin marketplace add jakeparkcolde/gitbap-cowork
/plugin install gitbap-cowork@gitbap
つなぎ方をくわしく →

AI が README をもとに要約しました · 原文を見る