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
32
第2回全国商業高校Webアプリコンテスト説明会(2024年3月版)
asial_corp
0
150
第1回全国商業高校Webアプリコンテスト総括
asial_corp
0
540
6ヶ月間の授業でここまでできた。コンテスト参加に向けての授業内容と生徒の様子を紹介!
asial_corp
0
480
アプリ開発を目指した授業づくりについて
asial_corp
0
510
train20231223_mainslide.pdf
asial_corp
0
620
Monaca Education 活用事例セミナー:「Monacaでゲームプログラミング~作品制作事例~」
asial_corp
0
1.3k
おみくじアプリのスライド_20230719版
asial_corp
0
610
2023年度第二弾無料導入説明会
asial_corp
0
500
Other Decks in Technology
See All in Technology
Formal Development of Operating Systems in Rust
riru
1
420
三菱電機で社内コミュニティを立ち上げた話
kurebayashi
1
350
AWS Community Builderのススメ - みんなもCommunity Builderに応募しよう! -
smt7174
0
150
2025年に挑戦したいこと
molmolken
0
150
Copilotの力を実感!3ヶ月間の生成AI研修の試行錯誤&成功事例をご紹介。果たして得たものとは・・?
ktc_shiori
0
330
機械学習を「社会実装」するということ 2025年版 / Social Implementation of Machine Learning 2025 Version
moepy_stats
4
790
20250116_JAWS_Osaka
takuyay0ne
2
190
データ基盤におけるIaCの重要性とその運用
mtpooh
1
240
Godot Engineについて調べてみた
unsoluble_sugar
0
360
今から、 今だからこそ始める Terraform で Azure 管理 / Managing Azure with Terraform: The Perfect Time to Start
nnstt1
0
180
Goで実践するBFP
hiroyaterui
1
120
Azureの開発で辛いところ
re3turn
0
240
Featured
See All Featured
Learning to Love Humans: Emotional Interface Design
aarron
274
40k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
3
240
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
Practical Orchestrator
shlominoach
186
10k
The Pragmatic Product Professional
lauravandoore
32
6.4k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
26
1.9k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
Typedesign – Prime Four
hannesfritz
40
2.5k
Faster Mobile Websites
deanohume
305
30k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
3
350
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