i-Vinci TechBlog
株式会社i-Vinciの技術ブログ

黄金比デザインのLiftkitを触ってみた。

はじめに

こんにちは、最近あまりフロントを触れていない上杉です。
早速ですが、黄金比をベースにしたデザインシステムを特徴とする Liftkit というUIライブラリがあります。
最近 某リスさんのブログ で存在を知り、見出しにつられて興味を持ちました。

2025年7月14日に v1.0.0 がリリースされたばかりでまだ情報が少なく、
9月8日執筆時点では Qiita や Zenn にも記事がありません。

  • Qiitaでの検索結果

    Qiitaでの検索

  • Zennでの検索結果

    Zennでの検索

しかし GitHub ではわずか2か月で 1.8kスターを獲得しており、注目を集める新星です。

今回は、Components API が充実している MUI と比較しながら、使用感やデザインのまとまりを見ていきます。

Liftkitとは?

  • UI要素のサイズ、マージン、角丸、フォントサイズに至るまで、すべてが黄金比に基づいて設計されたUIフレームワーク
  • Tailwind風のユーティリティクラスと組み合わせ可能
  • シンプルなAPIで、直感的に使える
  • デザインの一貫性をほぼ自動で担保してくれる
  • 「細かい余白やサイズ感に悩まず、整ったUIを実現できる」という安心感が強み

Liftkit導入方法

基本的には公式の インストールガイド に従えば簡単に導入できます。
Next.js 向けのガイドしか用意されていないため、Next.js プロジェクトを作成後に npm install を実行してインストールします。

導入後に npm run add all を実行すると、デフォルトで src/componentssrc/lib ディレクトリが生成され、利用可能になります。

※参考画像

比較方法

フレームワーク同士を比べるとき、「片方はカスタマイズしまくり、片方はデフォルトのまま」というアンフェアな状況になりがちです。
そこで今回は以下のルールを設けました:

  1. componentsの機能として用意されているものだけを使用
    • 例:variant,color,sizeなどのpropsは利用OK
    • 任意のCSSを直書きして見た目を変えるのはNG
  2. marginpaddingは許容
    • コンポーネントをレイアウトする上で最低限必要なので、指定可能な方法でのみ設定可
  3. Liftkitで用意されているcomponentsを基準に比較
    • まず数の少ないLiftkitのコンポーネントを選び、同等のUIをMUIで実装して比較

👉「Liftkitが公式に提供しているUI部品を、MUIでどれだけ近く再現できるか」という観点で比較します。

実際に触ってみたデモ

今回作ったフォーム

  • Liftkit
    LiftkitのUI画像
  • MUI
    MUIのUI画像

各コード

ボタン(Button) / アイコンボタン(IconButton)

  • Liftkit
  <IconButton key="search" icon="search" variant="fill" />

  <Button label="search" startIcon="search" variant="outline" />
  • MUI
  <IconButton color="primary" aria-label="search">
    <SearchIcon />
  </IconButton>

  <Button variant="outlined" startIcon={<SearchIcon />}>search</Button>

→ 両者ともpropsで完結。Iconの指定方法に差がある。

カード(Card)

  • Liftkit
  <Card variant="outline" material="glass">
    // コンテンツ
  </Card>
  • Clickableの指定がpropsに渡せるので容易。
  • materialが指定出来るのが大きな違いだが、自分の環境では特に違いが見当たらなかった。
  • MUI
  <Card variant="outlined">
    <CardContent>
      // コンテンツ
    </CardContent>
  </Card>
  • CardHeaderなど細かく設定出来る。variantfillなどは設定出来ないのでカードの色を変更することが出来ない。

→ MUIは部品が細かく分かれている分、Liftkitよりコード量が増える傾向。

チップ(Sticker/Chip)

  • Liftkit
  <Sticker color="info" bgColor="info">Info Sticker</Sticker>
  • MUI
  <Chip color="info" label="Info Sticker" />

→ どちらも使い勝手は変わらない印象。

インプット(TextInput/TextField)

  • Liftkit
  <TextInput
    type="email"
    labelPosition="on-input"
    helpText="メールアドレスを入力してください"
    placeholder="メールアドレス"
    name="メールアドレス"
    endIcon="mail"
  />
  • ヘルプテキストが上手く機能していなさそう。
  • MUI
  <TextField
    type="email"
    helperText="メールアドレスを入力してください"
    placeholder="メールアドレス"
    label="メールアドレス"
  />

→ Liftkitは「必要十分」、MUIは「痒いところまで手が届く」印象。

スナックバー(Snackbar)

  • Liftkit
  <Snackbar globalColor="errorcontainer">
    <Icon name="badge-info" color="error"/>
    <Text fontClass="body">Snackbar Message</Text>
    <Button label="Action" variant="text" color="error" />
  </Snackbar>
  • 背景色やIconなど豊富にデザイン出来る。
  • durationpropsで簡単指定可能。
  • MUI
  <Snackbar
    anchorOrigin={{ vertical: "bottom", horizontal: "center" }}
    open={true}
    message="デフォルトでは背景色を変更できない"
    action={
      <Button color="inherit" size="small">
        Action
      </Button>
    }
  />
  • 背景色が拡張機能を入れないと変更出来ない。
  • スナックバーの表示位置を簡単に指定出来る。

→ Liftkitは「通知を出すだけならすぐ導入できる」、MUIは「位置やアクション付き通知などを作り込みたい時に強い」。

👉 両者を並べて比較すると、Liftkitは短いコードで整った見た目が作れる一方、MUIはより多彩なpropsで細かく調整できるのが分かる。

まとめ

  • Liftkit
    • デザインの美しさとシンプルさが強み
    • 小中規模アプリやデモ、LPに向いている
  • MUI
    • コンポーネント数と柔軟性が強み
    • 大規模開発や管理画面などに向いている

今回デモとして動かしたコードのリポジトリを公開しているので、気になる方はチェックしてみてください。

Liftkitはまだ発展途上と感じましたが、素のコンポーネントだけでも十分に美しいデザインが作れると感じました。
一方で、hoverやclick時のアニメーションがデフォルトでは付与されていないため、ややリッチさに欠ける印象もあります。
ただし、src/components 配下に生成されたコンポーネントをベースに、自分好みにカスタマイズできる点は大きな魅力だと思います。