PhoenixとApacheでファイルにタグ付けできるファイルマネージャを作ってみた（未完🍊

# はじめに
勉強した Elixir,Phoenixと、余ったRaspberry piで何か作ろうと、ブラウザでファイルにタグ付けできるファイルマネージャを作ってみました。（完璧とはいえないけど…
勉強用で、保守予定はないですが、いじってもらったりで、何かの参考になったらとです。

https://github.com/k10dayo/browser_file_manager

# 環境
Ubuntu (lsコマンドが使える)
Elixir,Phoenix環境
apache2 (xampp)

※apacheで公開した画像のurlで画像を表示してます。
※詳しい使い方はリポジトリのread me に書いています。

# 想定してる使用
Lan内でサーバーを公開し、個人利用。

# 紹介
### サイトマップ
![map.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2251667/b235b691-87c5-1379-2595-58fc48a9bd23.png)
### メイン機能

| 階層の移動 | 画像、動画の閲覧 |
|:-:|:-:|
| ![1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2251667/56c38889-1d5d-3113-d093-b21df09d52ba.gif) | ![2a.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2251667/6b8fe1e7-a0a1-a6df-d03d-cc57886e7d69.gif) |
| LiveViewによるspa |  |

| ファイル、フォルダの選択 | タグの付け替え |
|:-:|:-:|
| ![3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2251667/fedce3c7-d6c2-0d01-aef3-815473959276.gif) | ![4.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2251667/711fb5e3-faa9-2a34-eafd-92f1880005af.gif) |
|  |  |

| 一覧表示の切り替え | タグの検索（or検索のみ） |
|:-:|:-:|
| ![5.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2251667/8719fd23-fb05-61ed-51a6-23cb1fa28026.gif) | ![6.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2251667/d325dccf-93c9-8d67-ae5f-4312b21def99.gif) |
|  |  |

| プロパティ、タグの追加、編集 | レスポンシブ対応 |
|:-:|:-:|
| ![7.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2251667/b852fd83-c86c-98a5-9e02-bafbe1bd505b.gif) | ![8.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2251667/601b7df1-e2f4-042d-f2db-1ffc9d428a60.gif) |
|  |  |

### DB設計
![db_struct_white.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2251667/68710b3a-29da-e53c-8c42-f90bc18d163c.png)

・/AAA/AA/a.jpg を登録すると　AAA -> AA -> a.jpg　というリレーションの３つのデータになります。
その後、/AAA/AA/b.jpg を登録すると、AAのidをparent_idに持った b.jpg だけ生成されます
（フォルダ移動時にそれ以下のデータも移動させたり、検索を速くしたかった）
![db.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2251667/0339b34b-01b0-eccb-07cb-7936ca43db05.gif)



### こだわりポイント
・プロパティごとにタグをまとめて表示すること
・サイドメニューを開いた状態で、階層を移動できること（状態管理）
・タグの機能をうまくUIに落とし込めたところ　PC、モバイル
・ディレクトリトラバーサル対策（urlから直接ディレクトリに飛べるため）

### 実装できていない機能
・ファイル操作（ファイル移動時、DBのデータも一緒に移動させる）
・フォルダのサムネイル
・タグの and検索、not検索
・タグの並び替え機能
・空のDBデータを、自動で削除する機能
・縮小表示用サムネイル自動作成機能
・ログイン機能
・もっとリッチなデザインを

（多いな…）

# 感想
最初は、１カ月で技術を検証、設計して、２カ月で完成させようと思ってたのですが、揉みに揉まれて３カ月かかってしまった。

自分なりに結構頑張ったつもりだけど、改めて見るとちょっと地味かも…
でも、初めて一人で長丁場の開発で、翻訳しながら英語のドキュメントを漁ったり、他人のソースを読んだりしたのでそういう耐性がついた気がするし、結構思いつきでやったわりにはできて、課題も見えたけど自信にもなった。

windowsのエクスプローラーだと、フォルダにはタグ付けできなかったり、フォルダ内の一番最初の画像をサムネにできなかったり、不満があったのでブラウザで端末問わずできるものをと思ったのですが、作っていくうちに必要な機能がどんどん増えていって、本当はもっと機能を実装したかったけれど、さらに時間がかかってしまうので、いったん切り上げました。
（機能が増えてくと自分の箱庭がにぎやかになっていく感じで楽しいよね）

ちなみに、フォルダにタグ付けできるアプリで、dbを使ったTablacus Explorerと、jsonを使ったTagSpacesがあったりします。

# おまけ　Raspberry piでの使用例
<iframe width="560" height="315" src="https://www.youtube.com/embed/qlKw82p2jDw?si=YJ2sYjWThYNgCJdZ" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>