Slide 1

Slide 1 text

これからはじめる シングルページアプリケーション 五⼗川 洋平 (POPCORN) 2018.07.14 NEM#8 

Slide 2

Slide 2 text

⾃⼰紹介 • 五⼗川 洋平(イソップ)
 - 上越市在住のフリーランスエンジニア
 - ⽷⿂川市出⾝ • 趣味:ヨーヨー、バス釣り • Twitter:@yuhiisk • http://blog.yuhiisk.com

Slide 3

Slide 3 text

アジェンダ • シングルページアプリケーション(SPA)とは何か

Slide 4

Slide 4 text

アジェンダ • シングルページアプリケーション(SPA)とは何か • 事例から⾒るSPA

Slide 5

Slide 5 text

アジェンダ • シングルページアプリケーション(SPA)とは何か • 事例から⾒るSPA • フロントエンド実装の概要

Slide 6

Slide 6 text

シングルページアプリケーション (Single Page Application)

Slide 7

Slide 7 text

⼀度ページを表⽰したら ページ遷移(再読込)をせずに ページの⼀部のみを更新する Webアプリケーションの実装⼿法

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

毎回読み込み直すと時間がかかるから、
 必要な部分だけ更新する。

Slide 13

Slide 13 text

毎回読み込み直すと時間がかかるから、
 必要な部分だけ更新する。 → ページの更新が速く、   ユーザー体験の向上が⾒込める

Slide 14

Slide 14 text

アプリケーション上のデータの扱い
 (保存・取得・変更・削除)


Slide 15

Slide 15 text

アプリケーション上のデータの扱い
 (保存・取得・変更・削除)
 → ブラウザ側からサーバーAPIを経由して⾏う

Slide 16

Slide 16 text

従来のフォーム送信

Slide 17

Slide 17 text

HTMLフォームからデータを送信 従来のフォーム送信

Slide 18

Slide 18 text

サーバーはHTMLを返す 従来のフォーム送信

Slide 19

Slide 19 text

SPAの場合

Slide 20

Slide 20 text

クライアントからAjaxでリクエスト SPAの場合

Slide 21

Slide 21 text

サーバーからはレスポンスとして JSONデータを返す SPAの場合

Slide 22

Slide 22 text

フロントではシームレスなインターフェイスを提供。 
 サーバーではビジネスロジック、API実装に集中。

Slide 23

Slide 23 text

シングルページアプリケーション のメリット・デメリット

Slide 24

Slide 24 text

SPAのメリット

Slide 25

Slide 25 text

SPAのメリット • 操作の応答性が⾼く、ユーザー体験が向上する。  
 


Slide 26

Slide 26 text

SPAのメリット • 操作の応答性が⾼く、ユーザー体験が向上する。 • ページ遷移が⼀瞬でサクサク動く。 
 


Slide 27

Slide 27 text

SPAのメリット • 操作の応答性が⾼く、ユーザー体験が向上する。 • ページ遷移が⼀瞬でサクサク動く。 • ネイティブアプリの代わりになる。
 


Slide 28

Slide 28 text

SPAのメリット • 操作の応答性が⾼く、ユーザー体験が向上する。 • ページ遷移が⼀瞬でサクサク動く。 • ネイティブアプリの代わりになる。
 → ネイティブアプリと同等の機能を提供可能
 (アプリのキャッシュ、オフライン機能、Push通知など)

Slide 29

Slide 29 text

SPAのデメリット      


Slide 30

Slide 30 text

SPAのデメリット • ページにアクセスした際の読み込み時間が⻑い。
        


Slide 31

Slide 31 text

SPAのデメリット • ページにアクセスした際の読み込み時間が⻑い。
 → 遅延読み込みで対応      
  

Slide 32

Slide 32 text

SPAのデメリット • ページにアクセスした際の読み込み時間が⻑い。
 → 遅延読み込みで対応 • 実装コストが掛かる。    
  

Slide 33

Slide 33 text

SPAのデメリット • ページにアクセスした際の読み込み時間が⻑い。
 → 遅延読み込みで対応 • 実装コストが掛かる。 • 実装スキルが求められる。  
  

Slide 34

Slide 34 text

SPAのデメリット • ページにアクセスした際の読み込み時間が⻑い。
 → 遅延読み込みで対応 • 実装コストが掛かる。 • 実装スキルが求められる。 • SEOに弱い。
  

Slide 35

Slide 35 text

