動的ヘッドは、以下の機能を持つキャラクターの頭部です:
- デフォルトのカスタム表情を設定する。
- 表情に合わせて変形する眉毛やまつげなどの顔のアクセサリーを装備する。
- 顔と体のアニメーションを組み合わせたエモートをトリガーする。
既存のモデルを作成または変更して、BlenderやMayaなどのサードパーティのモデリングソフトウェアで動的ヘッドにすることができます。動的ヘッドを作成する際、キャラクターのボディモデルは以下の要件を満たす必要があります:
- キャラクターボディはRobloxのモデリング要件に従い、目、口、歯などの適切な頭部ジオメトリを含む必要があります。
- キャラクターボディの頭部には、顔の表情を作成するために頂点の変形を駆動するリグまたは内部関節構造が含まれている必要があります。
- キャラクターボディは、顔のポーズがアニメーションタイムラインに保存され、ヘッドメッシュにマッピングされている必要があります。典型的な動的ヘッドには、さまざまな表情を可能にする50の標準ベースポーズが含まれています。
これらの要件を満たすために、このチュートリアルでは、顔の関節を追加し、顔の表情にポーズを付け、BlenderのCubieリファレンスキャラクターに5つの基本的なFACSポーズをマッピングするプロセス、およびモデルをStudioにインポートするためのエクスポート方法を説明します。
リファレンスファイル
以下の動的ヘッドリファレンスファイルには、このチュートリアル全体のチェックポイントリファレンスが含まれています:
| リファレンスファイル | 説明 |
|---|---|
| Cubie-Model-Only.blend | 顔データなしの標準R15リグを含むCubieキャラクターモデルを含むBlenderプロジェクトファイル。 |
| Cubie-Eye-Bones-Skinned.blend | ポージングやマッピングデータなしのスキンされた目の関節を持つCubieキャラクターモデルの例を含むBlenderプロジェクトファイル。 |
| Cubie-Eye-Poses-Mapped.blend | 5つの例のポーズが保存され、マッピングされたCubieキャラクターモデルを含むBlenderプロジェクトファイル。 |
| Cubie-Complete.fbx | 完全にリグされた顔と50以上のポーズが保存され、マッピングされたCubieキャラクターモデル。このファイルをStudioにインポートするか、お好みの3Dモデリングソフトウェアで開くことができます。 |
| Cubie-Texture_ALB.png | Cubieテクスチャ画像ファイル。CubieモデルをStudioにインポートした後、このファイルをヘッドパーツのTextureIDとして追加できます。 |
| Cubie-Complete.ma | 追加のリファレンスとして提供されるCubie Mayaプロジェクト。 |
モデリング要件
明確な顔の特徴を持つ頭部を含む多くのキャラクターボディモデルは、動的ヘッドとして互換性を持たせるために、わずかなモデリング調整が必要です。アバターキャラクターをモデリングする際は、各ヘッドメッシュがStudioインポートのためのアバターキャラクターボディ仕様を満たしていることを確認し、以下の要件を満たす必要があります:
- 顔のパーツ - 目、上の歯、下の歯、舌などの明確な顔の特徴を含めることを確認してください。
- 唇の頂点 - キャラクターが口を使う場合、唇の頂点を分けて口が開くようにします。
- 内部コンポーネント - キャラクターに舌や歯などの内部口部コンポーネントがある場合、これらの特徴を含む口袋をヘッドメッシュ内にモデリングします。キャラクターが眼窩を使用する場合、同様の眼袋をモデリングしてこれらの特徴を含めます。
- 余分なデータなし - Head_Geoのすべての子供の顔のパーツが履歴や凍結された変換を含まないことを確認してください。
- 外部ケージ - 顔のアクセサリーやレイヤーアクセサリーをサポートするために、キャラクターモデルに外部ケージがあることを確認してください。詳細については、キャラクターボディ仕様 - 内部および外部ケージを参照してください。
これらのモデリング要件を満たすリグ付きのCubieキャラクターを使用して、残りのヘッド作成プロセスを進めることができます。このバージョンには顔のリギングやポーズデータは含まれていないため、このチュートリアルの出発点として使用できます。
ヘッドのリグとスキン
リギングは、メッシュを内部リグに接続して、メッシュの表面が関節の回転や移動に合わせて回転および移動できるようにするプロセスであり、スキニングは、メッシュ表面のどの部分が特定の関節と共に移動および回転するかを割り当てるプロセスです。動的ヘッドには、顔の表情を作成するために、ヘッドメッシュの表面が関節と共に動くようにするために、両方のプロセスが必要です。
以下の指示は、Cubieの目とまぶたのリギングとスキニングに焦点を当てていますが、キャラクターの口、頬、顎など、関節が必要な他の顔の特徴にもこれらの技術を適用できます。関節を追加し、スキニングデータを適用した後、ポージングプロセスをより効率的にするためのコントロールを作成できます。
関節を追加
頭部の各ポーズ可能な顔の特徴には通常、少なくとも1つの関節が必要ですが、目や口などの複雑な特徴には、特定のポーズを可能にするために複数の関節が必要な場合があります。Studioは動的ヘッドに特定の関節階層を要求しませんが、顔のリグが正しく機能するためには、RootFaceJoint関節と顔のジオメトリの曲げや変形を駆動する追加の顔の関節を含む必要があります。
キャラクターに必要な特定のヘッド関節は、キャラクターの意図するポーズによって異なります。以下の例では、各目に1つの関節を追加し、まぶたに4つの関節を追加して、まばたき、ウインク、視線の方向を可能にするプロセスをカバーしています。顔のリグを作成する際は、可能な限り50未満の顔の関節を使用し、関節を関連する顔の特徴に特化して整理してください。一般的に、高い数の頂点や関節はゲームのパフォーマンスに影響を与える可能性があります。
RootFaceJoint
RootFaceJointは、R15リギングアーマチュアの頭部関節の下に親子関係を持つ関節です。このルート関節は、他のすべての顔の関節の親である必要があります。Blenderでは、押し出しを使用して頭部関節から子関節を迅速に追加し、Head_Geoメッシュ内のプロパティとして関節名をマッピングできます。
RootFaceJointオブジェクトは、リファレンステンプレートや例では一般的にDynamicHeadと名付けられていますが、カスタムプロパティでルート関節をマッピングする限り、任意の名前を使用できます。これにより、Studioはその関節を正しく見つけ、インポート時にFaceControlsインスタンス内のすべての子関節を隠すことができます。
RootFaceJointオブジェクトを追加するには:
Blenderでリグ付きCubieキャラクタープロジェクトを開きます。

