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
asuka
December 20, 2025
Technology
95
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
520
2025年ふりかえり
askua
1
230
Wasmの気になる最新情報
askua
1
370
Wasmのエコシステムを使った ツール作成方法
askua
0
390
Pure Goで体験するWasmの未来
askua
1
1k
Wasmで社内ツールを作って配布しよう
askua
0
310
Wasm元年
askua
0
370
wstdなんだか良さそう
askua
0
140
Dartでウェブ開発 (やりたい)
askua
0
93
Other Decks in Technology
See All in Technology
RAG を使わないという選択肢
tatsutaka
1
160
Building applications in the Gemini API family.
line_developers_tw
PRO
0
2.9k
DevOps Agentで始めるAWS運用 〜フロンティアエージェントが変える運用の現場〜
nyankotaro
1
380
AI駆動開発を通して感じた、 AI時代のデザイナーの役割変化
whisaiyo
0
200
2026TECHFRESH畢業分享會 - 原生還是跨平台? App 開發踩坑實錄
line_developers_tw
PRO
0
730
On-behalf-of Token exchange with AgentCore Identity
hironobuiga
2
140
地球に⽣きるAI —GeoAIと「中間領域」— / AI Living on Earth — GeoAI and the “Intermediate Layer” —
ykiyota
0
270
Djangoユーザが知っ得なPostgreSQL機能 - 設計の選択肢を増やす / Djang-use-PostgreSQL
soudai
PRO
1
230
非定型業務をAI slackbotで自動化する ~ 社内要望を自動壁打ちするbotを作った ~/automating-ad-hoc-work-with-ai-slackbot
shibayu36
0
580
「エンジニア進化論」2028年の開発完全自動化、エンジニアはどう進化するか
cyberagentdevelopers
PRO
4
4.4k
新規事業を牽引する技術選定 〜フルスタックTypeScript開発の実践事例〜
nullnull
3
380
2026 TECHFRESH 畢業分享會 - 開發日常大解密!從領域驅動到企業級上線
line_developers_tw
PRO
0
720
Featured
See All Featured
Designing for humans not robots
tammielis
254
26k
Visualization
eitanlees
152
17k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
380
Navigating Team Friction
lara
192
16k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
360
Rebuilding a faster, lazier Slack
samanthasiow
85
9.5k
Color Theory Basics | Prateek | Gurzu
gurzu
0
360
The Language of Interfaces
destraynor
162
27k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
How to train your dragon (web standard)
notwaldorf
97
6.7k
The Curious Case for Waylosing
cassininazir
1
380
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