SSTPの話

http://blankrune.sakura.ne.jp/blog/archives/16248

フィーネさん発、SSTPの問題点についての話題に関してうだうだと書いてみる。
決して解決策を提示するものではないし、建設的な議論の後押しになるかも怪しい、与太話的な感じで。

提起される問題

一言で言うと、「SSTPによってゴーストのキャラ崩れが起きる」ということ。
これは昔から言われてはいましたよね。
かつては「黒うにゅうは毒電波を受けると関西弁になる」なんて、それをも含めてネタにされていたような感じもありましたが、昨は当時とゴーストの傾向も変わり、SSTPによるトークの流し込みが致命的なキャラ崩れとして無視できない存在になり、また問題として浮上してきたということでしょう。

過去のSSTP関係で似たような問題というと、SSFファイルのときにそういう話題があったようです。
http://emily.shillest.net/specwiki/index.php?%E3%81%9B%E3%81%8D%E3%82%84%E3%81%B2%E3%82%8D%E3%81%97%2FSSF%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E5%95%8F%E9%A1%8C%E7%82%B9

あと思いつくのはボトル方面でやりすぎて怒られたとかそういう話でしょうか。

どちらにせよ、この問題について根本的、統一的な解決策は提示されていないので、再び問題として取り上げられることは自然な話です。

問題のレベル

さて、一口にSSTPでキャラ崩れすると言ってもいくつかの段階があると考えます。

まず1つ目の分け方はSocketとDirectです。
ただ、WebからのSocketは最近どこもルータ越しでまともに投げられる環境ではないため、以降ではローカルからのDirectだけを考えます。

次に、(A)IfGhost付きと(B)そうないものの2つの段階があります
さらに(A1)IfGhost付きでスクリプトがゴーストに対して最適化してあるやつと、(A2)とりあえず立っているゴーストの名前が指定されているだけの2つに分けられます。

まず(B)について考えます。
IfGhostのないSSTPは言わば汎用メッセージです。他ソフトの通知とかはこれで飛んでくるのが多いんじゃないでしょうか。
これがゴーストに飛んでくると問答無用でのメッセージが再生されるので、多くの場合、キャラ崩れが発生することと思います。

次に(A1)、これについては(B)よりは被害が少ないと思われます。
なぜなら、ゴーストを指定するということは、のゴーストに対してもっともらしいスクリプト再生されることが期待できるためです。
のゴーストのために書かれたスクリプであるならばスクリプト再生することによってキャラ崩れが発生する可能性は少ないでしょう。
ただし、スクリプトは本来のゴースト作者ではない、二次創作によって書かれたものであることが多いです。
のため、解釈のずれや書き手の願望などによって、作者の意図するキャラクター像とは異なるものが生み出される可能性があります

最後に(A2)ですが、これは質が悪いです。
何せ、最適化を期待すべきところでなんにも考慮されていないスクリプトが流し込まれるんですから。
この方法で送られたSSTPはIfGhost付きであるにもかかわらず確実にキャラ崩れを引き起こすものと思われます。

余談としては、(A2')ミスというものも考えられます。
ゴーストに最適化したスクリプトを投げるはずだったけど、プログラムミスでIfGhostを違ってとんでもないことになる、というパターンです。
ミスなら直せばいいといえばいいんですが、起こってしまったキャラ崩れは取り消せない訳でして。
「いやな事件だったね……」で流せるかどうかは個別のケースによるものかと。

現状での対処法

(B)についてはsstp.allowunspecifiedsendで対応可能なはずです。
ukadocによると、これを設定しておけばゴースト指定のないSSTPを拒否できるそうなので。

(A)については、フィーネさんの所でも挙げられていますがOnTranslateでスクリプトを握りつぶす、ことでしょうか。
ただ、あんまり使いやすそうな方法には見えません。
SSTPを握りつぶす処理と本来のトランスレート処理がごっちゃになって見通しが悪くなる気がします。
トランスレート、んなに使われないんでしょうけど。
あと、SSPの一時起動ゴーストってトランスレート通るんだろうかとかいう疑問が。

対処しにくい問題に対するアプローチ

(A)のケースについての対処ですね。
所長さんがなにやら手を入れているようですが、とりあえずそれは置いておいて。

フィーネさんの希望としてはSSTPを全部蹴る設定が欲しい、とのこと。
個人的には実装しても別にいいんじゃないかなぁと思ったりします。
りゃあSSTPを使っている人としては、全部のゴーストで必ず通知が再生されるのが望ましいと思っています。
ですが、ゴーストは沢山いるし、立っているゴーストが反応してくれなくても、他のゴーストが反応してくれればそれでいい気もするし、一時起動ゴーストもいるし。
ゴースト独自の反応がないのなら、スルーされてもユーザーにとっては実害少ないんじゃないかなーと思います。
しかし、完全に握りつぶされると、それは流石に困ります。通知がちゃんと送られているかどうか分からないので。

でも、個人的にSSTP拒否する設定が出来たとしても、キャラ崩れに関する問題が解決するとは思えないんですよね。
descript.txtでの設定の場合、暗号化もないですし外部から容易に書き換え可能です。
ローカルからSSTPを送ってくるなら当然ファイルにアクセス可能な訳でして、手を考えなければゴーストフォルダを探し出して設定書き換えなんてことも出来なくはないことです。
なので、設定を追加しても結局はいたちごっこになるんじゃないかな、と。

ただ、少なくともフィーネさんの記事を見る限り、(辞書いじりとかで)意図的に引き起こされるキャラ崩れについては自己責任でやってもらうしかない、とされているので、こまでやるようなソフト使ってまでゴーストになんか喋らせたい需要はは置いておいてもいいのかな。


……なんてコトを書いていたら、所長さんが対策記事を書いていた
OnTranslateでスマートに書けるんなら、それで対処するのがいいんじゃないかな。
イベントで処理なら細かい制御も可能だし、外部ソフトからの書き換えも難しいし。
「非推奨」というところに引っかかりを覚える方もいるでしょうけど、所長さんも書いていますけど、機能として提供されるものなんですから、必要があれば使うのは当然のことなので、気にするようなことでは無いと思います。