編集権限の付与・削除によるスクリプトの排他制御

2,660 views
Skip to first unread message

にんまりpapa

unread,
Jan 7, 2015, 10:31:01 PM1/7/15
to google-app...@googlegroups.com
どなたか実務経験のある方、タイトルに関するサイト記事等をご存じの方、ご教示下さい。

<課題状況>

管理部門担当者がスクリプトによる行の追加・削除・並び替え等の更新処理をスプレッドシートに対して定期的に実行します。

現場担当者は当該スプレッドシートを利用して閲覧やセルへのデータ入力等の更新を行い、行の追加挿入等の定型的な処理をスクリプトで実行できるようにしています。

この時、管理部門担当者のスクリプトと現場担当者のスクリプトの2つを同時に起動するとどう処理されるのか想像がつきませんが、正常に処理されるとは思えません。
そこで管理部門担当者のスクリプトを優先処理するために、スクリプトに他のユーザーの編集権限を一時的に削除し、閲覧権限のみ与えることにより現場担当者のスクリプト起動を制限しようと考えています。
同一のスクリプトを同時に起動するのを防ぐ場合は、Lock機能を使えば制御できますが、異なるスクリプトでは使えないと理解しています。

<質問>

1.このような使い方は正しいのか
  正しくない場合はもっと別の手法があるならご教示下さい。

2.この方法で問題がない場合、編集権限の設定や削除の手順等について

  処理担当者を含むユーザーグループに編集権限を与えておき、スクリプトの中でまず自分自身のアカウントの編集権限を与え、グループの権限を削除する。スクリプト終了時、ユーザーグループに編集権限を与え、自身を削除する。

  そもそも自身の権限を追加したり、削除するということが可能なのか?

   諮問1が正しいということであれば、テストしてみれば分かることですが、注意点等がありましたら教えて下さい。

以上、よろしくお願いします。

Tsuyoshi Kodama

unread,
Jan 11, 2015, 4:24:02 AM1/11/15
to google-app...@googlegroups.com
にんまりパパさん、

児玉といいます、こんばんは。

私もGoogle docsを使って複数メンバーによる作業フローを運用しています。
直接のお返事になっていないのですが、複数種類スクリプト間での排他についてです。

ScriptLock でいう「スクリプト」は、プロジェクト毎の「実行単位としてのスクリプト」のことではなく、ソースコード毎の「実行コードとしてのスクリプト」を指していたはずです。
なので、

1) 対象となるスプレッドシートへのアクセス関数群を、ライブラリとして共通化する。

2) 複数のスクリプトからスプレッドシートへアクセスする場合には、必ず上記のライブラリを経由する。

3) ライブラリ内部で、必要な排他制御を行う。

と、排他すべきコードを一箇所にまとめれば、にんまりパパさんのやりたいことが実現できると思います。

※ 間違えていたら、どなたかご指摘ください。


ただ、以前のメールでおっしゃっていらしたとおり、ユーザーの手編集に対しては無力なので、それは別の(運用上の)工夫が必要であることに変わりありません。

ユーザーの編集権限自体を制限してしまうというロック方法・・・思いつきませんでした。
それなら、ユーザー操作自体もロック可能かもしれませんね。

競合した時になにが起こるのか、今ひとつ想像がつきませんが(セルを編集中に権限を制限されるとどうなるのでしょう・・・?)、
試された時にはぜひ結果を教えてください。
よろしくお願いします。


児玉
> --
> このメールは Google グループのグループ「Google Apps API Japan」に登録しているユーザーに送られています。
> このグループから退会し、グループからのメールの配信を停止するには
> google-apps-api-...@googlegroups.com にメールを送信してください。
> このグループに投稿するには google-app...@googlegroups.com にメールを送信してください。
> その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。



--
児玉 剛
tsuyosh...@gmail.com

にんまりpapa

