<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>React on /home/amgsk</title><link>https://amgsk.dev/tags/React/</link><description>Recent content in React on /home/amgsk</description><generator>Hugo</generator><language>ja-JP</language><lastBuildDate>Tue, 14 Jul 2026 22:18:42 +0900</lastBuildDate><atom:link href="https://amgsk.dev/tags/React/index.xml" rel="self" type="application/rss+xml"/><item><title>Image/Movie管理アプリ Meguriを作った</title><link>https://amgsk.dev/posts/meguri-app/</link><pubDate>Tue, 14 Jul 2026 22:18:42 +0900</pubDate><guid>https://amgsk.dev/posts/meguri-app/</guid><description>&lt;p>子どもや家族の写真が増える中で、お気に入りだけを見たかったり、場所や名前などのタグの情報から、すぐに探したいものを探せるアプリがほしかった。
過去に撮影した数百GB分の撮りためた動画・画像が眠っていて、これらのローカルデータをサムネイル付きで探しやすくする仕組みがあると良いなと思っていた。&lt;/p>
&lt;p>既存のメディアプレーヤーやフォトマネージャーもいくつか試したが、セルフホストであっても有料プランに誘導されることが多く、Freeで使用できる理想的なものは見つからないままだった。
どれも悪くないんだけど、動画と画像の両方をまとめて扱え、タグとレーティングで整理できて、ローカルで完結するもの、そして無料、となると選択肢が限られる。&lt;/p>
&lt;p>2019年頃に&lt;a href="https://github.com/amgsk/moevue_support">MoeVue&lt;/a>という動画管理アプリを Electron + Vue で作っていた。（ムービューという読みを意識して名付けたもので、MovieとVueを足して2で割ったような安直なネーミングだ）
サムネイル表示・タグ・レーティング・検索と、やりたいことは今回とほぼ同じだが、当時の作りはだいぶ荒く保守する気にはなれなかったので、イチから作り直すことにした。&lt;/p>
&lt;p>作ったアプリはMeguri（巡）という名称で、過去の&lt;code>想い出を巡る&lt;/code>という意味合いを込めてこの名前にした。&lt;/p>
&lt;img src="demo.gif" alt="Meguri demo" width="100%" style="border: #040404 10px solid;border-radius: 12px;">
&lt;p>Base64やsolarizedのテーマを用意し気分に合わせて配色を変更できるようにした。&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>gruvbox dark&lt;/th>
 &lt;th>nord dark&lt;/th>
 &lt;th>solarized light&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;img src="theme-gruvbox-dark.png"
 alt="gruvbox dark テーマ"loading="lazy">
&lt;/td>
 &lt;td>&lt;img src="theme-nord-dark.png"
 alt="nord dark テーマ"loading="lazy">
&lt;/td>
 &lt;td>&lt;img src="theme-solarized-light.png"
 alt="solarized light テーマ"loading="lazy">
&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>セットアップは「メディアが格納されているフォルダを選ぶ」だけ。&lt;br>
選んだフォルダは「ワークスペース」として登録され、中の動画・画像が再帰的にスキャンされて、サムネイル・解像度・再生時間が勝手に揃ってくる仕組み。&lt;br>
ワークスペースは複数登録でき、勿論外付けHDDやNAS等の散らばったファイルをMeguriで横断して管理・閲覧することが出来る。&lt;/p>
&lt;p>メディアはinappで表示でき、他のアプリを使用する必要がない。mpv等の他のお気に入りのアプリが有れば、open externalボタンから&lt;code>xdg-open&lt;/code>できるように配慮している。
手動コレクションでお気に入りの動画・画像集を作成したり、検索フィルタを保存しておくことで動的コレクションのような使い方も可能。&lt;/p>
&lt;p>&lt;code>Steam&lt;/code>の&lt;code>Discovery Queue&lt;/code>の機能から発送を得て実装した&lt;code>Discovery&lt;/code>機能は、個人的にこだわった機能のひとつ。
これはランダムにメディアを表示してくれる機能で、画面の右下のFABボタンから実行できる。&lt;/p>
&lt;p>こういったメディア管理アプリのソート順は、createdAtやファイル名等のルールが多い中で、どうしても古いファイルは埋もれてしまう。
この機能を使うことで、思い出が蘇る良い機会になるかもしれない。&lt;/p>
&lt;p>&lt;img src="discover.gif"
 alt="ディスカバリー画面 — ランダム抽出とシーンプレビュー"loading="lazy">
&lt;/p>
&lt;h2 id="download">Download&lt;/h2>
&lt;p>&lt;a href="https://zabuton-app.github.io/meguri/guide.html">User Guide&lt;/a>&lt;/p>
&lt;ul>
&lt;li>リポジトリ: &lt;a href="https://github.com/zabuton-app/meguri">zabuton-app/meguri&lt;/a>&lt;/li>
&lt;li>ダウンロード: &lt;a href="https://github.com/zabuton-app/meguri/releases">GitHub Releases&lt;/a>&lt;/li>
&lt;li>Archユーザ向けには、AURの &lt;a href="https://aur.archlinux.org/packages/meguri-bin">meguri-bin&lt;/a> からインストール可能&lt;/li>
&lt;/ul>
&lt;div>
 &lt;div class="codeblock--content">&lt;div class="highlight">&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>yay -S meguri-bin&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>
 &lt;/div>
&lt;/div>
&lt;p>EOF&lt;/p></description></item></channel></rss>