コメント欄をわかりやすくしよう!

お客様コメントの重要ワードを自動で強調表示!

受注処理の際、お客様からのご要望を見落としてしまいそうになったことはありませんか?
今回は、FileMakerの「Webビューア」を利用して、コメント欄に含まれる「置き配」
「領収書」「キャンセル」などの重要なキーワードを自動的に色付けして表示する方法を
ご紹介します。

強調表示するキーワードは自由に追加・変更できるため、店舗様の運用に合わせて
ご利用いただけます。新しいフィールドやスクリプトを作成する必要はなく、
計算式を設定するだけで簡単に導入できますので、ぜひお試しください!

 ※古いバージョンのFileMaker Proでは、Webビューアで使用されるブラウザエンジンの
 違いにより、HTMLやJavaScriptが正常に動作しない場合があります。
 そのため、本機能をご利用いただく際は、FileMaker Pro 19.3.1以降でのご利用を
 推奨いたします。

 FileMakerのバージョンの確認法はこちらから

※本機能は、FileMakerに登録されているコメントをWebビューア内で表示・
 強調するものです。コメントの内容をChatGPTなどの外部サービスへ
 送信することはありません。

 

組み込み方

※修正を行う前に必ず、頑張れ♪店長!、店舗アップ♪の全体バックアップをお取りください。
 バックアップのとり方はこちらから
※本マニュアルは、FileMaker Pro 2025を利用した場合の内容でご案内しております。
 ご利用のバージョンによっては、画面表示や表記が異なる場合がございます。
 ご不明な点がございましたら、ご連絡をお願いいたします。

1.店舗アップ♪、頑張れ♪店長!の明細画面を開き、画面上部の表示→レイアウトモードに
 切り替えます。

2. 画面上部のツールバーにある「Webビューワ」アイコンをクリックします。
 レイアウト上でWebビューワを配置したい範囲をドラッグし、
   任意の大きさで枠を作成します。
※作成後は、四隅や辺のハンドルをドラッグすることで大きさを調整できます。

3.Webビューワの設定ダイアログが表示されますので、「Webアドレス」の部分に
 以下の計算式をコピー&ペーストで貼り付けて右下のOKをクリックします。

				
					
Let (
[
    /* ==================================
       ① コメント欄を指定
       ================================== */

    comment = GetAsText ( 注文情報::コメント表示 ) ;


    /* ==================================
       ② 赤色で強調するキーワード
       ================================== */

    redWords = List (
        "キャンセル" ;
        "住所変更" ;
        "返品" ;
        "返金"
    ) ;


    /* ==================================
       ③ 黄色で強調するキーワード
       ================================== */

    yellowWords = List (
        "置き配" ;
        "領収書" ;
        "ラッピング" ;
        "同梱" ;
        "のし"
    ) ;


    /* ==================================
       ④ HTML表示用に文字を変換
       ================================== */

    safeComment = Substitute (
        comment ;
        [ "&" ; "&" ] ;
        [ "<" ; "&lt;" ] ;
        [ ">" ; "&gt;" ]
    ) ;

    safeRed = Substitute (
        redWords ;
        [ "&" ; "&amp;" ] ;
        [ "<" ; "&lt;" ] ;
        [ ">" ; "&gt;" ]
    ) ;

    safeYellow = Substitute (
        yellowWords ;
        [ "&" ; "&amp;" ] ;
        [ "<" ; "&lt;" ] ;
        [ ">" ; "&gt;" ]
    ) ;


    /* ==================================
       ⑤ Webビューアの表示内容
       ================================== */

    html =
    "<!DOCTYPE html><html lang='ja'><head>" &
    "<meta charset='UTF-8'>" &
    "<style>" &

    "body{margin:0;padding:12px;background:#f7f8fa;" &
    "font-family:Meiryo,sans-serif;color:#333;}" &

    ".panel{background:white;border:1px solid #ddd;" &
    "border-radius:10px;padding:15px;}" &

    "h3{margin:0 0 12px;font-size:16px;}" &

    ".status{padding:10px;margin-bottom:12px;" &
    "border-radius:6px;font-size:13px;font-weight:bold;}" &

    ".warn{background:#fff1d6;color:#986600;}" &
    ".ok{background:#e5f5e9;color:#207240;}" &
    ".empty{background:#eee;color:#666;}" &

    ".comment{padding:12px;border:1px solid #ddd;" &
    "border-radius:6px;white-space:pre-wrap;" &
    "overflow-wrap:anywhere;line-height:1.8;" &
    "font-size:14px;max-height:300px;overflow:auto;}" &

    "mark{font-weight:bold;padding:2px 3px;" &
    "border-radius:3px;}" &

    "mark.red,.chip.red{background:#ffd2d2;color:#a00000;}" &
    "mark.yellow,.chip.yellow{background:#fff0a0;color:#775500;}" &

    ".tags{margin-bottom:10px;}" &

    ".chip{display:inline-block;margin:3px;" &
    "padding:4px 8px;border-radius:5px;font-size:12px;}" &

    "</style></head><body>" &

    "<div class='panel'>" &
    "<h3>お客様コメント確認</h3>" &
    "<div id='status' class='status'></div>" &
    "<div id='tags' class='tags'></div>" &
    "<div id='comment' class='comment'></div>" &
    "</div>" &

    "<div id='source' style='display:none'>" &
    safeComment & "</div>" &

    "<div id='redWords' style='display:none'>" &
    safeRed & "</div>" &

    "<div id='yellowWords' style='display:none'>" &
    safeYellow & "</div>" &


    /* ==================================
       ⑥ キーワード判定処理
       ================================== */

    "<script>" &
    "(function(){" &

    "var text=document.getElementById('source').textContent||'';" &
    "var rules=[];" &
    "var seen=Object.create(null);" &

    "function addRules(id,color){" &
    "var value=document.getElementById(id).textContent||'';" &
    "var words=value.split(String.fromCharCode(13)).join(String.fromCharCode(10)).split(String.fromCharCode(10));" &
    "for(var i=0;i<words.length;i++){" &
    "var word=words[i].trim();" &
    "if(word&&!seen[word]){" &
    "rules.push({word:word,color:color});" &
    "seen[word]=true;" &
    "}" &
    "}" &
    "}" &

    "addRules('redWords','red');" &
    "addRules('yellowWords','yellow');" &

    "var output=document.getElementById('comment');" &
    "var status=document.getElementById('status');" &
    "var tags=document.getElementById('tags');" &

    "if(!text.trim()){" &
    "status.className='status empty';" &
    "status.textContent='コメント未入力';" &
    "output.textContent='コメントがありません';" &
    "return;" &
    "}" &

    "var pos=0;" &
    "var hits=Object.create(null);" &

    "while(pos<text.length){" &
    "var next=-1;" &
    "var selected=null;" &

    "for(var j=0;j<rules.length;j++){" &
    "var index=text.indexOf(rules[j].word,pos);" &
    "if(index>=0&&(next<0||index<next||" &
    "(index===next&&rules[j].word.length>selected.word.length))){" &
    "next=index;" &
    "selected=rules[j];" &
    "}" &
    "}" &

    "if(!selected){" &
    "output.appendChild(document.createTextNode(text.slice(pos)));" &
    "break;" &
    "}" &

    "output.appendChild(document.createTextNode(text.slice(pos,next)));" &

    "var mark=document.createElement('mark');" &
    "mark.className=selected.color;" &
    "mark.textContent=selected.word;" &
    "output.appendChild(mark);" &

    "hits[selected.word]=true;" &
    "pos=next+selected.word.length;" &
    "}" &

    "var count=0;" &

    "for(var k=0;k<rules.length;k++){" &
    "var r=rules[k];" &
    "if(hits[r.word]){" &
    "count++;" &
    "var chip=document.createElement('span');" &
    "chip.className='chip '+r.color;" &
    "chip.textContent=r.word;" &
    "tags.appendChild(chip);" &
    "}" &
    "}" &

    "if(count>0){" &
    "status.className='status warn';" &
    "status.textContent='要確認:'+count+'種類のキーワード';" &
    "}else{" &
    "status.className='status ok';" &
    "status.textContent='注意キーワードはありません';" &
    "}" &

    "})();" &
    "</script></body></html>"

] ;

    "data:text/html;charset=utf-8;base64," &
    Base64EncodeRFC ( 4648 ; html )
)

				
			

