Rails + TypeScript + React + Hypernovaで始めるSSRライフ
by
hatappi
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
Rails + TypeScript + React + Hypernovaで始めるSSRライフ Rails Developers Meetup 2018 Day 3 Extreme @hatappi
Slide 2
Slide 2 text
About me • Yusaku Hatanaka (@hatappi) • Speee, Inc • Ruby, Go, TypeScript, etc. • Roppongi.rb organizer • Vimmer (vimと同じ年) • 煎り⼤⾖が好き
Slide 3
Slide 3 text
今⽇話すこと • 作成したシステムの全体像 • どういった技術選定を⾏ったのか • 開発の苦労話 • etc
Slide 4
Slide 4 text
今⽇話さないこと • 何を作ったのかの詳細 • 懇親会で聞いてください
Slide 5
Slide 5 text
プライベートで 開発してますか?
Slide 6
Slide 6 text
• Red Chainer • キュレーションサービス <= 今回話す • Slackで使うアンケートシステム • 家庭内Railsアプリ(ゴミ出しとかエアコンの遠隔操 作) • etc
Slide 7
Slide 7 text
Motivation • 技術的な検証の場がほしかった • 設定上はいけるはず! でも実際に反映したらどうなるのか知りたい! • toCやってみたい • Rubyでキメていたい
Slide 8
Slide 8 text
システム全体像 • Nginx, Rails, Puma on EC2 • コンテンツはS3に保存されて おりCloudFront経由で配信 • fluentdはnginxのログから GoogleBotなどを切り出して Datadogにメトリクスを送っ ている
Slide 9
Slide 9 text
Datadog ダッシュボード
Slide 10
Slide 10 text
システムを 運⽤するにはお⾦が必要
Slide 11
Slide 11 text
EC2 : t2.small $22 RDS : db.t2.small $40 ALB, CloudFront, etc.. $18 $80 約8,800円 ⾒積もり
Slide 12
Slide 12 text
た、⾼い
Slide 13
Slide 13 text
会社からのサーバー費⽀給 システムの運⽤費 0円!!
Slide 14
Slide 14 text
使っている技術 • React • TypeScript • Hypernova
Slide 15
Slide 15 text
No content
Slide 16
Slide 16 text
React • A JavaScript library for building user interfaces • Facebookが2011年にニュー スフィードに導⼊し2015年 にオープンソースとして公開 • JavaScriptの中にHTMLを記 載するJSXを利⽤できる +49
Slide 17
Slide 17 text
なぜReactなのか? • 基本的にはslimで書くが⼀部分だけコンポーネント に置き換えたい • 極⼒コンポーネントをステートレスにする • 数週間後の⾃分が⾒てもわかるΑ͏ʹ • ͬͯΈ͔ͨͬͨ
Slide 18
Slide 18 text
No content
Slide 19
Slide 19 text
TypeScript • Microsoftが開発したオープンソースのプログラミン グ⾔語 • Javascriptが動的型付けなのに対してTypeScriptは静 的型付け • コード補完も効く • TypeScriptͰॻ͔ΕͨίʔυtscΛ༻͍ͯ JavaScriptʹίϯύΠϧ͢Δ
Slide 20
Slide 20 text
なぜTypeScriptなのか? • 型があることで明らかなエラーを防ぐことが出来る • 数週間後の⾃分がこの値は⽂字列?数値?といっ た曖昧さから解放される • やってみたかった
Slide 21
Slide 21 text
Hypernova
Slide 22
Slide 22 text
Hypernova • JavaScriptコンポーネントをSSR(サーバーサイドレ ンダリング)するためのライブラリ • AirbnbがOSSとして公開している • https://github.com/airbnb/hypernova
Slide 23
Slide 23 text
Hypernova • hypernova/server • nodejsで作られたHTTPサーバー • コンポーネント名とpropsを受け取りHTMLを返す • hypernova/react • サーバー、クライアント両⽅で動作するhypernova/server⽤のイ ンターフェースを提供 • hypernova/ruby • hypernovaサーバーと連携するためのgem • Rails⽤にhelperなどを提供する
Slide 24
Slide 24 text
HypernovaとRails
Slide 25
Slide 25 text
なぜHypernovaなのか? • サーバー側でのエラーはブラウザで表⽰される • GoogleBotと仲良く出来る • JavaScriptを解釈してくれるようになったとはいえ100%ではな い! • 例:)GoogleにインデックスされたタイトルがJavaScriptが動作した ものもあれば、そうでないものも • やってみたかった • 以前使ったことはあったが0から⼊れてみたかった
Slide 26
Slide 26 text
開発の苦労話
Slide 27
Slide 27 text
サーバーとクライアントで 描画されるものが違う • 極⼒サーバーとクライアントで差異がないように! • どうしても差異が出てしまう場合は componentDidMount()などで処理を⾏う
Slide 28
Slide 28 text
⾃分が何を考えていたのか忘れる • プライベートに限らず⾃分が何を考えていたのか忘 れてしまう https://kibe.la/ja ·ͩܗʹͳΒͳ͍ΞΠσΞͳͲ ະདྷͷࣗͱͷใڞ༗Kibela https://blog.hatappi.me ٕज़తͳΞτϓοτͳͲܗʹ ͳΔͷϒϩάͰެ։
Slide 29
Slide 29 text
AWSの値段が⾼い問題 • ⽉に$80くらいのはずが$100超え • CloudWatchͷGetMetricsData API͕ݟʹ֮ ͑ͷͳ͍ྉۚ
Slide 30
Slide 30 text
AWSの値段が⾼い問題 • Datadogが使っているサービスのメトリクスも CloudWatch経由でとるようになっていた
Slide 31
Slide 31 text
AWSの値段が⾼い問題 • 安くはなったけど1⽇$2はまだ⾼い。。。
Slide 32
Slide 32 text
デザイン出来ない問題 • デザイン全く出来ない • Bootstrap ?? • jQueryを使うことが前提となってると今回は厳し い • 0からCSSを書き始めるのはもっと厳しい
Slide 33
Slide 33 text
デザイン出来ない問題 • BULMA - https://bulma.io/ • CSS3標準のFlexboxをベースとしたOSSのCSSフ レームワーク • レスポンシブデザインにも対応
Slide 34
Slide 34 text
作業時間の確保 • 平⽇は仕事 • 休⽇は家族と過ごしたり まとまった時間がとれない中 どうやってプライベートでコードを書くか
Slide 35
Slide 35 text
作業時間の確保 “Write Code Every Day - John Resig” https://johnresig.com/blog/write-code-every-day/ • 毎⽇ 1commit、1PRを⽬標にして少しづつでもコー ドを書き続けられるようにする • 無理はしない
Slide 36
Slide 36 text
まとめ • SSRはGoogleとも仲良くできるしHypernovaを使うと現 時点では初期設定以降困ったことは起きていない • プライベートの開発 • 楽しむ • 無理をしない • サーバー費1万円⽀給は最⾼ • 平⽇に⼀⼈だと作業出来ないという⽅は...
Slide 37
Slide 37 text
⼀緒にもくもくしませんか? IUUQTSPQQPOHJSCDPOOQBTTDPNFWFOU