1. はじめに
お疲れさまです。
SNSへ投稿しようとする時、言葉や表現に迷うことはございませんか?
個人開発で、生成AI(LLM)を活用したテキストリスク可視化サービス 「ことばみまもり」 を開発・公開いたしました。
投稿前のテキストを解析し、
- 誤解を与える可能性のある表現
- 攻撃的表現につながる可能性
- 感情強度
などを可視化して、リスク度合い、気になる点、改善のヒントを確認できるWebサービスです。
本記事では、本サービスのシステム構成、AWSサーバーレスアーキテクチャ設計、使用したLLM、低コスト運用の工夫についてご紹介いたします。
- (※)
- 具体的なコストをざっと確認されたい方は本記事の 6. コストを抑えるための工夫 をご参照ください。
- 開発したソースコードを確認されたい方は本記事の 10. サービスのソースコード類について をご参照ください。
公開サイト
どなたでも、無料、アプリインストール不要、ログインやユーザー登録不要でご利用いただけるサービスです。
サイトの操作マニュアル
画面イメージ
-
画面のUIはシンプルな構成にしています。
-
画面上でリスクを確認したいテキストを入力します。
-
テキスト入力後、「確認してみるボタン」をクリックします。
-
以下のように、テキストの確認結果(リスク、気になりそうな点、改善のヒント)が表示されます。
-
確認結果を踏まえて、文章を修正したい場合、「文章を修正して再チェック」ボタンをクリックします。
-
修正した文章をテキストエリアに入力して、「確認してみるボタン」をクリックします。
-
もし、修正した文章をSNS投稿用にコピーしたい場合、「文章をコピー」ボタンをクリックします。
-
再チェック後の確認結果が表示されます。
-
2回目以降のチェックの場合、チェック結果のリスク変化を確認できます。
-
X(旧Twitter)、Facebook、Instagram、TikTok、Threads、LINEを開くボタンも設置しています。
-
確認もしくは修正した文章について、各SNSへ投稿する場合、各SNSを開くボタンをクリックすると、各SNS画面を表示できます。
-
各SNS画面を表示するだけで、文章は自動的に投稿しないようにしています。
-
最終的にSNSへ文章を投稿するかどうかは、ご利用者さまの意思やご判断を尊重したいので、SNS画面の表示のみとしています。
-
例えば、[X を開く]ボタンをクリックすると、Xの画面が表示されます。
-
Xの画面が表示されるので、確認もしくは修正した文章を記載して、Xへ文章を投稿できます。
システムアーキテクチャ
解決したい課題
SNSやインターネット上では、日々さまざまな言葉のやりとり、情報発信が行われています。
一方、何気なく投稿した言葉が、意図せず誰かを傷つけてしまうことがあります。
何気ない投稿によって、SNS等で炎上してしまい、投稿者の方、投稿をご覧になった方、双方の心が傷いてしまうことも起こります。
自分が感じていた課題意識
SNSやインターネット上に言葉、テキストを投稿する際、
- この表現で問題ないだろうか?
- 誤解されないだろうか?
- 誰かを傷つけないだろうか?
- 炎上したりしないだろうか?
と迷う場面を経験したことがある方も多いのではないでしょうか。
投稿前に言葉のリスクを客観的に確認できる仕組みがあれば、安心して情報発信できると考えました。
解決方法(実装したもの)
こうした課題を解決するため、投稿したいテキストを分析し、リスクをスコアとして可視化するWebサービス 「ことばみまもり」 を開発・公開しました。
本サービスは、
- 投稿したい言葉のリスクを可視化する
- 言葉を制限するのではなく判断材料を提供する
- 安心して情報発信できる環境づくりを支援する
ことを目的としています。
補足
なお、ChatGPT、Google Gemini、Claude等の生成AIを利用することでも、言葉のチェックを行うことは可能です。
ただ、確認用のプロンプトを組まねばならず、私自身が、もっと手軽に、言葉のリスクを確認したい。と考えて、「ことばみまもり」を開発しました。
(私自身が投稿内容を考えるとき、意図せず、人の心を傷ける表現をしていないかな?と迷うことがあり、手軽に確認したいという考えがありました)
2. システム全体像
「ことばみまもり」 はAWS上に構築しました。
スケーラブルかつ低コストで運用可能なサーバーレスアーキテクチャを採用して構築しています。
特徴
- フルサーバーレス構成
- 自動スケーリング
- 低トラフィック時のコスト最小化
3. システム構成
システムアーキテクチャ
システムアーキテクチャは以下の図の通りです。
なぜこの構成にしたか
言葉のリスクを確認したい方が、いつでも、必要な時にサービスを利用できるようにしたいと考え、以下の理由から、AWSのマネージドサービスを利用して、システムを構築しました。
- スケーラビリティを備えた構成
- 低コストで運用可能な構成
- 個人開発なので、サーバの構築や運用管理が不要な構成
4. データの流れ
大まかなデータの流れは以下の通りです。
- 画面 → テキスト入力 → リクエスト → Amazon API Gateway → AWS Lambda -> LLM
具体的には以下の流れでデータを処理しています。
- 利用者さん(言葉のリスクを確認したい方)がWebブラウザから画面を表示。
- 画面上にテキストを入力する。
- 入力されたテキストはAmazon API Gateway経由でLambdaへ送信。
- LambdaからAmazon Bedrockの生成AI(LLM)へテキスト解析をリクエスト。
- 生成AI(LLM)がテキストのリスクを算出。
- 結果を画面上に表示。
また、入力されるテキストは、インターネット上に公開される前提のものとはいえ、言葉を発信したい方にとって、大切なデータですので、以下のようにしています。
- 入力されたテキストはシステム内に保存しない。
- 入力されたテキストはAI(LLM)の学習に利用しない。
5. 利用したAWSサービス
本サービスでは主に以下を利用しています。
| 分野 | 技術 |
|---|---|
| Frontend | HTML, CSS, JS |
| Web Hosting | Amazon S3 |
| CDN | Amazon CloudFront |
| API | Amazon API Gateway |
| Backend | AWS Lambda |
| 生成AI(LLM) | Amazon Bedrock, Gemma 3 4B (google.gemma-3-4b-it) |
| セキュリティ対策 | AWS WAF, AWS Shield Standard |
| 監視 | Amazon CloudWatch |
| Webサイトアクセス分析 | Google Analytics |
-
Amazon S3
- 画面表示(静的ウェブサイトホスティング)
-
Amazon CloudFront
- CDN
- 画面をエッジローケーションにキャッシュして表示高速化
- CDN
-
Amazon API Gateway
- API
- 画面から入力されたテキストの送信先
- API
-
AWS Lambda
- テキスト解析処理
- LLMへのテキスト連携処理
-
Amazon Bedrock
- LLM(Large Language Model)
- テキストのスコア判定
- テキストのうち誤解を与える可能性のある表現について、修正のアドバイス情報を返却
- 利用しているLLMのモデルはGemma 3 4B (google.gemma-3-4b-it)
- LLM(Large Language Model)
-
AWS WAF
- バーストアクセス対策
-
AWS Shield Standard
- DDoS 攻撃対策
-
Amazon CloudWatch
- サイト稼働監視
- LLM解析エラー監視
- AWSコスト監視
-
Google Analytics
- 画面アクセス状況の記録、分析
6. コストを抑えるための工夫
月額コスト(目安)
本システムはサーバーレス構成を採用しており、サイトのアクセス量が少ない場合、低コストで運用可能です。
これにより、低トラフィック時はほぼゼロに近い月額コストを実現しています。
| サービス | 月額目安 |
|---|---|
| S3 | 数十円〜 |
| API Gateway | 数十円〜 |
| Lambda | 数十円〜 |
| CloudFront | 数十円〜 |
| Amazon Bedrock (LLM) | 利用量に応じた従量課金 |
| WAF | 数百円〜 |
アクセス量がある程度増えても 月額数百円〜数千円程度 で運用が可能な見込みです。
(※) アクセス量、LLM利用量によりコストは変動します。
(※) API GatewayやLambdaは無料利用枠が大きいので、無料枠内に収まる可能性があります。
参考情報: 月額コスト(利用料実績)
参考までに、「ことばみまもり」稼働後の約1ヶ月分のAWS利用料実績として、2026年2月分のAWSマネジメントコンソールの請求書画面の画像スクショを記載します。
こちらは私が保有している、「ことばみまもり」を稼働させているAWS環境(AWSアカウント)の請求書画面になります。
2026年2月分のAWS利用料実績は 1,065円 でした。
| サービス | 月額目安 | 月額実績(2026年2月分) ドル |
|---|---|---|
| S3 | 数十円〜 | USD 0.52 |
| API Gateway | 数十円〜 | USD 0.00 |
| Lambda | 数十円〜 | USD 0.00 |
| CloudFront | 数十円〜 | USD 0.00 |
| Amazon Bedrock (LLM) | 利用量に応じた従量課金 | USD 0.02 |
| WAF | 数百円〜 | USD 6.24 |
USD 0.52 + USD 0.02 + USD 6.24 = USD 6.78、
為替レート157.14 円(2026年3月4日時点)で計算しますと、USD 6.78 = 1,065円でした。
API GatewayやLambdaは元々の無料枠が大きいので、無料枠内に収まりました。
7. セキュリティ、脆弱性対策
安全性を確保するため、以下の対策を実施しています。
- IAMの最小権限原則に基づいた権限設定
- Amazon API Gatewayのアクセス制御
- AWS WAF + AWS Shield Standard導入(Bot、攻撃対策、レート制限)
- 入力テキストのサニタイズ
- HTTPS通信の強制
8. 利用したLLM
利用したLLMは、Amazon BedrockのLLMのモデルは Gemma 3 4B (google.gemma-3-4b-it) になります。
- 今回は、サービス利用者さまが、24時間365日、必要になったタイミングで、本サービスをご利用いただけるよう、文章の解析にLLMを利用しています。詳細は後述の 開発者の思い をご参照ください。
いくつかのLLMモデルを試してみて、個人的に精度とコストのバランスが良いと感じて、Gemma 3 4Bを利用することにしました。
テキスト解析には、Lambdaからbedrock.invoke_modelで、Amazon BedrockのLLMのAPIを利用し、
- 攻撃性
- 誹謗中傷度
- 感情強度
などをチェックしています。
LLMの出力はそのまま使用せず、
- JSON構造の固定化
- LLMが返却するJSONフォーマットをある程度固定化し、JSONパースエラーを防ぐため。
- チェック結果の範囲検証
- チェック結果のフォールバック処理
- 万が一、Bedrockが適切なレスポンスを返せなかった場合の対策。
を行うことで安定運用を実現しています。
9. サービス公開に向けた対応
その他、サービス公開の対応として、以下を実施しました。
- OGP(Open Graph Protocol)設定
- SNSでシェアした時、サービスのアイコン等を表示するため。
- Google Analyticsの導入
- サービスのアクセス状況解析のため。
- Google Search Console
- Googleにサービスをクロールしてもらうため、Google Search Consoleにサービスを登録。
- 初歩的なSEO対策
10. サービスのソースコード類について
ソースコードについて
「ことばみまもり」サイトの画面HTML,CSS,画像ファイル類、API Gatewayから実行されるLambdaのソースコードは以下のリポジトリに保存しています。
具体的な処理内容が気になる方がいましたら、以下をご覧ください。
テストコードについて
「ことばみまもり」サイトの画面テストコードは、以下のリポジトリにございます。
https://github.com/na0AaooQ/words-watching-app/blob/main/index.test.js
「ことばみまもり」のフロントエンドは、シンプルなSPAでして、Jestとjsdom(jest-environment-jsdom)でユニットテストを実行するようにしました。
テストコードの内容、実行方法は以下の記事に記載しております。
ソースコードのファイル構成
サービスのソースコードのファイル構成は以下になります。
words-watching-app/
├── index.html # サイトトップ画面のHTML,JS
├── index.test.js # サイトトップ画面のテストコード
├── terms_of_service.html # 利用規約画面のHTML
├── disclaimer.html # 免責事項画面のHTML
├── privacy.html # プライバシーポリシー画面のHTML
├── contact.html # お問い合わせ画面のHTML
├── favicon.png # サイトのファビコン画像
├── favicon.svg # サイトのファビコン画像
├── ogp-image.png # サイトのOGP画像
├── sitemap.xml # サイトマップ
├── package.json # 本リポジトリのアプリケーションプロジェクト情報を保存しているファイル(テストコードで使用している)
├── package-lock.json # 本リポジトリで使用しているパッケージの依存関係、バージョン情報を保存しているファイル(テストコードで使用している)
├── README.md # 本リポジトリの説明
├── .gitignore # リポジトリの管理対象外とするディレクトリやファイル(ログファイル等)を定義するファイル
├── css/
│ ├── common.css # サイト画面で使用しているCSS
├── lambda/
│ ├── words-watching-app-lambda
│ ├── lambda_function.py # サイトで入力されたテキストデータをLLM(Amazon Bedrock)へ送信、LLMのテキスト確認結果を画面に返却するLambdaコード
11. 終わりに
記事を閲覧いただき、ありがとうございます。
記事をご覧頂いた方の中で、もし何かサービスを開発される際、少しでもご参考になれば幸いです。
開発者の思いについて
最後に、私の主観でありますが、本サービス開発に至った思いについて、補足させてください。
- SNSやインターネット上では、多くの方々により、日々さまざまな言葉のやりとり、情報発信が行われています。
- それにより、多くの方々が、つながりあい、感動したり、情報や知見を得たり、新たな出会いや対話が生まれたり。と人生や生活を豊かにする一助になっていると思っています。
- SNSで交わされる言葉、その言葉に込められた思いは、ときに孤独な人の心、傷ついた人の心を救うことがあると思っています。
- 一方、何気なく投稿した言葉によって、意図せず誰かの心を傷つけてしまうケースもあると思ってます。ときに、意図せず炎上が発生してしまい、投稿者の方、投稿をご覧になった方、双方の心が傷ついてしまうことが起こるかもしれません。
傷つく人を減らしたい、人の心を技術や仕組みで守りたい。という思いから、今回は言葉と情報発信について、迷いを抱える方の負担を少しでも楽にできればと思い、サービスを作りました。
私自身としては、今回の開発で学んだことを活かし、世の中にあるさまざまな課題や人の苦しみ、寂しさに真摯に向き合って心を痛める人が一人でも少なくなるよう、システムや仕組みづくりに尽力してまいります。よろしくお願いいたします!








