プロジェクト
これまで進めてきたプロジェクトを整理したページです。個人プロジェクトからオープンソースへの貢献、学校の課題まで全部集めてみました(...)思ったより多いですね。
オープンソース貢献
オープンソースへの貢献で大きな富や名声を得るつもりはないですが.. オープンソースをあれこれ使っていると、意外と動かないものが時々あるんですよね。誰かが直してくれるのを待つより自分で直すほうが早いので、その都度必要なものは自分で直してPRを送っています。
2025
- rustfs/rustfs #1018 — Helm chartでstorageSizeをdata/log別パラメータに分離。データストレージを2TBに設定するとログも2TBになってしまうので(...)お願いだから分けてくださいとお願いしました。
- thuliteio/doks #1356 — Hugoのバージョンを上げたら動いていたものが動かなくなったので.. 直しました。
- Jaydee94/kubeseal-webgui #278 — 便利に使っていたのですが、Secretのクリップボードコピーができなくなっていたので.. 直しました。
2024
- opensearch-project/helm-charts #618 — Helmでバージョンを上げたらデプロイできなくなったので調べたら、デフォルトのopensearch.ymlがsecurity pluginと衝突していました。
2023
- minio/operator #1910 — existingSecretが適用されないので調べたら、YAMLのインデントが間違っていました。
- getsentry/sentry #60571 — ドキュメントを読んでいたら誤字が見つかったので.. 皆さん、誤字修正のPRはすぐマージしてもらえるんですよ?大規模なオープンソースに名前を載せる最高の方法です。
- stepci/stepci #66 — CLIデフォルトコマンド出力の追加。初めてオープンソースにPRを送ってみました!
2026
2025
2024
2023
2022
2021
2017
lemon-design-system
GitHub ↗AIエージェントフレンドリーな個人デザインシステム
awesome-design-md をGeekNews (韓国の技術ニュースサイト)で見たのですが、他のウェブサイトのデザインを抜き出してプリセットとして提供するという点は気に入らないものの.. AIが一貫したデザインシステムを持てるというアイデア自体は良いと思いました。
もともと色々なプロジェクトをやっていると、自分だけのデザインシステムで、デザインを見るだけで「あ、LemonDoubleのプロジェクトだ!」と分かるようにしたいという考えがありました。
そこで実際に知り合いのデザイナーさんにFigmaで外注したこともあったのですが.. 私はあくまでサーバー開発者なので.. 実装が難しい部分もあり、プロジェクトごとにコンポーネントが必要になるたびにデザイナーさんに外注するわけにもいかず、適用できずにいたんです。
ところがこの方法論ならいけるかもしれないと思い、私のfaviconのロゴを起点にPrimary / Secondaryカラーを抽出した後、各色ごとに彩度/明度を調整しながら案を出し、目で検証しながら気に入るまで修正して作ってみました。
ブログをはじめ、フロントが立ち上がっているすべてのページに適用しました。
うまくいきましたね。
hayakoe
GitHub ↗ONNX最適化された日本語TTSライブラリ
TTS分野にはBert-VITS → Style-Bert-VITS2 という系譜があります。
Bert-VITSはFish-Speechチームの以前のモデルで、現在はautoregression方式のFish-Speechリポジトリに更新が移ったため、リポジトリの更新が止まっています。
ここにstyle関連のlayerを一つ加え、日本語データをより多く学習させて日本語強化のPretrainedモデルを提供しているのがStyle-Bert-VITS2リポジトリです。
加えて様々な改善が入っていました。
ところがStyle-Bert-VITS2ライブラリの更新が8ヶ月ほど前に止まってしまったので.. どうせ更新が止まっているなら、コード整理を一度行ってより使いやすくしたいと思って作業しています。
実装完了した内容
- pyopenjtalk-prebuiltライブラリの更新が止まり、Python 3.12以上で使えない問題を、当該リポジトリをフォークして最新バージョンでもビルドできるよう修正したlemon-pyopenjtalk-prebuiltライブラリへ変更
- TTSテキスト内に英語が入ると無音になる問題を修正。loanwords_gairaigo データを活用して約22万件の英語→カタカナマッピングを自動サポートし、カスタム辞書登録機能を簡素化
- BERT weightをダイナミック量子化することで、メモリ使用量を約50%削減
- SynthesizerをONNXで最適化し、CPUで約1.6倍の速度向上を達成
- BERT / Synthesizerモデルのロードを分離し、BERTは共通で使い、話者ごとに異なるSynthesizerだけを別途ロードするようにすることで、話者一つあたり200MB程度のメモリのみで済むよう改善
- PyPIパッケージとして公開し、
pip install hayakoe後に3行のコードですぐ使えるよう整理 - CPU専用環境ではPyTorchのインストールなしにONNX Runtimeのみで推論可能なデュアルバックエンド構造へ変更
- 文単位ストリーミングTTS(
stream())対応。長いテキストを一度に処理せず文ごとに順次生成し、リアルタイム応答に活用可能 generate()で長いテキストを自動的に文単位に分割処理し、約37倍の速度向上(400文字基準143秒 → 3.8秒)weight_norm→parametrizations.weight_normへの移行でPyTorch 2.x+互換性を確保
実装中の内容
- データ抽出したい動画から学習データを自動生成する前処理パイプラインを実装中。動画アップロード → 音声抽出 → 背景音分離 → Whisper字幕生成 → データセット自動構成までを一連の流れで処理
- データセットの前処理からモデル学習、品質レポート生成までを一連の流れで進められるインタラクティブ学習CLIを実装中
super-arona
アロナと会話する - LLMベース3D MMDキャラクタービューア
ブルーアーカイブのアロナと会話できる3Dキャラクタービューアです。
- Babylon.js + babylon-mmdでPMXモデルをレンダリング
- 表情モーフターゲット16種、VMDモーション14種をサポート
- Bullet WASMで髪/布の物理シミュレーション
- LLMベースの会話機能を連携予定
以前aronaというプロジェクトがあったのですが、こちらはクエリパラメータでテキストを受け取って表示するシンプルなチャットインターフェースでした。
super-aronaはその後継作で、名前の通りはるかに野心的なバージョンです。
shiroko
天気を教えてくれる
HomeAssistantからADBでTVに表示するために作った天気アプリです。
気象庁予報の降水タイプに応じて、雨/雪のような天気アニメーションを表示します。
個人用なので大したものではないですが、毎朝天気のブリーフィングがあると自転車で出勤するか決められて便利です。
haruna
金曜美食会アンケートツール
グルメ評価システムです。
毎週金曜日に友人たちとグルメ巡りに行くのですが、せっかく食べるなら星評価もつけたいと思って.. 匿名投票システムとして作りました。
- ルーレット抽選
- 星評価
- Google Maps URL自動コピー
- QRコード生成
claude-dashboard
自分用に作ったClaude Code向けWebダッシュボード
~/.claude/projects/のJSONLファイルをパースして、Claude Codeの使用量(費用、トークン、セッション、パターン)を可視化するWebダッシュボードです。
Docker Composeで起動すれば完了。
自分がどれだけClaudeを酷使しているか一目で分かります(…)。
Style-Bert-VITS2
GitHub ↗Style-Bert-VITS2ベースの日本語TTSライブラリ
オリジナルプロジェクトをpip install style-bert-vits2でそのままインストールできるよう、ライブラリとしてリパッケージしています。
ONNXランタイムでCPUでもリアルタイム推論が可能で、パッケージをダウンロードして3行で推論できるようにする予定です。
kepco_powerplanner_ha_addon
GitHub ↗韓国電力公社パワープランナーのHome Assistantアドオン
オリジナルのアドオンがHA REST APIでセンサーを生成する方式だったため、Entity ID aliasを指定できませんでした。
- MQTT Discovery方式に切り替えて
unique_idを付与し、HA UIでセンサー名の変更や管理ができるよう改善 - Supervisor APIによるMQTTブローカー自動検出を追加して設定を簡素化
claude-slack-bridge
GitHub ↗Claude Code ↔ Slack双方向ブリッジMCPサーバー
Claude Codeに作業をさせて席を外すときに使うために作ったMCPサーバーです。
オリジナルからかなり拡張しましたが、主な機能は以下の通りです:
- MCPツール4種:
ask_on_slack(質問を送り回答を待機)、notify_on_slack(通知のみ送信)、upload_to_slack(ファイルアップロード)、download_slack_file(Slack添付ファイルのダウンロード) - Slack → Claude: Slackでボットをメンションするとプロジェクト一覧が表示され、選択するとそのプロジェクトでClaudeセッションが始まります。新規プロジェクト作成もSlackから直接可能。
- リアルタイム進捗: ClaudeがRead、Edit、Bashなどのツールを使うたびにSlackメッセージがリアルタイムで更新されます。
- メッセージキューイング: Claudeが作業中の時にSlackスレッドにメッセージを残しておくと、作業が終わり次第続けて処理します。
- 絵文字リアクションでキャンセル: ❌リアクションをつけると作業が中断されます。
- モデル/effort設定: スレッド内コマンドでモデル(sonnet/opus/haiku)とeffortレベルを変更でき、グローバルなデフォルト値も保存可能です。
- トークン使用量表示: 応答完了時にモデル名、トークン数、キャッシュヒット率、費用、所要時間を自動的に表示します。
ble_controller
GitHub ↗BLE GATT Writeベースの汎用Home Assistantコントローラー
AliExpressで安いTV連動バックライトを買ったのですが、アプリ連動はできるもののサードパーティ連動が別途なく.. この機会にBLE HCIダンプも学んでみようと思って始めたプロジェクトです。
専用のHA統合がないBLE機器を、UIでService UUID/Characteristic UUID/hexペイロードを指定するだけで制御できる汎用コントローラーです。
開発記ブログ記事 も書きました。
extended_graph_agents
GitHub ↗LangGraphスタイルの視覚的マルチエージェントワークフローエディタ
LangGraphにインスパイアされて作りました。
Home AssistantでEntityがどんどん増えると、一つのAgentですべてを処理するには負担が大きすぎるので、適切なsubagentに分けられないか?と思って作ってみたプロジェクトです。
今でもエンティティが300個ほどあるんですよ。
最初はReact Flowキャンバスでノードをドラッグアンドドロップしてワークフローを直接構成する方向でしたが、Claude Codeを使い込むうちに気付いたことがあります。
自分でグラフを作りたいというニーズが、実はほとんどないんですよね。
どう構成すべきかも、結局一度動かしてみないと感覚がつかめない感じですし..
そこでv2からは、Claude Codeのように自然言語でワークフローを継続的に更新し、本当にうまくいかない部分だけ最後に直接整える方向に切り替えました。
自然言語で説明するとAIがLangGraphスタイルのワークフローを自動生成/修正し、保存するとHA Conversation Agentとしてそのまま登録されます。
lemon_tts
GitHub ↗多言語入力→日本語TTS Home Assistant統合
BERT-VITSサーバーをどうせ常時動かしているので.. 知り合いと一緒に使おうという感覚で作ったHA統合です。
- 韓国語/英語などを入力すると自動翻訳後に日本語音声で出力
- APIサーバーからスピーカー一覧を取得し、スピーカーごとのTTSエンティティを自動生成
kanban
GitHub ↗Obsidianカンバンプラグイン
個人の作業管理にカンバンを使っているのですが.. Jiraは仕事で使うにはお金がかかるし、Notionは遅くて機能も使いづらく、その他もどこか一つずつ抜けている感じだったので、自分で作りました。
- カードが
.mdファイルなのでLLMで自動処理可能 - アーカイブ処理すれば個人の業務ノートとして活用可能
- Obsidianベースなのでデータが完全にローカル
write-helper
GitHub ↗LLMベースの執筆補助Obsidianプラグイン
ノート保存時にLLMが自動的にタグを推薦し、YAML定義のフォームテンプレートでフィールドごとのLLMプロンプト設定が可能なプラグインです。
何か文章を書こうと思って作ったのですが、忙しくて使わなくなってしまいました(…)。
image-manager
GitHub ↗Obsidianの画像自動最適化プラグイン
Vaultで一番容量を食うのが画像なので.. クリップボードからの貼り付けやVault追加時にJPG/PNG/HEIC→WebP/AVIFへ自動変換します。
クリップボードから貼り付けると外部リンクで画像が入ってしまい、後で壊れることもあるのですが、そういうことも防止します。
git-sync
GitHub ↗ObsidianのGit同期プラグイン
既存のgitプラグインはあるのですが.. いつもVaultを離れる前に同期するのを忘れてしまうので作りました。
Xボタンを押すとcommit→pushを自動でやってくれるので、忘れることがかなり減りました。
lemon-pyopenjtalk-prebuilt
GitHub ↗pyopenjtalkの事前ビルド済みwheelパッケージ
pyopenjtalkがPython 3.10以上をサポートしていないため、自分でビルドして公開したパッケージです。
CMake/C++コンパイラなしでpip installだけでインストール可能です。
lemon-protocol
Cloudflare R2ベースの個人用ファイル共有サービス
以前作りかけてドロップしたRabbitProtocolの後継作です。
大容量ファイルを共有する際に適切なサービスがなかったため、自分で作りました。
- S3 multipart uploadで大容量ファイルアップロード(チャンク10MB~500MB適応型)
- パスワード保護、ダウンロード回数制限、IPフィルタリング(CIDR)
- TTL 1~90日の有効期限設定
- Drop Link: 相手が私にファイルをアップロードできる1回限りの受信リンク(24時間有効期限)
- ダウンロードログ追跡とWeb Push通知
- lemon-auth連携
lemon-vitepress-theme
GitHub ↗LemonDoubleデザインシステムが適用されたVitePressテーマパッケージ
色々なライブラリを作って公開しようとしているうちに、docsページもトーン&マナーを揃えたくなって作りました。
lemon-design-systemのカラー/タイポグラフィをVitePressに適用したテーマパッケージです。
hayakoe docs はこのテーマを使って作られています。
lemon-auth
GitHub ↗auth-server連携用のNext.js認証ライブラリ
auth-serverに機能がどんどん増えていく中で(プロフィール設定、パスキー、TOTP 2FA、監査ログ、デバイス管理など…)、連携フローがかなり複雑になりました。
毎回新しいサービスごとに認証連携をゼロから書くのが嫌だったので、標準化された方式で連携できるよう作ったNext.js専用ライブラリです。
hass-kakao-map-changer
GitHub ↗Home Assistantの地図をカカオマップに置き換えるHACS統合
openrouter_monitor
GitHub ↗OpenRouterクレジット監視Home Assistant統合
skopeo-setup-action
GitHub ↗GitHub Actionsでskopeoをセットアップ
GitHub ActionsランナーにSkopeo をインストールするアクションです。
セルフホストのOCI互換レジストリにdocker buildxだけではレイヤー更新ができないので.. 必要なアクションだったのですが適切なものがなかったので、自分で作って使うことにしました。
misskey
GitHub ↗セルフホスティングのマイクロブログプラットフォーム
sns.lemondouble.com で約1年間運用しているMisskeyインスタンスです。
lemonブランチでアイコン変更などのカスタマイズをしながら、アップストリームのリリースとも継続的に同期を取っています。
fastapi-tdd
GitHub ↗FastAPI TDD講座の実習
HateGuard
ブラウザベースのヘイトスピーチ自動フィルタリングシステム
ちょうどアドブロックのように、ブラウザのDOMからヘイトスピーチをMLで自動的に取り除くシステムを構想しました。
PyTorchでモデルを学習しONNXに変換して、Transformers.jsでブラウザ上で推論する構造です。
データセット公開の問題もあって非公開で進めており、DOMからヘイトスピーチを検出して赤い枠で表示するところまでは成功したのですが..
データセットの高度化が難しく、Transformers.jsのサポートが弱く、DOMで処理するデータが多すぎて極限の最適化が必要で、一人ですべてのサイトをカバーするのが不可能だったので、いったんドロップすることにしました。
project-arona
オンデバイスMLベースのカスタムウェイクワード + アロナスピーカー
OpenWakeWordでカスタムウェイクワードを学習させて「アロナ」と呼ぶと反応するスピーカーを作ろうとしたプロジェクトです。
ウェイクワードの学習まではできたのですが.. ファームウェアを書くのが大変で、内蔵マイクの性能も良くなく、この方向で合っているのかよく分からなくなったのでドロップしました。
私は動く画面でアロナを見たかったんです。
misskey-geeknews-webhooks
GeekNews → Misskey自動投稿ボット
GeekNews (韓国の技術ニュースサイト)が提供するGoogle ChatのWebhookを受け取って、Misskeyボットアカウントで自動投稿するCloudflare Workersです。
2023年7月から約3年間運用しています。
2ヶ月ほど前にGeekNews側でドメイン検査が追加されて連携が切れていたのですが、藁にもすがる思いで.. GeekNews側に問い合わせたところ、本当にありがたいことに例外処理をしてくださり、復旧して運用が続いています。
lemon-k8s-cluster
家庭用K3Sホームラボクラスター
家庭用K3SクラスターのGitOps Configリポジトリです。
ArgoCD Apps-of-Appsパターンで管理し、ミニPC(Ryzen 3750H)とGPUワークステーション(Ryzen 5600x/RTX 3090/64GB)の2ノードで運用しています。
このクラスター上で動いているサービス:
- auth-server: Goで作ったSSOサーバー(Traefik ForwardAuth連携)
- search-server: OpenSearchベースの検索APIサーバー
- ml-server: TTS / ML関連サーバー(RTX 3090使用)
- Immich: セルフホスティングの写真/動画バックアップ
- LibreChat: マルチLLMチャットUI
- Ollama: ローカルLLM推論サーバー(KEDA HTTPスケーリング)
- OpenSearch: 検索/ログDB + ダッシュボード
- RustFS: S3互換オブジェクトストレージ
- Zot: OCI互換コンテナイメージレジストリ
- CloudNative PG: PostgreSQLクラスター(pgvector、S3バックアップ)
- Argo Workflows: cronワークフロー(フォロワーチェック、Misskeyキャッシュ整理など)
- Longhorn: 分散ブロックストレージ(SSD/NVMe/HDDの3階層)
- その他Traefik、MetalLB、cert-manager、KEDA、Sealed Secrets、Beszelなどのインフラスタック
lemon-talkgpt
talking-head-anime-3ベースのバーチャルキャラクターチャット
アニメキャラクターの画像が一枚あれば、ブラウザでそのキャラクターと会話できるプロジェクトです。
talking-head-anime-3-demo をMLサーバーに載せて上半身のアニメーションを生成し、MediaPipeで顔のランドマークを抽出してキャラクターにマッピングしました。
パイプラインがかなり長くて、音声録音→STT→ChatGPTの回答生成→翻訳→TTS音声合成→talking-head-anime-3で映像生成までを一気通貫で動かしています。
まばたきが両目で同じになるよう平均値で補正したり、会話が終わると口を閉じさせたり、頭/体の方向に応じてキャラクターが私の方を見るようにするなど、細部にもこだわりました。
ブラウザ互換のため、動画コーデックもVP9→H.264(PyAV)に変えるなど試行錯誤があり、翻訳とTTS生成を非同期で同時に走らせて推論時間も短縮しました。
自分なりに頑張って作ったのですが、現在は使っていないのでarchived状態です。
chatgpt-serverless-discord-bot
GitHub ↗ChatGPT API + Lambda Serverless Discord Botテンプレート
ChatGPT APIとAWS Lambdaを利用してServerless Discord Botを作れるテンプレートです。
ボット一つ動かすために毎回サーバーを立てると高くつきますからね~
chatgpt-serverless-slack-bot
GitHub ↗ChatGPT API + Lambda Serverless Slack Botテンプレート
lemon-chatgpt-translator
GitHub ↗ChatGPT検索時にプロンプトを自動英訳
ChatGPTで検索する際に、韓国語のプロンプトを自動で英語に翻訳してくれるChrome拡張機能です。
当時は韓国語の性能が英語よりはるかに劣っていたので、英語で質問するのがちょっとしたコツだったんですよね。
翻訳機にかけた英語が少しぎこちなくても、韓国語の回答よりはるかに良かった時代でした。
twitter-remove-doge
GitHub ↗TwitterのロゴをLarryに戻すChrome拡張
突然Twitterにイーロン・マスクがドージコインのロゴを出して(…)、これを消し去りたい気持ちで初めてChrome拡張機能を作ってみました。
Twitterのロゴを本来の持ち主であるLarryに返す拡張です。
Lemon Twitter Toolbox
TwitterベースのBERTチャットボットサービス
就職用ポートフォリオを作るついでに、面白いものを作ろう + トラフィックを多く受けそうなサービスを作って、履歴書にAWSの請求書を添付したらパッと目立つんじゃないか?と計画した野心的なプロジェクトでした。
ユーザーのツイートメンション対(質問/回答)をBERTエンベディングで学習させて、パーソナライズされたチャットボットを作るサービスです。
AWS Lambda + SQSパイプラインでML処理を並列化し、Springホームサーバーで認証/DBを担当するハイブリッド構造で作りました。
ローンチ当日にSpringのSQS消費ボトルネックとTwitter APIのレートリミットが同時に発生してかなり苦労したのですが、詳しい話は振り返り記事に書いています。
LLMが普及した今ではBERTというと古い技術に見えるかもしれませんが、当時は学部生基準でかなり目新しい最新技術だったんですよ。
RabbitProtocol
総合ファイル管理プログラム
Beacon_based_Automatic_visitor_check_program (GBPL)
GitHub ↗Bluetoothビーコンベースの訪問日誌自動化
コロナ禍ですべての人が出入りのたびに日誌を書いていた時期があったのですが、BLEを使ってサッと通り過ぎれば自動で記録されるようにしたら、お互い良いんじゃないか?と思って作ったプロジェクトです。
学校のグローバル協力プログラム(GBPL)で日本、中国、台湾、ベトナムの友人たちと一緒に進めたのですが、様々な国の友人たちと協業できた本当に貴重な経験でした。
Bluetoothビーコンも自分で作ってみましたし、Androidは何も知らなかったのですが、なんとか動くように作りました(…)。
Audio_processing_practice
GitHub ↗音声処理スクリプト集
初めてインターンをした時、音楽処理関連のスタートアップに入ったのですが、勉強用に作ったリポジトリです。
メルスペクトログラムなどをここで学び、今VITSで遊ぶのに役立っています。
結局学んでおけばすべて役に立つものですね。
Socket_Order_Program
GitHub ↗C++ソケット/スレッドベースの料理注文サーバー/クライアント
大学のネットワークソケットプログラミング授業の課題で、発表前日に徹夜してギリギリで作った記憶があります(…)。
C++でローレベルのソケット通信を初めて行い、パケットサイズも自分で決めてカスタム通信をしてみたのですが、なかなか面白かったです。
C_minus_compiler
GitHub ↗C minusコンパイラ実装
大学のコンパイラ授業の課題です。
ScannerとParserまで実装したのですが、もっとやりたかったものの学部の1学期は短くて、ここまでしか..
いつか機会があれば、自分の言語を作ってみたいですね。
面白かったので。
Simple_IR
GitHub ↗TF-IDFベースのシンプルな情報検索エンジン
大学の情報検索(検索エンジン)授業の課題です。
文書を読み込んでTF-IDF weight dictionaryを作り、クエリとの類似度を測定して上位10件の結果を出力します。
Spring_sample_Simple_Forum
GitHub ↗勉強用の掲示板作成
Springを初めて使ったプロジェクトです。
シンプルなシステムから段階的に要件を追加しながら、オブジェクト指向設計とテストがなぜ必要かを考えてみました。
python_architecture
GitHub ↗Architecture Patterns with Python本の実習
“Architecture Patterns with Python” (Cosmic Python)本を読みながら、DDD、Repositoryパターン、Unit of Work、CQRS、イベントドリブンアーキテクチャといったものを学習したリポジトリです。
多くのことを学びましたが、実際に適用するのはまた別の話だということを仕事をしながら気付きました。
Omok / Snake_Game / Simple_SQL
GitHub ↗大学1年生時代のプロジェクト
大学1年生の時にC/C++を学びながら作ったものです。
- 五目並べゲーム
- System Callベースのスネークゲーム
- MySQLの基本機能を真似たシンプルなSQL実装
1年生の時のものなので可愛く見てください(…)。当時は本当に難しかったんですよ..