エンジニア

2017.12.04

GolangでDynamoDB CLIを書く話

gopherくん
こんにちは。クラシマです。
ハンズラボ Advent Calendar 2017 4日目の記事です。
もう随分前になりますが、井上がGolang製のDynamoDB用のCLIを探していたことがありました。
ネットストアのセールに向けて行った負荷対策について/ハンズアラボエンジニアブログ
結局見つからなかったのでNode.jsで井上本人が書き、現在もECサイトの本番環境で使っています。
↓それがこちらのbikkeです。
https://github.com/inouet/bikke
10月末くらいから趣味プロジェクトでGolangを書いていたのですが、
井上の記事を思い出したのでDynamoDB用のCLIを書くことにしました。
できあがったものが↓これです。
https://github.com/watarukura/gody

# AWSプロファイルはstg
# itemテーブルからGSI:jan-indexのパーティションキー:janに4937751121103を指定でqueryする
# 出力はヘッダ付きで空白区切りテキスト(ssv)とし、出力するフィールドはjanとnameに絞る
gody query \
--profile stg \
--table item \
--pkey 4937751121103 \
--index jan-index \
--format ssv \
--header \
--field jan,name
=>
name jan
つぼキーク 4937751121103

自分でCLIのツールを書くのは初めてなので三歩進んで二歩下がりながら進めています。
個人的にJSONを手で書くのが苦痛なので、JSONをオプションに使わない、というのがコンセプトです。
まだlist/get/query/scanしかできないので、put/update/deleteができるようになったら本番環境で使えないか検証したいところです。
put/updateのオプションをどうするか、今も悩んでいます。
テストもあまり書けてないですし・・・。
趣味プロジェクトから業務プロジェクトに反映するにはもう少し時間がかかりそうです。
Golang、いいですね!
低レイヤーの知識がないと速いプログラムが書けない、というところも魅力です。
日頃はPHPを書いていて、ポインタやバッファを気にすることはなくて、この辺りの扱いはさっぱりです。
今のところも並行処理的な機能をほぼ使ってないので、速くなる余地が随分残っている気がします。
あとは、JSONの扱いが楽なのがモダンな言語という感じがします。
弊社、ユニケージ開発により大量のBashスクリプトが稼働していますが、JSONの扱いは特に困るところです。
DynamoDBをデータストアの1st Choiceにするプロジェクトはそれなりにあるので、
そこでJSONを経由せずにDynamoDBを扱えるようになると、楽ができる部分は結構増えます。
ECサイト以外でも、ハンズラボ全体で使えるツールになるといいなぁと夢想しています。
AWS LambdaのGolangサポートも発表されましたし、今後ますますGolangを使うシーンが増えそうです。
折よく、開発に使っていたGoLandも販売開始になりました。
PHPStormユーザがGolangを書くならGoLandで決まりですね!
ハンズラボ Advent Calendar 2017 の5日目は、青木さんです。
Golangの学習には以下の書籍とサイトに大変お世話になりました。
この場を借りてお礼申し上げます。

※ アイキャッチのGopherくんの原著作者はRenée Frenchさんです。

一覧に戻る