2.6 クラウドAPIを利用する

(1/1)
クラウド上のWikipedia APIと通信するプログラム
AI生成コンテンツ / AI-generated contents
本項では、これまでのプログラムとは違う一歩を踏み出す。インターネットの向こう側にあるサービスの機能を呼び出す「クラウドAPI」を使い、見出し語を入力するとWikipediaの要約を表示するプログラムを作る。
まず、クラウドAPIとは何か、自分のPCにインストールして使うパッケージアプリケーションとは何が違うのか、無料のものと有料のものがあることを、有名なAPIの例とともに解説する。
続いて、今回利用するWikipedia API(MediaWiki API)がどのような機能を持つAPIなのかを見ていく。
そのうえで、プログラム仕様書の「## 通信」欄を、これまでの「なし」から「Wikipedia API と通信する」へ書き換える。この一文の変更によって、プログラムには新しいベネフィットと新しいリスクの両方が生まれる。その中身を確認し、リスクを抑えるための制約条件を加えたプログラム仕様書を完成させる。

目次

クラウドAPIとは

クラウドAPIとは
クラウドAPIとは
AI生成コンテンツ / AI-generated contents
大きな写真大きな写真
(1672×941 ピクセル, 156 Kbyte)
APIとは「Application Programming Interface」の略で、あるプログラムが持っている機能やデータを、別のプログラムから呼び出すための「窓口」を意味する。この窓口が、自分のパソコンの中ではなく、インターネットの向こう側にあるサーバー(クラウド)上に用意されているものを、クラウドAPIと呼ぶ。

これまで本講座で作ってきたカレンダー・電卓・オセロゲーム・Excel集計プログラムは、そのパソコンの中の閉じた環境で動くプログラムだった。つまり、機能もデータもすべて自分のパソコンの中だけで完結する。
一方、クラウドAPIを使うプログラムは、自分のパソコンの中に機能やデータを持たない。たとえば「明日の天気を教えて」「この英文を日本語に訳して」といった処理を、インターネット経由でクラウド上のサーバーに依頼し、サーバー側で処理した結果だけを受け取って画面に表示する。自分では計算や検索をせず、専門のサービスに「頼む」というイメージだ。

クラウドAPIには、無料で使えるもの有料のものがある。多くのクラウドAPIは、利用登録をすると発行される「APIキー」という合言葉のようなものを使って呼び出し、呼び出した回数に応じて料金が発生する従量課金制を採用している。ただし、多くのサービスには「1日〇回まで」「1か月〇文字まで」といった無料枠が設けられており、個人の学習や小規模な利用であれば無料で収まることも多い。有名なクラウドAPIの例を下表に示す。
有名なクラウドAPIの例
API名提供元できること料金体系
Wikipedia API(MediaWiki API)Wikimedia財団百科事典の記事検索・要約取得無料(登録不要)
Google Maps PlatformGoogle地図表示、経路検索、住所と緯度経度の変換従量課金制(カテゴリごとに月間無料リクエスト数あり)
OpenWeatherMapOpenWeather現在・予報の気象情報の取得無料枠あり(1日1,000回まで)、超過分は有料
DeepL APIDeepL高精度な機械翻訳無料プランあり(月50万文字まで)、超過分は有料
このように、同じ「クラウドAPI」という仕組みでも、サービスによって無料の範囲や課金の単位はさまざまである。Google Maps Platformは、2025年(令和7年)3月に無料枠の仕組みを「月200ドル分のクレジット」から「機能(SKU)ごとの月間無料リクエスト数」に変更しており、以前の感覚のまま使い続けると想定外の請求が発生することもあるので注意したい(Google Maps Platform の料金体系)。
今回の講座で利用するWikipedia APIは、こうした数あるクラウドAPIの中でも珍しく、APIキーの登録も料金も一切不要で使える完全無料のAPIである。次項では、このWikipedia APIがどのような機能を持っているかを詳しく見ていく。

Wikipedia APIの機能

Wikipediaの記事データはMediaWikiというシステムで管理されており、外部のプログラムから呼び出せる窓口として「MediaWiki API(Action API)」が公開されている。日本語版Wikipediaの場合、この窓口(エンドポイント)は次のURLである。

このURLに、目的に応じたパラメータを付けてアクセスすると、Wikipedia側が該当するデータをJSONなどの形式で返してくれる。今回のプログラムで使う主な機能は次の3つだ。

今回作るプログラムでは、ユーザーが入力した見出し語を「action=opensearch」または「action=query」でWikipediaに投げて検索し、該当する記事が見つかったら「prop=extracts」で要約情報を取得して画面に表示する、という流れになる。

