snovaのブログ

プログラミングとか、日常のこととか、アウトプットしたほうがよいと聞いたので

電気関係の法令をpythonで収集し、Githubで共有する



【スポンサーリンク】



イントロダクション

私は普段、電気設備設計や工事に関する仕事をしています。

電気は非常に危険なもので、利用者だけではなく、作業者の安全にも気をつけないといけません。 そのため、いくつもの法令(電気事業法、電気工事士法等)や規格(JIS、JEC等)で事故防止を図っているのですが、種類や量が多く、複雑でわかりにくいです。 もっと言うと、通常は法令だけでなく社内基準等もあります。

さらに、法律が改訂されたときはどこが変更になったのか把握する必要があります。 法令を守らないと罰せられるので、どこが変わったのか知っておくべきです。

電気主任技術者やエネルギー管理士等を目指す人にも法律を知ることは重要です。 (ただ、普通は法令の本文を暗記するのではなく、参考書で勉強します。)

そこで、電気法規や電気規格についてまとめ、簡単に調べられるようにgithubに共有することにしました。

目次

現状把握

電気法規に関してはネットで調べたら、個別にわかりやすくまとめられたサイトが複数ありました。 法律本文は国のe-Govで検索できます。

最近はe-Govだけではなく、政府の事業が検索できるサイトワシントン州の法律をまとめたGithub宮崎県総合政策部統計調査課のGithub国土地理院のオープンデータなど、国や自治体がしていることをオープン化しよう、みたいなことが増えています。

仕様

最低限必要な機能をまとめました。

  • 法律の改正があったときに更新履歴がわかる
  • 二次利用できるようにxml, json等に保存できる
  • 著作権保護されている規格は本文を記載せず、リンクを貼る

以上を満たすように検討した結果、今回はGithubで共有することにします。

なお、法律の著作権の扱いは著作権法第13条に記載の通り

第十三条 次の各号のいずれかに該当する著作物は、この章の規定による権利の目的となることができない。

一 憲法その他の法令

二 国若しくは地方公共団体の機関、独立行政法人(独立行政法人通則法(平成十一年法律第百三号)第二条第一項に規定する独立行政法人をいう。以下同じ。)又は地方独立行政法人(地方独立行政法人法(平成十五年法律第百十八号)第二条第一項に規定する地方独立行政法人をいう。以下同じ。)が発する告示、訓令、通達その他これらに類するもの

三 裁判所の判決、決定、命令及び審判並びに行政庁の裁決及び決定で裁判に準ずる手続により行われるもの

四 前三号に掲げるものの翻訳物及び編集物で、国若しくは地方公共団体の機関、独立行政法人又は地方独立行政法人が作成するもの

JIS規格に関しては、公式FAQにて著作権法の保護対象となっているとの記載があるため、本文の記載はせずリンクを貼り付けるだけにしています。

法令の収集

法令とは、法律や省令などを総称した表現です。 電気設備や工事等に関係する法令を以下にまとめました。

  • 電気事業法(施行令、施行規則含む)
  • 電気設備に関する技術基準を定める省令(電技)
  • 電気設備の技術基準の解釈
  • 電気関係報告規則
  • 電気工事士法(施行令、施行規則含む)
  • 電気工事業の業務の適正化に関する法律(施行令、施行規則含む)
  • 電気用品安全法(施行令、施行規則含む)
  • 労働安全衛生法(施行令含む)
  • 消防法(施行令、施行規則含む)

上記の法令をe-Govから取得します。 取得方法は公式のPDFマニュアルを参考にしました。 なお、公式マニュアルではリクエストURIがhttpとなっていますが、すべてhttpsに置き換えないと値が返ってきませんのでご注意。 (2019/08/17現在ではAPIのバージョンは1です)

まず、法令の一覧表を取得します。

URIは

https://elaws.e-gov.go.jp/api/{Version}/lawlists/{法令種別}

です。

このとき、法令種別は以下の通りです。

1: 全法令
2: 憲法、法律
3: 政令、勅令
4: 府省令

法令の一覧表を取得するコード。

import requests

url_lawlist = 'https://elaws.e-gov.go.jp/api/1/lawlists/1' # api/{Version}/lawdata/{法令番号}
path_lawlist = 'lawlist.xml'

