TENSOU
スマホとPCの、いちばん近い受け渡し口
LINE Keepの代わりを、自分のPCの中に作った話
スマホで撮った書類をPCに送る。PCで作ったファイルをスマホで開く。この往復が、地味に面倒でした。
メールで自分に送る、クラウドに上げる、ケーブルでつなぐ。どれも一手間あって、しかも中身は誰かのサーバーを経由します。
そこで、自分のPCの中に受け渡し場所を作りました。名前は TENSOU(転送)。使ってみたら想像以上に快適だったので、作り方と、途中でつまずいた点をまとめます。
どんなアプリか
ひとことで言うと、自分専用のLINE Keepです。テキストとファイルを放り込んでおくと、どの端末からでも取り出せます。
テキストもファイルも
メモを書く、ファイルを投げる、スクリーンショットを貼り付ける。1ファイル2GBまで。
アプリのインストール不要
ブラウザだけで動きます。ホーム画面に追加すれば、普通のアプリと同じ使い心地に。
外出先からも同じアドレス
家でも、職場でも、電車の中でも。URLは1つだけ覚えれば済みます。
家族もそれぞれ使える
人ごとに合言葉を分け、自分のものは自分にしか見えません。共有スペースも別にあります。
仕組みはとても単純
暗号化された自分専用の通り道
ここがサーバー本体
PCの中で小さなサーバーが動いているだけです。データはPCのフォルダにそのまま置かれます。クラウドは経由しません。
サーバーは Node.js の標準機能だけで書きました。npm install は不要です。フォルダを置いて起動するだけで動くので、環境構築でつまずく箇所がありません。
ポート開放は絶対にしない
自宅のPCに外からアクセスする、と聞いて真っ先に思い浮かぶのがルーターのポート開放です。これはやりませんでした。
ポートを開けるということは、インターネット全体に対して玄関を作るということです。ネット上のボットは24時間アドレスを総当たりでスキャンしていて、開いたポートは数分で見つかります。自作アプリのバグが、そのまま侵入口になります。
代わりに Tailscale を使いました。これは「自分の端末だけが参加する仮想的なLAN」を作る仕組みです。物理的に離れていても同じ家の中にいるように扱えて、外部からはそもそも存在が見えません。
考え方の違い
ポート開放は「玄関を大通りに面して開け、鍵1つで守る」。Tailscaleは「外に扉を作らず、自分の端末だけを内側に招き入れる」。守るものが同じでも、攻撃される回数がまったく違います。
つまずいた点
作る過程で、思っていなかった落とし穴がいくつかありました。同じものを作る人の役に立ちそうなので、正直に書いておきます。
① PCを持ち歩いたら、外のWi-Fiで丸見えだった
最初はサーバーを「すべてのネットワーク」で待ち受ける設定にしていました。自宅なら問題ありませんが、このPCを図書館や職場に持って行くと、そのWi-Fiにいる他人からログイン画面が見えます。
対策は単純で、待ち受けをTailscale経由と自分自身だけに限定しました。これで、どこのWi-Fiにつないでも他人からは到達できません。
② PCが落ちていると、アプリすら開けない
「PCの電源が切れている間に送ったものを、後で受け取りたい」——これを実現しようとして気づきました。アプリのページ自体をPCが配信しているので、PCが落ちていると画面すら出せません。
解決策はPWA化でした。アプリ本体をスマホの中に保存しておけば、PCが落ちていても起動できます。送信ボタンを押した内容はまずスマホの中に保存され、PCが起きた瞬間に自動で送られます。
③ 更新したのに反映されず、画面が真っ暗に
PWAの定番の罠にはまりました。ページ本体は新しく、中のプログラムは古いまま、という食い違いが起きて、アプリが起動せず真っ暗な画面だけが残りました。エラーも出ないので、原因がまったく分かりません。
2つ直しました。1つは通信できるときは必ず最新を取りに行く方式に変更。もう1つは、万一起動できなかったら説明と「修復」ボタンを出すようにしたことです。自分しか直せないアプリだからこそ、黙って壊れないことが大事だと痛感しました。
安全のために入れたこと
| Tailscale経由のみ待ち受け | 外出先のWi-Fiで他人からポートが見えるのを防ぐ |
|---|---|
| 人ごとの合言葉 | 失敗が続いたら一時的にロック |
| 利用者ごとのデータ分離 | 他人の非公開データは、IDを直接指定しても存在しないものとして扱う |
| ファイル名を使わない保存 | 受け取った名前をパスに使わないので、フォルダ外への書き込みが原理的に起きない |
| ダウンロードは添付扱い固定 | アップロードされたHTMLがブラウザ上で実行されるのを防ぐ |
| HTTPS | Tailscaleが正式な証明書を自動発行・自動更新 |
使ってみて
いちばん変わったのは、「あとでPCで見よう」と思ったときの動作です。以前は自分宛にメールを書いていました。今はアプリを開いて貼り付けるだけです。
スクリーンショットをそのまま貼り付けられるのも、地味ですが効きます。撮る、貼る、PCで開く。3秒で終わります。
家族にも使ってもらえるようにしました。それぞれが自分専用の場所を持ち、共有したいものだけ「みんな」に置く。買い物リストを置いておくと、出先で誰でも見られます。
自分で作る価値があった
既製のサービスで足りることも多いはずです。それでも自分で作ってよかったのは、データがどこにあるか、誰が見られるか、全部わかっているという安心感でした。
そして何より、自分の使い方にぴったり合わせられます。使いながら「ここが不便」と思ったら、その日のうちに直せる。これは既製品では手に入りません。
