generated at
自動勉強会 vol.6 コピペ回&過去回振り返り
12/3(金) 20:00 - 22:00
コピペ回
話したい! or 話を振ってOK
baku89miyanokomiyaseanchas_thashrockD
聞き専
yunecoodiakdaiizyamanokuigrepnagayama田村ひろしsuto3

Discordイベントの参加リンク

一旦ここでSeason1最終回としたいと思います。
また、GUIの忘年会ということで過去回の振り返りも余った時間で行いたいです。

クリップボードの世界
API的にはクリップボードAPIとドラッグドロップAPIは一部同じ(dataTransfer)を持ってるD
こんなにサンプルあったのしらなかった…yamanoku
たしか複数の形式のデータを入れておいて受け取る側がどれを使うか選択できたと思う
pasteイベントを使う vs 独自ショートカットで上書きする
keroxp Clipboard APIはかなり発展しています。使い方によってはNativeアプリみたいなのにできます
空気を読んだペースト処理にするにはアプリごとに実装する必要があります
Paste機能を使うにはパーミッションを取らないといけないので少々使いやすさが落ちる。最初だけですが…
(脱線) Figma のPlugin上でClipboard APIがつかえなくてつらいseanchas_t
httpsじゃないと使えない
execCommand何が不便なんでしたっけ?hashrock
→遠回り。画像のコピーができない、非推奨...seanchas_t
よくある「このテキストをコピー」ボタンもClipboard API利用になっていく?miyanokomiya
クリップボードAPI
日本語版は一覧性が低い罠
意外と(?)Firefoxの対応が悪い…これで採用諦めた記憶butaosuinu
SafariとChromeで画像コピーの方法が違ってよくわかってない...yuneco
SafariはPromiseじゃないと渡せないらしいです
逆にChromeはPromise受け取れなくて、両立できなかったです...
ChromiumプロジェクトにTODOコメントがあるのがなんとなく親近感 igrep
tiktok事件
ドラッグドロップAPI

