メインコンテンツまでスキップ

Fiber を使ってみる

Fiber とは?

Ruby には、Fiber というコルーチン用のクラスがあります。

コルーチンとは、いったん処理を中断した後、続きから処理を再開することができる仕組みのことです。

言語によっては、async/await の非同期処理のことをコルーチンと呼ばれることがありますが、Ruby の Fiber は yield/resume で処理を中断/再開します。

Fiber を作成するには、Fiber.new を実行します。

Fiber.new を実行しただけでは、まだ処理は開始されません。 REPL を使って試してみましょう。

@fiber = Fiber.new do
Godot.emit_signal :fiber, 'started'
Fiber.yield
Godot.emit_signal :fiber, 'resumed'
end
Output
=> "#<Fiber:0x1ab31c76030 (created)>"

処理を開始するには、resume を実行します。

@fiber.resume
Output
[ fiber ] signal emitted: 'started'
=> <null>

Fiber.yield があれば、処理はそこで中断されます。再開するには再度 resume を実行します。

@fiber.resume
Output
[ fiber ] signal emitted: 'resumed'
=> true

Fiber.yield の引数と戻り値について

Fiber.yield の引数は、resume した際の戻り値になります。

@fiber = Fiber.new do
value = Fiber.yield 'started'
Godot.emit_signal :fiber, value
end
@fiber.resume
Output
=> "started"

resume に渡した引数は、Fiber.yield の戻り値になります。

@fiber.resume 'hello'
Output
[ fiber ] signal emitted: "hello"
=> true

コルーチンを使うことで、任意のタイミングで処理を中断/再開ができるので、例えば会話ダイアログが作成できます。

次の章では、Fiber を使って会話ダイアログを表示するサンプルを一緒に作ってみましょう。