---
title: TypeScript環境向け DSLを作ろう☕️
tags: 
author: [kazuhi-ra](https://image.docswell.com/user/kazuhi-ra)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/YE6WXPR9EV.jpg?width=480
description: ToKyoto.js #03 での発表です。 https://kyotojs.connpass.com/event/402321/  civetan-dance https://github.com/synpuls/civetan-dance
published: September 04, 26
canonical: https://image.docswell.com/s/kazuhi-ra/5X23NX-2026-09-04-125634
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/YE6WXPR9EV.jpg)

TypeScript環境向け
DSLを作ろう☕
kazuhi̲ra


# Page. 2

![Page Image](https://bcdn.docswell.com/page/GE5MXK8DE4.jpg)

・東京在住
・生まれ育ちは大阪
・京都の大学に通ってました
・好きなメソッド
・String.prototype.repeat()
・ʼ京都ʼ.repeat(10)
kazuhi̲ra
・ʼ京都京都京都京都京都京都京都


# Page. 3

![Page Image](https://bcdn.docswell.com/page/9729XWVMJR.jpg)

ところで


# Page. 4

![Page Image](https://bcdn.docswell.com/page/DJY48L3P7M.jpg)

TypeScript環境向け
DSLを作ろう☕
kazuhi̲ra


# Page. 5

![Page Image](https://bcdn.docswell.com/page/V7NYQ4VME8.jpg)

悪寒がしてきたよ〜
という方🙋


# Page. 6

![Page Image](https://bcdn.docswell.com/page/YJ9PDQ6W73.jpg)



# Page. 7

![Page Image](https://bcdn.docswell.com/page/GJ8D3GZRJD.jpg)

書いたことのある方も多いのでは


# Page. 8

![Page Image](https://bcdn.docswell.com/page/LJLMVGD2ER.jpg)

かくいう私も


# Page. 9

![Page Image](https://bcdn.docswell.com/page/47MYGQP97W.jpg)

ff
サーバーサイドCo eeScriptと
過ごした20代中盤


# Page. 10

![Page Image](https://bcdn.docswell.com/page/P7R9Z819E9.jpg)

ff
Co eeScriptとは


# Page. 11

![Page Image](https://bcdn.docswell.com/page/PJXQ98Y37X.jpg)



# Page. 12

![Page Image](https://bcdn.docswell.com/page/3JK9PK3NJD.jpg)

十数年前(2012年ごろ)
流行っていました


# Page. 13

![Page Image](https://bcdn.docswell.com/page/LE3WXZGZE5.jpg)

そして2026年現在
その血は脈々と受け継がれ……


# Page. 14

![Page Image](https://bcdn.docswell.com/page/8EDK2R147G.jpg)



# Page. 15

![Page Image](https://bcdn.docswell.com/page/V7PK1WQVJ8.jpg)



# Page. 16

![Page Image](https://bcdn.docswell.com/page/2JVVY85RJQ.jpg)

Civet.js


# Page. 17

![Page Image](https://bcdn.docswell.com/page/5EGL9566JL.jpg)

ff
型付きCo eeScript


# Page. 18

![Page Image](https://bcdn.docswell.com/page/4JQYWZ427P.jpg)



# Page. 19

![Page Image](https://bcdn.docswell.com/page/K74WK3QPE1.jpg)



# Page. 20

![Page Image](https://bcdn.docswell.com/page/LJ1YX1PXEG.jpg)



# Page. 21

![Page Image](https://bcdn.docswell.com/page/GJWGN82K72.jpg)

TypeScriptの
スーパーセット


# Page. 22

![Page Image](https://bcdn.docswell.com/page/4EZL38DN73.jpg)

TypeScriptをimportして
実行できる


# Page. 23

![Page Image](https://bcdn.docswell.com/page/Y76WXP197V.jpg)

それでは本題
DSLを作ってみましょう


# Page. 24

![Page Image](https://bcdn.docswell.com/page/G75MXK4D74.jpg)

作った


# Page. 25

![Page Image](https://bcdn.docswell.com/page/9J29XWLMER.jpg)



# Page. 26

![Page Image](https://bcdn.docswell.com/page/DEY48LQPJM.jpg)

BDDのためのツール


# Page. 27

![Page Image](https://bcdn.docswell.com/page/VJNYQ4KM78.jpg)

コードはこんなの


# Page. 28

![Page Image](https://bcdn.docswell.com/page/YE9PDQVWJ3.jpg)



# Page. 29

![Page Image](https://bcdn.docswell.com/page/GE8D3GPRED.jpg)

RSpecライクな
テスティングライブラリ


# Page. 30

![Page Image](https://bcdn.docswell.com/page/LELMVG127R.jpg)

Vitestと比較


# Page. 31

![Page Image](https://bcdn.docswell.com/page/4JMYGQW9JW.jpg)



# Page. 32

![Page Image](https://bcdn.docswell.com/page/PJR9Z8Y979.jpg)



# Page. 33

![Page Image](https://bcdn.docswell.com/page/PEXQ98G3JX.jpg)

なぜこのように柔軟な
記法が可能なのか？


# Page. 34

![Page Image](https://bcdn.docswell.com/page/3EK9PK4NED.jpg)

fi
Functions as In x Operators


# Page. 35

![Page Image](https://bcdn.docswell.com/page/L73WXZLZ75.jpg)



# Page. 36

![Page Image](https://bcdn.docswell.com/page/87DK2RN4JG.jpg)



# Page. 37

![Page Image](https://bcdn.docswell.com/page/VJPK1W5VE8.jpg)



# Page. 38

![Page Image](https://bcdn.docswell.com/page/2EVVY8PREQ.jpg)



# Page. 39

![Page Image](https://bcdn.docswell.com/page/57GL95P6EL.jpg)

表現力はかなり高い
CivetでDSLを作ろう！


# Page. 40

![Page Image](https://bcdn.docswell.com/page/4EQYWZ22JP.jpg)

おわり


