もぐてっく

人は1つ歳をとるたび、1ビットづつ大きくなれると信じてた。

写真管理Webアプリ Lycheeのプラグインを書こうとした話

盆休みに溜まりに溜まったデジカメ画像を整理するソリューションを探したところ、Lycheeって言う良い感じのWebアプリを見つけました。

f:id:moguno:20190817160221p:plain:w500

  • 画像を複数選択してタグを打てる。
  • 画像の他に動画も管理できる。
  • サーバが低スペックでもサクサク動く。(Celeron J1900 1コア + メモリ1GB)

非常にいい感じ。

後は、既にアップロードしている画像を再アップロードしたときに重複を検知して除外してくれればなぁ・・・。

おっと。プラグイン機能があるじゃないですか。じゃあ書くか。

と、1日頑張ったのですが、色々調べてみると重複画像排除オプションが既に実装されていました。。。

f:id:moguno:20190817155926p:plain:w500

そんなこんなでプラグイン作成のモチベーションが急激に下がった今日この頃なのですが、せっかくなので得られた知見を書き残しておこうと思います。

Lychee本体のクラスを使うには

"\Lychee\Modules\使いたいクラス"をuseします。

use \Lychee\Modules\Log;
use \Lychee\Modules\Database;

PHPって15年ぶりくらいに書いたんですが、\を演算子(?)に使う言語って珍しいですね。

ログを出力するには

Logクラスの各種メソッドが使えます。

Log::error(Database::get(), __METHOD__, __LINE__, 'エラー');

ログはLycheeの[Show Logs]から確認できます。

f:id:moguno:20190817153450p:plain:w500

ちなみにログデータはファイルではなく、DBのlychee_logテーブルに格納されています。

プラグインは登録が必要

[Settings]を選択して設定一覧の最下部にある[More]を選択。

f:id:moguno:20190817153529p:plain:w500

Full Settings画面が出てくるので、[plugins]に名前空間\クラス名を記載します。

f:id:moguno:20190817153639p:plain:w500

セミコロン区切りで複数のプラグインを記載できます。

プラグインディレクトリ名・ファイル名と名前空間・クラス名は同名にする。

プラグインのパスがExamplePlugin/Example.phpの場合、名前空間はExamplePlugin。ファイル名はExample.phpとしないといけません。

namespase ExamplePlugin;

class Example implements SplObserver {
}

まとめ

そのうちEXIFの撮影日時をみて勝手にアルバム分けしてくれるプラグインを作りたいですね。