Denoを使えばTypeScriptを簡単に実行することができます。 Denoでは、以下のようなTypeScriptスクリプトを直接実行できます。
例: 「Ethereum鍵ペアを生成するTypeScriptスクリプト」
#!/usr/bin/env deno run -A
// @deno-types="npm:@types/ethers"
import { ethers } from "https://esm.sh/ethers@6.11.1";
const wallet = ethers.Wallet.createRandom();
console.log("====== Ethereum Key Information ======");
console.log(`Private Key: ${wallet.privateKey}`);
console.log(`Account Address: ${wallet.address}`);
console.log("====================================");
実行
$ chmod +x gen-private-key.ts
$ ./gen-private-key.ts
====== Ethereum Key Information ======
Private Key: 0xf7f7dd810681fdc68a8ec217481310d91326a7d91a6809b1072ba01942a2611d
Account Address: 0x53c46e7c16AcF57Ef0C849A3aa53F565Efae3C81
====================================
とても楽です
Denoとは?
Deno は、Node.jsの作者Ryan Dahl氏が開発した新しいランタイムです。TypeScriptをそのまま実行でき、シングルバイナリで動作し、セキュリティもデフォルトで強化されています。
- TypeScript/JavaScriptをそのまま実行
- シングルバイナリでインストールが簡単
- 権限管理がデフォルトで有効(安全)
- npmパッケージやURLから直接import可能
インストール方法
公式サイトのInstallページ を参考に、以下のコマンドでインストールできます。
macOS/Linux (Homebrew)
brew install deno
Windows (PowerShell)
irm https://deno.land/install.ps1 | iex
Node.jsでTypeScriptを実行する具体的な手順例
たとえば、先ほどの「Ethereum鍵ペアを生成するTypeScriptスクリプト」をNode.jsで実行する場合、以下のような手順が必要です。
- Node.js本体のインストール
- プロジェクトディレクトリの作成と初期化
mkdir sample-ts && cd sample-ts
npm init -y
- TypeScriptとts-node、型定義のインストール
npm install typescript ts-node @types/node ethers
- tsconfig.jsonの作成(最低限の設定)
npx tsc --init
- TypeScriptファイルの作成(例: generate-wallet.ts)
import { ethers } from "ethers";
const wallet = ethers.Wallet.createRandom();
console.log("====== Ethereum Key Information ======");
console.log(`Private Key: ${wallet.privateKey}`);
console.log(`Account Address: ${wallet.address}`);
console.log("====================================");
- スクリプトの実行
npx ts-node generate-wallet.ts
以上のように、たった1ファイルのTypeScriptを動かすだけでも、複数のnpmパッケージのインストールや設定ファイルの作成が必要です。 Denoなら「インストールして即実行」ですが、Node.jsではセットアップの手間が大きく異なります。
CDNからのモジュールインポート
Denoの大きな特徴の一つは、URLから直接モジュールをインポートできることです。サンプルコードでは以下のようにインポートしています:
import { ethers } from "https://esm.sh/ethers@6.11.1";
CDNインポートのメリット
package.json
やnode_modules
が不要- バージョンをURLに直接指定できる
- 依存関係を明示的に表現できる
- キャッシュされるため2回目以降は高速
主なCDNサービス
- esm.sh - npmパッケージをESMに変換して提供
- deno.land/x - Deno用モジュールのレジストリ
- skypack.dev - npmパッケージをESM形式で提供
- jspm.io - npmパッケージをESMに変換
型定義の利用
CDNインポートでも型定義を使用できます:
// @deno-types="npm:@types/ethers"
import { ethers } from "https://esm.sh/ethers@6.11.1";
// @deno-types
コメントを使用することで、npmから型定義をダウンロードし、エディタの自動補完やコンパイル時の型チェックが機能します。
Denoの権限モデル: -A
オプションの意味
サンプルコードの冒頭のシェバン(shebang)で使ってるDenoの起動オプションについて説明します。
#!/usr/bin/env deno run -A
この部分です。
Denoでは、セキュリティを重視するため「権限モデル」を採用しています。 -A
(または --allow-all
)オプションは、すべての権限をスクリプトに付与するフラグです。
主な権限フラグ
--allow-net=<domains>
- 特定ドメインへのネットワークアクセスを許可(例:--allow-net=api.example.com
)--allow-read=<paths>
- 特定パスからのファイル読み取りを許可(例:--allow-read=./data
)--allow-write=<paths>
- 特定パスへのファイル書き込みを許可(例:--allow-write=./output
)--allow-env
- 環境変数へのアクセスを許可--allow-run
- 外部プログラムの実行を許可-A
または--allow-all
- すべての権限を許可(開発時のみ推奨)
権限の組み合わせ例
# APIとファイル読み取りのみ許可
deno run --allow-net=api.example.com --allow-read=./config.json script.ts
-A
は --allow-all
の略で、ネットワークやファイルアクセスなど、すべての権限をスクリプトに与えます。
Denoはデフォルトで非常にセキュアですが、外部APIやファイル操作が必要な場合は明示的に権限を付与する必要があります。
--allow-net
ネットワークアクセス許可--allow-read
ファイル読み取り許可--allow-write
ファイル書き込み許可-A
すべて許可(開発時や信頼できるスクリプトのみ推奨)