ば、バ...バイナリリリース!

Releases · denoland/deno · GitHub

久しぶりにdenolandを見に行ったら、超驚いたことにバイナリリリースが出てた。早速触ってみます。

macOS環境なので、deno_mac_x64.gzをダウンロードしunzipしたらdeno_mac_x64が一つだけ出てきました。実行可能ファイルが一つだけ。それをchmod u+xして準備完了。リポジトリのtestフォルダにテスト用のスクリプトがあるので、大体できることを把握して書いてみました。あんまりTypeScriptっぽくないが、async/awaitがあったほうがよかろう。

// ~/async.ts に保存
async function fn(arg: string) {
  await new Promise((resolve, reject) => {
    console.log("2");
    setTimeout(resolve, 3000);
  });
  console.log(arg);
}

console.log("1");
setTimeout(() => fn("3"), 3000);

これで、./deno_mac_x64 async.ts と実行する。。。おお、ちゃんと動いた!ゆっくり3秒あけなから1、2、3と出る。

まさにTypeScriptネイティブな環境で、これこそ流行らせたい。

オレオレサマータイム

なんか80年代Jポップのタイトルみたいだけど。

f:id:masataka_k:20180810044745j:plain

私はオレオレサマータイム実行中。妻子が帰省で、私と犬だけで留守番しているため、朝晩の散歩がある。猛暑の中で毛皮脱げずに着てる者の身になると不憫で、朝は早く晩は遅くに外に出ます。午前中でもすぐ30度超えの様子なので、なんとか5時前には家を出たい。よって4時すぎには起きます。いつもは7時すぎに起きてるから3時間弱早まる。これがオレオレサマータイムサマータイムって1時間しか早くならない(米国ではそうでした)から、オレオレというよりスーパーサマータイムなんじゃね?当然腹も減るので昼食も早く夕食も早く、勢い、就寝も早まる。

オリンピックのマラソンは、朝5時出発で7時すぎにはゴールってやれば十分熱中症対策にもなります。その時間帯の暑さはまだなんとかなる。毎日その時間帯に歩き回ってる経験から言ってるので間違いない。

今後システム作るときには消費税率が変わることを予期して組んできたように、サマータイム施行がくる時があるやもと想定して設計しておけばいいですな。2020対策では見送られても10年以内ぐらいにやるかもしれない。間に合わずに施行されちゃったら特需ってことで。

うがった見方をすると、例えばNTTグループが再編でカネが必要になって、ロビー活動したんじゃないかなと。社名変えるのも社屋整理するのも大変ですからね。NTTじゃなければFかHかはたまたNなのか。

denoland

github.com

denolandなるプロジェクトにgithub内移動していました。ヘビみたいな何かの絵がアバターになってる。

LinuxWindowsでCIステータスも表示されるようになっていた。そろそろ?と期待して、書いてある通りをなぞってビルドしてみたらエラー出た。エラーメッセージ読むと私のMACの中にXcode.appが無いってことだけみたい。しかしそれはサイズがデカいので入れたく無いなー。勢いrustcは入れてしまったが、まあ、またしばらく様子みよう。MacのCIステータスが表示されていないのがまだ待てってことかもしれないし。

興味持って追っかけてるけど、日々様子が変わるので、私みたいなTypeScript書きたいだけの利用者はまだ手出しすべき時じゃ無いかと。

で、さらっとRustねぇ。denoがJavaScriptのランタイムであるV8の操作を行う中で、ガベージコレクトのあるGo言語だと難しいことになった、ということからガベージコレクトの無い新言語でRustを選んだという。。。ここは普通にC++で諦めた方が面倒が少なかったかなあと思いますが、天才Ryan Dahlはそこに行かなかったか!その後にRustのドキュメントをちらっと眺めただけですが、老いたのかそこにGo言語を見たときの萌えはなかった。やっぱり老いてるんだろうなあ。

今日のdeno

deno/src at master · ry/deno · GitHub

今日みたら、deno2への移行が一段落したみたいでdeno2フォルダがそのままsrcフォルダになり、ルートフォルダに並んでたソースが整理されていました。 ビルドのプロセスもまさに今日ガラッと変わったので手順追って見たら。。。gnを使う段でエラー。ウォッチャーは手をだすところではなかった。

