日常の進捗

主に自分のための,行為とその習慣化の記録

クリエイティブコーディング学習の最適解としてのProcessingと,デイリーコーディングのススメ

これはProcessing Advent Calendar 2017 - Qiitaの21日目の記事です。

Advent Calendarを通じて「プログラミングを通じて個人が表現する文化」がもっと盛り上がったら良いなと思ったので,思い立って勢いで書いてみることにしました.このエントリの内容は大きくは以下の2つです.

  1. クリエイティブコーディング環境として,Processingは日頃のアイデアを形にしたり,プログラミングの基礎であるアルゴリズムを学ぶ道具として最適
  2. 決まった時間で短いコードでも良いから毎日書く「デイリーコーディング」は日々の成長が感じられてオススメ

Processingで具体的に何か作ったものを紹介するというより,作るための取り組みとして毎日コードを書く習慣や,そのために出来ること(参考になる情報の紹介やモチベーションの維持など)について紹介できればと思います.

クリエイティブ・コーディングとは

Wikipediaによると,

Creative coding is a type of computer programming in which the goal is to create something expressive instead of something functional. It is used to create live visuals and for VJing, as well as creating visual art and design, art installations, projections and projection mapping, sound art, advertising, product prototypes, and much more.

だそう.これをざっと訳すると,こんな感じです.

クリエイティブ・コーディングは,機能的ではなく表現力のあるものを創造することを目指すコンピュータプログラミングの一種です.ライブビジュアルやVJ、ビジュアルアートとデザイン、アートインスタレーションプロジェクションマッピング、サウンドアート、広告、プロダクトのプロトタイプなどの作成に使用されます。

ここで使われている「クリエイティブ」という言葉は,対立項としての「機能的で役に立つもの」を軽視するのではなく,より感覚的にプログラミングすることを通じて,表現やアウトプットすること自体のハードルを下げ,これまでにないものを生み出すことを狙いにするために用いられていると読めます.

Processingとは

Processing.org

Processingは,オープンソースプログラミング言語であり,シンプルな記述でコーディングできるのが特徴です.環境構築も容易でJavaをベースにしているため,Windows, Mac , Linuxで実行できます.私たちの大好きなRaspberry Piでも動作します(英語っぽい言い回しを使ってみたかった😃).インストールも簡単で,PDEと呼ばれる開発環境が用意されています.そのため入門にはとっつきやすく,その他Atomなどの使い慣れたテキストエディタでコーディングすることもできます.

Processingでは新規でファイルを作成すると「sketch_171221a」のような名前になります.これは「外に出て気軽に風景をスケッチをするように,Processingに触れて欲しい」という開発者の2人の考えに基づいて命名されていると書籍で読みました.

ProcessingはopenFrameworksやその他のクリエイティブコーディング環境に比べると実行速度や最新技術のフォローアップは若干遅いものの,きちんとアップデートされています.また記述がシンプルなためアルゴリズムや実現したいイメージに集中して書きやすい印象です.近年は特にマシンスペックの向上もあって,起動・実行も体感として早いです.

Processingから派生した,JavaScriptで開発できるp5.jsというものもあります(Processing.jsもありますが開発はp5.jsのが活発です).こちらはWebブラウザ上で実行できてシンタックスもProcessingに非常に近いので移行が容易です.DOMやサウンドのライブラリの他サードパーティのライブラリ開発も目覚ましく,Webベースで何か作りたいと思うならこちらも選択肢に入ると思います.

デイリーコーディングとは

「毎日コーディングする習慣」を指す造語です.テーマが決まっていればそれを,決まっていなければ30分でもいいのでパソコンに向かってプログラムを書くというもの.アイデアが浮かばない場合はサンプルコードを写経するでも良いと思います.その際に,少しでも元のコードを書き換えたり出来るとなお良いですね.

僕はこれまで,カッコいいコードを意味もわからず書経しようとして何度か挫折しました.本来の目的はコードの意味を理解するために書経するはずなのに,どんな処理が行われているか理解しないまま,長いコードを頑張って書き写しても,往々にして動きませんでした.また動かない理由もわかりませんでした.そう,地獄です👹.そういうときはモチベーションが下がったりしました.

