MMMブログ

Denoを触ってみる

このエントリーをはてなブックマークに追加

最近モンスターエナジーを箱買いしました。関口です。

今回は今年5月に正式版がリリースされたDenoに軽く触れてみた内容を記載したいと思います。

事前準備

公式よりDenoをインストールしてください。

VSCodeJetBrainsIDEではDeno用のプラグインが既に存在しますので、こちらも適宜導入してください。

簡易なAPIを作成する

今回はミドルウェアとしてoakを利用します。
ApplicationRouterをoakからインポートして、アプリケーションサーバーの作成とルートを設定します。

app.ts

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import { Application } from 'https://deno.land/x/oak/mod.ts'
import router from './router.ts'

const env = Deno.env.toObject()
const HOST = env.HOST || '127.0.0.1'
const PORT = env.PORT || 7700

const app = new Application()

app.use(router.routes())
app.use(router.allowedMethods())

console.log(`Listening on port ${PORT} ...`)
await app.listen(`${HOST}:${PORT}`)

route.ts

1
2
3
4
5
6
7
8
import { Router }from 'https://deno.land/x/oak/mod.ts'
import { getBooks, getBook, addBook, updateBook, deleteBook } from './controller.ts'

const router = new Router()
router.get('/books', getBooks)
.get('/books/:isbn', getBook)

export default router

GETを試す

簡単なGetメソッドを作成します。

controller.ts

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
interface IBook {
isbn: string;
author: string;
title: string;
}

let books: Array<IBook> = [{
isbn: "1",
author: "Robin Wieruch",
title: "The Road to React",
},{
isbn: "2",
author: "Kyle Simpson",
title: "You Don't Know JS: Scope & Closures",
},{
isbn: "3",
author: "Andreas A. Antonopoulos",
title: "Mastering Bitcoin",
}]

export const getBooks = ({ response }: { response: any }) => {
response.body = books
}

Denoで書かれたアプリを起動します

1
2
$ deno run --allow-net --allow-env app.ts
Listening on port 7700 ...

http://localhost:7700/booksにアクセスすると、booksarrayが返されます。

テストコード

お試しで単純な関数とそれに対応する対応するテストを作成します。

sample.ts

1
2
3
export const add = (a: number, b: number) => {
return a + b;
}

sample.test.ts

1
2
3
4
5
6
import { add } from "./sample.ts";
import { assertEquals } from "https://deno.land/std/testing/asserts.ts";

Deno.test("it should add two numbers", () => {
assertEquals(add(1, 2), 3);
});

deno testコマンドでテストを実行できます

1
2
3
4
5
$ deno test --allow-net
running 1 tests
test it should add two numbers ... ok (8ms)

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

参考

Simple REST API with Deno
Your First Deno Server in 60 Lines
How To Write Spec Tests In Deno

このエントリーをはてなブックマークに追加

お問い合わせ

見積もり依頼や詳しいご相談など、クラウド・AWSに関する困りごとをお気軽にご相談ください。
以下のお問い合わせ先から受け付けています。

お問合わせはこちら

※通常1営業日内にご回答いたします。