D3の魅力

最終更新日

d3.js Advent Calendar 2013 6日目の参加記事です。

技術的なことはちょっと置いておいて、個人的なD3愛を語ってみました。

Hackers_and_Painters

例えば、大学で私は、コンピュータに手を触れる前に 紙の上でプログラムを完全に理解しなければならないと教わった。 でも私はそういうふうにはプログラムできなかった。 私が好んだやりかたは、紙の前ではなく、コンピュータの前に座って プログラミングすることだった。もっと悪いことに、 辛抱強く全てのプログラムを書き上げて正しいことを確認するなんてことは せずに、私はめちゃくちゃなコードをおっぴろげて、 それを次第に形にしてゆくのだった。 私が教わったのは、デバッグとは書き間違いや見逃しをつかまえる 最終段階の工程だということだったが、 実際に私がやっていたのは、プログラミングそのものがデバッグという具合だった。
(中略)
プログラミング言語はプログラムを考えるためのものであって、 既に考えたプログラムを書き下すためのものじゃない。 それはペンではなく鉛筆であるべきなんだ。

プログラミングには2種類の方法があると思っています。

1つは、最初にきっちりと設計・仕様を定めて描いていく方法。
1つは、ひらめき(インスピレーション)に任せて、思うがまま、心の赴くままにコードを紡いでいく方法。

多くの場合、お仕事で行うプログラミングは前者になります。

後者の方法は、Paul Graham ほどのハッカーであれば最終的に美しいコードが出来上がるのかもしれませんが、凡庸なエンジニアではコードを弄り回しているうちにしっちゃかめっちゃかになり、できそこないのスパゲッティが出来上がったり、あるいは完成することもなく終わったりします。

お仕事ではまったく推奨されない方法です。

しかし、圧倒的に”楽しい”のは後者の方法でプログラミングしている時だと私は感じます。

Paul Graham はそれを絵描きにたとえましたが、個人的には「粘土遊び」により近いのではと思っています。

もちろん、最初にきっちりと設計し完成形を定めてつくるモノに比べれば、圧倒的に品質は劣るのですが、「ああだ、こうだと弄まわしているうちになんとなく形になってきて、出来上がりの完成形が見えてくる。作りながら創る」そんな粘土遊びに似たプログラミングが、実のところこの上なく楽しいのです。

私がD3に魅力を感じているのは、D3がこの「弄りまわしながら、徐々に作品を作っていく」のに非常に適したライブラリだからです。

単に「手持ちのデータをグラフにしたい」というだけなら、もっと簡単に見た目のかっこいいグラフを表示できるライブラリが山ほどあります。

あるいはD3をコアとしたWrapperライブラリでも目的を果たすことができるでしょう。

使いたいデータが決まっていて、見せたい図が定まっていて、やりたいことがすでに分かっている場合には、D3は学習コストが高すぎて目的に見合わないかもしれません。自分の”見せたい図”を簡単に表示してくれるライブラリを探す方が圧倒的に早いでしょう。

しかし、上記で挙げたように「データやコードを弄りまわしながら、徐々に形作っていく」ことに楽しみを感じるのであれば、D3が最適です。

たとえば、ウチのブログでは下記の記事がそれにあたります。

SVGで作成した都道府県の地形を並べて表示する

上記のコードは、初めから「こういうモノを作ろう!」決めて作ったものではありません。

何となく、D3と都道府県のGeoデータを弄りまわしているときに、ふと思いつきで作ったものです。

地図や地形を表示する、データを元にして色を塗り分ける、そんなライブラリは多数ありますが、D3にようにその場の思いつきを即座に反映できるチャートライブラリは中々なく、これこそが私がD3を使っている最大の理由であります。

フルスクラッチで一から作るのは流石にメンドウくさすぎる。かといって既存のチャートライブラリは何もかもがあまりにお膳立てされ過ぎていて、弄り回して遊ぶ余地がない。そんな中でD3は、程よいところまで手を貸してくれてなおかつ利用者が好きなように弄って遊べる余地も残しておいてくれる、そんな気の利いたライブラリなのです。

データを絵具とするならば、D3はちょうどいいサイズで使い勝手の良い絵筆です。

下書きもせずに描き始め、心の赴くままに筆を振るって、途中で、落書きしたりぼかしたり塗りつぶしたりしながら作品を作る。

そんなプログラミングに楽しみを感じる人は、ぜひD3に触れてみてほしいと思います。