#author("2024-03-09T12:51:53+09:00","","")
#author("2024-03-10T21:04:54+09:00","","")
***対ユーザーインターフェース用ゴースト、「それはあなたです!」に関する仕様書。 [#nd6878bf]
**ゴースト概要 [#j5d5b1e7]
-ゴースト間コミュニケート機能を利用して、ゴーストとユーザの間のコミュニケーションの仲立ちをします。
-ゴーストと言う「ソフトウェア」の「ユーザインタフェース」としてのゴースト。&br;ユーザインタフェースとしてのゴーストなので、ゴースト側からは、ユーザと同じ物として扱われることを想定しています。&br;逆に、ユーザ側からは、ユーザの分身(Miiやネトゲのプレイヤーキャラクターのような存在(アバター))として扱われることを想定しています。
-設定ファイル(anatadesu_setting.txt)をゴーストのghost/master/フォルダ直下に置くことで、ゴースト独自のメニューを表示させたり、組み込み済みキーワードを使えないようにしたりすることができます(Ver.2.0以降、[[設定ファイルのサンプル:http://www.hironet.jp/ukagaka/ghost/yoshino/ghost/master/anatadesu_setting.txt]])
*やってること [#kb07eb5c]
-ユーザが選択したキーワードを、該当のゴースト(拡張コミュニケート使用時は、起動中のすべてのゴースト)へ、ゴースト間コミュニケート機能を使って送信しています。
-台本コミュニケートを受信して選択肢などを表示し、その結果を、台本コミュニケートを送信してきたゴーストに返信しています。
*関連URL [#a5c68ef6]
-[[配布場所:http://www.hironet.jp/ukagaka/#anatadesu]]
-動作デモ動画
--[[YouTUBE:http://www.youtube.com/watch?v=3EVAE1wjkro]]
--[[ニコニコ動画:http://www.nicovideo.jp/watch/sm10585873]]
&br;※上記2つの動画の内容は同一です。
*こんなことができます・こんなメリットがあります [#xefffbb6]
-ユーザーは……
--今までよりも簡単にゴーストに対して呼びかけを行うことができます。
--話しかけられるキーワードがあらかじめ示されているため、何を呼びかけたらいいか分からない、と言うことが無くなります。
--話しかけられるキーワードが限定されているため、「ごめん、分からない」などと言われる確率が下がります。
--ゴーストの実装次第では、今までよりもゴーストとの対話が増え、更にゴーストを身近な存在として感じられるようになります。
-ゴースト作者は……
--今までよりも簡単にユーザからゴーストに対して呼びかけてもらえるようになります。
--反応できるキーワードをあらかじめ示しておくことにより、せっかく実装したのに全然呼びかけられない、と言うような、努力の無駄を無くすことができます。
--反応すべきキーワードが限定されているので、ユーザからの呼びかけに対して、ゴーストがとんちんかんな反応を返してしまう確率が下がります。
--選択肢やインプットボックスを表示するようなイベントを、「それはあなたです!」に丸投げすることにより、ゴースト自体のトークを中断することなく、ユーザ側に入力を求めることができるようになります。
--今までよりもユーザとゴーストの対話を増やすことができますので、更にゴーストを身近な存在として感じてもらえるようになります。
--メニューを開くアクションを「それはあなたです!」に丸投げすることにより、マウスのダブルクリックでメニューを開くようにする必要が無くなるので、マウス反応の自由度が高まります。
*こんなことはできません・こんなデメリットがあります [#waab571c]
どんなことも、うまい話だけ、なんてことはない訳で……
-あらかじめキーワードが示されているので、「ネタバレ」が避けられない。ネタバレ避けに「隠しキーワード」を作った場合、今まで以上に気づかれにくくなる(むしろそれを狙う、と言う手もありますが)。
-入力機能を「それはあなたです!」に代行させる場合、「それはあなたです!」がインストールされ、同時に起動していなければならない(ただし、ゴーストの存在チェックと、NARの自動インストール、ゴースト呼び出しを使用すれば、自動化は可能であると思われます)。
-「それはあなたです!」自体も独立した汎用コミュニケート用ゴーストですので、選択肢などを丸投げされても、あまり複雑なことはできません(対象となるゴースト内部の実装次第でどうにでもなりますが、「それはあなたです!」から、直接、対象となるゴースト内のイベントを呼び出す(\![raiseother])、と言うようなことはできませんし、意味がありません)。
-\0名が特殊(本来は環境変数である%username)なので、ゴーストやベースウェアによっては、通常のゴーストよりも対応に手間が掛かったり、場合によっては予期せぬ動作をする可能性があります。
***テクニカルリファレンス [#z2d82cba]
**組み込み済みキーワード(&lastmod;現在) [#v4d74c11]
|CENTER:キーワード|CENTER:BGCOLOR(SILVER):トークID|
|おはよう!|BGCOLOR(SILVER):DEFAULT_TALK_000|
|こんにちは!|BGCOLOR(SILVER):DEFAULT_TALK_001|
|こんばんは!|BGCOLOR(SILVER):DEFAULT_TALK_002|
|おやすみ!|BGCOLOR(SILVER):DEFAULT_TALK_003|
|元気?|BGCOLOR(SILVER):DEFAULT_TALK_004|
|行ってきます|BGCOLOR(SILVER):DEFAULT_TALK_005|
|ただいま~|BGCOLOR(SILVER):DEFAULT_TALK_006|
|可愛いね!|BGCOLOR(SILVER):DEFAULT_TALK_007|
|大好き!|BGCOLOR(SILVER):DEFAULT_TALK_008|
|綺麗だね!|BGCOLOR(SILVER):DEFAULT_TALK_009|
|愛してるよ!|BGCOLOR(SILVER):DEFAULT_TALK_010|
|結婚して!|BGCOLOR(SILVER):DEFAULT_TALK_011|
|なでなで|BGCOLOR(SILVER):DEFAULT_TALK_012|
|つんつん|BGCOLOR(SILVER):DEFAULT_TALK_013|
|ぎゅ~|BGCOLOR(SILVER):DEFAULT_TALK_014|
|さわさわ|BGCOLOR(SILVER):DEFAULT_TALK_015|
|もみもみ|BGCOLOR(SILVER):DEFAULT_TALK_016|
|ちゅっちゅ|BGCOLOR(SILVER):DEFAULT_TALK_017|
|うるさい|BGCOLOR(SILVER):DEFAULT_TALK_018|
|黙れ|BGCOLOR(SILVER):DEFAULT_TALK_019|
|帰れ|BGCOLOR(SILVER):DEFAULT_TALK_020|
※このキーワードは、TwitterのBOTを参考にしています(BOTが反応するように仕込まれていることが多いキーワードを選んでいます)。&br;※部分一致でキーワードを判定するSHIORI(里々など)の場合、トークIDで判定すると、反応の誤爆を避けられます。&br;※このほか、ゴーストごとに独自に設定されているキーワードもあります。&br;※アクション選択メニューはタイムアウトしません(何かアクション(キャンセルを含む)を選択するまで開きっぱなしです)。&br;※メニュー開いて(DEFAULT_TALK_021)は、Ver.2.0で削除されました。必要な場合は、設定ファイルを使用して「ゴースト専用メニュー」として追加して下さい。
**ゴースト側で対応させるには? [#q75fbfb5]
-このゴーストからのコミュニケートに対し、上記キーワードに対する反応を記述してください。&br;汎用反応の中に上記キーワードを含めておけば、そちらで反応するので、このゴースト専用に特別に反応を用意しなくても大丈夫な場合もあります。
*各SHIORI用のサンプル辞書 [#o590d572]
このサンプルを参考に、それぞれのゴースト用の反応を記述してください。
-[[YAYAサンプル:http://www.hironet.jp/ukagaka/ghost/anatadesu/YAYA_Sample.dic]]
&br;YAYA用サンプルです。&br;''※最新版のシステム辞書(shiori3.dic)を使用している前提でのサンプルです。システム辞書が古い場合、このままでは動作しません。ご注意ください。''
-[[里々サンプル:http://www.hironet.jp/ukagaka/ghost/anatadesu/satori_sample.txt]]&br;里々用サンプルです。
-[[華和梨 OpenKEEPSサンプル:http://www.hironet.jp/ukagaka/ghost/anatadesu/kawari_openkeeps_sample.txt]]&br;華和梨 OpenKEEPS用サンプルです。&br;※[[普通人みかん/「それはあなたです!」対応メモ]]もご覧ください。
*「それはあなたです!」からゴーストに通知されるゴースト名は? [#fdf06791]

 %username

-「え?これが?」と言うゴースト名ですが、こうしないと、ゴースト名を取得して汎用コミュニケート反応するゴーストで不自然な反応になるので、あえてこうしています。
-ゴースト名が特殊なので、ゴースト間コミュニケートのSender特定や、切り替え反応などで問題が出る可能性があります。ご注意ください。
*「それはあなたです!」からゴーストに通知されるコミュニケートスクリプトの書式 [#u6c817f0]

 \_q###<<呼びかけ内容>>###\c\_q\1\s[10]\0\s[0]<<ゴースト名>>、<<呼びかけ内容>>。\e

-ヘッダ(\_q~\c\_qで囲まれた部分。以下同じ)と本文の「呼びかけ内容」の中身は基本的に同じですが、本文はトランスレートされている可能性があります。&br;キーワードとして使用する場合は、ヘッダ部分を調べる方が確実です。
-現時点での仕様では、呼びかけ対象のゴーストをユーザが認識しやすいように、ゴースト名は必ず呼ぶようにしています(拡張コミュニケートを使った一斉同報送信時は、「みんな」と呼びかけてます)。&br;このため、一部のゴーストでは想定通りの動作をしない(たとえば、名前呼ばれ反応が優先される、など)ことがありますのでご注意ください。
-ヘッダ部分に###で区切った物を配置することで、キーワードの抽出と条件分岐がしやすいようにしてみました。
-ヘッダ部分は、バルーン上では瞬間的にクリアされるため、ベースウェアの実装やマシンの処理速度にもよりますが、基本的にユーザの目に触れることはありません。
**台本コミュニケートへの対応 [#zf39abdd]
-このゴーストは台本コミュニケートに対応しています。
-台本コミュニケートに関しては、[[台本コミュニケート仕様書]]を参照してください。
-台本コミュニケートを使用することで、コミュニケート対象となるゴースト側から「それはあなたです!」に選択肢を表示させ、ゴーストとの会話を成立させることができます(実際の例はデモムービーをご覧ください)。
-ゴースト名(\0名)が特殊なので、環境によってはうまく動作しない可能性があります。ご注意ください。
-拡張コミュニケート使用時は、複数のゴーストから反応されたときに収拾が付かなくなるので台本コミュニケートからの応答を無視します。
-台本コミュニケートのreference3として通知される変数に以下の内容を必要なだけ記述することで、選択肢を使い、任意の言葉を投げ返させることができます。&br;これを用いると、ユーザーとゴーストとの会話を成立させることが可能になります。具体例はデモムービーをご覧ください。

 \q[選択肢のキャプション,OnDaihonCommunicateExecute,「それはあなたです!」に喋らせたい内容(,トークID)]

-OnDaihonCommunicateExecuteが台本コミュニケートからの返信用イベントです。選択肢などを使用してキーワードを返信させたい場合は、このイベントを発動させてください。
-トークIDはオプションです(設定しなくても問題ありませんが、設定しておく方が判定が楽になると思います)。
-「キャンセル」の選択肢を作りたい場合は、\q[キャンセル,nop]と記述した選択肢を設けてください(キャンセル、のキャプションは、「会話を打ち切る」などに、任意で変更可能です)。
-reference3を使用して選択肢を記述する場合、ウェイトは自動挿入されるので、書かなくても大丈夫です(\wX形式のウェイトは、書いても削除されます。\_w[XXX]形式のウェイトはそのまま残ります)。
-reference3を使用してメニューなどを表示させた場合、それがタイムアウトするかどうかは、reference3の記述内容に依存します。&br;なお、メニューがタイムアウトしても、何のイベントも発生しません(ゴースト側にも通知されません)。
*台本コミュニケートを使用したときの返信 [#c967548b]

 \_q###(トークID):(喋らせたい内容)###\c\_q\1\s[10]\0\s[0](喋らせたい内容)。\e

-台本コミュニケートの内容を上記の仕様通りに記述した場合、ユーザが選択肢を選んだときに、このフォーマットで、台本コミュニケートを投げてきたゴーストにスクリプトを投げ返します。
-本文の「喋らせたい内容」は、トランスレーターの影響で、内容が変化する可能性があります。&br;ヘッダ部分を見てキーワードを調べる方が、確実にキーワード反応させられます。
-トークIDなどを使用してキーワード反応したい場合に備え、OnDaihonCommunicateExecuteには、reference1で任意の値を設定できるようにしています(デリミタとして使用されている"###"と":"の使用は推奨しません)。
-返信スクリプト内でのトークIDとキーワードは、ヘッダ内部で半角コロンで区切っています。
-こちらからは単純に台本コミュニケートで設定されたキーワードを投げ返すだけです。こちらから台本コミュニケートを発動させるようなことはしません。&br;キーワードに対する反応は、それぞれのゴースト内で制御・記述してください。
-トークIDを設定していなくても、台本コミュニケートからの返信は必ずこの形式になります(半角コロンが必ず含まれます)。
*いちいち選択肢を書くのが面倒な人向けの手抜き記述仕様 [#paff813a]
はっきり言って、\q[~~]を何個も書き並べるのは面倒です。なので、手抜きできる方法を用意してみました。
//-ゴースト間コミュニケートの、reference4に要素を列挙すると、それを元に選択肢リストを自動生成します。また、reference5でキャンセルボタンのキャプションを設定します(具体例は上記サンプルスクリプトに組み込んであります。
-ゴースト間コミュニケートの、reference4に要素を列挙すると、それを元に選択肢リストを自動生成します。また、reference5でキャンセルボタンのキャプションを設定します。
-選択肢の要素の書式は

<<選択肢のキャプション=「それはあなたです!」が喋る内容>>###<<トークID(省略可)>>

//で、これをカンマ区切りで列挙します。キャプションとトークIDの区切りは、半角シャープ(#)3つです(具体的な例は上記サンプルスクリプトを見てください)。&br;トークIDは省略可能です。
で、これをカンマ区切りで列挙します。キャプションとトークIDの区切りは、半角シャープ(#)3つです。&br;トークIDは省略可能です。
-reference5に設定するキャンセル選択肢のキャプションは、単純にキャプションに設定したい文字列をそのまま記述してください。
-reference4に値を列挙した場合、reference3の内容は無視されます。
-reference4を使用して自動生成したメニューがタイムアウトするかどうかは、reference7の指定に依存します。&br;reference7を省略するか、正の整数以外を指定すると、タイムアウトしなくなります。
*インプットボックスを使う [#zea00bcd]
-名前覚えイベントなどを「それはあなたです!」に簡単に代行させられます。
-reference8に設定された値が、インプットボックスで入力が行われたときに、トークIDとして戻ります。
-インプットボックスに入力された内容は、キーワード部分に入って戻ります。
-reference5にデフォルト文字列、reference6にキャプション、reference7でタイムアウト時間を指定できます(いずれも省略可)。
*選択肢やインプットボックスを出すときに、具体的に質問や説明を書けたら便利かも? [#g53226dc]
と言う訳で、reference6に設定した物を、選択肢の前に表示するようにしました。reference6を省略すると、いきなり選択肢が表示されます([[reference6を設定した場合の実行例:http://www.hironet.jp/ukagaka/ghost/anatadesu/CAPTION_SAMPLE.png]])。
*使用できない文字 [#a11a8738]

 "'#$&()*+,-/:;<=>?@[]`{|}~

reference4、reference5、reference8では、上記の文字は使用できません。仮に使用しても'_'(アンダースコア)に置換されますのでご注意ください(デリミタとして使用される'###'と','を除く)。&br;また、\![vanishbymyself]などの"危険な"タグはエスケープされます。
*リファレンスの優先順位 [#qe64db23]
|優先順位|リファレンス|内容|
|CENTER:高|reference8|インプットボックス|
|CENTER:中|reference4|かんたん選択肢書式|
|CENTER:低|reference3|普通の台本コミュニケート書式|
つまり、reference3やreference4を記述していても、reference8が記述されているとその内容は無視されます。
**台本コミュニケートまとめ [#gce3aac6]
|CENTER:リファレンス番号|CENTER:内容|CENTER:優先度|CENTER:説明|CENTER:備考|
|reference0|%username|CENTER:-|スクリプトの宛先|「それはあなたです!」の\0名(%username)を指定してください|
|reference1|ゴーストが喋ったスクリプト|CENTER:-|送信元ゴーストが喋ったスクリプト|自動的に追加されます((この後のリファレンス番号が1つずつずれるので、送信時の設定はご注意ください。))|
|reference2|ECHO/1.0|CENTER:-|台本コミュニケート識別子|省略不可。&br;詳しくは台本コミュニケート仕様書参照|
|reference3|「それはあなたです!」に表示させたいスクリプト|CENTER:3|「それはあなたです!」のバルーンに表示したい内容を、さくらスクリプトで記述します。|reference4が設定されていた場合は無視されます((reference4が省略されると、reference3の内容が表示されます。その際、reference5とreference6の値は無視されます))|
|reference4|列挙された選択肢の項目|CENTER:2|「それはあなたです!」で表示したい選択肢の項目を、カンマ区切りで列挙します||
|reference5|「キャンセル」のキャプション&br;インプットボックスのデフォルト文字列|CENTER:-|「キャンセル」ボタンに表示したい文字列を設定します。&br;reference8が指定されている場合は、インプットボックスのデフォルト文字列を指定します。|省略可。&br;省略した場合は、ボタンには「キャンセル」と表示されます。&br;インプットボックスは未入力状態になります。|
|reference6|選択肢の前に表示される文章|CENTER:-|選択肢やインプットボックスの前に表示したい文章を指定します&br;(選択肢に対する説明など)。|省略可&br;さくらスクリプト使用可|
|reference7|タイムアウト|CENTER:-|選択肢やインプットボックスのタイムアウトを指定します(単位:ミリ秒)|省略可((省略したり整数以外の数値が指定されたりマイナス数値が指定された場合は、タイムアウトしない設定になります。))|
|reference8|インプットボックスを表示させる場合のトークID|CENTER:1|インプットボックスで入力が行われると、ここで設定した値をトークIDとして、&br;入力内容をキーワードとして返します。名前覚えなどに利用できます。||
***その他 [#a11a8738]
*こんなときは [#t2a6a8aa]
-「それはあなたです!」から呼びかけられたくない
--該当するゴーストの/ghost/master/以下に、設定ファイル(anatadesu_setting.txt)を置き、その中に、DEF_ALL<タブ>0、とだけ記述して下さい。&br;こうすると、そのゴーストに対して、「それはあなたです!」から一切呼びかけなくなります(一斉呼びかけの時も、該当ゴーストを除外して呼びかけます)。
-独自のキーワードを追加したい
--該当するゴーストの/ghost/master/以下に、設定ファイル(anatadesu_setting.txt)を置き、その中に、キーワードを列挙して下さい。&br;必要に応じてトークIDも設定して下さい。詳しくは、上記の設定ファイルのサンプルを参考にして下さい。
--該当するゴーストの/ghost/master/以下に、設定ファイル(anatadesu_setting.txt)を置き、その中に、キーワードを列挙して下さい。&br;必要に応じてトークIDも設定して下さい。

※設定ファイルの書き方については、[[設定ファイルのサンプル:http://www.hironet.jp/ukagaka/ghost/yoshino/ghost/master/anatadesu_setting.txt]]を参考にして下さい。
*既知の問題点 [#t2a6a8aa]
-ゴーストが呼びかけに反応しません
--該当ゴーストがゴースト間コミュニケートに対応していません。作者さんに依頼して、ゴースト間コミュニケートに対応してもらってください。&br;このゴーストの仕様に合うように対応してもらうのがベストですが、汎用の「おはよう」とか「おやすみ」などへの反応があるだけでも違ってきます。
-YAYAゴーストで台本コミュニケートを使用すると意図したとおりの動作をしてくれない
--YAYAのシステム辞書が古い場合、リファレンスの記述を途中で省略すると、省略したところ以降のリファレンスがセットされず、意図したとおりの挙動にならないことがあります。&br;この現象は、最新版の[[紺野ややめ:http://ms.shillest.net/yayame.xhtml]]のシステム辞書を導入し、リファレンスの書き方を、referenceXと言う形式から、reference[X]と言う形式の物に変更すれば回避できます。&br;システム辞書の移行には多少手間が掛かりますが、移行した方が何かとメリットが大きいので、古いタイプのシステム辞書を使用されている方は、この機会に移行してしまうことをおすすめします。
-呼びかけに対して、「○○くんさん、おはよう」と言うように応答してしまう
--伺かの環境変数展開が、トランスレーターを通った後に行われるために発生する問題です。&br;伺かの仕様なので、ユーザ名に敬称等を含めないようにする、ゴースト名を見て処理を分岐する、などの方法で対応して下さるようお願いいたします。


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS