第6回Deno会発表資料
自己紹介
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回にて

< DenoでVue使いたい。Electron動かしたい

< サーバーでHTMLテンプレート使いたい
JSXがDenoに入った流れ
2019/9/30ころ
言うだけ言ってみるかということでIssue登録

< ええんちゃう?

< (あっこれ俺がやる流れだ…)
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の補完が効かない、便利機能を使えない
tsconfig.json
を騙しながらなんとか開発
Denoのcons(解決編)
まぁIntelliJさんがなんとかしてくれるっしょ
はい

> バージョン上げるときIDEでReplace All
特別なことはしないでESModuleの仕組みの中で解決する
Denoのcons(解決編)
>実行前にモジュールフェッチ、コンパイルを行うので起動が遅い
PaaSにデプロイするときは起動コマンド前にプリフェッチ&プリコンパイルしておく必要あり
Dynamic Importで読み込むローカルファイルも全部コンパイルしておく
Denoのcons(解決編)
"moduleResolution: "deno"
はよ

これが通れば軒並み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リリースは行けるのか!?
出たから何がどうなるということでもないきもする

別LTでDenoでサイト実運用について話します