AI

OSSのデザインコラボレーション比較:Penpot vs Excalidraw vs tldraw でFigma代替を探す

オープンソースラボ編集部2026年6月13日

OSSのデザインコラボレーション比較:Penpot vs Excalidraw vs tldraw でFigma代替を探す

Figma(月$15/エディター〜)・Adobe XD(サービス終了)・Sketch(Mac専用・月$9〜)に対して、Penpot(最もFigmaに近いOSSデザインツール)・Excalidraw(ダイアグラム・ホワイトボード特化)・tldraw(無限キャンバス・コード埋め込み対応)はOSSのコラボレーティブデザインツールです。

OSSデザインツールを選ぶ理由

  • コスト: Figmaは10人で月$150。Penpotセルフホストなら$0
  • データ主権: デザインファイルを自社サーバーに保管(NDAsや機密デザインを外部SaaSに置かない)
  • Figma移行: FigmaのPlulanがAdobe買収で価格改定→OSSへの移行需要が増加
  • エンジニアとの統合: tldrawはReactコンポーネントとして埋め込みできる

主要ツールの概要

Penpot

2015年に公開されたClojure/ClojureScript製のOSSデザインツールです。GitHubスター33k+。Figmaに最も近いUIと機能を持つOSSベクターデザインツールで、コンポーネント・バリアント・プロトタイプ・グリッド・フレックスレイアウト・開発者向けコード検査(CSS/SVG)・Figmaファイルインポートをサポートします。WebUI・Dockerセルフホストで動きます。

# Penpot をDockerでセルフホスト
git clone https://github.com/penpot/penpot
cd penpot

# docker-compose.yaml が含まれている
# 設定ファイルを確認・編集
cat > config/flags.env << 'EOF'
PENPOT_FLAGS=enable-registration disable-email-verification
PENPOT_SECRET_KEY=$(openssl rand -hex 16)
PENPOT_PUBLIC_URI=https://design.yourcompany.com
EOF

docker compose -p penpot -f docker-compose.yaml up -d

# WebUI: https://design.yourcompany.com
# 管理者アカウントを作成
docker exec -ti penpot-penpot-backend-1   ./manage.py create-profile   --email admin@yourcompany.com   --fullname "Admin"   --password your-secure-password
// Penpot REST APIを使ってデザインファイルを管理
// Penpotはアクセストークン認証のREST APIを提供

const PENPOT_URL = "https://design.yourcompany.com";
const ACCESS_TOKEN = process.env.PENPOT_ACCESS_TOKEN!;

// プロジェクト一覧を取得
async function getProjects() {
  const response = await fetch(`${PENPOT_URL}/api/rpc/command/get-projects`, {
    method: "GET",
    headers: {
      Authorization: `Token ${ACCESS_TOKEN}`,
      "Content-Type": "application/json",
    },
  });
  return response.json();
}

