midPointコントリビューション入門

著者: 田畑 義之, 株式会社 日立製作所 (GitHubアカウント: [@y-tabata](https://github.com/y-tabata))

# はじめに

IGA (Identity Governance and Administration)という分野をご存じでしょうか。

IGAとは、IAM (Identity and Access Management)分野に属し、IDM (Identity Management)分野を拡張した分野のことを指します。

![iga.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267112/247d7b06-0022-f18b-20d6-47e170a21d01.png)
出典: 「[認証と認可 Keycloak入門](https://www.ric.co.jp/book/new-publication/detail/2081)」

昨今、さまざまなIDM製品がIGA分野への進出を画策しています。
- [Okta Identity Governance: Modern, Cloud-Based IGA](https://www.okta.com/blog/2021/04/oktane21-okta-identity-governance-modern-cloud-based-iga/) 2021/4
- [Announcing a new Azure AD identity governance preview—entitlement management](https://techcommunity.microsoft.com/t5/azure-active-directory-identity/announcing-a-new-azure-ad-identity-governance-preview/ba-p/480864) 2019/4

IGA分野は上図の通り、高度な機能を必要とするため、適切に実装するのは中々大変です。そんな中、Gartnerが定義するIGAの各要素[^1]に対応する機能を持つ完成度の高いIGA製品として、midPointというOSSが注目を浴びています。

ここでは、そんなmidPointを盛り上げるべく、midPointへのコントリビュート方法をご紹介します。

本記事は、あくまで執筆者の見解であり、日立製作所の公式なドキュメントではありません。

# midPointにコントリビュートしてみよう

OSSにコントリビュートする際には、どんなOSSでもそのOSS独特のお作法に従う必要があります。midPointも例外ではありませんが、midPointのお作法を調べようとすると、以下の文がまず目に飛び込んできます。

> The fools with the tools make the rules. (ツールを持った愚か者がルールを作る。)

出典: midPointのドキュメント「[Development Guidelines](https://docs.evolveum.com/midpoint/devel/guidelines/)」

もちろん開発する上でのルールはいくつかありますが、「厳格なルールは設けない」というのが、midPointコミュニティのポリシーのようです。最初は筆者自身も、お作法が合っているのか不安になりながらのコントリビュートでしたが、数時間で反応があり、コミュニティ外部の人に対するウェルカムな雰囲気を感じました。CLAのようなものはなく、誰でも手続きなしでコントリビュートできます。

ここでは、midPointへのコントリビュートについて、主要な3つのコントリビュート方法をご紹介します。

- midPoint本体へのコントリビュート
- midPointのドキュメントへのコントリビュート
- midPointの翻訳プロジェクトへのコントリビュート

## midPoint本体へのコントリビュート

まずは、midPoint本体へのコントリビュート方法をご紹介します。

対象は、[midpoint](https://github.com/Evolveum/midpoint)リポジトリで、ライセンスはApache License 2.0とEuropean Union Public Licenseのデュアルライセンスです。midPointはSpring BootをフレームワークとしたJavaアプリケーションです。そのため、Javaの開発者にとっては比較的参入しやすいOSSかと思います。GUIにApache Wicketをフレームワークとして使用しているのが多少特徴的でしょうか(参考: [GUI Development Guide](https://docs.evolveum.com/midpoint/devel/gui/gui-development-guide/))。

まずは開発環境を整えましょう。Gitで当該リポジトリをフォークしたものをクローンします。

```
$ git clone https://github.com/<username>/midpoint
```

ビルドにはJDKとMavenが必要です(参考: [Development Environment Setup](https://docs.evolveum.com/midpoint/devel/guides/environment/))。IDEとしては、EclipseとIntelliJ IDEAを使った例が記載されていますが、IntelliJ IDEAのほうが推奨のようです。

以下はビルドコマンドの例です。テストをスキップすると、大して時間はかかりません。

```
$ mvn clean install -DskipTests=true
```

ビルドすると、dist > targetディレクトリ配下に、midpoint-<version>-SNAPSHOT-dist.tar.gz、midpoint-<version>-SNAPSHOT-dist.zipといった配布物が出来上がります。

機能追加やバグフィックスの際は、それ用のコードのみではなく、テストも実装する必要があります。基本的に単体テストと統合テストの両方が必要で、TestNGやSelenideといったフレームワークをベースとしています(参考: [Testing](https://docs.evolveum.com/midpoint/devel/testing/))。

十分にテストを実行した後、いざコントリビュートです。以下のように[midPointのJIRA](https://jira.evolveum.com/browse/MID)にチケットを切り、GitHubでチケットに紐づけたPRを出すとコミュニティの方が見てくれます。

![midpoint-jira.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267112/61305960-697c-37d9-0108-1f4f88b1666b.png)

## midPointのドキュメントへのコントリビュート

次に、midPointのドキュメントへのコントリビュート方法をご紹介します。

対象は、[docs](https://github.com/Evolveum/docs)リポジトリです。こちらは本章の冒頭より紹介している、https://docs.evolveum.com/ のサイトで公開されているWikiになります。初学者にとっては、midPoint本体よりも幾分コントリビュートしやすいリポジトリかと思います。

こちらに関しても、Gitでリポジトリをクローンし、[midPointのJIRA](https://jira.evolveum.com/browse/MID)にチケットを切り、GitHubでチケットに紐づけたPRを出すとコミュニティの方が見てくれます。

## midPointの翻訳プロジェクトへのコントリビュート

最後に、midPointの翻訳プロジェクトへのコントリビュート方法をご紹介します。

対象は、[midpoint-localization](https://github.com/Evolveum/midpoint-localization)リポジトリです。midPointは、2022年3月現在19カ国語に対応しています(もちろん日本語にも対応しています)。midPointのGUIのラベルをキーとし、各言語での翻訳結果を値として持つプロパティファイルを管理するのがこのリポジトリです。しかし、翻訳自体はこのリポジトリにコントリビュートするわけではありません。

midPointは翻訳に、[Transifex](https://www.transifex.com/)というサービスを利用しています。Transifexは、midPointのみならず、さまざまな製品やサービスの翻訳に利用されています。Transifexは、翻訳者として登録する分には、無料で利用することができます。

Transifexにユーザ登録し、[midPointの翻訳プロジェクト](https://www.transifex.com/evolveum/midpoint/)に参加してみましょう。翻訳プロジェクトへの参加が承認されると、以下のように、割り当てられた言語の翻訳作業に参加できるようになります。ドキュメントへのコントリビュートよりも、さらにコントリビュートのハードルは低いかと思います。

![transifex.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267112/242e425f-7524-15ba-8254-0b34ccffd298.png)

Transifexで翻訳した内容は、以下のようにメンテナの方によって、不定期にGitHubのリポジトリに同期されます。これによって、製品に変更内容がマージされます。

![midpoint-localization.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267112/f96edf80-9ddd-69b2-911f-b9d4f0c5567c.png)

# おわりに

いかがだったでしょうか。今回は、midPointへのコントリビュートについて、midPoint本体、ドキュメント、翻訳プロジェクトの3つに分けてご紹介しました。企業のコンプライアンス準拠への関心が高まる中、IGA製品として日々成長を続けるmidPointの注目度は、今後ますます高まっていくことが予想されます。

この機会に是非、味見をしてみてはいかがでしょうか。

[^1]: [IAM Leaders’ Guide to Identity Governance and Administration](https://www.gartner.com/en/documents/4000159) (閲覧は有料)