この記事は、AI HACK 2026で開発したハッカソンMVPの記録です。AI HACKは、AIプロダクトを短期間で形にするハッカソン。今回は「離れて暮らす祖父母へ、孫の何気ない日常を紙で届ける」というテーマで挑戦しました。
開発では、AI APIの入口としてOrcaRouter様を利用しています。AI HACKという制作と発表の機会、そしてOrcaRouter様から提供いただいたAPI環境に、この場を借りて感謝申し上げます。
AI HACK2026について
8月に続き、9月のAI HACK 2026に参加した。前回は上位8チームに選ばれず、枕を濡らしたので、リベンジの気持ちで今回は参加。今回のテーマは、業務を自律化するAIエージェント。
一般的な仕事上の業務という枠ではなく、日常の「やらなければいけないこと」「やらざるを得ないこと」まで概念を広げてアイディアを模索した。
その結果、私たちのチームは、孫ニュースペーパというアイディアにいきついた。
祖父母は最近の孫の様子が気になる。親世代は共働きしており、おじいちゃんおばあちゃんからの「最近の子どもたちの調子はどうだい?」に答えるのが億劫。こんな2世代のすれ違いを解消するサービスを。
このアイディアを選ぶまで様々なアイディアがチーム内で出た。うち、いくつかを紹介!
① 推し活エージェント
『イチャイチャできるコンカフェ嬢を見つける君』
まず出たのが、**「推し活も業務である」**という発想。
コンカフェでは、常連客が多くて新規では入りづらかったり、せっかく推しのキャストが出勤していても、既に他のお客さんがずっと話していてなかなか会話できなかったりする。
そこで、AIエージェントがX、店舗サイト、配信、キャストの出勤情報などを自律的に巡回。
「今日はまったり」
「誰か来て」
「ガラガラです」
「今ならゆっくり話せるよ」
といったリアルタイムな投稿を収集し、さらに周辺の店舗情報や混雑状況なども組み合わせる。
ユーザーは現在地や好みのキャストタイプを入力するだけ。
AIエージェントが、
今から行ける
+
好みに合う
+
比較的ゆっくり話せそう
という条件から、候補となる店舗やキャストを提案する。
単なる店舗検索ではなく、「今この瞬間に推し活するならどこへ行くべきか」をAIエージェントが探し続けてくれるサービスというアイディア。
かなりニッチではあるものの、熱狂的なユーザーが存在する領域にAIエージェントを持ち込むのは面白いのでは、という話になった。
② 散歩エージェント
『目的地のない散歩を、AIが冒険に変える』
次に出たのが、散歩そのものをAIエージェントで拡張するアイディア。
ユーザーが、
「これから散歩する」
と言うとエージェントが起動する。
あらかじめ決められた観光ルートを案内するのではなく、ユーザーが実際に歩いている場所に応じて、AIがリアルタイムに情報を探しながら散歩を演出する。
例えば、
「右側には昔、○○会社の工場がありました。当時の写真はこれです」
とか、
「この角を曲がった先に、40年以上続いている老舗の中華料理店があります。寄ってみますか?」
といった提案を行う。
さらに、ユーザーの興味や残り時間に合わせて、その場でルート自体も変えていく。
Google Mapsのように「目的地まで案内する」のではなく、目的地のない移動そのものを楽しくするAIエージェント。
「何も考えず家を出ても、AIがその街の歴史や店、人、文化を拾ってきて、その日だけの散歩を作ってくれる」という体験を目指した。
③ 子ども自然対話ゲームエージェント
『子どもとの会話から、その場でゲームが生まれる』
子ども向けのAIエージェントもかなり盛り上がった。
子どもがAIと自然に会話すると、その子の年齢や興味に合わせて、その場で遊びやゲームを作ってくれる。
例えば幼児なら、
「どのブロックが、どの穴に入るかな?」
という簡単な知育ゲーム。
少し大きくなれば、
「今日は家の中で鬼ごっこゲームを作ろう」
といった遊び。
さらには、
「ママとパパと自分が登場する桃太郎のお話を作りたい!」
と話しかければ、その場でオリジナルストーリーを一緒に作る。
話している途中で、
「じゃあ鬼はどんな顔にする?」
「桃太郎は何に乗って鬼ヶ島へ行く?」
とAIが問いかけ、子ども自身が物語やゲームを作る側になる。
ここから、
「子どもがAIと会話しながら、自分だけの絵本を作れるサービスって面白いのでは?」
という話にも発展した。
もちろん子ども向けサービスなので、安全性は重要。
アダルト表現や過度な暴力表現を制限するだけでなく、
「シューティングゲームは遊ばせない」
「競争より協力するゲームを多くする」
など、家庭ごとの教育方針を親が設定できる仕組みも考えた。
AIにゲームを与えてもらうのではなく、子どもの想像力をAIが引き出し、一緒に遊びを作っていくエージェントという発想。
④ 子どもの習い事定着化ゲームエージェント
『親が教えられないスポーツでも、AIが成長をゲームにする』
スポーツ系の習い事にもAIエージェントを使えるのでは、というアイディア。
例えば、自分の子どもがバスケットボールを習っているとする。
親自身はサッカー経験者なのでサッカーなら教えられる。でもバスケットボールは詳しくない。
こうしたケースでは、
「子どもにもっと上手くなってほしいけど、何を教えればいいのか分からない」
ということが起きる。
そこで、試合や練習中の動画を撮影してAIへアップロード。
AIが映像から、
- シュートフォーム
- ポジショニング
- 試合中の動き
- ボールを持っていないときの動き
- 改善できそうなポイント
などを分析する。
ただ改善点を文章で返すだけではなく、
今週のクエスト
「左側からのシュートを5本成功させよう!」
のように、子ども向けのゲームに変換する。
クリアすると次のクエストが解放される。
シュート Lv.3
ドリブル Lv.5
ディフェンス Lv.2
のように、RPGのステータスのような形で成長を可視化するのも面白い。
親自身がそのスポーツに詳しくなくても、AIがコーチとゲームマスターの間のような役割を担い、子どもが自主的に練習を続けられるようにするというアイディア。
単に「上達させるAI」ではなく、習い事を続けたくなる仕組みをAIエージェントが作ることを狙った。
こうしてアイディアを出していく中で、今回のテーマである「業務」を、
会社でやらなければならない仕事
だけではなく、
人間が目的を達成するために、継続的に行っている行動
まで広げて考えると、AIエージェントの活用先はかなり広いことに気づいた。
推し活も、散歩も、子どもとの遊びも、習い事も、一見すると「業務」には見えない。
それでも、その裏には情報収集、判断、計画、継続といった小さなタスクが存在している。
今回私たちが最終的に選んだ孫ニュースペーパーも、この考え方から生まれたアイディアの一つだった。
撮った写真を、祖父母に届けるところまで
子供の写真は、スマートフォンにどんどん増えていきます。でも「どの写真を送ろう」「ひとこと説明をつけよう」「そろそろ祖父母に近況を知らせよう」は、撮影とは別の仕事です。
そこで作ったのが「孫ニュースペーパ」です。アプリを開いて子どもの様子をその場で撮影すると、写真がそのままAI編集長へ渡り、掲載写真の選定、記事作成、A4新聞へのレイアウトまで進みます。親は最後に内容を確認して承認。紙の新聞なら、写真共有アプリに慣れていない祖父母にも届けられます。
最初は端末内の写真を一括アップロードする入口を考えていました。しかし、親の手間を減らすサービスなのに「写真を探して選び、アップロードする」操作が残ることに気づき、途中で仕様を変更しました。現在のMVPは、スマホの「カメラで撮る」をタップして背面カメラを起動し、撮影結果をそのままAI編集長へ渡すWebアプリです。既存写真を使いたい場合の選択導線も残しています。端末内の写真を常時自動収集する機能はまだありません。
GitHub: https://github.com/t-ry/mago-newspaper
公開デモ: https://main.d2lslwov00yd74.amplifyapp.com
できること
- スマホの「カメラで撮る」から写真を撮影し、その場で最大12枚まで追加する。既存のJPEG・PNG・WebPを選ぶこともできる。
- OrcaRouter経由の画像対応モデルが最大3枚を選定し、選定理由と日本語の記事を生成する。
- 親が記事や掲載写真を修正し、新聞プレビューを確認する。
- 承認した版をA4縦1ページのPDFとして保存・印刷する。
- 郵送先を入力し、模擬の印刷・郵送注文を体験する。
印刷・郵送APIは今回、模擬注文です。実際の発送や料金の請求は発生しません。 実事業者との接続は、APIの利用条件が決まった後の拡張です。
APIキーがない環境でも動きを確認できるように、同梱イラストと固定文章を使うサンプル体験も用意しました。こちらは画面に「AI未使用」と表示し、実AI生成とは区別しています。
AWS Amplifyでスマホから使えるようにした
スマホのブラウザからHTTPSで開けるように、画面をAWS Amplify Hostingへ公開しました。/api/**は同じURLのままAWS App Runnerへリバースプロキシし、既存のExpressとPlaywright ChromiumをDockerコンテナで動かしています。
スマホ
↓ HTTPS
AWS Amplify Hosting(React)
↓ /api/**
AWS App Runner(Express / OrcaRouter / A4 PDF)
↓
AWS Secrets Manager(OrcaRouter APIキー)
OrcaRouterキーはブラウザ、GitHub、Dockerイメージへ含めず、Secrets ManagerからApp Runnerへ実行時に渡します。現在の記事と写真はサーバーメモリに置くMVP仕様なので、App Runnerは最大1インスタンスに制限しています。再起動でデータが消えるため、継続運用ではS3やDynamoDBへの移行が必要です。
OrcaRouterをどこに組み込んだか
OrcaRouter様は、OpenAI互換の単一エンドポイントから複数のAIモデルを利用できるAIゲートウェイです。このMVPでは、写真から記事を作る処理の入口として採用しました。ブラウザから直接呼ぶとAPIキーが見えてしまうため、Expressサーバーから呼び出します。
アプリ内カメラで撮影した写真
↓ 撮影結果をそのまま取り込み
↓ ブラウザで縮小・JPEG再エンコード
Express API
↓ 画像+編集方針
OrcaRouter /v1/chat/completions
↓ 選定写真ID・選定理由・見出し・本文のJSON
サーバーで入力と出力を検証
↓
新聞プレビュー → 親の修正と承認 → A4 PDF → 模擬注文
リクエストの中心部分は次のようになっています。実装はserver/orca.jsにあります。
await fetch("https://api.orcarouter.ai/v1/chat/completions", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.ORCAROUTER_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: process.env.ORCAROUTER_MODEL || "openai/gpt-5.2",
messages: [
{ role: "system", content: editorialInstructions },
{
role: "user",
content: [
{
type: "text",
text: "写真ID: photo-1。祖父母向けの記事を作ってください。",
},
{
type: "image_url",
image_url: { url: photoDataUrl, detail: "low" },
},
],
},
],
response_format: { type: "json_object" },
max_tokens: 2400,
}),
signal: AbortSignal.timeout(90_000),
});
モデルの返すJSONをそのまま採用せず、Zodで文字数や記事数を検証し、存在しない写真IDや重複した選定を拒否します。認証エラーやタイムアウトが起きた場合も、黙ってデモ文章へ切り替えることはしません。
画像入力と構造化出力の形式はOrcaRouterの画像入力ドキュメントと構造化出力ドキュメントを参照しました。
「はじめて」を勝手に書かない
家族の新聞で大切なのは、もっともらしい物語を作ることより、実際の思い出を誤って伝えないことです。
たとえば、自転車に乗っている写真から「初めて自転車に乗れました」とは判断できません。プロンプトでは、画像から確認できない場所・日時・年齢・成長記録・発言などを創作しないよう指示しました。出来事の背景は、親が任意のメモで補えます。
ただし、指示だけで誤りを完全に防げるわけではありません。そのため、親の確認・修正・承認を最後に残しています。
承認は「新聞の版」に紐付ける
画面に確認ボタンを置くだけでは、承認後に内容を変えた新聞がそのまま発送されてしまう可能性があります。
今回の実装では、新聞にrevisionを持たせ、承認時の版をapprovedRevisionに記録します。編集すると版が進み、承認は解除。PDFの取得と注文受付でも、サーバーが版の一致を確認します。
第1版を生成 → 第1版を承認 → PDF・注文が可能
↓ 修正
第2版・未承認 → 再確認が必要
また、同じ新聞の同じ版への注文は既存の注文を返すため、連打による二重注文を防げます。模擬注文でもこの境界は実装しました。
画面とPDFを同じ紙面から作る
新聞のHTMLテンプレートをshared/newspaper.jsにまとめ、画面ではiframe、PDFではPlaywright Chromiumから描画します。日本語フォントは自己ホストし、PDFにも埋め込みます。
これにより、PDF生成を外部の印刷サービスに依存せず試せます。画像の読み込み失敗や、記事が紙面の下にはみ出す場合は、出力成功にせず修正を促します。
Spec Kitで仕様から開発する
開発にはGitHub Spec Kitの公式テンプレートと手順を使いました。この環境ではエージェント設定フォルダが読み取り専用だったため、テンプレートとBashスクリプトを.specify/に手動導入しています。CLIやスラッシュコマンドを登録したわけではありません。
仕様をまとめた場所はspecs/001-mago-newspaper/です。
| 文書 | 決めたこと |
|---|---|
| spec.md | ユーザー体験、受け入れ条件、対象外 |
| plan.md | 技術構成と保存方式 |
| data-model.md | 新聞の版と承認・注文の状態 |
| contracts/api.md | APIの入力・出力・エラー |
| tasks.md | 実装と検証の作業一覧 |
特に役立ったのは、「自動化する部分」と「人が確認する部分」を先に分けたことです。写真選定・記事作成・レイアウトはAIとプログラムへ。思い出としての正しさと届ける判断は親へ。この区分が、そのまま画面とAPIの設計になりました。
AI HACKで5日間のMVPに絞ったこと
AI HACK 2026は、2026年9月19日から23日までの5日間でAIプロダクトを作るハッカソンです。限られた期間でデモ可能な体験を完成させるため、今回は次の一本に絞りました。
アプリ内カメラで撮影
→ 撮影結果をそのまま取り込み
→ AI編集長が選定・記事作成
→ 親が修正・承認
→ A4新聞PDF
→ 模擬の印刷・郵送注文
元の構想には、動画解析、端末写真の定期収集、毎週の自動発行、編集傾向の学習もあります。しかし、ハッカソンでは「祖父母に紙で届く」という価値を端から端まで見せることを優先しました。実郵送事業者が未定の部分は模擬注文と明示し、できていない接続を成功したように見せないことも仕様に含めています。
検証したこと
- 承認前のPDF取得・注文を拒否する。
- 記事を編集すると承認が解除され、古い版での承認を拒否する。
- 別セッションの新聞を取得できない。
- 宛先を検証し、同じ版の模擬注文を重複作成しない。
- OrcaRouterへ画像と認証ヘッダーを送る形式を、モック応答で検証する。
- ブラウザでサンプル生成からPDF・模擬注文まで操作する。
- PDFがA4縦1ページであることと、幅390pxで横にはみ出さないことを確認する。
- Amplifyの公開URLで、カメラ入力処理からPDF・模擬注文までのE2Eを確認する。
- 公開環境のSecrets ManagerからOrcaRouterキーを読み、実画像入力の記事生成を確認する。
APIなどの自動テストは7件、ブラウザでの一連の操作テストは1件成功しました。本番ビルドに加え、Amplifyの公開URLでも同じブラウザテストが成功しています。
2026年9月22日にOrcaRouterの実APIへ接続し、APIキー認証、モデル一覧の取得、orcarouter/freeによるテキスト生成を確認しました。さらに、個人写真の代わりに同梱イラストをJPEGへ変換し、openai/gpt-5.2へdata URIで送る検証を実施。記事1件の生成、元写真IDの参照、JSON構造の検証まで成功しました。この確認はnpm run verify:orcarouterで再現できます。最新状況は検証記録に残しています。
これから
次は、写真ライブラリの定期収集、動画からの代表フレーム抽出、家族ごとの編集方針、実際の郵送事業者との接続です。複数家族が使うサービスにするには、ユーザー認証・永続保存・運用上のデータ管理も必要です。
「撮るだけで、届く」を目指しながら、まずは写真を新聞にして、祖父母と同じ一枚を見ながら話せるところまで。そんな、小さな家族の編集室を作りました。
最後に、短期間でプロダクトを形にする機会をくださったAI HACK運営事務局の皆様と、AI機能を支えるAPI環境を提供くださったOrcaRouter様に、あらためて感謝いたします。