任意の関節をクリックしてアーマチュアを選択し、編集モードに切り替えます。
アウトライナーでHead関節をクリックします。
ビューポートでEを押し、マウスを上にドラッグしてHead関節から追加の子関節を押し出します。
アウトライナーに戻り、この関節の名前をDynamicHeadに変更します。この関節は後でマッピングセクションで名前で参照します。
目
各目にはそれぞれ1つの関節が必要ですが、後で両方の目を同時に制御できるコントローラー関節を作成することもできます。関節を対称に配置するために、ビューポートの右上でX軸対称を有効にすることができます。これにより、同じ名前を持つ対称の接尾辞を持つ関節がX軸に沿って移動します。
キャラクターの目に関節を追加するには:
編集モードのまま、ビューポートの上部バーで追加 > 単一のボーンをクリックします。これを2回行います。
1つの関節の名前をLeftEyeに変更し、もう1つの関節の名前をRightEyeに変更します。
関節を調整して、前を向き、水平で、キャラクターの目の虹彩の周りに配置します:
- ビューポートの右上隅でX軸対称を有効にします。
- 移動ツールを使用して、左または右の関節をモデルの目の中心に配置します。
- アイテムパネルを展開し、関節を選択した状態で:
- Head Yの位置をTail Yの位置にコピーします。
- Tail Zを0.2センチメートルに設定して、Tail Z座標をHead Z座標から0.2センチメートルオフセットします。
新しい関節をRootFaceJointに親子関係を持たせます。
- Shiftを押しながらLeftEyeとRightEyeの両方の関節をクリックします。
- Shiftを押し続けながら、DynamicHead関節をクリックします。
- ビューポートで右クリックし、コンテキストメニューから親子関係 > 作成 > オフセットありを選択します。
まぶた
関節を追加する際、既存の顔の関節を選択して複製することで、RootFaceJoint関節の下に親子関係を持つ関節を迅速に作成できます。これにより、RootFaceJoint関節の下に親子関係を持つ関節が自動的に作成されます。
キャラクターのまぶたに関節を追加するには:
編集モードのまま、Shiftを押しながらLeftEyeとRightEyeの両方の関節をクリックします。
Shift + Dを押しながら、同じ位置に関節を複製します。これを4回行い、合計8つの新しい関節を作成します。
X軸対称が有効な状態で、各関節を目の角に配置します。
アウトライナーで、以下の名前を使用して特定の位置を反映するようにすべての関節の名前を変更します:
- LeftUpperOuterEyelid
- RightUpperOuterEyelid
- LeftLowerOuterEyelid
- RightLowerOuterEyelid
- LeftUpperInnerEyelid
- RightUpperInnerEyelid
- LeftLowerInnerEyelid
- RightLowerInnerEyelid

