Gitrend
🚀

Goで書く!無限の堅牢ワークフロー!🚀

Go 2026/2/8
Summary
皆さん、複雑な分散システムでワークフロー管理に頭を抱えてませんか?僕もでした!でもね、Temporalio/Temporalがあれば、もうそんな悩みは過去のものになっちゃうんです!これ、マジでゲームチェンジャーですよ!

概要:なにこれ凄い?

うおおお!皆さん、聞いてくださいよ!僕、普段からマイクロサービスとか分散システムを触る機会が多いんですけど、複雑なビジネスロジックって、途中でプロセス落ちたり、ネットワークエラーになったりすると、もう本当に地獄じゃないですか?どこから再開すればいいのか、状態はどうなってるのか…考えるだけで胃がキリキリするんですよ。でもね、このTemporal、そんな悩みを根本から解決してくれるんです!最初に見た時、『え、これ魔法?』って本気で思いましたもん!だって、ワークフローを普通のコードで書いてるのに、プロセスが落ちても、サーバーが再起動しても、何事もなかったかのように続きから実行してくれるんですよ!これって、もはや夢ですよね?Goで書かれたこのCore Serviceが、その驚異的な堅牢性を支えてるんだって思うと、ゾクゾクしちゃいます!

ここが推し!

サクッと試そう(使用例)

package main

import (
	"context"
	"fmt"
	"log"
	"time"

	"go.temporal.io/sdk/client"
	"go.temporal.io/sdk/worker"
	"go.temporal.io/sdk/workflow"
)

// Activity
func GreetActivity(ctx context.Context, name string) (string, error) {
	log.Printf("Activity: Greeting %s\n", name)
	time.Sleep(time.Second * 2) // Simulate some work
	return fmt.Sprintf("Hello, %s!", name), nil
}

// Workflow
func MyWorkflow(ctx workflow.Context, name string) (string, error) {
	ao := workflow.ActivityOptions{
		StartToCloseTimeout: time.Second * 5,
	}
	ctx = workflow.WithActivityOptions(ctx, ao)

	var result string
	err := workflow.ExecuteActivity(ctx, GreetActivity, name).Get(ctx, &result)
	if err != nil {
		return "", err
	}
	return result, nil
}

func main() {
	// Local Temporal server (temporalite)が必要!
	// まずは `go install go.temporal.io/temporalite@latest` でインストールして
	// `temporalite start --ephemeral` で起動してみてね!

	c, err := client.Dial(client.Options{})
	if err != nil {
		log.Fatalln("Unable to create client", err)
	}
	defer c.Close()

	w := worker.New(c, "my-task-queue", worker.Options{})
	w.RegisterWorkflow(MyWorkflow)
	w.RegisterActivity(GreetActivity)

	go func() {
		err = w.Run(worker.InterruptCh())
		if err != nil {
			log.Fatalln("Unable to start worker", err)
		}
	}()

	// Start a workflow
	options := client.StartWorkflowOptions{
		ID:        "greet-workflow-id",
		TaskQueue: "my-task-queue",
	}
	we, err := c.ExecuteWorkflow(context.Background(), options, MyWorkflow, "Akira")
	if err != nil {
		log.Fatalln("Unable to execute workflow", err)
	}
	log.Printf("Started workflow: %s %s\n", we.GetID(), we.GetRunID())

	// Get workflow result
	var result string
	err = we.Get(context.Background(), &result)
	if err != nil {
		log.Fatalln("Unable to get workflow result", err)
	}
	log.Println("Workflow result:", result)

	log.Println("Worker is running. Press Ctrl+C to stop.")
	select {} // Keep main goroutine alive
}

ぶっちゃけ誰向け?

まとめ

どうでしたか皆さん?Temporalio/Temporalの魅力、ちょっとは伝わりましたかね?正直、導入にはTemporal Serverのセットアップが必要だったりして、少しだけ学習コストはあるかもしれません。でもね、それを乗り越えた先に待っているのは、圧倒的に堅牢で、圧倒的に開発しやすい分散システムの世界ですよ!これからの僕らの開発が、もっともっと楽しく、そして生産的になること間違いなし!ぜひ一度、触ってみてほしいなぁ!未来のシステム開発は、もうTemporal抜きには語れない!って、僕、本気で思ってますからね!