1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

埋め込み問い合わせフォームを自社サーバーで持つ — NeNe Contact を Docker で試す

1
Last updated at Posted at 2026-06-25

はじめに

問い合わせフォームは、Web サイトの中では小さな部品に見えます。

でも実際には、送信内容、メール通知、スパム対策、添付ファイル、個人情報、受信履歴、運用者の対応メモなど、意外と多くの責務を持っています。

外部 SaaS に任せる選択肢もありますが、問い合わせデータを自社サーバーに置きたい場合や、問い合わせをそのまま案件化・請求・証憑管理へつなげたい場合には、もう少し自分たちで制御できる形が欲しくなります。

NeNe Contact は、問い合わせフォームを作成し、1行の embed.js でサイトに埋め込み、送信履歴を管理できる自己ホスト型 OSS(MIT)です。基盤には、API-first / OpenAPI / MCP 対応を前提にした軽量 PHP フレームワーク NENE2 を使っています。

リリース状況(2026年6月時点) — NeNe Contact は 正式リリース前のプレビュー段階 です。フォーム作成、embed widget、受信箱、通知、添付、監査、MCP などの MVP は動きます。本番向けのハッシュ付き embed ファイルと SRI 付き貼り付けコードも用意されていますが、GA に向けた最終レビューが残っています。この記事は Docker での試用・評価向けです。MIT ライセンスですが 無保証 です。

誰向けの記事か — 自社サイトに問い合わせフォームを置きたい小規模チーム、問い合わせデータを外部 SaaS だけに預けたくない運用者、または NENE2 上のフォーム / embed / 受信箱の動きを確認したいエンジニア向けです。


NeNe Contact でできること(この記事の範囲)

項目 内容
フォーム作成 text / email / phone / textarea / select / checkbox / date / file / honeypot
埋め込み embed.js を使った modal / chat / inline 表示。本番向け build はハッシュ付き + SRI
管理コンソール フォーム一覧、フォームビルダー、受信箱、ユーザー、監査ログ
通知 email / Slack / Chatwork / HMAC 署名 webhook
個人情報対応 consent、retention、PII 消去、監査ログ
MCP AI ツールから read-only 参照、一部 write は確認トークン付き
連携 Contact → Deal / Vault / Invoice への HTTP handoff API

しないこと — チャットシナリオ、請求書発行、入金消込、CMS、マーケティングメール配信は扱いません。それぞれ NeNe Concierge、NeNe Invoice、NeNe Clear、NeNe Records など兄弟プロダクトの領域です。


1. Docker で起動する

ローカルで試す場合は、Docker のフルスタック起動が分かりやすいです。

git clone https://github.com/hideyukiMORI/nene-contact.git
cd nene-contact
composer install
docker compose up -d

ヘルスチェック:

curl http://127.0.0.1:8900/health

起動後:

用途 URL
API + 静的配信 http://localhost:8900
管理コンソール http://localhost:8900/console/
embed demo http://localhost:8900/embed-demo.html
phpMyAdmin http://localhost:8901

初回は、管理コンソールで使う組織とユーザーを作成します。

docker compose exec app php tools/create-organization.php "Default" default
docker compose exec app php tools/create-user.php admin@example.com 'change-me' admin 1

/console/ からログインできます。

NeNeContact ログイン

NeNeContact ダッシュボード

本番では必ず強いパスワード、TLS、適切な secret / encryption key を設定してください。この記事ではローカル検証を前提にしています。


2. フォームを作る

管理コンソールでフォームを作成します。

NeNe Contact のフォームは、再利用できるフィールド部品を組み合わせる形です。

たとえば:

  • 会社名
  • 氏名
  • メールアドレス
  • 問い合わせ種別
  • 本文
  • 添付ファイル
  • 同意チェック
  • honeypot

のようなフォームを作れます。

フォームビルダーでは、フィールドの並び替え、必須設定、ラベル、選択肢などを編集します。問い合わせフォームとして必要な要素を小さく組み合わせる方針です。

NeNeContact フィールドタブ


3. 見た目を調整する

NeNe Contact には、フォームの見た目を調整する Appearance Studio があります。

テーマ、色、表示モード、プレビューを確認しながら、サイトに置いたときの雰囲気を調整できます。

この記事では詳細なデザイン機能の説明には踏み込みませんが、単なる API だけでなく、運用者が管理画面からフォームを整えられることが特徴です。

NeNeContact デザイン


4. サイトに embed する

フォームを公開したら、サイト側に embed.js を読み込みます。

例:

<script src="https://contact.example.com/embed.js"
        data-form="YOUR_PUBLIC_KEY"
        data-trigger="modal"
        data-lang="ja"
        async></script>

ローカル検証では、次のような demo URL で確認できます。

http://localhost:8900/embed-demo.html?form=YOUR_PUBLIC_KEY&trigger=modal

現在の embed mode は、実装上は主に次の3種類です。

mode 内容
modal ボタンやトリガーからモーダル表示
chat 1項目ずつ進む conversational UI
inline ページ内にフォームを埋め込み

古いドキュメントや設計メモでは floating という表現が残っている場合がありますが、この記事では現行実装に合わせて modal / chat / inline として扱います。