コピペの対象
テキストのコピペ
リッチテキストのコピペ
docとかにリッチテキストで貼り付けられて嬉しかった覚えがない..miyanokomiya
ctrl+shift+vでプレーンテキストとして貼り付けがち(これはデファクトなショートカット?)
ConfluenceがCtrl + Shift + vを他の用途で使っていて腹立つ
逆にスタイルだけ貼り付けるショートカットが確かgoogle docにあった
ExcelなどOffice系が概ねサポートしていたような
keroxpわかる。ただIDE -> PowerPointで背景色含めてコピーできたことがあって便利だったかも
Finderでファイルをコピー→別アプリにペーストした時になにが張り付くかは結構ハラハラ感あるyuneco
VSCodeだとツリー上ならファイル、コード上ならファイル名が貼り付けられる、とかだとおもう
リンク付きのテキストとか太字程度のものであれば時々うれしかった記憶があります igrep
リッチテキストエディターだと編集している文章のなかで完結したコピペの場合、Ctrl + vでスタイルもコピーしてくれないと直感に反する挙動になりそう
<table>をExcelに貼り付けるとちゃんと表になるのは地味に嬉しいこともあった
意外とIEが優秀だった記憶
IDEのシンタックスハイライトを完璧にコピーしてくれればありがたいんですが、背景色が反転してたりしてつらい……D
Google Docs 系でスタイルだけ貼り付けする別のショートカットキーがあった記憶
Markdownでコピペしたい seanchas_t
画像データのコピペ
レイヤー付きはどうする? seanchas_t
関連してGIF画像をコピーしたら最初の1フレーム目だけ貼り付けられたりしますよね
ちょっと昔のMac標準のPreview.appはウインドウ縮小してると表示サイズでしかコピーしてくれなくて、コピペしたらちっちゃくなってた..とかあった(今は治った)
リサイズに使う発想はなかったwwyuneco
ベクターデータのコピペ
図形を連続して貼り付けたときに重ならないよういい感じにずらしていきたいmiyanokomiya
アプリ外からのデータはどこに貼り付ける? seanchas_t
そういえばイラレとかで同じ位置に貼り付けるショートカットもCmd + Shift + Vですねyuneco
ただの複製ではなく、図形間の参照関係をいい感じに引き継いだり引き継がなかったりmiyanokomiya
親と子が同時に複製されたら新親と新子、子だけ複製されたら元親と新子が親子関係とか
たしか親子の維持とかはUnityはやってくれますね
Figmaはコンポーネントとインスタンスを同時にコピーすると新しいコンポーネントが参照されるseanchas_t
コピーするものの「内部」のもの同士はディープコピーしたいし、外部のものは元のものに繋げたままにしたい
プレーンテキストとか画像とか、むしろ簡単なほうなんですねhashrock
プリミティブなんですよあいつら……D
RPGツクールみたいなツールとかどうしてるんだろうbutaosuinu
イベント、マップエディタ、キャラクターetc...
「ナビつき!つくってわかるはじめてゲームプログラミング」のノードンをコピーしたときはどうなったかな... igrep
SVGのコピペseanchas_t
ラスターデータ (PNG) はブラウザAPIでもコピペしやすいけどSVGは扱いにくい
ChromeでのSVGコピペはBehind a flagっぽい https://chromestatus.com/feature/5125790490427392 seanchas_t
MacではPDFでのコピペができた気がするseanchas_t
Sketch→Keynoteのコピペに便利だった
デザインツールとかが吐くPDFちょいちょい変なのが多いイメージ。。。butaosuinu
変なメタデータ持ってて持っていく先でレイアウトがずれる
でもAdobe Readerはいい感じに読み取るのでユーザーがこっちのバグ扱いしてきてつらい
つらそうmiyanokomiyayuneco
AppleとかAdobeさんそういうところ(独自でこっそり色々やる)あるよね……
アプリケーション内でしか意味のないデータのコピペ
例えば作曲ツールの音符の選択範囲とか?
標準形式のデータとアプリ独自の装飾情報とかを両方コピーするアプリは結構あるきがするyuneco
イラレとかは別アプリに切り替える瞬間に汎用形式にクリップボード内を書き換える、とかやってた気がする。大きいデータコピーしてるとアプリ切り替えにちょっとまごついたりする
なるほど!D
内部用と共有用の2つクリップボード持ってる?とかかも
イラレ終了する時とか、汎用データ残すか聞いてくる
クリップボードの中身ってアプリケーション自体の実行よりも寿命が長いんですよねー
昔は巨大なデータクリップボートに残して終了するのはマナー違反、みたいな空気もあった気がするyuneco
どこまで入るんだろう...
Power Automateの、アクションをコピーする機能は、専用のJSONがコピーされるらしい igrep
Power Automate上でコピーしたものしか貼り付けできないので、コピーしたJSONをよそで編集してまたコピーして貼り付ける、という使い方はできない。惜しい。
example.json
{"id":"92d81720-0f4f-4367-85d4-cc0b-60d4ca1c","brandColor":"#8C6CFF","connectionReferences":{},"icon":"https://psuxjapan.azureedge.net/Content/Images/DesignerOperations/dataoperationedit.png","isTrigger":false,"operationName":"作成_4","operationDefinition":{"type":"Compose","inputs":"aaaa","runAfter":{"作成":["Succeeded"]}}}
コピー元の命令:

UE4のフォーラムでノードをコピーしてそのままUE4エディタに貼れるとかあったmiyanokomiya
ぱっとサイト出てこなかった...単にjsonをそのまま貼ってたとかかも
コピペだけでなくて、ノードエディタの実装が複雑GUIとしても完成度が高い
Webアプリ←→ネイティブアプリ間のコピペ
同時複数フォーマットのコピペ
例: Figmaでコピーするとテキストデータと独自データが両方コピーされる seanchas_t
TSVのコピペ
表計算らしきアプリだとそれっぽく対応することを求められがち