SPAのデメリット • ページにアクセスした際の読み込み時間が⻑い。
 → 遅延読み込みで対応 • 実装コストが掛かる。 • 実装スキルが求められる。 • SEOに弱い。
 → サーバーサイドレンダリングで解決

Slide 36

Slide 36 text

シングルページアプリケーション の事例

Slide 37

Slide 37 text

Googleのサービス

Slide 38

Slide 38 text

Gmail

Slide 39

Slide 39 text

Google Drive

Slide 40

Slide 40 text

Google Map

Slide 41

Slide 41 text

チャットサービス

Slide 42

Slide 42 text

Slack

Slide 43

Slide 43 text

Chatwork

Slide 44

Slide 44 text

データ表⽰がメインのサービス

Slide 45

Slide 45 text

SNSサービス

Slide 46

Slide 46 text

仮想通貨取引所

Slide 47

Slide 47 text

SPAが向いているケース

Slide 48

Slide 48 text

SPAが向いているケース • サイト滞在時間が⻑いWebアプリケーション  

Slide 49

Slide 49 text

SPAが向いているケース • サイト滞在時間が⻑いWebアプリケーション • チャット、データ群の表⽰・投稿、管理画⾯など

Slide 50

Slide 50 text

SPAが向いているケース • サイト滞在時間が⻑いWebアプリケーション • チャット、データ群の表⽰・投稿、管理画⾯など • ユーザー⾃⾝が操作するツール系サービス、
 業務アプリケーションなど。

Slide 51

Slide 51 text

SPAが向いていないケース

Slide 52

Slide 52 text

SPAが向いていないケース • 個⼈ブログなどの直帰率の⾼いサイト  
 
 
 


Slide 53

Slide 53 text

SPAが向いていないケース • 個⼈ブログなどの直帰率の⾼いサイト • コーポレートサイト
 
 
 


Slide 54

Slide 54 text

SPAが向いていないケース • 個⼈ブログなどの直帰率の⾼いサイト • コーポレートサイト
 → 情報を載せるだけの構成の場合、
   本当にSPAにする必要があるか? 
 


Slide 55

Slide 55 text

SPAが向いていないケース • 個⼈ブログなどの直帰率の⾼いサイト • コーポレートサイト
 → 情報を載せるだけの構成の場合、
   本当にSPAにする必要があるか? • ゲーム開発
 


Slide 56

Slide 56 text

SPAが向いていないケース • 個⼈ブログなどの直帰率の⾼いサイト • コーポレートサイト
 → 情報を載せるだけの構成の場合、
   本当にSPAにする必要があるか? • ゲーム開発
 → リアルタイム性が求められる⾼速な描画処理が苦⼿。
   ゲーム⽤ライブラリを検討するのが無難。

Slide 57

Slide 57 text

というのを踏まえての採⽤基準

Slide 58

Slide 58 text

SPAの採⽤基準

Slide 59

Slide 59 text

SPAの採⽤基準 • まずはアプリケーションの特徴を理解する。
 
 
 
 
 


Slide 60

Slide 60 text

SPAの採⽤基準 • まずはアプリケーションの特徴を理解する。
 → SPAに向いているか?(メリットはあるか?)
 → ⼯数的に余裕があるか? 
 
 
 


Slide 61

Slide 61 text

SPAの採⽤基準 • まずはアプリケーションの特徴を理解する。
 → SPAに向いているか?(メリットはあるか?)
 → ⼯数的に余裕があるか? • 開発体制が確保できるか。
 
 
 


Slide 62

Slide 62 text

SPAの採⽤基準 • まずはアプリケーションの特徴を理解する。
 → SPAに向いているか?(メリットはあるか?)
 → ⼯数的に余裕があるか? • 開発体制が確保できるか。
 → 開発作業の全てを⼀⼈で対応するのは難しい。
 → フロントヘビーな開発なので、
   実装できるフロントエンジニアを確保できるか。


Slide 63

Slide 63 text

SPAの採⽤基準 • まずはアプリケーションの特徴を理解する。
 → SPAに向いているか?(メリットはあるか?)
 → ⼯数的に余裕があるか? • 開発体制が確保できるか。
 → 開発作業の全てを⼀⼈で対応するのは難しい。
 → フロントヘビーな開発なので、
   実装できるフロントエンジニアを確保できるか。
 → サーバーAPIを実装できる⼈がいるか。

Slide 64

Slide 64 text

