0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude APIでエンジニアへのアプローチ文を自動生成した【Python】

0
Last updated at Posted at 2026-07-08

はじめに

こんにちは。ITフィールドセールスをしている長井洸太です。

これまでの記事で、GitHub API・Qiita APIを使ってエンジニア候補者を自動収集する仕組みをご紹介してきました。

ただ、候補者リストが集まっても「一人ひとりに合わせた文面を考える」のが一番時間のかかる作業でした。同じテンプレ文を全員に送ると返信率が露骨に下がるので、プロフィールを見ながら手打ちしていたのですが、100人単位になると現実的ではありません。

そこで、収集したプロフィール情報をもとに Claude API でアプローチDM文を自動生成する処理を組み込みました。


作ったもの

github_engineer_finder.py に組み込んだ generate_dm() という関数です。

候補者1人分のプロフィール(名前・場所・自己紹介・使用言語・リポジトリ数)を渡すと、Claudeが200文字以内の自然なDM文を返してくれます。--generate-dm フラグを付けて実行するだけで、検索〜DM生成〜保存までが1コマンドで完結します。


必要なもの

pip install anthropic python-dotenv

.env に以下を設定します。

CLAUDE_API_KEY=sk-ant-xxxxx
SALES_COMPANY=自社名
SALES_NAME=担当者名
SALES_ROLE=役職

SALES_COMPANY 等はプロンプトに埋め込まれ、DM文の「送信者情報」として使われます。


コード(抜粋)

def generate_dm(profile: dict) -> str:
    """候補者プロフィールからアプローチDM文を生成する"""
    import anthropic

    client = anthropic.Anthropic(api_key=CLAUDE_KEY)

    name     = profile.get("name") or profile.get("login", "")
    bio      = profile.get("bio") or "情報なし"
    langs    = ", ".join(profile.get("top_languages", [])) or "不明"
    repos    = profile.get("public_repos", 0)
    location = profile.get("location") or "不明"

    prompt = f"""
あなたはITフィールドセールス担当者です。
以下のGitHubエンジニアに向けた、自然で簡潔なアプローチDM文を日本語で作成してください。

【候補者情報】
- 名前: {name}
- 場所: {location}
- 自己紹介: {bio}
- 主な使用言語: {langs}
- 公開リポジトリ数: {repos}

【送信者情報】
- 会社名: {SALES_COMPANY}
- 担当者名: {SALES_NAME}
- 役職: {SALES_ROLE}

【条件】
- 200文字以内
- 売り込み感を出さない
- 相手の技術スタックに触れる
- 返信しやすい一言で締める
""".strip()

    msg = client.messages.create(
        model="claude-haiku-4-5-20251001",
        max_tokens=400,
        messages=[{"role": "user", "content": prompt}],
    )
    return msg.content[0].text.strip()

ポイントは、プロフィール情報をそのままJSONで渡すのではなく、プロンプト内で「送信者情報」と「条件」を明示しているところです。条件を細かく書くほど、テンプレっぽさが消えて自然な文面になります。

モデルは claude-haiku-4-5-20251001 を使っています。DM文程度の短い生成であれば十分な精度が出て、コストも抑えられます。


使い方

# Pythonエンジニアを検索してDM文も自動生成
py -3 -X utf8 scripts/sales/github_engineer_finder.py --language "Python" --japan --max-results 3 --generate-dm --output both

検索結果とDM文は Earning/sales/github/ にCSVとMarkdownで保存されます。


出力サンプル

## 3. exampleuser (@exampleuser)
- 場所: Tokyo
- 自己紹介: Backend engineer / Python, Go / OSS好き
- 使用言語: Python / Go / Shell
- リポジトリ数: 42 / フォロワー: 118
- GitHub: https://github.com/exampleuser

**アプローチ文:**
> はじめまして。ITフィールドセールスの長井と申します。
> PythonとGoでOSS活動をされているのを拝見し、ご連絡しました。
> 技術のお話だけでも、もしよろしければ少しお時間いただけると嬉しいです。

やってみてわかったこと

テンプレ感が消えると返信率が変わる

「〇〇様、突然のご連絡失礼いたします」から始まる定型文と比べて、相手の技術スタックに一言触れるだけで返信率が体感で上がりました。Claudeにプロフィールを渡すだけでこの一言が自動で入るのは、地味に大きい効果でした。

プロンプトの「条件」欄が命

最初は候補者情報だけを渡していたのですが、それだと丁寧すぎる営業文になりがちでした。「売り込み感を出さない」「200文字以内」「返信しやすい一言で締める」と明文化してから、文面の質が安定しました。

生成後に人間のチェックは必須

自己紹介文が空欄の候補者だと、Claudeが無理に一般的な文面を作ってしまうことがあります。全件そのまま送るのではなく、dm_text が薄い候補者は手動で書き直すか、送信対象から外すようにしています。

コストは想像より小さい

Haikuモデルで200文字程度の生成なので、100人分まとめて生成してもAPI費用はごくわずかでした。件数を気にせず生成できるのは助かります。


おわりに

GitHub / Qiita APIで候補者を集める部分と、Claude APIで文面を作る部分を組み合わせたことで、「発掘してからアプローチするまで」のリードタイムがかなり短縮できました。

次回はGeminiとClaudeを使い分ける基準について、実体験ベースで書く予定です。

毎日X(Twitter)・Instagram・LinkedInで自動化ツールや開発の話を投稿しています。ぜひ繋がりましょう!


参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?