関節にスキンを適用
キャラクターリグにスキニングデータを適用するには、いくつかの方法があります。以下の例では、Blenderのウェイトペイントモードを使用して、単一の関節が制御できる頂点をペイントします。スキニングは通常、複雑なキャラクターにとって時間のかかるステップであり、スキニングと顔のポージングの背景が推奨されます。
複雑なモデルに対して詳細または共有の影響を適用する場合、関節間の影響の競合を防ぐために自動正規化を有効にすることをお勧めします。
目
例のプロジェクトでは、両方の目が目のジオメトリ内の瞳孔に完全な影響を必要とします。目のデザインによっては、リアルな目のポーズを作成するために影響を調整する必要があるかもしれません。
目の関節に影響を追加するには:
X軸対称を無効にして、LeftEye関節のみを影響を与えます。
オブジェクトモードに切り替え、任意の関節をクリックしてアーマチュアを選択し、Shiftを押しながらHead_Geoメッシュをクリックします。
ウェイトペイントモードに切り替え、ビューポートの右上隅でワイヤーフレームモードを有効にして、頂点をよりよく視覚化します。
Shift + Ctrlを押しながらLeftEye関節をクリックして選択します。現在選択されている関節の名前がビューポートの左上に表示されます。
目の内の頂点に影響をペイントします。この例では、瞳孔が赤く、選択した関節によって完全に影響を受けていることを確認します。
オブジェクトモードに切り替え、メッシュをよりよく視覚化するためにビューポートシェーディングを有効にし、任意の関節をクリックしてアーマチュアを選択します。
ポーズモードに切り替え、目の関節の影響をテストするために関節を掴んで移動します。メッシュが適切に追従します。
RightEye関節についても同様の手順を繰り返します。
まぶた
まぶたの関節には、それぞれ独自の影響が必要です。例のポーズでは上まぶたのみを操作しますが、下まぶたの角を制御できることは、LeftCheekRaiserやRightCheekRaiserなどの他のポーズにとって重要です。
まぶたの関節に影響を追加するには:
オブジェクトモードに切り替え、任意の関節をクリックしてアーマチュアを選択し、Shiftを押しながらHead_Geoメッシュをクリックします。
ウェイトペイントモードに切り替え、ビューポートの右上隅でワイヤーフレームモードを有効にして、頂点をよりよく視覚化します。
Shift + Ctrlを押しながらLeftUpperOuterEyelid関節をクリックして選択します。
必要に応じて、関節に最も近い頂点に影響をペイントします。
各まぶたの関節についてこのプロセスを繰り返します。
オブジェクトモードに切り替え、メッシュをよりよく視覚化するためにビューポートシェーディングを有効にし、任意の関節をクリックしてアーマチュアを選択します。
ポーズモードに切り替え、目の関節の影響をテストするために関節を掴んで移動します。メッシュが適切に追従します。
コントロールを作成
ヘッドを作成するには、複数のポーズを連続して保存する必要があるため、必須ではありませんが、コントロールを作成することで関節を迅速かつ効果的にポーズ付けできます。外部コントローラー関節を追加して内部の関節に影響を与えることで、関節にアクセスしやすく、ポーズを付けたり、ニュートラルな変換にリセットしたりすることが容易になります。
コントロールを作成する方法は多岐にわたります。以下の例では、ボーン制約とリファレンスBlenderプロジェクトに含まれる単純な幾何学的形状を使用して、キャラクターの顔の関節用のアクセスしやすいコントローラー関節を迅速に設定します。リギングと制約に関する詳細については、Blenderのキャラクタリギングおよびオブジェクト制約に関するドキュメントを参照してください。
顔の関節コントロールを作成するには:
オブジェクトモードに切り替え、アーマチュアを選択します。
Shift + Dを押してアーマチュアを複製し、複製をControllerに名前変更します。
編集モードに切り替え、すべての非顔関節を選択し、ビューポートで右クリックしてコンテキストメニューから選択したボーンを削除を選択します。
関節の名前を**_Con**という接尾辞を含むように一括変更して、コントローラー関節であることを示します:
- アウトライナーでShiftを押しながらすべてのコントローラー関節をクリックします。
- 編集 > 一括変更に移動します。一括変更ダイアログが表示されます。
- ダイアログで:
- 選択したボタンをクリックします。
- ドロップダウンメニューをボーンに設定します。
- タイプを名前を設定に設定します。
- メソッドを接尾辞に設定します。
- 名前を**_Con**に設定します。
- OKボタンをクリックします。
コントローラーが必要な各顔の関節にボーン制約を設定します。
- オブジェクトモードに切り替え、元のアーマチュアを選択します。
- ポーズモードに切り替え、LeftEye関節をクリックし、プロパティエディタのボーン制約タブに移動します。
- ボーン制約ドロップダウンメニューをクリックし、位置をコピーと回転をコピーを追加し、各制約で:
- ターゲットをControllerに設定します。
- ボーンをLeftEye_Conに設定します。
- 回転をコピー制約で:
- 軸でX、Y、Zを無効にします。
- 反転軸でX、Y、Zを有効にします。
- ミックスを**オフセット(レガシー)**に設定します。
- コントローラーが必要な各顔の関節について、この制約プロセスを繰り返します。
- オプションより簡単にコントロール関節にアクセスできるようにカスタムボーン形状を作成します。
- オブジェクトモードに切り替え、Controllerアーマチュアオブジェクトを選択します。
- ポーズモードに切り替え、LeftEye_Conを選択します。
- プロパティエディタのボーンプロパティタブ > ビューポート表示 > カスタム形状に移動し、カスタムオブジェクトをWDG_Eye.001に設定します。リファレンスプロジェクトでは、形状オブジェクトは顔の関節と似た名前を共有しています。
- X回転を**-90**に設定し、必要に応じて追加のスケーリングを行います。
- このプロセスをすべてのコントローラー関節について繰り返します。この時点で元の顔の関節を隠すことができます。
- オプションコントローラー関節に色のテーマを適用して、顔の関節をより視覚化しやすくします。
ポーズモードのまま、アウトライナーに移動し、LeftEye_Conを選択します。
プロパティエディタのボーンプロパティタブ > ビューポート表示 > ボーンカラーに移動し、テーマカラーセットを選択します。
各コントローラー関節についてこのプロセスを繰り返し、以下のように同じ色を使用します:
- LeftEyeとRightEye用の1つ。
- LeftUpperOuterEyelidとLeftLowerOuterEyelid用の1つ。
- LeftUpperInnerEyelidとLeftLowerInnerEyelid用の1つ。
- RightUpperInnerEyelidとRightLowerInnerEyelid用の1つ。
- RightUpperOuterEyelidとRightLowerOuterEyelid用の1つ。
ポーズモードでコントローラーをテストします。
関節にポーズを付ける
ポージングは、アニメーションフレームごとにヘッドメッシュの関節を特定の位置に操作するプロセスです。モデルの頭部がリグ付けされた後、タイムラインにポーズを保存するプロセスを開始できます。このデータにより、Studioは各顔の動きをアクセスし、アニメーションまたはブレンドして動的な表情を作成できます。
キャラクターの頭部メッシュの関節を新しい位置にポーズ付けする際は、顔の表情ポーズの参考として顔のアクションコーディングシステム(FACS)に従ってください。FACSは、視覚的に識別可能なすべての顔の動きを記述するための包括的で解剖学的に基づいたシステムであり、すべての顔のアニメーションをキャラクター間で共有可能にします。つまり、一度顔のアニメーションを作成すれば、FaceControlsインスタンスを持つ任意のキャラクターに再利用できます。
Robloxでは、キャラクターの幅広い顔の感情を表現するために使用できる50のベースポーズがありますが、マーケットプレイスで動的ヘッドを販売するには、特定の17のポーズが必要です。必要なポーズを決定する際は、FACSポーズ名は常にキャラクターの向きに基づいており、カメラではないことを覚えておいてください。たとえば、LeftEyeClosedはキャラクターの左目を閉じますが、これはカメラビューの右側にあります。
モデリングソフトウェアのアニメーションタイムライン内の各フレームには1つのユニークなFACSポーズを含めることができるため、複数のFACSポーズを作成する場合は、各FACSポーズを異なるフレームに保存する必要があります。また、キャラクターがニュートラルな顔を持ち、顔のコントローラーと関節がデフォルト値に設定されているフレームも含める必要があります。これにより、Studioはキャラクターのニュートラルな表情と各FACSポーズとの間の関節位置の違いを計算できます。
このため、フレーム0をキャラクターのニュートラルな表情として設定し、FACSポーズをフレーム1から保存することが重要です。以下の画像は、5フレームのBlenderのアニメーションタイムラインの例です。フレーム0にはキャラクターのニュートラルな表情があり、フレーム1-4にはFACSポーズデータがあります。

