初心から一週間で作ってみた kinesis client library for go
TRANSCRIPT
初心から一週間で作ってみた Kinesis Client Library for Go
Sapporo #golang Meetup
はじめまして!(じゃない方はこんばんは!)Masashi Terui 照井 将士
https://www.facebook.com/marcy.terui https://twitter.com/marcy_terui
JAWS-UG札幌下っ端メンバー
Chef Meetup Sapporo主催 一回しかやってないですが… Chefだけだと僕がつまらないと気づいたので、 誰かInfra as Code全般で一緒にやりませんか?
言語歴 今のお仕事 :Python 前のお仕事 :PHP(ちょっとJava,C#) 学生時代 :Java(ちょっとC) 業務外でよく使う:Ruby
Kinesis Client Library #とは
Amazon Kinesis は、大規模なストリーミングデータをリアルタイムで処理する完全マネージド型サービスです。Amazon Kinesis は、数十万のソース
から 1 時間あたり数百テラバイトのデータを収集し、処理できます。 ※公式サイトより抜粋
要は大規模ストリーミングデータのバッファ的な何か
Kinesis #とは
Client Library #とはこれを作るためのライブラリ
AWS Black Belt Techシリーズ Amazon Kinesisのスライドから拝借 http://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-tech-amazon-kinesis
詳しくは公式サイトなどでご確認を
Kinesis Client Libraryの言語ラインナップ公式
• Javahttps://github.com/awslabs/amazon-kinesis-client
• Pythonhttps://github.com/awslabs/amazon-kinesis-client-python
• Ruby(最近追加されてた) https://github.com/awslabs/amazon-kinesis-client-ruby
非公式 • PHP
https://github.com/fukuiretu/amazon-kinesis-client-library-php • Ruby(公式よりソース見た感じ良さそうだったw)
https://github.com/everydayhero/amazon-kinesis-client-ruby
(2015.01.0? 俺調べ)
Goが無い! あと、Stream処理は並列(並行)化しやすいからGoと相性が良い(と思う)
ちょうど良いので作ってみよう …と思って作ってたら途中で非公式を一つ発見したんですが、
素人目で見ても良く出来てるとは言い難い感じの実装だったので、 気にせず続けることにw
ちなみに、Java以外はJavaのライブラリが提供しているAPIを実装しているだけ
(なのであんまり大変じゃない) それゆえ、Javaから開放される訳ではないので、運用面では幸せになれないという噂も?w
1〜2日目:とりあえず、Tour of Go• コレ(知ってる人多いと思いますが一応)
http://go-tour-jp.appspot.com/
• 一通りの基本機能を手を動かしながら、実際に動かしながら学べるのでとても良かった
• アルゴリズムの問題が物によっては難しかった一つ一つテーマがあるので、分からないからといって飛ばすのはあまり良くないアルゴリズムを解くのは本来の目的とズレるので、答え見ても良いと思う(というか2個くらい見た)http://chopl.in/blog/2013/04/13/go_tour_exercise_solutions.html
• これをやってみてから何を作ってみるか決めた
• とりあえず一通りやったほうが良いと思う
3〜5日目:Pythonを参考に実装
• オブジェクト指向な作りはとりあえず基本そのままGoでもオブジェクト指向っぽく書ける
• • •
• コンパイルエラー潰すだけであらかた動いたので、コンパイラの偉大さを感じた
• 以前にPythonを試してみた経験から、起動が面倒なので専用コマンドが欲しくなったhttp://marcy.hatenablog.com/entry/2014/12/09/030227
6日目:CLIを実装
• CLI周りはQiitaに知見が一杯載ってたhttp://qiita.com/
• CLI Libraryが便利(特にサブコマンド作りたい時)https://github.com/mitchellh/cli
• せっかくだからクロスコンパイルしたいけど、手元で一々やるのは面倒と感じた
7日目:CI組んでみる• クロスコンパイルはgox使ったら驚くほど簡単!
https://github.com/mitchellh/gox
• ググったらにDrone.ioの例が多かったのでやってみたhttps://drone.io/
• シンプルで使いやすい
• 逆に言うと機能は少ない
• 指定したディレクトリに成果物置くだけで公開できるので、シンプルに使いたい方にオススメ
できたやつ
• Amazon Kinesis Client Library for Gohttps://github.com/marcy-go/kcl
• CLIhttps://github.com/marcy-go/kclhelper
• CLI Binaryhttps://drone.io/github.com/marcy-go/kclhelper/files
• Sample Applicationhttps://github.com/marcy-go/kclsample
• Sample Application Binaryhttps://drone.io/github.com/marcy-go/kclsample/files
感想など• 一週間といっても昼間は働いているので基本夜
→「最近夜更かしが酷い」と奥さんに怒られる
• 極力抽象化はせず、でも面倒くさいことはやらなくて良い感じが バランスの良い言語だと思った
• 正直、例外は欲しい時がある
• Tour of Goが入門チュートリアルとしてとても良い 本気で他の言語でも欲しいレベル
• テストってどうしてます? 特に今、モックについて悩んでます良いライブラリがあれば教えて下さいまたは、モックが無くてもテストできる作りを保つべき?
ありがとうございました