モジュールシステムと権限
DenoのURLベースのモジュールシステムと、安全な実行を実現する細かな権限モデルを理解します。
「モジュールシステムと権限」はCoddyKit上の無料Edge Computing with Cloudflare Workers & Denoレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはEdge Computing with Cloudflare Workers & Deno学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Edge Computing with Cloudflare Workers & Denoコースには全4レッスンが含まれています。
このレッスンの一部はまだ翻訳されておらず、英語で表示されています。
Deno Modules: Building Blocks
In Deno, applications are built using modules. Think of modules as individual files that contain related code, like functions, classes, or variables.
They help keep your code organized and reusable, preventing your project from becoming one giant, hard-to-manage file.
URLs as Module Paths
Unlike Node.js, Deno doesn't use a node_modules folder. Instead, Deno imports modules directly using URLs or file paths.
- Local Files: Use relative or absolute paths (e.g.,
./my_module.ts). - Remote Files: Use full URLs (e.g.,
https://deno.land/std/fs/mod.ts).
This simple approach makes dependency management very straightforward!
Importing Your Own Code
Let's create two files: utils.ts with a simple function, and main.ts to import and use it. This is how you share logic within your own project.
utils.ts:
export function greet(name: string): string {
return `Hello, ${name}!`;
}Running Local Module Example
Now, let's import and use our greet function in main.ts. Notice the relative path ./utils.ts.
Try running this example:
// main.ts
import { greet } from "./utils.ts";
console.log(greet("CoddyKit"));Fetching Modules from the Web
Deno can directly import modules from web URLs. This is powerful, but also requires trust in the source. Deno caches these modules after the first download.
Here's how to import a utility from Deno's standard library:
// main.ts
import { join } from "https://deno.land/std/path/mod.ts";
const path = join("/users", "coddy", "documents");
console.log(`Joined path: ${path}`);Deno Caches Remote Modules
When you first run a Deno script that imports remote modules, Deno downloads and caches them locally. This makes subsequent runs much faster.
- Cached modules are stored in a global directory.
- You can manually clear the cache with
deno cache --reloadordeno cache --reset. - Deno verifies module integrity using checksums.
Secure by Default: Permissions
Deno is designed to be secure. By default, a Deno program has no access to your file system, network, or environment variables.
You must explicitly grant these permissions using command-line flags when running your script. This prevents malicious code from doing harm without your knowledge.
Reading Files Securely
To allow your Deno program to read files, you need the --allow-read permission. You can specify specific paths or allow access to everything with . (current directory) or by omitting a path.
data.txt:
Hello Deno permissions!`--allow-read` in Action
Let's try to read data.txt. Without permission, it will fail. With --allow-read, it works! (e.g., deno run --allow-read main.ts)
Try running this example:
// main.ts
const filePath = "./data.txt";
try {
const content = await Deno.readTextFile(filePath);
console.log("File content:", content);
} catch (error) {
console.error("Error reading file:", error.message);
}Making Network Requests
To allow your Deno program to make network requests (like fetching data from an API), you need the --allow-net permission.
You can specify specific hosts (e.g., --allow-net=api.example.com) or allow all network access. (e.g., deno run --allow-net main.ts)
// main.ts
try {
const response = await fetch("https://deno.land/std/README.md");
if (response.ok) {
const text = await response.text();
console.log("Fetched content (first 50 chars):");
console.log(text.substring(0, 50));
} else {
console.error("Failed to fetch:", response.statusText);
}
} catch (error) {
console.error("Network error:", error.message);
}Permission Challenge!
Which of the following Deno commands would allow a script named app.ts to both read files from the current directory AND make network requests to any domain?
Recap: Modules & Permissions
Great job! You've learned about Deno's modern module system, which uses URLs for both local and remote imports, simplifying dependency management.
You also explored Deno's robust permission model, understanding how to grant specific access (like --allow-read and --allow-net) to your scripts for secure execution. This "secure by default" approach is a core Deno feature!
よくある質問
「モジュールシステムと権限」レッスンは無料ですか?
はい。「モジュールシステムと権限」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Edge Computing with Cloudflare Workers & Denoコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Edge Computing with Cloudflare Workers & Denoコースには全4レッスンが含まれています。
「モジュールシステムと権限」で何を学びますか?
DenoのURLベースのモジュールシステムと、安全な実行を実現する細かな権限モデルを理解します。 ブラウザで直接実行するハンズオンコードでEdge Computing with Cloudflare Workers & Denoを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Edge Computing with Cloudflare Workers & Denoを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのEdge Computing with Cloudflare Workers & Denoは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「モジュールシステムと権限」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このEdge Computing with Cloudflare Workers & Denoレッスンでコードを書いて実行できますか?
はい。すべてのEdge Computing with Cloudflare Workers & Denoレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Denoランタイムの基本
- モジュールシステムと権限
- ローカルDenoアプリの開発
- Denoアプリケーションのテスト