以下の手順は、リファレンスで作成した顔の関節を使用して5つのポーズをポーズ付けするプロセスを概説していますが、より表現力豊かなヘッドのために追加のポーズにこれらの手順を適用できます。Blenderで顔の関節をポーズ付けするには:
アニメーションタイムラインのプレイヘッドが正しいフレームに設定されていることを確認します。
- キャラクターのニュートラルポーズを設定する場合は、フレーム0に設定します。
- EyesLookLeftをポーズ付けする場合は、フレーム1に設定します。
- EyesLookRightをポーズ付けする場合は、フレーム2に設定します。
- LeftEyeClosedをポーズ付けする場合は、フレーム3に設定します。
- RightEyeClosedをポーズ付けする場合は、フレーム4に設定します。
ポーズモードで、ポーズを現実的に使用したい最大の位置に設定します:
- キャラクターのニュートラルポーズを設定する場合は、顔のコントローラーと関節をデフォルト値に設定します。
- EyesLookLeftをポーズ付けする場合は、両方の目のコントローラー関節を選択し、目をキャラクターの左にドラッグします。
- EyesLookRightをポーズ付けする場合は、両方の目のコントローラー関節を選択し、目をキャラクターの右にドラッグします。
- LeftEyeClosedをポーズ付けする場合は、両方の目のコントローラー関節を選択し、左まぶたを下にドラッグして下まぶたに合わせます。
- RightEyeClosedをポーズ付けする場合は、両方の目のコントローラー関節を選択し、右まぶたを下にドラッグして下まぶたに合わせます。
ビューポートでAを押してすべての関節を選択します。
ビューポートで右クリックし、キーフレームを挿入 > 位置と回転を選択します。これにより、各フレームにすべての関節の位置と回転情報が含まれます。
すべてのポーズがタイムラインに保存されたら、アニメーションタイムラインの開始と終了を保存されたポーズのフレーム数を表すように設定します。常に開始を0に設定し、この特定の例では、4つの非ニュートラルな例のポーズをマッピングする場合、終了を4に設定できます。

