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
Documentation testsの恩恵 / Documentation testing ...
Search
TOMIKAWA Sotaro
May 11, 2024
Programming
2
770
Documentation testsの恩恵 / Documentation testing benefits
TSKaigi 2024
の発表資料です
TOMIKAWA Sotaro
May 11, 2024
Tweet
Share
More Decks by TOMIKAWA Sotaro
See All by TOMIKAWA Sotaro
新しいAPI createRawSnippet触ってみた / What is the createRawSnippet?
ssssota
1
47
脱法Svelte / Evasion of svelte rules
ssssota
1
110
TypeScriptとDocumentaion tests / Documentation tests with TypeScript
ssssota
7
3.6k
Svelteでライブラリを作る / Make your library with Svelte
ssssota
0
99
現代のReactivityとSvelteの魔法
ssssota
0
1.7k
型付きdotenv
ssssota
0
230
Other Decks in Programming
See All in Programming
The Shape of a Service Object
inem
0
520
Why Prism?
kddnewton
4
1.7k
GraphQL あるいは React における自律的なデータ取得について
quramy
11
3k
rails_girls_is_my_gate_to_join_the_ruby_commuinty
maimux2x
0
200
状態管理ライブラリZustandの導入から運用まで
k1tikurisu
3
470
How to Break into Reading Open Source
kaspth
2
210
KSPの導入・移行を前向きに検討しよう!
shxun6934
PRO
0
280
全部見せます! クラシルリワードのSwiftTesting移行プロジェクト
uetyo
0
210
LangChainの現在とv0.3にむけて
os1ma
4
920
2024 컴포즈 정원사
jisungbin
0
150
オートマトン学習しろ / Do automata learning
makenowjust
3
130
僕が思い描くTypeScriptの未来を勝手に先取りする
yukukotani
9
2.4k
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
89
16k
Building Applications with DynamoDB
mza
90
6k
Web Components: a chance to create the future
zenorocha
308
42k
The Brand Is Dead. Long Live the Brand.
mthomps
53
38k
KATA
mclloyd
27
13k
Building Flexible Design Systems
yeseniaperezcruz
325
38k
Making the Leap to Tech Lead
cromwellryan
128
8.8k
Making Projects Easy
brettharned
113
5.8k
The Pragmatic Product Professional
lauravandoore
31
6.2k
Speed Design
sergeychernyshev
22
430
Raft: Consensus for Rubyists
vanstee
135
6.5k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
248
20k
Transcript
Documentation testsの恩恵 ssssota
自己紹介 冨川宗太郎 Tomikawa Sotaro (ssssota) { GitHub: "ssssota", X: "ssssotaro"}
フロントエンドエンジニア sは合計4つ
突然ですがこちらのコードをご覧ください
/// ``` /// use biome_unicode_table::is_js_ident; /// /// assert!(is_js_ident("id0")); /// assert!(is_js_ident("$id$"));
/// assert!(is_js_ident("_id_")); /// assert!(is_js_ident("𐊧")); /// /// assert!(!is_js_ident("")); /// assert!(!is_js_ident("@")); /// assert!(!is_js_ident("custom-id")); /// assert!(!is_js_ident("0")); /// ``` pub fn is_js_ident(s: &str) -> bool { if s.is_empty() { return false; Rust製Linter/Formatterである Biomeのコードを一部抜粋 ソースコード中のドキュメント に 関数の入出力が記載されている Rust(Cargo)にはデフォルトで 搭載されている機能で実際に利 用されている https://github.com/biomejs/biome/blob/7 245146125fa76c19780f68653092ed24fcdb717/ crates/biome_unicode_table/src/lib.rs#L4 2-L57
TypeScriptでは次のようなもの(vite-plugin-doctestの例) JSDocとして記載されたコメント内でassert関数を用い関数をテストしている それだけ /** * @example * ```ts @import.meta.vitest *
assert(add(1, 2) === 3); * ``` */ export const add = (a: number, b: number) => a + b; Documentation testsとは?
1. ソースコードのすぐそばに、テストコードが記載できる。 index.test.ts など別途ファイルを作成することなく、すぐにテストを書 き始めることができる。 2. ドキュメントに記載したコードを実行してその動作が保証できる。 ライブラリ等で、動かないサンプルコードを見たことが...。 3. 関数利用時にIDE(LSP)を介して「動作保証されたサンプルが閲覧できる」。
Documentation testsの恩恵
Documentation testsの恩恵 こんなシーンを見たことが... • ドキュメントにサンプルコードを書いても廃れる • そもそもJSDoc誰も読み書きしない... →実装のすぐとなりにテストコード(=JSDoc)を書くことで、 そもそもJSDocに触れる機会が増え、 それがサンプルコードとなり、生きたドキュメントになる。
ドキュメンテーションテストとの向き合い方 ドキュメンテーションテストは銀の弾丸(万能)ではない。 次のようなテストは向かない(書けない)。 • ライフサイクル関数が必要 • モックが必要 • UIテスト カジュアルにドキュメントおよびテストを書き始める手段の一つ。
いま型をカジュアルに書くように、 よりドキュメント/テストをカジュアルに書く世界。
npm i -D vitest vite-plugin-doctest import { defineConfig } from
'vitest/config'; import { doctest } from 'vite-plugin-doctest'; export default defineConfig({ plugins: [doctest()], // markdownファイルもサポートしている test: { includeSource: ['./src/**/*.[jt]s?(x)', './**/*.md'] }, }); npx vitest 導入方法(vite-plugin-doctest)
TypeScriptでは次のようなもの(vite-plugin-doctestの例) JSDocとして記載されたコメント内でassert関数を用い関数をテストしている それだけ /** * @example * ```ts @import.meta.vitest *
assert(add(1, 2) === 3); * ``` */ export const add = (a: number, b: number) => a + b; Documentation testsとは?
Documentation testsで 生きてるドキュメントとテストを書こう!