Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
breakthrough point of web engineer
Livesense Inc.
PRO
June 23, 2018
Programming
0
100
breakthrough point of web engineer
【LIVESENSE流】Webサービスの開発・運用におけるデータエンジニアリング
https://camphor.connpass.com/event/87720/
上記イベント登壇資料。
Livesense Inc.
PRO
June 23, 2018
Tweet
Share
More Decks by Livesense Inc.
See All by Livesense Inc.
Tech Award 2021 選出方法
livesense
PRO
0
420
株式会社リブセンス エンジニアリング組織を支える風土と制度
livesense
PRO
0
200
株式会社リブセンス・マッハバイト 採用候補者様向け資料
livesense
PRO
0
44
株式会社リブセンス・転職会議 採用候補者様向け資料
livesense
PRO
0
220
brain.optimizerのレコメンド取得API
livesense
PRO
0
1.2k
リブセンスでのMLシステム開発・運用と 研究・開発アシスタントの取り組み
livesense
PRO
2
1.8k
Argo Workflow による機械学習ワークフロー管理
livesense
PRO
2
2.7k
事業横断組織でのMLシステム開発・運用と基盤設計
livesense
PRO
0
2.5k
Argo Workflow によるMLジョブ管理
livesense
PRO
2
530
Other Decks in Programming
See All in Programming
Migrating to Kotlin State & Shared Flows
heyitsmohit
1
190
Meet Swift Regex
usamik26
0
310
Scrum Fest Osaka 2022/5年で200人になったスタートアップの アジャイル開発の歴史とリアル
atamaplus
1
810
engineer
spacemarket
0
720
Cybozu GoogleI/O 2022 LT会 - Input for all screens
jaewgwon
0
270
こそこそアジャイル導入しようぜ!
ichimichi
0
1.1k
シェーダー氷山発掘記
logilabo
0
140
Terraform Plan/Apply結果の自動通知
ymmy02
0
280
RFC 9111: HTTP Caching
jxck
0
150
Node-RED 3.0 新機能紹介
utaani
0
130
Java初心者が知っておくべきプログラミングのこと - JJUG CCC 2022 Spring
kishida
4
520
Baseline Profilesでアプリのパフォーマンスを向上させる / Improve app performance with Baseline Profiles
numeroanddev
0
230
Featured
See All Featured
Stop Working from a Prison Cell
hatefulcrawdad
261
17k
What's new in Ruby 2.0
geeforr
336
30k
Building a Scalable Design System with Sketch
lauravandoore
447
30k
Product Roadmaps are Hard
iamctodd
34
6.5k
How New CSS Is Changing Everything About Graphic Design on the Web
jensimmons
213
11k
Practical Orchestrator
shlominoach
178
8.6k
GraphQLの誤解/rethinking-graphql
sonatard
27
6.5k
Building Flexible Design Systems
yeseniaperezcruz
310
34k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
151
13k
How to train your dragon (web standard)
notwaldorf
58
3.9k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
11
4.7k
Fontdeck: Realign not Redesign
paulrobertlloyd
73
4.1k
Transcript
ϓϩμΫτίʔυͰޠΔʂ ΤϯδχΞͷͷ ϒϨʔΫεϧʔϙΠϯτ CAMPHOR×LIVESENSE WEBαʔϏεͷ։ൃɾӡ༻ʹ͓͚ΔσʔλΤϯδχΞϦϯά 2018/06/23() @TCHIKUBA
ϓϩμΫτίʔυͰޠΔʂ ΤϯδχΞͷͷϒϨʔΫεϧʔϙΠϯτ PROFILE ▸ 1978.11 Ԭݝੜ·Ε ▸ 2002.03 ౦ژۀେֶཧֶ෦ଔ ▸
2004.08 ϑϦʔϥϯεΤϯδχΞ ▸ 2011.08 ৽نࣄۀ։ൃPM ▸ 2013.05 Ϧϒηϯεೖࣾ ▸ 2015.04 ৽نࣄۀ্ཱͪ͛ ▸ 2018.06 ΤϯδχΞϦϯάϚωʔδϟʔʗ σʔλΤϯδχΞ
None
None
ϓϩμΫτίʔυͰޠΔʂ ΤϯδχΞͷͷϒϨʔΫεϧʔϙΠϯτ AGENDA ▸ Ruby on RailsΛߏ͢Δٕज़ ▸ RailsͰ࣮ફతͳwebΞϓϦέʔγϣϯ։ൃ͢Δצॴ ▸
IESHILͷࣄྫ ▸ RailsϓϩμΫγϣϯίʔυ ▸ ։ൃϓϩηε ▸ σʔλΤϯδχΞϦϯά
RUBY ON RAILSΛ ߏ͢Δٕज़
RUBY ON RAILSΛߏ͢Δٕज़ ABOUT RUBY ON RAILS ▸ ౷తͳMVCϑϨʔϜϫʔΫ ▸
RESTfulͳϧʔςΟϯά ▸ ActiveRecordʢڧྗͳORMʣ ▸ ϚΠάϨʔγϣϯʢDBཧʣ ▸ ։ൃϞʔυʢdevelopmentʗtestʗproductionʣ ▸ ϑϩϯτΤϯυ ▸ Asset Pipeline ▸ SCSS ▸ CoffeeScript ▸ WebpackerʢRails 5.1ʙʣ ▸ RubyGemsΤίγεςϜ ▸ BDD
౷తͳ MVCϑϨʔϜϫʔΫ
RUBY ON RAILSΛߏ͢Δٕज़ RESTFULͳROUTING ▸ bin/rails g scaffold User name:string
email:string ▸ bin/rails routes ▸ config/routes.rb ▸ resources :users
RUBY ON RAILSΛߏ͢Δٕज़ ACTIVE RECORD ▸ app/models/application_record.rb ▸ app/models/user.rb ▸
User.all ▸ User.find(1) ▸ User.take.name ▸ User.take.email
RUBY ON RAILSΛߏ͢Δٕज़ ϚΠάϨʔγϣϯ ▸ db/migrate/20180623163000_create_users.rb ▸ bin/rails db:migrate ▸
bin/rails db:rollback
RUBY ON RAILSΛߏ͢Δٕज़ ։ൃϞʔυ ▸ RAILS_ENV ▸ bin/rails s -e
[mode name] ▸ config/environments/ ▸ development.rb ▸ production.rb ▸ test.rb
FRONTEND
RUBY ON RAILSΛߏ͢Δٕज़ ASSET PIPELINE ▸ RubyGems ▸ sprockets-railsʢΞηοτίϯύΠϧʣ ▸
sass-railsʢSCSSʣ ▸ uglifierʢJSϑΝΠϧѹॖʣ ▸ coffee-railsʢJS→CoffeeScriptίϯύΠϧʣ ▸ bin/rails assets:precompile (for production) ▸ ϑΟϯΨʔϓϦϯτ ▸ application-908e25f4bf641868d8683022a5b62f54.css
RUBY ON RAILSΛߏ͢Δٕज़ SCSS ▸ RubyGems ▸ sass-rails ▸ app/assets/stylesheets/application.css
RUBY ON RAILSΛߏ͢Δٕज़ COFFEE SCRIPT ▸ RubyGems ▸ coffee-rails ▸
app/assets/javascripts/application.js
RUBY ON RAILSΛߏ͢Δٕज़ WEBPACKER (RAILS 5.1~) ▸ RubyGems ▸ webpacker
▸ bin/rails new myapp --webpack ▸ bin/rails webpacker:install ▸ app/views/layouts/application.html.erb ▸ bin/webpack-dev-server
None
มԽͷ͍ ϑϩϯτΤϯυο…!!
None
๛ͳ RUBYGEMS
RUBY ON RAILSΛߏ͢Δٕज़ RUBY GEMS ▸ bin/bundle inst —path vendor/bundle
-j4 GEMืूதʂ
RUBY ON RAILSΛߏ͢Δٕज़ RUBY GEMS (ϚοϋόΠτ 2006.02~) ▸ grep 'gem
' Gemfile | wc -l ▸ 74 ※ ▸ ʲFYIʳgrep create_table db/schema.rb | wc -l ▸ 363
RUBY ON RAILSΛߏ͢Δٕज़ RUBY GEMS (ब׆ձٞ 2015.04~) ▸ grep 'gem
' Gemfile | wc -l ▸ 71 ▸ ʲFYIʳgrep create_table db/schema.rb | wc -l ▸ 226
RUBY ON RAILSΛߏ͢Δٕज़ RUBY GEMS (IESHIL 2015.08~) ▸ grep 'gem
' Gemfile | wc -l ▸ 113 ▸ ʲFYIʳgrep create_table db/schema.rb | wc -l ▸ 175
RUBY ON RAILSΛߏ͢Δٕज़ RUBY GEMS (JOB-DRAFT 2015.11~) ▸ grep 'gem
' Gemfile | wc -l ▸ 119 ▸ ʲFYIʳgrep create_table db/schema.rb | wc -l ▸ 250
※ ϞϊϦγοΫͳ RAILSࣄྫ
BDD
RUBY ON RAILSΛߏ͢Δٕज़ BDD (ৼۦಈ։ൃ) ▸ Minitest (Default) ▸ bin/rails
test ▸ Rspec (RubyGems) ▸ bin/rails g rspec:install ▸ bin/bundle binstubs rspec-core ▸ bin/rspec
ςετίʔυ ҭͯΔͷ
جຊ͜͜·Ͱ
COFFEE BREAK
[COFFEE BREAK] RAILSॳ৺ऀ͋Δ͋Δ Ͳ͔͜ΒͲ͜·Ͱ͕RAILS WAYͳͷ͔ʁ ▸ ෳܗͱ୯ܗͷҧ͍ ▸ Routing →
resources :usersʢෳܗʣ ▸ Controller → class UsersControllerʢෳܗʣ ▸ Model → class Userʢ୯ܗʣ ▸ Table → usersςʔϒϧʢෳܗʣ ▸ View → app/views/usersʢෳܗʣ
[COFFEE BREAK] RAILSॳ৺ऀ͋Δ͋Δ Ͳ͔͜ΒͲ͜·Ͱ͕RAILS WAYͳͷ͔ʁ ▸ ύʔγϟϧͷ໋໊ ▸ app/views/users/index.html.erb ▸
render ‘layouts/header’ ▸ app/views/layouts/_header.html.erb ▸ FAQ ▸ Missing TemplateౖͬͯΒΕΔΜͰ͚͢Ͳ… ▸ ͳΜͰΞϯμʔείΞ͕ඞཁͳΜͰ͔͢ʁ
A: THIS IS THE RAILS WAY!! ※ΞΫγϣϯ͔ΒݺΕΔςϯϓϨʔτͱύʔγϟϧΛ۠ผ͢ΔͨΊ
[COFFEE BREAK] RAILSॳ৺ऀ͋Δ͋Δ Ͳ͔͜ΒͲ͜·Ͱ͕RAILS WAYͳͷ͔ʁ ▸ webΞϓϦέʔγϣϯͷجૅͷཧղෆ ▸ <%= form_for(@article)
do |f| %> ▸ <%= f.text_field :title, title: ‘title of article’ %> ▸ <% end %>
[COFFEE BREAK] RAILSॳ৺ऀ͋Δ͋Δ Ͳ͔͜ΒͲ͜·Ͱ͕RAILS WAYͳͷ͔ʁ ▸ RubyͷγϯλοΫε͕Θ͔Βͳ͍ ▸ <% @users.each
do |user| %> ▸ <%= user.name %> ▸ <% end %>
COFFEE BREAK ͜͜·Ͱ☕
RUBY ON RAILSΛߏ͢Δٕज़ RUBY ON RAILSͷ͍ॴ ▸ webΞϓϦέʔγϣϯͷϓϩτλΠ ϓΛૉૣ͘࡞Δ ▸
ϑϩϯτΤϯυ(HTMLʗCSSʗ JavaScript)αʔόʔαΠυ(Ruby) 1ਓͰαΫοͱ࡞Δ https://logmi.jp/6034
࣮ νʔϜ։ൃʹ ͍ͯͳ͍!?
RAILSͰ࣮ફతͳWEBΞϓϦ έʔγϣϯ։ൃ͢Δצॴ ͔͜͜Β͕ຊ
RAILSͰ࣮ફతͳWEBΞϓϦέʔγϣϯ։ൃ͢Δצॴ ABOUT צॴ ▸ αʔόʔαΠυ ▸ ڥߏங ▸ RubyGemsબఆ ▸
MVCҎ֎ͷϨΠϠʔ ▸ ϑϩϯτΤϯυ ▸ Webpacker or notʢRails 5.1~ʣ ▸ SPAཁ݅ʢReact.jsʗVue.jsʗAngularJS etc.ʣ
RAILSͰ࣮ફతͳWEBΞϓϦέʔγϣϯ։ൃ͢Δצॴ SERVER SIDE - ڥߏங ▸ ΦϯϓϨʗAWSʗHeroku ▸ ϛυϧΣΞબఆʗߏཧʢRDBʗKVSʗݕࡧetc.ʣ ▸
։ൃڥʗεςʔδϯάڥʗຊ൪ڥߏங ▸ σϓϩΠʗCI
RAILSͰ࣮ફతͳWEBΞϓϦέʔγϣϯ։ൃ͢Δצॴ SERVER SIDE - RUBYGEMSબఆ ▸ બఆ͕؊ ▸ ؾΛ͚ͭΔϙΠϯτ ▸
ཁ݅ʹԊ͍ͬͯΔ͔ ▸ ྨࣅͷػೳΛ࣋ͭgemͷௐࠪ ▸ ༻࣮͕͋Δ͔ ▸ OSS։ൃίϛϡχςΟ ▸ ϓϩδΣΫτͷRubyʗRailsͷόʔδϣϯͱͷ߹ੑ ▸ Railsػೳ֦ுܥཁҙʢparanoiaͳͲʣ ▸ ։ൃνʔϜͱͷ߹ҙܗ
RAILSͰ࣮ફతͳWEBΞϓϦέʔγϣϯ։ൃ͢Δצॴ SERVER SIDE - MVCҎ֎ͷϨΠϠʔ ▸ appԼͷߏ ▸ decoratorsʗformsʗservicesʗtasksʗvalidators etc.
▸ όονॲཧʢrakeλεΫor notʣ ▸ σʔλॲཧੑೳཁ݅࣍ୈ
RAILSͰ࣮ફతͳWEBΞϓϦέʔγϣϯ։ൃ͢Δצॴ ABOUT צॴ ▸ αʔόʔαΠυ ▸ ڥߏங ▸ RubyGemsબఆ ▸
MVCҎ֎ͷϨΠϠʔ ▸ ϑϩϯτΤϯυ ▸ Webpacker or notʢRails 5.1~ʣ ▸ SPAཁ݅ʢReact.jsʗVue.jsʗAngularJS etc.ʣ
RAILSͰ࣮ફతͳWEBΞϓϦέʔγϣϯ։ൃ͢Δצॴ FRONTEND ▸ bin/rails new myapp --webpack ▸ bin/rails new
myapp --webpack=react ▸ bin/rails new myapp --webpack=vue ▸ bin/rails new myapp —webpack=angular ▸ bin/yarn add [package] ▸ bin/yarn install/update
ΩϞ͍
RAILSͰ࣮ફతͳWEBΞϓϦέʔγϣϯ։ൃ͢Δצॴ FRONTENDͷ՝ ▸ turbolinks ▸ sprockets ▸ webpacker ▸ webpack-dev-server
▸ CoffeeScript ▸ babel
RAILS ϓϩμΫγϣϯίʔυ IESHILͷࣄྫ
None
IESHILͷࣄྫ Πϯϑϥ ▸ Herokuʢ~2018.05ʣ ▸ ্ཱͪ͛࣌ͷεϐʔυ༏ઌ ▸ ๛ͳΞυΦϯ ▸ Heroku
Private Spaces ▸ TokyoϦʔδϣϯͰಈ࡞ ▸ 3ഒҎ্ߴʹʂ ▸ Ұ෦AWS
IESHILͷࣄྫ HEROKU PRIVATE SPACESͬͺΓ͔ͬͨʢ༨ஊʣ ▸ രʂ ▸ αʔόʔฏۉԠ࣌ؒˠ2ഒ ▸ αʔόʔฏۉଓ࣌ؒˠ5ഒ
IESHILͷࣄྫ ʲFYIʳHEROKU MEETUP#21 ▸ 17Y৽ଔͷ͘Μ͕ొஃ༧ఆ
ಉ྅ɿHeroku MeetupͰొஃऀืूͯ͠Δ ಉ྅ɿ͘Μൃදͪ͠Ό͍ͳΑ ͘ΜɿλΠτϧͲ͏͠·͔͢ʁ അɿ10ഒͬͯͬͪΌ͑Αʢஊʣ ͘ΜɿΘ͔Γ·ͨ͠ʂʂ
None
IESHILͷࣄྫ HEROKUͰͷ্ཱͪ͛ͬͺΓ͔ͬͨ ▸ 3໊ʢϚελʗRailsʗػցֶशʣͰ2ϲ݄͘Β͍ɻ
IESHILͷࣄྫ MIDDLEWARE ▸ Heroku Add-ons ▸ ʴSendgridʗʴFastlyʢCommon Runtimeʣ ▸ ElasticsearchʢElastic
Cloudʣ ▸ Tresure Data
IESHILͷࣄྫ ࣮ߦڥ ▸ ։ൃڥ ▸ MacʢϩʔΧϧʣ or CentOSʢOpenStackʣ ▸ PRຖͷಈ࡞֬ೝڥ
▸ Heroku Review Apps ▸ εςʔδϯάڥ ▸ staging.ieshil.com ▸ ຊ൪ڥ ▸ www.ieshil.com
IESHILͷࣄྫ CIʗDEPLOY ▸ CI ▸ GitHub + CircleCIʢtest+lintʣ ▸ Deploy
▸ ChatOps with slack ▸ /h deploy ieshil-front/master to prod
IESHILͷࣄྫ RUBYGEMS ▸ Ϣʔβʔొཁ݅ʢsorceryʗomniauthʣ ▸ ϝʔϧૹ৴ཁ݅ʢsendgrid4rʣ ▸ ը૾ॲཧཁ݅ʢdragonfly-s3_data_storeʗshrineʗimage_processing etc.ʣ ▸
SEOཁ݅ʢgretelʗsitemap_generatorʣ ▸ API࿈ܞʢfaraday etc.ʣ ▸ δϣϒΩϡʔʢrescue etc.ʣ ▸ ։ൃิॿ ▸ Rails֦ுܥʢslim-railsʗseed-fuʗforemanʗconfigʗdotenv-railsʗpry-rails etc.ʣ ▸ ςετؔ࿈ʢrubocopʗrspecʗcapybaraʗselenium-webdriverʗturnipʗfactory_bot_railsʗdatabase_rewinder etc.ʣ ▸ ͦͷଞʢletter_opener_webʗslack-notifierʗrollbarʗbullet etc.ʣ
IESHILͷࣄྫ APPԼͷߏ ▸ Decoratorsʢactive_decoratorʣ ▸ FormsʢActiveModel::Modelʣ ▸ Importers ▸ Search
▸ Services ▸ Tasks ▸ Uploaders ▸ Validators ▸ ValuesʢActiveModel::Modelʣ
▸ app/forms/application.rb IESHILͷࣄྫ APP/FORMS
▸ ܧঝͯ͠༻ IESHILͷࣄྫ APP/FORMS
▸ ܧঝͯ͠༻ IESHILͷࣄྫ APP/FORMS
▸ ίϯτϩʔϥʔͰͷ༻ IESHILͷࣄྫ APP/FORMS
IESHILͷࣄྫ όονॲཧ ▸ bin/rails[rake] -vT ▸ IESHILͰݐϚελʗՁ֨ࠪఆͳͲʹTresure Data༻ ▸ digdagʗembulk
IESHILͷࣄྫ FRONTEND ▸ React.jsʗTypeScriptΛ༻ ▸ jQueryͷݹ͍ίʔυϕʔεΛஔ ▸ SEOཁ݅ΑΓඇSPA ▸ SSRπϥϛ͕ଟ͍ͷͰҙ
https://www.slideshare.net/yutasuzuki589/vs-rails-js
IESHILͷࣄྫ ։ൃϓϩηε ▸ JIRAʗConfluence ▸ ϢʔβʔετʔϦʔઃܭʗݟੵ ▸ ετʔϦʔϙΠϯτϕʔεͰͷݟੵ
IESHILͷࣄྫ σʔλΤϯδχΞϦϯά ▸ IESHILͰ༷ʑͳϏοάσʔλΛऔΓѻ͏ ▸ Ϛϯγϣϯ ▸ औҾࣄྫ ▸ ॅڥ
etc.
IESHILͷࣄྫ σʔλΤϯδχΞϦϯάͷਏΈ ▸ ॲཧ࣌ؒ ▸ ໊دͤॲཧ ▸ ҟৗݕग़ ▸ ࢼߦࡨޡ
▸ લॲཧ ▸ ӡ༻Λߟྀͨ͠Έͮ͘Γ ▸ ϏδωευϝΠϯࣝ ▸ ౷ܭʗػցֶशʗࣗવݴޠॲཧͳͲͷલఏࣝ
IESHILͷࣄྫ ॅڥσʔλ ▸ Ұࡾݝͷϝογϡίʔυ
IESHILͷࣄྫ ॅڥσʔλऔΓࠐΈॲཧ ▸ ݩσʔλऔΓࠐΈ
IESHILͷࣄྫ ॅڥσʔλऔΓࠐΈॲཧ ▸ TresureDataͷऔΓࠐΈ
IESHILͷࣄྫ ॅڥσʔλऔΓࠐΈॲཧ ▸ TresureData→PostgreSQLͷऔΓࠐΈ
IESHILͷࣄྫ ॅڥσʔλऔΓࠐΈॲཧ ▸ ޙॲཧ
IESHILͷࣄྫ DIGDAG ▸ ϫʔΫϑϩʔΤϯδϯ
IESHILͷࣄྫ EMBULK ▸ όϧΫσʔλϩʔμʔ
IESHILͷࣄྫ ʲFYIʳՁ֨ࠪఆ ▸ ށຖʹՁ֨ࠪఆ
IESHILͷࣄྫ ʲFYIʳՁ֨ࠪఆ ▸ Hivemall + Python
IESHILͷࣄྫ ʲFYIʳՁ֨ࠪఆ ▸ ϔυχοΫ๏
IESHILͷࣄྫ ϒϨʔΫεϧʔϙΠϯτ·ͱΊ ▸ ཁ͔݅ΒRails։ൃج൫Λ͑Δ ▸ νʔϜ։ൃΛલఏͱͯ͠पลྖҬΛඋ͢Δ ▸ νʔϜͰ߹ҙΛܗ͢Δ ▸ RubyGemsબఆ
▸ appԼͷߏ ▸ ϑϩϯτΤϯυ ▸ Ϗοάσʔλʗػցֶशͱͷ͖߹͍ํ ▸ ɾϞϊϦγοΫʢMonolithicʗ༁ɿҰຕ൘ͷʣ ▸ Private gem ▸ ϚΠΫϩαʔϏεԽʢస৬ձٞʣ
WEBΞϓϦ։ൃͷ࠷దԽ ߟ͑Δ͜ͱ͍ͬͺ͍ RAILSΞϓϦ։ൃͷצॴ…
IESHILͷࣄྫ ʲFYIʳΠϯλʔϯืूத@౦ژ ▸ ᶃձһొͳͲKPIվળࢪࡦͷ࣮ࢪʢ2िؒఆʣ ▸ ᶄ֤छSEOࢪࡦͷ࣮ࢪʢ1ϲ݄ఆʣ ▸ αʔόʔαΠυʗϑϩϯτΤϯυΤϯδχΞͱͯ͠ɺσΟϨΫλʔΤϯδχΞɺσβΠφͱ ڠۀͯ͠վળࢪࡦʹ͍ͭͯৄࡉΛ٧Ίɺ։ൃʙϦϦʔε͢ΔɻඞཁʹԠͯ͡ϦϦʔεޙͷσʔ λੳʗධՁͳͲߦ͏ɻ
▸ ༻ٕज़ɿHeroku, AWS, Rails, React, TypeScript, PostgreSQL, TresureDataͳͲɻ ▸ ᶅσʔλϑϩʔͷઃܭɾඋ(2िؒ~1ϲ݄ఆɺͦͷޙԠ૬ஊ) ▸ ϫʔΫϑϩʔΤϯδϯʹΑΔλεΫઃܭ/උΛߦ͍ɺଐਓԽ͍ͯ͠ΔλεΫͷղফޮԽ Λߦ͏ɻ ▸ ༻ٕज़: Digdag, Embulk, PostgreSQL, TreasureDataͳͲɻ
Q&A