|||||||||||||||||||||

なんぶ電子

- 更新: 

バージョン3系のVue.js環境を構築

Vue.js sample page

Vue.jsの開発環境をインストールします。バージョン2についても以前は記述していましたが、バージョン3がリーリースされてから時間も経ちましたので3だけを対象にしてリライトします。

ここでのインストール環境はWindwos10(64bit)です。

もし、AngularやReactのようなJavaScriptのフレームワークを触った事がなくVue.jsとはどんなものかを手短に知りたい場合は、開発環境を作らずにそのままHTMLに記述できるインライン記法の方がわかりやすいかもしれません。そちらの方法はリンク先の記事を参照していただければと思います。

環境の構築

Vue.js環境を作るためにはJavaScriptの実行環境であるNode.jsが必要です。Node.jsの詳細やインストール方法についてはリンク先の別記事を参考にしてください。

Node.jsのインストールが終わったら、ターミナル(コマンドプロンプトやPower Shell)から、管理ツールである「vue-cli」をグローバル領域にインストールします。

PS> npm install -g @vue/cli  
...

次に、Vue.jsのプロジェクトを作成します。「vue create プロジェクト名」としてコマンドを実行すると、名付けたプロジェクト名のフォルダがカレントフォルダに作成され、Vue.jsのプロジェクトが初期化されます。この時、こバージョンを確認されますので、3を選択します。

公式ガイドにあるように、一連の作業が終わったら、プロジェクトのディレクトリに移動し「vue upgrade --next」を実行しします。

PS> mkdir d:¥vue
PS> cd d:¥vue
PS> vue create test-project
Vue CLI v5.0.6
? Please pick a preset: (Use arrow keys)
> Default ([Vue 3] babel, eslint)
  Default ([Vue 2] babel, eslint)
  Manually select features
...
PS> cd test-project
PS> vue upgrade --next
DONE  Seems all plugins are up to date. Good work!

他になにも機能のない状態ですが、プロジェクトの生成はこれで完了です。

テスト稼働

すでにサンプルコードがセットされていますので、テスト稼働が可能です。実行するには「npm run serve」とします。

PS> npm run serve
PS> cd d:¥vue
...
DONE  Compiled successfully in 41263ms 
...
  App running at:
  - Local:   http://localhost:8080/
  - Network: http://192.168.11.2:8080/
...

コマンドがnpmになっていることからもわかるように、Node.jsを利用してアプリケーションを起動しています。この設定はプロジェクトフォルダにある「package.json」ファイルに記述されていて、間接的に「vue-cli-service serve」が呼ばれる設定になっています。

package.json

{
  "name": "test-project",
  "version": "0.1.0",
  "private": true,
  "scripts": {
  "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint"
  },
...

「npm run serve」コマンドは、プロンプトが戻らず待機し続けます。その過程で、ブラウザで表示されている「http://localhost:8080/」にアクセスするとVue.jsプロジェクトが表示されます。待機状態を終了させるにはCtl+Cを押します。

Vue.js sample page

アプリの構成

先のテストアプリの核の部分はプロジェクトのルートフォルダ¥src¥components¥HelloWorld.vueとなっています。このファイルは、エントリーポイントとなる、ルートフォルダ¥src¥App.vueファイルで、importされ利用されています。

これらのvueファイルの中身は、templete、script、styleタグからなる不完全なHTMLファイルのような構造になっています。

この構造は単一ファイルコンポーネント(SFC)と呼ばれ、Vue.jsの特徴のひとつです。templeteに表示用のHTML、scriptに変数や関数、styleにcssを記述するようになっていて、ひとつのファイルでひとつのコンポーネントが完結するスタイルです。

App.vueファイルでは、HelloWorld.vueファイルをインポートして、componentsとして定義して、テンプレートに記述することでその箇所にコンポーネントを表示するように設定されています。

App.vue

<template>
  <img alt="Vue logo" src="./assets/logo.png">
  <HelloWorld msg="Welcome to Your Vue.js App"/>
</template>

<script>
import HelloWorld from './components/HelloWorld.vue'

export default {
  name: 'App',
  components: {
    HelloWorld
  }
}
</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>

HelloWorlde.vue側では、propertyとして、親コンポーネントからmsgプロパティを受け取るように設定したうえで、それをテンプレートに組み込んだコンポーネントとなっています。style内で「scoped」を設定することにより、ここでのCSSでの設定を他に影響させないようにしています。

HelloWorld.vue

<template>
  <div class="hello">
    <h1>{{ msg }}</h1>
     ...
   </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  props: {
    msg: String
  }
}
</script>

<style scoped>
h3 {
  margin: 40px 0 0;
}
ul {
  list-style-type: none;
  padding: 0;
}
li {
  display: inline-block;
  margin: 0 10px;
}
a {
  color: #42b983;
}
</style>

ビルド

本番環境ではビルドをして、先に紹介したようなファイル群をまとめます。

必須ではないですが、ビルドする前に「npm run lint」を実行してエラーの確認をします。これも先のserve同様に、npmを使って間接的に「vue-cli-service lint」を呼ぶコマンドとなっています。

PS> npm run lint

> test-project@0.1.0 lint
> vue-cli-service lint

 DONE  No lint errors found!

エラーがなければbuildします。これもnpm経由です。

PS> npm run build

> test-project@0.1.0 build
> vue-cli-service build

All browser targets in the browserslist configuration have supported ES module.
Therefore we don't build two separate bundles for differential loading.


-  Building for production...

 DONE  Compiled successfully in 26012ms

  File                              Size      

  dist\js\chunk-vendors.cb848940.js 75.76 KiB
  dist\js\app.1aad6ed9.js           13.06 KiB
  dist\css\app.2cf79ad6.css         0.33 KiB

  Images and other types of assets omitted.
  Build at: 2022-06-21T07:21:00.538Z - Hash: feaf1067c1ee3a9c - Time: 26012ms

 DONE  Build complete. The dist directory is ready to be deployed.
 INFO  Check out deployment instructions at https://cli.vuejs.org/guide/deployment.html

メッセージからもわかるように、ビルドの生成物はデフォルトではルートフォルダのdistサブフォルダに出力されます。

distファイルの中身をそのまま、webサーバーのドキュメントルートに持っていけば意図したように表示されますが、webサーバーの子フォルダに入れるとVue.jsのコンテンツが表示されず真っ白な画面になります。

1ft-seabass.jp.MEMOにその対象方法が掲載されていました。参考になりました。ありがとうございました。

プロジェクトのルートフォルダにある、vue.config.jsファイルに次のようにpublicPath記述を加えて相対パスに変更する必要があるそうです。

HelloWorld.vue

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  publicPath: "./"
})

筆者紹介


自分の写真
がーふぁ、とか、ふぃんてっく、とか世の中すっかりハイテクになってしまいました。プログラムのコーディングに触れることもある筆者ですが、自分の作業は硯と筆で文字をかいているみたいな古臭いものだと思っています。 今やこんな風にブログを書くことすらAIにとって代わられそうなほど技術は進んでいます。 生活やビジネスでPCを活用しようとするとき、そんな第一線の技術と比べてしまうとやる気が失せてしまいがちですが、おいしいお惣菜をネットで注文できる時代でも、手作りの味はすたれていません。 提示されたもの(アプリ)に自分を合わせるのでなく、自分の活動にあったアプリを作る。それがPC活用の基本なんじゃなかと思います。 そんな意見に同調していただける方向けにLinuxのDebianOSをはじめとした基本無料のアプリの使い方を紹介できたらなと考えています。

広告