Closed11

Goでスタンドアロン動作する一対一通信型、P2Pチャットとファイル転送アプリケーションの作成

Kaikei EzakiKaikei Ezaki

イメージ

  • できるのかわからないけれど、バイナリ一つで動いて、一対一通信型P2Pでチャットやファイルの送受信が自分の複数のマシン間で高速にできるようなツール。ローカルホストで立ち上がって、ブラウザ上で操作する。ドラッグ・アンド・ドロップでのファイルの添付や、リアルタイムでのチャットの更新など。Sveltekitで躓いたSSGでのgo embedを活用したアプリケーションにする予定。

技術スタック

フロントエンド

  • TypeScript
  • React
  • Next.js
  • Tailwind css

バックエンド

  • Go
  • net/http(つまり今回は慣れているGinは使わない)で書く
  • go embedを活用してスタンドアローンでの動作を想定

DB

  • わからない。チャットをする上で、ユーザーのログイン機能は必要だと思うので、DBも必要。
  • SQLite?を使ってバンドルしてやれば良い?
Kaikei EzakiKaikei Ezaki

既存のツールとしては、ファイル転送系ではCLIで動くcrocのようなものがある。P2PのチャットツールではBertyがある。

Kaikei EzakiKaikei Ezaki

AWSやFirebaseを使っても良いが、まずはIPFSやP2Pのネットワーク周りを勉強しなければいけないのと自立して動くことを目指しているので、今回は使わない。

Kaikei EzakiKaikei Ezaki

crocのように異なるOSのデバイスなどで、ファイル転送が素早くできずに困っている。MacとUbuntuやWindowsなど。ストックしておきたいリンクのシェアや日記の転送など。Dropboxなどを活用するのも手だが、手間がかかるので、PAKEで送受信が簡単にできたら良い。

Kaikei EzakiKaikei Ezaki

libp2pとcorc の合体版というか上位互換のものを発見したので、こちらをベースに、実装というよりはひとまずコピペして作成している。
暗号と通信周りは理解してない状態で触るとまずいだろうから、ひとまずほぼコピペのような状態で実装する。
基盤はほとんどできたから、あとはフロントのデザインとか内部ロジックとかを実装する。

出来上がるものはpcpのラッパーというか、CLIからウェブブラウザに移植したようなものになると思う。
フロントとバックエンドをなるべくきれいに分離して、バックエンドをあとから書き直して、公開できるレベルまで持っていくのが目標。

https://github.com/dennis-tra/pcp

Kaikei EzakiKaikei Ezaki

pcpだが更新が止まっており、また自身のネットワークや暗号への理解の不足から、実装を理解しないでただコピペしている箇所が多すぎるので、一度Goでの通信について腰をすえて学ぶ。

このスクラップは2022/01/22にクローズされました