Zerobase Dev Blog

コードネームYentry

Smalltalkでのウェブ開発を断念してDartを検証中

これまでの経緯を踏まえて、しばらくSmalltalkウェブ・アプリケーション・フレームワークSeasideとZincを比較してZincを採用する方向で検討していたのですが、Smalltalkを使うのは断念しました。

Smalltalkは全般的にHTML5などのフロントエンド技術への対応がなされていない、その理由はそもそもウェブ業界で使われている事例が少ない、従ってドキュメントやブログ情報なども充実していない、ということが理由です。

かなりSmalltalkを掘り下げたのですが、ちょっと車輪の再発明になりすぎるということで諦めた次第です。

とはいえ、Smalltalkを学んだことは良かったです。テスト駆動開発オブジェクト指向の感覚は、以前よりも身に付いたと思います。

機会があればSmalltalk TDDワークショップなどできたらいいなと思います。ウェブ業界にSmalltalkのレッスンは有意義だと思います。現役ウェブ・プログラマーにSmalltalkを広めていきたいです。「教養としてのSmalltalk」という考え方は変わっていません。

次はDart

いま触っているのはDartです。Googleが開発している言語で、JavaScriptに静的な構造をもたらします。dart2jsでJavaScriptに変換して、ブラウザで動かすことができます。バックエンドとフロントエンドを同じ言語で書くために、Dartを試しています。

ちなみに、同じ目的ではGWTも有名です。サーバーサイドJavaJavaScriptコードを自動生成します。

ウェブ開発において「エキセントリック」(ex-centric→中心から外れている)なSmalltalkから、ウェブ・セントリック(ど真ん中)なDartへと、極端に振り切った形です。あくまで結果論ですが。

Dartでやりたいことリスト(暫定版)

アクセシブルでセマンティックでSEOAjaxアプリケーションを、それと意識せずに書けるようにしたい。フロントエンドのコードが、ブラウザ側とサーバー側のどちらで動いてるか意識しないで済む、透過的なプログラミング環境を実現したい。

細分化すると:

  • frontendとbackendを同じ言語で書く
  • ドメイン・モデルのコードを共有・再利用する
  • ブラウザのJavaScriptが有効ならAjax、無効ならサーバーサイド・レンダリングの切り替えを、透過的に行う
  • その場合のpathをpushStateで管理して、透過的なpermalinkにする(アドレスバーのURLがREST的にシェアなりブクマなりできる)

フロントエンド・フレームワーク

これまでの経緯として、

といったことを考えてきました。

そして先日のインブラウザーデザイン勉強会を受けて、自分でもPunchを触ってみたり、なぜ "Designing in the browser" ワークフローへの移行が必要なのかという文章を書いたりしました。

最近のフロントエンド・フレームワークの進歩はすごいですね。このようなツールと、”Designing in the browser”というワークフローと、ドメイン駆動設計(DDD)の開発フローを、うまく融合させたいと思っています。その鍵になる考え方が「UIコンポーネント単位のエンド・ツー・エンドの開発パイプライン」だという仮説で、引き続き検証していきます。

このプロジェクトは「単に物を作るプロジェクトじゃなくて、方法を作るプロジェクトでもある」という位置づけなので、なかなかアーキテクチャが決定しませんが、淡々と技術検証を続けていきます。