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
Amplify + Next.js + TypeScript のアプリをいい感じにしたかった
Search
虎の穴ラボ株式会社
September 09, 2022
Programming
1
970
Amplify + Next.js + TypeScript のアプリをいい感じにしたかった
2022/09/08 フロントエンドLT会 - vol.8
「Amplify + Next.js + TypeScript のアプリをいい感じにしたかった」
登壇資料です。
虎の穴ラボ株式会社
September 09, 2022
Tweet
Share
More Decks by 虎の穴ラボ株式会社
See All by 虎の穴ラボ株式会社
Tailwind CSSとAtomic Designで実現する効率的な Web 開発の事例
toranoana
1
520
Denoについて、同人誌記事を出しました+update
toranoana
0
170
【虎の穴ラボ Tech Talk #2】プロンプトエンジニアリング
toranoana
0
110
20241121_[TechTalk#2]虎の穴ラボでのLLMについて取り組み紹介
toranoana
0
99
社内チャットへRAG導入した話(Tech Talk #2)
toranoana
0
170
Deno Deploy で Web Cache API を 使えるようになったので試した知見
toranoana
1
550
【虎の穴ラボ Tech Talk】虎の穴ラボTech Talk説明資料
toranoana
0
400
虎の穴ラボ Tech Talk_CDKでFargate環境構築
toranoana
1
420
虎の穴ラボスキルアップ支援制度の利用例
toranoana
0
7.6k
Other Decks in Programming
See All in Programming
より安全で効率的な Go コードへ: Protocol Buffers Opaque API の導入
shwatanap
2
780
AI Agents: How Do They Work and How to Build Them @ Shift 2025
slobodan
0
100
AIでLINEスタンプを作ってみた
eycjur
1
230
アルテニア コンサル/ITエンジニア向け 採用ピッチ資料
altenir
0
110
基礎から学ぶ大画面対応(Learning Large-Screen Support from the Ground Up)
tomoya0x00
0
4.3k
Android端末で実現するオンデバイスLLM 2025
masayukisuda
1
170
Tool Catalog Agent for Bedrock AgentCore Gateway
licux
7
2.5k
testingを眺める
matumoto
1
140
Android 16 × Jetpack Composeで縦書きテキストエディタを作ろう / Vertical Text Editor with Compose on Android 16
cc4966
2
270
How Android Uses Data Structures Behind The Scenes
l2hyunwoo
0
480
プロパティベーステストによるUIテスト: LLMによるプロパティ定義生成でエッジケースを捉える
tetta_pdnt
0
4.3k
JSONataを使ってみよう Step Functionsが楽しくなる実践テクニック #devio2025
dafujii
1
640
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
224
9.9k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.6k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
31
2.2k
Writing Fast Ruby
sferik
628
62k
Making Projects Easy
brettharned
117
6.4k
The Power of CSS Pseudo Elements
geoffreycrofte
77
6k
A better future with KSS
kneath
239
17k
The World Runs on Bad Software
bkeepers
PRO
70
11k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
It's Worth the Effort
3n
187
28k
GraphQLの誤解/rethinking-graphql
sonatard
72
11k
Transcript
Copyright (C) 2022 Toranoana Inc. All Rights Reserved. Amplify +
Next.js + TypeScript のアプリを いい感じにしたかった 2022/09/08 フロントエンドLT会 - vol.8 #frontendlt 虎の穴ラボ 西志村友基 1
Copyright (C) 2022 Toranoana Inc. All Rights Reserved. 自己紹介 西志村 友基
• 所属:虎の穴ラボ株式会社 • 担当:Fantiaなど • 入社理由: ◦ BtoCサービスに関わりたい ◦ 一生に一度はオタク業界に関わりたい • 趣味:アニメ鑑賞、ゲーム、競馬 2
Copyright (C) 2022 Toranoana Inc. All Rights Reserved. やりたいこと •
Amplify チュートリアルをやってみよう • ちょっとWebサイトっぽくする • まとめ 3
Copyright (C) 2022 Toranoana Inc. All Rights Reserved. やりたいこと •
Amplify チュートリアルをやってみよう • ちょっとWebサイトっぽくする • まとめ 4
Copyright (C) 2022 Toranoana Inc. All Rights Reserved. みなさん、Amplifyつかってますか 5
Copyright (C) 2022 Toranoana Inc. All Rights Reserved. AWS Amplifyとは
1. ウェブアプリやモバイルアプリを素早く構築できるツール 2. GraphQL APIを自動生成し基本的なデータ操作が可能 3. AWSのベストプラクティスに沿ったサーバーレスアプリケーションが構築可能 4. 対話形式で各種設定を行うことができる 5. 数クリックでアプリを公開できる 6. Amplify Studioによる容易なコンテンツ管理 6
Copyright (C) 2022 Toranoana Inc. All Rights Reserved. Amplifyは公式ドキュメントが充実 Amplifyは詳しい公式ドキュメントがあるので
Amplifyの勉強は基本的に公式ドキュメント読めばOK https://docs.amplify.aws/ 7
Copyright (C) 2022 Toranoana Inc. All Rights Reserved. 充実したドキュメントですが… ドキュメントにはTypeScriptでの実装例がありません。
TypeScriptで実装したい場合は実装者が置き換える必要があります。 TypeScriptで実装した例はとらラボのブログ(後述)にて紹介していますので ぜひ御覧ください。 8
Copyright (C) 2022 Toranoana Inc. All Rights Reserved. まずはチュートリアル Amplifyのドキュメントには開発のチュートリアルがあります。
VueやReactなど様々な選択肢がありますが、 今回はNext.jsを選びました。 9
Copyright (C) 2022 Toranoana Inc. All Rights Reserved. チュートリアルで学べること チュートリアルでは以下のようなことを学べます。
• GraphQL APIの実装方法 • Next.jsでSSRとSSGを実装する方法 チュートリアルを通して、 簡単なメッセージを投稿するアプリを作れます。 10
Copyright (C) 2022 Toranoana Inc. All Rights Reserved. SSRとSSGについて SSR:
Server Side Rendering • サーバーサイドレンダリング • ページ遷移の度にサーバー側でHTMLを生成してレスポンスを返す SSG(単にSGとも): Static Site Generation • ページを初回にビルドしたときだけHTMLを生成し、各ロード時に再利用される • 更新が入らないページに向いている 11
Copyright (C) 2022 Toranoana Inc. All Rights Reserved. SSR・SSGのメリットデメリット 12
SSR メリット • ユーザーの通信環境に左右されない • 更新頻度の高いアプリにも対応可能 デメリット • サーバー側の負荷がある SSG メリット • パフォーマンスが向上 • Next.jsを開発しているVercelが推奨 デメリット • ページが更新されてもページに反映され ない • 多数ページがあるとビルドに時間がかか る 適したサービス • 動画投稿サイト • SNS • 大規模サイト 適したサービス • 更新頻度の少ないブログ • コーポレートサイト • 中規模サイト
Copyright (C) 2022 Toranoana Inc. All Rights Reserved. Next.js +
TypeScriptで実装する ソースはブログに記載していますので参考にしてください。 (だいぶ前に書いた内容ですが、基本は同じはずです) Next.js + TypeScript + AWS Amplify でアプリケーション開発 https://toranoana-lab.hatenablog.com/entry/2021/11/08/170216 13
Copyright (C) 2022 Toranoana Inc. All Rights Reserved. やりたいこと •
Amplify チュートリアルをやってみよう • ちょっとWebサイトっぽくする • まとめ 14
Copyright (C) 2022 Toranoana Inc. All Rights Reserved. ちょっとWebサイトっぽくする チュートリアルはSSRのページとSGのページが1つずつしかない単純なものなので
以下の内容を追加して、ちょっとWebサイトっぽくします • レイアウトを追加する • ユーザー認証を追加する • 認証済みのときだけログアウトボタン表示 15
Copyright (C) 2022 Toranoana Inc. All Rights Reserved. ちょっとWebサイトっぽくする チュートリアルはSSRのページとSGのページが1つずつしかない単純なものなので
以下の内容を追加して、ちょっとWebサイトっぽくします • レイアウトを追加する • ユーザー認証を追加する • 認証済みのときだけログアウトボタン表示 16
Copyright (C) 2022 Toranoana Inc. All Rights Reserved. レイアウト レイアウトコンポーネント:components/layout.tsx を作成します
import Footer from "./footer" import Header from "./header" import { ReactNode } from "react"; interface LayoutProps { children: ReactNode; } const Layout = ({children}: LayoutProps) =>{ return( <> <Header /> <main>{children}</main> <Footer /> </> ) } export default Layout 17
Copyright (C) 2022 Toranoana Inc. All Rights Reserved. レイアウトを適用させる _app.tsxを修正します
function MyApp({ Component, pageProps }) { return ( <Layout> <Component {...pageProps} /> </Layout> ) } export default MyApp 18
Copyright (C) 2022 Toranoana Inc. All Rights Reserved. ちょっとWebサイトっぽくする チュートリアルはSSRのページとSGのページが1つずつしかない単純なものなので
以下の内容を追加して、ちょっとWebサイトっぽくします • レイアウトを追加する • ユーザー認証を追加する • 認証済みのときだけログアウトボタン表示 19
Copyright (C) 2022 Toranoana Inc. All Rights Reserved. 認証を追加する Amplifyを使って認証機能を追加することができます
設定は以下の通り $ amplify add auth 20
Copyright (C) 2022 Toranoana Inc. All Rights Reserved. ログイン認証 最も簡単に認証を実装する方法は
<Authenticator>で囲う方法です。 ログイン認証を入れたい箇所にタグを入れるだけです。 import { Authenticator } from '@aws-amplify/ui-react'; import '@aws-amplify/ui-react/styles.css'; const Home: NextPage = () => { return ( <Authenticator> <...> </Authenticator> ) } 認証済みであれば この中を表示するイメージ 21
Copyright (C) 2022 Toranoana Inc. All Rights Reserved. Authenticatorについて AuthenticatorはAmplify
UIというライブラリの一部です。 Amplify UIはUI開発にAmplifyのシンプルさや拡張性を提供します。 https://ui.docs.amplify.aws/react/connected-components/authenticator 22
Copyright (C) 2022 Toranoana Inc. All Rights Reserved. ちょっとWebサイトっぽくする チュートリアルはSSRのページとSGのページが1つずつしかない単純なものなので
以下の内容を追加して、ちょっとWebサイトっぽくします • レイアウトを追加する • ユーザー認証を追加する • 認証済みのときだけログアウトボタン表示 23
Copyright (C) 2022 Toranoana Inc. All Rights Reserved. ログアウト import
{ useAuthenticator } from "@aws-amplify/ui-react"; import Link from "next/link" import { Auth } from "aws-amplify"; const Nav = () => { const { route } = useAuthenticator((context) => [context.route]); let logOutLink = <></> if (route == "authenticated"){ logOutLink = <li><a onClick={() => Auth.signOut()} href={"javascript: void(0);"} >ログアウト</a></li> } return( <nav> <ul className={styles.list}> … {logOutLink} </ul> </nav> ) } ユーザーが認証済みかかどう か判定できます 24
Copyright (C) 2022 Toranoana Inc. All Rights Reserved. useAuthenticator フック
Authenticator の認証状態の確認、変更、および更新に使用できます。 使用するコンポーネントを <Authenticator.Provider>で囲う必要がある点は注意です。 https://ui.docs.amplify.aws/react/connected-components/authenticator/headless#useauthenticator-hook 25 import { Authenticator } from '@aws-amplify/ui-react'; export default () => ( <Authenticator.Provider> <App /> </Authenticator.Provider> );
Copyright (C) 2022 Toranoana Inc. All Rights Reserved. やりたいこと •
Amplify チュートリアルをやってみよう • ちょっとWebサイトっぽくする • まとめ 26
Copyright (C) 2022 Toranoana Inc. All Rights Reserved. まとめ •
Amplifyにバックエンドはおまかせ ◦ 認証やデータ操作などをサポート • Next.js+TypeScriptでアプリ開発 ◦ SSRやSSGの特性を理解して必要に応じて使い分けましょう • TypeScript… がんばって勉強しましょう。。 27
Copyright (C) 2022 Toranoana Inc. All Rights Reserved. 過去の発表資料 Amplifyについての過去の発表はこちらです
React + Amplifyで アプリ開発 https://www.slideshare.net/toranoana-lab/react-amplify Amplify Studioを使ってみた https://www.slideshare.net/toranoana-lab/amplify-studio 28
Copyright (C) 2022 Toranoana Inc. All Rights Reserved. 関連ブログ Next.js
+ TypeScript + AWS Amplify でアプリケーション開発 https://toranoana-lab.hatenablog.com/entry/2021/11/08/170216 新機能「AWS Amplify Studio」を試してみました https://toranoana-lab.hatenablog.com/entry/2021/12/15/150000 29