4.強調表示するキーワードの追加・変更方法
   今回のカスタマイズでは、強調表示するキーワードを自由に追加・変更できます。
   キーワードは重要度に応じて、以下の2種類に分けています。

  • 🔴 赤色:重要なキーワード(キャンセル・住所変更など)

  • 🟡 黄色:確認用のキーワード(置き配・領収書など)

変更したい場合は、計算式の上部にある「redWords」「yellowWords」の部分を
修正してください。

【1】キーワードを追加する場合

追加したいキーワードを " "(半角のダブルクォーテーション)で囲み、
末尾に ;(半角のセミコロン)を付けて追加します。

例えば、赤色のキーワードに「至急」を追加したい場合は、以下のように設定します。

【2】キーワードを変更・削除する場合
     キーワードを変更する場合は、" " 内の文字を変更してください。

          不要なキーワードは、該当する行を削除してください。

      ※最後のキーワードを削除する場合は、その一つ前のキーワードの末尾にある
          セミコロン(;)も削除してください。

【3】黄色のキーワードを変更する場合
          黄色で強調表示するキーワードも、同じ手順で変更できます。 
          計算式の「yellowWords」にあるキーワードを追加・変更してください。

【4】計算式を設定する
          キーワードの設定が完了しましたら、Webビューアの「カスタムWebアドレス」に
          計算式を設定してください。
          設定したキーワードがコメント欄に含まれている場合、自動的に色付きで
          強調表示されます。

※キーワードは完全一致する文字列を対象とします。
  設定したキーワードが含まれていない場合は強調表示されません。

5.画面上部の表示→ブラウズモードに切り替えます。
※変更の確認を求められた場合は、「保存」を選択してください。

修正は以上です。

その他に「こんなことできる?」ということがございましたら、お問い合わせください!
※内容によっては有償対応、使用されている環境等によっては
 対応不可の場合もございますことを予めご了承ください。

その他のFAQ

FAQ

AmazonAPI Seller central 設定

1.Seller centralにログインし、右上の設定→ユーザ権限をクリックします。 2.ユーザー権限のページに切り替わりますので、左下にある「アプリ管理を表示」をクリックします。※権限の高いアカウントのみが表示出来る

続きを読む
FAQ

【Amazon】注文データ取得と出荷通知

『店舗アップ♪』『頑張れ♪店長!』に取り込ませる注文データのダウンロード方法と出荷通知のアップロード方法を記載いたします。 注文データの取得 ダウンロード手順 ▼セラーセントラル「注文レポート」 https://sell

続きを読む