unread,
Jan 12, 2015, 2:33:16 AM1/12/15
to google-app...@googlegroups.com
児玉様

にんまりパパこと小川貞明です。
こんにちは!

メッセージをありがとうございます。
大変参考になります。

Lockの機能は関数ではなく、プロジェクト単位だったのですね。
プロジェクト単位という概念を殆ど意識していないといいますか、Lock機能の紹介記事にも触れられてなかったようなので、理解が及びませんでした。
ライブラリ化して利用する件、了解しました。

一方で、編集権限の設定による方法で、フォルダの権限を利用することをGoogleApssリセラーからアドバイスを受けました。
編集権限付きと閲覧権限のみのフォルダを作成しておき、特定操作者がフォルダ間でファイルを移動するという運用面でのやり方です。

現場には少しばかり手間を掛けることになりますが、オペレータには編集中ユーザーがいた場合にはこれから処理する旨の連絡後、フォルダ移動後、処理を始めるという方法です。

児玉様お心配しておられた、編集中のユーザーがいる場合の権限制御の問題はどのような方法でも発生すると思います。
編集中ユーザーが多い場合は、編集中画面にこれからシステム処理を実行する旨のメッセージを表示するなどの方法がスマートかと思います。
このメッセージ表示をどのようにするのがいいかは、まだ初級レベルの私には分かりませんが調べてみます。
もし児玉様がこの手法を使えばいいということをご存知でしたら、教えて頂ければ助かります。(厚かましくてすみません)

以上、よろしくお願い致します。


2015年1月11日日曜日 18時24分02秒 UTC+9 Tsuyoshi Kodama:
> google-apps-api-japan+unsub...@googlegroups.com にメールを送信してください。

Tsuyoshi Kodama

unread,
Jan 13, 2015, 6:03:37 PM1/13/15
to google-app...@googlegroups.com
小川さま

児玉です、おはようございます。

> Lockの機能は関数ではなく、プロジェクト単位だったのですね。

あー。

「プロジェクト単位」 という言い方のほうが、GAS的には正確かもしれませんね、ライブラリもプロジェクトですし。
GASでは、実行単位に対する(ふつうプロジェクトと呼ばれるような)呼び名がないのかもしれません。。

● アクセス権の操作について、アクセス権のフォルダを作っておく件

ファイルへのアクセス権を個別に操作するより安全ですね。
わたしもそうしています。
正確には、ロール毎にフォルダをつくって、そのロールにアクセス権を指定している感じです。
(経理担当者、配送担当者、など)

ただ一点、スプレッドシートが新しくなってから、「ファイルを複数フォルダに存在させる」ことができなくなっています。
これまでは、出納簿、というファイルを

/経理帳票類/2004年度/   (本来の置き場所)

/アクセス権/経理担当者   (編集権限)
/アクセス権/ステークホルダ  (参照権限のみ)

といった複数のフォルダに配置できていましたが、いま現在、それができないのです。
ファイルの移動で、複数フォルダを選択する方法がなくなってしまいました。

これが仕様変更なのか、単なるバグなのかもわからないので、この先どうにかなるのかどうかわかりませんが・・・。
個人的には、大変困っています。

なので、フォルダでアクセス権を、という運用をつくるときには上記を気にしておかれたほうがよいと思います。

● ほかのメンバーへの通知

これは私もなにか方法がないかと考えて、そのときはなにも見つからずあきらめてしまいました。

スプレッドシートの右上に、同時編集者のアイコンが並んで誰かがファイルを開いていることだけは確認できるので、それでお互いに気を付けてね、ということにしています。

はっきり通知するとしたら・・・
対象シートの左端1列(A列)を通知用にあけておいて、スクリプトから背景色を赤に変えるなどして警告するくらいでしょうか。

メッセージボックスやトースターなどの通知窓を、他ユーザーの画面に出せたらよいのですけどね。

なにか見つけたら教えてください。
お願いします。