// ファイルのエクスポート(PNG・SVG)
async function exportFile(fileId: string, pageId: string) {
  const response = await fetch(`${PENPOT_URL}/api/rpc/command/export-file`, {
    method: "POST",
    headers: {
      Authorization: `Token ${ACCESS_TOKEN}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      "file-id": fileId,
      "page-id": pageId,
      "object-ids": null,  // null = 全オブジェクト
      "export-type": "png",
      "scale": 2,   // 2x = Retina
    }),
  });
  return response.blob();
}
// Figma ファイルをPenpotにインポートする
// Penpot WebUI → New File → Import Figmaから実行(GUIのみ)
// または Figma2Penpot CLIツールを使う

// pip install figma2penpot
// figma2penpot //   --figma-token YOUR_FIGMA_TOKEN //   --figma-file-id YOUR_FILE_ID //   --penpot-url https://design.yourcompany.com //   --penpot-token YOUR_PENPOT_TOKEN

Excalidraw

2020年に公開されたTypeScript/React製のOSSホワイトボードツールです。GitHubスター96k+。手書き風のダイアグラム・フローチャート・ワイヤーフレームをリアルタイムコラボレーションで作成できる最もシンプルなツールです。アーキテクチャ図・フロー設計・ブレインストーミングに特化し、エンジニアが技術設計をホワイトボードで説明するシーンに最適です。Next.jsやReactアプリにコンポーネントとして埋め込めます。

# Excalidraw をセルフホスト
git clone https://github.com/excalidraw/excalidraw
cd excalidraw

npm install
npm run build   # 静的アセットをビルド

# Vercelにデプロイ(最も簡単)
# npx vercel --prod

# またはDockerで
docker build -t excalidraw .
docker run -p 3000:3000 excalidraw
// ReactアプリにExcalidrawを埋め込む
// npm install @excalidraw/excalidraw
"use client";
import { Excalidraw } from "@excalidraw/excalidraw";
import { useState, useRef } from "react";
import type { ExcalidrawElement } from "@excalidraw/excalidraw/types/element/types";
import type { AppState } from "@excalidraw/excalidraw/types/types";

interface CollaborativeWhiteboardProps {
  initialData?: { elements: ExcalidrawElement[]; appState: Partial<AppState> };
  onSave?: (elements: ExcalidrawElement[]) => void;
}

export function CollaborativeWhiteboard({ initialData, onSave }: CollaborativeWhiteboardProps) {
  const [elements, setElements] = useState<readonly ExcalidrawElement[]>(
    initialData?.elements || []
  );

  const handleChange = (
    newElements: readonly ExcalidrawElement[],
    state: AppState
  ) => {
    setElements(newElements);
    // 自動保存(500msのdebounce)
    if (onSave) {
      clearTimeout((window as any)._saveTimer);
      (window as any)._saveTimer = setTimeout(() => {
        onSave([...newElements]);
      }, 500);
    }
  };

  return (
    <div style={{ height: "600px", width: "100%" }}>
      <Excalidraw
        initialData={initialData}
        onChange={handleChange}
        viewModeEnabled={false}
        zenModeEnabled={false}
        gridModeEnabled={false}
        langCode="ja-JP"
        UIOptions={{
          canvasActions: {
            export: {
              saveFileToDisk: true,
            },
          },
        }}
      />
    </div>
  );
}

// Next.js でExcalidrawデータをSupabaseに保存
// app/api/whiteboard/route.ts
export async function POST(req: Request) {
  const { boardId, elements } = await req.json();
  const supabase = createClient();
  const { error } = await supabase
    .from("whiteboards")
    .upsert({ id: boardId, elements: JSON.stringify(elements), updated_at: new Date() });
  return Response.json({ ok: !error });
}

機能比較表

比較項目PenpotExcalidrawtldraw
ベクターデザイン✅(Figma相当)基本のみ基本のみ
プロトタイプ
コンポーネント
手書き風
React埋め込み
オフライン✅(PWA)
GitHub Stars33k+96k+38k+

PenpotのデザインファイルをエクスポートしてデザインシステムとしてLow-codeカテゴリ/categories/low-codeのStorybookと連携します。Excalidrawのアーキテクチャ図をドキュメントとして管理するにはMiscカテゴリ/categories/miscのBookstackやOutlineなどのOSSナレッジベースに埋め込みます。

FAQ

Q. FigmaからPenpotへの移行はどのくらい大変ですか?

A. UIの学習コスト: Figmaと非常に似ており1〜2日で主要操作を習得できます。ファイルインポート: Penpot WebUI → New File → Import Figmaでfigmaファイルを直接インポートできますが、複雑なバリアントやコンポーネントの一部が正確に変換されない場合があります。機能ギャップ: Figma Variables(デザイントークン)はPenpotのデザイントークン機能として対応中。Auto Layoutは対応済み。Interactive Prototype LinkはPenpotでもほぼ同等に設定できます。推奨移行戦略: 新規プロジェクトからPenpotで開始し、既存プロジェクトは納期後に段階的に移行するのが現実的です。

Q. PenpotをLDAPやOktaでSSO認証するには?

A. Penpotはフラグ設定でOAuth2プロバイダー認証を追加できます。Oktaの場合: config/flags.envにenable-oidcフラグを追加。docker-compose.yamlの環境変数にPENPOT_FLAGS_AUTH_BACKEND_OIDC_ENABLED=truePENPOT_OIDC_CLIENT_IDPENPOT_OIDC_CLIENT_SECRETPENPOT_OIDC_BASE_URI(OktaのDiscovery URL)を設定します。GitLab OAuthも同様に設定でき、セルフホストGitLabと統合したDevOpsチームに向いています。

Q. Excalidrawをチームのホワイトボードとして使うときのリアルタイムコラボ設定は?

A. Excalidrawのコラボレーション機能はFirebaseを使いますが、セルフホスト版は独自のWebSocketサーバーが必要です。①excalidraw-room(公式WebSocketサーバー)をDockerでデプロイ②Excalidrawの環境変数VITE_APP_WS_SERVER_URLをWebSocketサーバーURLに設定③チームメンバーが同じURLにアクセスするとリアルタイムコラボが開始。エンドツーエンド暗号化はデフォルト有効(URLのハッシュがEncryption Keyとして使われる)。最もシンプルな方法はexcalidraw.comのShare機能を使う(データはE2E暗号化されているため外部漏洩リスクは低い)。

Q. tldrawをNext.jsアプリに埋め込んでホワイトボード機能を追加するには?

A. tldrawはReactコンポーネントとして提供されており、Next.jsにそのまま統合できます。

npm install tldraw
// app/whiteboard/page.tsx
"use client";
import { Tldraw, Editor, TLUiEventHandler } from "tldraw";
import "tldraw/tldraw.css";

export default function WhiteboardPage() {
  const handleMount = (editor: Editor) => {
    editor.updateInstanceState({ isDebugMode: false });
  };

  return (
    <div style={{ position: "fixed", inset: 0 }}>
      <Tldraw
        onMount={handleMount}
        persistenceKey="my-whiteboard"   // localStorageで自動保存
        autoFocus
      />
    </div>
  );
}

まとめ

ユースケース推奨ツール
Figma代替・UIデザイン・プロトタイプ・セルフホストPenpot
ダイアグラム・フロー設計・エンジニアのホワイトボードExcalidraw
無限キャンバス・Reactアプリ埋め込み・ホワイトボードtldraw

関連外部リソース

他の記事も読む

Let's Build Together

OSS導入、自社だけで悩まない。

ツール選定から構築・運用・AI活用まで、オープンソースラボ運営元のClasslessが伴走します。初回のご相談は無料です。