1. Qiita
  2. Items
  3. e-Gov

e-Gov API に対応した gem 「kiji」を公開しました

  • 17
    Like
  • 2
    Comment

公開しました!

logo_kiji.png

なにそれ

e-Gov という総務省の運営する電子申請の窓口がある。
社会保険や労働保険関連の手続きを Web 上から簡単に行うための窓口だ。
これまでは役所に行って、用紙を貰って、書いて、印鑑押して、また役所に持ってく、というアナログかつ面倒だった手続きを Web 上から行うことができる。

一見便利そうなのだけれども、Windows + IE のみ対応だったり、Java プラグインのインストールが必要だったりで、結局あまり使われていなかったりする。

そこで昨年、e-Gov は API 仕様を公開し、ソフトウェアベンダ各社のクライアントから直接この手続を行えるようにした。実運用はまさにこれから。

外部連携API仕様公開(ソフトウェア開発事業者の方へ)|電子政府の総合窓口e-Gov イーガブ

kiji 公開の意図と経緯

e-Gov 外部連携 API の仕様自体は去年秋ごろに公開されていたのだけれども、

  • API の存在自体があまり知られていない
  • 個人でこの API 使う開発者は(たぶん)いない
  • 企業の開発者は情報出しにくい
  • そもそもこの API 使う企業が少ない

という状況で、開発者発信の情報が見つからず、なんとかしたかった。

API 仕様が公開されたことは素晴らしい。けれども中身は大量の PDF と Excel だ。
リクエストには署名付き XML が利用される。レスポンスも JSON ではなく XML だ。

こんなのや
SS 2015-05-11 11.02.05.png

こんなの
SS 2015-05-11 11.02.33.png

よく訓練された元 SIer(私だ)は既視感とともに軽いノスタルジーを覚えた。

経緯

e-Gov API を知る

疎通できた

愚痴る

開き直る

日本のどこかにいる同じような境遇のエンジニアと知見の共有ができると嬉しい。

kiji の使い方

利用者 ID 登録

p12 = OpenSSL::PKCS12.new(p12_file, P12_PIN)

client = Kiji::Client.new do |c|
  c.software_id   = ENV['EGOV_SOFTWARE_ID']
  c.api_end_point = ENV['EGOV_API_END_POINT']

  # 証明書 & 秘密鍵の attach
  c.cert = p12.certificate
  c.private_key = p12.key
end

response = client.register("NEW_USER_ID") # => Faraday::Response
xml = Nokogiri::XML(response.body) # => Nokogiri::XML::Document
xml.at_xpath('//Code').text # => 0(正常終了)

利用者認証

p12 = OpenSSL::PKCS12.new(p12_file, P12_PIN)

client = Kiji::Client.new do |c|
  c.software_id   = ENV['EGOV_SOFTWARE_ID']
  c.api_end_point = ENV['EGOV_API_END_POINT']

  # 証明書 & 秘密鍵の attach
  c.cert = p12.certificate
  c.private_key = p12.key
end

# 利用者認証(Access Key の取得 & 設定)
response = client.login("REGISTERED_USER_ID")
xml = Nokogiri::XML(response.body)
client.access_key = xml.at_xpath('//AccessKey').text

一括申請

p12 = OpenSSL::PKCS12.new(p12_file, P12_PIN)

client = Kiji::Client.new do |c|
  c.software_id   = ENV['EGOV_SOFTWARE_ID']
  c.api_end_point = ENV['EGOV_API_END_POINT']

  # 証明書 & 秘密鍵の attach
  c.cert = p12.certificate
  c.private_key = p12.key
end

# 利用者認証(Access Key の取得 & 設定)
response = client.login("REGISTERED_USER_ID")
xml = Nokogiri::XML(response.body)
client.access_key = xml.at_xpath('//AccessKey').text

# 一括申請
file_name = 'apply.zip'
encoded_data = Base64.encode64(File.new("data/#{file_name}").read)
client.apply(file_name, encoded_data)