Wikipedia APIを利用するうえで、初心者が見落としやすい注意点が2つある。1つは、意味のある「User-Agent」というヘッダー情報を送信しなければならないことだ。ブラウザやプログラムの名前・連絡先などを名乗らずに空欄や汎用的な値のままアクセスすると、Wikipedia側から「403エラー」として拒否されてしまう。もう1つは、アクセス回数に上限(レート制限)が設けられていることだ。2026年(令和8年)時点で、匿名の利用は1つのIPアドレスあたり1秒間に100リクエストまで、認証(APIキーやOAuth)を行った利用は1秒間に500リクエストまでという制限がある。今回のプログラムはAPIキーを使わないため、匿名(1秒間に100リクエスト)の枠で動く。個人が見出し語を検索する程度の使い方であれば、この上限に達することはまずないが、プログラムを作るときはこうした利用条件が存在することを覚えておきたい(Wikimedia APIs のレート制限API:Opensearch のドキュメント)。
Wikipedia API(日本語版)のエンドポイント
URL
https://ja.wikipedia.org/w/api.php
Wikipedia APIの主な機能
パラメータできること
action=opensearch入力した見出し語に近いタイトル候補を検索する。「検索語」「タイトル一覧」「説明」「URL一覧」の4つの配列が返る
action=query&prop=extracts指定した見出し語の記事から、冒頭の要約文(イントロダクション部分)を取得する
action=query&list=search見出し語だけでなく、記事本文も対象にした全文検索を行う
format=json応答結果をJSON形式で受け取る(他にXMLなども選択できる)

プログラム仕様書をつくる

インターネット通信のベネフィットとリスク
インターネット通信のベネフィットとリスク
AI生成コンテンツ / AI-generated contents
大きな写真大きな写真
(1672×941 ピクセル, 174 Kbyte)
これまで作ってきたプログラム――オセロゲーム(1.4)、Wordの差し込み(2.4)、Excelファイルの結合・集計(2.5)――は、いずれもプログラム仕様書の「## 通信」欄に「なし」と書いてきた。インターネットへデータを送らないほうが安全だからだ。ところが今回は、Wikipedia APIという外部のサービスと通信しなければ、見出し語の検索という目的そのものを果たせない。そこで初めて、「## 通信」欄を「なし」から「Wikipedia API と通信する」に書き換える。この一文の変更によって、プログラムには新しいベネフィットとリスクの両方が生まれる。

まずベネフィットである。自分のプログラムの中に百科事典のデータを丸ごと持たなくても、常に最新の情報をクラウド側から取り出せるようになる。Wikipediaの記事は日々更新されているが、その更新作業はWikimedia財団が行ってくれるので、こちら側でデータを管理・更新する手間は一切かからない。少ないコードで、大きなデータベースの恩恵を受けられるのが、クラウドAPIを使う最大の利点だ。

一方でリスクも生まれる。第一に、インターネットへの接続が必須になる。これまでの「オフラインでも動く」という前提が崩れ、通信環境がない場所ではプログラムが機能しなくなる。第二に、通信先を誤って指定したり、悪意ある入力によって想定外の通信先へ情報が送られたりする恐れがある。2.5項で解説したプロンプトインジェクションと同じ考え方で、通信という機能を持たせた時点で、外部にデータが漏れる経路が生まれることになる。第三に、外部サービスへの依存というリスクがある。Wikipedia側のAPI仕様変更やサーバー障害、あるいは前項で説明したアクセス回数の上限(レート制限)超過によって、こちらのプログラムが正常に動かなくなる可能性がある。自分のプログラムだけで完結していた今までとは異なり、相手(Wikipedia)の都合にも影響を受けるようになるわけだ。

このリスクを抑えるために、制約条件で通信先を明確に限定する。「Wikipedia API以外には通信しないこと。」という一文を制約条件に加えることで、Codexが意図せず他のサーバーと通信するコードを書いてしまうのを防ぐ。以上を踏まえて作成したプログラム仕様書(プロンプト)は次の通りである。

「## 通信」欄が変わったことに合わせて、「# 制約条件」に「Wikipedia API以外には通信しないこと。」を加え、「# 著作権表示および使用条件」にも、単に「外部と通信しない」ではなく通信先を特定した「Wikipedia API以外とのデータ通信は行いません。」という一文を加えている点にも注目してほしい。仕様書のどこか一箇所を変えると、他の箇所も整合性を保つように見直す必要がある。次項では、この仕様書をもとに実際にCodexへプログラムを作らせ、動かしてみる。
プログラム仕様書(プロンプト)
# 目標
Wikipediaの見出し語を入力すると、要約情報を表示する。

