重複チェック・リマインド
当選者・選曲の重複チェック、作業のリマインド
プレゼント当選者管理、楽曲の重複チェック、作業リマインドを AI で自動化。ヒューマンエラーを減らす実用例を紹介。
企画詳細
第3回では、プレゼント当選者管理・楽曲の重複チェック・作業リマインドの3つを AI で自動化するフローを実演します。応募データから重複応募・過去当選者を照合し、オンエアログと照らして選曲の被りをフラグ。さらに番組制作の定型タスクをスケジュールに応じて自動通知します。ヒューマンエラーが起きやすい確認作業を AI に任せる価値を伝えます。
HOW IT WORKS
「選曲の被りチェック」を、11年分のデータとAIで一瞬にする仕組み
第3回のテーマは「確認作業の自動化」。番組でかける曲が最近すでにオンエアされていないかを、人の記憶に頼らずに一瞬でチェックするツールを作りました。 ここで紹介するのは、実際に動くアプリです。選曲リストのExcelを放り込むと、 過去約11年・64万曲のオンエア履歴と自動で照らし合わせ、被っている曲を色分けで教えてくれます。 専門用語が多く出てきますが、その都度かみくだいて説明するので、AIにくわしくない方も安心して読み進めてください。

これまでは、記憶と手作業だのみでした
「この曲、最近かけたっけ?」を、これまではスタッフの記憶や手作業の確認に頼っていました。 過去の使用日をきちんと調べようとすると、専用サイトで日付を1日ずつ探すしかなく、事実上ほとんど調べられないのが実情でした。うっかり被りは、いつ起きてもおかしくなかったのです。 そこで、この「手間はかかるが頭は使わない確認作業」を、まるごとツールに任せることにしました。
そもそもの「お願いごと」
現場のルールはシンプルでした。整理すると、お願いはこうです。

何を防ぎたい?
同じ曲を短い間隔でくり返しかけてしまう“被り”。
現場ルールは?
だいたい直近1週間で同じ曲がかかっていなければOK。
あると嬉しい
「過去にいつ使ったか」も分かると、判断の材料になる。
どう使う?
放送前に、その日の選曲リスト(Excel)でサッと確認したい。
先に、よく出る5つの言葉だけ
このあと何度も出てくる言葉を、先にやさしく押さえておきましょう。ここさえ分かれば、仕組みの話がぐっと読みやすくなります。

クローラー / スクレイピング
Webページを人の代わりにプログラムが自動で開いて、必要な情報を抜き出す技術が「スクレイピング」。それを定期的に巡回して集めるプログラムを「クローラー」と呼びます。今回は、FM大阪の楽曲オンエア情報が載っている「NOA(ノア)」というサイトから、過去にかかった曲を機械的に集めています。
データベース
集めた大量のデータをきちんと整理してためておく「専用の倉庫」。ノートに手書きするのと違い、何十万件あっても一瞬で検索・照合できます。今回は約11年分・およそ64万曲を、Supabase(スーパーベース)というクラウド上のデータベースにためています。
表記ゆれ / 正規化
同じ曲でも「Tricky」と「Tricky」、「サカナクション」と「sakanaction」のように、書き方が違うことがあります。これを機械が『同じ』と判断できるよう、全部そろった形に整える下ごしらえが「正規化」です。これをサボると、同じ曲を別の曲と見なして被りを見逃します。
あいまい検索(類似度)
文字が完全に一致しなくても「どれくらい似ているか」を点数で測り、近いものを見つける技術。正規化だけでは吸収しきれない“ちょっと違う表記”の曲を拾うために使います。
LLM(大規模言語モデル)/ Gemini
文章を理解して判断できるAI(ChatGPT の仲間)。今回は Google の「Gemini(ジェミニ)」を、ルールでは吸収しきれない表記ゆれ(英語表記とカタカナ表記など)に対して『これは同じ曲?別の曲?』と最終的に見極めさせる場面だけで使います。使うかどうかは任意です。
この道具は「4つの部品」でできている
1つのAIに全部やらせるのではなく、役割の違う部品を組み合わせています。人間の職場と同じで、得意なことに専念させたほうが良い結果が出るからです。

Python + Streamlit
画面・土台
人が操作する部分
「Streamlit(ストリームリット)」は、Python というプログラミング言語で操作画面をかんたんに作れる道具。選曲リストのExcelを放り込み、ボタンを押すと結果が色分けで出る画面はこれで作っています。担当者はブラウザでURLを開くだけで使えます。
Supabase(データベース)
履歴の倉庫
データをためる部分
過去のオンエア履歴(約11年・64万曲)をためておくクラウドの倉庫。ここにデータがあるおかげで「この曲、過去にいつかけた?」を一瞬で照合できます。アプリ本体とは分けて置いてあり、誰がどこから開いても同じ最新データを見られます。
requests + BeautifulSoup
情報あつめ
履歴を集める部分
NOAサイトを読みに行って、日付ごとのオンエア曲(時刻・曲名・アーティスト)を抜き出す(スクレイピングする)部品。人が1日ずつ手で調べていた作業の置き換えです。相手サイトに負担をかけないよう、ゆっくり巡回します。
3段マッチング + Gemini
照合エンジン+AI
被りを見つける部分
選曲リストと履歴の倉庫を突き合わせて、被りを見つける頭脳。完全一致 → あいまい検索 → AI精査、の3段構えで、表記のゆれた曲も取りこぼしにくくしています(次章でくわしく)。
全体の流れ:5つのステップ
放送前にツールを開いてから、結果が出るまで。裏側ではこの5ステップが上から順に動いています。それぞれ「何をして」「なぜ必要か」を見てみましょう。

