SIerのSEが開発・運営するOSSプロジェクト：Personium

この投稿は[Fujitsu extended Advent Calendar 2016](http://qiita.com/advent-calendar/2016/fujitsu_ext)の21日目の記事です。
なお、記事は全て個人の見解であり、会社・組織を代表するものではありません。

## はじめに

こんにちは、hideakikondoです。
Qiitaはよく調べもので活用しておりましたが、今回は初めての投稿で、初めてのAdventCalenderです。

間違いへの指摘や感想、コメント等がありましたら是非していただければ幸いです。

## 私のやっていること

富士通に入って最初の配属から、現在までずっとこの「[Personium（ペルソニアム）](http://personium.io)」のチームにいます。その中で顧客への提案などのいわゆるSIの上流をやったり、サービス立ち上げのためにjavascriptでアプリを作ったり、Webサイトを作ったり、一貫性なく様々な業務をしてきました。
現在はこのPersoniumのスクラム開発、OSS運営を担当しています。（が、できていないことは未だ多い。。）

## Personiumって何？

（これまでいろいろな説明のしかたをしてきましたが）今の言い方だと__PDS（Personal Data Store）を実装したOSS__です。

「Personal Data Storeって何だ？」という方はこちらの[動画](https://youtu.be/uBFfsCIwGq4)を見てください。
_PDSの重要性、必要性に関しても書きたいですが、ここでは割愛します。参考⇒[GDPR](https://en.wikipedia.org/wiki/General_Data_Protection_Regulation)_

ライセンスは[Apache License V2](https://www.apache.org/licenses/LICENSE-2.0)です。
GitHub プロジェクトは[こちら](https://github.com/personium/io)で、このリポジトリ上でソースコードを更新しています。

## なぜOSSか？

我々Personium Projectには、__人間中心なITを支えるオープンプラットフォームとして、デファクトスタンダードを獲る__という野心があります。
モバイルOSでいうAndroidだったり、OSでいうLinuxのようなポジションです。

このあたり、まだまだ日本に主導権があるものが無いような気がしますし、
__これから真にデファクトを目指す技術としては、プロプライエタリではなくオープンであることは必須条件だと個人的には思います。__


現に[Google](https://github.com/google)だって[Microsoft](https://github.com/Microsoft)だって、会社としてGitHubアカウント持っています。
究極的にはあらゆるソースコードはOSSで良いと思いますし、新たにマーケットを作るには__仕様策定/利用/改変に関してオープン__であることはとても重要だと思います。


## OSSとしてGitHub上で開発する

PersoniumはGitHub 上でソースコードを公開しつつ、フォーク&プルリクの形でソースを育てています。まだまだ一般的なOSSのような十分な開発スピード（例：週次でリリース、一日10コミット）には到底及んでおりませんが、チームメンバーもろとも日々実直に取り組んでいます。（[Issue](https://github.com/personium/io/issues)の消化がんばってます）

考えてみれば、入社するまでコーディング一つまともにしたことのなかった私が、今こうしてGitHubというエンジニア共通の土俵で、ソフトウェア開発をしているとは思ってもみなかったことです。

何より、自分で実装した機能が世に出て行くのは楽しいですし（使われているかは置いといて）、同時に、GitHubのコミットログはエンジニアとしての経歴の一部と見なされるようになってきつつありますので、そういった意味で、日本の老舗IT企業でもGitHub上の開発がもっと活発になれば面白い気がします！


## はじめて実装した機能

OSSとして最初の大きな機能追加である、 [V1.3.23のGoogle認証連携機能](https://github.com/personium/io/blob/master/CHANGELOG.md#1323)が、私が最初に追加実装した機能です。（助言をもらいながら。）

OpenID Connectの仕様（[Basic Client](http://openid.net/specs/openid-connect-basic-1_0.html) / [Implicit Client](http://openid.net/specs/openid-connect-implicit-1_0.html)）を熟読し、さまざまなQiitaの記事も読みこみました。こういうWebの標準仕様の理解もやってて面白いことの一つです。
さらにそのあと実装してIDTokenの検証機構とトークン発行がうまく動いたときは、やはりうれしかったです。

まだImplicitClientとしての一部フローしか実装できていない上、対応するIDプロバイダもGoogleのみなので、[こんな感じのの機能追加](https://github.com/fujitsu-pio/docs-draft-ja/wiki/OpenID-Connect-%E5%AF%BE%E5%BF%9C-%E4%BB%95%E6%A7%98Draft)も考えています。
（そもそもちゃんとOpenID Connect なのはGoogleとYahoo JAPANしかないですが。）

## OSS運営で大変なこと、課題

OSS開発、運営は楽しいこともありますが、ソフトウェア業界で素人に毛が生えたような私にとって、今後クリアしていかなければならない課題も多いです。
大きく分けると以下の3つです。

### その1：CI

スクラム開発プロセスにおいて、開発⇒自動テスト⇒リリースを高速で回すために必要なCI環境です。
品質を保ちつつ、もっと開発スピードを上げて、OSSをどんどん育て、さらにその情報を発信していくということを達成しなければなりません。
まだまだCI環境整備に対する理解度が足りてないです。

あと、ChatOps的な取り組みもしたいなーと漠然と考えています。

### その2: ドキュメンテーション、デモ

ソフトウェアの仕様の完全な理解に加え、わかりやすい言語選択センスと書ききる根性が必要です。
Personium Projectはこの点をキャッチアップできてないので、公開情報が足りていないという課題が、OSS化当初からずっとあります。
また、世界公開しているので多言語対応が必須となるため、各言語能力をそなえた協力体制の確保も必要になります。
ドキュメントが無いOSSなんて誰も使わないので、この問題は早期解決するよう取り組んでいるところです。

### その3: VI, Web戦略

VIに関しては画像制作スキルとセンス、Web戦略に関してはビジネス的な戦略性が必要です。
この部分もOSS Projectとして必要ですが、まだきちんと取り組めていません。
Webマーケティング的な素養も少しほしいなと思っています。

[Twitter](https://twitter.com/personium)
[Twitter日本語](https://twitter.com/personium_ja)
まだアイコンができていませんし、つぶやき・フォロワーも少ないです。

## Personium Projectに参加しませんか？

これまでご紹介したOSSのPersonium がオープンプラットフォームとして普及するために、世界中の様々な開発者によるコントリビューター開発も進めていきたいと思っています。
参加プロセスに関しては、いろいろと検討している最中です。公開Slackでのコミュニティ運営も視野にありますので、確定次第、情報公開できればと思っております。

__Personium Projectでは以下のような活躍のフィールドがあります。__

### 1. アプリ開発
PersoniumのAPIを使って、エンドユーザーが日々の生活で直接PDSのデータ操作するアプリを増やしたいです。
HTML5/Javascriptのアプリに限らず、iOS/Androidアプリも揃えていきたいと思っています。

__a. 標準アプリ（ホームアプリ）__
Windowsでいうデスクトップ、AndroidでいうHomeアプリにあたる、Personiumの標準機能を使うためのGUIを開発しています。サンプル実装のソースは[こちら](https://github.com/fujitsu-pio/home-app)（動くデモを鋭意準備中）

__b. 一般アプリ__
日々の生活で使うことで、Personiumにデータを読み書きする一般的なアプリです。
カメラやアルバムなどの一般的なものから、健康管理系IoTアプリ、SNSのようなものもあると盛り上がるかと思います。
a.のホームアプリから、Personiumアプリマーケットにアクセスしてインストールするような機構を想定しています。

### 2. ツール開発

1．のアプリ開発者やPDSサーバを管理する事業者、サーバ構築者が使用するツールやGUIの開発です。

例: [pcui](https://github.com/fujitsu-pio/pcui)
コマンドラインツール（Ruby実装）。開発メンバ発で作られました。

例：[UnitManager](https://github.com/fujitsu-pio/unit-mgr)
PDSサーバを管理する管理者用GUIツール

例：[ansible](https://github.com/personium/setup-ansible)
Personiumサーバを簡単に自動構築するためのスクリプト

### 3. Personiumプラグイン開発(準備中)

現在、Personium本体の開発で取り組んでいるのが、[プラガブル機構](https://github.com/personium/io/issues/28)への対応です。
eclipseプラグインのように、Personiumに拡張ポイントから機能拡張する機能を次版か次々版のリリースで実装する予定です。
リリース次第、プラグイン開発の方法も公開しますので、それに基づいての開発となります。

拡張ポイントとしては、上記のソーシャル認証連携部分をはじめ、GoogleドライブなどのWebストレージ連携部分のプラグイン機構化も計画しています。

### 4. Personium OSS本体開発

サーバサイドに当たるPersonium本体のソースコードをGitHub上で開発していきます。（現状Java実装）
実装にはOAuth2/OpenID Connect やWebDAV, ODataなどREST APIの標準仕様に基づいた外部仕様が前提となります。

OSS運営主体が策定しているロードマップに基づいてIssueがあがりますので、それを解決していただいてもよいですし、もちろん、コントリビューター主体の機能も随時PRを受け付けます。
将来的に、ブロックチェーンやAIを使ったり、あるいは他の言語での実装なども実現したら面白そうだと思います。


### 5. ドキュメント整備
ソースコードへの貢献に限らず、ドキュメント作成も様々な方に参加してほしい取り組みです。
参加フローは考え中ですが、日本語・英語ドキュメントの一層の充実化に取り組んでいる最中なので、ドキュメント整備へのご協力もWelcomeです。


# おわりに

技術ブログというよりは、OSS運営者の感想のような記事となってしまいました。
なかなか求められるスキルの幅が広い取り組みですが、世界で広く使われることを夢見て、日々取り組んでおります。

また、この記事執筆を契機に、今後、Personiumを扱う際の具体的なプラクティスをQiitaやブログ等でご紹介していければと思います。

今後とも、Personium Projectを宜しくお願い致します。