こんにちは。増田(id:masutaka26)です。社内勉強会の順番が来ると、2ヶ月前くらいからソワソワしてきます。
そんなわけで今回は『日報を golang で支える技術』というお題で発表しました。
発表の内容
以下、スライドからの抜粋です。
- 背景など
- 以前の社内勉強会で github-nippou という gem を紹介した
- ひとつの ruby スクリプトからそこそこ作り込み、毎日便利に使っている
- 先日も同僚の @ryz310 から pull request をもらって、さらに便利になった
- からの、golang への書き換えをした。その場でライブリリース
- モチベーション
- 以前 hub コマンドが ruby から golang に移行したのを見て、一度やってみたかった
- rubygems の CLI を Dockerize してポータビリティを高めるのは何かが違うという気持ち
- @ryz310 からもらった元気
- 当たり前だけど、全て代わりの方法を調べて実装しなければいけなかった
- octokit → go-github, thor → cobra など。Assets の取り扱いも変わる
- 良かったこと
- 1バイナリになったのでインストールやアップデートが容易になった
- パフォーマンスも予想外に上がった(当社比約2倍)
- 以前調べた時は GitHub への API アクセスがボトルネックだったので、そこまで変わらないと思っていた
- 結果的にいろんなライブラリを使えて、良い素振りになった
- 困ったこと
- とにかく関数が長くなりがち
- getXXX() 多くなりすぎ
- ファイル分割の意味
- 書けば書くほど golang っぽい書き方が分からなくなる
- OOP ではないことへの戸惑い
- ruby が柔軟すぎて移植は難しかった。オススメはしない
- 疑問など
- class設計で便利だった、private method の代わり
- 設計し直すべきか
- classを 使わなかった頃の JS の知見を知りたい
- ビジネスロジックのパッケージ名はどうすれば
- 今回は lib にした
- class設計で便利だった、private method の代わり
- 感想
- 今後、rubygems で CLI ツールを作ることはないと思う。継続利用を考えると勧めづらい
- golang は単一ファイルでの実装と実行に一番ハードルが低い気がしている
- もっと楽な言語あったら教えて
- 今後の予定
- golang っぽい書き方にする
- もっとテストを書く
- golang on Lambda や API サーバも学習する
- 『スターティングGo言語』を読み切る
結果
↓
https://github.com/masutaka/github-nippou
発表の感想
付箋紙に感想を書いてくれました。 は私からのコメントです。
- クラス設計周りの話は自分も悩んでいます
- ライブラリとか読んで学習します!
- GraphQL 対応の PR 出すぞ
- お待ちしております!
- Go の GraphQL のクライアント側はまだなさそう
- github.com/graphql-go/graphql を見つけました。API リクエストを 1 回に出来るのかな?
- CLI は ruby < golang わかる。mruby も良いかも
- mruby はエコシステムが大変そうで...
- Makefile 参考にします
- あざす!
- Makefile 全く分からない... 勉強しないと!!
- 基本だったら1日くらいで分かりますよ。make はビルドを必要な時だけに抑えられるので良いです
- 流石ますたかさん とても面白く熱量ある発表でした
- ありがとうございます。熱量は大事にしてます
- 神回ですね
- もっと技術レベル上げていきます!
- 刺激を受けるいい話だった
- 刺激を与えるのがエンジニアとして使命のひとつだと思っています
- スピード up は nice 発見
- ですね
やっぱりはやくなるものなんだなー
- 速いだけでテンションが上がります
- golang 熱の高まり・・・!!
- やりましょう!
- go モチベーションの高さの理由が分かりました!!
- もう必死ですよ
- ずっと Go 書いてたのはこれだったのかー(棒)
- そうなんですよー(棒)
- Go 書きたい
- 今書きましょう!
ゴー書いてく!!
- ア、ハイ
- ざんねん!!わたし(@ryz310)の PR はここでおわってしまった!!
- またお待ちしております!(笑)
- バイナリ配布うれしい!
- ユーザの皆様のことを第一に考えております
- CLI は golang
Web やる気にはなら…- 配布を考えるとそうですねー。今は GitHub でリリースしておけば、Homebrew や zplug など配布手段はいろいろありますし
- ディストリビューション大変だなー
- gox で簡単に並列ビルドできるので、それほど大変ではなかったですね
- 知見 ライブデプロイ is つらい
- もうハラハラドキドキですよ
- ライブデプロイメント
- やはり初回の CI は絶対失敗しますね...
- (社内 Slack の)#golang を今後ともよろしくお願いします
- こちらこそ!
最後に
とにかく設計が目下の悩みです。良い情報があれば教えてください!