組み合わせポーズ
2-3のベースFACSポーズを単一のアニメーションフレームに組み合わせて、複雑な顔の表情を表示できます。ただし、同じ顔の領域を制御するFACSポーズを組み合わせると、顔の特徴が衝突したり、キャラクターが変形したりする可能性があります。
たとえば、LeftEyeClosedとLeftCheekRaiserは、キャラクターの左目の周りの動きを制御します:LeftEyeClosedは目を閉じ、LeftCheekRaiserは頬を持ち上げて下まぶたを押し上げ、細めたような効果を生じさせます。両方のポーズを100%の値で組み合わせると、下まぶたが上まぶたと衝突します:
組み合わせポーズ、または補正は、単一のアニメーションフレーム内で同じ顔の特徴を制御する2-3のFACSポーズの組み合わせであり、デフォルト値の100%からの補正差を持ちます。組み合わせポーズを定義してヘッドにマッピングすることで、2つ以上のFACSポーズがどのように組み合わさるかを修正できます。たとえば、前述の各使用例に補正を追加すると、下まぶたと上まぶたが衝突することなく接触します:
インポート時に、StudioはヘッドのFaceControlsインスタンス内で組み合わせポーズの補正差を計算して保存し、FaceControlsインスタンスはアニメーションエディタ内で組み合わせる際にベースポーズの値を修正します。
各ポーズをマッピング
キャラクターに必要な各FACSポーズのポーズ付けが完了したら、ポーズを付けた各アニメーションフレームを対応するFACSベースまたは組み合わせポーズ名にマッピングする必要があります。マッピングは、ヘッドのMeshPart内に関節の位置と変換を保存し、アニメーションエディタ内でヘッドをアニメーション化し始めると、FaceControlsインスタンスがこの保存されたデータを使用してキャラクターの顔の特徴を適用可能なFACSポーズに変換します。
顔のポーズに加えて、Studioが正しくRootFaceJointを見つけ、インポート時にFaceControlsインスタンス内のすべての子関節を隠すことができるように、RootFaceJointをマッピングする必要があります。マーケットプレイスで動的ヘッドを販売するには、特定の17のポーズが必要です。
保存したポーズとRootFaceJointをマッピングするには:
オブジェクトモードに切り替え、Head_Geoを選択します。
プロパティエディタのオブジェクトプロパティタブで、カスタムプロパティセクションに移動し、新規ボタンをクリックします。新しいカスタムプロパティが新規ボタンの下に表示されます。
Mayaを使用している場合、Blenderのカスタムプロパティと同様の形式でRootFaceJointと顔のポーズデータをマッピングできます。属性を追加するには:
- Head_Geoオブジェクトを選択し、属性エディタに移動します。
- 属性ドロップダウンで、**属性を追加...**を選択します。

