JavaScript
Node.js
Haxe
altjs
HaxeDay 4

Haxeが気になるOSXでWEBなエンジニアのために1年かけて人柱になった記録

More than 3 years have passed since last update.

がいよう

  • 2013/11にHaxeと出会って、2014/12に至るまでの記録
  • 初めはただのRailsエンジニアだった
  • 今はフロントエンドとバックエンドをHaxeで書いてBaaSを作ってる
  • 型システムを使いこなせるようになるとテストを書く量が減って、変化の激しいスタートアップの開発スタイルに柔軟に合わせたりできそうなので、やって良かったと思ってる。
  • JSだけでなくPHPやPythonやJavaやObjCも吐けるので普段使いの言語としてオススメ

2013/11

認知

そもそも@nobkzに唆された

興味

受託案件で使おうとしたが叶わず。このあとめちゃくちゃAS3した。

考える

完全にRailsしか知らない人のセリフ

徐々に気付く

ようやく型チェックの重要さに少し気付く

2014/6

仕事で使うことになる

結局@nobkzがいる会社に入る

このころに

仕事で使うから準備してて

と言われるも、WEBで使うイメージはあまりなかった

試しに触ってみはじめた

  • 経験のあるAS3っぽかったので抵抗はなかった
  • enumが良いって言われたけど意味が分からなかった
  • 型のある言語をそもそもあまり触らないので型の使い方がめちゃくちゃだった
  • Railsに浸りきっていたのでフレームワークなしでクラス図から設計する練習を始めた

2014/8

よりよい環境を求めて

OSXで使えるエディタをいろいろ調べてました。

kickstarter発のCactusIDEはHIDEにrenameしてるんですね。今知りました。
https://github.com/HaxeIDE/HIDE

結局僕はatomにしました。今でも使ってます。

@syuhei_hiyaはsublimeで、@nobkzはemacsです。

元々emacserだったんだけど、Haxeでatom plugin書けるようになりたいなとか思ったので。

Haxeでフロントをいじる

ログを可視化する系のアレを作ることになった

JSのライブラリをHaxeの世界に呼ぶときに型が欲しいのでextern化するときにハマった。全部読んでextern化しなくても、使う関数だけextern化すれば良いのでそんなにつらくない。D3.jsのexternも作った。型チェックが必要ないくらいしか使わないライブラリならuntyped __js__("xxxxxxx")ってやってHaxeのインスタンスにすればすぐ使える。

この頃は知的体力がなかったので音を上げてたけど、ちゃんと読む癖をつけたので今やなんでこんなことを言っていたのかよくわからない。

課外活動を始める

もくもく会を開いてみた。このとき来てくださったのは、shohei909さん。強そうなHaxerさんたちと豆腐の店に行った縁でした。僕はextern作りでまだハマってた。shohei909さんは

これをやり始めてました。本家がHaxeでLaTeXからmdを生成しているらしく、LaTeX環境の準備などで萎えてしまった。和訳だけでもコミットしたい。する。

2014/9

情報源を漁る

リンクを集めた。あんまり読んでない。

型システムを明確に意識し始める

このときはまだ、enum-switchやユーザー定義型(抽象データ型)を使いこなせていなくて、他の人が型を設計してくれるお陰で便利さを噛み締めていた。usingはrubyっぽい記述が可能になるっぽくてテンション上がった。言語インターフェースのrubyっぽさワクワクするから、rubyが学術的な面からどう評価されようと今でも好きですね。

興奮して変なこと言ってる。たぶん型定義が冗長で可読性が落ちてることと、そのオブジェクトがどんなメソッドを持っているかruby(rails)予想しにくいことを言いたかったんだと思う。前者はローカル変数に型推論を使って記述を簡略化すること、後者は自作static関数をusingしたり、クラス設計や命名を意識すれば改善されてゆきそう。

テストを始める

buddyはHaxe用テストスイート。mocha-haxeと違ってJS以外にも使えるspec系のテストスイート。haxe.unitやmunitも触ったけど、rspecっぽさと非同期処理のテストしやすさを考えて主にbuddyを使ってる。

node.js関連ライブラリのexternを作ってHaxeをバックエンドにも使う試みとかをやってた。

感動したもの二つ

モナドをHaxeに持ち込んで、例えば非同期処理の記述を容易にするsimpleMonadと、クライアントサイドMVW(Whatwver)のMage。ここまでできるのかと壮大な気分になった。

2014/10

にわかに活気立つHaxe界隈

徐々に学習を進める

2014/11

typedefやenumや非同期処理やクラス設計がようやく肌に馴染んできた

↑haxe-oauthはマジでひどかったので一から書き直して公開しようと思ってる(node-oauth-haxeでも良いのかもしれないけど、JSとの境界面は型がDynamicになりやすいので実行時までエラーを残しちゃって嫌だからなるべく割けたい)

しっかりHaxeで型の恩恵を味わったのでHaskellの型システムの良さも徐々に分かってくる。

2014/12

JSコミュニティでちょっとずつHaxeを紹介してみたり

TokyoJSで仲良くなったJorgeがHaxeに興味を持ち始めてる図

最近

銀の弾丸はないって分かってるけど、Haxeを使ってると"Write once, run anywhere"を夢見ますよね。

Haxeを始める際に気をつけたほうが良いことまとめ

  • enumとswitchを組み合わせた型チェックが何故生産性を高めるのか確認すること
  • 非同期処理のコールバック関数にもしっかり型を与えて網羅すると、リファクタリングが怖くないしミスが減るのでオススメ
  • Dynamic型という型を定義していないようなふわふわした状態の変数を残すとユーザーが触る段になって実行時エラーめっちゃ出るので気をつけたほうが良い
  • まだ要求も仕様もよくわからないプロトタイピングの段階ならJSで書いたりDynamicもりもりでも良いと僕は思う
  • Success型とかError型とかJust型とかNull型とかまあ型チェック(コンパイル時)の段階で例外やnullを発見できるようなアレを頑張ること
  • JSみたいにクラスの作り方山ほどないし、コーディングスタイルを統一できて良いこと
  • JSライブラリの利用については「1.型が欲しいくらいそのライブラリを使うならExtern」「2.型がいらない使い方ならuntyped」を使うととりあえず覚えて、一度くらい試しにexternを作ってみること。

参考文献

言語の固さ、型チェック、externなどの話題 / altJS勉強会「Haxeすごいからみんな使え!」

書きかけだけど必読です / 何故HaxeでJavaScript開発をするのか

受託だろうとスタートアップだろうと、大きなプログラムの複雑さを押さえ込むということがどういうことか少し分かる記事です。変更に強く品質が保てるHaxeはマジでよいのです。/大規模なギョームシステムにHaxeを採用してみた話

追伸

  • 間違いの指摘や追記がお願いできると嬉しいです。
  • スタートアップにおけるプロダクトの価値検証時にテストを書かない代わりに型に頼ってスピーディーに最小限のプロトタイプを作ってユーザーに価値を問うスタイルがよいなと最近思っているので、似たような試みをされている方のお話を聞いてみたいです。
  • 株式会社technical rockstarsはHaxeの会社です
  • milkcocoaのHaxeExtern(milkcocoa-haxe)あります