Skip to content
View Tsuchiya2's full-sized avatar

Block or report Tsuchiya2

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
Tsuchiya2/README.md

Tsuchiya

Backend Engineer | Ruby on Rails / Go | AI-Driven Development

About Me

Ruby on Rails を軸にしたバックエンドエンジニアです。以下の Featured Projects は個人開発です。


Featured Projects

catchup-feed

技術情報を毎朝10〜15分のラジオ番組に自動変換して届けるパーソナルポッドキャストシステム(実稼働中)

RSS・YouTube・ポッドキャストから技術情報を自動収集し、LLMで要約 → 台本生成 → VOICEVOXで音声合成した番組を、毎朝ポッドキャストアプリに配信するシステム。初代(RSS要約のSlack/Discord配信ツール)の運用で「配信された記事数を最適化しても理解は定着しない」ことを確認し、最適化目標を理解の定着に再定義して作り直しました。育児等で手と目が塞がる細切れ時間でも耳から消化できる形です。クイズ生成とspaced repetitionによる学習ループも音声に注入しています。

項目 内容
バックエンド Go 1.27(単一モジュール、server / worker / radio の3バイナリ構成)
フロントエンド Next.js 16 + TypeScript (Strict) + TanStack Query(PWAダッシュボード)
AI / 音声 要約: Gemini → Groq → Ollama フォールバック連鎖 / TTS: VOICEVOX / 文字起こし: faster-whisper
インフラ Raspberry Pi 5 + M3 Mac(夜間バッチ)+ Cloudflare Tunnel + Tailscale + Vercel
ダッシュボード pulse.catchup-feed.com(要ログイン)

Catchup Feedの処理フロー(情報収集 → AI処理 → 音声生成 → 配信・視聴)

画面イメージ(ポッドキャスト受信 / 復習 / ソース管理 / 学習トラッカー)

毎朝生成された番組が購読中のポッドキャストアプリに自動で届き(左・画像はAntennaPod)、番組で出題されたクイズはダッシュボードでふりかえれます(右)。手と目が塞がる時間は耳で消化し、あとから理解を定着させる流れです:

ポッドキャストで受信 ダッシュボードで復習
ポッドキャストアプリでの受信画面(画像はAntennaPod) ダッシュボードの復習画面(番組で出題されたクイズをふりかえる)
ソース管理(RSS / YouTube / Podcast) 学習トラッカー(spaced repetition)
ソース管理画面 学習トラッカー画面
技術的なポイント(アーキテクチャ / バックエンド / フロントエンド / 開発プロセス)

アーキテクチャ:

  • クリーンアーキテクチャ(domain / usecase / repository / handler / infra)で管理APIを構成。依存方向の違反ゼロを go list で検証(handler→infraの直接参照0件、ドメイン層の外部依存0件・ORMタグなし)
  • 層で括るか用途で括るかをバイナリ単位で使い分け — バッチは用途別パッケージに切り、必要なメソッドだけを利用側で定義するGo流のポート(consumer-side interface)で抽象化。教科書からの逸脱は理由とともにドキュメント化
  • 単一ユーザーに右サイズした設計(初代のマイクロサービス・gRPC・Prometheus を「要件に対して過剰」と判断して撤去し、253ファイル・差し引き約7万行を削減)
  • 縮退許容設計 — 「壊れない」より「壊れても翌日勝手に戻る」(Mac不在→エピソード欠番、無料API全滅→ローカルLLM、TTS障害→当日スキップ)
  • 固定費ゼロ運用 — LLMは無料枠→ローカルのフォールバック、ホスティングは自宅Pi 5 + Cloudflare Tunnel
  • プライバシー分界 — クラウドAPIに流すのは公開記事のみ、書籍・私的データはローカルLLM(Ollama)に限定
  • 設計判断は決定ログ(D-xx / C-xx)として記録しながら開発

バックエンド:

  • RSS / YouTube / ポッドキャストのマルチモーダル取り込み + 書籍PDFのRAG取り込み(Python + pgvector)
  • 理解定着の学習ループ — 放送記事からクイズを自動生成し、spaced repetition(3段ラダー)で復習を翌朝の番組に注入
  • トークン認証付きプライベートRSS配信(友人への限定配信、平文トークン非保存・404統一応答)
  • セキュリティ実装 — HttpOnly Cookie JWT・SSRF防御・XFF詐称対策のレート制限
  • テスト — 本体26,013行に対しテスト48,283行(162ファイル)。インターフェースを小さく保ち、モック生成ツールに依存せずテスト可能な構造を維持

フロントエンド:

  • OpenAPI仕様からの型自動生成によるEnd-to-End型安全性
  • ソース管理・トークン管理・アクセスログ・学習トラッカーのPWAダッシュボード

開発プロセス:

  • Claude Codeのマルチエージェントオーケストレーション(親がタスク分解・裁定、実装エージェントとレビューエージェントを分離)で開発

📦 フロントエンド リポジトリ 📦 AI リポジトリ(文字起こし・書籍RAG) 📐 アーキテクチャドキュメント(層構成・依存ルール・設計判断の記録)


EDAF

AIコード生成の品質を自動評価・保証する7フェーズ開発フレームワーク

EDAFの全体像(7フェーズ開発フロー / Generate → Evaluate → Feedback → Improve の自己改善ループ / 40評価者による7カテゴリ評価)

Claude Codeのサブエージェント機能を活用し、7フェーズ・49コンポーネント(9つの専門エージェント + 40の評価者) による多層的な品質ゲートを実装。AIが生成したコードを自動的に評価・改善するサイクルを構築しました。

