EU-FOSSA Hackathon 参加報告

# はじめに

midPoint by OpenStandia Advent Calendar 2019 の24日目は、今年の10月に参加した **EU-FOSSA Hackathon** について、その内容を共有したいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/89a72182-84d8-3304-5458-596aff27fdf1.png)

# EU-FOSSA Hackathon とは？

最初に **EU-FOSSA** について簡単に紹介しておきます。[EU-FOSSA （Free and Open Source Software Auditing）](https://ec.europa.eu/info/departments/informatics/eu-fossa-2_en)とは
EU Commission（欧州委員会）にて立ち上げられた Free / Open Source Software を支援するプロジェクトです。EU機関内で多数の Free / Open Source Software に依存している中、[2014年の OpenSSL の Heartbleed 脆弱性問題](https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%BC%E3%83%88%E3%83%96%E3%83%AA%E3%83%BC%E3%83%89) を契機に設立されました。EU内で重要と位置付けられている Free / OpenSource Software の改善を支援することを目的として、バグバウンティグコンテストなどを開催しています。 Hackathon もそういった改善のための施策の一つで、10月に開催された会は今年3回目の開催になります。

[こちらが Hackathon の Web サイト](https://eufossahackathon.bemyapp.com/)ですが、[第1回は PHP Symfony](https://ec.europa.eu/info/news/first-eu-fossa-hackathon-it-happened-2019-may-03_en) 、[第2回は Apache プロジェクトの OSS（Tomcat、Spamassassin、Karaf、PLC4X、Camel、Singa）](https://joinup.ec.europa.eu/collection/eu-fossa-2/news/eu-fossa-2-apache-hackathon)にフォーカスした Hackathonでした。そして私が今回参加した第3回は、この Advent Calendar のテーマである midPoint を含む、EU Commission で利用されている重要 OSS にフォーカスした会でした。


# 参加のきっかけ

去年から midPoint の言語メッセージの日本語化であったり、バグ報告・修正・機能追加のパッチ投稿といった活動を続けていたところ、今年の9月頃に Evolveum 社（midPoint の開発者の多くが在籍している会社）からこんなイベントあるから参加申し込みしてみない？ とお誘いいただきました。まずプレ参加申し込みを行うと（この時に、参加する OSS プロジェクト名、これまでのコントリビューション内容について記入が必要）、主催者である EU Commission 側にて各 OSS プロジェクトへの予算割り当てを決定して人数が決まり（旅費・食事・ホテル代は EU Commission 持ちなのです:blush:）、当選した場合は主催者から連絡があり正式参加登録が可能になるという流れでした。幸運にも今回選ばれまして、参加することができました。

# Hackathon 概要

今回の Hackathon は、2019/10/05（土）～ 2019/10/06（日）の2日間での開催でした。場所は [Silversquare Triomphe in Brussels](https://silversquare.eu/location/triomphe/) というベルギーのブリュッセルにあるコワーキングスペースを貸し切って行われました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/858a8c8e-c578-5cff-1524-86bad96ef643.png)

建物の中はめっちゃオシャレな空間でした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/68b7c6fe-86a2-fc89-5730-f0b128a1abf8.png)


今回の参加者数は80人以上と過去最大となり、参加者の国籍は基本的には EU から参加なのですが、アメリカ、チュニジア、南アフリカ、スリランカ、アルゼンチン、日本（自分）と EU 以外からも多数参加されていました。midPoint のグループには、Evolveum 社から CEO /共同設立者の Igor と、アーキテクト/共同設立者 の Radovan、コア開発者の Katarina と Villiam が参加し、後は各国から midPoint のコントリビューターや担いでいるソリューションプロバイダー、実際のクライアントの方も参加し、総勢15名のメンバーでした。

宿泊者は同じホテルのため、毎朝会場までの送迎バスに一緒に乗り込み連れて行ってもらえます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/36efeb73-23aa-6350-1489-d51fa7dc6a42.png)



## Day 1

初日は EU Commission の DG Informatics 副局長の Mario Campolargo 氏による EU-FOSSA プロジェクトの説明から始まり、各プロジェクトの代表者による「今回やることプレゼン」が行われました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/d169723b-af25-079f-2e69-fc1f0d84295d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/f115ee83-4dbb-5454-475c-1d7882b61161.png)

後は各プロジェクトのチームに分かれて、ひたすら Hack です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/b059a129-fb7d-5077-dc65-4674936bb7d2.png)


