12k
All articles

p5.jsを使ったクリエイティブコーディング

p5.jsでブラウザ上のクリエイティブコーディングを実践し、Canvas API、WebGL、ジェネラティブアートの比較とThree.jsやD3.jsの使い分けを解説する。

OpenReplay Team
OpenReplay Team
p5.jsを使ったクリエイティブコーディング

ビジュアル表現を素早く構築したい。ジェネラティブパターン、インタラクティブなデータビジュアライゼーション、あるいはユーザー入力に応答する簡単なプロトタイプかもしれません。Canvas APIのボイラープレートと格闘したり、WebGLパイプラインを設定することもできますが、10行のJavaScriptを書くだけで画面上で図形を躍動させることもできます。

これがp5.jsの提案です:摩擦のないブラウザベースのクリエイティブコーディング。

重要なポイント

  • p5.jsは、ブラウザ上で直接、迅速なビジュアルプロトタイピングを行うためのセットアップ不要の環境を提供します
  • ライブラリの2つの関数アーキテクチャ(setup()draw())は、インタラクティブグラフィックスを構築するためのシンプルかつ強力なメンタルモデルを作り出します
  • 最新のp5.jsは、async/await、改善されたカラーワークフロー、優れたタイポグラフィ、よりクリーンなシェーダーAPIをサポートしています
  • ビジュアルプロトタイプ、ジェネラティブシステム、データスケッチ、インタラクティブデモに最適で、プロダクショングレードの3Dやパフォーマンスクリティカルなアプリケーションには向いていません

フロントエンド開発者がp5.jsに注目すべき理由

p5.jsは単なる教育ツールではありません。JavaScriptが動作する場所ならどこでも実行できる、ビジュアル実験のための迅速なプロトタイピング環境です。

フロントエンド開発者にとって、これが重要な理由は以下の通りです:

  • ビルドステップ不要。 HTMLにscriptタグを追加するだけで描画を開始できます。
  • 即座のビジュアルフィードバック。 drawループはデフォルトで60fpsで実行されるため、インタラクションのアイデアをテストするのに最適です。
  • クリーンな統合。 p5.jsは既存のJavaScriptとうまく連携します。ESモジュール、async/await、最新の構文を摩擦なく使用できます。

ライブラリがCanvasコンテキスト、アニメーションタイミング、入力イベントを処理します。あなたは実際に構築しているものに集中できます。

コアとなるメンタルモデル

p5.jsは2つの関数を中心にスケッチを構成します:

function setup() {
  createCanvas(800, 600)
}

function draw() {
  background(220)
  circle(mouseX, mouseY, 50)
}

setup()は一度だけ実行されます。draw()は継続的に実行されます。これがアーキテクチャの全てです。

このシンプルさは欺瞞的です。この構造の中で、パーティクルシステム、物理シミュレーション、オーディオビジュアライザー、ジェネラティブアートシステムを構築できます。制約が明確さを生み出します。

最新のp5.js:何が変わったか

最近のp5.jsリリースは、JavaScriptを使ったクリエイティブコーディングがどのように成熟してきたかを反映しています。知っておくべきいくつかのハイライト:

非同期アセット読み込み。 従来のpreload()パターンは依然として機能しますが、最新のp5.jsは画像、フォント、データの読み込みにPromiseとasync/awaitパターンもサポートしています。コードを標準的なJavaScriptのように書くことができます。

改善されたカラーワークフロー。 カラー処理は複数の色空間をサポートし、グラデーションやパレットのためのより直感的なAPIを提供します—ブラウザでのジェネラティブアートに不可欠です。

優れたタイポグラフィ。 フォントレンダリングとテキストレイアウトが大幅に改善され、p5.jsがデータビジュアライゼーションやタイポグラフィック実験に適したものになりました。

シェーダーのエルゴノミクス。 カスタムシェーダーの記述がより親しみやすくなり、uniformの受け渡しやWebGL状態の管理のためのよりクリーンなAPIが提供されています。

WebGLモード。 WebGLは、より複雑なビジュアル作業のための主要なGPUアクセラレーションパスであり、3Dグラフィックスやシェーダーベースのエフェクトに大きなパフォーマンス上の利点を提供します。

p5.jsを選択すべきとき

p5.jsクリエイティブコーディングは、特定のユースケースに適しています:

ビジュアルプロトタイプ。 プロダクション実装にコミットする前にインタラクションのアイデアをテストする。フィードバックループは秒単位で測定されます。

