概要
何度もお会いしてる札幌のまついしゃちょーことインフィニットループ会長松井さんの恒例資料「テスト文字列に“うんこ”と入れるな 2025 年版」が 30 万 View を達成したので、これに “アンサーソング” として開発者目線の実践ネタを盛り込んだ Qiita 記事を書きました。主眼は 「笑いを取りつつ CI/CD に組み込める具体的対策を提示」 です。
アンサーソングです。
🍜 TL;DR
-
“うんこ混入” は技術的負債の臭い玉
- 問題は ネタ文字列 自体より「テスト≒冗談でも本番に漏れる設計」のほう。
-
処方箋 3 点セット
-
git bisect unko
ワンライナー:犯人コミットを 10 sec で隔離。 -
Pre-commit Hook & CI Regex Guard:
(?i)(unko|💩)
を検出したら即失敗。 -
Data-Masking/ダミー生成:テストデータは “合コン相手の名前” ではなく
faker
で生成。
-
-
やらかした時のインシデントレスポンス:
-
git revert && git push --force-with-lease
+ Slack #postmortem で初動 1 時間。 - それでもニュース化したら 「うんこ 2025」 の資料に逆輸入してネタにする。
-
1️⃣ 元記事を 3 行で復習
年 | 概要 | View 数 |
---|---|---|
2021 | 初出。「人類はうんこに勝てない」宣言 (北海道札幌市・宮城県仙台市のVR・ゲーム・システム開発 インフィニットループ) | ― |
2024 | 23 万 View、はてブ総合 1 位 (ITmedia) | 230 k |
2025 | 30 万 View、最新事例 & スライド追加 (北海道札幌市・宮城県仙台市のVR・ゲーム・システム開発 インフィニットループ, Speaker Deck) | 300 k |
2️⃣ なぜ “うんこ” は漏れるのか
2.1 ヒューマンファクター
-
新人は「とりま文字列入れとこ」で
"unko"
を打つ → 後で忘れる。- 会長も「うんこの人」と呼ばれて胃が痛いらしい (北海道札幌市・宮城県仙台市のVR・ゲーム・システム開発 インフィニットループ)
2.2 プロセスと設計
- Reviewフローにユーモア検知がない
- 本番 DB に直アクセスできる権限モデル
git bisectを覚えよう!
git エイリアス化sやらかし検出:git bisect unko
git config --global alias.unko '!f() { \
git bisect reset; \
git bisect start; \
git bisect bad HEAD; \
git bisect good $(git rev-list --max-parents=0 HEAD); \
git bisect run sh -c '\''git grep -iqE "(unko|💩)" && exit 1 || exit 0'\''; \
}; f'
- 使い方:
git unko
で二分探索スタート。 - ツイ主も alias 化してた (X (formerly Twitter))
-
git bisect
の基本はこの Qiita 記事が丁寧 (Qiita)
4️⃣ 予防策:CI/CD に仕込む 2 行
- name: unko-lint
run: |
if grep -r -i -E "(unko|💩)" --exclude-dir=.git .; then exit 1; fi
- GitHub Actions / GitLab CI どちらでも OK。
- “爆速差分 grep” なら
ripgrep
がベター。 - 専用ルールを組むなら Envader の解説が分かりやすい (エンベーダー)
5️⃣ 根本解決:テストデータを “マスキング” せよ
-
生成系ライブラリ
faker
-
DB レベルの Data-Masking(Oracle/AWS 例)
-
Privacy by Design を工程に組み込む (AWSドキュメント)
6️⃣ インシデントが炎上したら
秒数 | アクション |
---|---|
+00:00 | Hook でビルド落ち、Slack に @channel 💩 Detected
|
+00:15 |
git unko → 犯人コミット PO に DM |
+00:30 |
revert --no-edit , 強制プッシュ |
+05:00 | ポストモーテムドラフト/再発防止策を Notion 共有 |
+60:00 | 外部から記事化 → 逆手に取って “ネタとして再発信” (例: GameMakers 記事) (ゲームづくりの最新情報やアイデアを紹介!|ゲームメーカーズ) |
7️⃣ “うんこ警察” Slack Bot (オマケ)
-
Events API →
message.channels
で流量監視 - regex マッチしたら
🤮
リアクション+スレッドでベストプラクティス URL を自動投稿 - 歴代スライドも自動リンクすることで教育コスト削減 (北海道札幌市・宮城県仙台市のVR・ゲーム・システム開発 インフィニットループ, Speaker Deck)
8️⃣ まとめ & Call-To-Action
「うんこは文化、でも本番 DB は聖域」
本記事のサンプル Hook/Bot スクリプトは Gist に置いたので、導入して “うんこゼロ運動” を始めよう。
もし “うんこ誤爆” を防げたら、ぜひ #うんこレス開発
ハッシュタグでシェアしてバズらせてください。
参考リンク
- インフィニットループ公式 2025 年版記事 (北海道札幌市・宮城県仙台市のVR・ゲーム・システム開発 インフィニットループ)
- ITmedia ニュースまとめ (ITmedia)
- 2021 年初版資料 (北海道札幌市・宮城県仙台市のVR・ゲーム・システム開発 インフィニットループ)
- SpeakerDeck(2025 年版スライド) (Speaker Deck)
- GOROman ツイート①(記事共有) (X (formerly Twitter))
- GOROman ツイート②(
git unko
alias) (X (formerly Twitter)) - Qiita:
git bisect
入門 (Qiita) - Envader+:
git bisect
詳解 (エンベーダー) - GameMakers: ネタ記事化 (ゲームづくりの最新情報やアイデアを紹介!|ゲームメーカーズ)
- Oracle Data-Masking Best Practice PDF (オラクル)
- AWS Well-Architected Lens: Mask Test Data (AWSドキュメント)
- Privacy by Design (AWS) (AWSドキュメント)
バグも💩もゼロで行こうぜ。