朝食・昼食・夕食（with ベルギービール:beers:）はすべて会場で提供でした。料理は確かイモ系が多かったような気がします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/eacc9c56-6778-97d6-ad30-e6794ff67940.png)

帰りも送迎バスでみんなでホテルに戻り、1日目終了です。


## Day 2

2日目も送迎バスで会場に向かい、朝食後はすぐに昨日の続きです。そして午後にはまた全員で集まり、各プロジェクト代表者から成果プレゼンテーションが行われました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/0953b20a-a853-6efb-4e12-a0b569ed556f.png)



# プロジェクトとテーマ

各プロジェクトのテーマは次の GitHub の Issue として登録されています。
https://github.com/eufossa/eu-hackathon-2019/issues

以下、各プロジェクトと大体どんなことが行われていたかさらりと紹介。私が参加した midPoint プロジェクトは、大規模な活用事例の共有、ディスカッションによるナレッジ共有と今後のプロダクトの方向性決めが中心でした。

- API Gateway WSO2
 - Keycloak や Gluuと並ぶ OSS の IAM の一つである WSO2 の API Gateway
 - 今回は、WSO2 API Gateway と連携したい Workflow Integration チームを支援していた
- DSS（Digital Signature Services）
 - PDFなどのドキュメントに電子署名つける OSS
 - ディスカッション中心で今後やることを議論
- Enterprise Search
 - Elastic Search 系
 - 今回は Logstash の拡張をテーマとし、機械学習との連携を試していた
- eUI
 - Augular ベースの UI コンポーネント
 - Web Componentベースの PoC の実施などをテーマにしていた
- Flux TL
 - 統合漁業データ管理プログラム（Integrated Fisheries Data Management Programme （IFDM））の Transportation Layer の実装（まだ OSS ではないがいずれ OSS で公開するらしい）
 - ディスカッション中心で今後やることを議論
- midPoint
 - 大規模な事例共有
 - ディスカッションによるナレッジ共有＆今後のプロダクトの方向性決め
- Workflow Integration
 - Camunda（Activitiをフォークして作られたワークフローエンジン）
 - Kafka 連携とか WSO2 API Gateway 連携とかをテーマとしていた
- PHP プロジェクト（PHPUnit、PHPStan、EC PHP）
 - PHP 系のプロジェクト
 - PHPStan の Generics 対応の実装や、EU Login に対応した Custom Symfony Bundle の開発とかしていた


# midPoint プロジェクトのテーマ

二日間がっつりとディスカッションするのでかなりのボリュームのテーマでした。。。

- Stories of midPoint
 - Customer success/failure stories you would like to share
 - Best practices you have adopted for midPoint projects
 - Main drivers to go for midPoint
- midPoint CLI – community contributed
 - Discussion about acceptance of the CLI contribution, hands-on experience with the author, possibilities to bundle with midPoint
- End-to-end testing
 - Community discussions, approach, lessons learned => update design and approach and implementation to the end-to-end testing
- Authorization / SSO / 2FA / credentials management
 - Community design session to take MFA integrations with midPoint to the next level
- Connectors, development, maintenance, support
 - Community discussion and approach to resolve the situations and issues around connectors (implementation, testing, automated testing environments, maintenance, responsibilities)
- Deployment best practices
 - Lessons learned from deployment projects with midpoint and life with midPoint from community. Compilation of proposals to speed-up the deployment projects, hints and tricks to get it done faster, feature gaps for optimized midPoint deployment;
 - Git versioning of configuration – how to version and automate deployment of configuration to avoid problems like OIDs changing between Dev, Stage and Prod on objects like roles. How to solve a new connector version needs changes in multiple files.
- Reporting
 - Lessons learned by community. Static vs live reporting, preference and approach.
 - Find a future way to reporting to avoid limitation and legacy of Jasper reporting.
- Governance and compliance
 - Collecting use-cases from community for the governance and compliance functionality
- midPoint studio
 - Future and approach to the community eclipse based plugins for midPoint configuration. Next generation of the midpoint IDE and a course set to midPoint studio
- Documentation
 - Community discussion how to keep documentation up-to-date, cleanups and community contributions.
- midPoint in HigherEd
 - open discussion about higher education needs to tailor midPoint for Universities, Colleges, Scientific institutions, …
- midPoint operations & maintenance
 - midPoint best practices in production, operation of midPoint, monitoring, diagnostics.
