---
name: es-coach
description: >-
  新卒本選考の履歴書・ES（エントリーシート）の設問に対し、self_introduce.md と entry_sheet.md の素材から
  回答の下書きを作成し、既存回答を採点基準で添削・修正する。志望動機、自己PR、ガクチカ、学生時代に力を入れたこと、
  研究内容、キャリアビジョン、入社後に挑戦したいこと、注目している技術・サービス、キャッチコピー、逆質問、弱み、
  文字数調整（○字以内に収める・削る・増やす）、ES添削、履歴書、エントリーシート、「企業名＋設問＋文字数」だけの
  指示（例:「MIXI 挑戦したいこと 500字」）が出たら、スキル名を言われなくても必ずこのスキルを使う。
  「この回答どう思う？」「もっと良くして」のような曖昧な添削依頼、企業の採用ページを調べて志望動機を書く依頼、
  entry_sheet.md への追記依頼もこのスキルの対象。書類選考を通過しやすい内容を狙い、骨子と完成稿はそれぞれ
  自動レビューで合格するまで直す（各段階で最大5回）。
---

# ES Coach

新卒本選考の ES 回答を「素材から作る」「既存回答を添削する」ためのスキル。
プロジェクトルートは `entry_sheet.md` があるディレクトリ（通常は cwd）。以下のパスはそこからの相対パス。

目標は「正しい文章」ではなく **書類選考を通過する ES**。採用担当が短時間で「会ってみたい」と判断できるように、評価してほしい一点を決め、企業の求める人物像に結びつけ、この人にしか書けない具体で差別化する（`references/rubric.md`「選考通過の観点」S1〜S6）。
そのために、**骨子（プラン）と完成稿（出力）は、ユーザーに見せる前に別のレビュアーが審査し、合格するまで直す（各段階で最大5回）**。手順は `references/review.md`。
また、**レビューやユーザーの指示で骨子・回答を直した内容は `history/` にナレッジとして蓄積し、作成時とレビュー時に必ず参照する**。手順は `references/knowledge.md`。

## 前提として知っておくこと

- 書き手は名古屋工業大学大学院 情報工学専攻の修士1年（2028年3月修了見込）。iOS ネイティブが主軸（約3年）、副次で React/FastAPI。研究は対話ロボット。
- **過去 ES はほぼインターン向け**で、長期インターン先（燈）は 2026年6月に終了している。そのまま流用すると「インターンでは〜したい」「現在従事しています」が残り、事実と時制がずれる。流用時は `references/style-guide.md` の変換表で必ず直す。
- 素材の正典は `self_introduce.md`（強み・エピソード）と `entry_sheet.md`（過去回答・研究・URL・経歴）。`README.md` は旧版なので読まない。
- ES は面接で深掘りされる。本人が説明できない数値や出来事を1つ書くと、その1つで信用を失う。使える数値は `references/material-index.md` の正典表にあるものだけ。

## 最初に読むもの

毎回:
1. `references/material-index.md`（素材の地図・正典数値・時系列表）
2. `python3 .claude/skills/es-coach/scripts/knowledge.py brief --company 企業名` を実行し、蓄積した教訓（`history/lessons.md`）とその企業の修正履歴を今回の作業ルールに加える。

`entry_sheet.md` は 78KB あるので全文 Read しない。`es_index.py` も引数なしの全体一覧は出さず、手順2の `--company` `--question` `--episodes --company` で必要な箇所だけ取り出す（全体一覧が要るのは、どの企業に何を書いたか分からないときだけ）。
参照ファイルは必要な節だけ読む。何度も読み直さない。

設問タイプが決まったら `references/question-types.md` の該当節。執筆後と添削時は `references/rubric.md`。骨子と完成稿のレビュー時は `references/review.md`。志望動機・挑戦したいこと・ビジョン・逆質問は `references/company-research.md`。文体で迷ったら `references/style-guide.md`。

## モード判定