シングルページアプリケーション の開発構成

Slide 65

Slide 65 text

全体の構成 フロントエンド開発 サーバー開発

Slide 66

Slide 66 text

全体の構成 フロントエンド開発 サーバー開発

Slide 67

Slide 67 text

フロントエンド開発

Slide 68

Slide 68 text

フロントエンド開発 • 基本的にHTML, CSS, JavaScriptで開発。 


Slide 69

Slide 69 text

フロントエンド開発 • 基本的にHTML, CSS, JavaScriptで開発。 • 昨今のSPA開発では、SPAに特化したJSフレームワークを
 利⽤するのが⼀般的。

Slide 70

Slide 70 text

フロントエンド開発 • 基本的にHTML, CSS, JavaScriptで開発。 • 昨今のSPA開発では、SPAに特化したJSフレームワークを
 利⽤するのが⼀般的。 • 今何かと話題のやつ…!

Slide 71

Slide 71 text

フロントエンド開発

Slide 72

Slide 72 text

フロントエンド開発 • フレームワークは多様に⾒えるけど、共通点が多い。

Slide 73

Slide 73 text

フロントエンド開発 • フレームワークは多様に⾒えるけど、共通点が多い。 • 仕組みについては後ほど。

Slide 74

Slide 74 text

全体の構成 フロントエンド開発 サーバー開発

Slide 75

Slide 75 text

サーバー開発

Slide 76

Slide 76 text

サーバー開発 • WAFを採⽤したサーバー開発が⼀般的。

Slide 77

Slide 77 text

サーバー開発 • WAFを採⽤したサーバー開発が⼀般的。 • Ruby on Rails, Django, Laravel, Expressなど。

Slide 78

Slide 78 text

サーバー開発 • WAFを採⽤したサーバー開発が⼀般的。 • Ruby on Rails, Django, Laravel, Expressなど。 • 最近はクラウドでのサーバーレス構成も⼈気。

Slide 79

Slide 79 text

サーバー開発 正直なところ、APIが⽤意できればなんでもいい。 
 WordPressのREST APIや 公開されているWeb APIでも要件を満たせていればOK。

Slide 80

Slide 80 text

全体の構成 フロントエンド サーバー

Slide 81

Slide 81 text

全体の構成 フロントエンド サーバー 組み合わせは⾃由。

Slide 82

Slide 82 text

実際のプロダクトでの例 • React + Django • React + CakePHP3 • Angular + Firebase + Google Cloud Platform
 (Cloud Storage, Cloud Functions)

Slide 83

Slide 83 text

SPA開発の技術選定 • まずはチームで慣れている・やりやすい⾔語や技術を
 選ぼう。

Slide 84

Slide 84 text

シングルページアプリケーション のフロントエンド開発⼿法

Slide 85

Slide 85 text

フロントエンド開発の第⼀歩は JSフレームワークと仲良くなる

Slide 86

Slide 86 text

の前に、✋

Slide 87

Slide 87 text

今回はフレームワーク間で共通する話を

Slide 88

Slide 88 text

フレームワークどれがいいの問題 • 今回は語りきれないので、以前作成したスライドを参照く ださい。
 
 https://speakerdeck.com/yuhiisk/spashi-zhuang-zui- qian-xian-jin-dokifalsejshuremuwakuxuan-bi

Slide 89

Slide 89 text

コンポーネント指向

Slide 90

Slide 90 text

コンポーネントとは? コンポーネントとは、 状態・機能を持ったページを構成する部品

Slide 91

Slide 91 text

コンポーネントとは?

Slide 92

Slide 92 text

コンポーネントとは?

Slide 93

Slide 93 text

コンポーネントとは?

Slide 94

Slide 94 text

コンポーネントとは?

Slide 95

Slide 95 text

コンポーネント指向とは?

Slide 96

Slide 96 text

コンポーネント指向とは? 積み⽊のようにコンポーネントを組み合わせる

Slide 97

Slide 97 text

コンポーネントだと何がいい?

Slide 98

Slide 98 text

コンポーネントだと何がいい? • 再利⽤可能

Slide 99

Slide 99 text

コンポーネントだと何がいい? • 再利⽤可能

Slide 100

Slide 100 text

コンポーネントだと何がいい? • 再利⽤可能

Slide 101

Slide 101 text

コンポーネントだと何がいい? • 再利⽤可能

Slide 102

Slide 102 text

コンポーネントだと何がいい? • 外からデータや処理を与えることができる。

