DataSpiderで適格請求書発行事業者公表サイトのWeb-API 使ってみた

## はじめに
こんにちは。すぎもんです:grinning:

今回は、2023年10月に施工が控えている「インボイス制度」（＝適格請求書発行方式）に関連するAPIを触ってみました。制度の詳細内容は省略しますが、部分的にざっくりいうと、適格請求書発行事業者として登録し、適格請求書を発行して、しっかり電子データとして保存しておきましょう、そのために必要な仕組み（システムなど）は用意しておきましょう。といった制度です。今回はその中の「適格請求書発行事業者としての登録情報」に関連するAPIです。

## 適格請求書発行事業者公表サイトとは
いわゆる、インボイス制度（＝適格請求書発行方式）に関連したシステムです。消費税法の規定に基づき、適格請求書発行事業者情報（氏名や登録番号など）を公表していて、それらの情報がインターネット検索できるように国税庁が用意したサイトになります。

提供しているWeb-API機能では、利用者のシステムからインターネットを経由して、簡単なリクエスト（REST方式）を送信することで、指定した番号や期間の情報が取得できます。取引先から受け取った請求書等に記載された登録番号が有効かの確認に利用します。
[（ご参考）国税庁適格請求書発行事業者公表サイト](https://www.invoice-kohyo.nta.go.jp/index.html)

## 今回やること
今回はDataSpiderを使って、[適格請求書発行事業者公表サイト](https://www.invoice-kohyo.nta.go.jp/index.html)から、<strong>「登録番号」と「日付」を指定して情報を取得</strong>　してみます。

## 事前準備（Web-APIの準備）
DataSpiderとつなぐための事前準備として、適格請求書発行事業者公表システムのWeb-APIを準備します。

国税庁では、利用者が構築するシステムのインタフェース検証テストのため、
検証環境を提供しています。今回はその環境を利用します。

サイトTopページにある「ダウンロードWeb-API」⇒「適格請求書発行事業者公表システムWeb-API機能」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/e96d84be-eda3-4962-4371-979dd416ac41.png)
画面遷移後、下方に画面スクロールして、
「Web-APIの検証」⇒「Web-API検証環境の提供について」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/1efb3c28-3f3d-5b30-bafa-467d691011d8.png)
このページで国税庁が提供する検証環境の概要や利用方法について確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/3b9611ac-54b9-f272-8a9b-b5cdf6c86e64.png)
適格請求書発行事業者公表システムWeb-API検証環境を利用するために、国税庁から発行されるアプリケーションIDが必要です。

:::note warn
アプリケーションIDは、DataSpiderの設定の時に必要なのでメモしましょう。
:::

ページ内に添付された設定方法などの記載がある下記の資料を参照の上、
検証内容に該当する情報を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/6874878d-5cb9-5f6e-79e0-cae2d75e9a10.png)
今回の検証での確認対象は、
<strong>「登録番号」と「日付」を指定して情報を取得する機能</strong> です。

「登録番号と日付を指定して情報を取得する機能」について、リクエストフォーマット（仕様）は、下記の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/8bda51b0-466e-8267-65fd-d6735248b6c3.png)
条件は下表の項目について、各項目ID に対応する項目値を「項目ID＝項目値」という形式でセットし、各条件を「&」でつなぐことで設定できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/767d3097-f1a0-e7ef-7b99-0bc5bda8c9a9.png)

以上の確認内容を踏まえて、DataSpiderの設定をしていきましょう。

## DataSpiderの設定（スクリプト変数の作成）
始めに、任意の名前でプロジェクトを作成して、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/6e85b155-ca62-5a6b-525a-2a77aa631a47.png)
スクリプトを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/8809aa1f-6f30-dfe2-44cf-9fb3de6b91e0.png)
デザイナ画面の表示は下記になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/97dad488-e0a5-3257-0348-dbfa32460396.png)
また、スクリプト内の処理で使うための「スクリプト変数」を作成しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/bb6dd305-4fb6-e6fc-3a9b-c2f15104b8a6.png)
スクリプト変数は、下記の通り、設定します。
　　変数名① 　：　`アプリケーションID`
　　変数型 　　：　`文字列型`
　　初期値 　　：　`XXXXXXXXXXX`（※国税庁から通知されたアプリケーションID）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/d035e2d6-5b00-bbf9-285c-cbccc3304422.png)
同様の手順で、下記の通り、2つのスクリプト変数を作成します。

　　　・変数名②　 ：　`登録番号`
　　　・変数型　　：　`文字列型`
　　　・初期値　　：　`T000000000XXXX`（XXXXは適切な数値を設定してください）
　　
　　　・変数名③　 ：　`判定基準日`
　　　・変数型　　：　`文字列型`
　　　・初期値　　：　`2023-12-01`
以上、3つのスクリプト作成が完了しました。

