【要約】Google Ads RSA 日本語文字数制限と事前バリデーション実装 — 全角2カウント問題で全滅した話 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
- ・全角文字が2カウントとして計算される。
- ・管理画面と異なり、API経由ではリアルタイムの警告が出ない。
- ・事前検証がないと、バッチ処理時に
string_length_error: TOO_LONGでリクエストが全滅する。 - ・具体例:47文字の説明文が96カウントとなり、上限90を超過した。
// Approach
1.API呼び出し前のバリデーションレイヤーを構築。
2.
unicodedata.east_asian_width() を活用。3.
W または F を2カウント、他を1カウントとして計算。4.
_count_ads_chars() 関数により、半角カナ等の誤判定を回避。5.ヘッドライン(30カウント)と説明文(90カウント)の制限を検証。
// Result
- ・APIリクエスト前にエラーを検知。
- ・不要なAPIコールを削減。
- ・エラー時に「どのテキストが何カウント超過か」を明示可能。
- ・バッチ処理における運用安定性を向上。
Senior Engineer Insight
>
仕様の理解と、コードによる検証は別物である。外部APIを利用する際は、API側の挙動を模倣したバリデーションが不可欠。unicodedata を用いた実装は、単純な判定より精度が高く実戦的。バッチ処理における早期リターンの重要性を示している。