Deno3度目の正直
過去に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/[email protected]/"
}
}
実行結果です。
$ 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: 強い方いましたら教えて下さい🙇