過去に2度挫折したDenoについて、3度目の正直でチャレンジしました。

Table of Contents

はじめに

Denoとは

JavaScriptとTypeScriptのために作られた安全な実行環境です。

作者はNode.jsを作ったRyan Dahlさんです。

なぜ3度目のチャレンジをしようと思ったのか?

以下の記事を見て、またチャレンジしてみたくなったからです😄

本稿は↑の記事に沿って進めていきます。

環境

環境 バージョン 備考
OS Windows10
Chocolatey 0.10.13
Deno 0.34

インストール

Chocolateyを使います。

cinst deno

以前はChocolateyで上手くいかず、バイナリを直接インストールしていました。
しかし今回は最新バージョンをインストールできました👍

Scoopのバージョンは少し古かったです

TypeScriptのコードを実行する

標準でTypeScriptに対応しているのがDenoの強みです💪

main.tsに簡単なコードを書いてみます。

interface Human {
    id: number
    name: string
    gender: "man" | "woman"
}

const taro: Human = {
    id: 1,
    name: "taro",
    gender: "man",
}

console.log(`${taro.name}: ${taro.id}`)

実行します。

$ deno main.ts
Compile file:///C:/Users/syoum/works/deno-sandbox/main.ts
taro: 1

LGTM😼

フォーマッター

Denoではdeno fmtでPrettierを使ったFormatができます。
ただ、.prettierrcなどによる設定はできないようです..。

オプションを与えてパターンを増やすよりも、設定ファイル不要の統一されたフォーマットに価値を置いているようです。

外部のコードをimportする

LodashのgroupByを使ってみました。

import groupBy from "lodash/groupBy.js";

interface Human {
  id: number;
  name: string;
  gender: "man" | "woman";
}

const taro: Human = {
  id: 1,
  name: "taro",
  gender: "man"
};

const jiro: Human = {
  id: 2,
  name: "jiro",
  gender: "man"
};

const hanako: Human = {
  id: 3,
  name: "hanako",
  gender: "woman"
};

console.log(groupBy([taro, jiro, hanako], (x: Human) => x.gender));

importでURLを指定しなくてもいいようにimport_map.jsonを使っています。

{
  "imports": {
    "lodash/": "https://unpkg.com/lodash-es@4.17.15/"
  }
}

実行結果です。

$ deno --importmap import_map.json main.ts
...
{ man: [ { id: 1, name: "taro", gender: "man" }, { id: 2, name: "jiro", gender: "man" } ], woman: [ { id: 3, name: "hanako", gender: "woman" } ] }

今までLodashをimportして実行できたことは無かったので大きな進歩です😄

できなかったこと

私の環境で上手くできなかったことです。
やり方や設定不足かもしれませんが..。

VSCodeの利用

以下の拡張機能を試してみましたが、importがうまくできませんした..。

dayjsの利用

パッケージは用意されてそうですが、importができませんでした..。

TypeScriptの恩恵

VSCode拡張が使えなかったこともあり、TypeScriptの型による恩恵を得ることができませんでした。

総括

過去に2度挫折したDenoについて、3度目の正直でチャレンジしました。

Lodashをimportして使う..という進展はありました。
しかし、今のままでは実戦投入はもちろん、Sandboxでの使用も厳しそうです。

WindowsではなくLinuxで使えば上手く動くのかもしれません..がそのためだけにVMを使いたくないのでもう少し様子見します😅

PS: 強い方いましたら教えて下さい🙇