DRYな備忘録

Don't Repeat Yourself.

ameshコマンド & amesh Slack bot の最近の話

このエントリは Go 2 Advent Calendar 2020 - Qiita の8日目です。

背景

  • もう2年前になりますが、ソフトウェアを主業としない業界に転職しました
  • 最近はストレス解消にコードを書いています。仕事ではいっさいコード書かない
  • ameshコマンド、amesh-botは便利なので今でもガンガン開発しています
  • そろそろ艦これウィジェットのサーバサイドをHerokuからGCPに引っ越したい

ameshつくったの、もう5年前じゃん。

tl;dr

  • GAE/Go 1.12+の環境で動くようにリファクタリングしました
  • 「予報」コマンドをつくりました
  • Slack AppとしてDistributeしました(Submitはまだ)
  • それにともなってFirestore使うようにしました
  • 今まで0.07円だったんですけど、公開したら614円になりました

github.com

CLIとWebアプリケーションを含むプロジェクトの構成について

ameshプロジェクトは、ameshコマンドと、amesh-botという2つのユースケースを提供しています。さらに、他のプロジェクトからもimportできるpackageとしてのインターフェースもあります。

当初は、以下のようなファイル構成で作成していました。

.
├── bot
├── amesh
│   └── main.go
└── lib

このコマンドラインツールをインストールしようとすると go get github.com/otiai10/amesh/amesh というように、amesh/ameshをgetする必要があります。これは、一時期けっこう見たタイプだと思いますたとえばgithub.com/robfig/revel/revelとか。

revel、いっぺん死んだかと思ったら、ひさしぶりに見に行ったらふつうに1.0.0が最近リリースされててびっくりした。 この情報を見つけただけでもこのアドカレ書いた意味あったかもしれん。

いつぞやはお世話になりました、revel。

あとはservice/owner/foo/cmd/fooみたいなパターンもよく見ますが、ameshに関してはかっこよさを優先してgo get github.com/otiai10/ameshとしたくて、ルートにmain.goを配置しました。

.
├── bot # Slackのwebhookを受けるサーバの定義
├── cli # コマンドラインアプリケーションの定義
├── lib # 外部プロジェクトがimportできるもの
└── main.go # コマンドのエントリポイント

Slack AppのDistributeにあたって、Firestoreの利用

データを保存する必要があるため、GAE/GoからFirestoreへの接続をしました。が、めっちゃかんたんだったのであんまり特筆すべきことはないです。

これ見てやりました。

pkg.go.dev

ちなみに

気温も見れます

マイナンバー通知カードが見つかったら、GitHub Sponsorを始めると同時に「Add to Slack」ボタンを公開したいと思います。

マイナンバー通知カードどこ〜

誰か俺のマイナンバー通知カードを見つけてくれ

DRYな備忘録として

スターティングGo言語

スターティングGo言語

Go言語による並行処理

Go言語による並行処理

改訂2版 基礎からわかる Go言語

改訂2版 基礎からわかる Go言語