Edgeでこの世界で行われるありとあらゆるJavaScriptが大嫌いだ以下略というわけで、私はかつてはJavaScriptが死ぬ程嫌い、いや、憎い頃もありました。海外勢の美しいソースコードに感化され、今では立派にJavaScriptが大嫌いです。問題はここ}これを実行して"value"と表示させるつもりが、"undefined"と表示されてファッΣ(゚Д゚;)とかなるレベルの人間です。これ、変数の巻き上げとか言うエラソーな名前付いてるらしいけど、ぶっちゃけ一番最初にインタプリタ作った人が、変数保持するハッシュマップをブロックレベルで管理するの面倒くさかっただけだろ。その怠慢な実装が仕様として現代まで残ってしまったと。Verilogのwireやregと同レベルの怠慢と思っています。真実かどうかは知らないけども。ES6では色々解決されたらしいES2015やらなんやら呼び方が色々あるのか、何がES6なのかワカリマセンが(C++1xとかC++2xみたいなもの?)、letやconstが導入され、モジュールが追加されたことでファイルスコープも出来る様です。classだって作れるらしい。今までJavaScriptを使うこともなかったので、JavaScriptの知識はCoffeeScriptが出始めた頃で停止している。そんな人間の屑がちょっと個人的な理由でJavaScriptを触らないといけなくなったので、ついでにES6に入門してみました。環境構築の段階で心折れそうさて、何はともあれ、環境構築からかな。゙!?え、何これ、今JavaScript界隈ってこんな面倒くさいことになってるの?これが素晴らしい!みたいな雰囲気だけど、みんな本気で言ってるの?JavaScriptってもっと、こう、お手軽で簡単な物じゃなかった?環境構築が面倒と言われるC++より酷い。いうか、C++なんかVisualStudio入れれば動くし、アンチVisualStudioな場合でもMinGWとMakeとCMake入れりゃ十分だというのに。いうか、MSYS2の上でだいたい全部すむのに。一昔前のTeXの環境構築を彷彿とさせるカオス。1年単位で言ってることがコロコロ変わってる。CoffeeScriptの時代より悪化してる様な気が.........何かもう頭が痛くなってきましたが、ここで脱落してしまえばいつまで経ってもCoffeeScript良いよねっていう老害に終始してしまいます。一個ずつ紐解き、耐えねば。CoffeeScript2が出てたぞ!!私は老害じゃなかった!わはははは!Node.jsとnpmどうも、Node.jsからは逃げることは不可能らしいです。Webと関わりが無い私は、こやつが一体何者かもよく分かっていません。コレがなんなのかもついでに学習してみました。≒pacmanという理解で決着しました。要するに、JavaScriptで作られ、JavaScriptが動くシェルみたいな環境。Emacsのeshellみたいな。正確には違うのでしょうが、個人的にはコレで納得出来たので良しとします。マサカリ飛んで来そう?ははは。Windows上でC++開発するならMSYSが必須(異論は認める)な様に、現代のJavaScriptを開発するなら、Node.jsという環境が必要なようです。元からCoffeeScriptのために入っていましたが、ついでなので最新版に更新しました。package.jsonpackage.jsonがあるディレクトリから下が、プロジェクト管理下に置かれるらしい。Eclipseの.projectファイルとか、CMakeLists.txtみたいなものかな。以下の様な内容を書いておきゃいいらしい。}}コンパイラES6を試したいのですが、現状はES6が完全に動く環境は存在しないらしい。ES6のコードを現在の環境でも動く様に変換してくれるコンパイラが必要となる。それがbabelという物らしい。babelはexport、importの解析まではしないので、ブラウザでexport,importを使うことが出来ない。そこで、browserifyが登場する。これを使うと、export、importの関係を解析し、一つのファイルにまとめてくれるとのこと。どのpresetを使用するのかとか、babel-cliの動作を設定するファイルらしい。package.jsonに書いてもいいらしい。import,exportを解析し、一つのファイルにする。browserifyとbabelの橋渡し機能つまり、C++でいうところ、babelがコンパイラで、browserifyがリンカーで、babelifyはパイプという理解でよろしいでしょうか。なんか、最近はbrowserifyは死亡してwebpackだとか、何だかもう知らねぇよ。理解したら書き換えるかも。-g)しちゃいけないと書かれている場合もある。バージョンごとによって挙動が違うから、プロジェクトごとに管理した方が良いとのことらしい。Mavenとかのビルドプラグインのバージョン指定みたいな感じかな。babel-preset-***をインストールすることで、ES2015やES2016といったバージョンに対応できるようになる。それらが何の違いがあるのかは知らない。C++の-std=c++1xとか、-std=c++2xみたいなものだろう。私は面倒くさいからenvを使うことにした。各ブラウザのバージョンに対応したコードを出力出来るらしい。どのpresetを使うのかというのをbabelに知らせる為に、.babelrcに情報を記述するらしい。["env"]}--save-devで、前述のpackage.jsonにインストールしたパッケージの情報が書き込まれる。pomにdependencyとかbuildを自動で書いてくれる様な物と理解した。はー、これだけでもおなかいっぱいです。他にも圧縮だとか色々話題があるけど、にわかの私はここまでで良いです。buildなどで実行できるようになるらしいので、ビルドコマンドを書いておきます。srcフォルダにJavaScriptを配置し、binに吐き出すことにします。--save-devで勝手に追加された物です。)main.js以外にもhoge.jsなどが追加されたとしても、main.jsからそのhoge.jsがimportされている限り、browserifyがその関係を解析して勝手にコンパイルしてくれるみたいなので、基準ファイル一つを指定しておけば良いみたいです。テスト環境ブラウザでしか動かない物はブラウザで試す必要があるけど、全部ブラウザで試すのは辛たん。JUnitテストとか、GoogleTestみたいなことがしたいです。いうわけで、テスト環境について調べてみると、mochaというNode.js上で動くテスト環境がある様だ。mocha単体にはアサーション機能が無いので、chaiとか、別な物を利用するらしい。さっきまでの話の理解だと、-gを付けちゃ駄目な気がするのだが。.........まぁ、いいや。globalなインストールをした場合は環境変数NODE_PATHにそのパスを通しておかないと、require出来ないらしい。いうわけで、PowerShellで以下を実行。[EnvironmentVariableTarget]::User)これで、mochaを実行すると、プロジェクトのtestディレクトリにあるJavaScriptファイルが実行されるっぽい。いうわけで、pacakge.jsonにtestコマンドを追加した。Node.jsだとexportとimport構文にはまだ対応してないので、browserifyを同じように通している。これだとエラーが起こった時に、何処が原因なのかわかりにくいのが難点。いや、別に、Node.js標準のrequireで書いてもいいんだけどさ.........ES6の勉強してるのに何か、負けた気分じゃん.........。※mochaでコンパイラが指定出来るらしい。Babel6でMochaとChaiを使ったテストを書くbabel-coreをインストールしておく。}}Gulp.jsどうやらMakeとかCMakeとかの様な物らしい。スクリプト的に書けるから、Gradleが近いかな。にわかの私はpackage.jsonのscriptsで十分なので放置Emacsの環境設定package-installで以下をインストールして、init.elに設定追加。id:mooz様が作ったJavaScriptモード。company-ternで使う。auto-completeな人は知らない。'js-doc-insert-tag))))ternを動かすには、Node.js上で動くJavaScript解析サーバーを別途インストールする必要がある。ternテストを動かしてみるあぁ、パトラッシュ、僕はもう疲れたよ。ゴールしてもいいよね?というわけで、ひとまず、テストを実行出来るのか試してみる。});});で、以下を実行。