Edited at

[Go][Heroku] ちっちゃいCLIサービス「dotti」を作った


はじめに

明けましておめでとうございます !!

みなさん元気ですか !!

僕は元気です !!

それはさておき, よくあるこれってどっちが多数なん?的なのを手軽に確認できるサービスというていで, AWS+Go でサービス作りました

CLIから使えるお手軽エンジニア向けサービス的な感じです

制作時間はおよそ 4 時間

いい時代になりましたね

(CLIでサービスって言うんだろうか...なんかちゃんとした言い方あったらすみません :bow:

最初は、AWS Elastic Beanstalk 使ってデプロイしてたけど紆余曲折あって heroku にデプロイするようにしました

のでその辺の話が中心になっとります


どんなん?

こんなん

~/go/src/github.com/mentol310/dotti

❯ ./dotti list
+----+----------------------------+---------+---------+
| ID | TITLE | A COUNT | B COUNT |
+----+----------------------------+---------+---------+
| 1 | インデント幅2ならA, 4ならB | 0 | 0 |
+----+----------------------------+---------+---------+

~/go/src/github.com/mentol310/dotti master
❯ dotti post -i 1 -s A
Success !!

~/go/src/github.com/mentol310/dotti master
❯ dotti list
+----+----------------------------+---------+---------+
| ID | TITLE | A COUNT | B COUNT |
+----+----------------------------+---------+---------+
| 1 | インデント幅2ならA, 4ならB | 1 | 0 |
+----+----------------------------+---------+---------+


レポジトリ

サーバーとクライアントで分けました

サーバー

https://github.com/mentol310/dotti-server

クライアント

https://github.com/mentol310/dotti


サーバー

サーバーは、

↓ のコードをほぼ丸パクリ

https://dev.classmethod.jp/go/golang-single-binary-web-application-on-elastic-beanstalk/

詰まったところとか悩んだところとか


  • entry リストを返す GET API で, 構造体map をそのまま返したらレスポンスで json.Unmarshal でコケた


    • 配列に変換して返すことで解決



  • UpdateEntry で A か B で分岐してインクリメントするところ, もうちょいスマートな構造を持てそうな


クライアント

今回は go cli で検索上位に来てた urfave/cli を使いました

spf13/cobra とどっちにするか悩みましたが、 urfave/cliA simple, fast, and fun package と書かれていたのでこちらを選択しました

シンプルなものが好きです

詰まったところとか


  • Commands でコマンドを入れ子にできると言うのに気付くのに時間がかかりました


    • Flags をグローバルじゃないところにモテるとかその辺り ...




終わり

今年初のサービスでありながら地味に人生初のサービスです !!

サービスといっていいのかわかんないですが、サービスって言い張ります !!

サービスとして大きくなってきてから Vue とかでフロント作れば ... ええですよね ... ??

現状デプロイ毎にデータが揮発するので, データ移したりなんやします(そのうち)

と言いつつ多分お金勿体無いので, アラート飛んできたらトメマス ... 短い命をお楽しみください

バグってうごいてなかった :cry:


1/6 追記


  • バグ修正して動くように


    • バグというか dotenv file の挙動に勘違い(バンドルにいい感じに含まれると思ってた :factory: ) してたので一旦やめた



  • Elastic Beanstalk 止めた

  • heroku にデプロイできるように修正



    • Procfile 追加


    • heroku.yml 追加


    • govendor で依存定義

    • 待機ポートは環境変数からゲットする必要があるみたい( hehroku がよしなに設定してくれる )


      • os.Getenv("PORT")





  • 動いた。無料ダイスキです :raised_hands: