.cursor/skills/write-zenn-article/SKILL.md
Zenn 記事の執筆・推敲を、体験ベースで読みやすいトーンに仕上げる。 AIっぽい定型表現を排除し、実践報告として説得力のある文章を生成する。 "Zenn記事を書いて", "記事の下書き", "ブログ記事を書く", "記事を推敲して", "write a Zenn article", "draft a blog post" などで起動する。
npx skillsauth add otomatty/zedi write-zenn-articleInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
体験ベースで読みやすく、AIっぽさのない技術記事を書く。 詳細なアンチパターンと言い換え例は tone-guide.md を参照。
以下は AI が多用しがちな表現。記事に含まれていたら必ず書き換える。
| 使わない表現 | 代わりに使う表現 | | ------------------------------- | ----------------------------------- | | 〜を実現します | 〜できるようにしました | | 本記事では〜を紹介します | この記事では〜を書きます | | 〜することが可能です | 〜できます | | 〜について解説します | 〜について書きます / 〜を共有します | | 非常に重要です | 大事だと感じました / ここが肝でした | | 〜を活用します | 〜を使います | | 〜を実施します / 〜を実行します | 〜をやります / 〜を試します | | 〜が不可欠です | 〜がないと困ります / 〜が要ります | | 〜を網羅的に | まんべんなく / ひと通り | | 〜を包括的に | 全体的に / まとめて | | 〜のメリット・デメリット | 良かった点・困った点 | | 〜に寄与します | 〜に役立ちました | | 〜を担保します | 〜を守れます / 〜を保てます | | 結論として | まとめると | | 〜という課題があります | 〜で困っていました | | 〜が求められます | 〜が要ります | | 〜を通じて | 〜で / 〜をきっかけに | | シームレスに | スムーズに / 自然に |
❌ Mutation Testing は重要な手法です。我々のプロジェクトでも導入しました。
✅ Stryker を走らせたら、テスト 109 行で守れていたつもりの Effect が実はザルでした。
具体的な数字やエピソードから入り、読者に「どういうこと?」と思わせてから説明する。
1 文は 60 字以内を目安にする。長い文は 2 つに切る。
❌ AIにテストを書かせるとカバレッジは高いが実質的に何も検証していないテストが
量産されてしまうという問題に気づいたため、Mutation Testingを導入しました。
✅ AI にテストを書かせると、カバレッジだけは高くなります。
でも実際にロジックを壊してもテストが落ちません。
その問題に気づいて Mutation Testing を入れました。
セクションの冒頭で読者を引き込む。
✅ カバレッジ 100% のテスト、信用していいと思いますか?
✅ AI が書いたテスト、本当にバグを見つけてくれるでしょうか。
施策の効果は必ず「やる前」と「やった後」のペアで示す。 数字があればなお良い。なくても体感レベルで書く。
✅ テストファイル:109 行 → 887 行。
コミットメッセージにも「Target Stryker survivors」と書いてあります。
Mutation Test がなければ、この 2 ケースで安心していたはずです。
コードブロックに長いファイルを貼らない。伝えたい箇所だけ抜粋し、
省略部分は // ... で示す。表のカラムは 3〜4 列まで。
「しかし」「また」「さらに」の連打を避ける。
| 避けたい連打 | 代替 | | --------------------- | ------------------------------- | | しかし / しかしながら | でも / ただ / とはいえ / 一方で | | また | それと / あとは / もう一つ | | さらに | 加えて / その上 / ついでに | | そのため | だから / なので / そこで | | なお | ちなみに / 補足すると |
---
title: "(体験が伝わる具体的なタイトル)"
emoji: "(内容に合った絵文字 1 つ)"
type: "tech"
topics: ["トピック1", "トピック2", "トピック3"]
published: false
---
## はじめに
(2〜3 文で「自分がどういう状況で何に困っていたか」を書く)
(読者が「あるある」と思える導入にする)
## 問題:〜が起きていた
(困っていたことを具体的に。エピソード・数字があるとベスト)
(参考にした記事があればここで引用)
## やったこと 1: 〜
(施策の説明 → コード例 → Before/After)
## やったこと 2: 〜
(同上。施策が複数ある場合はストーリーとして繋げる)
## やったこと N: 〜
## 結果
(定量データを中心に。表で整理するとわかりやすい)
(「こう変わった」だけでなく「こう感じた」も書く)
## 振り返り
### うまくいったこと
(箇条書き。体験ベースで)
### まだ課題なこと
(正直に書く。完璧なストーリーより信頼される)
## まとめ
(3〜4 文で締める。長い要約は不要)
## 参考
(引用した記事・ツールへのリンク)
記事を仕上げる前に以下を確認する。
docs/plan/ 配下に Markdown ファイルとして出力する(Git 追跡外)。
ファイル名は zenn-<slug>.md(例: zenn-tdd-mutation-test.md)。
documentation
Zenn 記事を A先輩と B後輩の対話形式で執筆する。 Q&A のように疑問点にピンポイントで答える構成で、 初心者がつまずきやすいポイントを自然に解消する。 "対話形式で記事を書いて", "会話形式の記事", "dialogue article", "対話記事", "先輩後輩の会話で記事" などで起動する。
development
Runs Stryker mutation tests only on git-changed production files under `src/` via `scripts/stryker-mutate-changed.mjs` and `bun run test:mutation:changed`. Uses `stryker.config.mutation-changed.mjs` so partial runs do not fail on global `thresholds.break`. Use when the user asks for mutation testing on changed files only, incremental mutation test, diff-based Stryker, or "差分だけミューテーション" / "mutation test for current changes". After a run, use `bun run mutation:report:summary` and attach `reports/mutation/mutation-summary.md` for AI explanation (not HTML).
development
手元の実装変更、または現在ブランチとターゲットブランチの差分を、 関連コード(テスト・依存先・呼び出し元)も含めて AI レビューし、結果をマークダウンファイルに出力する。 "レビューして", "実装をレビュー", "変更をチェック", "review my changes", "self review", "セルフレビュー", "develop との差分をレビュー", "ブランチの差分をチェック", "review branch diff" などで起動する。
development
PR レビューコメントを仕様に照らして分析し、対応方針を提案・実行する。 コメントをそのまま受け入れるのではなく、TSDoc/テスト/型定義に基づいて 妥当性を検証し、修正・代替案・対応不要を判断する。 "レビュー対応して", "PRコメントに対応", "review PR comments", "レビューコメントを確認", "PRのレビューを処理" などで起動する。 Cursor / Claude Code 共通で使用可能。