項目 内容
技術 Claude Code Subagent, Prompt Engineering
特徴 7フェーズ品質ゲート、自己適応型アーキテクチャ(技術スタック自動検出)
対応 11言語、50+フレームワーク
技術的なポイント
  • 並列評価によるパフォーマンス最適化
  • サンドボックス実行による安全なコード評価
  • フィードバックループによる自動修正・再評価
  • 各フェーズの設計書・評価結果を自動でドキュメント化し、人間が最終判断できる状態を維持

📝 EDAFの解説記事(Qiita) ※解説記事は2025年12月時点の構成(5フェーズ・32エージェント)。現在は7フェーズ・49コンポーネントに拡張


ReLINE

休眠グループチャットを活性化するLINE Bot

ReLINEの全体像(主な機能 / 休眠検知 → きっかけ配信 → 会話再開 → 効果可視化のフロー / システムアーキテクチャ / データと状態管理 / 技術スタック / テスト / セキュリティ / 運用・可観測性)

コロナ禍で連絡が途切れがちなグループに、かわいい猫のマスコットが会話のきっかけを自動配信。LINE Messaging APIのWebhookを単一エンドポイントで受け、イベントの振り分けと外部への送信を分離した構成で実装しました。独自レイヤーを積むのではなく、モデル・concern・ジョブというRails標準の置き場に収めています。

項目 内容
バックエンド Ruby 4.0.5 + Rails 8.1.3 + MySQL 8.0
連携 LINE Messaging API(line-bot-api v2)
フロントエンド Hotwire (Turbo + Stimulus) + Bootstrap 5、インストール可能なPWA
テスト RSpec + Selenium(行・ブランチともに100%カバレッジ)、Jest(Service Worker)
運用 ヘルスチェック / Prometheusメトリクス / 構造化ログ(lograge)
技術的なポイント(アーキテクチャ / バックエンド / フロントエンド / 品質)

アーキテクチャ:

  • 単一のWebhookエンドポイントでメッセージ・参加・退出・フォローの各イベントを処理。CatLineBotが振り分けに徹し、LINEへの送信はLineReminderJob / LineWelcomeMessageJobへ委譲することで、Webhookの応答時間を外部APIに引きずられないようにしています
  • SDK依存の局所化 — Line::Bot::V2::*に触れるのはLineMessagingだけに限定し、SDKのバージョン変更の影響範囲を1モジュールに閉じ込め(v1→v2移行もこの範囲で完結)
  • 失敗への備え — 通信エラーはActiveJobのretry_onで指数バックオフ再送。処理できなかったイベントはErrorSanitizerで資格情報を伏せたうえで運用者へメール通知
  • 独自レイヤーを増やさない設計 — Rails標準の語彙(モデル / concern / ジョブ)に収め、Fat ControllerとFat Modelの両方を回避

バックエンド:

  • 認証をSorceryからRails 8標準のhas_secure_passwordへ移行し、Authentication(コントローラーconcern)とBruteForceProtection(モデルconcern)に集約
  • punditによるポリシーベースの認可、rack-attackによるレート制限・ブルートフォース対策
  • 可観測性 — /health(liveness)・/health/deep(DB + ディスク)・/health/ready(readiness)と、Prometheus形式の/metrics(本番はBasic認証)を提供

フロントエンド:

  • Service Workerのキャッシュ戦略(cache-first / network-first / network-only)をStrategyRouterがリクエストごとに振り分けるPWA
  • 戦略とマニフェストはconfig/pwa_config.ymlへ外部化しGET /api/pwa/configで環境別に配信、マニフェストはI18n対応で動的生成
  • クライアント側のログ・メトリクスをPOST /api/client_logs / POST /api/metricsで収集

品質:

  • SimpleCovで行・ブランチともに100%を必須化(下回るとRSpecが失敗終了)
  • GitHub ActionsでRSpec(MySQL 8.0サービス)とRuboCopを実行し、mainへのマージでリリースを自動作成
  • brakemanbundler-auditによるセキュリティ監査

📐 テストガイド(テスト構成・カバレッジ方針・CI)


Tech Stack

Backend

Ruby Rails Go Python PostgreSQL MySQL

Frontend

TypeScript React Next.js Hotwire Bootstrap

Infrastructure / DevOps

Docker GitHub Actions Cloudflare Tailscale Raspberry Pi

AI / LLM

Claude Gemini Ollama Groq VOICEVOX


Links

Qiita X

Popular repositories Loading

  1. evaluator-driven-agent-flow evaluator-driven-agent-flow Public

    A framework-agnostic system for AI-powered code generation with automatic quality gates. Self-adapting workers and evaluators for any language/framework.

    Shell 1

  2. ReLINE ReLINE Public

    🐱 会話が止まったLINEグループを、かわいい猫のメッセージで自然に再開させるLINE Botサービス。休眠検知・自動メッセージ配信・管理ダッシュボードを備え、Ruby on Rails 8 と LINE Messaging API で構築。

    Ruby

  3. catchup-feed-backend catchup-feed-backend Public

    毎朝10分の音声ラジオ番組をポッドキャスト配信する個人向け学習システムのバックエンド(Go / Raspberry Pi 5 / VOICEVOX)

    Go

  4. Tsuchiya2 Tsuchiya2 Public

  5. catchup-feed-frontend catchup-feed-frontend Public

    毎朝の音声ラジオ番組を配信する個人向け学習システム catchup-feed の運用ダッシュボード(Next.js PWA)

    TypeScript

  6. catchup-feed-ai catchup-feed-ai Public

    catchup-feed(毎朝の音声学習システム)の Python コンポーネント:faster-whisper による YouTube/ポッドキャストの文字起こし + 書籍 PDF のローカル RAG 取り込み

    Python