ジェネラティブシステム。 ビジュアル出力を生成するアルゴリズム—手続き的パターン、ノイズベースのテクスチャ、パーティクルの振る舞い。p5.jsはプリミティブを提供し、あなたはルールを提供します。

データスケッチ。 データ探索中の迅速なビジュアライゼーション。プロダクションダッシュボードではなく、見ているものを理解するのに役立つラフドラフトです。

インタラクティブデモ。 ドキュメント、ブログ投稿、プレゼンテーション用の埋め込み可能な例。p5.js webエディターにより共有が簡単になります。

学習と教育。 はい、教育には依然として優れています。しかし、それは機能であり、制限ではありません。

別のツールを使用すべきとき

p5.jsは以下が必要な場合には適切なツールではありません:

  • 複雑な3Dシーン(Three.jsを検討してください)
  • プロダクショングレードのデータビジュアライゼーション(D3.jsまたはObservable Plotを検討してください)
  • 物理演算、衝突検出、アセットパイプラインを備えたゲームエンジン
  • きめ細かいGPU制御を必要とするパフォーマンスクリティカルなアプリケーション

このライブラリは、生のパフォーマンスや機能の完全性ではなく、表現力と反復速度を最適化しています。

セットアップなしで始める

インストールチュートリアルはスキップしてください。p5.js webエディターを開き、これを貼り付けて再生ボタンを押してください:

function setup() {
  createCanvas(400, 400)
}

function draw() {
  background(0, 10)
  let x = noise(frameCount * 0.01) * width
  let y = noise(frameCount * 0.01 + 100) * height
  fill(255, 100)
  noStroke()
  circle(x, y, 20)
}

これでノイズ駆動のアニメーションとモーショントレイルができました。数値を変更してください。何が起こるか見てください。これがワークフローです。

まとめ

p5.jsは、ビジュアル作業におけるアイデアと実装の間の距離を取り除きます。ジェネラティブアート、インタラクティブビジュアル、クリエイティブな実験に興味があるフロントエンド開発者にとって、コンセプトから動作するプロトタイプへの最速の道です。

このライブラリは教育的なルーツを超えて、ブラウザベースのクリエイティブコーディングのための正当なツールへと進化しました。データビジュアライゼーションをスケッチしたり、インタラクティブデモを構築したり、手続き的グラフィックスで可能なことを探求したりする場合でも—p5.jsは邪魔にならず、構築させてくれます。

よくある質問

p5.jsをReactや他のフロントエンドフレームワークと一緒に使えますか?

はい。p5.jsはReact、Vue、その他のフレームワークと連携します。グローバル名前空間の競合を避けるためにインスタンスモードを使用できます。useEffectフックまたはコンポーネントライフサイクルメソッド内でp5インスタンスを作成し、コンテナ要素の参照を渡します。いくつかのコミュニティライブラリは、よりクリーンな統合のためのReact固有のラッパーも提供しています。

p5.jsのパフォーマンスは生のCanvas APIと比べてどうですか?

p5.jsはCanvas上に小さな抽象化レイヤーを追加するため、生のCanvas APIは同一の操作に対してわずかに高速です。ほとんどのクリエイティブコーディングプロジェクトでは、この差は無視できます。パフォーマンスの限界に達した場合は、GPUアクセラレーションのためにWEBGLモードに切り替えるか、フレームごとの計算を減らしてdrawループを最適化してください。

p5.jsはプロダクションウェブサイトに適していますか?

p5.jsは、インタラクティブなヒーローセクション、アニメーション背景、埋め込みビジュアライゼーションなどのプロダクションユースケースに適しています。バンドルサイズに注意してください—フルライブラリは圧縮前で約800KBです。プロダクションでは、必要なモジュールのみを読み込むか、重要なコンテンツのレンダリング後にライブラリを遅延読み込みすることを検討してください。

p5.jsのsetup関数とdraw関数の違いは何ですか?

setup関数はスケッチの開始時に正確に一度だけ実行されます。キャンバスの作成と変数の初期化に使用します。draw関数はループで継続的に実行され、通常は1秒間に60回実行されます。ここには、アニメーションを作成したり、マウス位置などのユーザー入力に応答するコードを配置します。

DevTools for the frontend

Gain Debugging Superpowers

Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers.

Star on GitHub12k

We use cookies to improve your experience. By using our site, you accept cookies.