スプレッドシートで本当に隠しておきたいもの付きで配布
スプレッドシートに共同編集者を設定はしたいがオーナー以外には隠しておきたい情報がある場合、スクリプトプロジェクトの共有を「ドキュメントの共同編集者にプロジェクトの編集を許可する」のチェックは付けないようにしておく。
こうするとオーナー以外はスクリプトエディタを開いて[ファイル]-[プロパティ]を開いても、「プロジェクトのプロパティ」を見ることができない。「ユーザープロパティ」しか見えない。この情報はコード内から、ScriptPropertiesサービスで参照できるのでスクリプトコードにハードコードしないようにすれば良さげ。例えば、なかじまんさんがApps Scriptで2Legged OAuthを実現させていたので、consumerKeyとconsumerSecretをScriptPropertiesに保存しておくのが良い使い方かも。
…と思ってたんだけど、複製したらプロパティの内容は消失することが判明。残念。
コピーを作成で複製すると、プロジェクトも一緒に複製されるので、リードオンリーだった共同編集者も複製したものであれば編集できるようになる*1。
サービス公開を有効にして外からプロパテイを流しこむという手もあるんだけど、「サービス公開を有効に」するAPIが無さそう。やりたいことはDocument List APIで複製したスプレッドシートに対してプログラムから操作したいので...
ちなみにサービスとして公開というのは、doGet(e) をメソッドして定義しておけば呼び出してくれるというもの。こちらが参考になった。本家はこちら。
しかし実行してみたら...オワタ
Google ドキュメントでサーバー エラーが発生しました。ページをリロードしても解決しない場合は、お問い合わせください。
この問題やその他の問題についてディスカッションするには、Google ドキュメント ヘルプフォーラムにアクセスしてください。報告されている問題のリストを確認するには、Google ドキュメントの報告されている問題ページをご覧ください。
ご不便をおかけして申し訳ありません。
- Google Docs チーム
追記(9/8)
…って、違う違う。終わってない。ScriptPropertiesサービスを触るコードを書いたら上記のエラー画面になっただけでした。そういう意味では、サーブレットとして実行する場合に利用出来るサービスが何なのかが分からないと辛いですねー。