第6回Deno会発表資料
自己紹介
keroxp.icon
keroxp(けろえくすぴー)
Denoコミッター(2019/01 ~ )
仕事ではNode.js/React/Goなど
Denoどうなのよ?
最近のDenoはかなり安定してきた
普通に使う分にはバグは少ない(ないとは言っていない)
v0.20.0で待望のJSXサポート(わし育)
最近のコミット状況
https://gyazo.com/624da18f140727720f05869a6219a1a1
cli: dialTLS, JSX 関連
std: ws toml
JSXがDenoに入った流れ
第4, 5回Deno回にて
/sushitecture/hashrock.icon < DenoでVue使いたい。Electron動かしたい
/deno-ja/syumai.icon < サーバーでHTMLテンプレート使いたい
JSXがDenoに入った流れ
2019/9/30ころ
言うだけ言ってみるかということでIssue登録
https://gyazo.com/799857c3baa638635942efb2737f67ee
/deno-ja/ry.icon < ええんちゃう?
keroxp.icon < (あっこれ俺がやる流れだ…)
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さんがなんとかしてくれるっしょ
バージョンが入ったURLを使わないとまずい
はいkeroxp.icon
バージョン上げるときIDEでReplace All
keroxp.iconはdinkを使っていく所存(別LT) 特別なことはしないでESModuleの仕組みの中で解決する
Denoのcons(解決編)
実行前にモジュールフェッチ、コンパイルを行うので起動が遅い
PaaSにデプロイするときは起動コマンド前にプリフェッチ&プリコンパイルしておく必要あり
Dynamic Importで読み込むローカルファイルも全部コンパイルしておく
Denoのcons(解決編)
"moduleResolution: "deno"はよkeroxp.icon
これが通れば軒並みIDEもサポートするはず
TypeScriptはTypeScriptとして実行する前提がないので.ts拡張子をimportするやる気がない
.tsなしのTypeScriptがCommonJSでimportできるのはコンパイル後に同じ名前の.jsをimportするという前提から
DenoのCons(解決編)
tsconfig.jsonを騙しながらなんとか開発
だいたいこんなのを使えばだましだましやっていける
code:tsconfig.json
{
"compilerOptions": {
"target": "esnext",
"module": "esnext",
"noResolve": true,
"baseUrl": "/Users/keroxp/Library/Caches",
"jsx": "react",
"strictNullChecks": true,
"paths": {
}
}
}
URLモジュールがリダイレクトすると補完が効かなくなるのでdinkでリダイレクト後のURLを使うのが吉 おわりに
ほんとにもうちょいという感じ。
年内v1リリースは行けるのか!?
出たから何がどうなるということでもないきもするkeroxp.icon
別LTでDenoでサイト実運用について話します