一方で今のような,短時間でもコーディングを続けるやり方にたどり着いてからは,短いシンプルなコードを書き換えながら,表現出来るものを探したりすることが楽しみの一つになりました.例えて言うと富士山に登る前に,気軽なハイキングからはじめるような感じでしょうか.

僕が意識的にProcessingでコーディングしようと思い始めたのは,Sketchフォルダのファイル名から推測するに2015年の9月14日のようです.今だと2年強が経過したくらいですが,どんなに忙しくてもだいたい毎日書いているようです.続かないで途切れるときもあります.そういうときは別の日にもう一つコードを書いて良しとしています.ブログをログとして使うと,継続が確認できて良いです.

デイリーコーディング 10のコツ

0. 本気は「ださない」

最初のうちは特につい力を入れてしまいがちで,力みすぎると翌日も同じテンションで取り組まないと行けなくて,疲れます.疲れると続きません.僕の経験だと,「良いもの,エントリに値するものを作り続けようとすること」が無意識下でプレッシャーになっていたように思います.もししばらく良い感じに続いても,ずっとは続きませんでした.

ハードルを高く上げていた頃は,何らかの事情で途切れた場合に復帰する際,膨大なエネルギーが要りました.「続けているうちにカッコいいものが作れる」と楽観的に肩の力を抜いて取り組むのが良いような気がします.地に足が着いた状態で,背伸びで届く範囲を広げてくような感じでしょうか.忍者が若木を飛び越えてるうちに大木をジャンプできるようになる,みたいな.

1. 決めたルールを守るために時間を「作る」

世の中には無限に時間を費やせるものがたくさんあります.ゲームやNetFlixKindleで読む漫画なんかもそうですかね.そういった誘惑に溺れること自体は悪いことじゃないと思いますが,一度やると決めたことを続けない理由をつくってしまうことは,ひいては色んな局面でやりとげないことに慣れてしまうので良くないと思います.

最近思うことですが,いつも人は何かを諦める理由を探して生きています.何かをやり続けるのに理由は1つしか要らないのに引き換え,一度続けたことを今止める理由はいくらでもあります.仕事が忙しいから,課題がたくさんあったから,体調が良くなかったから,作りたいものがつくれないから,時間がないから,他の人も続いていないから,眠いから,パソコン開くのが面倒だから,もっと大事なことがあるから,もう十分頑張ったから,才能がないから.

「やらない理由」は倒しても倒しても何時でもどこでも何度でも登場する,手強いモンスターです.

こういった沢山ある「やらない理由」の大半を倒す方法が一つあります.早起きすることです.夜は往々にして割り込みで仕事や予定が入ったり干渉されがちですが,比較して朝はインタラプトされることは少ないです.ただ,生活改善せず単に早起きするのは体調崩す原因にもなるので,早寝して早起きするのが良いでしょう.早起きの良いことは,一日の可動時間の最初の時間であるため,落ち着いて取り組めることです.寝起きが悪い人はシャワーや起きてコーヒーなど飲んでから取り組むと良いかもしれません.朝早起きして「作る時間」は誰にも邪魔されない「とても大切な時間」になります.

2. ルールは自分に合わせて設定する

守れるルールにするために,ルール自体を自分に合わせて少し緩く設定するというのも一つの方法です.TwitterのTL経由で読んだ「まいにちDTM」ということをやってる方のエントリで設定したルールが書かれていましたが,非常に参考になりました.

* 以下に定める日を除き、毎日「まいにちDTM」を行う
    * ブログ更新日である金曜日、所属サークルで作業会を行う日である水曜日
    * 自宅以外で夜を過ごす日(引きこもりなので基本的にないです)
    * 「まじでヤバイ」日(一か月に3回のみ行使可能)
* 以下のいずれかを行う
    * メロディとコードのみで構成されるピアノソロ的な曲を作る
    * 深夜の2時間DTM

DTM使用機材が多いので予定がはいってしまった夜は例外とすることや,月3回つかえるルールを破っても良い日を設けているのはとても面白いと思いました.

1か月間、ほぼ毎日曲を作ってみました。その成果と感じたこと | wararyo SoundWorks

バイオリズムや環境要因でルールを守れないこともあることを前提で守れるルールを設定しておくのは非常に大事だと思います.

3. 同じ仲間から刺激を受ける

