🙌

EUの法令作成システム LEOSを手軽に試せる環境を作った(docker-compose化した)。

2022/03/19に公開

EUは法令作成のIT化を進めている。

どの国でも、法令案の作成は大変だ。日本でも、昨年法案の作成にミスが見つかり問題になった。法案の作成には膨大な手作業があり、法案の複雑さも影響しミスが入り込みやすい。EUでもそこらへんの事情は同じようで、パイロットプロジェクトとして、法案作成のデジタル化を試している。

そのプロジェクトは、LEOSと呼ばれており、オープンソースで公開されている。サイトはこちら

法案作成の苦労

LEOSのプレゼン資料でも、法案作成について次のように書いている。

  • 複雑なプロセス
  • 数多くのステークホルダー
  • 紙とデジタル両方の媒体の作成(1段下げにいろいろな意味が込められる)
  • バージョン管理が出来ない(最終_ver_1.0.20.xlsxみたいなものを想像してほしい)

日本でもEUでも同じような悩みがあるようだ。

LEOSを手軽に試せるdockerを用意した

このページで、LEOS Pilot 3.1.2.zip を公開しているが、そのままzipを解凍しても、上手く動かない。例えば、テストにコケたり、shellが全て立ち上がらなかったりする。そのため、docker化して手軽に試せる環境を作った。

↓こちらがその環境になる。使い方は、下のレポジトリの使い方を見てほしい

https://github.com/shibacow/LEOS-docker

LEOSの起動

LEOSのdockerを起動して、http://localhost/leos-pilot/ui へアクセス。最初にuser,passを聞かれるが、LEOS Pilot 3.1.2.zip 内の README.txt の中に、userとpasswordの組み合わせがあるのでそれを使う。

LEOS 画面

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-repositoryannotate とやり取りする場合は、 localhost:9095localhost: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