## DataSpiderの設定（GET実行処理の設定）
次に、DataSpiderのデザイナ画面右側にある「ツールパレット」から、[ネットワーク] - [REST] - [GET実行]のアイコンを、デザイナ中央にドラッグ＆ドロップして、設定画面を開きます。
「GET実行処理」の名前は、`国税庁Web-API（valid）` とします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/d10fd916-b3b4-0a40-f22b-eb7f793d1323.png)
「接続先」の設定をします。接続先のプルダウンリストから【追加】を選択します。
この設定では REST での接続先の URLを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/01944be6-ca2a-62e7-b4f1-ba7a4dd1921a.png)


下記のように設定して、完了を選択しましょう。
「接続テスト」を押下し、入力したURLがDataSpiderと通信できる状況か確認します。
　　　・名前　　：　`国税庁 Web-API`
　　　・URL　　 ：　`https://kensyo.invoice-kohyo.nta.go.jp/1/`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/ed96637e-4d01-9682-bb24-e1260f86c86b.png)
次に、「パス」は、「`valid`」と設定し、「クエリパラメータ」を、下記の通り設定します。
　　　・名前①　　：　`id`　　　　値①　：　`${アプリケーションID}`
　　　・名前②　　：　`number`　　値②　：　`${登録番号}`
　　　・名前③　　：　`day`　　　 値③　：　`${判定基準日}`
　　　・名前④　　：　`type`　　　値④　：　`11`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/b5b15ba5-9832-75f2-38c4-e2f8c5b61213.png)
<font color=blue>※「クエリパラメータ」は下記の表を参照して設定します。</font>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/767d3097-f1a0-e7ef-7b99-0bc5bda8c9a9.png)

:::note warn
<strong>”パス”</strong>は、「接続先」設定で指定した【URL】の後ろに付加され、
最終的な endpoint となります。
また、DataSpiderの変数は、<strong>${スクリプト変数名}</strong>と記載します。
:::

以上で、「必須設定」タブの入力は完了です。

:::note info 
<strong>＋α情報</strong>
「スクリプト変数」の入力は、入力欄右端をダブルクリックすると「▶」が表示され、一覧から選択することで設定することも可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/1be70539-3134-daf9-571d-81e2e2740712.png)
:::

次に、「レスポンス設定」タブの設定です。
ここでは、リクエストに対するレスポンスをどのように扱うかを設定します。
ファイルパスは、任意のパスを指定してください。
　　　・データ出力先　：　`ファイル`
　　　・ファイルパス　：　`/data/インボイス/test_response.xml`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/a256fa47-f8b9-5298-b383-d8f816caab99.png)
以上で、DataSpiderでの設定は完了です。

## DataSpider設定（スクリプトの完成）
最後に、デザイナ上のStart/Endアイコンと、GET実行アイコンをドラッグ＆ドロップでつなげます。「Start」アイコンを「国税庁 Web-API（valid）」につなげ、「国税庁 Web-API（valid）」アイコンを End アイコンにつなげます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/a2fc5d64-4854-6c58-4ee0-28d29458c3d9.png)
スクリプトの完成です。

## スクリプトの実行
デバック実行して、実行結果を確認してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/2015470e-0411-93db-d172-6a6636f6044e.png)
正常終了を確認したら、DataSpider エクスプローラで、スクリプト実行前後での実ファイルを確認します。

【スクリプト実行前】
DataSpiderのエクスプローラの「/data/インボイス」フォルダには何もありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/196534e6-9710-f446-1b0c-d5692c013bd6.png)
【スクリプト実行後】
DataSpiderのエクスプローラの「/data/インボイス」フォルダに指定ファイル「`test_response.xml`」が作成されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/7ff4a5e7-f03c-83d7-7520-791973d0e1f6.png)
デバック実行が正常に終了すると、指定した`/data/インボイス フォルダ` 内に、
`test_response.xml` が作成されていることが確認できました。

指定した「登録番号」の公開情報がファイル内にあるか確認します。
下記の通り、実ファイル内に登録番号と登録関連情報が記されており、成功です！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/d74213fd-2506-159c-15e7-0c2b478cfae2.png)

## 最後に
今回は、「DataSpiderで適格請求書発行事業者公表システムのWeb-API 使ってみた」でした。いかがでしょうか？別記事にもあるGET実行ではありますが、「クエリパラメータ」を複数指定して情報を取得する方法をご確認いただけたかと思います。

また、冒頭お伝えした通り、適格請求書発行事業者公表サイトは、「取引先から受け取った請求書等に記載された登録番号の有効性を確認する」ことが主目的です。今回の記事で使ったAPIを利用し、請求書情報含む取引先の情報を入力データとして、DataSpiderで登録番号の有効性を判断し、無効な取引先一覧をファイル化する…など、まだまだ色々とできそうですね。

是非、本記事を参考にDataSpiderを触ってみてください。
このブログでは、今後も様々な記事を投稿していきたいと思います。
ここまで読んでいただいた皆さん、ありがとうございました。それでは、また！