【Vue + vue-cli】vue-cliの構造とHello World表示
目次
今回はVue.jsのvue-cliを用いて、構造理解とHello Worldの表示まで行っていきたいと思います。
Vue.jsの環境構築とプロジェクト作成、vue-cliのインストールまでは前回の記事で行いましたので、該当記事をご参考ください。
・vue.jsの環境構築
https://www.dailyupblog.com/web_development/716/
それではいきましょう。
vue-cliの構造
プロジェクトフォルダの構造をみてみると、以下のように沢山のファイルがあると思います。
今回はファイル構成をざっくりと解説していきたいと思います。
package.json
package.jsonの中身を見てみると、下記のようにjson形式で様々な記述があります。
これは、npm installもしくはyarn installをコマンドライン上で実行した際に、このpackage.json内に記述があるパッケージが全て、同階層に存在する「node_modules」フォルダ内にインストールされます。
例えば、前回の環境構築の記事にて、vueプロジェクトを制作した際に、「vue-router」を利用すると設定したのですが、このvue-routerもpackage.json内に記述があります。
このように必要なパッケージや追加したパッケージが全てこのファイル内に記述されます。
index.html
アクセスした際にこのファイルが一番最初に読み込まれます。
ファイルの中身を見てみると、デフォルトでは下記のような記述になります。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>vue-test</title>
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
基本的なHTMLの構造ですが、bodyタグ内にid=”app”のdivタグが存在します。
このid=”app”タグ内に、コンテンツが呼び出されるのですが、それは次に説明する「src」フォルダ内のデータです。
main.jsとApp.vue
「src」フォルダ内にあるmain.jsファイル内を見てみると、下記のような記述があります。
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
Vue.config.productionTip = false
/* eslint-disable no-new */
new Vue({
el: '#app',
router,
components: { App },
template: '<App/>'
})
先ほど、index.html内にあったid=”app”のdivタグを指定して、どうやらAppをインポートしているようです。
つまり、最初にAppというファイル内のコンテンツを呼び出しているようです。
そのほかにrouterの記述もありますが、routerとはSPA開発の際に必要な画面遷移を実現してくれるパッケージです。routerについては別の機会に深掘りしようと思います。
以下はmain.js内でインポートされているApp.vueの中身です。
<template>
<div id="app">
<img src="./assets/logo.png" />
<router-view />
</div>
</template>
<script>
export default {
name: "App"
};
</script>
<style>
#app {
font-family: "Avenir", Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>
Vueファイルは上記のような構成になります。
一番上のtemplateタグ内に表示するHTMLを記述します。
その下のscriptタグ内にJavascriptの記述をします。
そして、その下のstyleタグ内にスタイルを記述します。
このような構造を単一ファイルコンポーネントといいます。
router > index.js
App.vueのHTML内に<router-view />というタグの記述がありますが、これは先ほど軽く触れた「vue-router」の呼び出しタグです。
「router」フォルダ内に存在するindex.jsファイルの中身にrouterの設定が記載されています。
その中にHelloWorldファイルがルーター設定されています。
詳細につきましては、vue-routerについての記事をアップいたしますので、そちらを参照ください。
今回は省きます。
HelloWorld.vue
ルーターにて呼び出されたHelloWorld.vueファイルです。
「components」フォルダ内にあります。
ファイルの中身は以下のようになります。
<template>
<div class="hello">
<h1>{{ msg }}</h1>
<h2>Essential Links</h2>
<ul>
<li>
<a
href="https://vuejs.org"
target="_blank"
>
Core Docs
</a>
</li>
<li>
<a
href="https://forum.vuejs.org"
target="_blank"
>
Forum
</a>
</li>
<li>
<a
href="https://chat.vuejs.org"
target="_blank"
>
Community Chat
</a>
</li>
<li>
<a
href="https://twitter.com/vuejs"
target="_blank"
>
Twitter
</a>
</li>
<br>
<li>
<a
href="http://vuejs-templates.github.io/webpack/"
target="_blank"
>
Docs for This Template
</a>
</li>
</ul>
<h2>Ecosystem</h2>
<ul>
<li>
<a
href="http://router.vuejs.org/"
target="_blank"
>
vue-router
</a>
</li>
<li>
<a
href="http://vuex.vuejs.org/"
target="_blank"
>
vuex
</a>
</li>
<li>
<a
href="http://vue-loader.vuejs.org/"
target="_blank"
>
vue-loader
</a>
</li>
<li>
<a
href="https://github.com/vuejs/awesome-vue"
target="_blank"
>
awesome-vue
</a>
</li>
</ul>
</div>
</template>
<script>
export default {
name: 'HelloWorld',
data () {
return {
msg: 'Welcome to Your Vue.js App'
}
}
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h1, h2 {
font-weight: normal;
}
ul {
list-style-type: none;
padding: 0;
}
li {
display: inline-block;
margin: 0 10px;
}
a {
color: #42b983;
}
</style>
この中に表示されているコンテンツの中身が記載されています。
つまり環境構築後サーバーを起動して最初に表示される下記ページの中身がこのファイルに記述してあります。
Hellow Worldを表示してみる
ざっくりとファイル構成を解説いたしましたので、実際に中身を触ってみましょう。
とりあえず、Hellow Worldをページ上に表示させてみましょう。
余計なものは消してしまいたいので、まずApp.vueを開いて、下記のよう<img src=”./assets/logo.png” />を削除してください。
<template>
<div id="app">
<img src="./assets/logo.png" />
<router-view />
</div>
</template>
↓↓
<template>
<div id="app">
<router-view />
</div>
</template>
次に「conponents」フォルダ内のHelloWorld.vueを開いて、不要箇所を削除します。
<template>
<div class="hello">
<h1>{{ msg }}</h1>
<h2>Essential Links</h2>
<ul>
<li>
<a
href="https://vuejs.org"
target="_blank"
>
Core Docs
</a>
</li>
<li>
<a
href="https://forum.vuejs.org"
target="_blank"
>
Forum
</a>
</li>
<li>
<a
href="https://chat.vuejs.org"
target="_blank"
>
Community Chat
</a>
</li>
<li>
<a
href="https://twitter.com/vuejs"
target="_blank"
>
Twitter
</a>
</li>
<br>
<li>
<a
href="http://vuejs-templates.github.io/webpack/"
target="_blank"
>
Docs for This Template
</a>
</li>
</ul>
<h2>Ecosystem</h2>
<ul>
<li>
<a
href="http://router.vuejs.org/"
target="_blank"
>
vue-router
</a>
</li>
<li>
<a
href="http://vuex.vuejs.org/"
target="_blank"
>
vuex
</a>
</li>
<li>
<a
href="http://vue-loader.vuejs.org/"
target="_blank"
>
vue-loader
</a>
</li>
<li>
<a
href="https://github.com/vuejs/awesome-vue"
target="_blank"
>
awesome-vue
</a>
</li>
</ul>
</div>
</template>
↓↓
<template>
<div class="hello">
<h1>{{ msg }}</h1>
</div>
</template>
続いて、同じくHelloWorld.vueファイル内のスクリプト内のmsgのデータを「Hello World!!」に書き換えてください。
<script>
export default {
name: "HelloWorld",
data() {
return {
msg: "Welcome to Your Vue.js App"
};
}
};
</script>
↓↓
<script>
export default {
name: "HelloWorld",
data() {
return {
msg: "Hello World!!"
};
}
};
</script>
まず、Vueにおけるscript内の記述に関してですが、export defaultとは、外部ファイルから参照(インポート)する際にそれを使えるようにするためにexport defaultで囲う必要があります。
name: “HelloWorld”の部分は外部に読み込ませる際のファイル名として、設定するものです。
data() の中身には基本的にtemplate内で扱うデータを変数とセットで保管しておきます。
ここに記述しておくことで変数をHTML内や関数内で扱うことができます。
今回は、「Hello World!!」という文字列を持った変数msgをtemplate内に表示しています。
template内で変数を扱う際には基本的に二重の中括弧{{}}で括って下さい。
さて、実際にページを確認すると、以下のように表示されているはずです。
まとめ
さて、今回はvue-cliの基本構造と簡単なHello Worldの出力について触れました。
Vue.jsの構造と単一ファイルコンポーネントの記述に慣れる必要がありそうです。
また、今回実際にファイルを編集してみて気づいたと思うのですが、vueでの開発は基本的にホットリロードで行われます。
ホットリロードとは編集後ファイルを保存すると、ブラウザの再読み込みを行わずに、修正が反映されることです。
これによって、開発効率が劇的にアップします。
これもVueのメリットともいえるでしょう。
それでは今回はここまで!
お疲れ様でした!