「クリエイティブ・コーディング」とは?
もしかしたら,「クリエイティブ・コーディング (Creative Coding)」という言葉を聞いて反発を覚える方もいるかもしれません。そもそもコーディング(プログラミング)自体がクリエイティブな行為なのに,わざわざそこに「クリエイティブ」という言葉を追加する必要があるのだろうかという疑問です。確かにコーディング自体クリエイティブな行為です。しかし,クリエイティブコーディングという一括りの用語になった時には,主に視覚的な表現(画像,動画,アニメーション)や聴覚的な表現(音楽,音声,音響)のために特化したプログラミングのことを指し示しています。アート,デザイン,音楽,建築といったジャンルにおけるプログラミングによる表現とその開発環境のことをクリエイティブコーディングと総称しているのです。
これまでは,プログラマーではない「普通」の人達がコードで表現するには多くの困難を伴いました。表現に的したプログラミング言語を選定し,そのための開発環境を整え,必要となるライブラリーを入手して環境設定する,といった作業は多くの経験と知識が必要です。また,表現の本質からは離れたものであるため,アーティストやデザイナー,ミュージシャンといったクリエイター達からは敬遠されてしまいがちでした。結果として多くのクリエイターは特定の用途に特化した市販のアプリケーションを購入して,そのアプリケーションの使い方を学び表現のために利用することが一般化してきました。現在でもAdobeの製品群に代表されるような多くのアプリケーションが表現の現場で多用されています。
しかし,1990年代末から2000年代初頭にかけて,表現のためのコーディング環境が開発され,プログラミングを専門にしていないような人達でも簡単にコードによる表現が可能になってきました。それに伴って市販のアプリケーションでは飽き足らない一部のクリエイター達が,自分自身でコードを書き,様々なジャンルで表現活動を行うようになってきました。こうした動きが,2010年代になって「クリエイティブ・コーディング」というシーンとして大きな影響力を持つようになって現在に至ります。
書籍『Processing クリエイティブ・コーディング入門 - コードが生み出す創造表現』でとりあげたProcessingは,こうしたクリエイティブ・コーディングの世界での代表的な言語であり開発環境です。
Processingの簡単な紹介
Processingは,Javaをベースにしたプログラミング言語であり統合開発環境(IDE)です。2001年に当時MITのメディアラボに博士課程の大学院生として在籍していたケーシ・リーズ(Casey Reas)とベン・フライ(Ben Fry)によって開発されました。オープンソース(GPL)で公開されています(図1)。
図1 ProcessingのWebサイト。Windows版,Linux版,Mac版がそれぞれダウンロードできる
Processingのアプリケーションを起動すると,シンプルなIDEが表示されます。Javaを拡張したシンプルな言語で記述することで簡単にグラフィカルなプログラミングが可能です(図2)。
図2 Processingのアプリケーションを起動したところ
例えば,640x480ピクセルのウィンドウを表示して,その中心に直径400ピクセルの円を表示するプログラムは,以下のたった2行のプログラムで記述できます。
size(640, 480);
ellipse(width/2, height/2, 400, 400);
図3 プログラムを実行すると,円が表示される
アニメーションの表現も簡単です。例えばこの円のサイズを伸縮させてみましょう。
void setup() {
size(640, 480);
}
void draw() {
background(0);
float diameter = sin(millis()/200.0) * 400;
ellipse(width/2, height/2, diameter, diameter);
}
sin関数を使用して,なめらかに円の大きさを変化させています。少しコードは複雑になりましたが,それでもまだとてもシンプルです。
Processingは,コーディングによる表現に関する部分に集中できるよう設計されています。ウィンドウを開く,描画のためのキャンバスを用意するといった,毎回行う煩雑な処理はあらかじめ用意されていて自動的に処理を行ってくれます。文法もとてもシンプルです。Processingでは,こうしたプログラムを「スケッチ」に例えています。何かアイデアを思いついた時にスケッチブックにスケッチするように,プログラムのアイデアをすぐに書き込んで実行しながら考える環境を実現しようとしています。
かといって,単純なプログラミングしかできない入門者向けだけの言語かというと,そうではありません。クラスベースのオブジェクト指向言語になっていて,必要であれば複数のクラスを組み合わせてオブジェクト指向によるプロジェクトの設計も可能です。さらに,例えば物理演算のための機能や,GUI,ネットワーク通信など様々な機能がライブラリとして用意されています。そのため,必要に応じて機能を拡張して使用できます。
Processingの仲間たち
Design by Numbers
スケッチするようにコーディングするという哲学の祖先を遡ると,Design by Numbers(DBN)という開発環境に辿り着きます。DBNは当時MITメディアラボの教授をしていたジョン前田によって1999年に開発された,とてもシンプルなプログラミング環境です。Webブラウザ上で動くJavaアプレットで,100x100ピクセルの表示画面しかありませんでしたが,「数」によってデザインをする発想はその後に続くクリエイティブ・コーディング言語に大きな影響を与えました。
Processing
ケーシ・リースとベン・フライは,当時MITでジョン前田の率いる研究グループに所属していました。DBNの思想を引き継ぎつつ,より本格的なプログラミング環境を目指したものがProcessingなのです。
その後,Processingに影響されたクリエイティブ・コーディングのフレームワークが生み出されていきます。
openFreamworks
ザック・リバーマン(Zach Lieberman)を中心にネットワーク上のコミュニティーによって開発されたopenFrameworksは,C++をベースにしたオープンソースのクリエイティブ・コーディングのためのフレームワークです。C++をコンパイルしてネイティブなアプリケーションとして動作させることが可能なため,Processingでは困難な,大量の物体をアニメーションさせることなど,計算量の多い処理も高速に実行できます。
p5.js
p5.jsは,Javascript版のProcessingで,ローレン・マッカーシー(Lauren McCarthy)を中心に2011年から始められたプロジェクトです。Javascriptのライブラリとして提供されていて,Processingと類似した文法でコーディングすることが可能です。そのため,Webブラウザ上でProcessingのようなリッチなアニメーションを動作させることが可能となっています。
ハイブリッドなプログラマーを目指して
Processingの開発者の1人であるケーシ・リース(Casey Reas)は,講演の中で,これからのプログラマーは「ハイブリッド」であるべきだと主張しています(※1)。
彼は,ハイブリッドまで至るプログラマーの歴史を,4つの段階にまとめています。
- リアル・プログラマー
- ハッカー
- アマチュア
- ハイブリッド
「リアル・プログラマー」は,1940年代から50年代にコンピュータが発明された当初の「真の」プログラマー達です。その多くはコンピュータを専門に扱う科学者達で,国家的プロジェクトによって建造された世界に僅かしかない巨大なマシンをプログラミングできる一握りのエリート達でした。
その後に続くのが「ハッカー」の時代です。1960年代から70年代にかけて,国家や軍などではなく大学の研究室などでもコンピュータが利用できるようになった時代に生まれました。コンピュータをハック(様々な技術を組み合わせて創意工夫)することで,コンピュータゲームなどそれまでに無い様々なカルチャーを生みだしていきました。
1980年代になると一般家庭にもコンピュータが普及し始めて,誰にでもプログラミングができるチャンスが生まれました。これが「アマチュア」の時代です。BASICなどの学習用のプログラミング言語を通して,趣味としてプログラミングを楽しむ時代になりました。
これらの時代に続く,現代のプログラマー像として提示しているのが「ハイブリッド」なプログラマーです。ここでハイブリッドが意味するものは,何か別の専門分野とプログラミングとの混合(ハイブリッド)です。現代でももちろん専業のプログラマーは数多く存在します。しかし,これからより重要となってくるのは,他の専門分野を持ちつつプログラミングによって実現する能力なのです。アーティスト,デザイナー,建築家,教師,作曲家,データサイエンティストといった様々な分野でプログラミング能力が必要とされています。
Processingは,こうしたハイブリッドなプログラマーのために開発されたプログラミングの環境です。プログラマーになるためにプログラミングを学ぶのではなく,プログラミングで何かを創造したい人達のための道具なのです。