尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Motion Imaging の公式サイト(Next.js 16 / Vercel Hobby)と、SNS自動投稿(Vercel Cron)をまとめたリポジトリ。 コードはすべて src/ 配下(2026-09-24 に app/ から移動)。 vercel.json の schedule は UTC。下表は日本時間。 一番簡単なのは Vercel → Settings → Cron Jobs → Run。キーは不要で、結果は Logs で確認できる。 ブラウザから直接実行する場合は ?key= を付ける。対応しているパラメータはエンドポイントごとに違う。檢視完整 README ↗
Motion Imaging の公式サイト(Next.js 16 / Vercel Hobby)と、SNS自動投稿(Vercel Cron)をまとめたリポジトリ。
| パス | 内容 |
|---|---|
/ /migoron /about | 公開ページ |
/admin | 管理画面(パスワード保護。後述) |
/api/post-* | SNS自動投稿(cronから実行) |
partyconnect/ | 別アプリ(パーティコネクト)。詳細は partyconnect/README.md |
コードはすべて src/ 配下(2026-09-24 に app/ から移動)。
vercel.json の schedule は UTC。下表は日本時間。
| 時刻(JST) | エンドポイント | 投稿先 | 内容 | 画像 |
|---|---|---|---|---|
| 6:00 | /api/post-instagram | Instagram @motion.imaging +Threads | 宮古島・石垣島の写真(6投稿ごとに交互) | post-instagram/images/ig_motion_imaging/ |
| 6:10 | /api/post-jake-images | Instagram @jake_images_ +Threads | ポートレート(EXIF付き) | post-instagram/images/ig_jake_images/portrait/ |
| 6:20 | /api/post-morning-all | X ミゴロン +Threads | 花畑指数(1本) | post-images/flower/ |
| 18:05 | /api/post-evening | X ミゴロン +Threads | 星空指数(実際の天気から算出) | post-images/star/ |
| 21:15 | /api/post-daily | X ミゴロン +Threads | 翌日の雲海指数・富士山指数(2本) | post-images/cloud/ fuji/ |
| 22:40 | /api/verify-predictions | (投稿なし) | ミゴロン予報の答え合わせ(下記) | なし |
| 7:30 | /api/post-sukuado-morning | X スクアド +Threads | 朝枠 | なし |
| 7:31 | /api/post-sukuado-morning-question | X スクアド +Threads | 朝の質問 | なし |
| 22:00 | /api/post-sukuado-night | X スクアド +Threads | 夜枠 | post-images/scad-night/ |
| 22:01 | /api/post-sukuado-promo | X スクアド +Threads | 告知 | なし |
| 7:30 | /api/post-jake-ai-morning | X jake_images +Threads | 生成AI情報(Gemini生成、失敗時は固定文) | なし |
| 22:00 | /api/post-jake-ai-night | X jake_images +Threads | 生成AI情報 +「30日振り返り」(day30で自動停止) | 振り返りのみ post-images/jake-ai/ |
*_posted_date などで当日分を予約してから投稿する(SET NX)。一番簡単なのは Vercel → Settings → Cron Jobs → Run。キーは不要で、結果は Logs で確認できる。
ブラウザから直接実行する場合は ?key=<CRON_SECRET> を付ける。対応しているパラメータはエンドポイントごとに違う。
| パラメータ | 意味 |
|---|---|
force=1 | 当日投稿済みでも実行する(実際に投稿される) |
dry=1 | 投稿せず、本文と文字数だけ返す |
report=1 | 前回の実行レポートを表示する |
noimage=1 | 画像なしで投稿する |
/adminhttps://motionimaging.vercel.app/admin。ユーザー名は何でもよく、パスワードは ADMIN_PASSWORD。未設定のときは誰も開けない。
| 項目 | 内容 | データ元 |
|---|---|---|
| 自動投稿の稼働状況 | 上表13本それぞれの「正常/一部注意/失敗/止まっている可能性(26時間以上実行なし)」、エラー内容、最後に成功した日時 | 各cronがRedisの job_status:<id> に記録(src/lib/job-status.js) |
| ミゴロン予報の答え合わせ | 直近7日・28日の的中率、Brierスコア、予測とのズレ(点)。星空・雲海・富士山・花畑別 | Redisの pred:<種別>:<日付>(src/lib/prediction-log.js) |
| SNSトークン | Instagram 2つ・Threads 3つが今使えるか(開くたびに確認) | Meta API の /me |
| パーティコネクト | 主催者・開催予定・開催済み・延べ参加者・成立ペア | Supabase(参加者の個人情報は取得しない) |
未実装:各アプリのアクセス数(Hobbyプランでは取得APIに制限あり)、API使用量(Gemini・X)。
指数(星空・雲海・富士山・花畑)の点数はGeminiではなくコードで決まる。Geminiが書くのは「ミゴロンメモ」の一文だけ。
src/app/api/_lib/migoron-scoring.js(Open-Meteoの天気から計算。係数はここに集約)。スポットと花の見頃期間は src/app/api/_lib/spots.json。上限は95%。src/app/api/_lib/migoron-format.js。1行目は点数から決まる結論型のフック(例「明日の朝、竹田城跡で雲海が出そう☁️」)。見出しの末尾に「出現期待度」(星空・雲海)/「見え期待度」(富士山)/「見頃期待度」(花畑)を付けて、%が何の数字か分かるようにしている。X の重み付き280字に収まるよう各routeの plans で段階的に削る。pred:<star|cloud|fuji|flower>:<対象日> に保存する(120日保持)。dry run では保存しない。/api/verify-predictions(毎晩22:40 JST)が、対象日が昨日以前で未検証の予測を、Open-Meteoの過去値から同じ式で再計算して判定する。対象日の7日前まで遡って再試行する。
(予測点/100 − 結果(0か1))² の平均。0に近いほど良く、常に50%と答えると0.25になるので、0.25を下回れば当て推量より上。?report=1(&days=7|28)で取得できる。JSONの snsText はSNS発信用の下書き(自動投稿はしていない)。?dry=1 は検証結果を表示するだけで保存しない。https://raw.githubusercontent.com/<owner>/<repo>/main/src/app/api/...)からXやInstagramに渡している。フォルダを移動したり名前を変えたりすると、コード内のURLも直さないと画像が404になる。.JPG と .jpg は別物)。| フォルダ | ファイル名 | 枚数 | 枚数の環境変数 |
|---|---|---|---|
post-images/flower/ | 花00201.jpg〜 | 17 | FLOWER_IMAGE_COUNT |
post-images/fuji/ | 富士山00101.jpg〜 | 11 | FUJI_IMAGE_COUNT |
post-images/star/ | 星00301.jpg〜 | 8 | STAR_IMAGE_COUNT |
post-images/cloud/ | 雲海0001.JPG〜(4桁・大文字) | 11 | CLOUD_IMAGE_COUNT |
post-images/scad-night/ | 01.jpg〜 | 8 | SCAD_NIGHT_IMAGE_COUNT |
post-images/jake-ai/ | AI00001.JPG〜 | 8 | JAKE_AI_IMAGE_COUNT |
post-instagram/images/ig_motion_imaging/miyakojima/ | 01.jpg〜47.jpg | 46(16.jpgが欠番) | MIYAKOJIMA_IMAGE_COUNT(既定47) |
post-instagram/images/ig_motion_imaging/ishigaki/ | 01.jpg〜106.jpg | 106 | ISHIGAKI_IMAGE_COUNT(既定106) |
post-instagram/images/ig_jake_images/portrait/ | 01.jpg〜61.jpg + exif.csv | 61 | JAKE_IMAGE_COUNT |
写真を追加したら、枚数の環境変数も合わせて更新する。@motion.imaging のInstagramは、番号の写真が無い(欠番・枚数の設定ミス)場合は自動で次の番号に進む(最大10枚まで)。
| 用途 | 変数 |
|---|---|
| 共通 | CRON_SECRET KV_REST_API_URL KV_REST_API_TOKEN(Upstash Redis) GEMINI_API_KEY GITHUB_REPO_OWNER GITHUB_REPO_NAME GITHUB_BRANCH |
| X ミゴロン | X_API_KEY X_API_SECRET X_ACCESS_TOKEN X_ACCESS_SECRET |
| X スクアド | SCAD_X_API_KEY SCAD_X_API_SECRET SCAD_X_ACCESS_TOKEN SCAD_X_ACCESS_SECRET |
| X jake_images | JAKE_X_API_KEY JAKE_X_API_SECRET JAKE_X_ACCESS_TOKEN JAKE_X_ACCESS_SECRET |
INSTAGRAM_ACCESS_TOKEN INSTAGRAM_BUSINESS_ACCOUNT_ID(motion) / JAKE_IMAGES_ACCESS_TOKEN JAKE_IMAGES_ACCOUNT_ID(jake) | |
| Threads | THREADS_MOTION_TOKEN(ミゴロン・motion) THREADS_JAKE_TOKEN(jake) THREADS_SUKUADO_TOKEN(スクアド) |
| 管理画面 | ADMIN_PASSWORD PARTYCONNECT_SUPABASE_SECRET_KEY(PARTYCONNECT_SUPABASE_URL は省略可) |
| 画像枚数 | 上の画像表を参照 |
環境変数を変えたら Redeploy しないと反映されない。
Metaのトークンは約60日で切れる。また、Facebook側のパスワード変更やセキュリティ判定で期限前でも無効になる(エラー code=190)。自動延長の仕組みはまだ無いので、管理画面の「SNSトークン」が「無効」になったら次の手順で更新する。
IGAA…、Threadsは THAA…)をコピーする。数字だけの値はアカウントIDなので違う。注意(Threads):同意画面には、ブラウザでThreadsにログインしているアカウントが出る。「jake_images_として続行」と出ているときに進むと、どの行のボタンを押してもjake用のトークンになる。motion用を作るときは、その画面に motion.imaging が表示されることを必ず確認する。
| 時期 | 症状 | 原因 | 対応 |
|---|---|---|---|
| 2026-09-13 | 雲海指数が内容違いで2回投稿された | 「投稿済みか確認→投稿→フラグを立てる」の間にcronが二重起動 | 投稿前に SET NX で当日分を予約する方式に変更(朝・夕・夜すべて) |
| 2026-09 | 富士山指数で「Your media IDs are invalid」 | 画像がカメラ原寸(最大9504px) | 全画像を長辺2048pxに縮小 |
| 2026-10-16 | 星空指数が全地点35%に張り付いた | 夜間9時間の天気コードの最悪値で上限を掛けていた(1時間の曇りで全地点が頭打ち) | 時間別に評価し、最も条件の良い連続3時間で採点するよう変更 |
| 2026-09 | 星空指数が雨の日に95% | 星空指数が天気を見ていなかった | open-meteo の雲量・天気から算出するよう変更 |
| 2026-09-15頃〜09-28 | Instagram 2アカウントの投稿が止まっていた | Metaトークンの無効化(code=190) | トークンを再発行。気づけなかった反省から管理画面を追加 |
| 2026-09-24〜09-25 | 全アカウントで画像が付かない/Instagramが投稿できない | app/→src/app/ 移動で画像URLが404 | 全7ファイルのURLを src/app/... に修正 |
| 2026-10-05(未発生) | 宮古島 16.jpg 欠番、石垣島の枚数設定が実際より3枚多い | 該当番号の日にInstagram投稿が失敗する状態だった | 欠番を飛ばす処理を追加、石垣島の既定枚数を106に修正 |