何か取り組むべきものがある仲間がいると励みになるものです.僕の場合は,ブログやqiitaなどでProcessingやコードベースのクリエイティブコーディングで記事を上げている人をフォローして,そういうものを見てモチベーションを維持していました.

極上のエントリを月一で上げているひとより,ちょっとしたものでもいいので毎日上げている人をフォローして,刺激をうけました.特にaa_debdebさんが書いている30min Processingは,現在更新が落ち着いてますが,1年半以上毎日Processingで書かれた多彩なコードが更新されていて,やり取りしたことこそありませんでしたが,日々刺激を受けました.

TwitterInstagramハッシュタグを追いかけるのも良いかもしれませんね.

4. 積み上げたことを喜びに変換する

積み上げたものをどんなふうに指標とするかは人それぞれだと思います.1週間,1ヶ月,1年続いたとか,10記事,100記事のような記事数で考える場合もあるでしょう.達成感とか成長を実感するのはモチベーション維持に効果あるというのは色んな所で言われていることです.

僕は「なんとなく雰囲気でプログラミングができるかも」という時に積み上げたことを実感しました.それまでは続けているけど,実際それが身になっているのかよく分からないような,何とも言えない感じでした.「なんとなく雰囲気で書ける」というのは,実行画面や脳内でイメージしてる動きや形が,どんなふうにコードとして書かれているか,なんとなく雰囲気でトレースできる,というような感じです.うまく説明出来ませんが,手癖で生成的なコードが書ける感じでしょうか.

複雑なアルゴリズムのコードはほっとくと忘れてしまうんですが,あまり気にしてません.書いたことがあれば思い出せそうな感じがするからです.

5. 途切れても気にしないで続ける

継続が途切れると復帰するのにエネルギーが要る,と書きました.しかし単純計算で考えれば,1日コードを書くができなかったら,翌日2つ書けば帳尻が合います(一週間空いてしまうと少し大変ですが).1つ1つに力を入れて取り組もうとすると大変ですが,1つ作ったものを少し書き換えて2つめをバリエーションとして作るようなものであれば慣れてくるとすぐ出来ます.デイリーコーディングは誰かに求められてやるものではなく,自分だけの楽しみです.「やった,リカバリーした」という気持ちの整理がつけばこっちのもので.都合よく解釈して進みましょう.

6. 常に別の視点を取り込む

誰にも依らず孤独に続けられる才能もあると思いますが,僕はそうではないので定期的に身近な人に作ったものを見せたりして感想や意見をもらいました.人に見せて良いことは「別の視点でプログラムやコードに意見を言ってくれる」こと.既存技術や別の分野の知見からプログラムの応用可能性について考えたり出来るのは,媒(なかだち)してくれる他者があってこそかもしれません.日々のコーディングが何かの役に立つなら,それはとても実りあることです.

外からの視点を意識するために,ブログに記事を書いていくというのも良いやり方だと思います.いいねや★がつくと励みになります.僕もそういうものを見かけたら★つけるようにしています.

7. やることは事前に決めておく,そのためにログを作る

前日の続きをやる場合は良いのですが,何をやればいいのかで悩んでしまうと時間が勿体無いので,やることを取り掛かる前に決めておけると良いです.コーディングが終わったタイミングで,ブログやSNSなどに考えたことや感じたこと,今後の方針をコードと合わせて残す習慣を作ると良いかもしれません.

僕の場合は,いわゆるスキマ時間にYoutubeのProcessing関連の動画を見たり,書籍から面白そうなトピックを探して見つけたりしていました.サンプルコードや事例が豊富にあるのもProcessingの良いところです.

8. 他の分野にも少しずつ手をのばす

Processingは主に視覚的なコンテキストにおけるコンピュータ・プログラミングの基礎を教育/学習するために開発されました.そのためopenFrameworksやArduinoなどの他のクリエイティブコーディング環境への移行も比較的容易です.

Processingでできること,openFrameworks/Arduinoでできることの方向性は異なります.新たなプログラムのパラダイムを知り可能性を広げ,そこにこれまでの知識や経験をつなげられたら,別の楽しさが見つかると思います.

また,プログラミング言語間の往来だけではなく,プログラミング的な考え方を他の分野に応用するなんてことも出来ると楽しいかもしれません.