- midPoint performance
 - Future of midPoint in large deployments, approach, maintainability, technical integration architecture, bulk changes
- Roadmap
- Workflows
- subscription policy

※最後の2つは時間切れのため未実施。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/2365a78b-32e2-2f1a-e07a-e15a86e8b1c7.png)


## 印象に残った話

個人的には、E2E テスト自動化への取り組みが面白かったです。参加者の一人が [midpoint-cli](https://gitlab.com/alcibiade/midpoint-cli) という Python による実装の CLI ツールを OSS で開発していて、テスト自動化に活用されていました。また、[Schrodinger](https://github.com/Evolveum/midpoint/tree/master/tools/schrodinger) という Selenide（Seleniumラッパー）を midPoint 特化でさらにラップしたライブラリの紹介もありました。こちらは midPoint 自身の自動インテグレーションテストに利用されています。自分はテスト自動化までの取り組みまではまったくできていない状態でしたので、すごく刺激になりました。

また、Eclipse 向けのツールであったり Jasper Reporting と連携したレポーティング機能については、利用者が現状ほとんどいないということもあり、今後廃止＆他のもので代替していくという方向性も決定されました。


## 事例共有

ディスカッションだけでなく、プレゼン形式で midPoint 活用事例の共有もありました。

### EU Commision での取り組み

こちらは残念ながら資料非公開ですが、EU Commission で midPoint をどのようなアーキテクチャで利用しているか紹介がありました。特筆すべきポイントとして、その管理対象 ID 数が数百万オーダーとかなりの大規模環境でした。NRI OpenStandia では Enterprise 向けの IDM/IGA として midPoint を活用しているため、超大企業であってもその数は数十万ですので桁が1桁違います:scream:
なお、これまでにない大規模環境への適用なので、パフォーマンス改善に色々取り組んでいるというお話がありました。例えば、ID プロビジョニングも同期方式で行うのではなく、間に Kafka を挟んで非同期で行うといったアーキテクチャが紹介されていました。

### US の Internet 2 での取り組み

US の Internet 2 （ネットワーキングコンソーシアム）での活用事例の話です。こちらは下記の資料が公開されました。

- https://github.com/khazelton/tmp/blob/master/higherEd.adoc
- https://drive.google.com/a/wisc.edu/file/d/1VejY_zbZyMbxgv4I5A8Rko3G-WxQg1Ft/view?usp=sharing


マイクロサービスアーキテクチャでプラットフォーム全体を構成しているとのことで、midPoint はその1つのサービスとして利用されいました。midPoint は REST API を備えていますので、そちらをフロントエンドのアプリケーションから呼び出すような構成とされていました。
また、ここも規模が大きくやはり ID プロビジョニングは非同期処理で行いたいとのことで、メッセージングサービスが組み込まれていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/67c39a6e-b47c-a3ec-75a3-97d7a3b1d9dd.png)


## ロードマップ

最後のテーマとして、簡単にですが midPoint の今後のロードマップについても紹介がありました。

- SSO ネイティブ対応（まずは SAML 対応から）
- Kafka コネクタ
- GUI 改善
- Object Collection View 改善
- サービスアカウント管理改善
- オブジェクトアクションボタンのカスタマイズ
- Async Recon（Internet 2 で開発しているものの取り込み）
- リソースページの改善（100リソース（＝連携先）あるユーザーがいるらしい）
- Archetype を使ったフォームカスタマイズ
- パフォーマンス改善

大規模環境で得たノウハウが midPoint 本体にフィードバックされていくところが多いという印象でした。自分たちのユースケースではそこまでの大規模案件はないものの、安定性が増すのはうれしい点です。


# さいごに

今回参加してみて、midPoint 開発者・ユーザの双方に対面で会えるまたとない貴重な機会でした。midPoint コミュニティとしてもこんなに一堂に会するは初の機会とのことです（次は midPoint Meetup やりたいね！ という話がされていました）。丁度自分たちで実装しようとしていた機能を既に実現されている方にも出会えて話を聞けたりと、大変有意義な会となりました。また、今後のプロダクトの方向性（特に廃止していくものについて）を知ることができたのは、今後 midPoint を積極的に使おうとしている NRI OpenStandia にとって大変役立つ情報でした。

来年も開催されるかどうか分かりませんが、また機会がありましたら是非参加したいと思います。その時には自分達からも事例共有できるように成長したいですね・・・:muscle: