プロジェクト

全般

プロフィール

機能 #960

完了

Modelをシリアライズ可能にする

toshi_a 初音 さんがほぼ8年前に追加. ほぼ7年前に更新.

ステータス:
終了
優先度:
通常
担当者:
対象バージョン:
開始日:
2017-01-02
期日:
進捗率:

0%

プラグイン名:

説明

要件

テキストにして、ファイルに保存するなど、IOオブジェクトに渡すことができるようにする。

目的

  1. メモリを共有しない空間で動作しているPluggaloidに対してイベントを送れるようにしたい(別のプロセスなど)
  2. キャッシュなどの目的で、単純にファイルに保存したい

特に2.については、 #957 でIntentTokenが保存できると便利なことがあるということがわかった。

シリアライズする範囲

定義されたfieldのみを対象とする。定義されていないフィールドは存在しなくても良いものや、単なるキャッシュであるため。
明示的に定義しているフィールドでdumpしたくないものもありそうなので、fieldのオプションで制御できるようにする。

インスタンス変数は全て対象外とする。

形式

特定の形式に縛られる必要はないとは思うが、JSONだけとかでもよさそう…。

Marshal

かつてはMessageが間違って設定などに保存されて、Marshal.loadされた時に不具合が発生することがあったが、今はそういったチェックをUserConfigでしっかり行っているのでこの制限には何の意味もない。

キャッシュなどの保存するデータが大量に含まれているという問題はある。マーシャライズの時も基本的には定義されたfieldだけが保存されていれば問題なさそう。

利点

Rubyでよく使われている方法でセーブ・ロードできる

欠点

Rubyでしか利用できない。ロードする環境に、Modelが定義されてなければならない。プラグインの削除やアップデートなどでModelの定義が消えた時にロードできなくなる可能性がある。

JSON

言語を問わずよく使われているのでさまざまなメリットがある。Rubyで扱うのも容易。
ただのオブジェクトとModelを見分けるために、またModelの種類を特定するために特殊なキーを入れる必要がありそう。

利点

他の言語でも扱うことができ、PluggaloidをMarshalの仕組みがないRubyの実装や他の言語に移植するのが容易になる。
mikutterに現在定義されていないModelを読み込んでもなんとかできそう。

欠点

表現できるオブジェクトの種類が限られている( Time は文字列に変換する?など)。


関連するチケット

ブロック先 機能 #961: レジュームされたプロフィールについても、スクリーンネームをクリックした時にIntentの候補からプロフィールを省くようにしたい却下toshi_a 初音2017-01-02

操作
ブロック先 機能 #981: カスタムアカウント終了toshi_a 初音2017-01-30

操作
ブロック元 機能 #987: Retrieverのコードを削除し、代わりにDiva gemを利用する終了toshi_a 初音2017-02-28

操作

他の形式にエクスポート: Atom PDF