SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

TypeScriptで学ぶJavaScriptフレームワーク「Vue.js」の利用法

Vue.jsの世代交代が到来! Vue 3デフォルト時代の「Vue.js開発新常識」

TypeScriptで学ぶJavaScriptフレームワーク「Vue.js」の利用法 第5回

Vue 3デフォルト時代の新常識

 新しいCLIツールで生成したVue 3プロジェクトを利用して、Vue 3デフォルト時代のさまざまな変化点を説明していきます。

Options APIからComposition APIへ

 本連載でこれまで説明した*.vueファイルの記述法は「Options API」と呼ばれます。説明のため、前回記事でも説明した図5のサンプルを再掲します。

図5 入力を画面に反映するVue.jsのサンプル(p002-options)
図5 入力を画面に反映するVue.jsのサンプル(p002-options)

 このサンプルの<script>部は、リスト2の通りです。

[リスト2]Options APIで実装したVueコンポーネントの<script>部(p002-options/src/App.vue)
<script lang="ts">
import { defineComponent } from 'vue'
export default defineComponent({ // コンポーネント処理内容の記述
  // データ ...(1)
  data() {
    return {
      no: 1,
      company: 'Apple',
      name: 'iPhone 13',
      url:'https://www.apple.com/' as string, // 明示的にstringを指定
      weight: 173 as number // 明示的にnumberを指定
    }
  },
  // 算出プロパティ ...(2)
  computed: {
    fullName(): string {
      return `${this.name} (${this.company})`
    },
  },
  // メソッド ...(3)
  methods: {
    getWeightText(weight: number): string {
      // weightはnumber型なのでtoFixedメソッドが利用できる
      return `重量:${weight.toFixed(1)} g`
    }
  }
})
</script>

 (1)は画面に表示するデータ、(2)はデータを加工して出力する読み取り専用の算出プロパティ、(3)は引数を伴うメソッドの実装です。これらを「data」「computed」「methods」の各JavaScriptオブジェクト要素に分けて記述するのが、Options APIの特徴といえます。

 一方、リスト2と同じ処理をComposition APIで記述すると、リスト3の通りになります。

[リスト3]Composition APIで実装したVueコンポーネントの<script>部(p003-composition/src/App.vue)
<script lang="ts">
import { defineComponent, ref, computed } from 'vue'
export default defineComponent({ // コンポーネント処理内容の記述
  setup() { // コンポーネントを定義するメソッド ...(1)
    // データ ...(2)
    const no = ref(1)
    const company = ref('Apple')
    const name = ref('iPhone 13')
    const url = ref<string>('https://www.apple.com/') // 明示的にstringを指定
    const weight = ref<number>(173) // 明示的にnumberを指定
    // 算出プロパティ ...(3)
    const fullName = computed(():string => {
      return `${name.value} (${company.value})`
    })
    // メソッド ...(4)
    const getWeightText = (weight: number):string => {
      // weightはnumber型なのでtoFixedメソッドが利用できる
      return `重量:${weight.toFixed(1)} g`
    }
    // データ・算出プロパティ・メソッドを返却 ...(5)
    return {
      no, company, name, url, weight, fullName, getWeightText
    }
  }
})
</script>

 Composition APIでは、コンポーネントの定義は(1)のsetupメソッドで行います。データ(2)は、初期値を与えたrefメソッドで定義することで、双方向データバインディングが実現されます。「ref<string>」や「ref<number>」と記述することで、TypeScriptの型を明示的に指定することもできます。

 算出プロパティ(3)は、処理内容のメソッドをcomputedメソッドの引数に与えて定義し、メソッド(4)も変数として定義します。なお、算出プロパティやメソッド内でデータを参照する場合、データ変数のvalueプロパティを利用します。最後に、ここまで定義したデータ・算出プロパティ・メソッドを、setupメソッドの戻り値として返却します(5)。この一連の記述により、Composition APIを利用したリスト3は、Options APIを利用したリスト2と同じ意味となります。

 さらに、Vue 3.2からは、Composition APIの記述をシンプルにする<script setup>が利用できるようになりました。これを利用すると、リスト3の記述はリスト4の通り単純化されます。Composition APIのsetupメソッド内容(return文以外)を<script setup>タグの内側に記述するだけで、同じ動作を実現できます。

