☑️

記事やLPのNG表現を自動検出するPHPライブラリを作った【薬機法・景品表示法チェッカー】

に公開

はじめに

絶対に効きます!今だけ半額!

こういう広告文、よく見かける。でも、薬機法や景品表示法に引っかかるNG表現だということを知らずに使っている人は多い。

  • 記事やLPを納品した後に「この表現、使えません」と差し戻される
  • 広告審査が通らない原因がわからない
  • そもそも何がNGで何がOKなのか判断基準がない

特にフリーランスのライターや制作会社にとって、薬機法・景品表示法のチェックは地味だけど避けて通れない作業だと思います。

自分自身もこの問題によく直面した過去があるので、テキストを貼り付けるだけでNG表現を検出するPHPライブラリを作ってOSSとして公開してみました。

https://github.com/369work/misleading-checker


作ったもの

misleading-checker — 薬機法・景品表示法のNG表現を検出するPHPライブラリ。

NGワードの検出だけでなく、なぜNGなのか代わりにどう書けばいいかまで提案してくれる。


使い方

Webツールとして(非エンジニア向け)

Composerの知識がなくても、ブラウザ上のフォームからNG表現をチェックできる。

git clone https://github.com/369work/misleading-checker.git
cd misleading-checker
composer install
php -S localhost:8080 -t web

ブラウザで http://localhost:8080 を開くとフォームが表示される。テキストを貼り付けて「チェックする」を押すと、NG箇所がハイライト表示され、理由と代替表現が一覧で表示される。

業種別プリセット(化粧品・サプリメント・医療機器)もチェックボックスで選ぶことができる。

PHPライブラリとして(エンジニア向け)

composer require 369work/misleading-checker
use MisleadingChecker\MisleadingChecker;

$checker = new MisleadingChecker();
$result = $checker->check('この商品は必ず治る!今だけ半額!');

if ($result->hasViolations()) {
    foreach ($result->getViolations() as $v) {
        echo "❌ {$v->word}: {$v->reason}\n";
        echo "   → 提案: {$v->suggestion}\n";
    }
}

出力:

❌ 必ず治る: 効果を断定する表現は薬機法で禁止されています
   → 提案: 個人差があります / 効果には個人差があります
❌ 今だけ: 常時実施しているセールに使用すると有利誤認のおそれがあります
   → 提案: (本当に期間限定の場合のみ使用可。期間を明記)
❌ 半額: 通常価格が不明確な場合、有利誤認のおそれがあります
   → 提案: (通常販売価格と比較期間を明記)

なぜ作ったか

「知らなかった」では済まない

薬機法違反は、場合によっては行政指導や課徴金の対象になります。景品表示法の優良誤認・有利誤認も同様です。

特に以下のような人たちが、意図せずNG表現を使ってしまうケースが多い:

  • LPの原稿を書くフリーランスライター
  • クライアントから受け取った原稿をそのまま掲載する制作会社
  • 自分で広告文を書く個人事業主

既存ツールの課題

NG表現チェックのツールはいろいろ存在するが、多くはSaaS型で月額課金が必要だったり、API連携が前提だったりする。

手元のPHPプロジェクトに composer require で組み込めるシンプルなライブラリが欲しかった。


機能

1. 薬機法・景品表示法のNG表現を自動検出

デフォルトで約50語のNG表現を収録。テキストを渡すだけで、全出現箇所を検出する。

$result = $checker->check($text);

echo "検出数: {$result->count()}\n";

// カテゴリ別に集計
foreach ($result->groupByCategory() as $category => $violations) {
    echo "【{$category}】" . count($violations) . "件\n";
}

検出カテゴリ:

カテゴリ 対象 主なNG表現
yakki 薬機法 治療、必ず治る、処方、万能、若返り、アンチエイジング…
keihin 景品表示法 絶対、最強、今だけ、半額、満足度99%…

2. 業種別プリセット

化粧品・サプリメント・医療機器の業界特有のNG表現を追加できる。

