プロジェクト

全般

プロフィール

機能 #960

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

toshi_a 初音10ヶ月前に追加. 9ヶ月前に更新.

ステータス:
進行中
優先度:
通常
担当者:
対象バージョン:
開始日:
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の候補からプロフィールを省くようにしたい新規2017-01-02

ブロック先 機能 #981: カスタムアカウント新規2017-01-30

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

履歴

#1 toshi_a 初音10ヶ月前に更新

  • 関連している バグ #957: プロフィールのアカウント名をクリックした時に、Intentの候補にプロフィールが挙がっている を追加

#2 toshi_a 初音10ヶ月前に更新

  • ブロック先 機能 #961: レジュームされたプロフィールについても、スクリーンネームをクリックした時にIntentの候補からプロフィールを省くようにしたい を追加

#3 toshi_a 初音10ヶ月前に更新

  • 関連している を削除 (バグ #957: プロフィールのアカウント名をクリックした時に、Intentの候補にプロフィールが挙がっている)

#4 toshi_a 初音9ヶ月前に更新

  • 関連している 機能 #981: カスタムアカウント を追加

#5 toshi_a 初音9ヶ月前に更新

  • 関連している を削除 (機能 #981: カスタムアカウント)

#6 toshi_a 初音9ヶ月前に更新

  • ブロック先 機能 #981: カスタムアカウント を追加

#7 toshi_a 初音9ヶ月前に更新

  • ステータス新規 から 進行中 に変更

#981 アカウント情報をModelで表現するような実装にしたいので、JSONと相互変換できるようにする

#8 toshi_a 初音8ヶ月前に更新

  • ブロック元 機能 #987: Retrieverのコードを削除し、代わりにDiva gemを利用する を追加

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