このエントリは 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円になりました
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への接続をしました。が、めっちゃかんたんだったのであんまり特筆すべきことはないです。
これ見てやりました。
ちなみに
気温も見れます
マイナンバー通知カードが見つかったら、GitHub Sponsorを始めると同時に「Add to Slack」ボタンを公開したいと思います。
マイナンバー通知カードどこ〜
誰か俺のマイナンバー通知カードを見つけてくれ
DRYな備忘録として
- 作者:Katherine Cox-Buday
- 発売日: 2018/10/26
- メディア: 単行本(ソフトカバー)