# プログラム・ファイル名 searchWikipedia.html
# プロジェクト・フォルダ作成 - プログラム・ファイル名の拡張子を除いた主ファイル名と同じ名前のサブフォルダを作成し、以降の作業はサブフォルダで行う。 - すでにサブフォルダがあれば、そのサブフォルダに移動して以降の作業を進める。
## 入力 - ユーザーは見出し語を入力する。 - ユーザーが「検索」ボタンをクリックしたら、Wikipediaを検索する。
## 処理 1)見出し語を Wikipedia API に投げて検索する。 2)見出し語があったら、要約情報を取得する。
## 通信 - Wikipedia API と通信する。
## 出力 - プログラム上部にタイトル「Wikipedia検索」、バージョン番号、製作者「(c)pahoo.org Powered by Codex」と記載する。 - テキストボックスに要約情報を表示する。 - 「コピー」ボタンをクリックすると、見出し語と要約情報をクリップボードにコピーする。
## 例外・エラー処理 - 見出し語がない、Wikipedia API にアクセスできない、無限ループに陥ったり、システム・エラーが出たときは、画面にエラー情報を表示して終了すること。
## 記録 なし。
# テスト観点・合格条件 - Codexが5つの見出し語を検索し、正常に要約を表示すれば合格。テスト結果をチャットに表示する。 - すべての処理が含まれていること。 - 前提条件、制約条件が守られていること。
# 前提条件 - 仕様で分からないことがあれば、ユーザーに質問すること。 - JavaScriptを使った1本のプログラム・ファイルにすること。 - クライアントPCのブラウザ(OSやブラウザの種類は問わない)で動作すること。 - スマホでも利用できること。 - httpサーバなどやNode.jsなどサーバ技術は使わず、ブラウザの機能で完結すること。 - コーディングは「Airbnb JavaScript Style Guide」にのっとること。 - プログラムファイルにコメントとして次の情報を記載すること。 -- プログラムの名称 -- バージョン -- 目的 -- 動作環境 -- 著作権表示および使用条件 -- インストール方法 -- お問い合わせ
# 制約条件 - Wikipedia API以外には通信しないこと。 - 外部ライブラリを使用する場合は、下記のサイトに限定すること https://cdn.jsdelivr.net/ https://cdnjs.cloudflare.com/ https://ajax.googleapis.com/ https://code.jquery.com/ https://ajax.aspnetcdn.com/ - プログラムがMIT Licenseに違反していないこと。
# 合格判定 - テスト結果を表示し、合格かどうかをユーザーに質問する。 - 質問が正しければ、以降の処理を進める。
# 簡易取扱説明書の作成 1)HTMLファイルと同じ場所に、簡易取扱説明書のテキストファイルを作成する。ファイル名は "README.txt" にする。 2)説明書には以下の項目を含める。各々の項目は "# 項目名" と表記する。 - プログラムの名称 - バージョン - 目的 - 動作環境 - 著作権表示および使用条件 - インストール方法 - 使い方 - 変更履歴 - お問い合わせ
# 著作権表示および使用条件 このプログラムは OpenAI社の Codex によって作成し、作者が動作を確認しました。 Wikipedia API以外とのデータ通信は行いません。
本アプリケーションはMIT Licenseです。 商用を含む無償利用が可能です。自由に改造できます。 再配布の際は、下記の著作権表記、およびURLと本使用条件を必ず明記してください。
Copyright by (c)studio pahoo https://www.pahoo.org/
MITライセンスについては、下記のリンク先を参考にしてください。 http://ja.wikipedia.org/wiki/MIT_License http://www.opensource.org/licenses/mit-license.php
なお、本アプリケーションの利用または改造することによって生じた得失については一切関知いたしません。また、二次利用先の組織・企業・団体の目的・内容・活動については一切関知いたしません。
# お問い合わせ ぱふぅ家のホームページ https://www.pahoo.org/ - サイト案内 - お問い合わせ
# リソース管理 1)今回の作業が、新規作成(評価用)、新規作成(配布用)、メジャーバージョンアップ、マイナーバージョンアップ、不具合修正のいずれに当たるか、ユーザーに質問する。 2)バージョン番号を次のルールで変更し、プログラムファイル、簡易取扱説明書、このプロジェクトのプロンプト(ファイル名は PROMPT.md にする)をGitにコミットする。 -新規作成(評価用)‥‥バージョン0.1.0 -新規作成(配布用)‥‥バージョン1.0.0 -メジャーバージョンアップ‥‥バージョン番号の整数部分を+1 -マイナーバージョンアップ‥‥バージョン番号の小数の1番目を+1 -不具合修正‥‥バージョン番号の小数の2番目を+1
# 配布ファイルの作成 1)プログラムファイル、簡易取扱説明書、このプロンプトを1つのZIPファイルに圧縮する。ZIPファイル名は、"プログラム主ファイル名_バージョン番号.ZIP" の形式にする。 2)完了後、作成したZIPファイルの保存場所を教える。
完成したWikipedia検索プログラム
完成したWikipedia検索プログラム

参考サイト

(この項おわり)
header