はじめに
皆さん、こんにちは!今回は、Microsoft Outlookに自動添削機能を追加する方法をご紹介します。この機能を使えば、メールを書くときに文章を自動でチェックし、よりプロフェッショナルな文面に仕上げることができます。
初心者の方でも理解できるように、一つ一つのステップを丁寧に解説していきますので、ぜひ最後までお付き合いください。
デモ動画
OutlookのVBAとPythonでワンぽちメール添削ボタンを作る②
— Maki@Sunwood AI Labs. (@hAru_mAki_ch) July 21, 2024
こんな舐めた内容からいい感じのメールを作成してもらった!!(gpt-4o-mini)
プロンプトとフォーマットの調整が必要だけど大枠はできた!! https://t.co/H0PBMnqoqf pic.twitter.com/69pMnj8FNJ
システム概要
まずは、今回作成するシステムの全体像を見てみましょう。
- ユーザーがOutlookで添削ボタンをクリックします。
- OutlookがメールのテキストをPythonサーバーに送信します。
- PythonサーバーがOpenAI APIを使ってテキストを添削します。
- 添削されたテキストがOutlookに返され、メール本文が更新されます。
では、この素晴らしいシステムを一緒に作っていきましょう!
必要なツールとライブラリ
まず、必要なツールとライブラリを準備しましょう。以下のものが必要になります:
- Microsoft Outlook(インストール済みであることを確認してください)
- Python 3.7以上(まだの方は公式サイトからダウンロードしてインストールしてください)
- FastAPI(Pythonのウェブフレームワーク)
- uvicorn(ASGIサーバー)
- litellm(OpenAI APIを簡単に使うためのライブラリ)
- python-dotenv(環境変数を管理するためのライブラリ)
- Visual Studio Code(または好みのコードエディタ)
これらのツールやライブラリは、システムの各部分を構築するために使用します。Pythonのライブラリは後ほどインストール方法を説明しますので、今はOutlookとPythonがインストールされていることを確認しておいてください。
Pythonバックエンドの準備
それでは、Pythonを使ってバックエンドサーバーを作成していきましょう。このサーバーがOutlookとOpenAI APIの橋渡し役になります。
必要なライブラリのインストール
まず、必要なPythonライブラリをインストールします。コマンドプロンプトまたはターミナルを開いて、以下のコマンドを実行してください:
pip install fastapi uvicorn litellm python-dotenv
このコマンドで、FastAPI、uvicorn、litellm、python-dotenvがインストールされます。
プロジェクトフォルダの作成
次に、プロジェクト用のフォルダを作成します。デスクトップや任意の場所に「outlook_addon」というフォルダを作成し、その中に移動してください。
環境変数の設定
OpenAI APIを使用するために、APIキーを安全に管理する必要があります。プロジェクトフォルダ内に.env
という名前のファイルを作成し、以下の内容を記述してください:
OPENAI_API_KEY=your_api_key_here
your_api_key_here
の部分を、実際のOpenAI APIキーに置き換えてください。
FastAPIサーバーの作成
では、いよいよPythonコードを書いていきます。プロジェクトフォルダ内にoutlook_addon_fastapi.py
という名前でファイルを作成し、以下のコードを入力します:
import os
from dotenv import load_dotenv
from fastapi import FastAPI, HTTPException, Request
from pydantic import BaseModel
from loguru import logger
from litellm import completion
# .envファイルを読み込む
load_dotenv()
app = FastAPI()
class EmailRequest(BaseModel):
email_text: str
async def process_correction(text: str):
try:
# LitellmでGPT-4を使用してメールを添削
response = completion(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "あなたは専門的なメール編集者です。与えられたメールの内容を考慮して適切なメールの文章を作成して"},
{"role": "user", "content": f"以下のメールを作成してください:\n\n{text}"}
]
)
# 添削されたメール本文を取得
corrected_email = response.choices[0].message.content
# 添削結果を整形
corrected_email = f"添削結果:\n\n{corrected_email}\n\n(この文章はAIによって添削されました)"
return corrected_email
except Exception as e:
logger.error(f"エラーが発生しました: {str(e)}")
raise HTTPException(status_code=500, detail=str(e))
@app.post("/correct_email")
async def correct_email(request: EmailRequest):
logger.info(f"リクエストを受信 (/correct_email): {request}")
corrected_email = await process_correction(request.email_text)
return {"corrected_email": corrected_email}
@app.post("/correct")
async def correct_text(request: Request):
logger.info(f"リクエストを受信 (/correct)")
try:
body = await request.json()
text = body.get("text") or body.get("email_text")
if not text:
raise ValueError("テキストが見つかりません")
corrected_text = await process_correction(text)
return {"corrected_text": corrected_text}
except ValueError as ve:
logger.error(f"バリデーションエラー: {str(ve)}")
raise HTTPException(status_code=422, detail=str(ve))
except Exception as e:
logger.error(f"エラーが発生しました: {str(e)}")
raise HTTPException(status_code=500, detail=str(e))
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
このコードは、FastAPIを使用してWebサーバーを作成し、メール本文を受け取って添削するエンドポイントを提供します。GPT-4を使用して実際の添削処理を行い、結果を返します。
サーバーの起動
Pythonサーバーを起動するには、コマンドプロンプトまたはターミナルでプロジェクトフォルダに移動し、以下のコマンドを実行します:
python outlook_addon_fastapi.py
これで、localhost:8000でサーバーが起動します。
Outlook VBAマクロの作成
次に、Outlook側の設定を行います。VBAマクロを使って、Pythonサーバーと通信する機能を実装します。
VBAエディタを開く
- Outlookを起動します。
- Alt+F11キーを押してVBAエディタを開きます。
JsonConverter モジュールの追加
JSONデータを扱うために、外部のモジュールを追加します:
- VBA-JSON のGitHubページにアクセスします。
- 「Code」ボタンをクリック→「Download ZIP」を選択してダウンロードします。
- ダウンロードしたZIPファイルを解凍します。
- VBAエディタの「ファイル」メニュー→「ファイルのインポート」を選択します。
- 解凍したフォルダ内の
JsonConverter.bas
ファイルを選択してインポートします。
新しいモジュールの追加
- VBAエディタの「挿入」メニューから「モジュール」を選択します。
- 新しく作成されたモジュールに以下のコードを入力します:
Sub AutoCorrectWithLLM()
On Error GoTo ErrorHandler
Dim olItem As Outlook.MailItem
Set olItem = Application.ActiveInspector.CurrentItem
' HTTPリクエストを送信するためのオブジェクトを作成
Dim xmlhttp As Object
Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP")
' ローカルサーバーにリクエストを送信
xmlhttp.Open "POST", "http://localhost:8000/correct", False
xmlhttp.setRequestHeader "Content-Type", "application/json"
' メール本文をJSONとして送信
Dim requestBody As String
requestBody = "{""text"": """ & Replace(Replace(olItem.Body, """", """"""), vbCrLf, "\n") & """}"
Debug.Print "Request Body: " & requestBody
xmlhttp.Send requestBody
Debug.Print "Response Status: " & xmlhttp.Status
Debug.Print "Response Text: " & xmlhttp.responseText
' レスポンスを取得して本文を更新
If xmlhttp.Status = 200 Then
Dim response As Object
Set response = JsonConverter.ParseJson(xmlhttp.responseText)
Debug.Print "Before update: " & olItem.Body
olItem.Body = response("corrected_text")
olItem.Save
Debug.Print "After update: " & olItem.Body
MsgBox "メール本文が更新されました。", vbInformation
Else
MsgBox "Error: " & xmlhttp.Status & " " & xmlhttp.statusText, vbExclamation
End If
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました: " & Err.Description & vbNewLine & _
"エラー番号: " & Err.Number & vbNewLine & _
"エラー行: " & Erl, vbExclamation
Debug.Print "Error: " & Err.Number & " - " & Err.Description & " at line " & Erl
Resume Next
End Sub
このコードは、メール本文をPythonサーバーに送信し、添削結果を受け取って本文を更新する機能を実装しています。
参照設定の確認
- VBAエディタの「ツール」メニューから「参照設定」を選択します。
- 以下の項目にチェックが入っていることを確認します:
- Microsoft Outlook XX.0 Object Library
- Microsoft XML, vX.0
- Microsoft Scripting Runtime (XX はOutlookのバージョン、vX.0 は利用可能な最新のXMLライブラリバージョン)
カスタムボタンの作成
最後に、Outlookのインターフェースに添削ボタンを追加します。
- Outlookのリボンを右クリックし、「リボンのユーザー設定」を選択します。
- 「開発」タブにチェックを入れ、「OK」をクリックします。
- 「開発」タブの「マクロ」ボタンをクリックし、作成したマクロ(AutoCorrectWithLLM)を選択して「実行」をクリックします。
これで、Outlookのリボンに「開発」タブが表示され、そこからマクロを実行できるようになりました。
使用方法
さあ、これで全ての準備が整いました!実際に使ってみましょう。
- Pythonサーバーを起動します(コマンドプロンプトで
python outlook_addon_fastapi.py
を実行)。 - Outlookで新しいメールを作成するか、既存のメールを開きます。
- 「開発」タブの「マクロ」ボタンをクリックし、AutoCorrectWithLLMマクロを選択して実行します。
- しばらく待つと、メール本文が自動的に添削され、更新されます。
この図は、ユーザーがボタンをクリックしてから添削結果が表示されるまでの流れを示しています。各コンポーネントがどのように連携しているかがよくわかりますね。
トラブルシューティング
システムを使用していて問題が発生した場合は、以下のチェックリストを参考にしてください:
-
Pythonサーバーが起動していない
-
コマンドプロンプトでPythonサーバーが正常に起動しているか確認してください。
-
エラーメッセージが表示されている場合は、必要なライブラリがすべてインストールされているか確認してください。
-
VBAマクロがエラーを返す
-
VBAエディタでデバッグモードを使用して、エラーが発生している箇所を特定してください。
-
参照設定が正しく行われているか再確認してください。
-
添削結果が返ってこない
-
インターネット接続を確認してください。
-
.env
ファイルにOpenAI APIキーが正しく設定されているか確認してください。 -
OpenAI APIの利用制限に達していないか確認してください。
-
添削結果の品質が低い
-
outlook_addon_fastapi.py
ファイル内のプロンプトを調整してみてください。システムメッセージやユーザーメッセージを変更することで、より適切な添削結果が得られる可能性があります。
セキュリティと注意事項
このシステムを使用する際は、以下の点に注意してください:
-
APIキーの管理 :
.env
ファイルに保存されているOpenAI APIキーを厳重に管理してください。このファイルをGitなどのバージョン管理システムにコミットしないよう注意しましょう。 -
データの取り扱い : メールの内容がインターネットを介してOpenAI APIに送信されます。機密情報を含むメールの添削には使用しないでください。
-
コスト管理 : OpenAI APIの使用には料金が発生します。使用量を把握し、必要に応じて制限を設けるようにしてください。
-
社内ポリシーの確認 : 会社のメールシステムにこのような機能を追加する場合は、事前に情報セキュリティ部門やIT部門の承認を得てください。
-
定期的な更新 : 使用しているライブラリやAPIを定期的に最新版にアップデートし、セキュリティ対策を怠らないようにしましょう。
まとめ
おめでとうございます!これで、Outlookに自動添削機能を実装する方法を学びました。この機能を使えば、メールの品質を向上させ、プロフェッショナルな印象を与えることができます。
ここで学んだ内容を基に、さらに機能を拡張することもできます。例えば:
- 添削オプションを追加し、フォーマルさのレベルや文体を選択できるようにする
- 特定の業界用語や社内用語を適切に使用するようにカスタマイズする
- 添削履歴を保存し、自分の文章力の向上を追跡する
などのアイデアを実装してみるのも面白いでしょう。
プログラミングの世界は広大で、常に新しいことを学ぶ機会があります。この記事を通じて、PythonとVBAの連携、APIの活用、自然言語処理の応用など、多くの技術に触れることができたのではないでしょうか。
ぜひ、この知識を活かして、より効率的で魅力的なシステムを作り上げてください。そして、新しいアイデアが浮かんだら、どんどんチャレンジしてみてください。技術の進歩は、あなたのような好奇心旺盛な人々によって支えられているのです。
Happy coding!
コメント