thumbnail
thumbnail

Node.jsの後継Denoでできることをまとめてみた

updated 2021-8-3

できることはNodeと同じく沢山あるので、よく使いそうなものをまとめました

Denoとは

前の記事で軽い説明とインストールから起動まで載せているので、知らない方はこちらからどうぞ
Denoを使ってみた

VSCodeで使う

拡張機能でDenoと検索すると
DenoDeno Standard Library Snippetsが出てくるのでインストールしておくとインテリセンスが効くので便利です

引数を使う

main.tsを用意して下記のように書く

// main.ts
console.log(Deno.args);

引数を渡して結果を見ると、

deno run main.ts a b -c --quiet 

コマンドラインに結果が表示される

[ "a", "b", "-c", "--quiet" ]

ホットリロードする

--watchをつけるとホットリロードされ、main.tsを編集するたびにコンパイルしてくれます

deno run --watch main.ts

ネットワークへの接続を許可する

--allow-netをつけるとネットワークへ接続できるので、サーバーを立てたい時などに使用します

deno run --allow-net main.ts

ランダムのシード値を設定する

--seedの後に書いた数値がシード地になる
Math.random()を使うときに設定するとランダム値が一定の幅に固定できる

deno run --seed 4649 main.ts

tsconfig.jsonを使う

--seedの後に書いたファイル名がtypescript設定ファイルになる

deno run --config tsconfig.json main.ts

CommonJSを使う

DenoはデフォルトでESModuleしかサポートしていないので、CommonJSで作成されたライブラリはESModuleにトランスパイルする必要があります
main.tssample.jsonを作成して

// main.ts
import { createRequire } from "https://deno.land/[email protected]/node/module.ts";

const require = createRequire(import.meta.url);

const path = require("path");
console.log(path.resolve("sample.json"));
{ "hello" : "world" }

実行

deno run --allow-read --unstable main.ts

これでCommonJSモジュールであるpathでsample.jsonのパスを解決できました

exportしてimportする

main.tssub.tsを用意して

//main.ts
import { hello } from "sub.ts";
console.log("hello", hello());
//sub.ts
export function hello() {
    return "world";
}

実行

deno run --allow-read --unstable export-main.ts

結果

hello world

テストする

RustのコンパイラであるCargoが必要です

Cargoの入手

curl https://sh.rustup.rs -sSf | sh

途中で3) Cancel Installation >と出てきたらEnterを押す

終わったらパスを通す

source $HOME/.cargo/env

コンフィグファイルの作成

Cargo.tomlファイルを作成するためにプロジェクトを作成します
ちょっとやってること変ですが...

cargo new sampleProject

作成するとsampleProjectファイルの中にCargo.tomlが作成されます

[package]
name = "sampleProject"
version = "0.1.0"
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

package.jsonみたいな感じですね

この状態でsampleProjectの中でcargo testするとテストが走ります
が、テストがないので0 passedです

その他

プロジェクトとして使用したいディレクトリの中でcargo initでも作成されます

テストの作成

src/lib.rcを作成して、以下を記述します

#[cfg(test)]
mod tests {
    #[test]
    fn it_works() {
        assert_eq!(2 + 2, 4);
    }
}

fn main() {}

実行

cargo test

結果

running 1 test
test tests::it_works ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests (target/debug/deps/sampleProject-b17a66791dee1338)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

   Doc-tests sampleProject

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

参考

Deno マニュアル
Cargo Installtion