児玉
>> > google-apps-api-...@googlegroups.com にメールを送信してください。
>> > このグループに投稿するには google-app...@googlegroups.com にメールを送信してください。
>> > その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。
>>
>>
>>
>> --
>> 児玉 剛
>>
> --
> このメールは Google グループのグループ「Google Apps API Japan」に登録しているユーザーに送られています。
> このグループから退会し、グループからのメールの配信を停止するには
> google-apps-api-...@googlegroups.com にメールを送信してください。
> このグループに投稿するには google-app...@googlegroups.com にメールを送信してください。
> その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。



--
児玉 剛
tsuyosh...@gmail.com

にんまりpapa

unread,
Jan 14, 2015, 4:05:33 PM1/14/15
to google-app...@googlegroups.com
児玉様

小川です。
おはようございます。

いろいろと参考になる情報をありがとうございます。

フォルダ権限を利用する方法をすでに運用されているとのこと、運用例を聞きますと安心して利用できます。
ただ、当方の場合、処理前後にフォルダの移動をハンドで行うのが、操作者に手間を掛けるので今ひとつです。
ファイルを別のフォルダに移動するスクリプトはご存知ありませんか?

>「ファイルを複数フォルダに存在させる」ことができなくなっています。 

Ctrlキーを押しながら移動すればできるようですが、このこととは違うのでしょうか?

メッセージへの通知の件、運用面も含めて有効な方法を検討してみます。

以上、今後ともよろしくお願いします。


2015年1月14日水曜日 8時03分37秒 UTC+9 Tsuyoshi Kodama:
>> > google-apps-api-japan+unsub...@googlegroups.com にメールを送信してください。
>> > このグループに投稿するには google-app...@googlegroups.com にメールを送信してください。
>> > その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。
>>
>>
>>
>> --
>> 児玉 剛
>>
> --
> このメールは Google グループのグループ「Google Apps API Japan」に登録しているユーザーに送られています。
> このグループから退会し、グループからのメールの配信を停止するには
> google-apps-api-japan+unsub...@googlegroups.com にメールを送信してください。

Tsuyoshi Kodama

unread,
Jan 22, 2015, 4:51:42 AM1/22/15
to google-app...@googlegroups.com
小川様

お返事遅くなってしまってすみません。

> ファイルを別のフォルダに移動するスクリプトはご存知ありませんか?

情報は以下にあります。
https://developers.google.com/apps-script/reference/drive/

ただスクリプトは、、ぱっと思い出せません。
すみません。


>>「ファイルを複数フォルダに存在させる」ことができなくなっています。
>
> Ctrlキーを押しながら移動すればできるようですが、このこととは違うのでしょうか?

ああ、それです。
また以前のUIをそのままお使いなのですね。

ドライブのUIが新しくなりつつあるのですが、新しいUIになると、Ctrlキーを押しながら、というのができなくなっています。
以前のUIを使っている間は大丈夫ですが、新UIになると(いまのところ)使えなくなります。

以前のUIに戻せば、まだ +CTRL が有効だと小川さんのメールをみて気が付きました。
ありがとうございます。


児玉
>> >> > google-apps-api-...@googlegroups.com にメールを送信してください。
>> >> > このグループに投稿するには google-app...@googlegroups.com にメールを送信してください。
>> >> > その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。
>> >>
>> >>
>> >>
>> >> --
>> >> 児玉 剛
>> >>
>> > --
>> > このメールは Google グループのグループ「Google Apps API Japan」に登録しているユーザーに送られています。
>> > このグループから退会し、グループからのメールの配信を停止するには
>> > google-apps-api-...@googlegroups.com にメールを送信してください。
>> > このグループに投稿するには google-app...@googlegroups.com にメールを送信してください。
>> > その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。
>>
>>
>>
>> --
>> 児玉 剛
>> tsuyosh...@gmail.com
>
> --
> このメールは Google グループのグループ「Google Apps API Japan」に登録しているユーザーに送られています。
> このグループから退会し、グループからのメールの配信を停止するには
> google-apps-api-...@googlegroups.com にメールを送信してください。

