帝国議会の議事録はAPIキーなしで引ける

戦前の鉄道の話を調べてると、二次資料の孫引きばかりでうんざりすることがある。誰かが書いた本を誰かが要約して、それをブログが要約する。元の議事録に何て書いてあったのかが一向に出てこない。

で、一次資料のほうが実はAPIで引けると知って全部叩いてみた。国会会議録、帝国議会会議録、朝鮮総督府官報。前の2つはAPIキーすら要らない。登録も申請も無しでJSONが返ってくる。

国会会議録

まず国立国会図書館の国会会議録検索システム⁽¹⁾。仕様書がそのまま公開されてて、認証は無い。

エンドポイントは3種類ある。会議単位の簡易情報を返す meeting_list、会議単位で全文まで返す meeting、発言単位で返す speech だ。recordPacking にjsonを指定するとJSONで返ってくる。パラメータは any にキーワード、maximumRecords に件数、from と until で期間を絞る。

収録は第1回国会の1947年5月から現在まで。試しに鉄道で引いたら21,896件出てきた。各発言に発言IDと発言者名と本文へのURLが付いてくるので、そこから全文まで辿れる。

この件数が地味にすごい。戦後の国会で鉄道について誰が何を言ったかが、全部機械で読める形で置いてある。ローカル線の廃止について地元選出議員が何を主張したか、みたいな話を、伝聞ではなく発言そのもので追える。

帝国議会会議録

戦前を見たいならこっち。帝国議会会議録検索システム⁽²⁾で、設計は国会会議録とほぼ同じだ。

違うのはエンドポイントのパスだけで、api の次に emp が入る。meeting_list なら /api/emp/meeting_list になる。パラメータの作りは共通なので、国会会議録用に書いたコードのURLを差し替えるだけで動く。

収録は1890年から1947年まで、貴族院と衆議院の両方。朝鮮総督府と鉄道で引いたら1,933件で、いちばん古い例が1911年3月18日の貴族院本会議だった。戦前の議事録なんて画像しか無いと思ってたんだけど、テキスト化されてキーワードで引ける。

ひとつ注意があって、環境によっては403が返る。手元のコマンドラインからは弾かれて、ブラウザ相当の経路からだと通った。UAを偽装しても駄目だったので、UAだけの判定ではなさそうだ。サーバから叩くなら先に疎通を確かめたほうがいい。

朝鮮総督府官報

3つめが朝鮮総督府官報で、これは韓国側にデータベースが2系統ある。

ひとつが国立中央図書館の朝鮮総督府官報活用システムで、原本の画像ビューアだ。もうひとつが国史編纂委員会の韓国史データベース⁽³⁾で、前者を土台に法令と広告を足して分類を整理し直したもの。日付別と分野別で辿れて、原文の画像は前者のビューアに飛ぶ。実質こっちが上位互換になる。

収録は1910年8月29日から1945年8月30日まで、号外込みで約12,000号。公式のオープンAPIも公共データポータルにあるけど、こっちは会員登録と利用申請が要る。

抽出粒度の癖

で、この官報DBには面白い癖がある。分野によって抽出されてる細かさが全然違う。

告示や訓示は番号と記事名と日付しか入ってない。本文を読みたければ画像を開くことになる。ところが叙任及辞令と褒賞だけは、人名も日付も全部テキストに抽出されてる。誰がいつどの役職に任じられたかが検索できる。

理由は構築の経緯にある。もともとこのDBは2007年から2008年にかけて親日反民族行為真相糾明委員会が作ったもので、目的が個人の行跡の認定作業だった。だから人事と叙勲は網羅的に抽出されて、それ以外は浅い。データベースの粒度は、それを作った動機の形をしている。

使う側からすると、人事の追跡には異常に強くて、他の分野は原本を読む前提だと思っておけばいい。逆に言えば、植民地期の官僚が朝鮮と本土をどう行き来したかみたいな調査には向いてる。

組み合わせると

この3つが揃うと何ができるか。

たとえば帝国議会で朝鮮の鉄道について発言した議員を拾って、その時期の官報の人事と突き合わせる、みたいな横断調査ができる。議会で何が議論されて、その後どういう人事が動いたか。片方だけ見てると分からない繋がりが出てくる可能性がある。

実際にやってる例はほとんど見当たらない。言語が日本語と韓国語に分かれてて、APIの作りも別で、片方は申請が要る。この面倒さが横断を止めてるんだと思う。

検索語の作り方

APIが叩けるようになると、次に効いてくるのが検索語のほうだ。

戦前の議事録を引くときは、当時の言い回しで探さないと当たらない。今でいう路線が当時は別の呼び方だったり、組織の名前が違ったりする。鉄道省と運輸通信省と運輸省では時期が違うので、探したい年代に合わせて語を選ぶ必要がある。

それと旧字体と新字体の扱いは実際に叩いて確かめたほうがいい。システムによって内部で正規化してることもあれば、そのまま持ってることもある。両方の表記で投げて件数を比べれば、どちらの挙動なのかが分かる。件数が同じなら正規化されてるし、片方だけ多いなら生のまま持ってる。

件数を比べるだけなら1リクエストで済むので、本格的に取りに行く前にこの確認をやっておくと無駄が減る。

件数の分布で見る

全文を読むのは無理でも、件数の分布を見るだけで分かることがある。

ある語が国会で言及された回数を年ごとに数えると、その話題がいつ政治のテーブルに乗ったかが山として出る。国鉄の分割民営化とか、整備新幹線とか、廃止された路線の名前とか、何でも試せる。読まなくても件数だけで時系列が描けるのが、この手のAPIの一番おいしいところだと思う。

期間パラメータがあるので、年ごとにリクエストを投げて件数だけ拾えばいい。全文を取る必要がないぶん軽い。

ただし注意があって、議事録の総量そのものが年によって違う。会期の長さも会議の数も一定じゃないので、生の件数だけ見ると開会日数の多い年が勝つ。ちゃんとやるなら、その年の全発言数で割って比率にしないといけない。分母もAPIで取れるので手間ではない。

叩くときのマナー

キーが要らないからといって連射していいわけではない。

取得件数の上限は仕様書に書いてあるので、それを超える取得は分割して順に投げることになる。間隔を空けて、取ったものは手元に保存して、同じリクエストを二度投げないようにする。当たり前の話だけど、年ごとのループを回すと簡単に数百リクエストになるので、書く前に総数を見積もっておくといい。

公開されてる一次資料が無料で機械可読なのは、当たり前ではなく維持されてる状態だ。潰さない使い方をしたい。

やってみて

一次資料が引けるようになると、調べものの体感がかなり変わる。今まで本で読んで知ってた話が、実際の発言を読むと文脈が違ったりする。要約された時点で落ちてる情報が結構ある。

あと単純に、キーワードひとつで2万件返ってくるのが気持ちいい。全部は読めないんだけど、件数の分布を年代別に出すだけでも何かが見える。鉄道という語が国会で何回出たかを年ごとに数えたら、国鉄の分割民営化の前後で山ができるはずだ。そういう遊びができる。

APIキーが要らないというのがとにかく大きい。思いついたその場で叩けるので、調べものの敷居が下がる。国会図書館のこれは、もっと知られていい。