TENSOU

TENSOU

TENSOU

スマホとPCの、いちばん近い受け渡し口

LINE Keepの代わりを、自分のPCの中に作った話

Node.js Tailscale PWA 依存パッケージ0

スマホで撮った書類をPCに送る。PCで作ったファイルをスマホで開く。この往復が、地味に面倒でした。

メールで自分に送る、クラウドに上げる、ケーブルでつなぐ。どれも一手間あって、しかも中身は誰かのサーバーを経由します。

そこで、自分のPCの中に受け渡し場所を作りました。名前は TENSOU(転送)。使ってみたら想像以上に快適だったので、作り方と、途中でつまずいた点をまとめます。

どんなアプリか

ひとことで言うと、自分専用のLINE Keepです。テキストとファイルを放り込んでおくと、どの端末からでも取り出せます。

テキストもファイルも

メモを書く、ファイルを投げる、スクリーンショットを貼り付ける。1ファイル2GBまで。

アプリのインストール不要

ブラウザだけで動きます。ホーム画面に追加すれば、普通のアプリと同じ使い心地に。

外出先からも同じアドレス

家でも、職場でも、電車の中でも。URLは1つだけ覚えれば済みます。

家族もそれぞれ使える

人ごとに合言葉を分け、自分のものは自分にしか見えません。共有スペースも別にあります。

仕組みはとても単純

スマホ
⇄
Tailscale
暗号化された自分専用の通り道
⇄
自宅のPC
ここがサーバー本体

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がブラウザ上で実行されるのを防ぐ
HTTPSTailscaleが正式な証明書を自動発行・自動更新

使ってみて

いちばん変わったのは、「あとでPCで見よう」と思ったときの動作です。以前は自分宛にメールを書いていました。今はアプリを開いて貼り付けるだけです。

スクリーンショットをそのまま貼り付けられるのも、地味ですが効きます。撮る、貼る、PCで開く。3秒で終わります。

家族にも使ってもらえるようにしました。それぞれが自分専用の場所を持ち、共有したいものだけ「みんな」に置く。買い物リストを置いておくと、出先で誰でも見られます。

自分で作る価値があった

既製のサービスで足りることも多いはずです。それでも自分で作ってよかったのは、データがどこにあるか、誰が見られるか、全部わかっているという安心感でした。

そして何より、自分の使い方にぴったり合わせられます。使いながら「ここが不便」と思ったら、その日のうちに直せる。これは既製品では手に入りません。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次