34
38

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Denoで始めるモダンWeb開発入門

Posted at

はじめに

DenoはNode.jsの生みの親Ryan Dahl氏が「より安全でモダンなJavaScript/TypeScriptランタイム」を目指して開発した新世代のプラットフォームです。Deno 2.0以降はNode.js互換性も大きく向上し、TypeScriptの標準サポートや高いセキュリティ、シンプルなツールチェーンなど、現代的な開発体験を提供します。本記事では、Denoの基礎から実践的なWebアプリ開発、テスト、デプロイまで、14章にわたり丁寧に解説します。各章には実際に動作するコードも掲載しているので、ぜひコピペして体験してください。

第1章:Denoとは何か

Denoは、V8エンジンとRustで構築されたJavaScript/TypeScriptランタイムです。Node.jsの課題を解決するために設計され、デフォルトでセキュアな実行環境、TypeScriptのネイティブサポート、URLによるモジュール管理、組み込みのツールチェーン(フォーマッターやテストランナーなど)を備えています。npmやpackage.jsonに依存せず、モダンな開発者体験を重視しています。

第2章:Denoのインストール

Denoのインストールは非常に簡単です。OSごとに以下のコマンドを実行してください。

# macOS/Linux
curl -fsSL https://deno.land/install.sh | sh

# Windows (PowerShell)
irm https://deno.land/install.ps1 | iex

# Homebrew
brew install deno

インストール後、deno --versionでバージョン情報が表示されれば準備完了です。

第3章:プロジェクトの初期化と設定

Denoプロジェクトはdeno.jsonファイルで設定を管理します。プロジェクトディレクトリを作成し、初期化コマンドを実行しましょう。

mkdir my-deno-app
cd my-deno-app
deno init

生成されたdeno.jsonにはタスクやインポートマップなどを設定できます。

第4章:最初のDenoスクリプト

DenoはTypeScriptをそのまま実行できます。まずは「Hello, Deno!」を出力するスクリプトを作成しましょう。

// hello.ts
console.log("Hello, Deno!");

実行は以下のコマンドです。

deno run hello.ts

第5章:HTTPサーバーを作ってみよう

Denoの標準モジュールで簡単にWebサーバーを立てられます。最もシンプルなサーバー例です。

// server.ts
function handler(_req: Request): Response {
  return new Response("Hello, World!");
}

Deno.serve(handler);

以下で起動します。

deno run --allow-net server.ts

第6章:ルーティング処理の追加

複数のパスに応じてレスポンスを切り替えるルーティング例です。

// router.ts
function handler(req: Request): Response {
  const url = new URL(req.url);
  if (url.pathname === "/") {
    return new Response("トップページです");
  } else if (url.pathname === "/about") {
    return new Response("Denoについてのページ");
  }
  return new Response("Not Found", { status: 404 });
}

Deno.serve(handler);

第7章:非同期処理とAPIサーバー

Denoはasync/awaitを標準サポート。JSON APIサーバーの例です。

// api.ts
async function handler(_req: Request): Promise {
  const data = { message: "Deno APIからこんにちは" };
  return new Response(JSON.stringify(data), {
    headers: { "Content-Type": "application/json" },
  });
}

Deno.serve(handler);

第8章:ファイル操作とパーミッション

Denoはファイルアクセスに明示的な許可が必要です。ファイルの読み書き例です。

// file.ts
await Deno.writeTextFile("sample.txt", "Denoでファイル書き込み");
const text = await Deno.readTextFile("sample.txt");
console.log(text);

実行時に--allow-read --allow-writeフラグが必要です。

deno run --allow-read --allow-write file.ts

第9章:外部モジュールの利用

DenoはURLで外部モジュールを直接インポートします。例として日付操作ライブラリを使います。

// date.ts
import { format } from "https://deno.land/std@0.224.0/datetime/mod.ts";

const now = new Date();
console.log(format(now, "yyyy-MM-dd HH:mm:ss"));

第10章:テストの書き方

Denoはテストランナーを内蔵しています。テストファイル例です。

// sum.ts
export function sum(a: number, b: number): number {
  return a + b;
}

// sum_test.ts
import { sum } from "./sum.ts";
import { assertEquals } from "jsr:@std/assert";

Deno.test("sum関数のテスト", () => {
  assertEquals(sum(1, 2), 3);
});

テスト実行は

deno test

第11章:フォーマッターとリンター

Denoはコード整形・静的解析ツールも標準搭載です。

# コード整形
deno fmt

# 静的解析
deno lint

プロジェクト全体に適用できます。

第12章:環境変数とパーミッション管理

Denoで環境変数を扱うにはパーミッションが必要です。

// env.ts
const value = Deno.env.get("MY_ENV") ?? "未設定";
console.log(`MY_ENV: ${value}`);

実行時に--allow-envフラグを付けます。

MY_ENV=hello deno run --allow-env env.ts

第13章:FreshによるモダンWebアプリ開発

Deno公式のWebフレームワーク「Fresh」を使うと、Next.jsのようなファイルベースルーティングやSSRが簡単にできます。

deno run -A -r https://fresh.deno.dev my-fresh-app
cd my-fresh-app
deno task start

routes/index.tsxを編集してページをカスタマイズできます。

第14章:Deno Deployによるデプロイ

Deno Deployを使えば、作成したアプリをグローバルに公開できます。

  1. Deno Deployにアクセスし、アカウント作成。
  2. 新しいプロジェクトを作成し、GitHubリポジトリと連携。
  3. mainエントリポイントを指定し、デプロイ。

FreshやDenoサーバーアプリはそのままデプロイできます。

まとめ

Denoはシンプルかつ強力なモダンJavaScript/TypeScriptランタイムです。セキュリティ、開発体験、パフォーマンス、デプロイのしやすさなど、現代的な要件を満たす設計がなされています。本記事のサンプルを参考に、ぜひDenoの世界を体験し、次世代のWeb開発を始めてみてください。

34
38
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
38

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?