情報銀行のプラットフォームとして利用できるかもしれないPersonium（PDS） を検証してみる １ ＜はじめに＞

#オープンソースのPDSである「Personium」を使って何ができるのかを検証する。

##１．そもそもPDSってなんなんねん？

[Wikipedia：パーソナルデータサービス（パーソナルデータストア）](https://ja.wikipedia.org/wiki/%E3%83%91%E3%83%BC%E3%82%BD%E3%83%8A%E3%83%AB%E3%83%87%E3%83%BC%E3%82%BF%E3%83%BB%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9)
>個人がパーソナルデータをセキュアかつ構造化された方法で保存、管理、配備できるようにするサービスである。これは、ユーザにパーソナル情報（例： 関心事、連絡先、関係、嗜好、友人）をコントロールする中心点を提供する。このサービスによって管理されるユーザの属性情報は、リポジトリに保管されたり、複数に分散された外部リポジトリに保管されたりする。PDSにある属性情報は、API経由でアクセスされる。同一のPDSのユーザには、他のユーザと選択的に属性情報の集合を共有する可能性がある。

###難しくて分からん…
####でも「セキュアかつ構造化された方法で保存、管理、配備できるような機能が提供されるサービス」であることは分かった。


##２．じゃ、Perosoniumとはなんなんねん？
[オープンソースのＰＤＳサーバソフトウェア](https://personium.io/ja/index.html)
>Personiumは、様々な端末の様々なアプリからデータを読み書きできる分散PDSサーバです。電子カルテからゲームまで、様々なアプリデータをホストできるBaaSとしての実力に裏打ちされた柔軟性をもっています。Personiumは遠大な理念・ビジョンを持ちながらも、豊富な実績をもったソフトウェアです。

###簡単すぎて分からん…
####でも「様々な端末の様々なアプリからデータを読み書きできるソフトウェア」であることは分かった。


##３．「Personiumサービス」もある（あった…）
[FUJITSU Cloud Service for OSS「Personiumサービス」ご紹介](http://jp.fujitsu.com/solutions/cloud/k5/document/pdf/k5-personium-service-function-overview.pdf)
>お客様のPDSビジネスを支援するサービスです。PDSビジネスに必要なデータ領域、データアクセス管理、データ領域へのファイル・データアクセス機能をRESTfulなWebAPIで提供します。PDS事業者はPersoniumサービスを利用することで、迅速にPDSビジネス向けの基盤を構築し、利用者に対しPDSサービスを提供可能です。

###このサービス資料で、ようやくPersoniumがどんなことができるのか、利用イメージが分かったぞ。
####しかし現在は新規の申込は受付けていないのか？？ 残念！


##４．Personiumとそれに関連する事象について分かったことの整理
- Personiumは10年ほど前に富士通さんの研究所で産声をあげた、理想のPDS（その当時はPDSという言葉はなかったのかもしれません）を目指した（のだと思う）OSSのプロダクトである。
- Personiumは、PDSという個人の情報やデータを自身が主体的に管理でき、WebAPI等を利用し様々なディバイス・アプリケーションからセキュアにデータアクセスができる環境を提供する、サーバー上で稼働させるソフトウェアである。
- PersoniumではPersoniumの基盤を利用して構築されたアプリケーション同士で、比較的簡単にデータを共有することを可能とする「エコシステム」を前提に考えられているが、これがアプリケーションのアイデアの自由度を狭めるような関係となる場合も多く、この壁を超えられるような機能拡張が模索されている。
- PSDと呼ばれるプロダクトはいくつもあるが、Personiumは歴史も長くPDSとしては1・2を争うほど完成度の高いソフトウェアである（と私は思う）。
- PDSとして理想的な方向のプロダクトを目指すと、管理しているでデータをPDS外に持ち出すためのお作法が厳しく、そのまま情報銀行のプラットフォームとして利用するにはハードルが高い（と私は感じる）。
- PDSの要件としては「データのポータビリティ性」を求められるが、PersoniumではPersoniumの基盤を利用して構築されたアプリケーション同士での「ポータビリティ性」を実現しようとしているのだが、一般的に意味する＂ポータビリティ＂とは若干異なる（と私は感じる）。
- Personiumは非常に多機能で、「アカウント管理」「アクセス権限管理」「ストレージ機能」「データベース機能」「Webサーバー機能」「APIアクセス機能」「サーバーサイドスクリプト機能」「ソケット通信機能」など他にも、ここには書ききれないほどの機能が提供され、かつ柔軟に利用できるが… 逆にそれが災いしシンプルには理解しにくいプロダクトであることは否めない（のが私の実感である）。
- Personiumについてネット上から情報を得ようとしても、とても「情報が潤沢にそろっている」と言える状況ではなく、いまいち理解の深まらないPersoniumのドキュメントに頼るしかない。
- Personiumは、エコシステム内に登録されるアプリケーションが増えれば増えるほど、PDSとしての強みを発揮でき、さらなる魅惑を秘めたサービスを生み出せる可能性を十分に持っている（はずである）。


##５．タネ明かし…
実は私はもう数ヶ月にわたり、「Personiumとはなんぞや？」を理解するためPersoniumを利用したアプリケーションのプロトタイプを作成しようと、仕事の一つとしてPersoniumに接してきた＂外の人＂である。
決してPersoniumが認められても世界中で流行っても、私個人的には何のメリットもありません…

そしてこのPersoniumを開発しているチームはあまり大きくはなく（どちらかというと小さい…）アイデアがあってもなかなか人を充てられないなどジレンマを孕みながら日々開発を続けているようですが、私も[Slackのコミュニティ](https://personium-io.slack.com/)に質問をさせてもらったり、もくもく会を開催してもらったりしながら、ようやくそしてなんとなく、Personiumというプロダクトを利用できるようになりはじめてきています。

そしてこのPersoniumの大きな問題と感じる部分が、ドキュメントが＂仕様書＂レベルでしか整理されていません。記載はされているのですが…表現が淡白で把握しづらい。それがどの辺のページに記載されているのか想像しづらく、そして今自分の見ている（Googleから導かれた）ドキュメントがどこに位置付けられているのかがわかりづらいんですね。
さらにドキュメント中などに「[Slackのコミュニティ](https://personium-io.slack.com/)までお問い合わせください」と記載されてはいるのですが、ここに質問するのがまたハードルが高い！！
（以前は）それほど活性されている様でもなく、発言している皆さんのプロフィール上のメールアドレスを見ると、ほとんどが ****@**.fujitsu.com で外の人から見るとハードルは強烈に高い。私はドキュメントを読んでもあまりにも分からなく、怒りに任せてこのハードルを越え（る。というかあまりにも高かったので潜り）ましたが… ここのハードルを越えられずに挫折したケースも多いのではないかと思います。

わかります。小さないチームで取り回していると、やはりどうしてもドキュメントにはパワーをかけられず、＂分かっている人には分かる＂というレベルで落ち着いてしまうのは痛いほどわかります。
しかしせっかくのこれほどのプロダクトなのだから、前述のハードルを超えられず挫折するケースを避けられるレベルにはすべきですし、そしてそれは中の人でなくても実現可能かもしれません。
そんな経緯があり、もし自分が辿った作業の記録を公開し、それを参考にすることでハードルを少しでも下げられたら、日々難問と格闘しているPersoniumのチームの皆さんのほんの少しのチカラにでもなれたら嬉しいなぁ と思っている次第でございます。


##５．じゃこの後どうしましょうかね…
これまでに私が辿った作業のうち、これの作業の部分をスムーズに進められれば、Personiumの理解を深められのになぁって思う内容を記載していこうと思っています。またその整理中に、意見や要望・不満として開発チームに伝えるべきポイントを把握し、それらが反映された場合はそれらを可視化できるような内容を記載しようと思います。

またこの作業は、Personiumチームのリーダーの方の「そりゃ嬉しいわ」というお言葉と、私の上司からも「いんじゃね！」と許可をもらったうえで、取り組むこととなっております。しかし何らかの不可抗力や別の政治的な圧力などにより、取りやめになる場合もあるかとは思いますが… まずはゆるりと続けていきます。


##６．ToDo
####メニュー
- [x] [１＜はじめに＞](https://qiita.com/takky0330/items/5352a820e5e59747218c)
- [x] [２＜Personiumに触れてみるには＞](https://qiita.com/takky0330/items/6e7e5686c8ab2a25f7e8)
- [x] [３＜Ansibleでインストールする＞](https://qiita.com/takky0330/items/19449b05e8b2775382d5)
- [x] [４＜ざっくりとPersoniumとは＞](https://qiita.com/takky0330/items/7781d0cb4ac879b65ab5)
- [x] [５＜APIでアクセスしてみる＞](https://qiita.com/takky0330/items/270a5c5386fd80d5d3c1)
- [x] [６＜VirtualBoxイメージでサクッと触る＞](https://qiita.com/takky0330/items/788ff75f675c9207ad6e)
- [x] [７＜APIでWebDavを触ってみる＞](https://qiita.com/takky0330/items/42febbf90de2986bb452)
- [x] [８＜APIでODataを触ってみる＞](https://qiita.com/takky0330/items/c1809ad5f3f7f85430ad)
- [x] [９＜APIでExtRoleを触ってみる＞](https://qiita.com/takky0330/items/74285b516e06fc00edad)
- [ ] １０＜セルとボックスについて理解する＞
- [ ] １１＜ホームアプリを触ってみる＞
- [ ] １２＜ユニットマネージャって便利じゃん＞
- [ ] １３＜テンプレートアプリってなんぞや＞
- [ ] １４＜自分のアプリケーション＞


- [x] [＜成功した手順＞ 新しいバージョン（1.7.9）の Personium を Ansibleでインストールする](https://qiita.com/takky0330/items/9598498f8dbb9681fc9b)
- [x] [＜失敗した手順＞ 新しいバージョン（1.7.9）の Personium を Ansibleでインストールする](https://qiita.com/takky0330/items/1706be1e23122ec2ac86)


####意見・要望
- [ ] ドキュメントの左上に「パンくずメニュー」の機能を加えてほしい（難易度：大）

####ToDo
- [ ] ＠dixonsiuさんとワインを飲みに行く


##７．謝辞
＠shimonoさん、＠shibaさん、＠dixonsiuさん、＠sawamiさん、＠kourokiさん、＠ksakamotoさん、その他Perosniumチームの皆さん。
いつもSlackで嵐のように私の投稿を充満させてしまい申し訳ございません。しかし皆さんお忙しい中であっても素早く適切に回答していただいて、一つひとつ問題をクリアしてきました。ありがとうございました。
そしてこの投稿を書くために更に質問を増やしてしまうような、本来の目的からすると本末大転倒の状況を作り出してしまう可能性も否定はできませんが… 皆さんの邪魔にならない範囲で頑張ります。よろしくお願いします。