Kousuke TANIGUCHI

unread,
Jan 25, 2015, 11:49:45 PM1/25/15
to google-app...@googlegroups.com
こんにちは

英語の方のGoogleApps Updatesブログに1/21付でProtected sheets and ranges improvements in Google Sheetsというタイトルで投稿がありますね。

このポストによると特定のセルを編集禁止とするなどができるようです。

APIへの反映などはよくわかってないのですが、この機能がうまく使えれば、
今回のような要望に対して、うまく機能する対策になりそうな気がします。

APIの変更など暫く注意深くチェックしてみてはいかがでしょうか?




2015年1月8日木曜日 12時31分01秒 UTC+9 にんまりpapa:

にんまりpapa

unread,
Jan 26, 2015, 5:52:02 PM1/26/15
to google-app...@googlegroups.com
児玉様
おはようございます。

フォルダ移動に関する情報をありがとうございます。
調べてみます。

>>ドライブのUIが新しくなりつつあるのですが、新しいUIになると、Ctrlキーを押しながら、というのができなくなっています。 

新しいUIで試していますが、+CTRL は有効のようです。



2015年1月22日木曜日 18時51分42秒 UTC+9 Tsuyoshi Kodama:
>> >> > google-apps-api-japan+unsub...@googlegroups.com にメールを送信してください。
>> >> > このグループに投稿するには google-app...@googlegroups.com にメールを送信してください。
>> >> > その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。
>> >>
>> >>
>> >>
>> >> --
>> >> 児玉 剛
>> >>
>> > --
>> > このメールは Google グループのグループ「Google Apps API Japan」に登録しているユーザーに送られています。
>> > このグループから退会し、グループからのメールの配信を停止するには
>> > google-apps-api-japan+unsub...@googlegroups.com にメールを送信してください。
>> > このグループに投稿するには google-app...@googlegroups.com にメールを送信してください。
>> > その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。
>>
>>
>>
>> --
>> 児玉 剛
>> tsuyosh...@gmail.com
>
> --
> このメールは Google グループのグループ「Google Apps API Japan」に登録しているユーザーに送られています。
> このグループから退会し、グループからのメールの配信を停止するには
> google-apps-api-japan+unsub...@googlegroups.com にメールを送信してください。

にんまりpapa

unread,
Jan 26, 2015, 7:07:03 PM1/26/15
to google-app...@googlegroups.com
Taniguchi様

小川貞明です。
情報提供、ありがとうございます。

今トピックのテーマはスクリプトの同時起動を防ぐ、又は回避する手法についてですので、ご提供頂いた情報とは少し異なります。

指定範囲の保護については、編集権限を持ったユーザーが誤って列の削除や移動などしてしまうと重大なシステム不具合となりますので、既に使用しています。
特に列の非表示、再表示、また列範囲の指定をマウスのドラッグで行うとちょっとしたクリックのタイミングで列の移動となってしまいます。

但し、この保護機能を使うとシート更新時にその保護機能の編集権限をチェックする為でしょうか、時間がかかるようになりました。
4000行×40列程度のシートをアレイを使用して、シートを一括で更新をしていますが、3~4分で終わる処理が2~3倍の時間がかかり、タイムアウトになってしまいました。
苦肉の策として、特別なIDを1つ作成し、そのIDをシートのオーナー権限にすることにより、その更新処理の時のみこのIDで処理するようにしました。

スクリプトで指定範囲の保護機能の設定、解除ができればいいのですが、その方法が見つかりません。

又、何かスマートな方法がありましたら、教えて下さい。

2015年1月26日月曜日 13時49分45秒 UTC+9 Kousuke TANIGUCHI:
Reply all
Reply to author
Forward
0 new messages