はじめての Qiita 投稿。はじめての アドベントカレンダー ということで、緊張してタイプする手が震えておりますが、よろしくお願いします。
ノリでやると決めたものの、何書いたらいいか迷ってしまったのですが、皆さん Flash への思い出を語られているので、私もそのあたりを軸にだらだらと語ろうかと思います。
最近の開発環境の雑感
2000年代、ウェブブラウザの種類が増えはじめ、通信速度も上がり、インターネットが通信インフラからメディアになった時代。ちょっとリッチなコンテンツを作るときは Flash という時代がありました。
その後、Flash はオワコンという事になり、加えて Unity や oF の登場もあり、フロントエンドの開発環境は群雄割拠の時代へと突入するわけですが、自分の得意な言語を使いやすい反面、技術共有のコストや開発のリスクは特に改善されていない印象があります。
Flash はバランス良かったよね
個人的に感じていた Flash 最大の利点は GUI での制作とプログラミングでの制作の絶妙なバランス。かつ、それらが相互参照可能という非常に高度な柔軟性をもつツールであったという点です。
タイムラインで作成したアニメーションと、ActionScript で実装したアニメーションが、素材として相互に参照できる。そして、その特性をきちんと理解したデザイナ・プログラマ(この分け方は嫌いですが便宜上)同士であれば、少ないコミュニケーションで素晴らしいアウトプットを生みだせる開発環境でした。
現在 Flash は Animate へと名前を変え、その名の通りアニメーションに重きを置くようになりました。この舵取りは、Flash が元来もつ強みを活かしたものですが、元々画像や動画等のグラフィック以外を全てプログラムで構築していた自分にとっては、アニメーション機能以外の実装のバランスも良いと感じていたので、これは少々勿体なく感じています。
特に使い勝手が良いと思っているのは通信関係の実装です。元々ブラウザ上で実行されるコンテンツであったこともあり、Unity や oF に比べ、HTTP通信をはじめとした通信処理全般が良く出来ていました。
【TEAMLAB HANGER@VANQUISH SHIBUYA 109MEN'S】
これはチームラボ時代に作ったものですが、Flash で1台のPCから Full HD モニタ6枚分のアニメーションを出力するのが難しかったため、Mac mini 6台を DatagramSocket を用いて UDP 通信で SWF の出力内容を同期させました。そのすべてを ActionScript3 のみで完結させています。
空間演出系は今でこそ Unity や oF が多用されていますが、よほど強力なフレームレートを必要としない限りは、こういった工夫をすることで Flash にもまだ十分に可能性があると思います。(今では UNet 使ったほうが楽とかありますが)
開発環境との付き合い方
私達開発者というものは、より良いアウトプットのためにツールの盛衰と心中する訳にもいかないのも事実です。しかし、開発環境の変遷期にはどうしても古い環境のほうが楽な状況というのが出てきます。
究極的には、開発環境をしっかりと取捨選択して、そのなかで最強を目指すというのが一番かもしれません。しかし、現在は群雄割拠の戦国時代であり、技術を学ぶことと同じくらい、時勢を読む力が必要になってきてしまっています。
また、この表現は oF や Cinder、この表現は Unity、この表現は HTML、WebGL、Flash といったように、アウトプットの種類によって開発環境ごとの得手不得手があります。
そんなときは、複数のアプリケーション同士を通信させて相互に操作可能にしちゃうというのは如何でしょうか?結局のところ、プロトコルというのは開発環境とは別の問題ですから。
OSC のススメ
自分は、プロセス間通信やマシン感の通信に OSC (OpenSoundControl) を主に使っています。
OSC の良いところは、人間にわかりやすく、大体のプログラムでライブラリが見つかり、古くからあるので資料やサンプルが豊富なところです。
ちなみに、前述の Flash での PC 6台連動では OSC 通信部分を自作しました(TUIOライブラリとかにOSC実装部分があったのですが興味本位で)。そのコードは以下に公開しています。
【OSCSocket】
https://github.com/sgmnt/OSCSocket
その後、OSC の使い勝手にはまって nodejs 版も実装しました。
(これまた、既存の npm ライブラリがあるのに)
【node-oscsoket】
https://github.com/hrfm/node-oscsocket
さて、これらを使って Flash / WebGL / oF / Cinder / Processing / Unity 等々を相互に操作する無駄にごついデモを作ろうとしたのですが、この文章を執筆している時点で既に23時になってしまったので、年末暇ができたら追記なりで公開することにします。。。(ここが一番重要なのに)
まとめ
曰く、通信というのは「通いあって信頼を深める。」という意味なのだそうです。
異なる技術・スキルを組み合わせる事は更に重要となってきていますが、通信を上手く使ってアプリケーションを仲良くさせてみるのも、たまには面白いのではないでしょうか。そうすることで、 Flash の良さを再発見できるかもしれません。
おしまい。