use MisleadingChecker\Preset\CosmeticsPreset;
use MisleadingChecker\Preset\SupplementPreset;
use MisleadingChecker\Preset\MedicalDevicePreset;

$checker->applyPreset(new CosmeticsPreset());
$checker->applyPreset(new SupplementPreset());
$checker->applyPreset(new MedicalDevicePreset());

プリセットを全部適用すると約70語のNG表現をカバー。

プリセット 主なNG表現
化粧品 美白、ターンオーバー、コラーゲン生成、シミが薄くなる…
サプリメント 免疫力アップ、脂肪燃焼、飲むだけで、がん予防…
医療機器 医療レベル、副作用なし、FDA認証…

3. カスタム辞書

自社やクライアント独自のNGルールを追加できる。

use MisleadingChecker\Dictionary\CustomDictionary;

$custom = new CustomDictionary('自社ルール');
$custom->addEntry('当社比', '比較対象を明確にしてください', '具体的な数値で比較');
$custom->addEntry('効果抜群', '誇大表現のおそれがあります', '多くの方にご好評いただいています');

$checker->addDictionary($custom);

JSONファイルからの読み込みにも対応:

$json = file_get_contents('my-ng-words.json');
$dict = CustomDictionary::fromJSON($json, 'クライアントA');
$checker->addDictionary($dict);

4. 出力形式

// 配列
$result->toArray();

// JSON(API連携や他ツールとの連携に)
$result->toJSON(JSON_PRETTY_PRINT);

設計のこだわり

フレームワーク非依存

依存はPHP 8.1以上と ext-mbstring のみ。Laravel、CakePHP、WordPress、素のPHPプロジェクト、どこでも使える。

検出位置の情報付き

各NG表現の出現位置(オフセット・長さ)を返すので、テキストエディタやCMSでのハイライト表示に活用できる。

foreach ($result->getViolations() as $v) {
    echo "{$v->word} → 位置: {$v->offset}, 長さ: {$v->length}\n";
}

Webチェックツール付き

web/ ディレクトリにブラウザで使えるチェック画面が付属。テキストを貼り付けると、NG箇所がハイライトされ、カテゴリ別に理由と代替表現を確認できる。納品前のサッとチェックに便利。

WordPressプラグインのコアとして設計

前作の tokusho-generator と同じ設計思想で、このライブラリをラップする形でWordPressプラグインを審査予定。

  • 投稿エディタ(Gutenberg)でリアルタイムチェック
  • チェック結果のログ保存
  • 業種別プリセットの切り替え
  • NG表現のカスタム辞書管理

今後の予定

  • WordPressプラグイン版の審査
  • Composerパッケージとしてpackagist.orgに登録
  • NG辞書の拡充(健康食品表示法、医療広告ガイドラインなど)
  • 正規表現パターンへの対応(「○○が治る」のような可変パターン)

おわりに

前作の tokusho-generator(特商法ページ自動生成)に続いて、フリーランスや個人事業主の法令対応を助けるツール第2弾として作ってみた。

「納品前に1回チェックを通す」だけで防げるトラブルは多い。このライブラリがその補助や助けになれば嬉しい。

GitHubのStarをもらえると開発の励みになります🙏

https://github.com/369work/misleading-checker


免責事項

このライブラリは辞書ベースのパターンマッチによるNG表現の検出を行うものであり、法的な判断・助言を提供するものではありません。

  • 検出結果はすべてのNG表現を網羅するものではなく、検出されなかった表現が合法であることを保証するものではありません
  • 検出された表現が、文脈によっては問題なく使用できるケースもあります
  • 本ツールによるチェック結果をもって、薬機法・景品表示法その他の法令への適合性を判断することはできません
  • 最終的な判断は、最新の法令・ガイドライン・各媒体のポリシーをご自身でご確認のうえ、必要に応じて専門家(弁護士・薬事法務の専門家等)にご相談ください

本ライブラリの使用によって生じたいかなる損害・不利益・行政処分等についても、作者は一切の責任を負いません。

Discussion