なぜnoteに連携するのか

SEOを軸にした集客型ブログを運営していると、検索流入を主な読者獲得手段とするため、Googleの評価が上がるまでに時間がかかるという課題があります。

一方、note.comは「フォロワーへのタイムライン配信」や「おすすめ(レコメンド)機能」による流入が強く、SEOとは異なる経路で読者に届きます。同じ記事を両媒体に公開することで、SEO流入 × note流入の両方を取り込み、トータルの露出を最大化できます。

ただし、同じ文章を手で2回貼り付けるのは手間がかかります。そこで今回は、microCMS APIとPythonを組み合わせて、note用の下書きテキストを自動生成する仕組みを構築しました。この記事では、その全体の流れと実装方法を解説します。

全体の構成図

今回のシステムは以下の4つのコンポーネントで構成されています。

  • 自分のブログ(Nuxt.js + Netlify) — 公開している技術ブログ本体
  • microCMS — コンテンツを管理するヘッドレスCMS。記事のHTML本文をAPIで提供する
  • Pythonスクリプトnote_draft_generator.py) — microCMSから記事を取得し、note用テキストとして出力する
  • note.com — クロスポスト先のプラットフォーム

処理の流れはシンプルです。Pythonスクリプトを実行すると、microCMSから最新記事のHTMLを取得し、Markdown形式のテキストファイルに変換して note_drafts/ フォルダに保存します。あとはnoteの投稿画面を開いて、そのテキストを貼り付けるだけです。

microCMSとは何か

ヘッドレスCMSの概念

ヘッドレスCMS(Headless CMS)とは、コンテンツの管理機能(バックエンド)だけを持ち、表示部分(フロントエンド)を持たないCMSのことです。WordPressのように「管理画面 + テーマ = ブログサイト」という一体型とは異なり、コンテンツをAPIで外部のどんなアプリにも渡せる構造をしています。

ブログを運営していると、microCMSで記事を書いて管理し、Nuxt.jsで作ったフロントエンドがAPIを叩いて記事を表示するという構成をとることがあります。このAPIを直接Pythonから呼ぶことで、コンテンツをnote用に再利用できます。

microCMSのAPIの仕組み

microCMSは、作成したコンテンツをREST APIとして公開します。エンドポイントのURLに X-API-KEY ヘッダーを付けてGETリクエストを送ると、JSON形式で記事の一覧や詳細が返ってきます。

記事本文はHTML文字列として格納されているため、そのままnoteに貼ることはできません。今回はこのHTMLをPythonで読みやすいテキストに変換します。

Pythonスクリプトの仕組み

実際に使用したスクリプト note_draft_generator.py の主要な部分を解説します。

必要なライブラリ

以下の2つを事前にインストールしてください。

pip install requests html2text
  • requests — HTTP通信を行うライブラリ。microCMS APIの呼び出しに使用
  • html2text — HTMLをMarkdown形式のテキストに変換するライブラリ

スクリプトの全体コード

import requests
import html2text
import os
from pathlib import Path

# microCMS APIの設定
API_URL = 'https://[サービスID].microcms.io/api/v1/blogs'
API_KEY = os.environ.get('MICROCMS_API_KEY')  # 環境変数から取得

def fetch_articles():
    res = requests.get(
        f'{API_URL}?limit=20',
        headers={'X-API-KEY': API_KEY}
    )
    res.raise_for_status()
    return res.json()['contents']

def html_to_text(html):
    converter = html2text.HTML2Text()
    converter.ignore_images = True
    converter.body_width = 0
    return converter.handle(html)

def save_draft(article):
    output_dir = Path('note_drafts')
    output_dir.mkdir(exist_ok=True)
    title = article['title']
    body = html_to_text(article.get('content', ''))
    content = f"【タイトル】\n{title}\n\n"
    content += "=" * 40 + "\n"
    content += body
    content += "=" * 40 + "\n"
    filename = output_dir / f"{article['id']}.txt"
    filename.write_text(content, encoding='utf-8')
    print(f'保存: {filename}')

if __name__ == '__main__':
    articles = fetch_articles()
    for article in articles:
        save_draft(article)
    print(f'完了: {len(articles)}件の下書きを生成しました')

note投稿の手順(ステップバイステップ)

  1. スクリプトを実行するpython note_draft_generator.py を実行すると、note_drafts/ フォルダにテキストファイルが生成されます。
  2. テキストファイルを開く:投稿したい記事のファイルを開き、内容を確認します。
  3. note.comを開く:「投稿する」→「テキスト」を選択します。
  4. タイトルを入力する:ファイルの【タイトル】欄の文字列をnoteのタイトル入力欄に貼り付けます。
  5. 本文を貼り付ける==== で囲まれた部分(本文)をコピー&ペーストします。
  6. 画像を追加する:必要に応じてアイキャッチ画像や本文中の画像を追加します。
  7. 公開する:タグを設定して「公開」ボタンを押せば完了です。

無料プランでも自動化できる範囲

noteの無料プランでは、RSS連携による自動投稿はできません。RSS連携機能はnote Pro(有料プラン)限定の機能です。

そのため今回の方法は「完全自動」ではなく、「下書き生成の自動化 + 手動でのnote貼り付け」という半自動の構成です。月に数本程度の投稿であれば、この半自動フローで十分対応できます。

  • できること:microCMSからの記事取得、テキスト変換、ファイル保存の自動化
  • できないこと(無料プラン):noteへの直接投稿、自動公開スケジューリング

応用:新記事投稿時に自動で下書きを生成する

webhook(ウェブフック)とは、特定のイベントが発生したとき、指定したURLにHTTPリクエストを送信する仕組みです。microCMSはwebhookに対応しており、管理画面から設定できます。

全体の構成案

  1. microCMSで記事を公開する
  2. microCMSがwebhookでPythonサーバーにPOSTリクエストを送る
  3. PythonサーバーがAPIを呼び出してテキストファイルを生成する
  4. 生成されたファイルをSlackやメールで通知する(任意)
from flask import Flask, request
app = Flask(__name__)

@app.route('/webhook', methods=['POST'])
def handle_webhook():
    import subprocess
    subprocess.run(['python', 'note_draft_generator.py'])
    return 'ok', 200

このサーバーをVPSやクラウド(Renderの無料プラン等)に置いておけば、記事を公開するたびに自動で下書きが生成されます。

まとめ

  • 自分のブログの記事をnoteに転載することで、SEO以外の流入経路を確保できる
  • microCMSのAPIとPythonの html2text ライブラリを使えば、HTML記事をnote用テキストに自動変換できる
  • APIキーは必ず環境変数で管理し、コードに直書きしない
  • noteの無料プランでは完全自動化は難しいが、下書き生成を自動化するだけでも作業時間を大幅に削減できる
  • 将来的にはmicroCMSのwebhookとFlaskを組み合わせて、公開トリガーで自動生成する構成に拡張できる

クロスポストは「一度書いた記事の価値を最大化する」ための有効な手段です。ぜひPythonスクリプトを活用して、効率よく両媒体への投稿を続けてみてください。