Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
golangでBIツールを作る開発合宿の話
Search
S-cubism
September 15, 2017
Programming
430
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
golangでBIツールを作る開発合宿の話
S-cubism
September 15, 2017
More Decks by S-cubism
See All by S-cubism
WSLでreactの開発環境作った話
scubism
0
730
未経験者がAndroidアプリをリリースするまで
scubism
0
150
scubism_LT_20180223_細田謙二_イベントソーシング
scubism
0
160
REVEAL.JSをちょっとだけ使ってみた
scubism
0
280
忙しい人のための仮想通貨
scubism
0
130
サーバ作業の注意コマンド
scubism
0
160
最近勉強してること、次にやりたいこと
scubism
0
130
FOOD TECH
scubism
0
80
Firebase(Realtime Database)について
scubism
0
140
Other Decks in Programming
See All in Programming
ここ半年くらいでAIに作らせたR用ツール
eitsupi
0
370
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
3
760
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
150
ドリフトを絶対に許さない(?)CDK運用 / CDK Ops with Zero Tolerance for Drifts (?)
akihisaikeda
1
170
OpenSpecのproposalにbrainstormingを持たせてみた
tigertora7571
1
200
変わらないものが、変わるものを決める — 意図駆動開発 × イベントソーシング × イミュータブル | What Doesn't Change Decides What Can — IDD × Event Sourcing × Immutability
tomohisa
0
1.3k
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
180
Apache Hive: そしてCloud Native Lakehouseへ
okumin
1
210
全PRの83%がAIレビューだけでマージできるようになった開発組織はその後どうなったか
athug
1
1.5k
霧の中の代数的エフェクト
funnyycat
1
480
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
290
PostgreSQL 18で考えるUUID主キー
kazuhiro1982
0
460
Featured
See All Featured
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
620
Done Done
chrislema
186
16k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
Designing Powerful Visuals for Engaging Learning
tmiket
1
480
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Building the Perfect Custom Keyboard
takai
2
830
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
400
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
400
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
Transcript
Copyright © 2017 by S-cubism Inc. All rights reserved. 1
Page 株式会社エスキュービズム System Consulting部 東口 和暉 (2017年9月15日) 株式会社エスキュービズム エンジニア勉強会 golangでBIツールを作る開発合宿をやってきた話
Copyright © 2017 by S-cubism Inc. All rights reserved. 2
Page はじめに 現在、System Consulting部で、要件定義のお仕事をしています。 「何を作って欲しいのか?」を明確にするお仕事です。 例) ・業務フロー(システム使ってどういう業務を行うのか?) ・機能要件(どういう機能を作るか?) ・非機能要件(サーバ構成・セキュリティ・データ移行…etc) でもやっぱり、プログラム書きたい・・・! なので、友達とお盆に開発合宿やってきました。
Copyright © 2017 by S-cubism Inc. All rights reserved. 3
Page 目次 1. はじめに 2. 開発合宿 〜準備編〜 1. 日程・開催場所決め 2. 開発物の事前決定 3. 技術調査 4. 環境準備 3. 開発合宿 〜当日〜 4. まとめ
Copyright © 2017 by S-cubism Inc. All rights reserved. 4
Page 日程・開催場所決め 1. 日程決める グループ5人中4人参加できる日程調整 8/11(金)〜8/13(日)の2泊3日に決定! (全部やってくれたK君ありがとう・・・) 2. 場所決める 開発合宿で利用されることが多いらしい、「まるも」という千葉県金谷町 のコワーキングスペースを借りました! 広くて静かで美味しいピザ屋が近くにあって温泉は入れて最高でした!
Copyright © 2017 by S-cubism Inc. All rights reserved. 5
Page コワーキングスペース「まるも」 http://marumo.net/gasshuku- plan002/?gclid=CjwKCAjw6ZLOBRALEiwAxzyCW_wnQk1E9Yfm9YkKVBdKKao4QHNAfDrX4t0gELOT_bcDui0mB2cJOxoC5rUQAvD_BwE
Copyright © 2017 by S-cubism Inc. All rights reserved. 6
Page コワーキングスペース「まるも」 http://marumo.net/gasshuku- plan002/?gclid=CjwKCAjw6ZLOBRALEiwAxzyCW_wnQk1E9Yfm9YkKVBdKKao4QHNAfDrX4t0gELOT_bcDui0mB2cJOxoC5rUQAvD_BwE
Copyright © 2017 by S-cubism Inc. All rights reserved. 7
Page コワーキングスペース「まるも」 http://marumo.net/gasshuku- plan002/?gclid=CjwKCAjw6ZLOBRALEiwAxzyCW_wnQk1E9Yfm9YkKVBdKKao4QHNAfDrX4t0gELOT_bcDui0mB2cJOxoC5rUQAvD_BwE
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の話をします。 取り敢えず超大変そうでした(笑)。
Copyright © 2017 by S-cubism Inc. All rights reserved. 9
Page 技術調査 合宿前にそれぞれ言語の事前学習。学習するにあたりフレームワークは何 を使うか選定しました! Revel vs Echo
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が参考になる
Copyright © 2017 by S-cubism Inc. All rights reserved. 11
Page Echo GolangのWeb framework •公式URL:https://echo.labstack.com/ •ミニマムなフレームワーク •Routing、Template Engineとかはあるけど、Session管理とかは自作し ないといけない。
Copyright © 2017 by S-cubism Inc. All rights reserved. 12
Page 技術調査の結果 2泊3日でミニマムフレームワークは完全フルスタックで実装しないといけ ないけど流石にそんな時間はない・・・。 Revelに決定!
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に変更できた。 ⇒採用
Copyright © 2017 by S-cubism Inc. All rights reserved. 14
Page 目次 1. はじめに 2. 開発合宿 〜準備編〜 3. 開発合宿 〜当日〜 1. タイムスケジュール 2. 開発物仕様 3. 開発風景 4. 実装課題 4. まとめ
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 〜 帰宅 電車&フェリー ※開発中は気が向いたタイミングでご飯・お風呂・卓球
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実行結果のカラム名・レコードを一覧表 示する
Copyright © 2017 by S-cubism Inc. All rights reserved. 17
Page Cofee break:サービス名決め モチベーションあげるためにサービス名を決めました。 サービス名「SASUKE」 コワーキングスペース「まるも」の近くの、 食堂「さすけ食堂」の名前から拝借。 ※お盆休みで入れなかった・・・。 さすけ食堂 https://tabelog.com/chiba/A1206/A120603/12014064/
Copyright © 2017 by S-cubism Inc. All rights reserved. 18
Page 開発風景 浴衣駆動開発
Copyright © 2017 by S-cubism Inc. All rights reserved. 19
Page 開発風景 浴衣駆動開発
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
Copyright © 2017 by S-cubism Inc. All rights reserved. 21
Page 実装課題 2. 柔軟にデータを取り出すことがちと面倒。 • Golangのよくある実装手段は下記の方法。 • 構造体を定義(取り出すデータの項目・型) • データベース接続・取得 • 構造体に突っ込む ただ、今回は接続するDBや取り出したいデータに応じて何を取り出すかが変わる。構造体 に定義できない・・・。 • 可変配列であるsliceに取り出した値を突っ込む実装方法。
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で定義したものを利用できる。
Copyright © 2017 by S-cubism Inc. All rights reserved. 23
Page まとめ 良かったところ • 仕事関係なく、プログラムに向き合える2泊3日は最高に楽しかった・・・! • 流行りのgolangをちゃんと触れたのは良い時間になった。 • 飽きたときの卓球と、美味しい海鮮とピザが嗜好。 反省点 • やっぱ、webアプリはgolangまだきついかな・・・。 • Golangに不慣れな分、ことごとくcompile errorで怒られた。 結論 また行きたい!