サーバーエラーの謎

佐野

佐野 2013年4月25日

20130425151049

GoogleAppsのグループを操作するためのシステムを構築中、
ドメイン内のユーザーと、グループに入っているドメイン外のユーザーを取得し、
シート上に表示させるという部分を作成中、
実際に動作させてみると、サーバーエラーになってしまいました。
ただ妙な事に、結果自体はちゃんと反映されていたりしますが。

ドメイン内ユーザー取得ならまだしも、
ドメイン外のユーザーを取得するのは、
全グループを取得し、その中からドメイン外ユーザーを選別して取得、
そして、行が不足していれば、その分も追加するという、
けっこう、ややこしい事になっていたりします。

なので、もしかしたらメモリー不足か何かと思って、
JavaScriptのガベージについて調べてみたりもしました。
とりあえず、グループを取得した変数にnullを代入してみたけど、効果なし。
ていうか、GoogleAppsScriptのガベージコレクタについては、
正直よくわかってませんが。
例えばif文やfor文の中で宣言した変数も、外に出ても消えないし・・・

逆に、行数が足りていれば、何のエラーも出ないので、
もしかしたら行数が影響してる!? と思いながら
行数を調整しつつスクリプトを動かしてみたら、
18行と19行を堺に、エラーが出る事がわかりました。
もっとも、処理の形によって変化するかもしれませんが・・・

というわけで、最初に行数が少なければ
とりあえず真っ先にある程度増やしてしまおうという結論に達しました。

今回のシステムでは、グループやドメインユーザーの取得などを行い、
さらにシートの行数も追加するといった荒業をしているため、
列数が極端に少ないと、どこかで余裕がなくなっているのかもしれません。
このようなエラーが出ていたら、もしかしたら行数や列数が
極端に少ないかもしれないと考えて、あらかじめ行数や列数を足してみる事も、
解決策になるかもしれません。

つまり、簡単に言うと、スプレッドシートを取得した直後に、
「insertRowsAfter()」等の関数で、
18行以下程度なら、20行ほど行数を増やせばいいと思います。たぶん。