量的にはシンプル化しましたが、なんかC++ありRustあり、TypeScriptありJavaSctiprありPythonあり、で質的にはまだまだ混迷している。

denoでサポートするimportの機能はそのままGolangの仕組みのようなものにしたいのかな。package.jsonなし&npmは使わず、と言いながら今はyarnでnpmリポジトリからビルドのためとはいえpackage.jsonに定義したライブラリ群を持ってきてます。この辺が整理されたあたりからdenoの目指す姿が見えてくるように想像します。

日本帰国

https://i.sios.com/ir/news/20180615jinji.pdf

米国に来て丸4年が経過しましたが、この度、7月1日付でサイオステクノロジー株式会社 常務執行役員を拝命いたしましたので日本に帰国します。サイオスグループは最近になってホールディングス制に移行していて、そのため私が2009年から一時期執行役員を兼任していたことのあるサイオステクノロジー株式会社はホールディングス持株会社たるサイオス株式会社となり、今回着任するのはそこから全事業を分割移譲した新しい会社なのですが、内外の実質はその昔テンアートニーという社名から始まった社歴を継承するそのものです。

  • サイオステクノロジーは事業部が3つあり、そのうちRedhat Linuxがあるライセンスディストリビューション事業、LifeKeeperがある事業継続ソリューション事業、MFP向け自社パッケージ事業、AWS向けクラウドSaaS事業で構成される第1事業部の副事業部長です。グループ内最大単位の製品開発&販売組織に、技術寄りな立ち位置から経営参画することになると思います。取締役ではないので登記はありません。
  • 1999年に私が設立して2008年にサイオスに買収されたグルージェントからは既に過年度に登記から離れていて、今回帰国で改めて属することはありません。グルージェントは私がいなくなったのちにGoogle向けSaaS事業が爆発成長してグループ内でも有力なキャッシュジェネレーターになってます。鈴木都木丸すごい。
  • 2015年よりプレナスと合弁で作ってたレストランPOS開発事業のBayPOS Inc.も既に過年度に退任しています。BayPOSも私の退任が材料だったかのようにその後に本格的な世界展開がはじまり、事業規模の成長が急加速しています。既に日本への逆輸入?も遂げました。新井正広すごい。
  • 2014年以来の米国SIOS Technology Corp.取締役には留任しますが、私の拠点が日本に移るという時空間的問題から、おそらくより領域を絞った関与にならざるを得ないと思っています。この米国取締役が唯一登記として残ります。私がいずれもし外れることがあれば、ジンクス的には急かつ爆発的な成長を始めちゃったりして。。。

この後数週間で引っ越しなので、家具や車や諸契約やらの整理に追われております。特にウチは大型犬(ゴールデンレトリバー オス2歳半、体重40kg)が居るので、その手続きは妻に任せっきりですが、結構大変なことになっています。先に6/22に妻と娘と犬を帰国させてから後日6/25に引越荷物の搬出を行い、6/27の朝に家の鍵を大家さんに返す&空港で例のAudi SQ5を買取業者さん(日本にもあるあのガリバー)に引き渡すというスケジュールで、何かミスると正午発の飛行機に乗り遅れるかもしれないので、今からドキドキです。

f:id:masataka_k:20170706091220j:plain

でかいでしょ?

日本の新居は既に5月末にAWS Summit登壇の用事で日本へ出張した時、ついでに探して決めていました。私の通勤と長女の通学の便利が目黒線沿線になるのを大型犬飼育可能条件で絞ると物件は希少だったのですが、お値打ちで質も良いものに巡り会う幸運があり、奥沢に住みます。白金高輪サイオスビルまで所要時間が電車&徒歩でも車でもドアtoドア30分ぐらいなので良かった。中学高校時代に体育が多摩川河川敷のグラウンドであったり、友人がちらほら住んでたりで、目蒲線と呼ばれてた時代に乗ったことがあっただけのところが、30年ぐらい前はカエルみたいに緑で丸っこい路面電車風の記憶で、それぞれ駅は都心近くなのにローカル線のような雰囲気だったんだけれども、今は綺麗で大きな駅になってたり編成車両数増えて列車が長くなってたりして驚きました。

