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
Vue.jsでのSPA開発の実際
Search
アシアル株式会社
April 04, 2019
Technology
1
2k
Vue.jsでのSPA開発の実際
アシアル技術セミナー Vo.2
Webフロントエンド開発最前線
~SPAおよびPWA開発プロジェクトの現場から~
「Vue.jsでのSPA開発の実際」
アシアル株式会社
April 04, 2019
Tweet
Share
More Decks by アシアル株式会社
See All by アシアル株式会社
大学オリジナルのデジタル学生証アプリ「MyCampus」のご紹介資料
asial_corp
0
27
第2回全国商業高校Webアプリコンテスト説明会(2024年3月版)
asial_corp
0
140
第1回全国商業高校Webアプリコンテスト総括
asial_corp
0
520
6ヶ月間の授業でここまでできた。コンテスト参加に向けての授業内容と生徒の様子を紹介!
asial_corp
0
470
アプリ開発を目指した授業づくりについて
asial_corp
0
500
train20231223_mainslide.pdf
asial_corp
0
610
Monaca Education 活用事例セミナー:「Monacaでゲームプログラミング~作品制作事例~」
asial_corp
0
1.2k
おみくじアプリのスライド_20230719版
asial_corp
0
580
2023年度第二弾無料導入説明会
asial_corp
0
500
Other Decks in Technology
See All in Technology
株式会社ログラス − エンジニア向け会社説明資料 / Loglass Comapany Deck for Engineer
loglass2019
3
31k
祝!Iceberg祭開幕!re:Invent 2024データレイク関連アップデート10分総ざらい
kniino
2
250
サーバレスアプリ開発者向けアップデートをキャッチアップしてきた #AWSreInvent #regrowth_fuk
drumnistnakano
0
190
Jetpack Composeで始めるServer Cache State
ogaclejapan
2
160
podman_update_2024-12
orimanabu
1
260
10分で学ぶKubernetesコンテナセキュリティ/10min-k8s-container-sec
mochizuki875
3
330
Turing × atmaCup #18 - 1st Place Solution
hakubishin3
0
470
WACATE2024冬セッション資料(ユーザビリティ)
scarletplover
0
190
小学3年生夏休みの自由研究「夏休みに Copilot で遊んでみた」
taichinakamura
0
150
コンテナセキュリティのためのLandlock入門
nullpo_head
2
320
サイボウズフロントエンドエキスパートチームについて / FrontendExpert Team
cybozuinsideout
PRO
5
38k
LINE Developersプロダクト(LIFF/LINE Login)におけるフロントエンド開発
lycorptech_jp
PRO
0
120
Featured
See All Featured
Adopting Sorbet at Scale
ufuk
73
9.1k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
810
The Invisible Side of Design
smashingmag
298
50k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.2k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
How To Stay Up To Date on Web Technology
chriscoyier
789
250k
Reflections from 52 weeks, 52 projects
jeffersonlam
347
20k
A Philosophy of Restraint
colly
203
16k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
48
2.2k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
365
25k
Transcript
Vue.jsでのSPA開発の実際 SAITOU KATSUYA 斉藤 勝也<
[email protected]
> アシアル株式会社
斉藤 勝也 Saitou Katsuya アシアル株式会社 Web開発チーム 好きなエディタは Sublime Text (素早く起動するため) 2010
2012 2019 PHPエンジニア SE兼PL 2017 JSエンジニア, ネイティブエンジニア 2
• ここ2年ぐらいでVue.jsをSPAに適用して開発 • その中で見えてきた課題や開発方針について話します • Vue.jsなどの使い方はある程度知っていて、これを実際のア プリに利用したい方を対象としています
今日の話 1/2 3
• 結論 ◦ Vue.jsでSPAやるとハマる!ことはない ◦ どちらかと言えば、それら以外の課題がある ▪ ローカルPC環境周り ▪ API接続確認周り
▪ スマホやサーバー上で展開周り ▪ 納品周り 今日の話 2/2 4
Vue.jsでのSPA開発 概要 課題 まとめ 目次 5
Vue.jsでのSPA開発 概要 課題 まとめ 6 SPAとは SPA開発の流れ
SPA(Single Page Application)とは 1/2 Vue.jsでのSPA開発 概要 7 • 初回のリクエストで、ページ構成に必要なファイルを取得 •
その後、必要な情報を都度リクエスト ◦ JSON形式でレスポンスを受け取ることが多い • ページの遷移時に、サーバーサイドでのページローディングを挟まない
都度リクエスト /api/getXxx, /api/setXxx, ... 初回リクエスト index.html, all.js, all.css, .... SPA(Single
Page Application)とは 2/2 Vue.jsでのSPA開発 概要 8 APIサーバー
Vue.jsでのSPA開発 概要 課題 まとめ 9 SPAとは SPA開発の流れ
SPA開発の流れの例 Vue.jsでのSPA開発 概要 ローカルPC環境開発 API接続確認 スマホやサーバー 上に展開 納品 10 テストについては省略
• PC上にhttp://localhostで開発できる環境を用意 • vue-cliなどコマンド一つで環境をセットアップできる ローカルPC環境開発 Vue.jsでのSPA開発 概要 > SPA開発の流れ エディタ
ローカルサーバー ブラウザ 11 ソース コード
• アプリと、外部で作成されたAPIとの接続確認 API接続確認 Vue.jsでのSPA開発 概要 > SPA開発の流れ 12 リクエスト /api/getXxx,
/api/setXxx, ... APIサーバー
スマホやサーバー上で展開 Vue.jsでのSPA開発 概要 > SPA開発の流れ • ソースを実際に動かしたい環境で、プリコンパイルして 実行 ソース コード
13 HTTPサーバー
• 作成したソースコードを顧客に提出 • 引き継ぎや環境構築などソースコード周りを サポート 納品 Vue.jsでのSPA開発 概要 > SPA開発の流れ
14 ソース コード ソース コード ソース コード
参考:Vue.js周りの利用実績 PHP MySQL Vuex webpack Monaca Cordova iOS Android Laravel
axios vue-cli nginx サーバー環境 モバイル環境 フロントエンド環境 AWS EC2 Vue.js vue- devtools Vue.jsでのSPA開発 概要 > SPA開発の流れ 15
Vue.jsでのSPA開発 概要 課題 まとめ 16 ローカルPC環境 API接続確認 スマホやサーバー上で展開 納品
ローカルPC環境開発 lintルールと戦う 17
課題 ◦ lintルールと書きたい方向性が合わない lintルールと戦う 1/2 課題 > ローカルPC環境開発 18 //
no-unused-varsルール toSettings() { let a = "text data" } // yodaルール if (4 < input.length) { ... }
対応 ◦ チームと相談して、きついルールのレベルを変更 lintルールと戦う 2/2 課題 > ローカルPC環境開発 19 "rules":
{ "yoda": "off", "no-unused-vars": "warn" },
ローカルPC環境開発 ユニットテストを実行し終わるまでが長い 20
ユニットテストを実行し終わるまでが長い 1/2 課題 > ローカルPC環境開発 21 課題 ◦ コード修正 ◦
書いたコードをプリコンパイル(webpackビルド) ◦ ユニットテスト実行 ◦ ここまで、体感約30秒 - 60秒かかる
対応 ◦ 案件にもよるが、ユニットテストではなく、 結合テストでカバー ◦ ナイトリービルドなどで、テストの頻度を下げる ユニットテストを実行し終わるまでが長い 2/2 課題 >
ローカルPC環境開発 22
ローカルPC環境開発 脆弱性のあるモジュールが発見された 23
課題 ◦ npm install時に脆弱性のあるモジュールが 利用されていると警告 ◦ アップデートを試みるも、バージョンが上がらず 脆弱性のあるモジュールが発見された 1/2 課題
> ローカルPC環境開発 24
脆弱性のあるモジュールが発見された 2/2 課題 > ローカルPC環境開発 25 対応 ◦ 脆弱性の内容を確認 ◦
開発時にしか使わないモジュールであるため 悪用がないと判断
Vue.jsでのSPA開発 概要 課題 まとめ 26 ローカルPC環境 API接続確認 スマホやサーバー上で展開 納品
API接続確認 localhostとAPIの接続 27
課題 ◦ http://localhost 上で開発するも、 ◦ localhostから用意されているAPIへの許可はされていなく、 接続できない ◦ クロスドメイン問題の話 localhostとAPIの接続
1/3 課題 > API接続確認 28
localhostとAPIの接続 2/3 課題 > API接続確認 29 https://xxx.org/api/getXxx http://localhost APIサーバー
対応 ◦ localhostからのアクセスを許可してもらう依頼 ▪ サーバー構成次第 ◦ 社内でスタブサーバーを作成 ▪ APIの仕様次第 localhostとAPIの接続
3/3 課題 > API接続確認 30
API接続確認 APIの仕様変更 31
課題 ◦ APIの仕様変更が予告なくあった ◦ 例: 型が変わった ▪ { isDone :
true } -> { isDone : “true” } APIの仕様変更 1/3 課題 > API接続確認 32
対応 ◦ propsという仕様で型を定義することで API側かクライアント側の問題かを 素早く切り分けることができた。 APIの仕様変更 2/3 課題 > API接続確認
33
APIの仕様変更 3/3 課題 > API接続確認 34
Vue.jsでのSPA開発 概要 課題 まとめ 35 ローカルPC環境 API接続確認 スマホやサーバー上で展開 納品
スマホやサーバー上で展開 スマートフォンへのアプリ展開方法 36
課題 ◦ WebViewベースのアプリを作成する ◦ アプリの確認までに、JavaScriptをプリコンパイル、続いて ネイティブでのビルドを行う ◦ この流れが時間を食いやすく、スマホでデバッグする気に なれない スマートフォンへのアプリ展開方法
1/3 課題 > スマホやサーバー上で展開 37
対応 ◦ 弊社製サービスMonacaを利用 ◦ ネイティブビルドをスキップでき、 スマホ上での開発・確認サイクルが早くなる スマートフォンへのアプリ展開方法 2/3 課題 >
スマホやサーバー上で展開 38
スマートフォンへのアプリ展開方法 3/3 課題 > スマホやサーバー上で展開 39 プリコンパイル ネイティブビルド 確認 プリコンパイル
確認 従来
スマホやサーバー上で展開 画像の初回ローディングの時間 40
課題 ◦ 必要な画像などは初回にローディング ◦ しかしスマホでは、ネットワークやCPUなどの状態で、PCよ りもローディングが遅くなる 画像の初回ローディング 1/3 課題 >
スマホやサーバー上で展開 41
画像の初回ローディング 2/3 課題 > スマホやサーバー上で展開 42 初回リクエスト …, aaa.jpg, bbb.jpg,
... APIサーバー
対応 ◦ 圧縮サイズを下げる 画像の初回ローディング 3/3 課題 > スマホやサーバー上で展開 43 46KB
30KB - 35%
スマホやサーバー上で展開 実行時エラーが追いかけづらい 44
課題 ◦ プリコンパイルしたアプリの実行中、 エラーが発生したためJSを確認する ◦ しかし、ソースは圧縮化されて追いづらい 実行時エラーが追いかけづらい 1/4 課題 >
スマホやサーバー上で展開 45
実行時エラーが追いかけづらい 2/4 課題 > スマホやサーバー上で展開 46
対応 ◦ ChromeやSafariの開発者ツールを利用して、 読みやすい形式に変換 ◦ さらにブレークポイントを設定することで、 各変数のその時の値を知ることができる 実行時エラーが追いかけづらい 3/4 課題
> スマホやサーバー上で展開 47
実行時エラーが追いかけづらい 4/4 課題 > スマホやサーバー上で展開 48
スマホやサーバー上で展開 日付オブジェクト生成でエラー 49
課題 ◦ API越しに文字列を取得し、JS側で日付オブジェクトを生成 ◦ しかしiOS端末では、以下のJSでは失敗する ◦ new Date("2019-12-11 12:00:00") 日付オブジェクト生成でエラー
1/2 課題 > スマホやサーバー上で展開 50
対応 ◦ 実行環境ごとに実行可能な文字列を確かめる ◦ 例:new Date("2019/12/11 12:00:00") ※MySQLから返す値を利用すると、正常な値に見え、気づきにくい 日付オブジェクト生成でエラー
2/2 課題 > スマホやサーバー上で展開 51
スマホやサーバー上で展開 サーバー上に展開 52
課題 ◦ SPAをAWS EC2上に展開する過程で、 npm installするも、メモリエラー ◦ 無料枠があるため選びがちな、t2.microという インスタンスが1GBメモリしかない サーバー上に展開
1/2 課題 > スマホやサーバー上で展開 53
サーバー上に展開 2/2 課題 > スマホやサーバー上で展開 54 対応 ◦ t2.mediumなど、メモリを4GBぐらいは確保する ◦
npm install以外にも、PHPでのcomposer installでも 起きることがあり、1GBではメモリが少ない認識 を持っておいたほうがいい
サーバー上に展開 2/2 課題 > スマホやサーバー上で展開 55
Vue.jsでのSPA開発 概要 課題 まとめ 56 ローカルPC環境 API接続確認 スマホやサーバー上で展開 納品
納品 納品後の環境でnpm install 57
課題 ◦ 開発中は、社内からしかアクセスできないリポジトリ からモジュールをnpm installして開発 ◦ 納品後など別環境からはリポジトリを 参照できないため、当然、npm installに失敗する 納品後の環境でnpm
install 1/2 課題 > 納品 58
納品後の環境でnpm install 2/2 課題 > 納品 59 対応 ◦ ソースコードと一緒に、インストール元モジュールを渡して
対応 ◦ package.jsonを納品時に見直す必要がある
納品 引き継ぎ時の説明 60
課題 ◦ アプリを納品し、引き継ぎ会でアプリの構造を説明 ◦ どのコードが画面のどこに当たるのかが 分かりにくい、という指摘が入る 引き継ぎ時の説明 1/5 課題 >
納品 61
引き継ぎ時の説明 2/5 課題 > 納品 62
引き継ぎ時の説明 3/5 課題 > 納品 63 対応 ◦ ソースコードと画面の対応図を作成 ◦
vue-devtoolsを利用して、確認してもらう ※命名次第でソースのどの部分が、画面のどこに対応するかが、 分かりにくくなることがある。
引き継ぎ時の説明 4/5 課題 > 納品 64
引き継ぎ時の説明 5/5 課題 > 納品 65
Vue.jsでのSPA開発 概要 課題 まとめ 66
Vue.jsを使ったSPAは課題が少ないと感じる まとめ 1/3 67
ただ、ローカルでの開発や実際の環境で 確認する中で課題が発生する まとめ 2/3 68
各ツールでは対策されづらい部分であるため こういった知見を広げてほしい まとめ 3/3 69
70