Slide 1

Slide 1 text

ブログを自作した話 0Yu 隅田川.dev vol.1

Slide 2

Slide 2 text

0yu(おゆ,ぜろゆー) ● 北海道出身 好きな技術 ● Webフロントエンド、Rust 趣味 ● 映画鑑賞・旅行・ゲーム etc ● 最近はハイラルの勇者をしています 自己紹介 っっっz yud0uhu 2

Slide 3

Slide 3 text

● 自作マークダウンパーサーで動く技術ブログを自作した はじめに

Slide 4

Slide 4 text

フロントエンド ● Next.js/Type Script ● Apollo Client ● styled-components + emotion(mantine) 技術仕様

Slide 5

Slide 5 text

バックエンド ● Rust+WebAssembly(マークダウンパーサー) ● Express ● GraphQL Yoga ● Prisma Photos ● Vercel Postgress 技術仕様

Slide 6

Slide 6 text

ホスティング ● Vercel 認証・認可 ● NextAuth 技術仕様

Slide 7

Slide 7 text

Introduction to Apollo Client 特徴 ● GraphQLを使用してローカルデータとリモートデータを管理する JavaScript向けの包括的な状態管理ライブラリ メリット ● クライアント側でデータのキャッシュやクエリの結果の追跡し、デー タフェッチと更新を効率化 ○ クライアント側のデータの変更に応じて自動的に再レンダリング を行ったり、必要なデータのみフェッチを行う Apollo Client

Slide 8

Slide 8 text

Vercel Postgres: Scalable SQL for the web 特徴 ● 2023年5月1日に発表された新機能のStorageサービスの一つ ● Vercelが提供するPostgreSQLベースのサーバレスデータベース メリット ● Vercelのデプロイメントフローと統合されているため、アプリケー ションとデータベースのデプロイが一括管理可能 ● オートスケーリングによりリソースの調整が容易 Vercel Postgres

Slide 9

Slide 9 text

NextAuth.js 特徴 ● Next.jsアプリケーション上で認証・セッション管理を行うためのラ イブラリ ● Google・Twitter・GitHubなど、OAuthを使った認証サービスが利 用可能 ● サーバーレス環境以外に、AWS Lambda、Docker、Herakuなど主要 なホスティングプロバイダ上で動作する NextAuth

Slide 10

Slide 10 text

GraphQLサーバーを開発する際に検討すること ● schema-firstかcode-firstか? schema-first ● スキーマを先に書き、スキーマから言語固有のコードを生成する code-first ● 言語固有のコードを先に書き、コードからスキーマを生成する code-first+TypeScriptなGraphQLライブラリ

Slide 11

Slide 11 text

GraphQL Nexus Nexus ● Apollo Serverに対応する型安全なGraphQLスキーマビルダーライブ ラリ ● スキーマ定義やリゾルバをもとにGraphQLスキーマを生成 ● 拡張性に優れており、カスタムスカラーやディレクティブ、中間オブ ジェクトタイプなどを簡単に追加できる ● Photosに移行する動きがある code-first+TypeScriptなGraphQLライブラリ

Slide 12

Slide 12 text

Prisma plugin for Pothos GraphQL Pothos ● prismaのデータモデリング言語を使用して、DBスキーマとGraphQL スキーマを自動的に生成 ● GiraphQL→視認性・検索性の観点から改名 メリット ● ランタイムのオーバーヘッドがなく軽量で高速 ● Nexusよりも型チェックが俊敏 code-first+TypeScriptなGraphQLライブラリ

Slide 13

Slide 13 text

● prismaObject でオブジェクトを、prismaField でフィールドを定義 する Pothosでスキーマを定義する

Slide 14

Slide 14 text

● Queryを投げて、データが取得できることを確認する 疎通確認

Slide 15

Slide 15 text

● Queryを投げて、データが取得できることを確認する 疎通確認

Slide 16

Slide 16 text

● Mutationを投げて、データが取得できることを確認する 疎通確認

Slide 17

Slide 17 text

● フロントエンドで記事のfeedを取得する

Slide 18

Slide 18 text

● submoduleで紐付けする ● クライアントでWASMを扱えるように、next.config.jsでWebPackの 設定を行う ● クライアントでsubmoduleのpkgをimportして使う 自作マークダウンパーサーの導入

Slide 19

Slide 19 text

● WASMビルド on Vercel ハマりポイント①

Slide 20

Slide 20 text

● Next AuthとVercel Hostingの噛み合わせの悪さ ○ Options | NextAuth.js ハマりポイント②