deno2

deno/deno2 at master · ry/deno · GitHub

今週から、denoの根幹部分の新しいプロトタイプとしてdeno2(いずれはlibdenoとする計画?)のコミットが始まってました。GolangをやめてC++とRustで書き直している(Rustのコードがパッと見で見当たらないけど)のは、GolangとV8の両方でGCが動くと難しいというのが主たる理由みたい。さらにはこれまでなかったWindowsプラットフォームでのビルドも上位トピックになっています。 で、ビルドツールはchromiumのgn。私はgn自体を知らないので雰囲気ですが、V8を腹に抱えていることから、最も無難っぽいところに落ち着きました。

I am excited about all the interest in this project. However, do understand that this is very much a non-functional prototype. There's a huge amount of heavy lifting to do. Unless you are participating in that, please maintain radio silence on github. This includes submitting trivial PRs (like improving README build instructions).

ですって。さて、これからどうなるか。静かに遠くから薄く見守ります。

せっかくだからサイズの小さなうちにコード読んでみてるのだけど、TypeScriptへ積極フューチャーしているというのはどこから、何なのか、はまだよくわからん。しかしBUILD.gnをまず読むとgnをよく知らない身としてもdeno2の大まかな構造がすぐわかる。これはgnの筋が良いのかもしれない。

tscを呼び出すのはgnで呼ぶPythonからnodeのシェル実行を使ってやっとJSコードを実行してますがな。そういうことも様子を複雑にして難しい。多分今だけのことなんだろうけど。

deno

github.com

作者のRyan Dahlは言わずと知れたnode作者。nodeのしがらみを捨ててV8+GolangでTypeScriptの実行環境を作ると言う。。。いいぞもっとやれ。

たった24日前からのスタートで、まともなリリースも無いのに、すでに13.4kのStarがついているのが驚く。

個人的な期待

個人的な期待はTypeScriptネイティブな実行環境として存在感示しながらnodeへフィードバックされることです。denoがnodeをリプレースするのは正直ちょっと考えづらいけど、へっぽこな自分では到底書けないだろうなーというレベルのチャレンジを早期からウォッチし続けるのは楽しいし、皆もそう思うようですごい勢いで課題とプルリクが集まってますね。。。もしやワンチャン有るのかな?

そして、ちょうど先月にnode-gypやらcmakeやらで拡張を作ってたタイミングでdenoが出てきた偶然に驚くし、とても琴線に響きます。静的に型が付いてるTS拡張オブジェクト(型の無いJS拡張ではなく)をGolangで書けると素敵で、もしちゃんとdenoが世にでるのであればこれが個人的に期待されます。V8のAPI層ではこれまでと同じでも新しくdenoで丁寧にブリッジ構成したら可能かもしれない。しかしGolangじゃなくSwiftだった方がよりインパクト強烈だった気がする。GolangもSwiftもC/C++バインディングが容易なのでどうにでもなるけど、SwiftだとmacOSiOSにネイティブなのでたったそれだけで何か産まれてきそう。まあ、GolangとSwiftをone on oneで比べたらGolangの方が世の多数に好かれてるようにも思いますけど。

ビルドしてみた

v8worker2のビルドでエラー吐いて止まった。馴染みのないビルドプロセスで追うのが辛そうだから、根性なしはすぐ目をつぶって、もうちょい優しくなってからトライする。brewインスコした環境は残しておきます。go getしたものは削っとく。最近Golangで書いてたもの全部TypeScriptで書き直し終えたところだったからGOPATHの中身は空でした。

$ cd ~
$ rm -rf go
$ mkdir go

ccache ?

手仕舞ってから、ふとビルドの際に--use_ccacheとスイッチ渡していたのを思い出して見直すと、確かにccacheはインスコしてなかった!ということでbrew install ccacheでもう一度ビルドやり直し。。。うん、やっぱりエラー。今日はおしまい。