がいよう
- 2013/11にHaxeと出会って、2014/12に至るまでの記録
- 初めはただのRailsエンジニアだった
- 今はフロントエンドとバックエンドをHaxeで書いてBaaSを作ってる
- 型システムを使いこなせるようになるとテストを書く量が減って、変化の激しいスタートアップの開発スタイルに柔軟に合わせたりできそうなので、やって良かったと思ってる。
- JSだけでなくPHPやPythonやJavaやObjCも吐けるので普段使いの言語としてオススメ
2013/11
認知
こりゃいいや / index - Haxe http://t.co/Xokkwzowus
— shogochiai(˘ω˘) (@_sgtn) 2013, 11月 10
そもそも@nobkzに唆された
興味
@T_Hash 教えてくれる人が身近にいるのは良いですね。なにやら次flash案件来ますしちょうどいいのでやってみます。
— shogochiai(˘ω˘) (@_sgtn) 2013, 11月 11
受託案件で使おうとしたが叶わず。このあとめちゃくちゃAS3した。
考える
Haxe, node.jsを使って良い感じにMVC書けるようになったらJS嫌いも治るかな
— shogochiai(˘ω˘) (@_sgtn) 2013, 11月 10
完全にRailsしか知らない人のセリフ
徐々に気付く
てかHaxe, コンパイル言語だからJSよりデバッグ楽な面もあるのでは
— shogochiai(˘ω˘) (@_sgtn) 2013, 11月 11
ようやく型チェックの重要さに少し気付く
2014/6
仕事で使うことになる
結局@nobkzがいる会社に入る
Haxe&BaaSでゲーム作りってコスパ最強だなってしみじみ思う
— shogochiai(˘ω˘) (@_sgtn) 2014, 6月 8
このころに
仕事で使うから準備してて
と言われるも、WEBで使うイメージはあまりなかった
試しに触ってみはじめた
- 経験のあるAS3っぽかったので抵抗はなかった
- enumが良いって言われたけど意味が分からなかった
- 型のある言語をそもそもあまり触らないので型の使い方がめちゃくちゃだった
- Railsに浸りきっていたのでフレームワークなしでクラス図から設計する練習を始めた
2014/8
よりよい環境を求めて
OSXで使えるエディタをいろいろ調べてました。
Haxe based / “Cactus IDE | Indiegogo” http://t.co/kkmQhNOSwq
— shogochiai(˘ω˘) (@_sgtn) 2014, 8月 1
kickstarter発のCactusIDEはHIDEにrenameしてるんですね。今知りました。
https://github.com/HaxeIDE/HIDE
atom/haxeたのしいぐへへ
— shogochiai(˘ω˘) (@_sgtn) 2014, 8月 8
結局僕はatomにしました。今でも使ってます。
@syuhei_hiyaはsublimeで、@nobkzはemacsです。
元々emacserだったんだけど、Haxeでatom plugin書けるようになりたいなとか思ったので。
Haxeでフロントをいじる
ログを可視化する系のアレを作ることになった
elasticsearch.js(40000行)のhaxe externを作るのは無理なのでClientのget系メソッドに限って作るためにコードリーディングしてるけど辛いよね
— shogochiai(˘ω˘) (@_sgtn) 2014, 8月 28
JSのライブラリをHaxeの世界に呼ぶときに型が欲しいのでextern化するときにハマった。全部読んでextern化しなくても、使う関数だけextern化すれば良いのでそんなにつらくない。D3.jsのexternも作った。型チェックが必要ないくらいしか使わないライブラリならuntyped __js__("xxxxxxx")
ってやってHaxeのインスタンスにすればすぐ使える。
haxeは情報が少ないしブラックボックスに囲まれている感あるのでウダウダ言わずソース読む他ない
— shogochiai(˘ω˘) (@_sgtn) 2014, 8月 18
この頃は知的体力がなかったので音を上げてたけど、ちゃんと読む癖をつけたので今やなんでこんなことを言っていたのかよくわからない。
課外活動を始める
Haxeもくもく会 in 三軒茶屋 を公開しました! http://t.co/2JKENp7V9S #haxe
— shogochiai(˘ω˘) (@_sgtn) 2014, 8月 30
もくもく会を開いてみた。このとき来てくださったのは、shohei909さん。強そうなHaxerさんたちと豆腐の店に行った縁でした。僕はextern作りでまだハマってた。shohei909さんは
HaxeManualを和訳するかとかいう話になったが何故かLaTeXからmdを生成するなぞ環境で白目剝いてる https://t.co/21hF6sNC0c
— shogochiai(˘ω˘) (@_sgtn) 2014, 9月 10
これをやり始めてました。本家がHaxeでLaTeXからmdを生成しているらしく、LaTeX環境の準備などで萎えてしまった。和訳だけでもコミットしたい。する。
2014/9
情報源を漁る
.@sgtn こんなもんか https://t.co/pC9ILDaKyG http://t.co/gYDc8gDkZj http://t.co/Atx3uGFdBq https://t.co/t1DKi0BH8w http://t.co/SCqNPFrgDE
— shogochiai(˘ω˘) (@_sgtn) 2014, 9月 1
リンクを集めた。あんまり読んでない。
型システムを明確に意識し始める
haxeのtypedefとusingの力を噛み締めてる。typedefはコンパイル時により厳密にエラーチェックしてくれていい。usingは引数とレシーバを逆転することでrubyっぽくメソッドチェインできるようになるんだけど、これも型システムの力っぽいものを感じる。学びたい。
— shogochiai(˘ω˘) (@_sgtn) 2014, 9月 6
このときはまだ、enum-switchやユーザー定義型(抽象データ型)を使いこなせていなくて、他の人が型を設計してくれるお陰で便利さを噛み締めていた。usingはrubyっぽい記述が可能になるっぽくてテンション上がった。言語インターフェースのrubyっぽさワクワクするから、rubyが学術的な面からどう評価されようと今でも好きですね。
Haxeのコーディングを容易にする型システムはすばらしいので、個人的にはアフォーダンス的なものをもっともっと向上させたい。
— shogochiai(˘ω˘) (@_sgtn) 2014, 9月 7
興奮して変なこと言ってる。たぶん型定義が冗長で可読性が落ちてることと、そのオブジェクトがどんなメソッドを持っているかruby(rails)予想しにくいことを言いたかったんだと思う。前者はローカル変数に型推論を使って記述を簡略化すること、後者は自作static関数をusingしたり、クラス設計や命名を意識すれば改善されてゆきそう。
テストを始める
haxelib install buddyウェーイ
— shogochiai(˘ω˘) (@_sgtn) 2014, 9月 8
buddyはHaxe用テストスイート。mocha-haxeと違ってJS以外にも使えるspec系のテストスイート。haxe.unitやmunitも触ったけど、rspecっぽさと非同期処理のテストしやすさを考えて主にbuddyを使ってる。
node.js関連ライブラリのexternを作ってHaxeをバックエンドにも使う試みとかをやってた。
感動したもの二つ
HaxeでDSLでググったら弊社CTOの記事が出てきたけど言語知識が広範かつ一般化されててイカしてる。コードベースにMonad.hxがpushされたときは困惑したけどそういう背景があったのか。 http://t.co/jrqr23lErN
— shogochiai(˘ω˘) (@_sgtn) 2014, 9月 22
最近作りかけのMVWライブラリを、試験的にHaxelib初めて登録してみた。てか、zipでアップロードしないとイケナイのね。http://t.co/SEHaW8fpmb
— はなだのぶかずakaイケメンLisper (@nobkz) 2014, 9月 14
モナドをHaxeに持ち込んで、例えば非同期処理の記述を容易にするsimpleMonadと、クライアントサイドMVW(Whatwver)のMage。ここまでできるのかと壮大な気分になった。
2014/10
にわかに活気立つHaxe界隈
Here's the reader map of my latest #Flash #OpenFL #Haxe post. Hooray Europe & Japan! ♥ ? ♥ pic.twitter.com/E6D6NlPzFH
— Jeff Ward (@Jeff__Ward) 2014, 10月 17
もうHaxe勉強せざるを得ない
— kiyopikko (@kiyopikko) 2014, 10月 24
徐々に学習を進める
usingの仕様が知りたくてたまにhaxe読むけど.mlだしまだちょっと追いきれない
— shogochiai(˘ω˘) (@_sgtn) 2014, 10月 30
2014/11
typedefやenumや非同期処理やクラス設計がようやく肌に馴染んできた
人間がやるべきチェックをカバーしまくりつつ優しい表現のできる型システムとしてHaxeは素晴らしいと思うのです。
— shogochiai(˘ω˘) (@_sgtn) 2014, 11月 5
モナド(in Haxe)最高という気持ちに浸っている
— shogochiai(˘ω˘) (@_sgtn) 2014, 11月 6
JSを書いている気が一ミリもしないHaxe素晴らしい
— shogochiai(˘ω˘) (@_sgtn) 2014, 11月 6
switchまみれは宿命か / “void element blog: ほむほむジャンプをHaxeに移植してみた話” http://t.co/IBVXBQW583
— shogochiai(˘ω˘) (@_sgtn) 2014, 11月 8
haxe-oauth is ゴミ
— shogochiai(˘ω˘) (@_sgtn) 2014, 11月 21
↑haxe-oauthはマジでひどかったので一から書き直して公開しようと思ってる(node-oauth-haxeでも良いのかもしれないけど、JSとの境界面は型がDynamicになりやすいので実行時までエラーを残しちゃって嫌だからなるべく割けたい)
GHCのDeferring Type ErrorsいいなーHaxeにも欲しい
— shogochiai(˘ω˘) (@_sgtn) 2014, 11月 23
しっかりHaxeで型の恩恵を味わったのでHaskellの型システムの良さも徐々に分かってくる。
2014/12
JSコミュニティでちょっとずつHaxeを紹介してみたり
英語でHaxeのenumの話したら「お前は何を言っているんだ」ってなったからもっと英語勉強します #悲しみ
— shogochiai(˘ω˘) (@_sgtn) 2014, 12月 3
#Haxe sexy #Pizazz color is #f49200 → 244|146|0. That is almost red, half green and no blue. @_sgtn pic.twitter.com/qyVUpUXC0H
— Jorge Bucaran (@jbucaran) 2014, 12月 3
TokyoJSで仲良くなったJorgeがHaxeに興味を持ち始めてる図
最近
Haxeって吐き出せる言語多すぎる。Elmをbrowser, iOS, androidのplatformに限定して実装するくらいが理想的な気がする。目的を絞っていいから、frontendを抽象化するlayerが欲しい。
— shogochiai(˘ω˘) (@_sgtn) 2014, 12月 3
銀の弾丸はないって分かってるけど、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)あります