with requests.get(url_lawlist) as res_lawlist:
    print(res_lawlist.status_code)

    with open(path_lawlist, 'w') as f_lawlist:
        f_lawlist.write(res_lawlist.text)

取得した法令一覧の一部を示します。

<?xml version="1.0" encoding="UTF-8"?>
<DataRoot>
    <Result>
        <Code>0</Code>
        <Message></Message>
    </Result>
    <ApplData>
        <Category>1</Category>
        <LawNameListInfo>
            <LawName>明治五年太政官布告第三百三十七号(改暦ノ布告)</LawName>
            <LawNo>明治五年太政官布告第三百三十七号</LawNo>
            <PromulgationDate>18721109</PromulgationDate>
        </LawNameListInfo>
        <LawNameListInfo>
            <LawName>明治六年太政官布告第六十五号(絞罪器械図式)</LawName>
            <LawNo>明治六年太政官布告第六十五号</LawNo>
            <PromulgationDate>18730220</PromulgationDate>
        </LawNameListInfo>

...

        <LawNameListInfo>
            <LawName>行政手続における特定の個人を識別するための番号の利用等に関する法律第四十五条の二第一項の法務省令で定める情報を定める省令</LawName>
            <LawNo>令和元年法務省令第三号</LawNo>
            <PromulgationDate>20190620</PromulgationDate>
        </LawNameListInfo>
    </ApplData>
</DataRoot>

e-Govで検索できるように、法律の番号をリスト化します。 例えば、個人情報保護法なら平成十五年法律第五十七号という番号で検索がかかるので、法律の番号を

少しコードが汚いですが、取得した法令一覧XMLファイルから知りたい法令の番号を抽出していくプログラムのコードを載せます。

import xml.etree.ElementTree as ET 

ET_root = ET.parse(path_lawlist)
ET_root = ET_root.getroot()
list_all_LawName = [i.text for i in ET_root.findall('.//LawName')]
list_all_LawNo = [i.text for i in ET_root.findall('.//LawNo')]
list_elec_law =[r'電気事業法', r'電気事業法施行令']

list_LawNo = []
for i_elec_law in list_elec_law:
    if i_elec_law in list_all_LawName:
        num_LawName_index = list_all_LawName.index(i_elec_law)
        str_LawName = list_all_LawName[num_LawName_index]
        str_LawNo = list_all_LawNo[num_LawName_index]
        print(str_LawName)
        print(str_LawNo)
        list_LawNo.append(str_LawNo)
print(list_LawNo)

法令番号から実際に法令のデータを取得します。

URIは

https://elaws.e-gov.go.jp/api/{Version}/lawdata/{法令番号}

です。

コードを載せます。

law_name = [r'電気事業法']
lawnum = [r'昭和三十九年法律第百七十号']

for i_loop, i_lawdata in enumerate(law_num):
    path_lawname = law_name[i_loop]+'.xml'
    lawdata_url = 'https://elaws.e-gov.go.jp/api/1/lawdata/'+i_lawdata

    with requests.get(lawdata_url) as res_lawdata:
        print(res_lawdata.status_code)

        with open(path_lawname, 'w') as f_lawname:
            f_lawname.write(res_lawdata.text)

status_codeで確認したとき、HTTPレスポンスが406を吐き出すことがあります。 法令取得APIが特定サイズ(10MB)を超える法令の取得を制限しているためです。

回避しようと思ったら、条項の部分まで個別で取得する方法と、法令データを一括ダウンロードできるページを使う方法があります。

なお、条項まで含んだときのURIは

https://elaws.e-gov.go.jp/api/{Version}/articles;lawNum={法令番号};article={条};paragraph={項};appdxTable={別表}

です。

それでは、取得した法令データの例を以下に示します。

<?xml version="1.0" encoding="UTF-8"?>
<DataRoot>
    <Result>
        <Code>0</Code>
        <Message></Message>
    </Result>
    <ApplData>
        <LawNum>昭和三十九年法律第百七十号</LawNum>
        <LawFullText>