Slide 103

Slide 103 text

コンポーネントだと何がいい? • 外からデータや処理を与えることができる。 ダイアログコンポーネント • දࣔ͢Δจষ • ϘλϯͷςΩετ • ϘλϯΛΫϦοΫͨ࣌͠ͷڍಈ

Slide 104

Slide 104 text

コンポーネントだと何がいい? • 再利⽤可能 • コンポーネント⾃⾝が状態を持てる 


Slide 105

Slide 105 text

コンポーネントだと何がいい? • コンポーネント⾃⾝が状態を持てる

Slide 106

Slide 106 text

コンポーネントだと何がいい? • コンポーネント⾃⾝が状態を持てる

Slide 107

Slide 107 text

コンポーネントだと何がいい? • コンポーネント⾃⾝が状態を持てる { isActive: true } { isActive: false }

Slide 108

Slide 108 text

コンポーネントだと何がいい? • 再利⽤可能 • コンポーネント⾃⾝が状態を持てる • コードの影響範囲をカプセル化
 (個々にメソッドを実装したり、独⾃CSSを適⽤できる)

Slide 109

Slide 109 text

コンポーネントだと何がいい? • コードの影響範囲をカプセル化 B A C

Slide 110

Slide 110 text

コンポーネントだと何がいい? • コードの影響範囲をカプセル化 B A C 他のコンポーネントに影響しない

Slide 111

Slide 111 text

全てコンポーネント指向

Slide 112

Slide 112 text

コンポーネント指向を念頭に
 チュートリアルをやってみる • 各フレームワークではチュートリアルが⽤意されているので、 まずはチュートリアルで雰囲気を掴む。 • React: https://reactjs.org/tutorial/tutorial.html • Angular: https://angular.jp/tutorial • Vue.js: https://jp.vuejs.org/v2/guide/

Slide 113

Slide 113 text

コンポーネント指向を念頭に
 何か作ってみる

Slide 114

Slide 114 text

コンポーネント指向を念頭に
 何か作ってみる 1. 例えば、Qiitaのデータを取得してリスト表⽰するだけの アプリ 


Slide 115

Slide 115 text

コンポーネント指向を念頭に
 何か作ってみる 1. 例えば、Qiitaのデータを取得してリスト表⽰するだけの アプリ 2. ⼿元からPOSTできるように簡単な投稿エディタを作って みる。

Slide 116

Slide 116 text

コンポーネント指向を念頭に
 何か作ってみる 1. 例えば、Qiitaのデータを取得してリスト表⽰するだけの アプリ 2. ⼿元からPOSTできるように簡単な投稿エディタを作って みる。 3. フォローできるようにしてみる。

Slide 117

Slide 117 text

コンポーネント指向を念頭に
 まずは何か作ってみる • その他にもチャットアプリなども初⼼者にはおすすめ。

Slide 118

Slide 118 text

コンポーネント指向を念頭に
 まずは何か作ってみる • その他にもチャットアプリなども初⼼者にはおすすめ。 • ⾃分のアイデアをもとに⼿を動かしてみましょう。

Slide 119

Slide 119 text

今⽇のまとめ

Slide 120

Slide 120 text

SPAまとめ

Slide 121

Slide 121 text

SPAまとめ • SPAはページの⼀部を更新するWebアプリケーション。 


Slide 122

Slide 122 text

SPAまとめ • SPAはページの⼀部を更新するWebアプリケーション。 • ユーザー体験が向上する分、フロントの実装コストは⾼ い。

Slide 123

Slide 123 text

SPAまとめ • SPAはページの⼀部を更新するWebアプリケーション。 • ユーザー体験が向上する分、フロントの実装コストは⾼ い。 • サイト滞在時間の⻑いツール系のサービスに向いている。

Slide 124

Slide 124 text

SPAまとめ • 規模に応じて実装者を確保すること。

Slide 125

Slide 125 text

SPAまとめ • 規模に応じて実装者を確保すること。 • フレームワーク選びは組み合わせが⾃由。

Slide 126

Slide 126 text

SPAまとめ • 規模に応じて実装者を確保すること。 • フレームワーク選びは組み合わせが⾃由。 • フロントエンド開発はコンポーネント指向を意識する。

Slide 127

Slide 127 text

【宣伝】Angularの⼊⾨動画を作りました https://www.udemy.com/angular-ja/

Slide 128

Slide 128 text

ありがとうございました