FirstCanvas作って内省的なこと

そういったことはあまり書かないようにしていたけれど、たまには言葉にしておくのも大事だなと思って。ふと思い返して何を感じたのか真面目につらつらと。

FirstCanvas

当初の目的

  • 全部JSで書こうと思った。htmlもcssも。やったことの無い方法でやりたかった。同じことの繰り返しがつまらなくて。新鮮味が欲しかった
  • HTML5とかCSS3とか。あとFile APIやwebフォントやってみようと。情報は多いので簡単だった
  • 実は普通にcanvasをやろうと思った。で、案外複雑だったので別の形で関わることにした


プログラムとかHTML5とか特に困らなかったのだけれど、サンプル集作るのに2ヶ月近くかかって困った。何やってんだろ。日本語書く勉強してた。

http://www.sandai310.com/firstcanvas/sample.html

地道だった。理解の仕方って人それぞれ違うから、なるべく王道に努めたけどやっぱり難しい。結局私はこの数ヶ月プログラムでなく日本語を書いていた。何やってんだろ。

でもcanvasのサンプル探したら良いの全然ない。リンクで済ませようと思ったら、表面的なものばかりで。もっとサンプル豊富かと思ったらあまり盛り上がってなかったなあ。

怠惰に済ませてもよかったけど、これでは理解が進まないだろうと思って、よし!私が書くよ!書けば良いんだろちくしょー!ということで細かい部分も確認しながらいろんなケースを想定して書いた。思ったよりも時間がかかったから、簡単だと思ったものはさっさと済ませたけど。

こんなもんアプリ作る方がめちゃくちゃ面倒で、canvasの機能なんて数日で基本は把握できるよ。そこまで難しくは無い。けど簡単でもないと思う。それをなんとかレベル落として誰でも使えるようにしたかった。

世の中って難しいことばかりだけど、少し見方を変えたらなんだそんなことなのかってことがたくさんある。いかにシンプルな世界を構築するかというのが大事で、複雑さの裏には怠慢や醜い見栄が隠れていることが多い。もちろん本当に難しいこともあるだろうから決め付けることはできないけど。

その複雑さを見過ごせるかどうかっていう線引きがあって、それが私の場合は波うっていてどうでもいいことはどうでもいいって見過ごせるけど、今回のようなケースでは見過ごせなかったんだろう。結果的にどうなったかといえばあんまり変わるもんじゃないけどさ、行動するかどうかって視点でみれば別だよ。

canvasやって感じたこと

情報が思ったより少なかった。結構あると思ったんだけど。英語圏で探すべきだったかな。アニメーションをネイティヴでやろうと思うと面倒。やっぱりライブラリ作るかしなきゃいけない。

adobeでedgeっていうCanvas使ったアニメーションの製作ソフト?を前に見た気がするけど、ああいうのが早く出たら良い。きっといろんなところから人が流れてくると思う。

あとブラウザ間での差異は気になるところですが。アンチエイリアスが微妙に違っていたり、メソッド使えなかったり、仕様と違う結果になるってのが少しあった。確認した限りでは少しだけって印象だからあまり気に留めてないけど。

js2-modeだと小さなミスが無くなった

あまり関係ないけどビックリするぐらい減る。減るというか無くなった。なんだこれは。劇的な変化だった。すごくよかった。

ie9の開発ツールは使いやすい

案外使いやすかったのでie9は楽だった。今のところoperaが困る。慣れてないからか。

能力的なこと

スピードが足りない

遅い。コード化する前にどうしても「これがベストなのか」と考えてしまう。そうしてずるずる遅くなる。たいして経験無いんだからあんま考える意味無いわ。あと名前付けるの分からん。どういう命名すりゃいいんだ。

とりあえず決断が遅いのはいただけない。基礎能力の範囲だからどうしようもないっちゃどうしようもない。訓練しなきゃいけない領域で難しい。

大局的な設計がイメージできない

プログラムはデータ部分省いて2000行弱ぐらい書いたことになるけど、私にしては大きな規模だった。

