Personium 1.7.22 で組み込まれる予定の新機能
そろそろ Personium 1.7.22 がリリースされるので、新規リリースに伴い追加された機能などを書いてみたいと思います。
個人的に気になったものをピックアップしていきたいと思います。
サービスコレクションの動的パス対応
いきなり手前味噌で恐縮ですが、以下のようなプルリクを送りました。
CRUD操作にあたり、追加の動作を JavaScript (Rhino) で記述できる、いわゆる「エンジンスクリプト」機能ですが、 今まではパスが静的なものに限定されていたところを動的に解決されるようにしました、という内容です。
概要
Personiumでは https://cell.pds.example.com/box/engine
というサービスコレクションに対し、
<p:service language="JavaScript" xmlns:p="urn:x-personium:xmlns" xmlns:D="DAV:"> <p:path name="edit" src="edit.js"/> <p:path name="view" src="view.js"/> </p:service>
のように設定することで、
https://cell.pds.example.com/box/engine/edit → edit.js https://cell.pds.example.com/box/engine/view → view.js
といった感じで、edit.js, view.js に独自の処理を実装し、特定のURLに紐づけることができます。(p:path
タグでAPIのルートを定義できるイメージ)
p:path タグの name
属性で指定されるパスが src
属性で指定されるJavaScriptファイルに紐づけられるわけですが、従来は name
属性には文字列の完全一致しか条件として書けませんでした。
これではID を含むタイプのURLが実現できない( articles/12345/view
みたいな)、という問題点がありましたが、最悪クエリ文字列で何とかなるのでそれでしのいできました。ただやはり、他のサービスとの連携となると無理が出てきました。
今回のプルリクでは JAX-RS の URIテンプレートを使用し、
<p:service language="JavaScript" xmlns:p="urn:x-personium:xmlns" xmlns:D="DAV:"> <p:path name="{id: \d+ }/edit" src="edit.js"/> <p:path name="{id: \d+ }/view" src="view.js"/> </p:service>
このような設定をすることも可能になりました。
効果1: 1Data 1URLの実現
上記でも例として書きましたが、各データに対してURLを持たせることができます。
効果2: リライトのようなことができる
ちょっとトリッキーですが、JAX-RS のURIテンプレートで広くマッチするように設定し、リライトのようなことができます。
<p:service language="JavaScript" xmlns:p="urn:x-personium:xmlns" xmlns:D="DAV:"> <p:path name="{id: .+?}" src="frontend.js"/> </p:service>
ここで frontend.js
では HTMLをレンダリングする虚無みたいな JavaScript を書かなければいけなくなりますが、フラグメント(ハッシュ)をルーティングに使用するHashRouterから解放されるという利点があります。
認証にハッシュを使用する場合など、ハッシュの利用に制限がかかるケースがあるため、大きな前進かと思います。
課題
残る課題としては、エンドポイントの向き先を動的にすることはできましたが、動的なパラメータの部分をパースする処理はエンジンスクリプト側に委ねられています。ここがまた苦しみを生みそうなので、Core側でカバーできるように変えたいところです。
起動まわりの改善
tochi-y さんを中心にPersoniumの起動まわりをDockerなどの技術を使って改善していこうという活動が進んでいます。わたしもCore単体で起動するDockerfileを書いたりしてますが、それが取り込まれました。
オタメシ用途では簡単に作ったり壊したりできるDockerは便利ですね。
効果1: テスト用の環境を整えるのが楽になった
Personiumはテストを実施するのにElasticSearchなど準備しなければならず、環境の構築だけでもスキルが要求され、気軽に開発に参加してねとは言いづらい状況でした。
Dockerのエコシステムに加わることで、それがかなり改善されるのではないかと考えています。
終わりに
初めての試みとして、次期リリースでの変更点などをピックアップしてみました。
なかなか内容の勘所が掴めず、目についた新機能ばかりを紹介してしまいましたが、ほかにも色々Issueは解決されてますので、気になる方はリリースノートを見てください~
--
Personiumコミュニティではメンバーを募集しています。Personiumに興味のある方がいらっしゃったらぜひご参加ください!
GitHub ヘの Issue 登録だけでも大歓迎です!