Goにはまってるインフラエンジニアです。インフラ構築あるある
をGoで解決したいと思ってます。
背景
その昔のワタシと後輩の電話
※後輩は現地のマシンルーム、ワタシは事務所にいました。
後輩:コマンド間違えました!よくわからんコトになってます!
ワタシ:よくわからんって何や!ログ見て!
後輩:マシンルーム圏外やから外から電話してます!ログ見れないっす!
ワタシ:とりあえずSSHでログ見るか...
ワタシ:何やったのかさっぱりわからぬ\(^o^)/
ワタシ:現地行くか....
ってことがよくありましたね。こういうときのミスない遠隔HELPって何かできないかな〜と思って、
chatサーバ作るぜ!って思いました。
巷にはwebsocketを使ったchatはあったのですが、↑みたいな場面ってSSHしかできないようなケースあるんで、
普通のsocketで作りました。あまり先行事例がなくて、結構ムズかったです。ゴルーチンとチャネルが難しい....
感想
slackすげーなって本当に思いました。
作り終わったあと、プログラミング言語Go読んだら、8章にチャットサーバあった.....
chatでテスト難しくね?それともワタシのアーキテクチャがダメなのか? ← このへん改善やな....
工夫したとこ
- ターミナルからSSHでつなぐので、ルームでトークを分ける機能とかいらね!ってことでルームは公開ルーム1つだけっす!
- 過去のトークはgrep検索したいやん!ってことでテキストファイルでトークを残すことにしました!
https://github.com/kuritayu/infra-tools/blob/master/cmd/tchat/main.go
go get github.com/kuritayu/infra-tools
でも取れます
とりあえず使い方。
- 作業サーバにSSHでログイン
-
tchat &
でサーバを起動(-pでポートを指定できる) - 別ターミナルからSSHでログイン
-
tchat -c
でサーバに接続 - 名前を聞かれるので適当に入れる
- メッセージ入れると接続している人全員に配信する
NAME:
tchat - chat tool by terminal
USAGE:
tchat [global options] command [command options] [arguments...]
VERSION:
1.0
COMMANDS:
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
-c (default: false)
-p value (default: 7777)
--help, -h show help (default: false)
--version, -v print the version (default: false)