Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ライブラリを公開してメンテナンスした一年
Search
asuka
December 20, 2025
Technology
130
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
Transcript
13 slides
ライブラリを公開して メンテナンスした一年 新宿御苑.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
More Decks by asuka
See All by asuka
GoとSIMDとWasmの今。
askua
3
660
2025年ふりかえり
askua
1
260
Wasmの気になる最新情報
askua
1
430
Wasmのエコシステムを使った ツール作成方法
askua
0
480
Pure Goで体験するWasmの未来
askua
1
1.2k
Wasmで社内ツールを作って配布しよう
askua
0
350
Wasm元年
askua
0
430
wstdなんだか良さそう
askua
0
170
Dartでウェブ開発 (やりたい)
askua
0
120
Other Decks in Technology
See All in Technology
AI時代に求められる優秀なTechLeadの振る舞い
pospome
11
16k
evcc & Home Assistant
naltatis
0
580
ライフワーク「猫でもわかるDirectConnect」
kentapapa
0
320
これからのデータエンジニアの役割について考える / Rethinking the Role of Data Engineers in the AI Era
okiyuki99
0
380
2026-11-11 Tamachi.sre#7 PaCにインフラリソースの命を救われました。 / PaC saves the infra resource life
masasuzu
0
120
[General] 개발자로 해외 기업에서 일하기
skydoves
1
330
AWS Quick 入門 | 目指せ Quick マスター 01
inariku
PRO
2
310
Active Directory と Entra ID のむむむな関係
murachiakira
PRO
4
1.8k
【Oracle AI SPOTLIGHT ウェビナー】【特別開催:日本語で解説!】Oracle AI World 2026 最新情報フィードバック
oracle4engineer
PRO
1
150
Bots in Kiro Crew (One point of contact for ongoing work) | Kiro: Zero to Hero 12
inariku
PRO
1
120
IBC 2026 動画技術関連レポート / IBC 2026 Report
cyberagentdevelopers
PRO
2
450
DBTS2026 盛り上がってますか!?Databricksが実現するAI時代のデータ基盤
akuwano
1
200
Featured
See All Featured
How to Talk to Developers About Accessibility
jct
2
620
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
470
First, design no harm
axbom
PRO
2
1.4k
Chasing Engaging Ingredients in Design
codingconduct
0
390
Odyssey Design
rkendrick25
PRO
3
940
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
3k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.7k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Facilitating Awesome Meetings
lara
57
7.2k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k