PythonでGoogle拡張機能を作る方法【初心者向けガイド】

PythonでGoogle拡張機能を作る方法【初心者向けガイド】

Google Chrome拡張機能はJavaScriptが中心の世界ですが、Pythonを使ってローカルサーバーと連携することで、Chrome拡張の可能性を大きく広げられます。本記事では、PythonとFlaskもしくはFastAPIを使ってChrome拡張機能と通信する方法を、初心者向けにやさしく解説します。


1. Chrome拡張機能の基本構造

拡張機能には最低限、次の3つのファイルが必要です:

  • manifest.json(拡張機能の設定ファイル)
  • popup.html(拡張機能のUI)
  • popup.js(JavaScriptの動作)

manifest.json の例

{
  "manifest_version": 3,
  "name": "Python連携拡張機能",
  "version": "1.0",
  "description": "Pythonサーバーと通信する拡張機能",
  "action": {
    "default_popup": "popup.html",
    "default_icon": {
      "16": "icon.png"
    }
  },
  "permissions": ["storage"],
  "icons": {
    "16": "icon.png"
  }
}

popup.html

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>拡張機能</title>
</head>
<body>
  <button id="fetchMessage">メッセージを取得</button>
  <p id="result"></p>
  <script src="popup.js"></script>
</body>
</html>

popup.js

document.getElementById("fetchMessage").addEventListener("click", () => {
  fetch("http://127.0.0.1:5000/api/message")
    .then((res) => res.json())
    .then((data) => {
      document.getElementById("result").textContent = data.message;
    });
});

2. PythonでAPIサーバーを作成

ここでは Flask と FastAPI の両方の方法を紹介します。

2-1. FlaskでAPIを作る

パッケージのインストール

pip install flask flask_cors

app.py(Flask)

from flask import Flask, jsonify, make_response
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

@app.route('/')
def home():
    return 'Flaskサーバーが起動しています'

@app.route('/api/message')
def get_message():
    response = make_response(jsonify({"message": "こんにちは!Pythonからのメッセージです。"}))
    response.headers["Content-Type"] = "application/json; charset=utf-8"
    return response

if __name__ == '__main__':
    app.run(port=5000)

2-2. FastAPIでAPIを作る

パッケージのインストール

pip install fastapi uvicorn

main.py(FastAPI)

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import JSONResponse

app = FastAPI()

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_methods=["*"],
    allow_headers=["*"],
)

@app.get("/")
def read_root():
    return "FastAPIサーバーが起動しています"

@app.get("/api/message")
def get_message():
    return JSONResponse(content={"message": "こんにちは!FastAPIからのメッセージです。"}, media_type="application/json;charset=utf-8")

実行コマンド

uvicorn main:app --port 5000 --reload

3. よくあるトラブルと対処法

  • アイコン画像が反映されない → PNGファイル(例:16×16)のパスが正しく指定されているか確認。
  • Not Found が表示される → Pythonアプリに / のルートを追加しておく。
  • 日本語が文字化けする → レスポンスヘッダーに charset=utf-8 を指定。
  • CORSエラー → Flask では flask_cors、FastAPI では CORSMiddleware を使用。
  • background.js のログが見えない → 拡張機能のページで「サービスワーカー」横の「インスペクト」で確認。

4. 拡張機能の応用アイデア

  • 画面内の選択テキストを取得してPythonで翻訳
  • Pythonでスクレイピングし、拡張機能で結果を表示
  • ChatGPT APIと連携した自動返信ツール
  • FlaskやFastAPIでPDF生成、拡張機能でダウンロード

まとめ

Chrome拡張機能とPython(FlaskまたはFastAPI)を組み合わせれば、フロントエンドとバックエンドの両方を自分でコントロールすることができます。

初心者でも「Hello World」から始めて、データ取得や外部API連携まで挑戦できるので、ぜひ試してみてください!

 data-src=

プログラミング情報サイト「In-Output」

当サイトではプログラミング言語の情報を発信しています。
HTMLやCSSのマークアップ言語の学習方法や解説、WordPressでのサイト開設方法、python等のプログラミング言語を使用して日頃の作業の効率化等、皆様のお役に立てるサイトを目指しています。

CTR IMG