Rails + TypeScript + React + Hypernovaで始めるSSRライフ
by
hatappi
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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