ストロークベースのアイコンをスプリングフィジクスで自動的に変形させるTypeScript・React・Vue・Svelte対応ライブラリです。
中辛 の解説
TypeScript 製のアイコン変形エンジンで、React 18+・Vue 3.3+・Svelte 5・React Native 0.71+ に対応しています。ストローク型アイコンデータ(d属性やIconNode)を入力して、2次元Procrustes解析と極座標補間で最適な変形経路を算出します。SSRフレンドリーで、サーバー側で静的SVGを出力し、クライアント側のハイドレーション時に動作開始します。難度は中程度(変形計算は自動、フレームワーク統合は単純)で、デモサイト morphicons.com で実際の動作が確認できます。
이런 레포예요
이럴 때 쓰면 좋아요
- メニュー開閉ボタンでハンバーガーアイコンを × に変形させるUI
- タブナビゲーションで選択状態の切り替え時にアイコン形状を滑らかに遷移させる
- ダークモード切り替え時に太陽・月アイコンを動的に変形させるテーマ切り替えUI
핵심 기능
대안 대비 차별점
既存のアイコンモーフィングは手書き回転定義か座標補間による歪みのいずれかですが、morphicons は数学的に最適な形状対応を自動計算し、回転は宣言ではなく 2D Procrustes 問題の解から自動導出されます。
食べた人たち
実際に使ってみた人の記録です — 一言も完走の記録も、確認のうえで公開しています。
このリポジトリの作り方
はじめてですか? むずかしくありません — 上から順にたどれば、自分の環境で動かして味見できます。
준비물
- Node.js 18+(またはBun)
- React 18+ / Vue 3.3+ / Svelte 5 / React Native 0.71+(該当バインディングの場合)
- react-native-svg 14+(React Native バインディングの場合)
すぐ動かしてみるNode.js (bun)
ギット飯がリポジトリの構成を確認して組み立てた実行コマンドです。ターミナルに貼り付ければ、取得から実行までまとめて進みます。
git clone --depth 1 https://github.com/guillermolg00/morphicons.git && cd morphicons && bun install
실행 명령은 README를 확인하세요.
コードは自分の環境で動きます — はじめて見るリポジトリなら、中身にひととおり目を通してから実行するのがおすすめです。
README가 안내하는 자세한 단계 보기
- パッケージをインストールします。
bun add morphicons
- 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>
);
}
- バニラ(フレームワークなし)で使う場合は 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");
- 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>
- 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>
- 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日
使いやすさ · まねしやすいか
- ゆるいライセンス
- テストあり
- サンプル集
- 最近の更新
- AGENTS.md
- llms.txt
- テンプレート
最近の更新あり · 2026 年に作成
「웹·Next.js·풀스택」 こういうリポジトリを毎週受け取りませんか?
毎週月曜の朝、選んだ一膳だけ。広告なし · いつでも解除。
自分のリポジトリですか? README にギット飯バッジを貼る
[](https://www.gitbap.com/r/guillermolg00/morphicons)Claude からそのまま使う — ギット飯のつなぎ方
ギット飯を Claude につなぐと、こうしたリポジトリを Claude・Cursor・Codex から直接さがして試せます。
Claude の設定 → コネクタにこのアドレスを貼り付け。
https://www.gitbap.com/api/mcpプラグインを入れると /gitbap-trending·/gitbap-try のスラッシュコマンドで、その場でリポジトリを試せます。Claude Code で下の 2 行を順に実行してください。
/plugin marketplace add jakeparkcolde/gitbap-cowork/plugin install gitbap-cowork@gitbapAI が README をもとに要約しました · 原文を見る