Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ライブラリを公開してメンテナンスした一年
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
asuka
December 20, 2025
Technology
100
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ライブラリを公開してメンテナンスした一年
https://shinjukugyoen.connpass.com/event/377580/
asuka
December 20, 2025
More Decks by asuka
See All by asuka
GoとSIMDとWasmの今。
askua
3
560
2025年ふりかえり
askua
1
240
Wasmの気になる最新情報
askua
1
380
Wasmのエコシステムを使った ツール作成方法
askua
0
400
Pure Goで体験するWasmの未来
askua
1
1.1k
Wasmで社内ツールを作って配布しよう
askua
0
320
Wasm元年
askua
0
380
wstdなんだか良さそう
askua
0
140
Dartでウェブ開発 (やりたい)
askua
0
98
Other Decks in Technology
See All in Technology
デジタル・デザイン構想 by Sayaka Ishizuka
y150saya
0
190
アラート調査向けAIエージェントの本番導入とその後/AI Agents for Alert Investigation: Production Deployment and After
taddy_919
1
380
Why is RC4 still being used?
tamaiyutaro
0
290
フルAIで個人開発して学んだあれこれ / yuruai vol.1
isaoshimizu
0
180
AIDLC_ヤフーショッピングの取り組み
lycorptech_jp
PRO
0
520
プライバシー保護の理論と実践
lycorptech_jp
PRO
1
240
5分でわかるDuckDB Quack
chanyou0311
4
310
そのハーネス、本当に境界になっていますか? AIエージェント時代の実行環境設計【MEGU-Meet #4】
cscengineer
PRO
0
110
ゼロをイチにする仕事が終わったあと
smasato
0
290
End-to-Endで考える信頼性 —LINEアプリにおけるクライアント開発×SRE連携の実践
maruloop
1
320
“ID沼入口” - 基本とセキュリティから始める、考え続けるためのID管理技術勉強会 告知&イントロ
ritou
0
390
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
11k
Featured
See All Featured
How GitHub (no longer) Works
holman
316
150k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Side Projects
sachag
455
43k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
270
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
180
Music & Morning Musume
bryan
47
7.3k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
72
40k
Between Models and Reality
mayunak
4
360
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.5k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
380
Typedesign – Prime Four
hannesfritz
42
3.1k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Transcript
ライブラリを公開して メンテナンスした一年 新宿御苑.dev #2025.12.20
WHOAMI asuka • 株式会社モニクル/SWE ◦ Monicle Techbook vol.2 技術書典19 •
Wasm関連の同人誌・商業誌の執筆 ◦ 実践入門WebAssembly ◦ WebAssembly System Interface入門 ◦ Wasm Cookbook vol.2 技術書典17 ◦ Wasm Cookbook vol.3 技術書典18 ◦ Wasm Cookbook vol.4 技術書典19 ◦ Wasm Cookbook vol.5 技術書典20 • 新宿御苑.dev ◦ 新宿御苑.wasm #2025.6.25 LTイベント ◦ 新宿御苑.wasm #2025.10.19LTイベント ◦ 新宿御苑.dev #2025.12.20 LTイベント 2 商業誌 Cookbookシリーズ ごちWASI
ライブラリを公開してメンテナンスした一年 3
@askua/core https://jsr.io/@askua/core • 今年2月にv1.0.0を公開 • 業務で利用することを目的に実装 (Deno) • 現在v1.4.0を準備中 (年明けリリース)
4
@askua/core Denoを使うと嬉しいこと • CLIがGo言語ライク ◦ deno fmt : フォーマッター (JSONやMarkdownにも効く)
◦ deno lint : リンター ◦ deno doc : TSDocを元にドキュメントの生成 ▪ deno doc --output=docs --html mod.ts ▪ deno run -NR=./docs jsr:@std/http/file-server ./docs ◦ deno test : `*_test.ts`のテストを実行 ▪ --docオプションで,TSDocのコードブロックのテストも実行できる ◦ deno bench : `*_bench.ts`のベンチマークテストを実行 → パッケージを作るにあたって必要なものが初めから揃っている 5
Denoを使うと嬉しいこと • Denoでパッケージを作りJSRに公開する - Speaker Deck @askua/core 6
解決したかった課題 • Brand型,Result型,Option型など個人的によく使う型をまとめておきたい → effect-tsとかあるからそれを使えば良いのに🤖 ↓ Class instanceベースの型ではなく,Objectベースの型が欲しかった • type
Option<T> = { some: true; value: T } | { some: false }; @askua/core 7
Class instanceベースの型ではなく,Objectベースの型が欲しかった • type Option<T> = { some: true; value:
T } | { some: false }; → ObjectならJSONにエンコード/デコードしても情報が欠落しない でも `if (o.some) { foo(o.value); }` と書くよりは `o.map(foo)`と書けた方が嬉しい → Option<T>を拡張したOptionInstance<T>を用意 declare const o: Option<number>; const p = Option(o).map((n) => n + 1).map(foo); @askua/core 8
Option<T>を拡張したOptionInstance<T>を用意 • v1.0.0時点では,RustのOption型のAPIを参考に作成 declare const o: Option<number>; const a =
Option(o).unwrap(); const b = Option(o).unwrapOr(new Error("foo")); const c = Option(o).unwrapOrElse(() => new Error("foo")); → Rustは言語都合で`unwrap`, `unwrapOr`, `unwrapOrElse`に別れている → JSで分ける必要なくないか?? (あとunwrapOrやunwrapOrElseは長い) @askua/core 9
Rustは`unwrap`, `unwrapOr`, `unwrapOrElse`の3パターンある → JSでは `unwrap`だけにする declare const o: Option<number>;
const a = Option(o).unwrap(); const b = Option(o).unwrap(() => new Error("foo")); → `unwrap(new Error("foo"))`はサポートしない • `() => V`の時に,`() => V`を返したいのか`V`を返したいのか区別できない • `new Error("foo")`と`() => new Error("foo")`だとパフォーマンスに差がある @askua/core 10
実用してみて • `unwrapOr`, `unwrapOrElse`などRust由来で追加したけどJSだと冗長に感じる APIを非推奨に • filter,Option.fromNullable,Result.tryなど頻出パターンを追加実装 @askua/core 11
メンテナンスしてみてどうだった? • v1にするタイミング,もっと後でも良かったかも ◦ v0なら気持ち的に壊しやすい ◦ v1〜は後方互換に気を遣う ◦ 実運用してみてから直したいと思う箇所が思ったよりもあった •
`deno bench`めっちゃ良かった ◦ リファクタ時にパフォーマンスよくなっていればそれは正義 • `deno test`でTSDocのテストをできたので,修正漏れに気がつけた → 動いているものを修正するのは大変 @askua/core 12
来年の抱負 生活習慣の改善と健康で文化的な生活 13