<Law Era="Showa" Lang="ja" LawType="Act" Num="170" Year="39">
  <LawNum>昭和三十九年法律第百七十号</LawNum>
  <LawBody>
    <LawTitle>電気事業法</LawTitle>
    <TOC>
      <TOCLabel>目次</TOCLabel>
      <TOCChapter Delete="false" Num="1">
        <ChapterTitle>第一章 総則</ChapterTitle>
        <ArticleRange>(第一条・第二条)</ArticleRange>
      </TOCChapter>

...

    <SupplProvision AmendLawNum="平成二九年五月三一日法律第四一号" Extract="true" Type="Amend">
      <SupplProvisionLabel>附 則</SupplProvisionLabel>
      <Article Delete="false" Hide="false" Num="1">
        <ArticleCaption>(施行期日)</ArticleCaption>
        <ArticleTitle>第一条</ArticleTitle>
        <Paragraph Hide="false" Num="1">
          <ParagraphNum/>
          <ParagraphSentence>
            <Sentence Function="main" Num="1" WritingMode="vertical">この法律は、平成三十一年四月一日から施行する。</Sentence>
            <Sentence Function="proviso" Num="2" WritingMode="vertical">ただし、次条及び附則第四十八条の規定は、公布の日から施行する。</Sentence>
          </ParagraphSentence>
        </Paragraph>
      </Article>
      <Article Delete="false" Hide="false" Num="48">
        <ArticleCaption>(政令への委任)</ArticleCaption>
        <ArticleTitle>第四十八条</ArticleTitle>
        <Paragraph Hide="false" Num="1">
          <ParagraphNum/>
          <ParagraphSentence>
            <Sentence WritingMode="vertical">この附則に規定するもののほか、この法律の施行に関し必要な経過措置は、政令で定める。</Sentence>
          </ParagraphSentence>
        </Paragraph>
      </Article>
    </SupplProvision>
  </LawBody>
</Law>
</LawFullText>
    </ApplData>
</DataRoot>

コード全文をgistで共有します。

日本の電気関係の法令を取得するプログラム

取得した法令データはgithubで共有します。

github.com

規格の収集

電気設備に関係する規格を以下にまとめました。

  • JIS規格(日本産業規格)
  • JEC規格(電気規格調査会規格)
  • 内線規定(需要設備における電気設備設計の規格)

※JISは日本工業規格の略でしたが、2019/07/01に日本語名が日本産業規格となりました。今後、データ等の標準化も進んでいきます。詳しくは経産省のHPで。

なお、多くの規格が民間規格なので、著作権のためGithubに上げることはできませんでした。

JIS規格

国立国会図書館のHPを見てみると、JIS規格は規格表と呼ばれる冊子を検索、閲覧するか、JISCのHPから調べることができます。

また、個人や法人が運営するサイトでも一部公開や規格の解説されています。

JEC規格

電気学会 電気規格調査会が作成している規格です。

規格の内容は公開していません。 中身を知りたい場合は電気学会のHPで冊子または電子版を購入してください。

内線規定

電気需要場所における電気設備の保安を確保するための民間規格です。 電力会社によって付録が違います。

規格の内容は公開していません。 内容を知りたい場合は電気協会のHPで購入してください。

まとめ

XMLが使いにくいので、jsonやyamlで管理したいなと思いました。 (そのうち対応します。)

規格に関しては民間主体のものが多く、著作権的な関係で本文データを扱いにくいなという印象でした。 JIS規格や内線規定は有名ですが、他にも専門的な規格が多くあるとは知らず、勉強になりました。

今後は専門的な法令や規格(省エネ法、火技解釈)も取り扱いたいと思います。

以上、記事についてミスがあれば、ご連絡ください。 また、法律のまとめ方についてご意見等ございましたら、ご教示いただけると幸いです。

今後の展開

  • データ形式の追加(json, yaml等)
  • HTML、CSSなどを使ってレイアウトを整える
  • 法律改正後自動取得
  • 電気設備に関連した新規の法律の自動取得
  • 法律名の部分検索に対応した
  • 情報システムに関連する法律(サイバーセキュリティ基本法、不正アクセス禁止法等)への展開
  • 電気通信法規(電気通信事業法、電波法等)への展開
  • 機械、建築に関連する法律(高圧ガス保安法、建築基準法等)への展開
  • 法令から遮断容量等を計算するツールの開発

参考サイト

※本記事は2019/08/17現在の法令に則り執筆しています