0Pricing
TypeScript Academy · レッスン

Effect型

Effect を理解します。

「Effect型」はCoddyKit上の無料TypeScript Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTypeScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 TypeScript Academyコースには全4レッスンが含まれています。

Effect 型

中心となる型は Effect<Success, Error, Requirements> です。この 3 つの型パラメーターによって、計算が実行できることのすべて、つまり生成する値、失敗の仕方、必要なものが表されます。

import { Effect } from "effect";
// Effect<A, E, R>
//   A = success value type
//   E = error type
//   R = required services (dependencies)

成功チャネル(A)

最初のパラメーターは、成功時に生成される値です。Effect.succeed は、エラーも必要な依存関係もなく、常に値を生成するエフェクトを作成します。

import { Effect } from "effect";

const ok = Effect.succeed(42);
// Effect<number, never, never>

エラーチャネル(E)

2 番目のパラメーターは、型付けされたエラーです。never は、エフェクトが失敗しないことを意味します。実際のエラー型がある場合、呼び出し側はそのエラーを考慮する必要があります。

import { Effect } from "effect";

class NotFound { readonly _tag = "NotFound"; }
const failing = Effect.fail(new NotFound());
// Effect<never, NotFound, never>

要求チャネル(R)

3 番目のパラメーターには、エフェクトが依存するサービスが列挙されます。never は自己完結していることを意味します。それ以外の場合、サービスが提供されるまで実行できません。

// Conceptually:
// Effect<User, NotFound, Database>
// produces a User, may fail with NotFound, needs a Database

シグネチャを読む

エフェクト型は、文のように読めます。「R が与えられると、A を生成するか、E で失敗する」という意味です。この 1 つの型で、Promise と暗黙の throw と隠れたグローバルを置き換えられます。

恒等元としての never

never は、E チャネルと R チャネルにおける中立値です。つまり、起こりうるエラーがなく、必要な依存関係もありません。合成を進めると、エラー型と要求型は共用体として蓄積されます。

値からエフェクトを作成する

一般的なコンストラクターには、succeed(純粋な値)、fail(型付けされたエラー)、sync(同期的な副作用をラップする)が​​あります。

import { Effect } from "effect";

const now = Effect.sync(() => Date.now());
// Effect<number, never, never>

非同期処理をラップする

Effect.promise と Effect.tryPromise は Promise をエフェクトに昇格させます。tryPromise を使うと、拒否を E チャネル内の型付けされたエラーに変換できます。

import { Effect } from "effect";

const fetchUser = Effect.tryPromise({
  try: () => fetch("/user").then((r) => r.json()),
  catch: (e) => new Error("fetch failed: " + String(e)),
});
// Effect<any, Error, never>

チャネルの型エイリアス

サービスに対して、Effect では完全な名前として Effect.Effect<A, E, R> が提供されています。チャネルは独立しているため、依存関係なしでエラーを持つことも、エラーなしで依存関係を持つこともできます。

3 つのチャネルがある理由

3 つのチャネルによって、コードを理解しにくくする 3 つの要素、つまり結果、失敗の種類、実行コンテキストを表せます。この 3 つすべてを 1 つの型で明示することが、Effect の安全性を保証します。

重要な理由

Effect<A, E, R> を理解することは、他のすべてを理解する鍵です。合成によってこれらのチャネルが結合され、エラー処理によって E が絞り込まれ、依存関係の提供によって R が解消されます。型を読めば、計算が何をするのかを正確に把握できます。

理解度チェック

Effect 型について理解できているか確認してください。

まとめ

Effect<A, E, R> は、成功時の値、型付けされたエラー、必要な依存関係を 1 つの型で表します。never は E と R の中立値です。succeed、fail、sync、tryPromise などのコンストラクターで、適切なチャネルを持つエフェクトを作成できます。

よくある質問

「Effect型」レッスンは無料ですか?

はい。「Effect型」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、TypeScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 TypeScript Academyコースには全4レッスンが含まれています。

「Effect型」で何を学びますか?

Effect を理解します。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

TypeScript Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのTypeScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「Effect型」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このTypeScript Academyレッスンでコードを書いて実行できますか?

はい。すべてのTypeScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. エフェクトシステムが重要な理由
  2. Effect型
  3. エフェクトの合成
  4. エラーチャネルと依存関係
← TypeScript Academyに戻る