📧
未使用のSendGridテンプレートを抽出する方法
課題
SendGridテンプレートを整理する際、テンプレートIDを1つ1つクリップボードにコピーしてプロジェクトディレクトリ内で参照されているかサーチすると時間が掛かる上に事故が起こりやすい。
要約
Pythonプログラムを用意して上記手順を自動実行する。
必要なもの
- SendGrid API キーの値(SG.xxxxxxx.xxxxxxxxxxxxxx)
- プロジェクトディレクトリ
手順
以下のシェルスクリプトを実行してローカル環境に全テンプレート情報を取得する。
% curl -X GET "https://api.sendgrid.com/v3/templates?generations=dynamic" -H "Authorization: Bearer SG.xxxxxxx.xxxxxxxxxxxxxx" > templates.json
以下のように全テンプレートの情報がJSON形式で保存される。
{
"templates": [
{
"id": "d-xxxxxxxxxxx",
"name": "entry-complete",
"generation": "dynamic",
"updated_at": "2023-09-06 06:46:35",
"versions": [
{
"id": "xxxxxx-xxxxx-xxxxx",
"template_id": "d-xxxxxxxxxxx",
"active": 1,
"name": "entry-complete",
"generate_plain_content": true,
"subject": "会員登録完了",
"updated_at": "2023-09-06 06:49:42",
"editor": "code",
"thumbnail_url": ""
}
]
},
{
"id": "d-xxxxxxxxxxx",
"name": "contact-complete",
"generation": "dynamic",
"updated_at": "2023-09-06 06:46:35",
"versions": [
{
"id": "xxxxxx-xxxxx-xxxxx",
"template_id": "d-xxxxxxxxxxx",
"active": 1,
"name": "contact-complete",
"generate_plain_content": true,
"subject": "問い合わせ完了",
"updated_at": "2023-09-06 06:49:42",
"editor": "code",
"thumbnail_url": ""
}
]
}
]
}
自動実行用のPythonプログラムファイルを作成する。
プロジェクトディレクトリ内でgrepが実行されるように調整が必要。
import json
import subprocess
# SendGridのテンプレート情報を含むJSONファイルを読み込む
with open('templates.json', 'r') as f:
templates = json.load(f)
unused_templates = []
# プロジェクトディレクトリ内で各テンプレートに対してgrepを実行
for template in templates.get('templates', []):
template_id = template['id']
result = subprocess.run(
['grep', '-rl', template_id, './project/sources/app'], capture_output=True, text=True)
# grepの結果が空の場合、そのテンプレートIDは使用されていない
if not result.stdout:
unused_templates.append(template_id)
print("Unused template IDs:")
for template_id in unused_templates:
print(template_id)
Pythonプログラムを実行する。
未使用のテンプレートIDだけが出力される。
プロジェクトディレクトリで検索できていないと使用・未使用を問わず全テンプレートが出力される。
t-tomo :: ~ » python3 search_unused_templates.py
Unused template IDs:
d-xxxxxxxxxx1
d-xxxxxxxxxx2
d-xxxxxxxxxx3
t-tomo :: ~ »
ポイント
プロジェクトディレクトリの指定時にライブラリやフレームワークの階層を含むとサーチ(grep
)に時間が掛かるので注意
Discussion