Vue.jsでREST APIを利用する方法

アプリケーション開発


本記事では、Vue.jsでREST APIを利用して外部サービスをアプリケーションに組み込む方法を紹介します。

Z-A-K-I
Z-A-K-I

Vue.jsでREST APIを使って世の中のサービスを自分のアプリケーションに組み込みたい!

と、思ってる方におすすめです。

本記事では、以下のことを紹介してます。

  • REST APIを利用するために必要なライブラリ
  • 天気予報サービス「WeatherAPI」を利用するための準備
  • REST APIを利用した天気予報アプリのコードの紹介

本記事ではREST APIの通信先としてOpenWeatherMapが提供しているWeatherAPIを利用した天気予報アプリの開発方法を手順を追って紹介します。

REST APIを利用して外部サービスから情報を取得し、画面上に天気を表示するシンプルながらも実用的なアプリケーションを作成する記事となっています。

Vue.jsの基本からaxiosの利用方法、Vuexの状態管理まで、ステップバイステップで解説しています。

Vue.jsを開発するための開発環境の構築・アプリケーションの実行方法については、以下の記事で紹介してますので、環境の作り方から知りたい方はこちらを参照ください

作成するアプリケーション

本記事では、天気予報を扱っている外部サービス業者から、REST APIを利用して天気予報情報を取得するアプリケーションを作成します。

外部サービスは「OpenWeatherMap」の「WeatherAPI」を利用します。この外部サービスから天気予報情報を取得して、天気の情報をVueで作成した画面上に表示します。

ライブラリのインストール

今回のアプリケーションを作成するための必要なライブラリを記載します。

REST 通信用ライブラリ

REST APIでREST通信するために、axios、または、Fetch APIが必要となります。

どちらも同じREST通信のための技術ですが、個人的にaxiosの方が高機能と思ってます。両者の違いは以下となります。

  • fetch API・・・ブラウザAPI(ブラウザ標準実装されたAPI)
  • axios・・・HTTPクライアントライブラリ

fetch APIはブラウザ標準の機能、axiosは追加インストールが必要な機能です。そのため、axiosの方がfetchAPIよりコード量が少なく書けます。コード量が少なく済むと言うことは生産性につながります。

どちらを採用するかはプロジェクトによって、ケースバイケースですが、今回はaxiosを使ってアプリケーションを作成していきます。

Vuex.js

Vue.jsアプリケーションのための「状態管理パターン+ライブラリ」です。コンポーネントがdataにアクセスできるようにした集中型のストアのライブラリです。

Vue.jsを使う上で必須ライブラリと思います。今回は簡単なアプリケーションなので不要ですが今後のことを見据えてインストールしておきます。

Vue.jsの用語について簡単に記載します。

  • ストア
    vuexアプリケーションの中心にあるものです。公式サイトでは以下のように記載されてます。

Vuex アプリケーションの中心にあるものはストアです。”ストア” は、基本的にアプリケーションの
状態(state) を保持するコンテナです。

  • ステート
    アプリケーションで唯一の状態管理を行うオブジェクトです。コンポーネント中に表示するデータの取得元となります。
  • ミューテーション
    アプリケーションのストアの状態を唯一変更できる部分です。Vue.jsでは基本的に、ミューテーション以外でステートの値を操作することは許されていません。

axiosのインストール

axiosは以下コマンドでインストールします。Vue.jsではnpmを利用してライブラリをインストールします。

npm install axios

プロキシ環境でnpmを使う場合は、以下のコマンドを先に実行しプロキシサーバの情報を設定する必要があります。

call npm -g config set proxy "http://xxx.xxx.xx.xxx:8080/"

補足ですが、axiosはライブラリインストールせずにCDNでも利用することが可能です。CDNを利用する場合はプログラムの対象ファイルに以下のインポート文を記述します。

<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js" />

vuex.jsのインストール

以下コマンドでインストールします。

npm install vuex

アプリケーション作成

OpenWeatherMapのWeatherAPIを利用するための準備

外部サービスを利用するには多くの場合、利用する外部サービス上にアカウントの登録が必要です。WeatherAPIも例外ではなくアカウントの登録が必要です。

以下手順でWeatherAPIを利用するための準備を行います。

アカウント作成

OpenWeatherMapのサイトからアカウントを作成します。

https://openweathermap.org/api

ヘッダーにある「Sign IN」から「create an Account」をクリックして作成します。

image.png

API Keyの取得

画面ヘッダーにある自分の名前のところの「My API Key」からAPIを利用するためのKeyを取得します。

ここで取得したKeyを利用して、プログラムから天気予報情報を取得します。

プログラム開発

Vue.jsでREST APIで天気予報情報を取得した天気予報アプリのコードは以下となります。

ChatGPTで作成してもらったコードは以下です。appIdは上記で取得したAPI Keyを設定してください。