そういえば一年前は50行もかけなかったよ(汗

でもたぶん成長スピード遅いよなあ。1年経てばもっとバリバリ書けるものだろうし、もしくはもっと短くかけるだろうし。とにかく私にはこれが精一杯。今回はプログラムだけで3週間近くかかった。いちいち考えるから遅い。

それで大局的な設計だけど、んー、なんだろう。うまく組み立てることができなかった。プログラムってのは川が流れるように、きれいな流れを作って書きたいなと思った。

JSで言うのもおかしいけど関数だけで書いたプログラムはあまり好きじゃない。流れが見えない。少なくとも私が書くと見えない。グローバル変数たくさん使って関数で区切りまくって、あっちゃこっちゃあるのが馴染めない。

一本の川のように書けるわけじゃないんだけど、なんか川と川とのつながりが生きるような感じにしたい。無駄のないようにしたい。と、思っているけど無理だった。大局的にものごとをみることができない。先を見通すという意味でも、大きい視野で見るという意味でも。その私が気にすることではないのかもしれないね。

また、機能を抽出したときに、それをコード化して流れを作り出すことはできなかった。よどんだ水溜りをぐるぐるかき回すような、そんなコードを書いてしまった。そもそも川のように書くべきなのかって話だけれど。そもそも、そういうこと考えてやるものではないのかなきっと。

経験がないってのは大きい。私は他を知らないので。でもまあ、そんなこと知らなくたってできる人はできるだろう。そして私はできない。

あと機能の追加の時にどうすべきか考えた結果、私はMix-inみたいな形(だと思う)を取ったけど微妙だ。そもそもCanvasAPIの制御部分からしておかしい。別にprototypeなんて使わなくても良かった。

途中まではCanvasAPIごとにインスタンスを生成するつもりだったんだけど、データの共有で面倒なことになるなあと思ったので形を変えた。最初から想定できなかった。これのせいで内部でのデータがごちゃごちゃになった。他人が見たら困るケースだと思う。

データ構造が分からない

データってのは文字列とかエレメントとかのことで。どういった構造にすれば使いやすいのかってのが分からん。結局オブジェクトにつめることと、クロージャにしたけど。

このデータはどういう目的どう扱い、どうしたらその後の処理がスムーズになるのかと考えたとき、時間がかかってしまった。結果的にはそう悪いことはなかったし、必要だと思えるデータがすぐに扱えて無駄な変数が無かったのはよかった。まあ個人でやる分には。他人が見ればは嫌な構造だと思う。

書く前に考えすぎる

スピードの話でも一緒だけどプログラムを書くのが遅い。何やってんだろうと自己嫌悪になる。もっと書かなきゃいけないって思うんだけど、どうしてもプログラムを書く前に考えすぎる。

一応完成までの道のりはイメージできていて、でもやっぱりそれが果たして今の自分にとってベストなのかということを考えてしまうんだよね。あと細かい部分までイメージを練り上げてから書くことが多い。だから考える時間ほとんどで、プログラムを書いている時間が短い。

もっと書けば良いのにと思うんだけど、イメージできないものに手をつける勇気がない。手が進まない。だからとにかく遅い。

プロトタイプまですぐに書ける人は頭の回転が速くて良いなあと思う。先にコード化して後から修正していくという方法は苦手。あいまいなイメージだと手は進まない。細部までイメージして、流れが分かるような設計じゃないとどうしても怖いというか、変な気分になってしまう。

だから私はいつもデザインから入るんだろう。具体的なイメージが欲しくなるから。プログラムを書く人間には向いていないなと思ったので、その舞台には上がらないことにする。

結果的に

能力がないのに考えても意味がない。時間とられただけだった。適当に詰め込んであとで組み立てる。今はそれでいいかもしれない。私は考えても考えなくても結果が同じらしい。こんなひどい話は無いけど、まあそれはそれで気楽にもなれる。

他の影響を受ければもう少しいろいろ発見できるのだろうけど、もうちょっと適当に突っ走ってからにする。突っ走ったことないんだもの。


思いつくまま書きなぐったけれど、変なことばかりだなあ。矛盾している部分は私が迷っているか良く分かっていない部分だと思う。もしかしたら何も分かっていないのかもしれない。もう少し気楽にやろう。ということで何かやろうかな。年末なので忙しい雰囲気をかもし出そう。さも忙しそうにしよう。あー忙しい忙しい。