なぜ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投稿の手順(ステップバイステップ)
- スクリプトを実行する:
python note_draft_generator.pyを実行すると、note_drafts/フォルダにテキストファイルが生成されます。 - テキストファイルを開く:投稿したい記事のファイルを開き、内容を確認します。
- note.comを開く:「投稿する」→「テキスト」を選択します。
- タイトルを入力する:ファイルの【タイトル】欄の文字列をnoteのタイトル入力欄に貼り付けます。
- 本文を貼り付ける:
====で囲まれた部分(本文)をコピー&ペーストします。 - 画像を追加する:必要に応じてアイキャッチ画像や本文中の画像を追加します。
- 公開する:タグを設定して「公開」ボタンを押せば完了です。
無料プランでも自動化できる範囲
noteの無料プランでは、RSS連携による自動投稿はできません。RSS連携機能はnote Pro(有料プラン)限定の機能です。
そのため今回の方法は「完全自動」ではなく、「下書き生成の自動化 + 手動でのnote貼り付け」という半自動の構成です。月に数本程度の投稿であれば、この半自動フローで十分対応できます。
- できること:microCMSからの記事取得、テキスト変換、ファイル保存の自動化
- できないこと(無料プラン):noteへの直接投稿、自動公開スケジューリング
応用:新記事投稿時に自動で下書きを生成する
webhook(ウェブフック)とは、特定のイベントが発生したとき、指定したURLにHTTPリクエストを送信する仕組みです。microCMSはwebhookに対応しており、管理画面から設定できます。
全体の構成案
- microCMSで記事を公開する
- microCMSがwebhookでPythonサーバーにPOSTリクエストを送る
- PythonサーバーがAPIを呼び出してテキストファイルを生成する
- 生成されたファイルを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スクリプトを活用して、効率よく両媒体への投稿を続けてみてください。