今回はその続きの応用的プログラム(配列・乱数・関数・Web API)について検討します。
はじめに
使用する教材
『高等学校情報科「情報Ⅰ」教員研修用教材 第3章 JavaScript版』を参考にします。
教材はこちらの文科省のページからダウンロードできます。
今回の記事では、JavaScript版の P28-31 の内容を扱います。
プロジェクトの準備
実習用のプロジェクトを作成しましょう。
スプレッドシートのコンテナバインドスクリプトを作成します。
スプレッドシート名、プロジェクト名は任意です。「応用的プログラム」などでよいでしょう。
配列
配列を用いたプログラムの例
研修用教材JavaScript版 P28-29
図表2、図表3のコードをGASで記述します。
図表2のコード
function zuhyo2() {
const a = [56, 3, 62, 17, 87, 22, 36, 83, 21, 12];
const sum = a[3] + a[7];
console.log(sum);
}
// ---結果---
// 100
図表3のコード
function zuhyo3() {
const a = [56, 3, 62, 17, 87, 22, 36, 83, 21, 12];
let sum = 0;
for (let i = 0; i < a.length; i++) {
sum = sum + a[i];
}
console.log(sum);
}
// ---結果---
// 399
演習1
<演習1> 図表3のコードを参考にして「整列 a の中の最小値を表示する」プログラムを作成しましょう。
演習1のコード
function enshu1() {
const a = [56, 3, 62, 17, 87, 22, 36, 83, 21, 12];
let min = a[0];
for (let i = 1; i < a.length; i++) {
if (a[i] < min) {
min = a[i];
}
}
console.log(min);
}
乱数
乱数を用いたプログラムの例
研修用教材JavaScript版 P29
図表4、図表5のコードをGASで記述します。
図表4のコード
function zuhyo4() {
const a = 5;
const r = parseInt(10 * Math.random());
if (a === r) {
console.log('当たり');
}
else if (a > r) {
console.log('aの方が大きい');
}
else if (a < r) {
console.log('aの方が小さい');
}
}
図表5のコード
function zuhyo5() {
const r = parseInt(10 * Math.random() + 1);
console.log(r);
}
演習2
<演習2> 上の図表 5 のコードにおいて「a と r の値を表示」するようにプログラムに追加を行い,「当たり」と表 示されているときには確かに a=r であることを確認しましょう。
”図表 5”は、図表4の間違いでしょう。
演習2のコード
function enshu2() {
const a = 5;
const r = parseInt(10 * Math.random());
console.log('a : ' + a + ', r : ' + r);
if (a === r) {
console.log('当たり');
}
else if (a > r) {
console.log('aの方が大きい');
}
else if (a < r) {
console.log('aの方が小さい');
}
}
関数
関数で分割したプログラムの例
研修用教材JavaScript版 P30
図表9のコードをGASで記述します。実行する関数をzuhyo9
に指定して実行します。
図表9のコード
function listsum(a) {
let sum = 0;
for (let i = 0; i < a.length; i++) {
sum = sum + a[i];
}
return sum;
}
function zuhyo9() {
const a = [56, 3, 62, 17, 87, 22, 36, 83, 21, 12];
const sum = listsum(a);
console.log(sum);
}
演習3
<演習3> 上の図表 9 のコードを参考にして「指定した回数 p 回 2 を加算するプログラム」を作成し,関数に分割 してください。なお引数は「繰り返す回数 p 」,戻り値は「加算した結果」としてください。
演習3のコード
function add2(num) {
let sum = 0;
for (let i = 0; i < num; i++) {
sum = sum + 2;
}
return sum;
}
function enshu3() {
const sum = add2(10);
console.log(sum);
}
Web APIの利用
Web API を利用したプログラムの例
研修用教材JavaScript版 P31
Web APIを用いたプログラムの体験として、zipcloudというサービスが提供する郵便番号検索APIを利用します。
このサービスでは、URLに調べたい郵便番号を含めたリクエストを送ることで、住所などの情報をJSON形式で返してくれます。
試しに、〒540-0002(大阪城の郵便番号)の情報を受け取りましょう。こちらのページの説明によると、下のようなURLを生成しリクエストを送ればよさそうだとわかります(ハイフン付きでもOKとのこと)。
https://zipcloud.ibsnet.co.jp/api/search?zipcode=5400002
スクリプトに組み込む前に、一度試します。任意の場所でコマンドプロンプトを起動し、curl.exe
コマンドの引数に上のURLを与えて実行します。(もしくは、ブラウザのアドレス蘭に上のURLを入力して叩いても構いません。)
curl.exe https://zipcloud.ibsnet.co.jp/api/search?zipcode=5400002
以下のような内容が返ってきたのが確認できます。
{
"message": null,
"results": [
{
"address1": "大阪府",
"address2": "大阪市中央区",
"address3": "大阪城",
"kana1": "オオサカフ",
"kana2": "オオサカシチュウオウク",
"kana3": "オオサカジョウ",
"prefcode": "27",
"zipcode": "5400002"
}
],
"status": 200
}
results
の値となる配列の中で、address1
の値が大阪府
、address2
の値が大阪市中央区
であることが読み取れます。郵便番号の数字を変えると当然取得する値も変わります。色々変えて試してみてください。
では、GASのスクリプトの中に郵便番号を調べるリクエストを組み込み、返ってきた値を表示させてみましょう。
GASでWeb APIを利用するには、UrlFetchAppクラスのfetch
メソッドを利用すればいいようです。こちらとこちらの内容を参考に、取得したレスポンスの中身を表示します。
Web APIの利用1
function apiTest_1() {
const url = 'https://zipcloud.ibsnet.co.jp/api/search?zipcode=5400002';
const response = UrlFetchApp.fetch(url);
console.log(response.getContentText());
}
// --- 結果 ---
// {
// "message": null,
// "results": [
// {
// "address1": "大阪府",
// "address2": "大阪市中央区",
// "address3": "大阪城",
// "kana1": "オオサカフ",
// "kana2": "オオサカシチュウオウク",
// "kana3": "オオサカジョウ",
// "prefcode": "27",
// "zipcode": "5400002"
// }
// ],
// "status": 200
// }
無事に取得できました。さらに、住所の情報をもっとピンポイントに取得するために書き換えます。
取得したデータをJSON.parse
でオブジェクトに変換し、必要な要素だけを取り出していきます。
Web APIの利用2
function apiTest_2() {
const url = 'https://zipcloud.ibsnet.co.jp/api/search?zipcode=5400002';
const response = UrlFetchApp.fetch(url);
const searchResult = JSON.parse(response.getContentText());
console.log(searchResult.results[0].address1);
console.log(searchResult.results[0].address2);
console.log(searchResult.results[0].address3);
}
// --- 結果 ---
// 大阪府
// 大阪市中央区
// 大阪城
欲しいデータをピンポイントで取り出すことができました。
おわりに
今回は、配列・乱数・関数・Web APIをご紹介しました。
次回は、Web APIを応用したスクリプトについて検討します。