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
Reproのビジネスサイドを支えるJS
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
boiyama
October 25, 2019
Programming
190
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Reproのビジネスサイドを支えるJS
We Are JavaScripters! @37th
https://wajs.connpass.com/event/150356/
の発表資料
boiyama
October 25, 2019
More Decks by boiyama
See All by boiyama
バックオフィスに行ったソフトウェアエンジニアの業務効率化事例
boiyama
1
290
2018年、IE6対応サイトを作る
boiyama
4
1k
ヤバいESLint/TSLintルール作っちゃったかもしれない
boiyama
0
1.5k
チームをCQRS
boiyama
1
1.7k
フロントエンドのサーバーレス SSR編
boiyama
0
720
Serverless for Front-end Server-Side Rendering
boiyama
1
140
Learning Elm in JS
boiyama
1
570
JSでElmを学ぶ
boiyama
0
120
フロントエンドのサーバーレス SPA編
boiyama
1
1.1k
Other Decks in Programming
See All in Programming
ITヒヤリハットを整理してみた ~ライフサイクルと原因から考える再発防止策~
koukimiura
1
140
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
4
1.6k
関東Kaggler会_NVIDIA_Nemotron_コンペ_振り返り
rick_ds
0
490
『コードを書く以外の』エンジニアリング〜課金基盤移行プロジェクト推進のためのTips4選
yuriko1211
0
590
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
310
数百円から始めるRuby電子工作
tarosay
0
140
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
210
Laravel Boostに学ぶ、AIにPHPを書かせる技術 〜OSSの実装から蒸留するエージェント制御の王道〜
kentaroutakeda
3
670
What's New in Android 2026
veronikapj
0
250
仕様駆動開発の消費期限
watany
17
7.4k
AI時代、エンジニアはどう育つのか -未経験エンジニアの成長を間近で見て考えたこと-
thasu0123
0
220
作るコストが小さくなった時代 幸せに働くために改めて考えたいこと 〜エンジニアとして価値を出し続けるために注視している二分野〜
yuppeeng
0
190
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
210
Music & Morning Musume
bryan
47
7.3k
How to build a perfect <img>
jonoalderson
1
5.9k
Six Lessons from altMBA
skipperchong
29
4.4k
Tell your own story through comics
letsgokoyo
1
1k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
270
Between Models and Reality
mayunak
4
390
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
73
41k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.2k
Transcript
Reproのビジネスサイドを支えるJS Hilo Yamamoto 2019-10-25 We Are JavaScripters! @37th
Hilo Yamamoto (@boiyama) Software Engineer, BizOps div., Repro inc. JS
Background: Yoshimoto → jQuery → Backbone → React → GAS プロフィール
フロントエンドエンジニアから コーポレートエンジニアになりました でも、JSやってます
AWS IoT ボタンと Amazon Connect でトイレが詰まったら管理事務 所に自動で電話する https://qiita.com/boiyama/items/cb0594defa3b554d8086 Lambda /
Node.js を間で使用 トイレを支えるJS
• ビジネスプロセスの理解と整理 • 運用効率化・指標可視化のためのシステム構築 簡単に言うとじゃんじゃん売れる基盤作り 業務ハックと呼ばれてたりする領域 BizOpsチームのエンジニアがやっていること
• 実装難易度でいうと低いものが多い • 早く実現すればするほど事業インパクトがある プロダクト開発とは技術選定の観点が変わってくる 業務ハックのポイント
GASこと Google Apps Script は、 JSで G Suite を簡単に操作できるサービス で、そんな業務ハック界で大人気「GAS」
スプシが大体の業務を運用できる汎用性の高い CRUD UI 付 DaaS って感じなので、 スプシにGAS載っけてビジネスロジックだけ書いてアプリケーションを 作る、 というのがてっとり早くて、定番の開発手法となっている
例えば、CS向けのツールを作る場合
• Salesforceに営業活動データがあって、Auroraにツー ル利用データがある • 顧客毎のツール利用状況の一覧 • 利用状況から対応の必要な顧客を抽出して対応管理 • 非機能要件無し •
デザイン指定無し 要件
今こんな作り データはRedashに持ってきて結合させる ビジネスロジックだけGASで実装して、 一覧機能はスプシ、 対応管理機能はTrelloに任せる
Redash
Google Sheets
Trello
GAS Knowledge (あまりないけど・・)
• tsconfig の module を es2015 にする • gas-webpack-plugin を使う
• @types/google-apps-script を入れる • GASライブラリの型付け自分でやらないといけないので 極力使っていない TypeScript で書く
// Redash の query result の CSV を取得 const values
= Utilities.parseCsv(UrlFetchApp.fetch([RedashクエリAPIの CSV]).getContentText("UTF-8")); // CSVをパースした配列構造だとスプシにそのまま貼り付けられる SpreadsheetApp.getActiveSpreadsheet() .getSheets() .filter(sheet => sheet.getSheetId() === [シートID])[0] .getRange(1, 1, values.length, values[0].length) .setValues(values); Redashからスプシへのデータ出力は超簡単
// 指定シートの値を全取得 const values = SpreadsheetApp.getActiveSpreadsheet() .getSheets() .filter(sheet => sheet.getSheetId()
=== [シートID])[0] .getDataRange() .getValues(); // 1行目にキー、2行目以降に値が入ってる使い方の場合 const items = values .slice(1) .map( value => (value.reduce((previousValue, currentValue, currentIndex) => ({ ...previousValue, [values[0][currentIndex]]: currentValue }), {}) as unknown) as Item ); シートのデータはキーと値でマッピングしてる
• もう一個スプシ作るだけ • claspを使ってデプロイしわけている • clasp setting scriptId [スクリプトID] &&
clasp push テスト環境は作りやすい
こんなもんかな・・
• 使う技術が変わり、JS実装量が減っちゃった(WeJS登壇させてもら えなくなっちゃうかな・・) • 今日の話は(開発)要件が決まった後の話で、要件決まる前の仕事 がプロダクト開発エンジニアより多い • 業務要件があって、運用設計調整して、開発要件決まる • 自社のビジネスのことがわかって面白い
コーポレートエンジニアになってみて
We are hiring! DM開放中! https://twitter.com/boiyamamoto