プラグインに関するトラブルの指針

はいどーもこんばんはニートです。
みなさんプラグインでトラブってますか?
ご愁傷様です。
あなたの不幸で飯がうまいです。

あっ、嘘です。叩かないで。
本日はプラグインに関するトラブルの指針を書いていきたいと思います。
トリアコンタンさんが似たような記事を書いていたと思いますので、ググってそっちもご覧あそばせ。

プラグインに関するトラブルの指針

最初に三つの指針を紹介します。

1.プラグインを変更せずに解決する
2.競合か不具合かを確認する
3.競合を回避する

はい以上です。
一つ一つ見ていきましょう。

1.プラグインを変更せずに解決する

プラグインでトラブルが発生すると、まずプラグインの中身を見ようとしてしまうのが人間の性です。
が、プラグインによるトラブルでも、プラグインを変更する必要がない場合もあります。
例えばこちら。
http://tm.lucky-duet.com/viewtopic.php?f=23&t=4800
要はダメージのポップアップを消したいというご質問です。

ダメージのポップアップの処理をコアスクリプトやプラグインから探すとなると一苦労ですよね。
また、改変した箇所が意図しないところにまで影響を及ばさないとも限りません。
これは困りました。

では発想を変えてみましょう。
ご質問は「ダメージのポップアップを消したい」のですから、単にポップアップ用の画像を透明化させればよいのではないでしょうか?
普通のPC操作に慣れている方なら(そして大半のツクールユーザーは慣れていると僕は推察します)、透明化くらいは問題なくできる作業です。
プラグインの中身を読める必要もありません。
実際、ご質問された方もこれで解決していますね。

ちなみにですが、以前に「ダメージのポップアップを消したい」という個人的な依頼が僕の方に来たことがありました。
今回と全く同じアドバイスをして、無事に解決できていましたよ。

「プログラムを書かなければバグは発生しない」
ん~名言です(なんかの本に書いてました)。

2.競合か不具合かを確認する

「あれ、このプラグインなんだか動作がおかしいな」と思うこともあるでしょう。
また、よくわからない難解なエラーが発生する場合もあるでしょう(エラーの見方については以前に書きました)。
多くのプラグインを導入していた場合、それがプラグイン固有の問題なのか、それとも他のプラグインとの競合で発生している不具合なのか、慣れていないと判断がつきません。
これではプラグイン制作者さんに質問するのもはばかられますよね。
そんなとき役に立つ素晴らしい方法があります。

まず、目的のプラグインをONにします。
その後、残りのプラグインを全てOFFにします。

これでもまだ「なんだか動作がおかしい」ということであれば、それはプラグインの設定が間違っているか、そもそもプラグイン自体にバグがあるかです。
逆に想定通りの動作をするようになったなら、それは何らかのプラグインと競合しています。
一つ一つプラグインをONにしていき、どのプラグインと競合しているのか確かめましょう。
それからプラグイン制作者さんに報告すれば、適切な解決策を出してくれるかもしれません。
まあこのへんは人によりますが、「どのプラグインと競合してるかわかりませんけど、競合してる気がします! 確認お願いします! はいこれプラグインの一覧(50個以上のリストをペタリ)!」と言うよりは対応してくれやすくなるでしょう。

3.競合を回避する

さてプラグインの競合を制作者さんに直してもらいたかったのですが、何かしらの理由でそれが難しいとしましょう。
そんなとき、あなたならどうしますか?
プラグインの使用を諦め、代わりのプラグインを探すのも一つの手です。
ですがどーしてもそのプラグインを使用したいのであれば、自分の力で競合対策をするしかありません。

「そんな難しいことできないよー」と思われるかもしれませんね。
ですが、競合の大部分はコアスクリプトに対して何らかの処理を加えているために発生しています。
つまりAというプラグインがXXXというコアスクリプトを改変し、BというプラグインもXXXというコアスクリプトを改変することによって引き起こされるのです。
では競合を解決するにはどうすればよいのでしょう?
簡単です。
競合を引き起こしている部分(すなわち上書きしあっている部分)を探し出し、各々を引き離してやればよいのです!

実際にそれを適用し、解決したのがこちらのスレッドのご質問です。
http://tm.lucky-duet.com/viewtopic.php?f=23&t=4801

ただこの「上書きしあっている部分」のパターンにはいくつか種類があり、その種類ごとに引き離し方が異なります。
この辺はJavaScriptのプロトタイプ継承の知識が必要ですかね……。
ちなみに今回は、一方がコアスクリプトを完全に上書きしていました。
このせいで不具合が出ていたので、上書きされる前のコアスクリプトをもう一方に作成(コピペ)し、それをプロトタイプ継承させたクラスを別に作りました。

三つの指針を見て

いかがでしたでしょーか。
最後の指針はさておき、残り二つは本当に簡単にできると思いますので、試してみてください。

フォローする