WailsでオンラインChatアプリを作ろうとした話
はじめに
趣味でやっていたウェブ制作の延長でなにか作ってみようと思い立ち、生成AIをつかいアイデア出しのブレーンストーミングを行った。
GoでWebサーバーをつくるのが好きなので、今回のチャレンジは「GoでGUIアプリを作ってみる」という試みだった。
そこで生成AIの提案もあり、Wailsを使う運びとなった。
本記事では、現在開発中の「ローカル+オンライン対応チャットアプリ」の制作過程を紹介する。
まだ未完成ではあるが、試行錯誤の記録として残しておこうと思う。
作ろうと思ったもの
作ろうとしているのは、以下のようなチャットアプリ。
- LINEのようなシンプルなUI
- Discordのようなリアルタイム通信
- デスクトップアプリとして動作
- Goでバックエンド処理
- フロントはReact (JavaScript)
つまり
「LINE + Discord を足して軽量化したデスクトップチャットアプリ」
のようなものを目指している。
技術構成
現時点での構成は以下の通り。
- フロントエンド: React (JavaScript)
- バックエンド: Go
- GUI: Wails
- 通信: WebSocket
- DB: SQLite
Wailsを使うことで、Goとフロントエンドをシームレスに統合できるのが魅力だった。
実装した機能(現時点)
- ユーザー選択式チャット
- WebSocketによるリアルタイム通信
- ルーム自動生成
- メッセージ履歴保存(SQLite)
- URLリンク化
- 改行対応
- 送信時刻表示
- 吹き出しUI
最低限のチャットとしては動作するようになった。
苦労した点
WebSocketのルーム管理
最初は全ユーザーにメッセージが飛んでしまい、
「個別チャットにならない」問題が発生した。
そこで
ユーザーA_ユーザーB
のようなルームIDを生成して解決した。
Wailsとフロントの状態管理
Wailsは便利だが、
- Go側
- フロント側
- WebSocket
の3つの状態を意識する必要があり、
思ったより複雑だった。
まだ未実装の機能
- 未読バッジ
- 自動スクロール
- 既読表示
- オンライン状態表示
- 通知機能
- グループチャット
完成まではもう少し時間がかかりそう。
作ってみて感じたこと
Wailsは
「Goでデスクトップアプリを作りたい人」
にはかなり良い選択肢だと感じた。
Electronより軽量で、
Goのコードがそのまま活かせるのが嬉しい。
また、生成AIを活用することで、
一人でもかなりのスピードで開発が進むことを実感した。
おわりに
まだ開発途中ではあるが、
かなりチャットアプリらしくなってきた。
完成したら
- ファイル送信
- 音声通話
なども追加したいと考えている。
同じようにWailsで何か作ろうとしている人の参考になれば嬉しいです。