| 入力 | モード |
|---|---|
| 設問（＋企業名、文字数） | A: 下書き作成 |
| 既存の回答文、または entry_sheet.md 内の回答を指す指示（「MIXI の興味ある技術を添削して」） | B: 添削 |
| 「前の回答を直して本選考用にして」など両方 | B で採点 → 13点未満なら A の骨子からやり直す |

不足情報は **1回にまとめて** 聞く。往復が増えると使われなくなる。聞く候補: 企業名、設問の原文、上限と表記（以内／約／以上）、職種、提出媒体（Web フォームか PDF か。改行の数え方が変わる）、燈を実名にするか「スタートアップ企業」にするか。分かるものは推測で進め、推測した点は報告の「確認事項」に書く。

## ワークフロー A: 下書き作成

### 1. 入力を確定する
設問原文はそのまま見出しに使うので、原文を確保する。上限表記から `count_chars.py` の `--mode` を決める（以内→within、約/程度→about、以上→atleast）。上限が無い設問は `question-types.md` の既定字数（志望動機・自己PR・ガクチカ 400、研究 500、キャッチコピー 30＋理由 200、プロダクト説明 800 まで）。

### 2. 類似の過去回答と、その企業の既存回答を見る
```bash
python3 .claude/skills/es-coach/scripts/es_index.py --question 挑戦       # 類似設問
python3 .claude/skills/es-coach/scripts/es_index.py --company MIXI        # 同じ企業に既に書いたもの
python3 .claude/skills/es-coach/scripts/es_index.py --episodes --company MIXI   # その企業で使用済みのエピソード
```
他社向けの良い回答は土台にできる。同じ企業では同じエピソードを2設問で使わない（読み手は全設問を続けて読む）。

### 3. 素材を選ぶ
`question-types.md` の該当節で軸を決め、`self_introduce.md` の該当エピソード（課題／行動／成果／学び）を1本選ぶ。自己PR・ガクチカはエピソード1本に絞る。過去回答で複数本を詰めたものは例外なく字数超過している。
数値は正典表からのみ。使い回し感を避けたいときは、企業別回答で未使用の「タスク約1か月短縮」や夏インターン3社（チームラボ・サイボウズ・kubell）を検討する。

### 4. 企業リサーチ（志望動機・挑戦したいこと・ビジョン・きっかけ・逆質問のみ）
まず `.claude/skills/es-coach/history/companies/企業名.md` があるか見る。あれば読んで使い、Web 検索は足りない情報があるときだけにする（`company-research.md` の手順0）。無ければ `references/company-research.md` の手順で WebSearch 2〜4回、WebFetch 2〜3ページ。固有名詞ごとに「事実・出典 URL・結べる素材」と、**求める人物像・バリュー・職種要件**を `$W/research.md` にメモし、最終報告に載せる（`$W` は `review.md` の作業ディレクトリ）。自己PR・ガクチカ・研究では必須ではないが、同じ企業で既にリサーチ済みならメモを使い回して S2（求める人物像との一致）に活かす。

### 5. 骨子を作る → 自動レビュー（段階 P）
書き始める前に、次を `$W/plan.md` に書く。字数配分を先に決めると、後の削り作業がほぼ無くなる。配分の目安は `question-types.md` の各節。
- 設問原文と、そこに含まれる問いの分解
- 結論1文
- 評価してほしい一点（採用担当に残したい印象。例:「チームの開発速度を仕組みで上げられる人」）
- 対応させる求める人物像・バリュー・職種要件（根拠はリサーチメモ）
- 使うエピソード・数値と、差別化ポイント（この人にしか書けない判断・工夫）
- 段落ごとの役割と目安字数

**自動レビュー（段階 P）**: `references/review.md` に従い、plan.md を自分でチェックリスト判定 → FAIL なら直して再判定。合格するまで、**最大5回**。記録は `$W/reviews/plan_r{N}.md`。「要修正」を直したら1件ずつ `knowledge.py add --stage plan --source review --round N ...` で記録する。5回で合格しなければ、残りの指摘を添えて骨子をユーザーに示し、判断を仰ぐ。

