Deno Fest

Deno Fest


現地参加メモです daiiz 2023/10/20

TODO: 各発表の資料へのリンクと写真を貼る

会場にガチャガチャ
Deno in the egg

虎の穴ラボさん 代表挨拶
最新技術を色々研究している
次世代言語としての選択肢の一つとしてdenoもある
社内の勉強会でdeno社との関わり

Deno Freshのステッカー


基調講演 Ryan Dahl
Intro to Deno
Node.js creator
GitHub user#80
めっちゃコード書いてきた
JavaScript is inherently tied to the web
Thus JS will still be important
Goal
forcs developers to easily build
fast servers
be only exposing aysnc I/O ins JS
fast servers needs more than just async I/O
Deno: Next-gen JS runtime
Secure by default
TS, JSX
Backwards compatible with node.js and npm
N-API supported
Web standard APIs
Reqest and Response
Workers
wasm
TransformStream
EventTarget
localStorage
...
Run URLs directly
deno run コマンド
single excutable file
denoは一つの実行ファイル
deno init
top level await
import { readFileSync } from "node:fs"
import chalk from "npm:chalk"
Express demo
DNT: deno node transform
$ deno compile main.ts
make single executable file
クロスコンパイルできる
macでexpressサーバーが起動するexeファイル作るデモ
Deno Deploy: the easiest serverless platform
expressサーバーのデモが一瞬でデプロイされた
Deno KV: simple data storage for JS
Built-in to Deno Deploy
Based on FoundationDB


JavaScript Server Runtime History 古川氏
90年代から現代まで振り返って予測する。歴史は面白い。
1995 JS was born
Netscape 2.0 Beta に同梱
最初のBrowser War
IE vs NS
1996
NetScape Livewire was born
ブラウザ戦争の裏でひっそりと最初のサーバーサイドJS
開発環境の戦争でもあった
HTMLに<server>タグを書くと実行される
なんかコンパイルするらしい
html
Copied!
<BODY>
<H1>
<SERVER></SERVER>
</H1>
Databaseに接続する技術もあった
結局流行らなかった
2009 Node.js was born
Net V8
サーバーサイドJS元年
2010 npm was born
3rd party ライブラリ
エコシステムが生まれていった時代
Express
socket.io v0.1
2014 Node.js were forked as io.js
エンタープライズな安定性ばかり追求され新しい機能が出てこない時期
Node.js v4.0
io.jsがv3.0まで進化していたところで統合して再出発
Node.js v1.0はない
2018 Deno @jsconf.eu
約10年越しのRyanからの再び
このころからTSのネイティブサポートを宣言していた
2022
WINTER CG
ブラウザ以外のランタイムのための仕様化団体
流行と競争
Node.js vs Deno vs Bun
互換性と仕様化。エンドユーザーにとっては利益が大きい。
Node.js マスコットキャラクター募集中
Deno
npm supportでNodeとの互換性が上がってきた
ここからは開発環境や周辺ツールで差別化していける
開発者に優しい進化が続いていけばなと


開発チームに聞こうのコーナー
kt3k, Ryan, Luca
Denoの推しポイントは?
シンプルさ
Easy to use
TS
ビルトイン開発ツールやDBの充実
npmのサポートの流れについて、本体の実装の複雑さに対する心配があったが?
quite a lot
一方でこれはDenoチームにとっての複雑性であって、ユーザーの観点からは心配はない
Deno by exampleとかYouTube発信とかあるけど、教育的な観点でDenoを広めていきたい観点はある?
学習にとっていいプラットフォームだと思っている
ハッカソンの題材に使ったり、大学のプログラミング学習に使ってもらったり
Jupyter notebook連携が入ったのでビジュアライゼーションも強くなった
Deno Deployのインフラについて by yourself?
GCPを使っている
外から見た姿は単なるDeno Deployだと思ってもられば
standard libs v1.0のリリースの課題
着々と進んでいる
一部がunstable
これから出るdeno cliの機能でブロックされている。これが出次第v1.0になる予定。


The state of Fresh Luca
None of frameworks was optimized for running on edge
No build steps
interactive components
No de-sync client and server
Islands
Allow markinf some components to be rendered on the client
preact
pertial updating
Partials (Fresh 1.5~)
<Partial>
記事コンテンツのコンポーネントをこれでwrapするだけで部分更新ができる
formやchangeEventなどはこれから対応していく
f-client-nav
これはなんだっけ
→ 色んなところに設定できる。内包されるリンクがPartialに対応できるようになる。
what's next
HMR + Fast Refresh
Transition view


SupabaseのAI検索機能 Tyler
Supabase is an open source Firebase alternative.
ベクトルDBもある
Edge functions
Denoで書いている!
Supabase Clippy
最近流行りのRAGアプリケーション
Retrieval Augmented Generation
関連情報を取得、知識を拡張、回答を生成
実際に使っているプロンプトを紹介
「もしわからないときは正直にわからないと言ってください」的なことを書いておく
Content sections (補足情報)
Supabaseのドキュメンテーションをそのまま使えればいい
では、「ユーザーの質問に関連していて答えられそうなドキュメント」どうやってを引っ張ってくる?
ここでベクトル検索
類似性はベクトルスペースでの近さで
コンテキスト長の問題はどう対処している?
→ 実装がOSSになっているので確認してみてほしいとのこと
OpenAIのEmbedding API
文書をベクトル化できる
粒度が細かい類似検索ができるようになる
取得した文書をContent sectionsに載せればいい
MozillaのAI Help機能
これもRAGアプローチ
裏はSupabaseが動いている!?
→ Yes. GitHubに公開されているMDNのコンテンツをSpabaseに乗せて、今日の話のような実装をしたとのこと


