EUの法令作成システム LEOSを手軽に試せる環境を作った(docker-compose化した)。
EUは法令作成のIT化を進めている。
どの国でも、法令案の作成は大変だ。日本でも、昨年法案の作成にミスが見つかり問題になった。法案の作成には膨大な手作業があり、法案の複雑さも影響しミスが入り込みやすい。EUでもそこらへんの事情は同じようで、パイロットプロジェクトとして、法案作成のデジタル化を試している。
そのプロジェクトは、LEOSと呼ばれており、オープンソースで公開されている。サイトはこちら。
法案作成の苦労
LEOSのプレゼン資料でも、法案作成について次のように書いている。
- 複雑なプロセス
- 数多くのステークホルダー
- 紙とデジタル両方の媒体の作成(1段下げにいろいろな意味が込められる)
- バージョン管理が出来ない(最終_ver_1.0.20.xlsxみたいなものを想像してほしい)
日本でもEUでも同じような悩みがあるようだ。
LEOSを手軽に試せるdockerを用意した
このページで、LEOS Pilot 3.1.2.zip
を公開しているが、そのままzipを解凍しても、上手く動かない。例えば、テストにコケたり、shellが全て立ち上がらなかったりする。そのため、docker化して手軽に試せる環境を作った。
↓こちらがその環境になる。使い方は、下のレポジトリの使い方を見てほしい
LEOSの起動
LEOSのdockerを起動して、http://localhost/leos-pilot/ui
へアクセス。最初にuser,passを聞かれるが、LEOS Pilot 3.1.2.zip 内の README.txt の中に、userとpasswordの組み合わせがあるのでそれを使う。
LEOS ここが良い
- オープンソースで公開してくれている。
- テストケースも付いている。
- UserGuideも付いており、分かりやすい。
苦労した点
run-all.sh
で全部のサーバが立ち上がるわけではない。
そもそも LEOS Pilot 3.1.2.zip付属の README.txt には、run-all.sh
を実行すれば、サーバが全部立ち上がると書いていたが、実際に実行すると
run-all.shは
./run-annotate.sh
./run-user-repository.sh
./run-repository.sh
./run-leos.sh
./run-akn4euutil.sh
でそれぞれ、
./run-annotate.sh
mvn -Dspring-boot.run.folders=../config/target/generated-config/ spring-boot:run
./run-user-repository.sh
mvn spring-boot:run -Drun.profiles=h2
etc,etc
となっており、それぞれのサーバプロセスがバックグラウンドプロセスにならないので(全部のプロセスがフォアグラウンドのプロセスであった)、そもそもサーバが立ち上がらない。そのため、docker-composeで動かしたほうが正しい気もしたので、docker-composeで動かせるようにした。
TESTに非ASCII 文字が入っており、テストがコケる
LEOSの起動中に、次のようなエラーがあり、テストがコケた。
[ERROR] Compilation of template /root/LEOS/modules/ui/src/main/assets/scss/annex.scss failed: Invalid US-ASCII character "\xE2"
[ERROR] Compilation of template /root/LEOS/modules/ui/src/main/assets/scss/bill.scss failed: Invalid US-ASCII character "\xE2"
[ERROR] Compilation of template /root/LEOS/modules/ui/src/main/assets/scss/explanatory.scss failed: Invalid US-ASCII character "\xE2"
[ERROR] Compilation of template /root/LEOS/modules/ui/src/main/assets/scss/memorandum.scss failed: Invalid US-ASCII character "\xE2"
エラーの箇所は、意外にもコメント行のなかであった。
//
// Copyright 2021 European Commission
//
// Licensed under the EUPL, Version 1.2 or – as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence");
// You may not use this work except in compliance with the Licence.
// You may obtain a copy of the Licence at:
//
// https://joinup.ec.europa.eu/software/page/eupl
//
// Unless required by applicable law or agreed to in writing, software distributed under the Licence is distributed on an "AS IS" basis,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the Licence for the specific language governing permissions and limitations under the Licence.
//
@charset "UTF-8";
とあり、@charset "UTF-8";
の 上 の
// Licensed under the EUPL, Version 1.2 or – as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence");
の箇所 – がアスキー文字ではないそうだ。そんなバカなと思うだろう。確かに - と – は違うようだ。こちらでも同様の報告がある。
その場合、
@charset "UTF-8";
//
// Copyright 2021 European Commission
//
// Licensed under the EUPL, Version 1.2 or – as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence");
// You may not use this work except in compliance with the Licence.
// You may obtain a copy of the Licence at:
//
// https://joinup.ec.europa.eu/software/page/eupl
//
// Unless required by applicable law or agreed to in writing, software distributed under the Licence is distributed on an "AS IS" basis,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the Licence for the specific language governing permissions and limitations under the Licence.
//
とする必要があった。そんなーという感じである。
docker-compose化したため、マシンが別れて、localhost:9095 などではアクセスできなくなる。
LEOSは基本的に全てのプロセスが、同じマシンで動くことを想定している。そのため、LEOSが他のサービス、user-repository
や annotate
とやり取りする場合は、 localhost:9095
や localhost:9099
と通信することを想定している。しかし、docker-composeは仮想的に別マシンで動く想定なので、 コンテナ名に、annotate
などをつけて、 http://annotate:9099/annotate
としてアクセスしている。プロパティの箇所は modules/config/src/main/filters/leos.properties
などであるようだ。docker-compose.yml で外部から差し込んでいる。
LEOS起動時にエラーが起こることがある。再起動すると治る
まれに、
leos | 12:30:40.666 leos [main] [] WARN o.s.w.c.s.XmlWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'numberProcessorArticleNoChildren' defined in URL [jar:file:/root/LEOS/modules/web/target/leos-web-os/WEB-INF/lib/leos-services-3.1.2.jar!/eu/europa/ec/leos/services/numbering/processor/NumberProcessorArticleNoChildren.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'numberProcessorHandler': Unsatisfied dependency expressed through field 'numberProcessors'; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'numberProcessorArticleNoChildren': Requested bean is currently in creation: Is there an unresolvable circular reference?
というエラーが出るが、docker-composeを再起動すると治る。理由は分からない。
結論
- EUは法令作成のIT化を進めている
- docker化することで手軽に試せる環境を用意した。
- 色々と苦労したのでその点を書いた。
Discussion