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
新規サービスの技術選定と設計
Search
danny
November 19, 2018
Programming
18k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
新規サービスの技術選定と設計
danny
November 19, 2018
More Decks by danny
See All by danny
Datapiaのフロントエンドについて
f96q
0
540
Vue.jsとRailsで作るWebアプリケーション
f96q
0
840
開発環境でDocker使ってみた
f96q
1
2.4k
2013年を振り返って
f96q
0
780
Git勉強会@KRAY
f96q
1
2.1k
等強Ruby会議10に参加しての感想
f96q
2
970
Inside Tripclip
f96q
2
1.6k
Other Decks in Programming
See All in Programming
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
4
450
Building a Meta Ray-Ban display app
akkeylab
0
160
自動化したのに回らないテスト運用の壁ーAI時代の品質責任と生産性
mfunaki
1
140
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
4.6k
仕様駆動開発へのトライを機に チームに適合する手法を模索し続けている話
freee
PRO
0
550
Claude CodeとAgentCore Gatewayを繋ぐ際の認証認可 / Authentication and authorization when connecting Claude Code with AgentCore Gateway
har1101
2
290
数百円から始めるRuby電子工作
tarosay
0
160
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
230
Laravel Boostに学ぶ、AIにPHPを書かせる技術 〜OSSの実装から蒸留するエージェント制御の王道〜
kentaroutakeda
3
710
引き算の組織 ― アウトカムとAIに全振りするために辞めたこと ― / Organization by Subtraction
hirokiyamamoto14
PRO
0
150
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
3
800
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
320
Featured
See All Featured
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.2k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
The Curse of the Amulet
leimatthew05
2
14k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
2
3.8k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.5k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.2k
Technical Leadership for Architectural Decision Making
baasie
3
490
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
490
Why Our Code Smells
bkeepers
PRO
340
58k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
340
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
250
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
170
Transcript
新規サービスの技術選定と設計 DBD DSE 宮城 史明
2 概要 • GraphQL • Railsアプリケーションのテストコードの書き方 • Heroku Review Apps
• React • TypeScript • styled components • Storybook
3 なんでGraphQLなのか • REST APIの問題点 ◦ APIのレスポンスで返したい値を制御するのがやりずらい ◦ 特定の画面を表示するのに必要な値を返したい場合にAPIを増やす必要が出る
4 今の時点で次世代のAPIになる可能性があるのもの • GraphQL ◦ Query、Mutation、Subscriptionを定義 ◦ APIエンドポイントは1つ • gRPC
◦ ProtoclBuffersを定義 ◦ Webアプリケーションの場合はREST API Serverを置いて、受けたものを元に gRPCを呼び出す ◦ 最近はgRPC-Webがリリースされて、直接呼び出しできるようになった https://www.publickey1.jp/blog/18/grpc-webwebgrpc.html
5 なんでGraphQLなのか • 新規サービスの開発なので、既存のシステムを考慮しなくて済んだ • gRPCだとProtocal Buffersを使えるシステム同時を繋げるのは良いが そうじゃないと工夫が必要になる • 画面のUIだったり表示項目などの変更があるので、柔軟に取得したい値
を取れるようにしたかった ◦ バックエンド側の改修が不要か最小限で済む ◦ 開発スピードと生産性の向上
6 GraphQLクエリ例
7 GraphQLクエリ例
8 GraphQLクエリ例
9 REST APIと考え方が違う点 • エラーでもステータスコードが200 ◦ エラーはレスポンスのJSONの中に入れる • N +
1が簡単に発生する ◦ 解決方法がRESTの時は使う関連テーブルをまとめてJOINして検索して回避でき るが、GraphQLの場合どの値を取得するかをクエリーで書くのでなんのデーブル をつかうかどうか実行時に予想できない ◦ Rubyの場合は、まとめて最後に遅延評価することで解決するgraphql-batchと いうgemがある https://github.com/Shopify/graphql-batch • APIのエンドポイントが全部同じなので、NewRelicなどで遅いAPIをAPI のパスで判別できなくなる
10 Railsアプリケーションのテストの書き方 • ランダムな値を入れる • 関連テーブルのデーターはそのテストに必要がある場合のみ生成する https://github.com/willnet/rspec-style-guide
11 テストコードの書き方ダメな例
12 テストコードの書き方良い例
13 テストコードの書き方ダメな例
14 テストコードの書き方良い例
15 Heroku Review Apps • Herokuの機能 • GithubでPull Requestを作成すると、そのPull Requestの内容で新規
にサーバーが自動的に構築されて立ち上がる • データーベースのインスタンスなども完全にPull Request毎に別に作成 される • 開発初期にAWS環境にサーバーを構築する余裕がない場合にも便利 https://devcenter.heroku.com/articles/github-integration-review-apps
16 なんでTypeScriptなのか • JavaScript(動的型付けの言語)の場合どんな型でも入ってきてしまう ◦ 想定してない値が入ってきてしまって不具合が起こることがよくある ◦ そのためテストコードをしっかり書く必要が出る • ES2015のスーパセット
◦ 既存のJavaScriptの機能 + 型システムが使える • コンパイラに統合されている ◦ Flowは別になってる
17 TypeScript
18 TSLint, pretter
19 TypeScript使う上で気をつけたほうが良い点 • TypeScriptの独自拡張はできるだけ使わないようにする ◦ Enumなど ◦ 将来的にECMAScript側に型機能が入った場合に移行するのが大変になるので
20 なんでReactなのか • Vue.jsにしなかった理由 ◦ 型の対応が弱い ◦ 一定以上の規模の複雑なSPAになると破綻する可能性が高そう ◦ 書き方がReactに比べ自由に書けるので、人が増えた場合に一貫性が保ちずら
い
21 最近のReact • Reactのコア機能にReact Hooksが提案されたことによって、 Recomposeが将来的にメンテされなくなる ◦ https://github.com/acdlite/recompose#a-note-from-the-author-acdlite-o ct-25-2018 •
移行するのが大変になるのでRecomposeはあまり使わないほうが良い
22 CSSの問題点 • グローバルスコープなので、定義したクラスがよく名前がぶつかる
23 styled components • styled components ◦ ReactのコンポーネントのタグにCSSを定義して、ほかのところに当たらないCSS クラス名を自動で降ってhtmlにCSSを埋め込む •
styled system ◦ 色とか右寄せとかちょっと調整したい場合に ◦ https://jxnblk.com/styled-system/
24 styled components
25 styled system
26 Storybook • ReactのコンポーネントのUIカタログを表示して、コンポーネントのデザイ ンが確認したりできる • 本体に組み込まなくても、デザインの調整ができるようになるのでデザイ ナーとやりとりがしやすくなる