Slide 1

Slide 1 text

github-webhook-rs 2023/06/07 アークエッジ・スペース Rust 勉強会     sksat

Slide 2

Slide 2 text

自己紹介 - sksat - SW部正社員 && 学部2年生(2回目) - 中指を立てているわけではない(アイコン) - ビルドシステム大臣 - Rust そのものより Cargo.toml と build.rs ばかり書いている - 不自由な開発環境の森を焼き尽くして回っている - 泣きながら CMakeLists.txt も殴る - ときどき社内システム(self-hosted Renovate, hubhook, etc)

Slide 3

Slide 3 text

hubhook - GitHub webhook を吸い上げて Slack に通知しまくる君 - インターン生時代に Rust の練習に書いた - OSS - かなりの社員が使っている

Slide 4

Slide 4 text

なお実装 - Rust の練習で書いた - かなり雑なコード - 勢い良く unwrap() - まあ panic しても k8s で走ってるのでいいが...... - しかし,通知を取りこぼすのは困る - どこでコケるのか? → webhook payload JSON の deserialize

Slide 5

Slide 5 text

GitHub webhook payload - かなり巨大な構造の JSON - serde 最高! - 巨大すぎて struct のメンテがダルい - でもできるだけ情報は取りたい - 実物を眺めて書き起こすのは面倒 - たまーに構造が一部変わる

Slide 6

Slide 6 text

octokit/webhooks - machine-readable, always up-to-date GitHub Webhooks specifications - 丁寧な JSON Schema がメンテされている - TypeScript の型にも変換されてる - これだ!!!

Slide 7

Slide 7 text

Rust の型になってほしい!!! - serde-compatible な形で - JSON Schema -> Rust あるでしょ - ex: schemafy - draft 7 未対応がちで怪しい雰囲気 - 他のファイル読み出しまくってる - 素直に変換すると使い勝手の悪い型に - 共通部分もそれぞれのフィールドとしてダンプされてしまう,など

Slide 8

Slide 8 text

ところで......? - octokit/webhooks/payload-types/schema.d.ts - TypeScript にはキレイな型がある - こういうのでいいんだよ,こういうので

Slide 9

Slide 9 text

TypeScript と Rust - なんか聞いたことあるな......?

Slide 10

Slide 10 text

swc - JS/TS compiler を Rust で書き直そうぜプロジェクト - 今コンパイラって言った?

Slide 11

Slide 11 text

I have a octokit/webhooks/payload-types/schema.d.ts I have a swc_ecma_parser

Slide 12

Slide 12 text

Oh!

Slide 13

Slide 13 text

できた

Slide 14

Slide 14 text

おわり - https://github.com/sksat/github-webhook-rs - 作ったはいいけどまだ使ってない(え?) - 最近社内ツールをリファクタして回って遊んでいるインターン生にめちゃめちゃリファク タしてもらった(ありがとう) - リファクタによって JSON Schema 自力で読んでもいい気がしてきた(え?) - こらそこ TS で書いてもいいんじゃないかとか言わない