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
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
570
2025年ふりかえり
askua
1
240
Wasmの気になる最新情報
askua
1
390
Wasmのエコシステムを使った ツール作成方法
askua
0
410
Pure Goで体験するWasmの未来
askua
1
1.1k
Wasmで社内ツールを作って配布しよう
askua
0
320
Wasm元年
askua
0
380
wstdなんだか良さそう
askua
0
140
Dartでウェブ開発 (やりたい)
askua
0
100
Other Decks in Technology
See All in Technology
AI研修(Day1)【MIXI 26新卒技術研修】
mixi_engineers
PRO
2
3.1k
ここは地獄!つらい朝会を体験することで、チームとしてのより良い振る舞いに気づくワークショップ / The stand-up meeting from hell in the game industry
scrummasudar
0
490
Retriever と Reranker、結局どうする?
kazuaki
1
560
DevOps Agentで運用判断をチーム資産にする~Agent InstructionsとAgent Skillを継続的に育てる~
fujioka6789
0
180
BigQuery を検索ソースとした AI Agent の作り方って 〇〇 通りあんねん
satohjohn
0
150
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
53k
CloudWatchから始めるAWS監視
butadora
0
300
reFACToring
moznion
1
1.1k
20260801_スクフェス大阪
kgnkhkr
0
150
Claude Code並行開発環境の ムダ‧ムラ‧ムリを見直した話
muranakaaa
0
380
A Bag-of-Documents Model for Query Specificity
dtunkelang
0
180
AIQAのナレッジ構築について
qatonchan
1
140
Featured
See All Featured
Mind Mapping
helmedeiros
PRO
1
290
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
230
Are puppies a ranking factor?
jonoalderson
1
3.7k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
470
Building Adaptive Systems
keathley
44
3.1k
Designing for Timeless Needs
cassininazir
1
430
The Invisible Side of Design
smashingmag
301
52k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.7k
Prompt Engineering for Job Search
mfonobong
0
390
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
340
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
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