【初心者向け】ウディタとGAS連携時の基本知識

Google Apps Scriptを略してGASと書いています。
ウディタのダウンロード機能を使ってデータ送信したり
GASで処理してデータ受信することによって
ランキングなどの簡易なネット連携機能が作れます。
ただ、GASに慣れてない人は苦労する部分があると思い
基本知識になりそうな内容を記事にしてみました。

<留意点>
・ウディタVer3.303 と執筆時点の情報です。
 時間経過すれば仕様が変わる可能性があります。
・ランキングコモンなどを借りていじる時に
 困ったら見る感じの、簡単的なお作法のような内容です。
・初心者向けとか書いてますが、実質的には
 ウディタ中級者向けな内容かと思います。

①Googleアカウントが必要

Googleのアカウントを作る必要があります。
こちらの説明については省略します。


②ウディタでダウンロード機能ON

ウディタの初期状態だと
ダウンロード機能がOFFとなっているので
それをONにする。

 1:エディターオプションを開く
 2:「上級者向けコマンドを使用する」にチェックを入れる
 3:設定完了
設定完了を押すと、ウディタが再起動します。

ダウンロード機能ONの説明

※コモンイベントやマップEvなどを
 何かエディットしていた場合は
 更新があっても保存は促されないと思うので
 注意してください。


③ウディタには2種類の送信方法

送信方法

ウディタ側の送信方法は2種類あります。

 GET:URL部分に直接パラメーターを入れて送信します。
   (URLを見ればパラメーターが見える形式)
    少量の情報であれば扱いやすい。
    URLとパラメーターの間に?を入れて区切る必要がある。

 POST:URLではない部分に付属して送信します。
    (URLを見てもパラメーターが見えない形式)
              改ざんされにくく、情報量も多く送れる。
     URLとパラメーターの間の?の文字が不要。

ウディタのダウンロード機能

ホームページを作る感覚で言うなら
IDやパスワードを含むアカウント情報を扱う場合はPOST。
検索結果などでURLを使い回せると便利ならGET。
結局はケースバイケースになりますが
基本的にはPOSTで導入を考えて、GETじゃないとダメならGET
という感じでいいかと思います。
※別にGETが悪い訳じゃない
※GAS側をdoPostやdoGetにして合わせる必要があります。

パラメーターの式

mode=set,id=1,score=100のような代入式や
Apple,Banana,CatのようなCSVっぽい形式で
文字列を送る式があるようです。
GETとPOSTで変えるような書式は
前述のとおり、URLとパラメーターを?で区切るか否か
ぐらいしか私は認識してないのであしからず。

SJIS変換

SJISとは、Shift-JISという旧来から使われている日本語コード。
その後に使われてるのがUTF-8というもので
Unicode(ユニコード)として現状普及している。

んで、SJIS変換を使うケースというのは
ウディタver2から3へアップデート時用
互換維持のための機能という認識で良いと思う。
ウディタver3から使おうとしている
またはサーバー側がUTF-8に対応できている
などの場合はチェックを付けない方がいいです。

URLエンコード

パラメータの日本語部分を「%XX」のような
文字列に置換して送信する。
基本的には使っておけばいいんじゃないかな、という感覚。
日本語のままではサーバ側が対応してない場合は
URLが送受信できない可能性がある。
一応、GAS相手にエンコードせずに使えるかも。
あとエンコードしたとして、GAS側でのデコードは必要ないかも。
(この辺は各自でご検証ください)
(ウディタ側がちゃんとエンコードしてるのかも
 よく見えない部分でちょっと混乱する部分。
 というか細かい仕様説明はなく、よくわからない)

クエリ

要するにパラメーター。
GETで送る時だと?以降の内容です。
ウディタ側にデコード機能は現状ないので、もし使いたいなら
Rtt様(最下部の参考元)のを規約確認の上で流用させてもらう
のが一番楽かもしれない。
ちなみに、ウディタ側はエンコードせずとも受信できるので
受信側に付けるのは特に意味はないかもらしい。
(開発者様に問い合わせたらそんな感じだった)

ちなみに

ウディタの説明書をみれば分かりますが
ダウンロード機能の裏技でオンラインアップデートができたり
PRO版でZIPファイルのダウンロード機能なども増えたり
もしますが、ここでは説明しません。


④GAS側の注意点

デプロイしないと更新されない

