Works

作ったものと、
その中身

企画から実装・公開まで自分で手がけたプロダクトを、
使った技術と実装の判断まで含めて並べています。

個人開発 6 プロダクトTypeScript / Python / RustGitHub ↗

Products

個人開発プロダクト

ResearchMatch

MVP

企業の課題文をそのまま投げると、意味の近い研究者を返す産学連携マッチング。キーワード一致ではなくベクトル検索で探す。

Stack

TypeScriptNext.jsHonoQdrantOpenAI EmbeddingsOpenAlex APIRailway

実装で工夫した点

  • OpenAlex から取得した論文メタデータを研究者単位に集約し、OpenAI Embeddings でベクトル化して Qdrant に格納。検索は課題文をそのまま埋め込んでコサイン類似度で引く構成にした。
  • API を Hono の単体サーバーとして切り出し、フロント(Next.js / Vercel)とバックエンド(Railway)を分離。埋め込み生成のような重い処理を Vercel の実行時間制限から外した。

PDF Masker

公開中

同じ書式のPDFを大量に一括黒塗り。上に四角を描くのではなく、ページを画像化してテキスト層ごと消す。

Stack

PythonPyMuPDFPillowGUI座標ピッカー

実装で工夫した点

  • 一般的な「黒塗り」は矩形を重ねるだけでテキスト層が残り、コピーすれば復元できてしまう。ページをラスタライズしてから塗り、画像からPDFを再構成することで、復元経路そのものを無くした。
  • 座標をGUIでドラッグ指定し、保存するのは座標とフィールド名("address" など)だけ。設定ファイルに個人情報が入らないので、設定を人に見せて相談できる。

Sheet ToolBox

公開中

シート抽出・マクロ除去・シート結合の3つをまとめたデスクトップアプリ。ファイルを外に出せない現場向けに完全オフライン動作。

Stack

RustTauri v2umya-spreadsheetTypeScriptWindows / macOS

実装で工夫した点

  • Web版を先に出して需要を確かめてから、ブラウザに上げられない機密ファイル向けに Tauri + Rust でデスクトップ版を用意した。同じ処理を2つの配布形態で持つ構成。
  • シート操作に umya-spreadsheet を使い、セル書式・結合セル・数式・列幅を保持したまま入出力する。「開いて保存し直したら書式が崩れる」を避けることを要件の中心に置いた。

推しコイン実力チェッカー

公開中

気になっている暗号資産を BTC・ETH などの主要銘柄と突き合わせ、相対的な強さを複数の時間軸で可視化する。

Stack

TypeScriptNext.js 16React 19RechartsTailwind CSS v4CoinMarketCap API

実装で工夫した点

  • 「上がった/下がった」ではなく、ベンチマーク銘柄との相対で見る指標に絞った。比較対象はプリセット(TOP10・Layer1 など)とカスタムの両方から選べる。

Doc to JSON

公開中

Word(.docx)を段落・見出し・表に分けた構造化JSONへ変換。処理は全てブラウザ内で完結し、ファイルはサーバーに送らない。

Stack

JavaScriptブラウザ内処理(アップロードなし)

JSON to Sheet

公開中

JSONを Excel(.xlsx) に変換。Doc to JSON の出力をそのまま渡せて、Word → JSON → Excel の一連の流れになる。

Stack

JavaScriptブラウザ内処理(アップロードなし)

作ったものの中身について、
もう少し詳しく話せます。