【入門編】PenpotのSVG高度アニメーションとCSSプロパティ連携:エンジニアと作る次世代プロトタイプ – UI/UX・デザインツール活用バイブル

こんにちは!デザインシステムとフロントエンドの境界線を溶かし、エンジニアとデザイナーが同じ言語で対話できる世界へようこそ。

今回は、オープンソースの次世代デザインツール「Penpot」と、Webの表現力を限界まで引き出す「SVGアニメーション+CSSプロパティ連携」について、現場の最前線から熱量をもってお届けします。

「デザインカンプをただ再現するだけのコーディングはもう終わりしたい」
「デザイナーが意図したモーションを、エンジニアが寸分違わずコードに落とし込みたい」

そんな悩みを抱えているなら、この記事はあなたのためのものです。これをマスターすれば、デザインから実装までのワークフローが劇的に変わり、毎日の作業が驚くほどスムーズになりますよ。

—

1. なぜ「Penpot」なのか? そしてSVGアニメーションの真価

これまで、多くのチームがFigmaなどのクローズドなツールを使ってきました。しかし、コード(SVG/CSS)の構造を意識したデザインを作るうえで、完全オープンスタンダード(SVGネイティブ)で作られているPenpotの優位性は圧倒的です。

Penpotが持つ、エンジニア・デザイナー共通のメリット

  • SVGファーストな思想: Penpot上の描画は、そのままクリーンなSVGコードに直結しています。内部のパス構造(``や``タグ)が予測しやすいため、アニメーションのフックが極めて容易です。
  • CSS Grid / Flexboxのネイティブ実装: デザイナーが「なんとなく」配置するのではなく、モダンWebのレイアウト概念そのままでコンポーネントを組み立てられます。

このPenpotで作ったSVGをフロントエンド側(HTML/CSS/JS)でどう料理するか。それが今回の核心です。

—

2. 準備:Penpotで「アニメーションしやすいSVG」を作る作法

まずはPenpotをセットアップし、アニメーションの土台となるSVGベクターを作っていきましょう。PenpotはWebブラウザからすぐに無料で使い始められます([penpot.app](https://penpot.app/))。

ステップ1: レイヤー構造を「コードファースト」で整理する

SVGアニメーションを成功させる最大のコツは、「デザイン段階でのレイヤー名とグループ化」です。

1. Penpotでアートボードを作成し、アイコンやローダー、あるいはUIのパーツをベクターツールで描きます。
2. アニメーションさせたいパーツ(例: アイコンの線、背景の円、プログレスバーのトラックなど)ごとにグループ化(`Ctrl + G` または `Cmd + G`)します。
3. レイヤー名を必ずセマンティックな英数字に変更してください(例:「`path-background`」「`icon-arrow`」など)。

  • ※Penpotでつけたレイヤー名は、SVGエクスポート時にそのまま `id` や `class` 属性に反映されます。ここが手抜きのないエンジニアリングの第一歩です!

ステップ2: SVGのエクスポート

1. 対象のコンポーネントまたはフレームを選択します。
2. 右サイドバーの下部にある「Export」パネルから、フォーマットに 「SVG」 を選択し、エクスポートします。

—

3. HelloWorld:動くSVGの最小構成を作る

エクスポートしたSVGを、実際のWebフロントエンド(HTML/CSS)で動かしてみましょう。今回はモダンなCSSプロパティ連携の基本として、SVGの線を流れるように描画する(パスアニメーション)を実装します。

1. HTML側にSVGをインラインで埋め込む

SVGアニメーションをCSSで制御する場合、``タグで読み込むのではなく、HTML内にSVGコードを直接(インラインで)記述するのが鉄則です。これにより、CSSから内部のパスを自由自在に操れるようになります。





Penpot SVG Animation HelloWorld



2. CSSでSVGのプロパティをハックする

ここからが魔法の時間です。SVG特有のCSSプロパティである `stroke-dasharray` と `stroke-dashoffset` を使って、線が自ら描かれていくようなアニメーションを実装します。

/ style.css /
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
background: #0f172a; / 落ち着いたダークモード /
}

.stage {
width: 200px;
height: 200px;
}

/ Penpotのレイヤー構造と連動したCSSセレクタ /
target-path {
/ パスの全体長をダッシュの長さに指定(※実際のパス長に合わせて数値を調整) /
stroke-dasharray: 300;

/ 最初はオフセットを全体長と同じにして、線を完全に隠す /
stroke-dashoffset: 300;

/ アニメーションの設定:2秒かけて滑らかに描画する /
animation: drawPath 2s cubic-bezier(0.4, 0, 0.2, 1) infinite alternate;
}

/ パスが描かれる動きを定義するキーフレーム /
@keyframes drawPath {
0% {
stroke-dashoffset: 300; / 線が隠れた状態 /
}
100% {
stroke-dashoffset: 0; / 線が完全に描かれた状態 /
}
}

このコードをブラウザで開いてみてください。Penpotで描いた美しいベクター線が、まるで生き物のように滑らかに描画・消去を繰り返すはずです。これが、デザインとコードが完全にシンクロした瞬間です!

—

4. 実務で使える!CSSカスタムプロパティ(変数)との華麗な連携

基礎ができたら、次は実務で即戦力となる「CSSカスタムプロパティ(CSS変数)」を活用した高度な連携テクニックです。

デザインシステムのトークン(色やサイズ)をPenpotとCSSの間で共有すれば、デザイン変更が即座にアニメーションへ反映される堅牢なシステムが構築できます。

CSS変数を経由した動的コントロール

例えば、JavaScriptからアニメーションのスピードや色を動的に変更したい場合、SVGの直書き属性ではなくCSS変数経由でプロパティを制御します。

:root {
/ デザインシステムのトークンと連動する変数 /
–path-color: #ec4899;
–animation-duration: 1.5s;
}

target-path {
stroke: var(–path-color);
animation-duration: var(–animation-duration);
}

このように設計しておけば、デザイナーがPenpot上でカラーパレットを変更し、エンジニアがデザイントークン(CSS変数)を更新するだけで、アプリ全体のアニメーションのトーン&マナーを一括で変更できるようになります。メンテナンス性が劇的に向上しますね。

—

5. まとめと次のステップ

今回は、PenpotのSVG構造を意識したデザイン作成から、インラインSVGとCSSプロパティを駆使した次世代のインタラクティブ・アニメーション実装までを解説しました。

  • レイヤー名をセマンティックに整理する(コードを見据えたデザイン)
  • インラインでSVGを埋め込む(CSSからの自由な制御)
  • `stroke-dasharray` や CSS変数 を活用する(モダンな表現と保守性)

このワークフローをチームに導入すれば、「デザイナーの意図が伝わらない」「実装コストが高すぎる」といったコミュニケーションの壁を軽々と超えていけます。

ぜひ、今日の業務からPenpotを開いて、自分だけの美しいSVGアニメーションのプロトタイプを作ってみてください。あなたのプロダクトに、最高に心地よい「命」が吹き込まれるはずです。それでは、次回の開発ハックでお会いしましょう!

タイトルとURLをコピーしました