[リスト4]<script setup>を利用したVueコンポーネントの記述(p004-composition-setup/src/App.vue)
<script setup lang="ts">
import { ref, computed } from 'vue'
// データ
const no = ref(1)
const company = ref('Apple')
const name = ref('iPhone 13')
const url = ref<string>('https://www.apple.com/') // 明示的にstringを指定
const weight = ref<number>(173) // 明示的にnumberを指定
// 算出プロパティ
const fullName = computed(():string => {
  return `${name.value} (${company.value})`
})
// メソッド
const getWeightText = (weight: number):string => {
  // weightはnumber型なのでtoFixedメソッドが利用できる
  return `重量:${weight.toFixed(1)} g`
}
</script>

[補足]<script setup>にも対応したVolar拡張機能

 Volarは、Vue 3に対応したVisual Studio Codeの拡張機能です。拡張機能メニューからインストールできます(図6)

図6 Volar拡張機能のインストール方法
図6 Volar拡張機能のインストール方法

 Volar以前に有名なVue向け拡張機能としてVeturがありましたが、Veturは前述の<script setup>を正しく解釈せず、宣言した変数が未使用であるという誤った警告を表示します。

図7 Vetur拡張機能がインストールされたVisual Studio Codeでのリスト4の表示
図7 Vetur拡張機能がインストールされたVisual Studio Codeでのリスト4の表示

 一方VolarはVue 3に最適化されており、<script setup>内で宣言した変数が<template>部で参照されていることを正しく解釈します。

図8 Volar拡張機能がインストールされたVisual Studio Codeでのリスト4の表示
図8 Volar拡張機能がインストールされたVisual Studio Codeでのリスト4の表示

 前述の通り、Volarは公式で利用が推奨されており、今後Vue.js開発を行うには定番となる拡張機能です。

そのほかの変更点

 Vue 3がVue.jsのデフォルトになったため、前述のWebページURLをはじめとして、Vue.jsの各所に細かい変更があります。以下では主な注意点を説明します。詳細はブログ記事も参照してください。

npmパッケージやCDN利用時のバージョン指定

 これまでnpmで「vue」や「vue-*」というパッケージを「latest」(最新バージョン)を指定してダウンロードするとVue 2がダウンロードされましたが、これからはVue 3がダウンロードされます。Vue 2を使い続けるには、明示的にバージョン番号を指定する必要があります(リスト5)。なお、Vue CLIやcreate-vueツールで生成したプロジェクトでは、明示的にVue.jsのバージョンが指定されるので、この変更は必要ありません。

[リスト5]Vue.jsのパッケージでlatestバージョンを指定する場合の注意
// 今まではこの記述でVue 2を参照していたが、これからはVue 3を参照する
"dependencies": {
  "vue": "latest",
},
// Vue 2を参照する場合、明示的にバージョンを指定する
"dependencies": {
  "vue": "^2.6.14",
},

 同様に、CDNが提供するVue.jsのファイルを参照する場合、Vue 2を利用する場合は明示的に「@2」とバージョンを付与する必要があります(リスト6)。

[リスト6]CDNでVue.jsを参照する場合の注意
<!--今まではこの記述でVue 2を参照していたが、これからはVue 3を参照する -->
<script src="https://unpkg.com/vue"></script>
<!-- Vue 2を参照する場合、「@2」を付与する -->
<script src="https://unpkg.com/vue@2"></script>

GitHubリポジトリのパス変更

 今まで「vuejs/vue-next」のように「-next」が付与されていたVue 3関連のリポジトリは、表2の通りパスが変更されます。変更前のパスでGitHubにアクセスすると、変更後のパスにリダイレクトされます。

表2 Vue.js関連GitHubリポジトリのパス変更
No. 変更前のパス 変更後のパス
1 vuejs/vue-next vuejs/core
2 vuejs/vue-router-next vuejs/router
3 vuejs/docs-next vuejs/docs
4 vuejs/vue-test-utils-next vuejs/test-utils
5 vuejs/jsx-next vuejs/babel-plugin-jsx

まとめ

 本記事では、Vue 3がVue.jsのデフォルトになったことによる、Vue.js開発手順や技術の変化を説明しました。新しいCLIツールやVolar拡張機能、Composition APIなどにより、シンプルかつ高速にVue.js開発を行えるようになり、開発者はロジックの実装により集中できるようになりました。本連載でも次回以降、新しい手順を利用してVue.jsの実装法を説明していきます。

 次回は今回も簡単に取り上げたコンポーネントの記述・利用法を、より突っ込んで説明していきます。

参考資料

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
TypeScriptで学ぶJavaScriptフレームワーク「Vue.js」の利用法連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト  吉川 英一(ヨシカワ エイイチ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/15628 2022/03/02 11:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー