Node.jsの後継Denoでできることをまとめてみた
できることはNodeと同じく沢山あるので、よく使いそうなものをまとめました
Denoとは
前の記事で軽い説明とインストールから起動まで載せているので、知らない方はこちらからどうぞ
Denoを使ってみた
VSCodeで使う
拡張機能でDenoと検索すると
DenoとDeno 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.tsとsample.jsonを作成して
// main.ts
import { createRequire } from "https://deno.land/std@0.103.0/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.tsとsub.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