コピペの実例
Figmaはどうなってるか
HTMLにエンコードされたデータを埋め込んでるっぽいseanchas_t
属性値の中にコメント(<!-- -->)入ってるwwyuneco
コメント使って別データ形式入れ子にする世界も深そうですよね
PDFにイラレが色々っこむのとか、JPEGのExifがTIFFコンテナでその中のサムネデータはまたJPEG形式...とかyuneco
自作デザインツールでも似たような仕組みを使用中seanchas_t
JSONをBase64にしてdata属性に詰めてる
document.execCommand('copy') でもclipboard apiでも動くのが便利
contentEditableにdata属性付きのspanを入れて、それを選択してコピペ
contentEditableにそんな使い道があるとは...すごいyuneco

ファイルのドロップ
ネイティブアプリだと、アプリ内のオブジェクトをエクスプローラ上にドロップするとファイルになったり、そのまま他のアプリ上にドロップしたりできることがあるけど、どうなっているか(Webアプリでも同様のことができるのか?)hashrock
これWPFで実装してみて概要把握しました。参考hashrock
1. ドラッグ開始時等にテンポラリファイルを作成しファイルパスを取得
2. DataObjectにFileDropを指定&テンポラリファイルのパスを詰めてDoDragDrop
つまりエクスプローラーからの単純なファイルドロップと同じことがアプリ起点でできる

ようでした
単なるファイルドロップなので、当然WPF内からScrapboxに直接ドロップしてもアップロード可能でした。便利かもしれない
下でkeroxpさんが言及してるような逆方向のドラッグアンドドロップができればそれも便利そうです
検証2:ブラウザ→WPFへの画像ドロップ
文字列とHTMLの2種類のデータが取得できた。文字列の方はURL(リンクをドロップした場合はリンク先URLが取れる)
Bitmapとかは入っていなかったので、画像として欲しい場合はアプリ側でURLを自力でfetchしにいかないといけない気がする。あるいは、dataURLとして詰めるか。
ChromeではdataTransferにimage/*が設定できるのかも?「特権的なコード」と言われてるのが何かわからないが…
HTMLの方は謎の形式で取れてきた。HTML クリップボード形式というWindows独自の何からしい
とはいえ、これはChrome → Windows間のやり取りの話なのでWebApp勢は知らなくてもよさそう
keroxpDragEventリスナーをつけると、File = Content-Type + Blobが入ったイベントが飛んできます
基本的にはこれだけです。あとはアプリでなんとかする
WebApp -> Nativeの場合も、DragStartイベントのときにdataTransferにそういうデータを付与することであとはOSがなんとかしてくれるんじゃないでしょうか。こっちの方向ではあんまりやったことない…

クリップボードの永続化(テンプレート、カスタム図形、etc)
データのまとまりとして固めておいて他の箇所でも使いまわしたいという普遍的な要求miyanokomiya
クリップボードの履歴管理アプリにテキストスニペット機能付いてたりしますねD
とあるゲームのシナリオエディタでは対象を選択して右クリックから名前つけてテンプレートとして保存できたりしたbutaosuinu
裏でデータをJSON風のデータ形式でテキストファイルとしてDocumentに保存されてました
vimのレジスタみたいにクリップボードっぽい場所がたくさんあってたくさん保存できる
yankとクリップボードが別なの地味に嬉しいです
無名レジスタ
Linuxだとテキスト選択したものを中クリックで貼り付けられたりしますし、2つくらいは欲しいですよねー
emacsもテキストであればコマンドの出力だろうがなんだろうがファイルとして扱えますね
ファイルというかバッファか

過去回振り返り
ペイントツール回
Undo回
共同編集回
canvas回
アクセシビリティ回

今年作ったGUIのお焚き上げコーナー
Excel方眼紙のアレhashrock
意外とコードスリムですごいyuneco
印刷においては本家Excelよりもストレスないのではyuneco
自作パスエディタhashrock
SVGベースのボーンアニメーションエディタmiyanokomiya
開発中のReact用デザインツールseanchas_t
コピペも実装してます
Vueにもほしいですね(小声
ベジエ曲線と線分の交点を求めるやつseanchas_t
Wasmを使った自作ラスタ系ペイントツール田村ひろし
選択変形の実装が終わった
お絵描きチャット(共同編集とUndo/Redoが出来るやつ)
普通にSVG+Vueしただけ

ActionScriptは今でもちょっとだけ仕事で使うけど...まあ色々辛い