### 6. 書く
`style-guide.md` に従う。です・ます調、結論ファースト、一文80字目安、1段落1役割、インターン向け表現を使わない、社名は直書き。AIが書いたと分かる癖（普通の語を「」で強調する、決め台詞で締める、抽象語で飾る、ダッシュやコロンで区切る）を避け、本人が面接でそのまま話しても自然な文章にする。

### 7. 機械チェックとセルフチェック
本文を `$W/draft.txt` に保存し、機械チェックを通す。文字数・一文の長さ・口癖・誇張・NG表現・AIらしい表現をまとめて判定する。
```bash
python3 .claude/skills/es-coach/scripts/es_lint.py --file $W/draft.txt --limit 500 --mode within
```
ERROR が無くなるまで直す。WARN は目で確認する。文字数が OVER なら `style-guide.md` の「削る優先順位」で削る。SHORT なら「増やす順序」で行動の具体を足す（感想は足さない）。
次に、lint で判定できない項目（設問への回答、具体性、構成、企業接点、一貫性、S1〜S6）を自己採点し、1点以下の項目と ✕ を直す。13/16 未満なら骨子に戻る。

### 7.5 自動レビュー（段階 O）
`review_bundle.py` でレビュー資料を作り、`references/review.md` に従って Sonnet のレビュアーに審査させる → FAIL なら直し、`es_lint.py` を再度 OK にしてから再レビュー（2回目以降は差分だけ審査）。合格するまで、**最大5回**。記録は `$W/reviews/output_r{N}.md`。「要修正」を直したら1件ずつ `knowledge.py add --stage output --source review --round N ...` で記録する。骨子から崩れていると判定されたら手順5に戻る（`review.md` の規則7）。5回で合格しなければ、それ以上直さずに残りの指摘を報告の「確認事項」に載せる。

### 8. 追記して報告する
まず dry-run:
```bash
python3 .claude/skills/es-coach/scripts/append_entry.py --company MIXI --question "設問原文（500字以内）" --body-file $W/draft.txt --dry-run
```
挿入位置と見出しレベルを確認してから `--dry-run` を外して実行する。既存の企業セクションがあればその末尾に同じレベル体系で入り、無ければ末尾に `## 企業名` → `### 設問` で新設される。同名設問は上書きせず版が付く（過去版を残すのがこのリポジトリの慣習）。

報告の前に `knowledge.py promote` を実行し、候補があれば `references/knowledge.md` に従って `history/lessons.md` に昇格する。

報告は次の形:
```
## 回答（企業 / 設問 / N字以内）
（本文）

文字数: 改行込み xxx / 改行除く yyy（上限 N の zz%）
スコア: 14/16（1点以下の項目: なし）
選考通過の観点: S1〜S6 すべて ○（評価してほしい一点: 〜）
自動レビュー: 段階 P 第1回 PASS / 段階 O 第2回 PASS（直さなかった提案: 〜）
使用エピソード: …（この企業の他設問と重複なし）
企業固有名詞と出典: 〜（URL）／〜（URL）
確認事項: 推測した点、追加できる数値の有無、表記の選択
追記先: entry_sheet.md 「## 企業名」セクション末尾（L xxx）
ナレッジ: 記録 n 件（plan x / output y）、lessons.md への追加: 〜（なければ「なし」）
```
改行込み・改行除くを併記するのは、企業フォームの数え方が分からないときにユーザーが判断できるようにするため。

## ワークフロー B: 添削