GASのスクリプトをいくら編集や保存をしても
デプロイし直さないと処理内容は更新されないです!
(私は最初コレに引っかかって記事を書く決意)
デプロイボタンの編集から、新しいバージョンを作れば
GAS側のスクリプトが更新されます。

デプロイでURLを変えずに更新するやり方

データ書き込み時、排他制御を考慮

例えば、同じ時間にランキング登録の送信が
複数のデータ書き込みが発生した場合に
順位がおかしくなる可能性があります。

仮に、クリアタイムが1分-5分-7分の並びだったとして
3分のAさんが登録しようとして、1分-3分-5分となる予定が
その直前に4分のBさんが割り込んだら、結果的に
1分-4分-3分になったり、1分-4分-5分などとなる
可能性があるということです。

極短時間の処理であれば発生は稀ですが
その可能性を排除するための機能が排他制御です。
これは他人の介入を排除するという意味で
最初にアクセスした人の登録が終わるまで
あとの人に待ってもらうか諦めてもらえば
割り込み処理が発生しないようにできます。
1人の編集者だけが使っているあいだデータをロックする
みたいな言い方もあります。

アクセス回数に制限がある

GASは基本的に無料で使える素晴らしい機能ですが
1日あたりの利用回数や時間などの制限があります。
(有料プランもあるけど、それも制限がある。)

ウディコンとかで制限上限になったような話は
今のところ聞いたことがないですが。
1プレイヤーが何十回も送受信したり
長時間アクセスするような機能は
GASでは基本的に作らない方がいいと思います。

もしガッツリ通信するものを作りたいなら
なんらかのサーバーやPHPなどのプログラムなどを
自前で用意するしかないでしょう。

大文字と小文字で意味が変わる点

例えばGETかPOSTで送ったものを
GAS側が受けた時に、doGetまたはdoPostとして処理されますが
この名前や中身の関数などは
大文字と小文字で処理が変わってしまうので注意しましょう。


⑤その他注意点

不快な情報の流出に注意する

ランキング機能でありそうなのが下記
・名前で下ネタやネタバレなど不快なものを使われる
・チートやサーバーアタックにより異常な登録
・同じ人が上位を占めていて面白味がない

オフラインとは違った問題が出てくるのが
オンライン(通信機能)の常です。
対処や管理を考えておく必要があるでしょう。

通信できない場合の対処も考える

GASのサービスが終了したり
通信障害で遊べない、通信できない環境にいる
オフラインでも遊べるようにしたいなど
このあたりの環境も想定して
ゲーム制作に組み込む必要があると思います。
あるいは、管理する期間を決めて
例えば来年の年数になったら代替データで処理分岐するなど
自分が運用管理できる範囲でやるのをオススメします。

何度もデータを送られることへの対処

例えば、セーブデータからロードして即クリアし
同じランキングデータを何度を送れるといった方法があります。
そういったケースにもどう対応するか考える必要があります。
セーブするとランキング評価が下げる、あるいは
同じタイムスタンプ(またはユニークID)では自己ベストのみ登録など
自作ゲームにあった対応が必要となってきます。

排他制御を悪用されないように考える

悪意のある人がアクセスし続けるなどしてしまい
長時間あるいは半永久的なロックがかかる可能性があります。
プレイヤー側の処理待ちの間、ずっとロックがかかってしまう
などのことが起きないよう気を付けましょう。

おまけ

ウディタでPOSTとGETを両方送れる

今のとこ仕様らしい……どう使うんだろう。
URL検索値を維持しつつ、POSTデータでユーザ管理とかできる
……とかな感じだろうか(両方受け取れるのかもわからん)。
んで、GAS側ではdoPostとdoGetがあったら
doPostだけ処理される(使うなら自分で試験してね)。
あと未確認だけど、Getパラメータ自体はdoPostで受けれるらしい?

参考資料URL(すべて外部)

・Rtt Project かんたんオンラインランキング
(https://rtt398.web.fc2.com/Manualplus/recipe/01simpleRanking.html)

・猫とゲーム 素材(ランキングシステム)
(https://sites.google.com/view/nekotogame/materials)
※ウディタでのPOST送信機能は通常版で使用可能です。

・Ci-en(サカモトトマト様の記事)Google App Script 利用頻度見積もり
(https://ci-en.net/creator/11015/article/889649)


この記事が気に入ったらサポートをしてみませんか?