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
750
未経験者が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
PyConTW 2026 - AI Coding 不只是工具升級, 區域醫院醫療資訊系統協作開發與資訊團隊轉型實踐
cclai999
0
190
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
4
1.3k
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
180
Python Lambdaにおけるテストしやすい設計とAI支援の活用 / Designing Testable Python Lambda Functions with AI
kitano_yuichi
1
180
Groovy as a human and AI friendly programming language
paulk
0
110
contenteditable と日本語入力に向き合う
colorful12
0
220
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
950
残高管理から台帳サービスへの進化
artoy
1
210
Compiling a real-world CLI tool to native with Static Hermes
tmikov2023
0
130
気持ちぃ〜角丸 Squircle
ryu1013
0
340
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
410
クラウドエージェントは、 何がそんなに便利なのか / what makes cloud agents so useful
rkaga
3
500
Featured
See All Featured
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.2k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
7k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
4
1.2k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
Making Projects Easy
brettharned
120
6.8k
Believing is Seeing
oripsolob
1
250
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
47k
Building Adaptive Systems
keathley
44
3.3k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
490
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.3k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
410
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で怒られた。 結論 また行きたい!