履歴データベースを最新にする
クローラーなにをする?
「更新」ボタンを押すと、倉庫にたまっている最新の日付から今日までの“足りない分”だけを、NOAサイトから取りに行きます。放送前にこれを押すのが基本の使い方です。
なぜ必要?
被りチェックは「最新のオンエアまで入っていること」が命だから。古いデータのままだと、数日前にかけた曲を見逃します。だから検証の前に、まず倉庫を最新にします。
選曲リスト(Excel)を読み込む
プログラムで自動なにをする?
番組フォーマットのExcelをドラッグ&ドロップすると、その中から「今回かける曲」だけを自動で抜き出し、曲名とアーティストに分けて一覧にします。放送日もExcelから自動で読み取ります。
なぜ必要?
Excelには曲以外の情報(ジングルや進行メモ)もたくさん入っています。そこから曲の行だけを正確に拾い出すのは、決まったルールで機械にやらせたほうが速くて確実です。
被りを照合する(3段構え)
照合エンジン + Geminiなにをする?
抜き出した曲を1曲ずつ、履歴の倉庫と突き合わせます。①完全一致 → ②あいまい検索 → ③AI精査、の順で、表記のゆれも吸収しながら過去のオンエア日を探します。
なぜ必要?
曲名の書き方はバラバラ(全角・半角・英語・カタカナ)。単純な一致だけでは同じ曲を見逃すので、だんだん賢い方法に切り替える3段構えにしています(次章でくわしく)。
結果を色分けで表示する
プログラムで自動なにをする?
曲ごとに🔴直近被り/🟡使用歴あり/🟢履歴なし/⚠️要確認、を色分けで表示。🔴には「いつかけたか」の日付も出ます。あわせて「DBは◯月◯日分まで」という倉庫の鮮度も必ず表示します。
なぜ必要?
見た瞬間に判断できるように。とくに『倉庫がいつまでの分か』を必ず見せるのは、古いデータのまま“被りゼロ”と安心してしまう事故を防ぐためです。
必要ならCSVで書き出す
プログラムで自動なにをする?
判定結果の一覧を、Excelなどで開けるCSVファイルとして保存できます。
なぜ必要?
画面で確認するだけでなく、記録として残したり、他のスタッフと共有したりできるように。最後の選曲判断はあくまで人間が行う、という前提の“材料”です。
このツールの心臓部:なぜ「3段構え」で照合するのか
曲名の書き方は本当にバラバラです。「Tricky」と「Tricky」、「サカナクション」と「sakanaction」、 「Official髭男dism」と「OFFICIAL HIGE DANDISM」。単純な文字くらべだけでは、同じ曲を“別の曲”と見なして被りを見逃します。 そこで、かんたんで速い方法から、賢いけれど手間のかかる方法へ、だんだん切り替える3段構えにしました。
完全一致で照合
正規化 + 完全一致まず、曲名とアーティスト名を正規化(表記をそろえる下ごしらえ)してから、履歴の倉庫にピッタリ同じものがないか探します。速くて確実。大半の曲はここで判定できます。曲名だけでなくアーティストもセットで見るのは、同じ曲名の“別の曲”を間違って被り扱いしないためです。
あいまい検索で候補さがし
類似度スコア第1段で見つからなかった曲だけを対象に、『どれくらい似ているか』を点数で測って、近い候補を倉庫から拾います。英語表記とカタカナ表記のような大きく違うケースも、ここでローマ字に直して比べることで拾えるようにしています。
AIが“同じ曲か”を見極める
Gemini(任意)第2段で見つけた“似ている候補”を、AI(Gemini)に『これは同じ曲か、別の曲か』と最終判断させます。ルールでは吸収しきれない表記ゆれを、文章を理解するAIの力で見極める段です。ただしAIの鍵(APIキー)を入れないときはこの段を飛ばし、候補を『⚠️要確認』として人に見せます。AIの判定も鵜呑みにせず、根拠を必ず併記します。
なぜ全部をAIにやらせないの?
AIは賢いですが、呼び出すたびに時間もお金もかかります。大半の曲は速くて無料の「完全一致」で判定できるのに、 全部AIに回すのは無駄。かんたんな方法で片づく曲はさっさと片づけ、本当に難しい曲だけAIに回す。この“適材適所”が、速さと正確さと安さを両立させるコツです。
結果はこう出る:5つのしるし
照合が終わると、曲ごとに次のしるしが付きます。ひと目で「どう対応すべきか」が分かるようにしています。
直近被り
決めた期間(初期は直近7日)以内にかかっている。差し替えを検討。いつかけたかの日付も出ます。
使用歴あり
過去にかけたことはあるが、直近ではない。基本はそのままでOK。過去の使用日は判断材料に。
使用歴なし
倉庫の中に記録がない。OK(ただしNOAに載らない曲もある点は前提として)。
要確認
表記ちがいの“似た曲”が見つかった。同じ曲かどうかを人が最終確認する。
このほか、曲名が書かれていない「リクエスト対応」などの枠は➖ 抽出対象外として、照合できないことを正直に表示します。 そして結果の上には必ず「倉庫は◯月◯日分まで」という鮮度が出ます。
システムの地図:どこで動いて、データはどこにあるか
このツールは「操作画面」「履歴の倉庫」「情報の取り込み口」の3つが、それぞれ別の場所で連携して動いています。 少し技術的ですが、“アプリ”と“データ”を分けて置くという考え方は、 いろんなツールに共通する大事な設計です。

