六法JSONと言うサービスを作っているお話
この記事は投稿から 3 年以上経過しています。
最新の情報は各種公式ドキュメント等をご覧下さい。
この記事は N高等学校 Advent Calendar 2019 3日目の記事です。
N高 Slack に入って気が付いたら3か月も経過してました OJI です。趣味で六法JSONってのを作っているのでご紹介しようと思います。
六法JSON is 何
六法JSON は JSON 形式で法律の条文が取得できる REST API です。提供している条文はすべて e-Gov から取得してきたものです。2019/12/02 現在憲法のみ実装済みです。
例として憲法第9条を取得してみます。以下の URL に GET リクエストを投げると:
https://api.roppo-json.dev/v1/constitution/9
こんな感じでレスポンスが帰ってきます(デフォルトでインデントが設定されています)。
{
"title": "第九条",
"terms": [
{
"title": "第1項",
"sentence": "日本国民は、正義と秩序を基調とする国際平和を誠実に希求し、国権の発動たる戦争と、武力による威嚇又は武力の行使は、国際紛争を解決する手段としては、永久にこれを放棄する。",
"examples": null
},
{
"title": "第2項",
"sentence": "前項の目的を達するため、陸海空軍その他の戦力は、これを保持しない。国の交戦権は、これを認めない。",
"examples": null
}
]
}
API ドキュメント を準備しているので気になった方は確認してみてください。
なんで作ったのか
なんとなく、です。なんとな〜く憲法読んでてそう言えば法律を取得する API ってないんかな、なんてググってみたら 法令API なんてものを見つけたのですが使いにくそう(XMLやしスキーマ複雑やしなんか URL に全角混じっとるし…)。ほんじゃ自分でつくるかとなってとりあえず勢いだけで憲法だけ実装しました。
六法JSON っていうネーミングセンスは自分でも驚きましたね、優秀(自画自賛)。
今後どうしたいか
六法JSON の名前をつけたので最低でも基本六法と呼ばれる「憲法・刑法・刑事訴訟法・民法・民事訴訟法」を配信したいと思っています。他によく読みたくなる法律(著作権法とか学校教育法とか)も余力があれば実装したいです。今は刑法の実装をしているのですが 枝番号 と言う存在に頭を悩ましています。あと民法が1044条もあるので配信する形式に変換するまでが大変だったりします(もちろん手動で変換してるわけではないです、技術的なお話は次のセクションで)。
一応 HP もあるのですが、雑の極みなのでN高の愉快な仲間たちと共に改善していこうと思ってます。
技術的なお話
最後にちろっと技術的なお話を。今回ははじめて Flask を使いました。最近 Python にハマっているのでその流れで Flask をいじってみたら違和感がなかったのでそのまま採用しました。リポジトリを公開しているのでもし良かったらスtゲフンゲフン見ていってください。
Roppo-JSON/server: 六法をJSON形式でお届け
それと、法令API で取得した XML を配信用の JSON 形式にパースするスクリプトも自分で書いています。XML をそのまま JSON に変換したあと、目視でスキーマを確認してパースコードを書いています。こちらもリポジトリを公開しています。スキーマテストも準備してあるので興味がある方はぜひぜひ PR 送ってください。パースで使う処理をモジュールとして吐き出してあるので Python でコミットしていただけると嬉しいです。
Roppo-JSON/data: 法律データに関するリポジトリ
以上です、ありがとうございました。
僕の Twitter: @OldBigBuddha