「好き」を探すクリエイティブコーディング - ランダムって面白い -

## はじめに
この記事ではクリエイティブコーディングで扱うランダムの面白さについて書き、[このアドベントカレンダー](https://qiita.com/advent-calendar/2022/random_creative_coding)を行うにあたってのモチベーション的なところを書きたいと思います。

## クリエイティブコーディングとは
私は2021年の春頃から、ひょんなことを理由にp5.jsを用いた、いわゆる「クリエイティブコーディング」を行うようになりました。
初めてこの言葉を聞いた方のために、未熟者ではありますが簡単に紹介させてください。

「クリエイティブコーディング」とwebで検索すると、こんな風に出てきます。
> クリエイティブコーディングは、何か機能的ではなく表現力のあるものを創造することを目的としたコンピュータプログラミングの一種です。 ライブビジュアルやVJingの作成、ビジュアルアートとデザイン、アートインスタレーション、投影と投影マッピング、サウンドアート、広告、プロダクトプロトタイプなどの作成に使用されます。（wikipediaより）

私の感覚的に、これは広義な意味でのクリエイティブコーディングです。
少し「メディアアート」的な意味合いが強いのかなとか思っています。（初学者だからこその感覚で書いていることはご容赦下さい）

一方で、私が今回扱いたいと考えているのは、こんな感じのものです。
> **簡単にいうとプログラミングで絵やアニメーションやサウンドなどなど楽しいものを楽しく作る活動** （reona396 [クリエイティブコーディングとはどんな活動で、どんな所が面白いのか語らせてくれ！](https://note.com/reona396/n/n7a0ee0205c48)より）

長く（ここで言う狭義の）クリエイティブコーディングを行われているreonaさんのnoteから引用させていただきました。
つまり、狭義のクリエイティブコーディングは「プログラミングを用いてキャンバスに絵を描くようなもの」として扱われており、これを今回はテーマとしたいと考えています。

そして、このような狭義の(以下略）クリエイティブコーディングは多くの場合、Processingやp5.jsのようなツールを用いています。

まあ、こんな言葉の意味合い的な所は置いておいて、じゃあ具体的にはどんなものができるかと言うと、こんなものです。

https://twitter.com/kim___megane/status/1597032579768930304

これをクリエイティブコーディングの例として挙げるのが最適かは置いておいて、最近自分の作ったもので気に入っているものを載せてみました。

基本的な図形やテキストを使って表現しているのが特徴かもしれません。
それがゆえに、非常に簡単に実装することができます。

そろそろ長くなってきたので、あとは（上に引用させていただいたreonaさんのnoteのように）超わかりやすくまとめられている方の記事におまかせして、今回やりたいと思っていることに焦点を当てたいと思います。

## クリエイティブコーディングにおけるランダム性はとっても面白い
クリエイティブコーディングではよくrandom()というものを使います。
これは読んで字の如く、毎回ランダムに（前に行ったことと関連付かず）処理が行われるものです。

例えば、p5.jsを用いて作成した以下の2つの画像を見てください。
![myCanvas (52).jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2236620/e0785c63-ba80-c01a-4fb4-6e298d0a50ae.jpeg)
![myCanvas (53).jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2236620/ab290712-c135-cfc7-e454-c64d083782c0.jpeg)
これらは同じコードを用いて描かれたものです。
いくつかの変数をランダムに設定しているために、2回の描画が違う結果になっています。
例えば、上の画像には右上に赤い円がありますが、下の画像にはない、みたいな具合です。

そして、私はこのコードで描かれるものが「好き」です。
これはつまり、毎回ランダムに描かれる中に変わらない「何か」があり、そこと私の「好き」が結びついていると言えると思います。

あえて、複雑な言い方で表現しましたが、もっと具体的に言えば、私はこの作品の「色」や「円形」といった部分が好きということです。


また、違う角度からもランダム性を見てみましょう。
またまた、p5.jsを用いて作成した以下の2つの画像を見てください。
![myCanvas (54).jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2236620/eb59d585-880e-5917-1f02-fb89e26fc8de.jpeg)
![myCanvas (55).jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2236620/b63ee84f-f3a1-1740-081c-698ec1207d0c.jpeg)
これは先ほどのコードの円形だった部分を正方形にしてみたものになります。
先ほどと同様に、これら2つの結果はランダムにより異なるのですが。。

私は上の結果より下の結果の方が好きです。
これはおそらく、「描かれるものが四角形の場合は、位置がどこかに密集しているよりも分散している方を好む」ということになるのかなと思います。
ここまでをまとめるとつまり、どうなるかと言うと。。
クリエイティブコーディングで用いるランダムには以下ような2点の特徴があると言えると思います。
1. どんな描画結果でも同じにしたい（変化させたくない）パラメータが自分の好みを示す
2. 描画結果による変化もまた自分の好みを示す

上を「必然」、下を「偶然」みたいにも言えるのではないかと思います。
つまり、ランダムはこれらの相反する2つの側面を生み、これら2つの側面が私の好みを示していくという（のが私の考えな）わけです。

割とランダムって言われると2の方が直感的に想像しやすい面だと思うのですが、私はそれ以上に1の面が面白いと思っています。

## 最後に
ということで、長々と書き記してきましたが、このような考えでで[このアドベントカレンダー](https://qiita.com/advent-calendar/2022/random_creative_coding)を行おうと思いました。
そして、実際にアドベントカレンダーでは、自分の好む作品orその中でも好んだ描画結果を記して「何（どこ）が好きなのか」について検証していくようなことをしてみたいと思います。
「なぜ好きなのか」は難しいかもしれませんが、「何が好きなのか」はわかるかなと思うところです。

色や大きさ、、、などの要素というのは、キャンバス上の表現のみならず、どこか自分の価値観とも紐づくものかもなどとも思っています。

また、このアドベントカレンダーに1人でも他の方にご参加いただけますと、様々な方の「好き」を覗き見ることができ、より面白いものになるのではないかと思っておりますので、ぜひ参加お待ちしております。