Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
golangでBIツールを作る開発合宿の話
Search
S-cubism
September 15, 2017
Programming
440
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
740
未経験者がAndroidアプリをリリースするまで
scubism
0
160
scubism_LT_20180223_細田謙二_イベントソーシング
scubism
0
170
REVEAL.JSをちょっとだけ使ってみた
scubism
0
290
忙しい人のための仮想通貨
scubism
0
140
サーバ作業の注意コマンド
scubism
0
160
最近勉強してること、次にやりたいこと
scubism
0
130
FOOD TECH
scubism
0
81
Firebase(Realtime Database)について
scubism
0
140
Other Decks in Programming
See All in Programming
AHC070解法紹介
eijirou
0
140
Intent as Code
shoppingjaws
6
1.1k
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
280
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
350
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
5
4.4k
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
170
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
4
190
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
200
設計次第でAIコードの読む量は減らせる / designing-for-code-reading
minodriven
29
12k
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
240
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
350
フロントエンドUIフレームワークのこれまでとこれから
ssssota
5
3.1k
Featured
See All Featured
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.1k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
590
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Statistics for Hackers
jakevdp
799
230k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
500
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
530
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
200
WCS-LA-2024
lcolladotor
0
840
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
450
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
How to Ace a Technical Interview
jacobian
280
24k
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で怒られた。 結論 また行きたい!