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/[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.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