Upgrade to Pro — share decks privately, control downloads, hide ads and more …

golangでBIツールを作る開発合宿の話

S-cubism
September 15, 2017

 golangでBIツールを作る開発合宿の話

S-cubism

September 15, 2017
Tweet

More Decks by S-cubism

Other Decks in Programming

Transcript

  1. Copyright © 2017 by S-cubism Inc. All rights reserved. 1

    Page 株式会社エスキュービズム System Consulting部 東口 和暉 (2017年9月15日) 株式会社エスキュービズム エンジニア勉強会 golangでBIツールを作る開発合宿をやってきた話
  2. Copyright © 2017 by S-cubism Inc. All rights reserved. 2

    Page はじめに 現在、System Consulting部で、要件定義のお仕事をしています。 「何を作って欲しいのか?」を明確にするお仕事です。 例) ・業務フロー(システム使ってどういう業務を行うのか?) ・機能要件(どういう機能を作るか?) ・非機能要件(サーバ構成・セキュリティ・データ移行…etc) でもやっぱり、プログラム書きたい・・・! なので、友達とお盆に開発合宿やってきました。
  3. Copyright © 2017 by S-cubism Inc. All rights reserved. 3

    Page 目次 1. はじめに 2. 開発合宿 〜準備編〜 1. 日程・開催場所決め 2. 開発物の事前決定 3. 技術調査 4. 環境準備 3. 開発合宿 〜当日〜 4. まとめ
  4. Copyright © 2017 by S-cubism Inc. All rights reserved. 4

    Page 日程・開催場所決め 1. 日程決める グループ5人中4人参加できる日程調整 8/11(金)〜8/13(日)の2泊3日に決定! (全部やってくれたK君ありがとう・・・) 2. 場所決める 開発合宿で利用されることが多いらしい、「まるも」という千葉県金谷町 のコワーキングスペースを借りました! 広くて静かで美味しいピザ屋が近くにあって温泉は入れて最高でした!
  5. Copyright © 2017 by S-cubism Inc. All rights reserved. 5

    Page コワーキングスペース「まるも」 http://marumo.net/gasshuku- plan002/?gclid=CjwKCAjw6ZLOBRALEiwAxzyCW_wnQk1E9Yfm9YkKVBdKKao4QHNAfDrX4t0gELOT_bcDui0mB2cJOxoC5rUQAvD_BwE
  6. Copyright © 2017 by S-cubism Inc. All rights reserved. 6

    Page コワーキングスペース「まるも」 http://marumo.net/gasshuku- plan002/?gclid=CjwKCAjw6ZLOBRALEiwAxzyCW_wnQk1E9Yfm9YkKVBdKKao4QHNAfDrX4t0gELOT_bcDui0mB2cJOxoC5rUQAvD_BwE
  7. Copyright © 2017 by S-cubism Inc. All rights reserved. 7

    Page コワーキングスペース「まるも」 http://marumo.net/gasshuku- plan002/?gclid=CjwKCAjw6ZLOBRALEiwAxzyCW_wnQk1E9Yfm9YkKVBdKKao4QHNAfDrX4t0gELOT_bcDui0mB2cJOxoC5rUQAvD_BwE
  8. Copyright © 2017 by S-cubism Inc. All rights reserved. 8

    Page 開発物の事前決定 せっかく集まって開発するのでチーム開発することにしました。 とはいえ、当日に何するか決めるのは時間がもったいない・・・! 一ヶ月前に集まって何をするか決めました。 •ディレクター陣がデータにアクセスできるようにBIツールを作ろう。 例)Redash・Superset ・バックエンドはgolang、フロントエンドはVue.jsにする。 PHPの会社2人・Rubyの会社2人の4人構成。 どうせならそれぞれやったことない言語で! ※以降、私がバックエンド側だったのでVue.jsに話はスルーして、golangの話をします。 取り敢えず超大変そうでした(笑)。
  9. Copyright © 2017 by S-cubism Inc. All rights reserved. 9

    Page 技術調査 合宿前にそれぞれ言語の事前学習。学習するにあたりフレームワークは何 を使うか選定しました! Revel vs Echo
  10. Copyright © 2017 by S-cubism Inc. All rights reserved. 10

    Page Revel GolangのWeb framework •公式URL:http://revel.github.io/ •フルスタック(寄り)なフレームワーク •Routing、Validation、Session、Template Engine、Cache等web application作るにあたりほしいものはありそう。 •公式で用意されてるExamplesが参考になる
  11. Copyright © 2017 by S-cubism Inc. All rights reserved. 11

    Page Echo GolangのWeb framework •公式URL:https://echo.labstack.com/ •ミニマムなフレームワーク •Routing、Template Engineとかはあるけど、Session管理とかは自作し ないといけない。
  12. Copyright © 2017 by S-cubism Inc. All rights reserved. 12

    Page 技術調査の結果 2泊3日でミニマムフレームワークは完全フルスタックで実装しないといけ ないけど流石にそんな時間はない・・・。 Revelに決定!
  13. Copyright © 2017 by S-cubism Inc. All rights reserved. 13

    Page 環境準備 合宿中に公開できたらすぐデプロイできるようにしておきたい。 クラウドのサーバを用意しておく。 •Google App Engine Go言語のPaaSが存在、goのinstallとか不要な上、デプロイ自動化できる 。 ただし、Revelは独自のビルドシステムを持っているため、Google App Engine上で動かすのは結構面倒・・・。 ⇒不採用 ・Heroku Revelのgithubレポジトリにビルドパックが用意されてる。 https://github.com/revel/heroku-buildpack-go-revel Goのversionが1.4だけどちょこっと修正したら1.8に変更できた。 ⇒採用
  14. Copyright © 2017 by S-cubism Inc. All rights reserved. 14

    Page 目次 1. はじめに 2. 開発合宿 〜準備編〜 3. 開発合宿 〜当日〜 1. タイムスケジュール 2. 開発物仕様 3. 開発風景 4. 実装課題 4. まとめ
  15. Copyright © 2017 by S-cubism Inc. All rights reserved. 15

    Page タイムスケジュール • 1日目(8/11) 7:00 渋谷集合 7:00 〜 10:00 移動 電車&フェリー 10:00 〜 20:00 開発① 20:00 〜 21:30 晩飯・お風呂 21:30 〜 23:00 開発② • 2日目(8/12) 開発③ • 3日目(8/13) 〜 16:00 開発④ 16:00 〜 帰宅 電車&フェリー ※開発中は気が向いたタイミングでご飯・お風呂・卓球
  16. Copyright © 2017 by S-cubism Inc. All rights reserved. 16

    Page 開発物仕様 BIツール、まずは最低限の期限を実装する。 画面 機能概要 機能詳細 初期設定 接続先DB情報を設定する。 まずは1DBのみの接続とする。 BIツール自体がDBを持つよりも、工数の少な い.envファイルに書き込む仕様にする。 検索対象選択画面 接続先DBのテーブル・カラム一覧を表 示する。 接続先DBのテーブル・カラムを一覧表示。 リレーションも”xxx_id”によって検知し、一 覧表示で表現する。 リレーション表現するためRDBMSが大前提。 検索対象として選択中のカラムを表示 する 選択中のカラムを表示する。 選択はドラッグアンドドロップを想定。 検索実行 選択中のカラムからQueryを生成し実行する。 複数テーブルにまたがって選択されている場合 は、JOIN句にて結合する。 検索結果画面 「検索対象選択画面」で選択したカラ ムの値を一覧表示する。 Query実行結果のカラム名・レコードを一覧表 示する
  17. Copyright © 2017 by S-cubism Inc. All rights reserved. 17

    Page Cofee break:サービス名決め モチベーションあげるためにサービス名を決めました。 サービス名「SASUKE」 コワーキングスペース「まるも」の近くの、 食堂「さすけ食堂」の名前から拝借。 ※お盆休みで入れなかった・・・。 さすけ食堂 https://tabelog.com/chiba/A1206/A120603/12014064/
  18. Copyright © 2017 by S-cubism Inc. All rights reserved. 18

    Page 開発風景 浴衣駆動開発
  19. Copyright © 2017 by S-cubism Inc. All rights reserved. 19

    Page 開発風景 浴衣駆動開発
  20. Copyright © 2017 by S-cubism Inc. All rights reserved. 20

    Page 実装課題 1. メタいことをやるのにORMが使いづらい・・・。 • 接続先DBのテーブル・カラム一覧を表示する仕様にあたり、テーブルメタ情報から取 得する必要がある。 例) •MySQL:INFORMATION_SCHEMA.TABLES •PostgreSQL:PG_CATALOG.PG_TABLES • 最初ORMライブラリ「dbr」を利用しようとしたけど、DBシステムの差異を吸収できな いので断念。 Github URL(dbr):https://github.com/gocraft/dbr • 最低限の対応として、MySQLを対応することとして以下実装。(これは友人が) https://github.com/nieat/sasuke/blob/master/app/service/sql/sql.go
  21. Copyright © 2017 by S-cubism Inc. All rights reserved. 21

    Page 実装課題 2. 柔軟にデータを取り出すことがちと面倒。 • Golangのよくある実装手段は下記の方法。 • 構造体を定義(取り出すデータの項目・型) • データベース接続・取得 • 構造体に突っ込む ただ、今回は接続するDBや取り出したいデータに応じて何を取り出すかが変わる。構造体 に定義できない・・・。 • 可変配列であるsliceに取り出した値を突っ込む実装方法。
  22. Copyright © 2017 by S-cubism Inc. All rights reserved. 22

    Page 実装課題 3. Serviceに切り出すのってどうやるんだっけ。 なるべくControllerにロジックを書き散らかしたくない。 汎用的なロジックは切り出したいけど最初呼び出せずに戸惑った。 ├── app │ ├── config │ ├── controllers │ ├── init.go │ ├── routes │ ├── service ★ここに汎用ロジックを入れて呼び出したい。 │ ├── tmp │ └── views ・戻り値に以下の定義をしておかないと外部から呼び出せない。 ・外部参照可能な関数を定義したいときは頭文字大文字のルール ↓ app/service/sql/sql.go app/controllers/app.go https://github.com/nieat/sasuke ← 冒頭でservice/sqlをimportしておく。 ”&sql.Handler{}”でsql.goで定義したものを利用できる。
  23. Copyright © 2017 by S-cubism Inc. All rights reserved. 23

    Page まとめ 良かったところ • 仕事関係なく、プログラムに向き合える2泊3日は最高に楽しかった・・・! • 流行りのgolangをちゃんと触れたのは良い時間になった。 • 飽きたときの卓球と、美味しい海鮮とピザが嗜好。 反省点 • やっぱ、webアプリはgolangまだきついかな・・・。 • Golangに不慣れな分、ことごとくcompile errorで怒られた。 結論 また行きたい!