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
Blogを作った話 -Zli x DeNA-
Search
uzimaru0000
January 22, 2020
Programming
1
180
Blogを作った話 -Zli x DeNA-
uzimaru0000
January 22, 2020
Tweet
Share
More Decks by uzimaru0000
See All by uzimaru0000
OGPを使いたい
uzimaru0000
0
160
git入門
uzimaru0000
1
320
Webフロントエンド入門
uzimaru0000
1
430
WebフロントエンジニアはOSの夢を見る
uzimaru0000
0
350
BrainFuckをつくった
uzimaru0000
0
460
Elmで作るCLI
uzimaru0000
0
130
Compression Vue App
uzimaru0000
0
120
好きなライブラリ_OSS
uzimaru0000
0
220
Other Decks in Programming
See All in Programming
LLM Supervised Fine-tuningの理論と実践
datanalyticslabo
4
1.1k
[JAWS-UG横浜 #76] イケてるアップデートを宇宙いち早く紹介するよ!
maroon1st
0
460
SymfonyCon Vienna 2025: Twig, still relevant in 2025?
fabpot
3
1.2k
プロダクトの品質に コミットする / Commit to Product Quality
pekepek
2
770
Beyond ORM
77web
5
520
PHPで学ぶプログラミングの教訓 / Lessons in Programming Learned through PHP
nrslib
2
170
From Translations to Multi Dimension Entities
alexanderschranz
2
130
Scalaから始めるOpenFeature入門 / Scalaわいわい勉強会 #4
arthur1
1
310
良いユニットテストを書こう
mototakatsu
5
2k
Асинхронность неизбежна: как мы проектировали сервис уведомлений
lamodatech
0
730
競技プログラミングへのお誘い@阪大BOOSTセミナー
kotamanegi
0
360
ソフトウェアの振る舞いに着目し 複雑な要件の開発に立ち向かう
rickyban
0
890
Featured
See All Featured
Optimizing for Happiness
mojombo
376
70k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
510
Why Our Code Smells
bkeepers
PRO
335
57k
Visualization
eitanlees
146
15k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
45
2.2k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
44
9.3k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
127
18k
The Cult of Friendly URLs
andyhume
78
6.1k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
BBQ
matthewcrist
85
9.4k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.9k
Transcript
Blogを作った話 うじまる (大庭 周士)
- 名前 - 大庭 周士 - 好きな物 - フロントエンド -
TS - Elm - SNS - uzimaru0000 自己紹介
突然ですが・・・
Blogを作りました
なんで作ったのか - 冬休み中に何か作りたかった - 自分のドメインのブログが欲しかった そうだブログを作ろう
構成 - フロントエンド - React + TypeScript - バックエンド -
Node.js + TypeScript - フレームワーク : Micro - データベース : FaunaDB - ホスティング先 - now.sh
Microって? - https://github.com/zeit/micro - ZEIT社が作ったサーバサイドフレームワーク - Simpleに書ける - (個人的に)使いやすい
FaunaDBって? - ACID特性を持ちつつスケーラビリティも備えた分散データ ベース - 標準でGraphQLに対応してる - ドキュメント指向のデータベース
now.shって? - https://now.sh - $ now でデプロイできる - HPに “World-Class
Static Hosting” とあるがServerもデプロ イできる - 独自のドメインも設定できる
なんでこの構成なの? - AWS, GCPよくわからない、now.shしか使えない - now.shにはDBサービスが無いので外部のDBサービスを使 わないといけない - TwitterのプロモーションでFaunaDBが出てきてて良さげだっ た
ディレクトリ構成 - now.json ← now.shの設定 - package.json - main/ ←
クライアントサイドのソースコード - public/ ← faviconとかrobots.txtとかの静的ファイル - api/ ← APIサーバーのソースコード - cli/ ← CLI(後述) のソースコード - common/ ← 型定義とか
now.json - どうルーティングするかなどを書いておく
API Client Static
API Client Static Client??
ひよこだってSSRしたい
SSRって? SSレア?
SSRって? SSレア ServerSideRendering サーバサイドでレンダリングして結果(HTML)を返却する Next.jsとかNuxt.jsを使うと楽に実装できる
CSR (クライアントサイドレンダリング) 鯖 HTML JS HTML, JSをクライアントに渡す
CSR (クライアントサイドレンダリング) 鯖 JS 動的にDOMを構成
CSR (クライアントサイドレンダリング) 鯖 JS データを取得
SSR (サーバサイドレンダリング) 鯖 HTML JS HTML, JSをクライアントに渡す
SSR (サーバサイドレンダリング) 鯖 HTML JS
どうしてサーバで描画できるの? - ブラウザでHTMLを表示しているのはDOM <h1>Title</h1> <img src=”...”>
どうしてサーバで描画できるの? - Reactさんが操作しているのは仮想DOM <h1>Title</h1> <img src=”...”>
どうしてサーバで描画できるの? - 仮想DOMをHTML文字列にすればOK
なんでSSRするの? - SEO対策 - クローラーがJSを解釈しないから - 初期描画を早くする - サーバでHTMLを生成しているから早い -
OGPを設定したい
なんでSSRするの? SEO対策 & 初期描画を早くする
ひよこはnow.shを推したい
なんで推したいのか - 使いやすい - 開発しやすい - 無料!
使いやすい - now.json の設定がそんなに複雑じゃない - 基本的に `$ now` を打てばデプロイしてくれる -
デプロイごとに一意なURLを発行してくれる - ドメインのaliasも `$ now alias` でできる
開発しやすい - `$ now dev` というサブコマンド - 実際の環境と同じようにサーバを立ててくれる - ファイルを更新したら再起動してくれる
- 環境変数を.envから勝手に読み取ってくれる File Watch
開発しやすい 今回の環境 Watch Watch Build Edit Parcel
開発しやすい 何が良かったか - サーバを複数立てなくていい - 今まではAPIとクライアントのサーバを別々で - URLが相対Pathで指定できる - DevとProdでPathを変えなくていい
ひよこはCLIで投稿したい
ディレクトリ構成 - now.json ← now.shの設定 - package.json - main/ ←
クライアントサイドのソースコード - public/ ← faviconとかrobots.txtとかの静的ファイル - api/ ← APIサーバーのソースコード - cli/ ← CLI(後述) のソースコード
なんでCLI - 長文書いてるとブラウザのエディタではUXが良くない - 結局ブラウザで書くよりローカルで書いたほうがいい - 別で管理画面を作るのが面倒 & そこまでいらない -
CLIがすき
使ったpackage - https://github.com/tj/commander.js/ - CLIのフレームワーク的なやつ - https://github.com/terkelg/prompts - 入力をいい感じにやってくれるやつ -
password入力 - セレクト - etc...
commander.js 自分なりにちょっとアレンジ こんな感じの 型定義を作成
commander.js - name - サブコマンドの名前 - args - 引数 -
`<>` で囲むと必須 - `[]` で囲むと任意 - description - コマンドの説明 - action - コマンドの内容
commander.js
prompts - Promiseで入力値を受け 取れる - 複数連続して入力を受け 付けれる - 入力値にメッセージがつ けれる
DEMO
まとめ - now.sh とてもいい - 開発モードもあるので開発がしやすい - Micro とてもいい -
ちょっとしたサーバならこれで十分 - Parcel とてもいい - webpack.config.js 書きたくないじゃん - SSR の勉強になった - フレームワークなしでSSRしたので勉強になった - prompts とてもいい - 簡単にインタラクティブな入力処理を書ける
Q&A
ありがとうございました