プライベートフォトライブラリアプリをリリースしています

# プライベートフォトライブラリアプリ「Sunctum」

こんばんは。今回は最近個人的に開発に熱が入っているプライベートフォトライブラリアプリを紹介したいと思います。

プロジェクト名は 「[Sunctum](https://github.com/dhq-boiler/Sunctum)」、最新のバージョンはv2.11.3になります。C# + WPFで開発しています。ソースコードはMITライセンスで公開しています。

https://github.com/dhq-boiler/Sunctum

Sunctumを使って何ができるかというと、大量の画像を含むフォルダツリーをインポートして、タイトルや著者情報を読み取って、管理することができます。タイトルや著者で検索をかけることができます。**秘密裏に画像を管理したい場合に画像を暗号化することもできます。** Sunctumの管理外に画像ファイルを持ち出したくなったらエクスポートすることもできます。効率的に画像を管理するのがSunctumの目的であります。

## 概念

Sunctumでは「画像」「ブック」「ページ」といった概念があります。これを理解すると、アプリ利用時に役立つと思うので是非見ていってください。

### 画像

Sunctum が保存する対象です。緩く言うとjpg, png, gifなどのファイルが対象となります。

### ライブラリ

Sunctumがインポートしたものはすべて、このライブラリ（フォルダ）に格納されます。ライブラリにはSQLite データベースファイルがあります。これにはブック情報やページ情報などが記録されていて、消すと復元できないので勝手に消さないようにしてください。

このライブラリフォルダにはdataフォルダとcacheフォルダが含まれます。

* data フォルダ・・・生の画像ファイルが格納されます。
* cache フォルダ・・・縮小加工した画像をキャッシュとして格納してあります。

### ブック

Sunctumで画像を格納する時に使われる管理オブジェクトです。ブックにはGUID、著者情報、タイトル、発行日、指紋、それと１つあるいは複数のページで構成されます。

### ページ

ブックのコンテンツとしての構成要素です。ページはGUID、タイトル、画像で構成されます。

## アプリの特徴

Sunctumでできることを説明します。

* ブックのインポート

    画像をインポートできます。詳細はインポートの規則に書きます。

![tutorial_import2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/153ab84e-dc55-9792-9b48-f01c25fbe945.gif)

* ブックの一覧、およびブックの内容の閲覧

　画像をインポートしたら、ブックとして保存されます。ブックを一覧しましょう。ブックをダブルクリックすると、内容を一覧で見ることができます。ページをダブルクリックすると、その画像を大きく見ることができます。

* ブックの著者の登録

　ブックには著者情報を記録できます。著者情報を記録しておくと、検索をかけるときに著者名で検索できるので便利です。著者情報はインポート時にフォルダの名前から読み取られます。

```
[著者名]ブックタイトル
```

というように著者名を大括弧で囲んでおくと、インポート時に自動で読み取られます。著者名と大括弧がない場合は著者なしとしてインポートされます。

また、ブックプロパティ画面で著者情報を変更できます。


* ブックの検索

　Ctrl+Fで検索をすることができます。検索キーワードとして入力したテキストで、著者名、タイトル、指紋で絞り込むことができます。

* ブックにタグ付け

   例えば大型イベントで発行された本をスキャナーで取り込んで、画像として持っている場合などで、Sunctumに取り込みたいけどタグ付けもしたいという場合には、インポートするフォルダ名に丸括弧でイベント名を仕込んでおくと、インポート時に自動で取り込み、タグ付けを行います。

```
(タグ名)[著者名]ブックタイトル
```

という感じで。

* ブックの一部のページを新たなブックとして抽出（スクラップ）

　例えば雑誌などをスキャナーで全部取り込んで、Sunctumに取り込んだ時に、話単位でブック化したいという要望を叶えるために、ブックのコンテンツを選択して、新たなブックとして切り出すことが可能です。この処理を「スクラップ」と呼んでいます。

* ライブラリの暗号化/復号化（Windows Helloに対応）

   何か親や嫁に見られたらまずい画像を所持している場合に、勝手に親や嫁にPCを操作されて、万が一Sunctumを起動されるとヒジョーにまずいですよね？そんなこともあろうかと、ライブラリを暗号化/復号化する機能を実装しました！！！

  共通鍵暗号方式で暗号化と復号化を行います。つまりパスワードで暗号化したり、パスワードで復号化できます。**パスワードを忘れると、開けなくなりますし、復号化もできません。パスワードは絶対に忘れないでください！**

  Windows Helloを使うと、一度入力したパスワードは安全なVaultに保存して、顔認証やPIN入力でパスワードをVaultからロードして簡略化できます。Windows Helloの使用を推奨します！！

  暗号化した状態のライブラリフォルダは様子が異なります。
  data フォルダ・・・暗号化済画像ファイルが格納されます。
  cache フォルダ・・・暗号化時は縮小加工した画像をキャッシュとして格納しません。またcacheフォルダも削除されます。

![tutorial_encryption.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/64277253-7cae-1eb0-0c8b-bffa3b2ba69a.gif)

↑こちらは暗号化と暗号化後ロードと暗号化済でロード時パスワードを入れなかった時どうなるかのサンプルGifアニメです。

* ブックのエクスポート

   Sunctum管理外に画像ファイルを持ち出したくなったら、エクスポートできます。

以上、Sunctumの特徴となります。

## インポートの規則

インポートの規則を説明しておくべきかなと思いましたので、説明します。

1. Sunctumで１つの画像をインポートしようとすると、必ず１つのブックが作られます。その画像はブックの中に格納されます。

2. Sunctumで複数の画像をインポートしようとすると、同様に必ず１つのブックが作られます。それらの画像はブックの中に格納されます。

3. Sunctumで１つのフォルダ（中に複数の画像が含まれている）をインポートしようとすると、必ず１つのブックが作られます。フォルダの内容の複数の画像はブックの中に格納されます。

4. Sunctumで複数のフォルダ（中に複数の画像が含まれている）をインポートしようとすると、複数のブックが作られます。フォルダの内容の複数の画像は対応するブックの中に格納されます。

簡単に言うと、画像ファイルをインポートすることができますし、フォルダとしてインポートすることもできます。

## インストール方法

https://github.com/dhq-boiler/Sunctum/releases/tag/v2.11.3

上のリンクから最新版v2.11.3のページを開き、Assetsの中にある、Sunctum_859.zipをダウンロードしてください。zipファイルをダウンロードした後は解凍して、好みの場所に配置してください。

実行ファイルはSunctum.exeとなります。

スタートメニューやタスクバーにピン留めしておくのがおすすめです！！！（ヒミツにしておきたかったら暗号化すればいいし！）

あと、Sunctumは.NET 6で動作します。.NET 6がPCにインストールされていれば動くはずです。

## アップデート方法

Sunctumは日々開発・更新しています。SunctumをアップデートするにはSunctum起動後、メインメニューのヘルプ→Sunctumを更新する...をクリックしてください。Sunctumアップデーターが起動するので、Sunctumを終了してから、ウィザードに従ってアップデートしてください。

![tutorial_update.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/8f28c942-eb95-73e1-e536-fa3c6114243d.gif)


## スペシャルサンクス

記事の説明で挿し込んでいるGifアニメでは「いらすとや」の画像を使用させていただいております。