<template>
  <div class="container">
    <h1>天気予報アプリ</h1>

    <div class="search-box">
      <input type="text" v-model="cityName" placeholder="都市名を入力してください" />
      <button @click="getWeatherData()">検索</button>
    </div>

    <div class="result" v-if="weatherData">
      <h2>{{ weatherData.city.name }}の天気:</h2>
      <ul>
        <li>
          <p>{{ formatDate(weatherData.list[0].dt) }}</p>
          <p>{{ weatherData.list[0].weather[0].description }}</p>
          <p>最高気温: {{ (weatherData.list[0].main.temp_max - 273.15).toFixed(1) }}℃</p>
          <p>最低気温: {{ (weatherData.list[0].main.temp_min - 273.15).toFixed(1) }}℃</p>
        </li>
        <li>
          <p>{{ formatDate(weatherData.list[1].dt) }}</p>
          <p>{{ weatherData.list[1].weather[0].description }}</p>
          <p>最高気温: {{ (weatherData.list[1].main.temp_max - 273.15).toFixed(1) }}℃</p>
          <p>最低気温: {{ (weatherData.list[1].main.temp_min - 273.15).toFixed(1) }}℃</p>
        </li>
      </ul>
    </div>

    <div v-if="errorMessage">{{ errorMessage }}</div>
  </div>
</template>

<script>
  import axios from "axios";

  export default {
    name: "App",
    data() {
      return {
        cityName: "",
        weatherData: null,
        errorMessage: "",
      };
    },
    methods: {
      async getWeatherData() {
        try {
          const response = await axios.get(`https://api.openweathermap.org/data/2.5/forecast?q=${this.cityName}&appid=aaaa`);
          this.weatherData = response.data;
          this.errorMessage = "";
        } catch (error) {
          console.log(error);
          this.errorMessage = "天気情報を取得できませんでした。";
          this.weatherData = null;
        }
      },

      formatDate(dateString) {
        const date = new Date(dateString * 1000);
        const year = date.getFullYear();
        const month = ("0" + (date.getMonth() + 1)).slice(-2);
        const day = ("0" + date.getDate()).slice(-2);
        return `${year}/${month}/${day}`;
      },
    },
  };
</script>

<style>
  .container {
    display: flex;
    flex-direction: column;
    align-items: center;
    height: 100vh;
    background-color: #eee;
  }

  .search-box {
    margin-top: 40px;
    display: flex;
    justify-content: center;
    align-items: center;
  }

  input[type="text"] {
    padding: 10px;
    width: 200px;
    font-size: 16px;
    border-radius: 5px 0 0 5px;
    border: none;
    outline: none;
  }

  button {
    padding: 10px;
    font-size: 16px;
    color: #fff;
    background-color: blue;
    border: none;
    border-radius: 0 5px 5px 0;
    cursor: pointer;
  }

  .result {
    margin-top: 40px;
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    background-color: #fff;
    padding: 20px;
    box-shadow: 0 2px 5px gray;
    border-radius: 5px;
  }
</style>

起動

プロジェクトのディレクトリまで移動し、以下コマンドを実行するとアプリケーションが起動します。

npm run serve

「http://localhost:8080」にアクセスすると以下のように天気予報アプリケーションが表示されます。

都市名を入力して、検索ボタン実行で該当都市の天気予報の情報が表示されます。
image.png

その他

  • Vuexについて。
    どうやら、Vue3では状態管理をVuexではなく、よりシンプルなPiniaの状態管理ライブラリを利用するらしいです。(https://codezine.jp/article/detail/15628)
    自分はvue3を利用しているので、本格開発する際にはvuexではなくPiniaを使ってみようと思いいます。

まとめ

Vue.jsでREST APIを利用する方法のまとめ

本記事では、Vue.jsでREST APIを利用して外部サービスをアプリケーションに組み込む方法を紹介しました。

外部サービスを自身のアプリケーションに組み込むことで今回紹介したような天気予報アプリを簡単に構築することが可能です。天気予報の情報以外にYouTubeAPIなどを利用することでさまざまなアプリケーションを開発することが可能となります。

本記事が皆様の参考になれば幸いです。

参考サイト

以下サイトを参考とさせていただきました。ありがとうございます。

Vue + VuexでREST APIを叩いてリスト表示する方法 - Qiita
1. はじめにだいぶ前にReact + ReduxでREST APIを叩いてリスト表示する方法という記事を書いたのですが、実際自分はVueをよく使うので、Vueでも同じことできるよっていうのを書い…
axiosの基本的な使い方 - Qiita
#axiosとはHTTP通信(データの更新・取得)を簡単に行うことができる、JavaScriptのライブラリ。APIを提供するクラウドサービスに対して、データを送受信することができる。###イ…
Fetch APIとaxiosの違い - Qiita
HTTPメソッドFetch APIFetch APIはmethod:"POST"等と記述する必要があります。export default function Sample () { const …
Visual Studio Code で Microsoft Edge をデバッグする - Microsoft Edge Development
組み込みのデバッガーを使用して、Visual Studio Code から Microsoft Edge をデバッグできます。
Debug Browser Apps using Visual Studio Code
The Visual Studio Code editor includes browser debugging support. Set breakpoints, step-in, inspect variables and more.

https://v2.ja.vuejs.org/v2/cookbook/debugging-in-vscode

この記事を書いた人
z_a_k_i

z_a_k_iと申します。

富山でITエンジニアとして働いています。
0歳児と3歳児を持つ30代メンズです。

このブログでは、以下の内容を紹介しています。

 ⚫︎アプリケーション開発
 ⚫︎富山県の情報発信

皆様に役立つ内容を紹介できるよう精進していきますので、
どうぞよろしくお願いします。

z_a_k_iをフォローする
アプリケーション開発

コメント