はじめに
ビジネスでよく使う定型メール、特に納品メールや請求書の作成って、結構手間がかかるものだ。顧客ごとに名前や商品名、金額などを反映させる必要があり、これが自動化できれば業務効率は一気に上がるだろう。
最近では、ChatGPT でメール作成をする方法も注目されている。わたしも試しに ChatGPT にメールを書いてもらう ことをやってみた。しかし、再現性や安定性の面で少し不安を感じた(やれやれ)。そこで、Google Colab と Python を使って、もっと安定的かつ効率的に定型メールを自動生成する方法を模索してみたので、紹介したい。
納品メールのフォーマットを作成してみる
まずは、以下のような納品メールのフォーマットを用意した。
メールフォーマットは細かい部分まで配慮して作りましょう。後で修正するのは面倒ですからね。
** 納品書 **
{customer_name} 様
納品日: {delivery_date}
ご注文の作品が仕上がりましたので、以下の通り納品させていただきます。
| 作品名 | 単価 | 数量 | 合計金額 |
|-------------|---------------|-------|----------------|
| {item_name} | {price} 円 | {quantity} | {total_price} 円 |
ご不明な点がございましたら、ご連絡ください。
次回のご利用をお待ちしております。
おりがみオフィス
東京都XX区XXX町2-2-1
山田花子
電話:03-XXXX-XXXX
メール:hanako.yamada_origami@xxx.com
変数と納品データを確認する
このフォーマットに埋め込む変数は以下の通りだ。
- 顧客名
- 納品日
- 作品名
- 単価
- 数量
- 合計金額
納品データは Google スプレッドシート に保存しておき、こんな感じになっている。
| ID | 顧客名 | 納品日 | 作品名 | 単価 | 数量 |
|----|--------|----------------|-------------|--------|-----|
| 1 | 田中 | 2024年12月1日 | 空飛ぶ豚 | 1,000 | 4 |
| 2 | 佐藤 | 2024年12月15日 | ブログ攻略法 | 15,000 | 1 |
Google Colab で実現してみた
Google Colab を使うことで、次のようなメリットがある。
- 無料で利用可能な Python 実行環境:インストール不要で、ブラウザ上で Python コードを実行できる。
- Google スプレッドシートとの連携:データをインラインで表示し、確認しながら作業できる。
- 自動データ取得:顧客名に一致するデータから、作品名や納品日を自動的に取得することが可能だ。
- 自動計算:単価と数量から合計金額を自動で計算してくれる。
- GUI の活用:フォーム入力と「納品書を作成」ボタンを作成し、直感的な操作が可能になる。
実装のステップを解説する
では、Google Colab で納品書を自動生成するための具体的な手順を紹介しよう。
1. ライブラリをインポートする
まずは、必要なライブラリをインポートする。
from IPython.display import display, IFrame
import ipywidgets as widgets
import pandas as pd
- IPython.display:Google スプレッドシートをインライン表示するために使う。
- ipywidgets:インタラクティブなウィジェットを作成するためのライブラリだ。
- pandas:データの読み込みと操作に使用する。
必要なライブラリは最初にまとめてインポートしておくと、後で困らないですよ。
2. Google スプレッドシートからデータを取得する
次に、Google スプレッドシートの CSV エクスポート URL を使ってデータを取得する。
csv_url = "あなたのスプレッドシートのCSVエクスポートURL"
# スプレッドシートデータを取得
try:
data = pd.read_csv(csv_url)
except Exception as e:
print("スプレッドシートのデータ取得に失敗しました:", e)
data = pd.DataFrame() # 空のデータフレームを作成
- 注意:スプレッドシートの共有設定で「リンクを知っている全員に閲覧を許可」する必要がある。
- 補足:スプレッドシートへのアクセスを自分のみまたは特定のアカウントに限定したい場合、認証のための追加コードが必要になる。本稿では詳細を割愛する。
3. 顧客データの取得関数を定義する
顧客名を入力すると、その顧客に対応するデータを取得する関数を作成する。
def get_customer_data(customer_name):
if {'顧客名', '納品日', '作品名', '単価', '数量'}.issubset(data.columns):
matched_row = data[data['顧客名'] == customer_name]
if not matched_row.empty:
return {
'納品日': matched_row.iloc[0]['納品日'],
'作品名': matched_row.iloc[0]['作品名'],
'単価': matched_row.iloc[0]['単価'],
'数量': matched_row.iloc[0]['数量']
}
return {'納品日': '未設定', '作品名': '', '単価': 0.0, '数量': 1}
4. 入力フォームを作成する
ipywidgets を使用して、ユーザーが入力できるフォームを作成する。
# 入力フォームウィジェットの作成
customer_name_input = widgets.Text(
value='',
placeholder='顧客名を入力してください',
description='顧客名:',
disabled=False
)
delivery_date_input = widgets.Text(
value="",
description='納品日:',
disabled=True # 納品日は顧客名から自動取得
)
item_name_input = widgets.Text(
value='',
description='作品名:',
disabled=True # 作品名は顧客名から自動取得
)
price_input = widgets.FloatText(
value=0.0,
description='単価 (円):',
disabled=True # 単価は顧客名から自動取得
)
quantity_input = widgets.IntText(
value=1,
description='数量:',
disabled=True # 数量は顧客名から自動取得
)
5. イベントハンドラを設定する
顧客名が変更されたときと、ボタンがクリックされたときのイベントハンドラを設定する。
def on_customer_name_change(change):
customer_name = change['new']
customer_data = get_customer_data(customer_name)
delivery_date_input.value = customer_data['納品日']
item_name_input.value = customer_data['作品名']
price_input.value = customer_data['単価']
quantity_input.value = customer_data['数量']
customer_name_input.observe(on_customer_name_change, names='value')
submit_button = widgets.Button(
description='納品書を作成',
button_style='success',
icon='check'
)
def create_invoice(b):
customer_name = customer_name_input.value
delivery_date = delivery_date_input.value
item_name = item_name_input.value
price = price_input.value
quantity = quantity_input.value
total_price = price * quantity
# 納品書フォーマットを生成
invoice = f"""
** 納品書 **
{customer_name} 様
納品日: {delivery_date}
ご注文の作品が仕上がりましたので、以下の通り納品させていただきます。
| 作品名 | 単価 | 数量 | 合計金額 |
|------------|-------------|-------|--------------|
| {item_name} | {price:,.0f} 円 | {quantity} | {total_price:,.0f} 円 |
ご不明な点がございましたら、ご連絡ください。
次回のご利用をお待ちしております。
おりがみオフィス
東京都XX区XXX町2-2-1
山田花子
電話:03-XXXX-XXXX
メール:hanako.yamada_origami@xxx.com
"""
# 出力結果を表示
with output_label:
output_label.clear_output()
print(invoice)
submit_button.on_click(create_invoice)
6. フォームとスプレッドシートを表示する
# 入力フォームの配置
form = widgets.VBox([
customer_name_input,
delivery_date_input,
item_name_input,
price_input,
quantity_input,
submit_button,
output_label
])
# スプレッドシートのインライン表示
iframe = IFrame(
src="あなたのスプレッドシートのURL",
width='100%',
height=400
)
# フォームとスプレッドシートを表示
display(iframe)
display(form)
なぜ ChatGPT ではなく Google Colab なのか?
ChatGPT でメール作成を試したことがある人も多いだろう。実際、わたしも ChatGPT にメールを書いてもらう ことを何度か試してみた。しかし、いくつかの課題に直面したのだ(やれやれ)。
- 再現性の不確実性:ChatGPT は内部のアップデートによって動作が変わることがあり、同じ プロンプト を使っても異なる結果になることがある。これでは、毎回安定した ビジネスメール を作成するのは難しいだろうか?
- 共有の難しさ:生成したメールやコードを他の人と共有する際に、制限がある。チームでの共有が必要な場合、これは大きな問題だ。
- 安定性の問題:大量のメールを生成する場合、API 制限やレスポンス時間の問題が生じることがある。
ChatGPTも便利ですが、業務で使うなら安定性が重要ですよね。
一方、Google Colab と Python を使うことで、これらの問題を解消できると考えた。
- 再現性の確保:コードが明示的に存在するので、常に同じ結果を得られる。
- 共有の容易さ:Google Colab のノートブックをチームメンバーと簡単に共有できる。
- 拡張性と柔軟性:必要に応じてコードを修正・拡張できるので、新しい要件にも対応しやすい。
もちろん、ChatGPT でメールを自動作成するにはどうしたらいいですか? と疑問に思う人もいるだろう。ChatGPT は強力なツールであり、営業メールやビジネスメールの プロンプト を工夫すれば、ある程度の成果は得られる。しかし、わたしにとっては、Google Colab の方が安定性と再現性の面でメリットが大きかった。
まとめ
定型メールの自動作成は、業務効率化の鍵を握っていると感じている。Google Colab と Python を活用することで、安定性と再現性を確保しつつ、効率的にメールを生成できたのは大きな発見だった。
- 手順が明確:コードによって手順が明確化され、他の人でも再現可能だ。
- データの一元管理:スプレッドシートでデータを一元管理でき、更新も容易だ。
- ユーザーフレンドリーなインターフェース:GUI を作成することで、プログラミング知識がなくても操作できる。
正直、ChatGPT でメールを作成するメリットは? と聞かれれば、アイデア出しや文章のヒントを得る点では有用だと思う。しかし、安定性や再現性を求めるなら、Google Colab と Python の組み合わせが強力だと実感した。
Gmail で定型文のメールを作成するには? と悩んでいる人も、この方法を試してみてはどうだろうか。
最後に
ChatGPT は確かに便利だが、すべてのタスクに最適とは限らない(当たり前か)。ツールは適材適所で使い分けるべきだと改めて感じた。Google Colab と Python を組み合わせることで、より安定した環境で業務を進められるのは大きなメリットだ。
ぜひ、この記事を参考にして、Google Colab を活用した定型メールの自動生成に挑戦してみてほしい。
定型メール自動生成の実践ポイント ビジュアルまとめ
メール自動生成に関するよくある質問
Google Colabを使うメリットは何ですか?
Google Colabのメリットは、無料で利用可能なPython実行環境を提供し、Google スプレッドシートとの連携が容易で、チームでの共有もスムーズにできる点です。また、ブラウザ上で動作するため、特別なソフトウェアのインストールも不要です。
プログラミング初心者でも使えますか?
はい、使えます。本記事で紹介しているコードをコピー&ペーストして使用することができます。また、GUIインターフェースを実装しているため、実際の使用時はフォームに入力するだけで済みます。ただし、カスタマイズする場合は基本的なPythonの知識が必要です。
大量のメールを一括生成することは可能ですか?
可能です。スプレッドシートにデータを用意しておけば、プログラムを少し修正することで一括生成が実現できます。ただし、実際にメールを送信する場合は、GmailなどのメールサービスのAPI制限に注意が必要です。
Instagramでフォローする
カフェ開業の日々や、コーヒーの魅力をInstagramでも発信中!
@ofuna_coffee をフォロー