Deno向けのTreasure Data Clientを作った話

なんとなくDenoとかTypeScriptに触りたくて、Treasure Data向けのSDKを作った。(需要があるかどうかはしらないが、作りたかったので仕方ない)

ソースコード

ソースコードはこちらです。

使い方はexampleにもあるんですが、こんな感じです。

import { TDClient } from "../mod.ts";

const apiKey = Deno.env.get('TD_API_KEY') as string
const td = new TDClient('https://api.treasuredata.com', apiKey)
try {
    let query = await td.query('presto', 'sample_datasets', 'select * from www_access limit 100')
    let job = await query.json()
    let jobStatus = await td.getJobStatus(job.job_id)
    let status = await jobStatus.json()

    for(;;) {
        if (status.status === 'error' || status.status === 'success'){
            break
        }
        jobStatus = await td.getJobStatus(job.job_id)
        console.log(`${job.job_id} status : ${status.status}`)
        await td.sleep(3)
        status = await jobStatus.json()
    }

    console.log(status.num_records)
    let result = await td.getJobResult(status.job_id, 'tsv')
    console.log(await result.text())

    result = await td.listDatabases()
    console.log(await result.json())

    result = await td.jobList()
    console.log(await result.json())
} catch(e) {
    console.log(e)
}

どうしてDenoなのか

TypeScript自体は前から興味があったのですが、トランスパイルの仕組みがあまり好きになれず積極的に学ぶ気にはなれませんでした。
一方でDenoはネイティブでTypeScriptをサポートしており、上記の煩わしさが大幅に改善されたJavaScript/TypeScript環境で非常に気に入ってます。
その理由もあり、通常のTypeScript向けのSDKではなくDeno向けとしてとりあえず作った次第です。

今後について

Queryを投げたりはできるようにしてますが、それ以外の機能はまだ未実装です。
この公式ドキュメントを参考にして少しずつ機能を実装していければ、と考えてます。

docs.treasuredata.com