Google Drive API は、ファイルのコンテンツの制限や、ファイルのダウンロード、印刷、コピーのオプションの禁止など、ファイルの変更を防ぐためのさまざまな方法をサポートしています。
ドライブのコンテンツの制限を使用してファイルを読み取り専用にする
Google ドライブ ファイルにコンテンツの制限を追加すると、ユーザーが次の操作を行えなくなります。
- タイトルの変更
- コンテンツの編集
- リビジョンのアップロード
- コメントの追加または変更
コンテンツの制限を適用すると、アイテムのアクセス権限を変更せずに、ドライブ アイテムのコンテンツを読み取り専用にできます。つまり、アクセス制限ではありません。ユーザーはファイルの内容を変更することはできませんが、アクセスレベルに基づいて他の操作は引き続き許可されます(たとえば、編集アクセス権を持つユーザーは、アイテムの移動や共有設定の変更を行うことができます)。
ドライブ内のファイルにコンテンツの制限を追加または削除するには、関連する権限が必要です。マイドライブまたは共有ドライブ内のファイルまたはフォルダに capabilities.canModifyEditorContentRestriction
が設定されている場合は、role=writer
が割り当てられている必要があります。マイドライブまたは共有ドライブ内のファイルまたはフォルダに ownerRestricted
コンテンツ制限が適用されている場合、そのファイルの所有者であるか、role=organizer
権限を持っている必要があります。コンテンツ制限のあるアイテムを表示するには、ユーザーが role=reader
以上の権限を持っている必要があります。ロールの一覧については、ロールと権限をご覧ください。ファイルの権限を変更するには、権限を変更するをご覧ください。
files
リソースの contentRestrictions.readOnly
ブール値フィールドを使用して、コンテンツの制限を設定できます。アイテムにコンテンツの制限を設定すると、既存の制限が上書きされます。
コンテンツの制限のシナリオ
ドライブ アイテムに対するコンテンツの制限は、コンテンツを変更できないことをユーザーに示します。次のような理由が考えられます。
- レビューまたは監査期間中に共同編集ドキュメントの作業を一時停止する。
- アイテムを承認済みなどの最終状態に設定する。
- 機密性の高い会議中に変更が行われないようにする。
- 自動化されたシステムによって処理されるワークフローの外部変更を禁止する。
- Google Apps Script と Google Workspace アドオンによる編集を制限する。
- ドキュメントが誤って編集されないようにする。
ただし、コンテンツの制限はコンテンツの管理に役立ちますが、十分な権限を持つユーザーがアイテムの作業を続行できないようにするためのものではありません。また、不変のレコードを作成することもできません。ドライブのコンテンツ制限は変更可能であるため、アイテムに対するコンテンツ制限があっても、アイテムが変更されないことを保証するものではありません。
コンテンツの制限のあるファイルを管理する
Google ドキュメント、Google スプレッドシート、Google スライド、およびその他のすべてのファイルには、コンテンツの制限を含めることができます。
アイテムにコンテンツ制限を適用すると、タイトルとコンテンツの変更がブロックされます。たとえば、次のような変更がブロックされます。
- コメントと提案(ドキュメント、スプレッドシート、スライド、バイナリ ファイル)
- バイナリ ファイルの変更履歴
- ドキュメントのテキストと書式設定
- スプレッドシート内のテキストまたは数式、スプレッドシートのレイアウト、スプレッドシート内のインスタンス
- スライド内のすべてのコンテンツ、スライドの順序と数
一部のファイル形式にはコンテンツの制限を含めることはできません。以下に例を示します。
- Google フォーム
- Google サイト
- Google 図形描画
- ショートカットとサードパーティ製ショートカット。詳細については、アプリによって保存されたコンテンツへのショートカット ファイルを作成するとドライブ ファイルへのショートカットを作成するをご覧ください。
コンテンツの制限を追加する
ファイル コンテンツの制限を追加するには、contentRestrictions.readOnly
フィールドを true
に設定して files.update
メソッドを使用します。制限を追加する理由(「契約の確定」など)を示す reason
を追加します(省略可)。次のコードサンプルは、コンテンツの制限を追加する方法を示しています。
Java
File updatedFile =
new File()
.setContentRestrictions(
ImmutableList.of(new ContentRestriction().setReadOnly(true).setReason("Finalized contract."));
File response = driveService.files().update("FILE_ID", updatedFile).setFields("contentRestrictions").execute();
Python
content_restriction = {'readOnly': True, 'reason':'Finalized contract.'}
response = drive_service.files().update(fileId="FILE_ID", body = {'contentRestrictions' : [content_restriction]}, fields = "contentRestrictions").execute();
Node.js
/**
* Set a content restriction on a file.
* @return{obj} updated file
**/
async function addContentRestriction() {
// Get credentials and build service
// TODO (developer) - Use appropriate auth mechanism for your app
const {GoogleAuth} = require('google-auth-library');
const {google} = require('googleapis');
const auth = new GoogleAuth({scopes: 'https://www.googleapis.com/auth/drive'});
const service = google.drive({version: 'v3', auth});
const contentRestriction = {
'readOnly': True,
'reason': 'Finalized contract.',
};
const updatedFile = {
'contentRestrictions': [contentRestriction],
};
try {
const response = await service.files.update({
fileId: 'FILE_ID',
resource: updatedFile,
fields: 'contentRestrictions',
});
return response;
} catch (err) {
// TODO (developer) - Handle error
throw err;
}
}
FILE_ID は、変更するファイルの fileId
に置き換えます。
サンプルコードを実行すると、ファイルのコンテンツが制限され、Google ドライブのユーザー インターフェース(UI)内のファイル名の横にロック シンボル( )が表示されます。ファイルは読み取り専用になりました。
コンテンツの制限を解除する
ファイル コンテンツの制限を削除するには、contentRestrictions.readOnly
フィールドを false
に設定して files.update
メソッドを使用します。次のコードサンプルは、コンテンツの制限を削除する方法を示しています。
Java
File updatedFile =
new File()
.setContentRestrictions(
ImmutableList.of(new ContentRestriction().setReadOnly(false));
File response = driveService.files().update("FILE_ID", updatedFile).setFields("contentRestrictions").execute();
Python
content_restriction = {'readOnly': False}
response = drive_service.files().update(fileId="FILE_ID", body = {'contentRestrictions' : [content_restriction]}, fields = "contentRestrictions").execute();
Node.js
/**
* Remove a content restriction on a file.
* @return{obj} updated file
**/
async function removeContentRestriction() {
// Get credentials and build service
// TODO (developer) - Use appropriate auth mechanism for your app
const {GoogleAuth} = require('google-auth-library');
const {google} = require('googleapis');
const auth = new GoogleAuth({scopes: 'https://www.googleapis.com/auth/drive'});
const service = google.drive({version: 'v3', auth});
const contentRestriction = {
'readOnly': False,
};
const updatedFile = {
'contentRestrictions': [contentRestriction],
};
try {
const response = await service.files.update({
fileId: 'FILE_ID',
resource: updatedFile,
fields: 'contentRestrictions',
});
return response;
} catch (err) {
// TODO (developer) - Handle error
throw err;
}
}
FILE_ID は、変更するファイルの fileId
に置き換えます。
サンプルコードを実行すると、ファイルのコンテンツ制限が解除されます。
また、ドライブの UI を使用してコンテンツの制限を解除し、コンテンツの編集を許可することもできます(適切な権限がある場合)。これを行うには、次の 2 つの方法があります。
ドライブで、コンテンツの制限が設定されているファイルを右クリックし、[ロックを解除
] をクリックします。コンテンツの制限のあるファイルを開き、(ロックされたモード)> [ファイルをロック解除] をクリックします。
コンテンツの制限を確認する
コンテンツの制限を確認するには、返された contentRestrictions
フィールドで files.get
メソッドを使用します。次のコードサンプルは、コンテンツ制限のステータスを確認する方法を示しています。
Java
File response = driveService.files().get("FILE_ID").setFields("contentRestrictions").execute();
Python
response = drive_service.files().get(fileId="FILE_ID", fields = "contentRestrictions").execute();
Node.js
/**
* Get content restrictions on a file.
* @return{obj} updated file
**/
async function fetchContentRestrictions() {
// Get credentials and build service
// TODO (developer) - Use appropriate auth mechanism for your app
const {GoogleAuth} = require('google-auth-library');
const {google} = require('googleapis');
const auth = new GoogleAuth({scopes: 'https://www.googleapis.com/auth/drive'});
const service = google.drive({version: 'v3', auth});
try {
const response = await service.files.get({
fileId: 'FILE_ID',
fields: 'contentRestrictions',
});
return response;
} catch (err) {
// TODO (developer) - Handle error
throw err;
}
}
FILE_ID は、確認するファイルの fileId
に置き換えます。
サンプルコードを実行すると、メソッドは ContentRestriction
リソースを返します(存在する場合)。
ファイルのオーナーのみが変更できるコンテンツ制限を追加する
ファイル所有者のみがメカニズムを切り替えられるようにファイル コンテンツの制限を追加するには、contentRestrictions.ownerRestricted
ブール値フィールドを true
に設定して files.update
メソッドを使用します。次のコードサンプルは、ファイル所有者のみに対してコンテンツ制限を追加する方法を示しています。
Java
File updatedFile =
new File()
.setContentRestrictions(
ImmutableList.of(new ContentRestriction().setReadOnly(true).setOwnerRestricted(true).setReason("Finalized contract."));
File response = driveService.files().update("FILE_ID", updatedFile).setFields("contentRestrictions").execute();
Python
content_restriction = {'readOnly': True, 'ownerRestricted': True, 'reason':'Finalized contract.'}
response = drive_service.files().update(fileId="FILE_ID", body = {'contentRestrictions' : [content_restriction]}, fields = "contentRestrictions").execute();
Node.js
/**
* Set an owner restricted content restriction on a file.
* @return{obj} updated file
**/
async function addOwnerRestrictedContentRestriction() {
// Get credentials and build service
// TODO (developer) - Use appropriate auth mechanism for your app
const {GoogleAuth} = require('google-auth-library');
const {google} = require('googleapis');
const auth = new GoogleAuth({scopes: 'https://www.googleapis.com/auth/drive'});
const service = google.drive({version: 'v3', auth});
const contentRestriction = {
'readOnly': True,
'ownerRestricted': True,
'reason': 'Finalized contract.',
};
const updatedFile = {
'contentRestrictions': [contentRestriction],
};
try {
const response = await service.files.update({
fileId: 'FILE_ID',
resource: updatedFile,
fields: 'contentRestrictions',
});
return response;
} catch (err) {
// TODO (developer) - Handle error
throw err;
}
}
FILE_ID は、変更するファイルの fileId
に置き換えます。
サンプルコードを実行すると、ファイルはコンテンツが制限され、ファイル オーナーのみが削除できるようになります。ファイルのオーナーである場合は、 ドライブのユーザー インターフェース(UI)内のファイル名の横にアクティブなロック シンボル( )が表示されます。自分がオーナーでない場合は、ロック アイコンが薄く表示されます。
ownerRestricted
フラグを削除するには、contentRestrictions.ownerRestricted
フィールドを false
に設定して files.update
メソッドを使用します。
コンテンツの制限機能
files
リソースには、ファイルに対してアクションを実行できるかどうかを示すブール値 capabilities
フィールドのコレクションが含まれています。
コンテンツの制限には、次の capabilities
が含まれます。
capabilities.canModifyEditorContentRestriction
: 現在のユーザーがコンテンツの制限を追加または変更できるかどうか。capabilities.canModifyOwnerContentRestriction
: 現在のユーザーがオーナーのコンテンツ制限を追加または変更できるかどうか。capabilities.canRemoveContentRestriction
: 現在のユーザーが適用されたコンテンツ制限(存在する場合)を削除できるかどうか。
詳細については、機能をご覧ください。
ファイル capabilities
の取得例については、ユーザー権限を確認するをご覧ください。
ユーザーがファイルをダウンロード、印刷、コピーできないようにする
role=commenter
権限または role=reader
権限を持つユーザーがドライブ、ドキュメント、スプレッドシート、スライド内でファイルをダウンロード、印刷、コピーする方法は制限できます。
ファイルのダウンロード、印刷、コピーのオプションを削除するには、copyRequiresWriterPermission
ブール値フィールドを true
に設定して files.update
メソッドを使用します。