オープンソースPDSのPersoniumのCellについて調べてみる  

takaです。前回の記事([オープンソースPDSのPersoniumをGUIから操作してみる](https://qiita.com/takasugimoto/items/63e27176e7a0418c5377))ではPersoniumのGUI操作についてお伝えしました。  

今回は、前回話が出たPersoniumのCellという基本単位について調べた結果、関係者の方にお話を聞いた結果を自分なりにまとめてみました。  

## おさらい  
前回PersoniumのアーキテクチャーはUnit, Cell, Boxの３つから成り立っているとお話しました。![personium全体図](https://i.imgur.com/FJGH9rp.jpg)  

Unitの中に複数のCellがあり、各Cellの中にBoxがあります。各Unitは連携することが出来ます。([Unit間連携の設定方法](https://personium.io/docs/ja/server-operator/unit_coordination.html)をご参照ください。)

## Cellとは
以下のサイトにPersoniumとCellについての説明がありました。記事を参考にしながら、お話いたします。     

- [MyData のWebを目指すオープンソースPDS 「Personium」ご紹介](https://drive.google.com/file/d/1eNLgVtLQ9alBnWwGzp8dnzI4msDg6t0u/view)  
- [Personiumとは何ですか？](https://personium.io/docs/ja/overview/001_Introduction.html)  

CellとはPersoniumを構成する基本単位の一つです。エコシステムの中でCellというものを考えると「Cell≒ データ主体」と捕えることが出来ます。データ主体は人であることもモノであることも組織であることも可能です。  
以下に人を例にとって説明します。  

例えば、お医者さんCellと患者さんCellがあるとしましょう。患者さんはどのような症状を持っていて、どのようなお薬を飲んでいるか、自分の病気についてお医者さんに伝える必要があります。つまり、患者さんCellはそのお医者さんCellに自分の病気に関する情報を開示するために、お医者さんCellに参照権限を与えます。(患者さんCellにお医者さんCellを外部Cellとして登録し、Roleを付与します。)  
> ※外部Cell（ExtCell）については、@takky0330さんの[情報銀行のプラットフォームとして利用できるかもしれないPersonium（PDS） を検証してみる ９ ＜APIでExtRoleを触ってみる＞](https://qiita.com/takky0330/items/74285b516e06fc00edad)を参照して下さい。  

その結果、権限を貰ったお医者さんCellは患者さんCellを参照することができ、患者さんの病気について知ることが出来ます。Cellを利用した情報利活用では、情報を持っている個人の意思で他人への情報の開示を制御出来ることが特徴です。  
![Cell間の関係](https://i.imgur.com/OLR3f2G.jpg)
  

## Cellの種別と使われ方  
前回「[よくわかっていませんが、管理Cell、アプリCell、ユーザCellという三種類の使い方があると関係者の方からお聞きしました。](https://qiita.com/takasugimoto/items/63e27176e7a0418c5377)」とお話しましたが、@dixonsiuさんから組織（organazation） CellというCellもあるとお聞きしました。調べたところ、Cellは色々な使われ方があり、エコシステムに適用する場合には単純にこの４つに分けることは難しそうです。[[オープンソースPDS Personium とその応用](http://www.glocom.ac.jp/wp-content/uploads/2018/04/MDJ2018_shimono.pdf) P27-P33参照]

今回は上記で述べた4つの使われ方について記載してみます。ユーザーCell、アプリCell、管理Cell、及び組織Cellは用途は違いますが、「必ずmain Boxがあり、main Boxと同一階層にBoxを作成する。またBoxの下にFolder,OData,Serviceを定義する。」と、どれも同じ構造であることが重要です。

### ユーザーCell  
個人が自分のデータを格納するにはユーザーCellを利用します。「ユーザーCellのBox≒データ」と考えることができます。

１つのCellに対して複数のAccountが存在することが可能ですが、それはそのCellに対してどのような立場でアクセスするか使い分ける柔軟性のためだと思っています。  

### アプリCell（[Personiumアプリ開発者向けガイド　参照](https://personium.io/docs/ja/app-developer/)）  

アプリCellはアプリ開発者のためのCellです。  

一般なアプリは以下の２つのモジュールで構成されます。  
  
- （必須）アプリCellに置いたモジュール(アプリの本体)  
- （任意）各ユーザーCell（アプリの使用者）にインストールされたモジュール（[BARファイル](https://personium.io/docs/ja/apiref/current/301_Bar_File.html)）   

アプリ開発の詳細と[template-app-cell](https://github.com/personium/template-app-cell)に従ったアプリの作成方法の具体的な説明は今後の記事で行いたいと思います。  

#### Personium を使ったアプリ  
前回説明したUnit ManagerというGUIツールはPersonium APIしか使用しないため、「Personiumを使ったアプリ」です。app-uc-unit-managerというアプリCellをWeb Serverとして使用しています（ユーザーCellにインストール用のモジュールは必須ではありません）。  

#### Personiumアプリ  
Personiumアプリは必ず２つのモジュールで構成されます。  

- アプリCellに置いたモジュール：アプリの本体で描画処理、[認証](https://personium.io/docs/ja/app-developer/app_authn.html)処理などを行います。  
- 各ユーザーCell（アプリの使用者）にインストールされたモジュール（[BARファイル](https://personium.io/docs/ja/apiref/current/301_Bar_File.html)）：データの保存先、データを操作する処理、他のユーザーCellから自分のデータにアクセスする時の権限（Role）の定義およびアプリCellのURL(Schema URL)の情報を含みます。  

> つまり、メタデータも定義されています。  

### 組織Cell  
組織CellはユーザーCellのデータを利活用するためのCellです。例えば、組織CellをファンクラブとするとユーザCellは各ファンだと言えます。各ファン（ユーザーCell）はファンクラブ(組織Cell)に登録して会員になります。ファンクラブ(組織Cell)はファン(ユーザーCell)にお得な情報を提供します。  

### 管理Cell  
Cellの作成・削除の作業をPersonium Unit管理者が各Cell毎に実施するのは大変なので、その操作を自動化するために管理Cellを使用します。  

管理CellはユーザーCellの作成、初期化、削除を行います。例えば、管理CellにユーザーCellを作成するEngine Scriptを配置しておきます。各ユーザーはそのScriptを使って自分のユーザーCellを作ることが出来ます。  

- 管理Cellがない場合  
Personium Unit管理者が100人分のユーザーCellを作成します。  
- 管理Cellがある場合  
100人のユーザー自身がそれぞれ自分のユーザーCellを作成します。 

※Engine Scriptについても別途、記事にして説明したいと思います。

## 最後に  
今回の記事作成に当たりアプリCellの理解に手こずりました。今後自分で実際にアプリを作成して、アプリCellの理解をもっと深めたいと思います。またPersoniumに貢献するためにはCellの理解をもっと深めなければと思いました。  

この記事の作成に当たっては@shimonoakioさん、@dixonsiuさんにCellの思想をお聞きしCellのイメージを掴むことができました。また、@takky0330さんにご指摘を頂き、@takky0330さんの[情報銀行のプラットフォームとして利用できるかもしれないPersonium（PDS） を検証してみる ４ ＜ざっくりとPersoniumとは＞](https://qiita.com/takky0330/items/7781d0cb4ac879b65ab5)を参考にさせていただきました。皆様ありがとうございました。

- 前回記事 [オープンソースPDSのPersoniumをGUIから操作してみる](https://qiita.com/takasugimoto/items/63e27176e7a0418c5377)