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
breakthrough point of web engineer
Search
Livesense Inc.
PRO
June 23, 2018
Programming
0
120
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.
EM候補者向け転職会議説明資料
livesense
PRO
0
5
コロナで失われたノベルティ作成ノウハウを復活させた話
livesense
PRO
0
73
株式会社リブセンス 会社説明資料(報道関係者様向け)
livesense
PRO
0
350
転職会議でGPT-3を活用した企業口コミ要約機能をリリースした話
livesense
PRO
0
1k
株式会社リブセンス マッハバイト_プレイブック
livesense
PRO
0
400
Tech Award 2021 選出方法
livesense
PRO
0
1k
株式会社リブセンス エンジニアリング組織を支える風土と制度
livesense
PRO
0
520
株式会社リブセンス・マッハバイト 採用候補者様向け資料
livesense
PRO
0
210
株式会社リブセンス・転職会議 採用候補者様向け資料
livesense
PRO
0
2k
Other Decks in Programming
See All in Programming
What We Can Learn From OSS
inouehi
0
400
Zero Waste, Radical Magic, and Italian Graft – Quarkus Efficiency Secrets
hollycummins
0
220
両面どころかインフラもTSでできるよ ~ 全方位TypeScriptによるプロダクト開発 ~
myfinder
9
3.2k
OpenAPIを中心に考えるAPI開発入門 / Introduction to API Development with a Focus on OpenAPI
seike460
PRO
2
110
Blue/Greenデプロイの導入による 運用フローの改善
kudoas
1
350
入門 AWS Amplify Gen2 / Introduction to AWS Amplify Gen2
genkiogasawara
1
310
try!Swift Tokyo 2024 参加報告 LT
akidon0000
1
190
Build with AI 2024 Seoul - 제로부터 시작하는 Flutter with Gemini 생활 - 박제창
itsmedreamwalker
0
200
Hanami and htmx
bkuhlmann
0
190
[SF Ruby, March 2024] Rails on Wasm
palkan
0
370
Ruby Pattern Matching
bkuhlmann
0
920
ログラスを支える設計標準について / loglass-design-standards
urmot
10
2.1k
Featured
See All Featured
Designing on Purpose - Digital PM Summit 2013
jponch
110
6.4k
KATA
mclloyd
14
12k
The Invisible Customer
myddelton
114
12k
Faster Mobile Websites
deanohume
297
30k
Writing Fast Ruby
sferik
620
60k
Into the Great Unknown - MozCon
thekraken
10
980
Done Done
chrislema
178
15k
Being A Developer After 40
akosma
56
580k
Building a Modern Day E-commerce SEO Strategy
aleyda
16
6.3k
Making Projects Easy
brettharned
108
5.5k
Building an army of robots
kneath
300
41k
VelocityConf: Rendering Performance Case Studies
addyosmani
320
23k
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