新しいカスタムプロパティの右側にあるギアアイコンをクリックします。プロパティの編集ポップアップが表示されます。
ポップアップで:
- タイプドロップダウンをクリックし、文字列を選択します。
- プロパティ名フィールドに:
- RootFaceJointをマッピングする場合は、RootFaceJointを入力します。
- ポーズをマッピングする場合は、マッピングしているフレーム番号、たとえばFrame0を入力します。
- デフォルト値と説明フィールドは空のままにし、OKボタンをクリックします。新しいプロパティ名で新しいカスタムプロパティが更新されます。
カスタムプロパティ名の右側のフィールドに:
- RootFaceJointをマッピングしている場合は、DynamicHeadを入力します。
- ベースポーズをマッピングしている場合は、対応するFACSベースポーズまたは組み合わせポーズ名を正確に入力します。
- 組み合わせポーズをマッピングしている場合は、組み合わせている各ベースポーズをアンダースコアで区切って入力します(例:Funneler_JawDrop_Pucker)。
Enterを押します。
このプロセスを繰り返すと、作成した各追加のカスタムプロパティがプロパティエディタのオブジェクトプロパティタブのカスタムプロパティセクションに表示されます。

キャラクターをエクスポート
キャラクターのヘッドをポーズ付けし、マッピングが完了したら、キャラクターモデルを.fbxとしてエクスポートし、Studioにインポートして、Studio内のFaceControlsインスタンスを使用して4つの目のポーズにアクセスできるようにします。また、完全に構成されたCubieヘッド.fbxを参照して、50以上のベースポーズにアクセスすることもできます。
基本的なヘッドモデルを.fbxとしてエクスポートするには:
- アウトライナーで、すべてのオブジェクトを表示し、選択可能にし、Objectsコレクション内のプロジェクト内のすべてを選択します。
- 上部バーでファイル > エクスポート > **FBX (.fbx)**をクリックします。Blenderファイルビューウィンドウが表示されます。
- 含めるセクションで、
- 制限 > 選択したオブジェクトを有効にします。このステップは、Blenderプロジェクトに追加のコレクションがない場合はオプションです。
- カスタムプロパティを有効にします。
- アーマチュアセクションで、リーフボーンを追加を無効にします。
- アニメーションを有効にして展開し、NLAストリップ、すべてのアクション、強制開始/終了キーフレームのチェックを外します。
- FBXをエクスポートボタンをクリックし、.fbxを保存するディレクトリを選択します。
この時点で、.fbxをStudioにインポートして、サポートされているアニメーション可能なヘッドを持つキャラクターとして使用できます。モデルのインポートと使用に関する指示については、Studioでヘッドをテストするを参照してください。
