Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Vue.jsでのSPA開発の実際
Search
アシアル株式会社
April 04, 2019
Technology
1
2.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
130
第2回全国商業高校Webアプリコンテスト説明会(2024年3月版)
asial_corp
0
230
第1回全国商業高校Webアプリコンテスト総括
asial_corp
0
650
6ヶ月間の授業でここまでできた。コンテスト参加に向けての授業内容と生徒の様子を紹介!
asial_corp
0
550
アプリ開発を目指した授業づくりについて
asial_corp
0
560
train20231223_mainslide.pdf
asial_corp
0
680
Monaca Education 活用事例セミナー:「Monacaでゲームプログラミング~作品制作事例~」
asial_corp
0
1.4k
おみくじアプリのスライド_20230719版
asial_corp
0
740
2023年度第二弾無料導入説明会
asial_corp
0
550
Other Decks in Technology
See All in Technology
プロダクトマネジメントの分業が生む「デリバリーの渋滞」を解消するTPMの越境
recruitengineers
PRO
3
380
プロダクトマネージャーが押さえておくべき、ソフトウェア資産とAIエージェント投資効果 / pmconf2025
i35_267
2
300
私も懇親会は苦手でした ~苦手だからこそ懇親会を楽しむ方法~ / 20251127 Masaki Okuda
shift_evolve
PRO
4
540
生成AI・AIエージェント時代、データサイエンティストは何をする人なのか?そして、今学生であるあなたは何を学ぶべきか?
kuri8ive
2
1.3k
セキュリティAIエージェントの現在と未来 / PSS #2 Takumi Session
flatt_security
3
1.3k
Noを伝える技術2025: 爆速合意形成のためのNICOフレームワーク速習 #pmconf2025
aki_iinuma
2
760
一億総業務改善を支える社内AIエージェント基盤の要諦
yukukotani
8
2.8k
MS Ignite 2025で発表されたFoundry IQをRecap
satodayo
3
230
A Compass of Thought: Guiding the Future of Test Automation ( #jassttokai25 , #jassttokai )
teyamagu
PRO
1
140
なぜ使われないのか?──定量×定性で見極める本当のボトルネック
kakehashi
PRO
1
660
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
37k
ページの可視領域を算出する方法について整理する
yamatai1212
0
160
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.1k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
Embracing the Ebb and Flow
colly
88
4.9k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Stop Working from a Prison Cell
hatefulcrawdad
273
21k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Rebuilding a faster, lazier Slack
samanthasiow
84
9.3k
Six Lessons from altMBA
skipperchong
29
4.1k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.1k
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.8k
BBQ
matthewcrist
89
9.9k
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