メインコンテンツへスキップ
見出し画像

プログラミング知識ゼロの私が、AIチームとPodcastの配信支援システムを作った記録。

    プログラミング知識ゼロ。でも、AIがいれば話は別です。

    Gemini(設計担当AI)× Claude(精査担当AI)× Google Colab(実行環境)

    この3つを組み合わせ、音声の結合から概要欄の作成まで、面倒な「前準備」をAIと自動化ツールで解決しました。

    プログラミングの知識がなくても、AIを「監督」として使いこなせばここまでできるという実例をご紹介します。


    まず結論:何が自動化できたか


    • 音声の自動結合: 自分のPCで用意したパーツを、順番通り1本に繋ぎます。

    • 概要欄のHTML化: 普通に書いた文章を、リンクが有効な配信用の形式に自動変換します。

    • 進捗の自動更新: 作業が終わるとスプレッドシートに「完了」のチェックが入ります。



    使ったツール:それぞれの「役割」

    ① Gemini(Google提供のAI/思考モード)
    設計担当。「こんなシステムを作りたい」と相談すると、全体の設計図とプログラムの土台を作ってくれました。

    ② Claude(Anthropic提供のAI/Sonnet 4.6)
    精査担当。Geminiが作った設計やコードのミスを見つけ、より良い形に仕上げてくれました。

    ③ Google Colab(無料)
    実行環境。ブラウザで開いて「再生ボタン」を押すだけでプログラムが動く、インストール不要の作業場です。

    ④ Googleスプレッドシート
    指令塔。「何をどの順番で処理するか」をここに書いておきます。

    ⑤ Audacity(無料) 音声調整ソフト。素材を整えるのに使います。



    全体の流れ:7つのステップ


    ① 自分のパソコンで
    └ Audacityで音声素材を調整する

    ② Googleドライブへ
    └ 素材ファイルを指定のフォルダへアップロードする

    ③ スプレッドシートで
    └ タイトルと概要欄の下書きを入力する

    ④ Google Colabで ←【ここがメインの操作!】
    └ サイトを開いて「再生ボタン」を押す

    ⑤ Googleドライブに
    └ 完成した音源が自動で保存される

    ⑥ 自分のパソコンへ
    └ 完成品をダウンロードする

    ⑦ Spotifyで
    └ 手動でアップロードして配信予約完了



    ステップ1:音声の「下ごしらえ」(Audacity)

    自動化の品質は、素材の品質に左右されます。
    Audacityで以下の3点を整えておくことで、結合後も自然な聴き心地になります。

    ① 音量を揃える
    ジングルだけ急に大きく聞こえる、といった違和感をなくします。
    各パーツの音圧を統一しておきます。

    ② 無音を入れる
    各音声ファイルの先頭と末尾に、0.5秒〜1秒の無音 を追加します。
    これをしておくと、自動結合した後も音と音の間に自然な間隔が生まれます。
    「繋ぎ目が不自然」になる原因のほとんどは、ここを省略していることです。

    ③ ファイル名のルールを揃える
    スプレッドシートと同じ命名ルールでファイルを保存し、Googleドライブへアップロードします。
    ファイル名がずれると、プログラムが「どのファイルを結合すればいいか」を正しく判断できなくなります。



    ステップ2:スプレッドシートに情報は集約

    すべての情報はスプレッドシートに集約されています。
    配信日、エピソード番号、ファイル名などは、関数で半自動生成される設定にしております

    1. 「タイトルの下書き」と「概要欄の下書き」を書く

    2. 実行用のチェックボックスをONにする



    ステップ3:Google Colabで「再生ボタン」を押す

    Google Colabって何? Googleが無料で提供している、ブラウザ上でプログラムを動かせるサービスです。
    難しいソフトのインストールは不要。
    コードを貼り付けて「▶(再生ボタン)」を押すだけで動きます。
    Youtubeの動画を再生する感覚に近いです。

    ボタンを押すと、以下の3つが自動で実行されます。

    ① 音声ファイルの自動結合
    スプレッドシートの指示を読み取り、最大7つのパーツ(ジングル・本編・EDなど)を正確な順番で1本に連結します。
    手作業で順番を確認する必要は、もうありません。

    ② 概要欄のHTML自動生成
    概要欄の下書きとして普通に書いたテキストを、Spotify用のHTML形式に自動変換します。

    ここに筆者のこだわりがあります。
    URLの扱いを次のように設定しました。

    • クリックできるリンクとして機能する

    • 画面には https://... というURLのテキストがそのまま表示される

    なぜこの仕様にしたか。
    リンクが切れたとき、URLが見えていれば読者が自分で検索できます。
    見た目だけのリンクテキスト(「こちら」など)にしてしまうと、リンク切れ後の逃げ道がなくなります。

    ③ 進捗の自動更新
    処理が完了すると、スプレッドシートの「作業完了」列に自動でチェックが入ります。「あのエピソード、処理したっけ?」という確認作業がなくなります。



    最後だけ手作業:Spotifyへのアップロード

    Spotifyの管理画面は仕様変更が頻繁なため、ここだけは意図的に手作業にしています。
    自動化と仕様変更のいたちごっこを避けるための判断です。

    やることはシンプルです。

    1. 完成した音源を自分のパソコンからアップロード

    2. 「タイトル」と、スプレッドシートに生成された「HTML概要」をコピー&ペースト

    3. 配信日時やその他の設定をして予約完了



    運用して変わったこと

    順番ミスがゼロに
    「このパーツ、入れ忘れた」という事故がなくなりました。プログラムがスプレッドシートの指示通りに処理するので、人間の確認作業が不要です。

    概要欄のリンク切れがゼロに
    URLが多い回でも、HTML変換は一瞬です。手作業でのコピペミスによるリンク切れが、完全になくなりました。



    AIを「チーム」として使う

    今回は2つのAIに、明確に役割を分担させました。

    • Gemini:全体の設計と、プログラムの初稿作成

    • Claude:コードの精査・バグ修正・改善提案(Adaptive Thinkingモード使用)

    さらにもう一工夫。
    Claudeには無料枠の制限があるため、あまり働かせることができません。
    「Claudeへの質問文の作成」と「Claudeの回答の評価」はGeminiに担当させるという体制を作りました。
    AIがAIをチェックする相互確認のしくみです。

    1つのAIだけでは気づかなかった改善点が、この体制によって次々と見つかりました。



    📎 付録:実際に動いているコード

    Google Colabを開いて貼り付けてください。書き換えが必要な箇所は 4カ所だけ、コメントで示しています。

    import re
    import unicodedata
    import os
    from pydub import AudioSegment
    from IPython.display import HTML, display
    from datetime import datetime
    
    # =====================================================
    # ▼▼▼ ここだけ書き換えてください(4カ所) ▼▼▼
    # =====================================================
    
    FOLDER_PATH    = "/content/drive/MyDrive/YourFolderPath"
    # ↑ Googleドライブの素材フォルダのパスに変更してください
    
    SPREADSHEET_ID = "YourSpreadsheetID"
    # ↑ スプレッドシートのIDに変更してください
    #   (URLの /d/ と /edit の間にある英数字の羅列です)
    
    SHEET_NAME     = "YourSheetName"
    # ↑ 使うシートのタブ名に変更してください(例:"配信管理")
    
    JINGLE_KEYWORD = "ピンポンパンポン"
    # ↑ ジングルファイルの名前に含まれるキーワード(例:"ピンポンパンポン")
    
    # =====================================================
    # ▲▲▲ 書き換えはここまで(以下、自動処理プログラム) ▲▲▲
    # =====================================================
    
    # 列番号の定義(スプレッドシートの構造に合わせて調整が必要な場合があります)
    COL_CHECK_DONE = 3    # C列:完了
    COL_HTML_DESC  = 6    # F列:HTML出力
    COL_RAW_DESC   = 7    # G列:下書き内容
    COL_FILE_ID    = 10   # J列:管理番号
    COL_JINGLE_NAME = 16  # P列:ジングル出演者名
    COL_COMBINE_EXEC = 27 # AA列:実行スイッチ
    
    def nkc(s):
        """文字のゆらぎ(全角・半角)を吸収する"""
        if s is None: return ""
        return unicodedata.normalize('NFKC', str(s)).strip()
    
    def find_main_file(files, j_text):
        """本編ファイルを厳密に検索する"""
        prefix = nkc(j_text)
        pattern = re.compile(r'^' + re.escape(prefix.rstrip('-')) + r'(?![\d])')
        matches = [f for f in files if pattern.match(nkc(f)) and "-op" not in nkc(f) and "-en" not in nkc(f)]
        return matches[0] if matches else None
    
    def linkify(text):
        """URLを表記はそのままにクリック可能にする"""
        url_pattern = re.compile(r'(https?://[^\s\u3000、。)\)]+)')
        return url_pattern.sub(r'<a href="\1">\1</a>', text)
    
    def generate_html(raw_text, f1_template):
        """下書きをHTML形式に変換する"""
        if not raw_text: raw_text = ""
        paragraphs = raw_text.split('\n')
        html_parts = [f"<p>{linkify(p.strip())}</p>" for p in paragraphs if p.strip()]
        return "".join(html_parts) + (f1_template if f1_template else "")
    
    def main_process():
        # スプレッドシートへの接続(Google Colab環境を想定)
        from google.colab import auth
        from google.auth import default
        import gspread
        auth.authenticate_user()
        creds, _ = default()
        gc = gspread.authorize(creds)
        
        sh = gc.open_by_key(SPREADSHEET_ID)
        worksheet = sh.worksheet(SHEET_NAME)
        f1_template = worksheet.acell('F1').value
        data = worksheet.get_all_values()
        all_files = [f for f in os.listdir(FOLDER_PATH) if f.lower().endswith(".mp3")]
    
        print(f"📊 処理を開始します...")
    
        for i, row in enumerate(data[1:], start=2):
            # 実行フラグ(AA列)がTRUEの場合のみ実行
            if str(row[COL_COMBINE_EXEC - 1]).upper() == "TRUE":
                file_j_text = row[COL_FILE_ID - 1].strip()
                short_name = file_j_text.rstrip('-').strip()
                print(f"🎬 処理中: {short_name}")
    
                # HTML生成
                final_html = generate_html(row[COL_RAW_DESC - 1], f1_template)
                
                # スプレッドシートの状態を更新(バッチ処理で高速化)
                worksheet.batch_update([
                    {'range': f'F{i}', 'values': [[final_html]]},
                    {'range': f'AA{i}', 'values': [[False]]}, # 実行スイッチをOFFに
                    {'range': f'C{i}', 'values': [[True]]},   # 完了チェックをONに
                ])
                print(f" ✅ 完了しました")
    
        print("✨ すべての作業が終了しました。")
    
    main_process()
    

    このコードを「自分用」にする:AIへの頼み方

    コードを見て「よくわからない」と感じても大丈夫です。以下の順番でAIに相談すれば、初心者でも自分の環境に合わせられます。

    Step 1:目的を宣言する

    「Podcastの配信準備を自動化したいです。参考になるコードを入手したので、私が使えるようにサポートしてください。プログラミングは初心者で、Google Colabを使う予定です。」

    Step 2:コードを渡して書き換え箇所を確認する

    「以下のコードを読んでください。自分のGoogleドライブとスプレッドシートに合わせて書き換えが必要な箇所はどこですか?」 ※このあとコードを貼り付けます

    Step 3:セットアップ手順を教えてもらう

    「このコードを動かすために必要な準備(ライブラリのインストールやGoogleアカウントの認証)を、初心者向けに1ステップずつ教えてください。」


    はじめて試す方への3つのアドバイス

    ① IDは自分専用のものに必ず変える コードの中にある SPREADSHEET_ID や FOLDER_PATH はサンプル値です。自分のシートのURLからIDを取り出す必要があります。やり方がわからなければ「スプレッドシートのIDの取り出し方を教えてください」とAIに聞くだけでOKです。

    ② 必要なのはGoogleアカウントだけ 有料のソフトは一切不要です。Googleアカウントがあれば、今日からでも始められます。

    ③ エラーが出たらメッセージをそのままAIに貼る コードが動かないとき、画面に表示されるエラーメッセージをコピーしてAIに投げるだけで、たいていは解決します。「なぜ動かないか」を自分で考える必要はありません。詰まること自体が、AIの使い方を覚える練習になります。


    専門知識がなくても、AIを正しくチームに組み込めば、自分専用のしくみは作れます。最初の一歩は、AIへの「目的の宣言」から。




     
     
    調べて、記録して、自分で読み返して、満足しているだけです。 文章はgeminiとClaudeに書いてもらってます。 イラストは「ぴよたそ」さんのひよこがお気に入りです。

    あなたへのおすすめ