金曜 DENO DE SHOW Alisue
Denops
Deno関係のライブラリを色々書いている
Yak shaving
GoライクなDeno.Reader, Deno.Writer時代から取り組んでいたんだ
workerio
DOMベースなのが都合悪かったので作った
unknownutil
Runtime type checker


The power of Web-standards yusukebe
Web-standardsのすごさ
Web相互運用可能、テストがしやすい、DXがよい
親しみやすい小さなAPI
Hono
Web-standardsのAPIのみを使ったWebフレームワーク
Honoはどこでも動く
create-honoコマンドから選べる
importとエントリポイントがちょっとずつ違うだけ
Next.jsで使う人も結構居る
テストを書きやすい
スタンダードではないもの
環境変数
システム環境変数だけではない
Adapterヘルパー env() の実装
ランタイムキー(WinterCGが定める)で環境を識別できる
→ honoでは getRuntimeKey() を実装
ファイルシステム
ファイルシステムじゃないストレージ
Cloudflare KV / R2
Deno KV
Amazon S3
→ honoでは serveStatic() を実装
Service Worker Magic
Honoはブラウザでも動く
ServiceWorkerでも動く
サーバーとブラウザで全く同じものを動かせる
1個のファイルsw.jsでサーバーとブラウザ両方に対応できている
あとで復習


The state of web frameworks in Deno Kevin Whinnery
Better know your web framework
クイズ大会楽しい
docusaurus
これ馴染みがない
fresh


Civic Tech by Open ESM in Pure JavaScript 福野氏
jig.jp
igbrowser lite
ふわっち
ITブートキャンプ
JScript懐かしい
子供パソコンIchigoJam
よさそう
IchigoJam web
実店舗あり(PCN秋葉原)
JSが動くIchigoLatteというのもあるらしい
Webアプリを毎日作っているとライブラリを作りたくなってくる
node_modulesでかい
たくさん作ると一気にディスクを食う
URLインポート
GitHub pagesでライブラリを公開
TypeScriptはブラウザネイティブ対応を待ちたい
わかる
geo3x3
緯度、経度、精度を一つの文字列にエンコードする
ESModle
ブラウザでもコンソールでも透過的に動かせて最高
CSV.js
Opendata as CSV
消火栓マップ
Mochi
Typed JS for WASM but runs as JS
わずか270行の言語処理系
あとで見る


Deno KV でログを永続化する Shun Ueda
Deno KVはwell-designed
Deno KV ハッカソン
商品のフロッピーディスク型のUSBメモリ
「本気で取りに行った」
Paleon(古生物学)
時系列データをKVに入れる
Integreation with std/log
すごくうまいこと書いてる
グッズ駆動開発


Deno KV で投稿系サイトを作ってみた話 Yosuke Torii
万華鏡
手で回すのをシミュレーション
JSONを編集すると見た目が変わる
JSON Schemaで補完表示
WebAuthn対応!
指紋でパスキーを作成して登録できる
Twitterのplayer card (iframe) でプレビュー可能
Deno KV 推しポイント
開発者体験
ストレスゼロのサーバーレス開発
expressのかわりにoak
Deno.listen()
Deno本体が環境の差異を吸収
Deno.openKV()
デプロイするといきなり分散DBが動く
npm packageが普通に使える
やはり簡単にデプロイできるサービスは魅力的


Contributing to Deno is fun! Kenta Moriuchi
Denoの構成
deno
標準APIはJSで実装
ファイルシステムやネットワークはRust
deno_core
V8, JSとRustを仲介する部分 (ops)
V8スナップショットの活用
primordials.js
コントリビューション
good first issueラベルのissueを見つけよう
取り組むことを宣言する


Software DesignでDenoの短期連載したお話し Gorilla
Denoとの出会い
denops.vim
single binaryで動くことの驚き
ffi活用
deno_bindgen
Denoについてソフトウェアデザインで連載したい人いない? by kt3kさん
からの勢いで立候補して決定
執筆しながら学んでいった
deno社からのレビューもあり


Blazing fast FFI in Deno Divy Srivastava
Foreign Function Interface
extern "C" { ... } と書かれていたあれ
libffi
Rustをライブコーディングされていてすごい
難しい


FreshでちゃんとWebアプリを作ってみる Yoshiaki Fujiwara (虎の穴ラボ)
前回
denoからPrismaのマイグレーションを難なく実行できる


開発チームに聞こうのコーナー2
WebAssemblyのdenoでの取扱計画は?
webassemblyはimportできない
fetchしてこないと使えない
TC39で解決するためのプロポーザルを頑張っている
おすすめのバンドラーは?
ES build
動的インポート、2回目以降キャッシュを使わないことできる?もしくはキャッシュを明示的に削除する仕組みの実装予定は?
同じリソースのキャッシュを使うことは言語仕様
URLにハッシュを付けて識別子を明示的に変えれば実現できる
削除仕様に関しては現在はない。TC39で提案されている?compatment?がこれに該当すると思う。これができればできるかも。


集合写真


Powered by Helpfeel