1. 対象文を取り出す（entry_sheet.md 内なら `es_index.py --question` か `--company`）。
2. 対象文を `$W/draft.txt` に保存し、`es_lint.py --file $W/draft.txt --limit N` で機械チェックする。文字数超過なら最初に指摘する（自動不合格）。ERROR はそのまま指摘に使う。
3. `rubric.md` の自動不合格4条件 → 8項目 → 選考通過の観点 S1〜S6 を採点。各項目に原文の引用を根拠として添える。
4. 修正方針を `$W/plan.md` にまとめる（評価してほしい一点、対応させる求める人物像、優先度順の修正提案 before/after と理由1行ずつ）。これを **段階 P のレビュー**にかけ、合格するまで最大5回直す。
5. 修正版全文を `$W/draft.txt` に書き、再計測する。これを **段階 O のレビュー**にかけ、合格するまで最大5回直す。
6. `rubric.md` 末尾の出力形式（総評 → 文字数 → 基準別評価 → 修正提案 → 修正版全文 → 修正後文字数 → 確認事項）で返す。総評に自動レビューの結果（各段階で何回目に合格したか、合格しなかった場合は残った指摘）を書く。

段階 P・O の「要修正」を直したら、ワークフロー A と同じく `knowledge.py add` で1件ずつ記録し、報告前に `promote` を確認する。

修正版では元の主張と事実を変えない。足したくなった事実は本文に入れず「確認事項」に出す。ユーザーが entry_sheet.md への反映を求めたら、ワークフロー A の手順8で版付き追記する。

## 報告後の修正指示

報告後や骨子の提示後に、ユーザーから修正の指示（「もっと〜して」「このエピソードは使わないで」など）が来たら、直したうえで `knowledge.py add --stage plan|output --source prompt ...` で記録する。今後も続く好み・方針なら lessons.md にも昇格する。修正が大きい場合（結論・エピソード・段落構成の変更）は、該当段階のレビューを1回目からやり直す。

## 文字数のルール

- 「N字以内」→ 90〜100%。「約N字／N字程度」→ 90〜110%。「N字以上」→ 100〜120%。
- 数え方は `count_chars.py` の既定（改行・空白・記号すべて1文字、最も厳しい慣習）で判定する。ここで収まればどの企業のフォームでも超えない。企業が「改行は含まない」と明記している場合だけ `--exclude-newlines`。
- 絵文字・特殊記号は使わない（JS の length で2文字になる）。

## 事実の扱い

- 書ける数値・固有名詞は、正典表・過去回答・ユーザーの発言にあるものだけ。
- 新しい数値を入れたいときは本文に入れず、報告の「確認事項」で「〜の数値はありますか」と聞く。
- 企業情報は検索結果に根拠があるものだけ。ミッション文は言い換える。出典 URL を残す。
- 研究内容は素材が1段落しか無いので、初回は担当範囲・評価指標・成果をヒアリングする。回答後、`self_introduce.md` への追記を提案する（勝手には書かない）。

## 参照ファイル

| ファイル | いつ読むか |
|---|---|
| `references/material-index.md` | 毎回最初。素材の所在、正典数値、時系列、表記慣習 |
| `references/question-types.md` | 設問タイプが決まったら該当節 |
| `references/rubric.md` | 執筆後のセルフチェック、添削時（8項目＋選考通過の観点） |
| `references/review.md` | 骨子（段階 P）と完成稿（段階 O）の自動レビュー。各段階最大5回 |
| `references/style-guide.md` | 執筆時、文字数調整時、流用時の変換 |
| `references/company-research.md` | 志望動機・挑戦・ビジョン・きっかけ・逆質問 |
| `references/knowledge.md` | 修正履歴（ナレッジ）の記録・参照・昇格の手順 |
| `history/lessons.md` / `history/history.jsonl` | 蓄積した教訓と修正履歴（`knowledge.py` で読み書き） |
| `scripts/knowledge.py` | ナレッジの add / list / brief / promote |
| `scripts/es_lint.py` | 機械チェック（文字数・一文の長さ・口癖・誇張・NG表現・AIらしい表現・正典外の数値） |
| `scripts/review_bundle.py` | 段階 O のレビュアーに渡す資料を1ファイルにまとめる |
| `history/companies/企業名.md` | 企業リサーチの保存先。同じ企業の別設問で使い回す |
| `scripts/count_chars.py` | 文字数と上限判定 |
| `scripts/es_index.py` | entry_sheet.md の索引・抽出・エピソード重複確認 |
| `scripts/append_entry.py` | entry_sheet.md への追記（dry-run → 実行） |
