クラウドの読み取りエラーとそれに対する対応プログラム エラーの概要:プロジェクト開始時に、サーバー上のクラウドデータがユーザー側のクラウド変数に反映されないことがある プログラムの概要:ユーザー側がサーバー上のクラウド変数を読み取れたかどうかを検知し、変数”エラー検知”に返す(0:正常、1:エラー) →何かしらの方法で再読み込みを行わせるプログラムがあるかも(読み取りエラーが発生した場合でも、2分ほど経つとクラウド変数が反映されることがあることから)
(長いうえに憶測が多いです) 現在、プロジェクト開始時にクラウド変数をユーザー側が読み取る際に失敗することがあり、それによって投票・ハイスコア記録などに影響が出ているため、それらを防ぐためにはユーザー側でクラウド変数の読み取りの成否を判定し、失敗した場合にはクラウドへのアクセス制限を行うプログラムを作る必要があると考えた。 このプロジェクト内にその1例となるプログラムを作成したので、参考にしてほしい エラーの詳細と具体的な原因(推定):現在、プロジェクトとクラウド変数はサーバー上で分けて保存されており、ユーザーがプロジェクトを読み込む際には、 1.もともとのプロジェクトを読み込む 2.付随するクラウド変数を読み込み、上書きする というプロセスをとっていると思われる。 しかし、その際にプロセス2が正常に行われないことがあり、その場合、もともとのプロジェクトのクラウド変数の値がそのままユーザーに提供され、そのデータを基にクラウド変数の編集が行われるため、ランキング機能などに不具合が生じることがある (古いプロジェクトではリセットされるのが初期値ではない場合があったため、初めはプロジェクト内のクラウド変数を直接ユーザー側が変更できる仕組みをとっていたのかもしれない) →もしくは、数か月単位でプロジェクトに対して現在のクラウド変数が上書きされるという仕組みかもしれない (直接書き込みを行えるようにすると、中を見て、変数を0にするなどしてもクラウド変数の変更自体はオリジナルに付随するため”別作品”扱い、つまりリミックス扱いされず、よって他人のプロジェクトの変数を勝手に書き換えることができるようになってしまうため、変数も含めてそのプロジェクトとすることで、作品を保護し、また作品をセーブする際に変数ごとセーブできるようになっていると思われる) 今のところscratch側からプロセス2が正常に行われたかの判定をするプログラムなどは提供されていないため、判定用の特別なスクリプトを書く必要がある。 また、ユーザーがアクセスしている際にほかのユーザーによって変数が変更された場合の読み込みのエラーは検証していないが、正常に機能している様子なため、オンラインゲームなどを作成する場合には考慮する必要性は薄いかもしれない(割り込み処理としてそちらの読み込みは優先され正常に行われるのか、プログラム開始時のクラウド変数読み込みに独特の難しさがあるのか、読み込みは失敗しているものの試行回数が多いため結果として誤作動にまでは至っていないのか、またはそれ以外の原因なのか) また、同接ではない時に複数のクラウド変数があり特定の変数を編集した場合、更新は独立して行われ、それによってほかのクラウド上の変数が変更されることも、ユーザー側のほかのクラウド変数が再読み込みされることもなかった 基本的に、このバグはデータ量が多いほど頻繁に起こり、少ないほど頻度が小さいとみられる(クラウドデータの読み込みはプロジェクト実行後に行われているとみられるので、実行後に読み込み専用の時間を設けるなどしてバグを軽減できる可能性もある) →再読み込みを繰り返すと読み込みが正常に行われることがある 現在、このエラーがユーザーの通信状況などによるものなのか、サーバーのアクサス集中などによるものなのかは全くわからないが、(少なくとも自分のPCで)不具合が起こり、ランキングなどの不具合を引き起こしているのは確かなので、対応が必要と判断する。 また、クラウドの編集履歴などから、読み込みに失敗した場合でも。ユーザーによるクラウドデータの編集は問題なく行える模様である。 (ほかのクラウドを用いたプロジェクトのコメントやディスカッションフォーラムなどによると、このバグは少なくとも1年半以上前から発生している模様)