$30 off During Our Annual Pro Sale. View Details »

j2hの紹介

 j2hの紹介

https://go-beginners.connpass.com/event/55768/
2017/6/5 Go言語LT大会! 「最近、Go言語始めました」の会発表資料

kanga333

June 05, 2017
Tweet

More Decks by kanga333

Other Decks in Programming

Transcript

  1. j2hの紹介 G o言語 L T 大会! 「 最近、G o言語始めました」 の会

    K agawa S hoichi(@kanga333)
  2. 自己紹介 香川翔一(@kanga333) インフラエンジニア@M icr o A d ネット広告の会社でインフラの構築やら運用やら G o歴:4ヶ月

    G oの好きな所:ポー タビリティの高さ
  3. 今日話すこと j2hというツー ルを作った話 利用したgjs onというライブラリの紹介

  4. j2h https://git hu b.com/kanga333/j2h JSON から H iv eの DDL

    を生成してくれるツー ル
  5. H ive

  6. ざっくりhiveとは H adoop や S 3の大量のデー タを SQL で見るためのミドルウェア A

    t henaのメタデー タ管理とかでも使われてるっぽい JSON を雑に突っ込んで見る機能がある
  7. JSON を雑に突っ込む たとえばこういう JSON を突っ込む { " f o o

    " : " b a r " , " b a z " : 1 0 } 対応する DDL を書く( 抜粋) c r e a t e e x t e r n a l t a b l e t e s t j 2 h ( f o o s t r i n g , b a z i n t )
  8. 読める

  9. エグい JSON の DDL 書くのツライ エグい JSON

  10. エグい JSON の DDL 書くのツライ 対応するエグい DDL

  11. 人のやることではない

  12. というわけでgoでtool化したのがj2h 例えばこういう JSON を { " n a m e

    " : { " f i r s t " : " S h o i c h i " , " l a s t " : " K a g a w a " } , " a g e " : 2 8 , " j o b " : " I n f r a " , " c h i l d " : n u l l , " h e a l t h " : t r u e , " f r i e n d s " : [ { " f i r s t " : " T a r o " , " l a s t " : " T a n n a k a " } , { " f i r s t " : " Y u t a " , " l a s t " : " Y a m a d a " } ] }
  13. というわけでgoでtool化したのがj2h こんな感じに変換 $ j 2 h - p a t

    h t e s t . j s o n c r e a t e e x t e r n a l t a b l e j s o n _ d a t a ( n a m e s t r u c t < f i r s t : s t r i n g , l a s t : s t r i n g > , a g e i n t , j o b s t r i n g , c h i l d b i n a r y , h e a l t h b o o l e a n , f r i e n d s a r r a y < s t r u c t < f i r s t : s t r i n g , l a s t : s t r i n g > > )
  14. G oで作ればどこでも動いて H appy ランタイムなくても動く M acでも動く L inux でも動く

    W indows でも( 多分) 動く そのうちブラウザ上でも動くようにしたい gop herJS
  15. 実装にあたって

  16. JSON をゆるふわに読みたい 任意の JSON をパー スしたいので、 構造体に U nmar chalれない

    map[str ing]int er face{}をごにょるのはツラそう
  17. gjsonを使う https://git hu b.com/t idw all/gjs on goで JSON を取り扱うライブラリの1つ

    JSON をパー スして 子要素を指定してとったり 子要素に対して反復処理したり
  18. 例えばこういうjsonに対して { " n a m e " : {

    " f i r s t " : " S h o i c h i " , " l a s t " : " K a g a w a " } , " a g e " : 2 8 , " j o b " : " I n f r a " , " c h i l d " : n u l l , " h e a l t h " : t r u e , " f r i e n d s " : [ { " f i r s t " : " T a r o " , " l a s t " : " T a n n a k a " } , { " f i r s t " : " Y u t a " , " l a s t " : " Y a m a d a " } ] }
  19. 指定して取る f i r s t : = g j

    s o n . G e t ( j s o n , " n a m e . f i r s t " ) l a s t : = g j s o n . G e t ( j s o n , " n a m e " ) . G e t ( " l a s t " ) n u m : = g j s o n . G e t ( j s o n , " f r i e n d s . # " ) f r i e n d s : = g j s o n . G e t ( j s o n , " f r i e n d s . # . f i r s t " ) f m t . P r i n t f ( " % s % s f r i e n d s ( % s ) % s \ n " , f i r s t , l a s t , n u m , f r i e n d s ) S h o i c h i K a g a w a f r i e n d s ( 2 ) [ " T a r o " , " Y u t a " ] gjs on.R esu lt 型が返される
  20. JSON タイプを判別する(result.T ype) r : = g j s o

    n . G e t ( j s o n , " j o b " ) f m t . P r i n t f ( " % s ( % s ) \ n " , r , r . T y p e ) I n f r a ( S t r i n g )
  21. JSON タイプはこんな感じに対応 子要素が 文字列: S t r i n g

    数値: N u m b e r tru e: T r u e fals e: F a l s e nu ll: N u l l ネストした JSON または配列: J S O N
  22. 子要素に対して反復処理する(F orE ach) あんまり G oっぽく無い気がする r : = g

    j s o n . P a r s e ( j s o n ) r . F o r E a c h ( f u n c ( k e y , v a l u e g j s o n . R e s u l t ) b o o l { f m t . P r i n t f ( " % s \ t : % s ( % s ) \ n " , k e y , v a l u e , v a l u e . T y p e ) r e t u r n t r u e } ) 反復処理する関数を渡してやる R esu lt 型でkey とv alu eを受け取り、tru eを返すとルー プ続行
  23. 子要素に対して反復処理する(F orE ach) 結果 n a m e : {

    " f i r s t " : " S h o i c h i " , " l a s t " : " K a g a w a " } ( J S O N ) a g e : 2 8 ( N u m b e r ) j o b : I n f r a ( S t r i n g ) c h i l d : ( N u l l ) h e a l t h : t r u e ( T r u e ) f r i e n d s : [ { " f i r s t " : " T a r o " , " l a s t " : " T a n n a k a " } , { " f i r s t " : " Y u t a " , " l a s t " : " Y a m a d a " } ] ( J S O N )
  24. そんなこんなで gjsonでゆるふわに JSON 扱える!

  25. おわりに JSON から H iv eの DDL を作成するj2hという自作ツー ルを紹介 G

    oは簡単にどこでも動いて良い! JSON をゆるふわに取り扱うためのgjs onというライブラリを紹介 G o楽しい