generated at
第6回Deno会発表資料
自己紹介
keroxp
keroxp(けろえくすぴー)
Denoコミッター(2019/01 ~ )
仕事ではNode.js/React/Goなど

Denoどうなのよ?
最近のDenoはかなり安定してきた
普通に使う分にはバグは少ない(ないとは言っていない)
v0.20.0で待望のJSXサポート(わし育)

最近のコミット状況
cli: dialTLS , JSX 関連
std: ws toml

JSXがDenoに入った流れ
第4, 5回Deno回にて
hashrock < DenoでVue使いたい。Electron動かしたい
syumai < サーバーでHTMLテンプレート使いたい

JSXがDenoに入った流れ
2019/9/30ころ
言うだけ言ってみるかということでIssue登録
ry < ええんちゃう?
keroxp < (あっこれ俺がやる流れだ…)

JSXがDenoに入った流れ
2019/10/01ころ
とりあえず実装をはじめてみる
ことの問題はDenoがjsx/tsxファイルをjs/tsとして解釈していることだとわかっていた
Denoの内部 tsconfig.json jsx: "react" を追加すれば行けそうな雰囲気
(ざっくり)コンパイラのswitch文にjsx/tsxを追加 → 動く
MERGED

Deno x JSXで何ができるのか?
サーバーでHTML/XMLテンプレートとしてSSR
クライアントで React.hydrate() して Dext.js 爆誕?
→ ちょっとやってみたけど最終的にブラウザにDenoがなくて落ちてしまう
ReactコンポーネントをDenoに依存しないものにしないといけない(めんどい)
そもそもNext.jsもそうなんじゃないの?

Node.jsへの大きな一歩目のリード
Babelがなくても ESModule ESNext JSX が使える!
Denoだけあればサーバーサイド開発を始められる
完全コピペで開発スタート可能

Denoのcons
やっぱりURLでモジュール書くのきつくないか?
長い、長い、長い
書けないだろJK
バージョンが入ったURLを使わないとまずい
URLが同じ限り --reload オプションを付けないとキャッシュが使われ続ける
暗黙的に破壊的変更があったときにすぐ壊れる
バージョン上げるときIDEでReplace All?
Gitのコミットがカオスになる
設計は美しいが実運用に難あり(Ryan症候群)

Denoのcons
実行前にモジュールフェッチ、コンパイルを行うので起動が遅い
実質的には yarn install && yarn tsc みたいな
プロジェクトが大きくなるにつれだんだんきつくなってくる
Dockerfileのビルド時間のほぼ全てを持っていく(これはRubyやNode.jsでも同じか…)
モジュールフェッチとコンパイルが効率的でなく遅い

Denoのcons
IDEの補完が効かない、便利機能を使えない
TypeScriptにDenoのモジュール形式がないので現状公式のサポートは受けられない
tsconfig.json を騙しながらなんとか開発
VSCode + Denoプラグイン or IntelliJがおすすめ

Denoのcons(解決編)
> 長い、長い、長い
import mapを使うという方法もあるが…
まぁIntelliJさんがなんとかしてくれるっしょ
>バージョンが入ったURLを使わないとまずい
はいkeroxp
https://jspm.iohttps://denopkg.com などsemverベースのCDNを使っていく流れかと
> バージョン上げるときIDEでReplace All
keroxpdinkを使っていく所存(別LT)
特別なことはしないでESModuleの仕組みの中で解決する

Denoのcons(解決編)
>実行前にモジュールフェッチ、コンパイルを行うので起動が遅い
PaaSにデプロイするときは起動コマンド前にプリフェッチ&プリコンパイルしておく必要あり
dockerならDockerfile内で依存関係全部フェッチしておく
Dynamic Importで読み込むローカルファイルも全部コンパイルしておく

Denoのcons(解決編)
> TypeScriptにDenoのモジュール形式がないので現状公式のサポートは受けられない
"moduleResolution: "deno" はよkeroxp
これが通れば軒並みIDEもサポートするはず
TypeScriptはTypeScriptとして実行する前提がないので .ts 拡張子をimportするやる気がない
.ts なしのTypeScriptがCommonJSでimportできるのはコンパイル後に同じ名前の .js をimportするという前提から

DenoのCons(解決編)
> tsconfig.json を騙しながらなんとか開発
だいたいこんなのを使えばだましだましやっていける
tsconfig.json
{ "compilerOptions": { "target": "esnext", "module": "esnext", "noResolve": true, "baseUrl": "/Users/keroxp/Library/Caches", "jsx": "react", "strictNullChecks": true, "paths": { "deno": ["./deno.d.ts"], "https://*": ["./deno/deps/https/*"], "http://*": ["./deno/deps/http/*"] } } }
URLモジュールがリダイレクトすると補完が効かなくなるのでdinkでリダイレクト後のURLを使うのが吉

おわりに
ほんとにもうちょいという感じ。
年内v1リリースは行けるのか!?
出たから何がどうなるということでもないきもするkeroxp
別LTでDenoでサイト実運用について話します