Streamlit Community Cloud
操作画面(アプリ)
担当者が触る画面そのもの。インターネット上に置いてあり、担当者は配られたURLをブラウザで開くだけ。自分のPCに何かをインストールする必要はありません。
Supabase(クラウドDB)
履歴の倉庫
約11年・64万曲のオンエア履歴が入った倉庫。アプリとは“別の場所”に置いてあるのがポイント。だから誰がどこから開いても同じ最新データを見られ、担当者のPCを閉じてもデータは生き続けます。
NOA サイト → クローラー
情報の取り込み口
最新のオンエア情報の出どころ。「更新」ボタンを押したときだけクローラーが動き、足りない日数分を取りに行って倉庫に足します。毎朝自動で動かす手もありましたが、“押したときだけ動く”シンプルな形を選びました。
「アプリ」と「データ」を分けると、何がうれしい?
もしデータをアプリの中に閉じ込めると、担当者のPCでしか使えず、そのPCを閉じたら止まってしまいます。 データを別の倉庫(クラウド)に置くことで、誰がどこから開いても同じ最新データが見られ、24時間いつでも使えるようになります。 今回のツールは、担当者は配られたURLを開くだけ。準備もインストールもいりません。
作る前に決めた6つのルール(=要件定義のキモ)
AIやプログラムは、指示したとおりにしか動きません。逆にいえば「どんなルールで作るか」がこのツールの良し悪しを決めます。現場のことを考えて実際に決めた、大事なルールを6つ紹介します。

最後の選曲判断は、必ず人間がする
このツールがやるのは「この曲、最近かかっていますよ」という注意喚起まで。差し替えるかどうかはディレクターが決めます。何を大事にするかは番組ごとの判断で、機械に決めさせるものではないからです。第1回・第2回と同じ、いちばん大事な考え方です。
倉庫の“鮮度”を必ず見せる
結果画面に「DBは◯月◯日分まで」と必ず表示します。倉庫が古いまま『被りゼロ』と出ても、それは“最近の分が入っていないだけ”かもしれない。古いデータで安心してしまう事故を防ぐための、いちばん現実的な工夫です。
「見落としゼロ」は保証しない、と正直に伝える
生演奏やジングルなど、そもそもNOAに載らない曲は倉庫に入らず『履歴なし』と出ます。表記ゆれ対策も3段構えで頑張りますが、100%ではありません。できないことを正直に共有するのも、道具の信頼の一部です。
曲名だけで判定しない
世の中には同じ曲名の“別の曲”がたくさんあります。曲名だけで照合すると、無関係な曲を被りと誤検出してしまう。だから必ず曲名とアーティスト名をセットで突き合わせます。
相手のサイトに迷惑をかけない
情報を集めるとき、NOAサイトへは決められた間隔(数秒に1回)を空けてアクセスし、サイトが定めたルール(robots.txt)も守っています。便利さのために相手へ負担をかけないのは、この手のツールの最低限のマナーです。
AIは任意。鍵は保存も送信もしない
表記ゆれを見極めるAI(Gemini)は“使いたいときだけ”。その合言葉(APIキー)は画面で毎回入力する方式で、どこにも保存せずサーバーにも送りません。AIなしでも、候補を『要確認』として見せる形でちゃんと動きます。第2回と同じ設計思想です。
うっかりの確認は機械に。最後の選曲は人間に。
第3回のツールがやっているのは、あくまで「被っていないかの“確認作業”」です。 11年分・64万曲の履歴と一瞬で照らし合わせ、人の記憶では追いきれない“うっかり被り”を拾い上げます。 そして「この曲でいく」という最後の判断は、必ず人間が行う。 AIは仕事を奪う道具ではなく、人がミスなく、本当に大切な判断に集中するための“相棒”です。第1回・第2回と、根っこは同じ考え方なんです。

※ この仕組みは、実際に動くオンエア楽曲 重複チェックツール(Python + Streamlit + Supabase 製)として作られています。
