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 アシアル株式会社
第2回全国商業高校Webアプリコンテスト説明会(2024年3月版)
asial_corp
0
110
第1回全国商業高校Webアプリコンテスト総括
asial_corp
0
490
6ヶ月間の授業でここまでできた。コンテスト参加に向けての授業内容と生徒の様子を紹介!
asial_corp
0
460
アプリ開発を目指した授業づくりについて
asial_corp
0
480
train20231223_mainslide.pdf
asial_corp
0
600
Monaca Education 活用事例セミナー:「Monacaでゲームプログラミング~作品制作事例~」
asial_corp
0
1.2k
おみくじアプリのスライド_20230719版
asial_corp
0
550
2023年度第二弾無料導入説明会
asial_corp
0
480
Monaca Education_活用事例セミナー「Monacaで情報デザイン」
asial_corp
1
500
Other Decks in Technology
See All in Technology
ネット広告に未来はあるか?「3rd Party Cookie廃止とPrivacy Sandboxの効果検証の裏側」 / third-party-cookie-privacy
cyberagentdevelopers
PRO
1
120
신뢰할 수 있는 AI 검색 엔진을 만들기 위한 Liner의 여정
huffon
0
170
AWSコンテナ本出版から3年経った今、もし改めて執筆し直すなら / If I revise our container book
iselegant
15
3.9k
なんで、私がAWS Heroに!? 〜社外の広い世界に一歩踏み出そう〜
minorun365
PRO
6
1.1k
MAMを軸とした動画ハンドリングにおけるAI活用前提の整備と次世代ビジョン / abema-ai-mam
cyberagentdevelopers
PRO
1
110
サイロ化した金融システムを、packwerk を利用して無事故でリファクタリングした話
coincheck_recruit
3
3.6k
使えそうで使われないCloudHSM
maikamibayashi
0
160
小規模に始めるデータメッシュとデータガバナンスの実践
kimujun
3
550
Jr. Championsになって、強く連携しながらAWSをもっと使いたい!~AWSに対する期待と行動~
amixedcolor
0
170
失敗しないOpenJDKの非互換調査
tabatad
0
260
Nix入門パラダイム編
asa1984
2
200
新卒1年目が挑む!生成AI × マルチエージェントで実現する次世代オンボーディング / operation-ai-onboarding
cyberagentdevelopers
PRO
1
160
Featured
See All Featured
How To Stay Up To Date on Web Technology
chriscoyier
788
250k
For a Future-Friendly Web
brad_frost
175
9.4k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
664
120k
BBQ
matthewcrist
85
9.3k
Rails Girls Zürich Keynote
gr2m
93
13k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
364
22k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.7k
The Cult of Friendly URLs
andyhume
78
6k
A Tale of Four Properties
chriscoyier
156
23k
Building Adaptive Systems
keathley
38
2.2k
Making the Leap to Tech Lead
cromwellryan
132
8.9k
RailsConf 2023
tenderlove
29
880
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