9. 3K

KEIZOKU,KAIZEN,KUFUの3要素.

参考

日々鼓舞してくれた,プログラミングの楽しさを教えてくれた人たちの活動を,ほんの一部になりますが紹介します.他にもこういうものがありますよとかあれば遠慮なくコメントなどで教えてください.

学習教材

yoppa.org

クリエイティブコーディング界のビックレジェンド田所さんのWebサイトには多くのProcessingに限らないクリエイティブコーディング関連の授業資料が公開されています.田所さんは今年書籍も刊行されているので体系的に学びたい人は購入すると良いと思います.

p5codeschool.net

P5AholicさんによるProcessingのチュートリアルサイト.章ごとにまとまっていて,とてもわかりやすいので入門にオススメです.

Processingクイックリファレンス

Processingクイックリファレンスを公開されているのが武蔵野電波さん.Processing公式のリファレンスを読んでも命令の意味が分からないなどの場合はこちらを観るのが良いかもしれません.

youtu.be

Processing財団のメンバーにして,クリエイティブコーディング界の初のYouTuberにして,Processing書籍のバイブル「Nature of Code」の著者,Daniel ShiffmanさんのYoutubeチャンネルCoding Train.ここではほぼ毎週2〜3時間(!)さまざまなトピックについてライブで配信されたものが公開されています.その中から編集されたものがCoding Challengeとしてまとめられています.

最近はp5.jsやChrome拡張など分野は違えど様々なトピックについて紹介されているのでとてもいい刺激になります.Shiffmanさんの,闊達で愛嬌のあるコーディングの様子はとても楽しそうでぜひ一度観てみてください.

モチベーション維持

30min-processing.hatenablog.com

元「30min Processing」.毎日クリエイティブコーディングするその質の高さと継続性に引っ張られる部分がありました.今でもたまに立ち寄っては刺激を受けることが多いです.

コーディングしたものを毎日SNSなどにアップする活動をやっている人たちです.junkiyoshiさんや,zachliebermanさんはopenFrameworksでコーディングしたものを上げていて刺激になります.

codevember.xyz

11月の1ヶ月間,日ごとに変わるお題に合わせてコーディングするというチャレンジ「Codevember」.2016年から始まっていて,名前は完全にダジャレだけど,お題ごとに挑戦するのは楽しそうだなと思っているので来年は参加したいと思います.

最後に:デイリーコーディングからデイリークリエイティング

ここまでクリエイティブコーディングとデイリーコーディングについて書きましたが,僕は数ある創造的行為の一つとしてコーディングがあると考えています.クリエイティブコーディングは,作っていく中で偶発的な発見がある楽しい行為ですが,それ自体が特別なものとは思っていません.極端な話,個人が持っている創造性の発露のあり方の一つがクリエイティブコーディングであっても良いし,そうじゃなくても良いと思っています.

何が言いたいかというと,デイリーコーディングは一つの応用可能な考え方で,デイリードローイングでも良いし(Dear Dataって本マジオススメです),デイリーモーショングラフィックスEveryDayOneMotionは既にありますね)でも良いです.デイリーライティングでも,デイリーフォトグラフィー,デイリークッキング,全部デイリークリエイティングです.

昔のWebのリソースが限られ,検索エンジンが未熟だった時代には「ブログにゴミを書くな,有益なものを残せ」みたいな考えもあったように思いますし,僕もかつてそういう考えを知っているからこそこんな内容を書き残して良いのか,逡巡することはありました.しかし,Webが少なくとも1つの文化圏として認知されている現在においては,失敗記事や上手くいかなかったという情報すら「落石注意」の看板のように役に立つものだと思っています.失敗が人を励ますこともあります.

個人の創造性を蓄積させる手段としてのデイリークリエイティングを通じて,作ることや表現することがある種特別で特権的なものとして認知されている現状から,誰でもいつでも始められ,そこに関わる人同士がお互いの試みを認め合えるものにできるのではと思っています.その先の世界で人は何を見て聴いて感動するのか.個人的に今はそういうことに興味があります.

徒然と書いてきましたがこのエントリが,誰かの背中を押す?コーディングを始めようとするきっかけ?とにかく応援するものになってくれたら良いなと思いつつ,この辺で終わろうと思います.