本記事では、Vue.jsでREST APIを利用して外部サービスをアプリケーションに組み込む方法を紹介します。
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のサイトからアカウントを作成します。
ヘッダーにある「Sign IN」から「create an Account」をクリックして作成します。
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」にアクセスすると以下のように天気予報アプリケーションが表示されます。
都市名を入力して、検索ボタン実行で該当都市の天気予報の情報が表示されます。
その他
- Vuexについて。
どうやら、Vue3では状態管理をVuexではなく、よりシンプルなPiniaの状態管理ライブラリを利用するらしいです。(https://codezine.jp/article/detail/15628)
自分はvue3を利用しているので、本格開発する際にはvuexではなくPiniaを使ってみようと思いいます。
まとめ
Vue.jsでREST APIを利用する方法のまとめ
本記事では、Vue.jsでREST APIを利用して外部サービスをアプリケーションに組み込む方法を紹介しました。
外部サービスを自身のアプリケーションに組み込むことで今回紹介したような天気予報アプリを簡単に構築することが可能です。天気予報の情報以外にYouTubeAPIなどを利用することでさまざまなアプリケーションを開発することが可能となります。
本記事が皆様の参考になれば幸いです。
参考サイト
以下サイトを参考とさせていただきました。ありがとうございます。
コメント