本番向けには、ハッシュ付きファイルと SRI 付き貼り付けコードも生成できます。

cd frontend
npm run build:embed

この build は public_html/embed/manifest.jsonpublic_html/embed/embed.<hash>.js を出力します。管理コンソールの「連携・公開」タブは、manifest がある場合はハッシュ付きファイル + integrity + crossorigin の snippet を出し、ない場合はシンプルな /embed.js にフォールバックします。

NeNeContact 連携・公開

下の例は chat mode の表示です。1項目ずつ進む問い合わせ UI として使えます。

NeNeContact チャット


5. 受信箱で問い合わせを見る

送信された問い合わせは、管理コンソールの受信箱で確認できます。

受信箱では、送信内容の確認、ステータス変更、対応メモ、添付ファイル確認などを行います。

ステータスは、たとえば:

  • open
  • in_progress
  • resolved
  • spam

のように扱います。

問い合わせは「送って終わり」ではなく、運用者が追跡し、対応履歴を残せることが大事です。NeNe Contact は問い合わせを単なるメール転送ではなく、管理対象の submission として扱います。

NeNeContact 受信箱


6. 通知チャネルを設定する

NeNe Contact は、問い合わせ送信時の通知チャネルを設定できます。

対応している主な通知:

  • email
  • Slack
  • Chatwork
  • HMAC 署名 webhook

チャネル secret は暗号化して保存します。通知は便利ですが、問い合わせ内容には個人情報が含まれることが多いので、送信先やログの扱いには注意が必要です。

NeNeContact 通知チャネル


7. 個人情報と監査ログ

問い合わせフォームは、名前、メールアドレス、会社名、本文、添付ファイルなどを扱います。

NeNe Contact では、日本の個人情報保護法(APPI)を意識した設計として、次のようなルールを持っています。

  • consent required の設定
  • prohibited field registry(マイナンバーやカード番号などを構造的に避ける)
  • retention / purge job
  • data-subject delete / correct
  • PII の物理削除ではなく、必要に応じた erase-in-place
  • mutation と PII access の監査ログ

この記事では法律解説はしません。実際の運用では、利用目的、プライバシー表示、保存期間、越境移転、通知先、TLS などを自社の責任で確認してください。

NeNeContact 監査ログ


8. MCP から問い合わせを確認できる

NeNe Contact は、MCP stdio server と agent API も用意しています。

AI アシスタントから、たとえば次のように問い合わせを確認できる構成です。

未対応の問い合わせを一覧して、会社名と問い合わせ種別だけ要約して

ただし、個人情報を含む問い合わせを AI が扱う場合は慎重さが必要です。

NeNe Contact の agent surface では、submission は redacted by default です。PII を含める場合は include_pii=true のような明示的な指定が必要で、その閲覧も監査されます。

また、一部 write tool は確認トークンを使う二段階確認方式です。AI が勝手に個人情報を外部送信したり、問い合わせ対応を進めたりしないよう、MCP は業務境界の内側で制御する設計にしています。


9. NeNe ファミリーとの関係

NeNe Contact は、NeNe ファミリーの中では問い合わせの入口を担当します。

Contact -> Deal -> Invoice -> Clear
        \-> Vault / Records
  • Contact: 問い合わせフォーム、受信箱、通知
  • Deal: 問い合わせ後の見込み案件管理
  • Invoice: 受注後の見積・請求
  • Clear: 入金消込・督促
  • Vault: 受け取った書類の保存
  • Records: フォーム選択肢などの業務データ

Contact から Deal / Vault / Invoice への handoff API はありますが、記事執筆時点では管理画面の handoff ボタンは仕上げ中です。この記事では、Contact 単体のフォーム作成・embed・受信箱・通知を中心に紹介しました。


まとめ

NeNe Contact は、自社サーバーで問い合わせフォームを持ちたいチーム向けの、自己ホスト型フォーム / 受信箱 OSS です。

  • フォームビルダーで問い合わせフォームを作る
  • embed.js でサイトに埋め込む
  • modal / chat / inline の表示に対応する
  • 本番向け embed はハッシュ付きファイルと SRI 付き snippet に対応する
  • 受信箱で問い合わせを管理する
  • email / Slack / Chatwork / webhook に通知する
  • 個人情報・保持・監査を意識した設計を持つ
  • NENE2 ベースで OpenAPI / MCP 境界を持つ

まだ正式リリース前のプレビュー段階ですが、問い合わせフォーム → embed → 受信箱 → 通知という MVP の流れは一通り試せる状態です。

まずは Docker で触って、自社サイトの問い合わせフォームを自己ホストできるかどうか確認してみてください。


リンク

種類 URL
リポジトリ https://github.com/hideyukiMORI/nene-contact
NENE2 https://github.com/hideyukiMORI/NENE2
NeNe Deal https://github.com/hideyukiMORI/nene-deal
NeNe Invoice https://github.com/hideyukiMORI/nene-invoice
ポートフォリオ一覧 https://github.com/hideyukiMORI

フィードバックは GitHub Issues へ歓迎します。


── 筆者: 森 秀之(彩音インターナショナル)— 自己ホストの業務ツール群を実運用中。
中小企業向けの業務システムを料金公開・固定価格で開発しています。
🔗 ayane.co.jp

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?