diff --git a/src/web/app/common/scripts/copy-to-clipboard.js b/src/web/app/common/scripts/copy-to-clipboard.js
new file mode 100644
index 000000000..2e67024c8
--- /dev/null
+++ b/src/web/app/common/scripts/copy-to-clipboard.js
@@ -0,0 +1,13 @@
+/**
+ * Clipboardに値をコピー(TODO: 文字列以外も対応)
+ */
+module.exports = val => {
+	const form = document.createElement('textarea');
+	form.textContent = val;
+	document.body.appendChild(form);
+	form.select();
+	const result = document.execCommand('copy');
+	document.body.removeChild(form);
+
+	return result;
+};
diff --git a/src/web/app/desktop/tags/drive/file-contextmenu.tag b/src/web/app/desktop/tags/drive/file-contextmenu.tag
index 29f1befc4..17376adb8 100644
--- a/src/web/app/desktop/tags/drive/file-contextmenu.tag
+++ b/src/web/app/desktop/tags/drive/file-contextmenu.tag
@@ -35,10 +35,13 @@
 		</ul>
 	</mk-contextmenu>
 	<script>
+		const copyToClipboard = require('../../../common/scripts/copy-to-clipboard');
+
 		this.mixin('api');
 		this.mixin('i');
 		this.mixin('update-avatar');
 		this.mixin('update-banner');
+		this.mixin('dialog');
 		this.mixin('input-dialog');
 		this.mixin('NotImplementedException');
 
@@ -68,7 +71,12 @@
 		};
 
 		this.copyUrl = () => {
-			this.NotImplementedException();
+			copyToClipboard(this.file.url);
+			this.refs.ctx.close();
+			this.dialog('<i class="fa fa-check"></i>コピー完了',
+				'ファイルのURLをクリップボードにコピーしました', [{
+				text: 'わー'
+			}]);
 		};
 
 		this.download = () => {