rclp: 携帯からパソコンにcopy & pasteする
携帯でウェブサイトを見ていて、携帯で見るよりもパソコンで見た方が見やすそうなので同じウェブサイトをパソコンで見たいと思った経験はありませんか?
私は何度もあります。その度に、そのウェブサイトのurlを自分宛てにメールし、ラップトップからそのメールを開いてそのウェブサイトを見るということをしていました。ただ、inbox zeroを実践している私は、このためだけにメールを増やすことが嫌でした。
ずっとこれが解決されないままなのが我慢できず、遂に自分でツールを作ることにしました。それがrclpです。この記事では、rclpの使い方に関して記載します。
概要
copy & pasteに使われるクリップボードがオンラインにあるのがrclpです。copyしたテキストはオンラインにあるクリップボードに書き込まれ、pasteする際にはそのクリップボードからテキストが読み込まれます。
クリップボードがオンラインにあるために、別々のデバイスから同じクリップボードに対してcopyやpasteが行えます。携帯でcopyして、ラップトップでpasteできます。逆も然りです。
使い方
ここでは、iPhoneからテキストをcopyし、MacBook Airでそれをpasteする場合を例として説明します。
まず、iPhoneにrclpをインストールします (ここでは扱いませんが、Android appもあります 😺️)。次に、MacBook Airにrclp-cliをインストールします。
$ npm install -g @rclp/rclp-cli
iPhoneでcopyしたテキストをMacBook Airでpasteするには、両方において同じアカウントでサインインしている必要があります。iOS appはApple IDでサインインできますが、rclp-cliはGoogleアカウントでしかサインインできません。なので、ここではiPhoneとMacBook Airにおいて、同じGoogleアカウントでサインインすることを前提とします。
iPhoneのrclpを開き、”Copy”タブを押します。copyしたいテキストを入力し、”Copy to Remote Clipboard”ボタンを押します。これで、入力したテキストがオンラインにあるクリップボードにcopyされました。
MacBook Airにて、copyしたテキストをpasteしましょう。
$ rclp -p
まだサインインしていない場合は、エラーが表示されます。以下のコマンドで、サインインしてください。
$ rclp -a
先程copyしたテキストが表示されたはずです。以下のコマンドを実行すると、pasteしたテキストを直接macOSのクリップボードに書き込めます。
$ rclp -p | pbcopy
テキストエディタなどにpasteすると (Cmd + v)、rclp -p
で出力されたテキストがpasteされたはずです。
それでは次に、MacBook AirからcopyしてiPhoneでpasteしましょう。MacBook Airにて、好きなテキストをcopyします。
$ echo "hello rclp" | rclp -c
bpcopy
と同様に、rclp
はstdinから入力を読み、その値をオンラインにあるクリップボードにcopyします。iPhoneのrclpを開き、”Paste”タブを押します。”Paste from Remote Clipboard”ボタンを押します。これで、iPhoneのクリップボードに”hello rclp”がpasteされました。
iPhoneのSafariのアドレスバーにpasteすると、”hello rclp”と出るはずです。
ここでは、iPhoneとMacBook Airを例として使用しましたが、対応しているデバイスであれば組み合わせは何でも構いません。rclpは、iOSとAndroidに対してappを用意しており、macOS/Linux/Windowsに対してはCLIを用意しています。詳しくは、rclp.appを参照ください。
追加したい機能
自分が抱えていた問題を解決するためのmvpがリリースできたので、これからより使いやすくするための以下の様な機能を追加する予定です。
copyされたら自動的にそれをpasteする
iPhoneでcopyしたら、それが自動的にMacBook Airのクリップボードにpasteされていると便利です。
CLIに関しては、一定期間ごとにrclp -p
した出力をシステムのクリップボードにpasteする様な実装を、携帯やデスクトップの環境においては、例えばiPhoneでcopyされたらその旨を伝える通知が来て、それに肯定的に応えると自動的にシステムのクリップボードにpasteする様な実装を考えています。
end-to-endの暗号化
クライアントとサーバ間の通信は全てhttpsで行っているので、Android app/iOS app/cliとサーバ間の通信は全て暗号化されています。現時点では、オンラインにあるrclpのクリップボードに書き込まれるテキストは、ディスクに書かれる際に暗号化されていますが (ハードウェアレイヤーでの暗号化)、アプリケーションレイヤーでは暗号化していません。
これは、rclpの管理者が、エンドユーザがクリップボードに書き込んだ暗号化されていないテキストに対してアクセスがあることを意味します。この理由から、rclpで機密性の高いデータ (例: パスワード) を扱う場合は、rclpの管理者を信用することになります。
勿論、rclpの管理者はエンドユーザのデータを悪用することはありませんが、これは技術的に解決できる問題ですので、技術的に解決する予定です。end-to-endの暗号化を実装することで、暗号化した本人以外は復号できない形でエンドユーザのクリップボードにテキストを書き込む様にする予定です。
このend-to-endの暗号化の実装に関しては、設計やその設計を選んだ理由などを追って解説したいと思います (興味がある方がいたらコメントを残して下さい 😺️)。
結論
複数のデバイスを併用することが当たり前の世の中で、未だにそれらのデバイス間でcopy & pasteをするのが困難です。それを解決するためにrclpを作りました。
mvpとしてAndroid app/iOS app/cliをリリースしましたが、より使いやすくなるための機能を追加していきます。フィードバックがあれば、コメントを残して頂けると嬉しいです。