TypeScript のはじめかた - Deno編 -

f:id:Naotsugu:20200621191444p:plain


はじめに

前回

blog1.mammb.com

では Node を使った TypeScript の始め方について見てきました。

今回は、Deno を使って TypeScript の始め方について見ていきます。


Deno とは

Node の作者である Ryan Dahl が、Node の反省点を踏まえて新たに作成したランタイムであり、Deno のマニュアルによると以下のように要約されています。

Deno is a JavaScript/TypeScript runtime with secure defaults and a great developer experience. It's built on V8, Rust, and Tokio.

セキュアな JavaScript と TypeScript のランタイムで、V8 と Rust、及びRust の非同期ランタイムである Tokio を基盤としています。


特徴としては以下とされています。

  • デフォルトで安全であり、明示的に有効化しない限り、ファイル、ネットワーク、環境へのアクセスはできない
  • TypeScript をサポートしている
  • 単一の実行ファイル(deno)として提供される
  • 依存関係インスペクタ(deno info)やフォーマッタ(deno fmt)などのユーティリティを組み込みで提供する
  • Denoでの動作が保証された標準モジュールのセットが提供される
  • スクリプトを単一 JavaScript ファイルにまとめることができる


Deno のインストール

Shell でのインストールは以下となります。

$ curl -fsSL https://deno.land/x/install/install.sh | sh

Homebrew の場合は以下でインストールします。

$ brew install deno

現時点でのバージョンは以下のようになっています。

$ deno -V
deno 1.1.1


Hello TypeScript With Deno

前回の Node を使ったケースでは、npm による TypeScript コンパイラの導入などを行いましたが、Deno はデフォルトで TypeScript をサポートするため簡単に始めることができます。

$ mkdir deno-hello
$ cd deno-hello
$ touch index.ts

index.ts を以下のように編集します。

let greet = (name: string) => 'Hello ' + name;
console.log(greet('TypeScript'));

実行してみましょう。実行は deno run を使います。

$ deno run index.ts
Compile file:///Users/xxx/deno-hello/index.ts
Hello TypeScript


Http server

もう少しサンプルを見てみます。以下のファイルを作成します。

$ touch server.ts

server.ts を以下のように編集します。

import { serve } from "https://deno.land/std/http/server.ts";

const server = serve({ port: 8080 });
console.log("http://localhost:8080/");
for await (const req of server) {
  req.respond({ body: "<h1>Hello World</h1>\n" });
}

Deno では npm を使用せず、ES Module 形式のモジュールシステムを使用します。

import に URL を記載できるため、上記のように標準の http モジュールをインポートできます。

Deno の標準ライブラリは以下で照会できます。

https://deno.land/stddeno.land


実行は以下のように行います。

$ deno run --allow-net server.ts

f:id:Naotsugu:20200621185808p:plain

--allow-net を付けることでセキュリティルールを変更する必要があります。このオプションを付けなければ、デフォルトではネットワークを許可していないため実行できません。

その他、ファイルシステムの読み書きを許可する -allow-read--allow-write といったオプションがあります(--allow-all ですべてを許可することもできます)。


TypeScript Compiler Options

Deno の TypeScript コンパイラオプションはデフォルトで以下の定義になっています。

{
  "compilerOptions": {
    "allowJs": false,
    "allowUmdGlobalAccess": false,
    "allowUnreachableCode": false,
    "allowUnusedLabels": false,
    "alwaysStrict": true,
    "assumeChangesOnlyAffectDirectDependencies": false,
    "checkJs": false,
    "disableSizeLimit": false,
    "generateCpuProfile": "profile.cpuprofile",
    "jsx": "react",
    "jsxFactory": "React.createElement",
    "lib": [],
    "noFallthroughCasesInSwitch": false,
    "noImplicitAny": true,
    "noImplicitReturns": true,
    "noImplicitThis": true,
    "noImplicitUseStrict": false,
    "noStrictGenericChecks": false,
    "noUnusedLocals": false,
    "noUnusedParameters": false,
    "preserveConstEnums": false,
    "removeComments": false,
    "resolveJsonModule": true,
    "strict": true,
    "strictBindCallApply": true,
    "strictFunctionTypes": true,
    "strictNullChecks": true,
    "strictPropertyInitialization": true,
    "suppressExcessPropertyErrors": false,
    "suppressImplicitAnyIndexErrors": false,
    "useDefineForClassFields": false
  }
}

カスタムした tsconfig.json を適用するには -c オプションが利用できます。

deno run -c tsconfig.json xyz.ts



VSCode での利用時は以下を参照してください。

blog1.mammb.com

プログラミングTypeScript ―スケールするJavaScriptアプリケーション開発

プログラミングTypeScript ―スケールするJavaScriptアプリケーション開発

  • 作者:Boris Cherny
  • 発売日: 2020/03/16
  • メディア: 単行本(ソフトカバー)

Effective Typescript: 62 Specific Ways to Improve Your Typescript

Effective Typescript: 62 Specific Ways to Improve Your Typescript

  • 作者:Vanderkam, Dan
  • 発売日: 2019/11/05
  • メディア: ペーパーバック