EarlyHue は、3〜5歳の未就学児向けに、印刷してすぐに使えるぬりえ(カラーリングページ)を無料で集めたライブラリです。全ページが US Letter 版の印刷用 PDF で、アカウント登録もメールアドレスの壁もありません。動物・図形・数字・アルファベット・色・天気・乗り物・恐竜・季節のテーマなどを幅広くカバーしています。
私たちは小さなチームなので、手では到底描ききれない量を AI 画像モデルで生成しています。ただし読者はクレヨンを持った4歳児で、ページは「子ども向け教育」のカテゴリに置かれます。この組み合わせにより、「生成してそのまま公開」はできません。細かすぎる部分、線の太さのばらつき、崩れた図形、権利が不明な画像——実際に受け取るのが未就学児で、ダウンロードするのが保護者や先生であることを考えると、どれも本当の問題になります。
この記事では、AI に重い作業を任せつつ、公開されるすべてのページに人が責任を持つパイプラインをどう作ったかを紹介します。
## 「とりあえず生成」が失敗する理由
素朴な AI 生成は、子ども向けプロダクトでは決まった形で失敗します。
- **難易度のばらつき。** 太くシンプルな図形で返ってくる画像もあれば、3歳には塗りきれない細かい部分を含む画像もある。
- **サイレントな欠陥。** 時折、崩れた手足、融合した図形、文字化けのような痕跡が生成される。
- **スタイルのドリフト。** 数百ページにわたると、「ハウススタイル」(太い輪郭線、大きな塗り面)は、何かで強制しない限り崩れていく。
- **権利の曖昧さ。** 無料の公開ライブラリでは、すべての素材の出所と利用権を「推定」ではなく「把握」する必要がある。
ページが教室に届く以上、これらはどれも許容できません。そこで私たちは、生成をパイプラインの「終わり」ではなく「始まり」として扱います。
## ゲートは1つではなく2つ
中核となる設計判断はシンプルです。1枚のイラストは、**2つの独立したゲート**を通過して初めて公開用の印刷物になります。
1. **自動スクリーニング**が、人が時間を割く前に客観的な欠陥を捕まえる。
2. **必須の人間レビュー**が、年齢適性・品質・独自性・権利について人に責任を持たせる。
両方をクリアしたものだけを公開します。レビューを飛ばすくらいなら公開枚数を減らす方を選びますし、コードベースも「飛ばす方が難しい」構造にしています。
## ゲート0:構造化ブリーフと出所の記録
すべてのイラストは、一行のプロンプトではなく**構造化ブリーフ**から始まります。ブリーフは主題・構図・幼児向けのスタイル制約(太い輪郭線、シンプルな図形、細かい部分を作らない)を記述します。AI 画像モデル(私たちは Seedream を使用)がこのブリーフから候補アートを生成します。
重要なのは、すべての候補の出所を記録することです。公開される各イラストは次を保持します。
- プロンプトと生成の詳細
- ソース素材ファイルへの参照
- **ソースアートの SHA-256 ハッシュ**
このハッシュにより、コンテンツアドレス可能な来歴(provenance)が得られます。ソースファイルが変わればハッシュも変わり、公開記録が「説明していると主張する素材」ともう一致しないことが分かります。監査と系譜(リネージ)チェックが、考古学的な発掘ではなく、安価で決定的な処理になります。
## ゲート1:自動スクリーニング
人が候補を見る前に、自動スクリーニングを通します。チェックは線の品質、構図、ブリーフとの整合性を見ます。不合格の候補は先に進めず、却下または再生成されます。
特筆すべきチェックの1つが**テキスト意味パス**です。ぬりえは純粋な線画であるべきなので、候補に OCR をかけ、文字化けや迷い込んだテキストとして解決されるものをフラグします。崩れた図形はしばしばテキストのようなアーティファクトを生むため、「生成で何かがうまくいかなかった」ことの代理指標として意外なほど効果的です。(macOS では Apple の Vision フレームワークでローカル実行しています。面白いのはツールそのものではなく、純粋な線画ページには読み取れるテキストが*一切*あるべきでないという点です。つまり1件でもヒットすれば信号になります。)
自動スクリーニングは何を公開するかを決めません。何に人の注意を割く価値があるかを決めます。
## ゲート2:必須の人間レビュー
人の承認なしに公開用の印刷物になるアートはありません。レビュアーは4つを確認します。
- 3〜5歳の範囲に対する**年齢適性**
- **独自性と権利**
- **視覚品質**(クリーンな線、正しい図形、欠陥なし)
- **EarlyHue のスタイルとの一貫性**
承認は、誰かの頭の中のチェックボックスではなく、構造化データとして記録されます。各レビューバッチには、明示的なステータス(`pending-human-review` または `approved`)、承認記録(`reviewedBy`、`reviewedAt`、`notes`)、権利記録を持つマニフェストがあります。権利ステータスは実際に意味を持つ enum で、例えば `original-owned`、`ai-generated-commercial-use`、`licensed` に加えて evidence フィールドを持ちます。レビュアーはローカルのレビューアプリで作業し、各候補をブリーフと来歴付きで提示することで、判断が情報に基づいたものになります。
## ワークフローではなくレンダリングをゲートする
ここが、この種のバグを丸ごと排除する部分です。アートの公開ライフサイクルを解決する関数は、バッチマニフェストが **approved** かつ承認記録と権利記録の*両方*を持つ場合にのみ「レビュー済み」状態を返します。
```ts
if (!manifest || manifest.status !== "approved" || !manifest.approval || !manifest.rights) {
return placeholderLifecycle;
}
```
これらのいずれかが欠けていれば、ページは明確に示されたプレースホルダーの来歴にフォールバックします。言い換えれば、未レビューのコンテンツは、レンダリング時に承認済みとして**構造的に偽装できません**。ゲートはプロセス文書の中ではなく、データ層で強制されます。忙しい日に誰かがスキップしてしまうかもしれない文書ではなく、です。静的サイトでは、この保証がビルドに焼き込まれます。基盤となるマニフェストが実際に証明しない限り、ページは「人間がレビュー済み」という来歴の主張をレンダリングできません。
## 承認済みアートから印刷物へ
承認されると、アートは標準の家庭用プリンタや教室のコピー機向けの **US Letter 版 PDF** として、説明的なタイトルと Alt テキスト付きで準備されます。Alt テキストとタイトルは後から手作業で追加するのではなく、パイプラインの一部として生成されるため、アクセシビリティと SEO メタデータが数百ページにわたって一貫します。
## CI におけるリリースガバナンス
パイプラインは、CI で実行されるリリースガバナンスで包まれています。
- **コンテンツ検証**は、各印刷物のデータが整形式で一貫していることをチェックする。
- **リリースプリフライト**は、バッチが昇格前に準備できていることを検証する。
- **系譜検証**は、公開素材が承認済みでハッシュ化されたソースまで遡れることを確認する。
- **昇格とロールバック**のスクリプトは、レビュー済みバッチを本番に移動するか、問題があればクリーンに元に戻す。
目標は、「公開」が監査証跡を伴う制御された可逆な操作であり、手動のファイルコピーではないことです。
## スタック
- **フロントエンド:** Next.js(React + TypeScript)、高速で SEO フレンドリーなページのため静的生成。
- **ホスティング:** Vercel(グローバル CDN)。
- **アート:** AI 生成(Seedream)+ 上記の文書化された人間レビューパイプライン。
- **ドキュメント:** US Letter 版 PDF の自動生成。
- **アナリティクス:** GA4(同意に配慮した consent-aware 設定)。
- **品質:** CI における自動コンテンツ検証と本番モニタリング。
静的生成がここで良い選択なのは、まさにコンテンツがガバナンスされているからです。ビルドはレビュアマニフェストを読み、未承認の来歴のレンダリングを拒否するため、保証が生成出力と共に移動します。
## 子ども向けプロダクトでなぜこれが重要か
一般的な画像サイトなら、時折おかしな生成が出るのはノイズです。しかし、保護者や先生が未就学児のために印刷する無料ライブラリでは、それは信頼の問題であり、信頼こそがプロダクトのすべてです。2つのゲートモデルとマニフェストによるレンダリングのゲートにより、サイトは誠実な公開上の主張——すべてのページが AI 生成*かつ*人間レビュー済み——を行えます。しかもワークフローが守られたことを「願う」のではなく、コードがその主張を強制します。
## トレードオフと教訓
- **人間レビューは、意図的にボトルネック。** スループットを制限します。それが狙いです。この制約こそがライブラリを信頼できるものにします。
- **来歴は安い保険。** ソース素材ごとに SHA-256 を記録するのはほぼコストゼロで、「これはどこから来たのか」を一度の参照に変えます。
- **ゲートはデータ層で強制する。** 文書の中にだけあるルールはスキップされます。レンダリングパスの中にあるルールはスキップされません。
- **構造化ブリーフは賢いプロンプトに勝る。** 入力を制約する(太い輪郭線、シンプルな図形、細かい部分なし)方が、下流での修正より多くの欠陥を防ぎます。
品質や安全が実際に重要な文脈に AI 生成コンテンツを出荷するなら、この教訓は一般化できます。モデルには量を作らせ、生成と公開の間に決定的な来歴記録と必須の人間ゲートを置き、「承認済み」状態を人が主張するものではなくコードが検証するものにする——です。
このプロセスの読者向けバージョンは [EarlyHue](https://earlyhue.com) で、平易な言葉での説明は[ぬりえページの作り方](https://earlyhue.com/how-our-coloring-pages-are-made/)ページにあります。