lnitc

プロジェクト

  • ポートフォリオサイト

    Next.jsTypeScriptTailwind CSSshadcn/uinext-intl

    Next.js 16 App Router + TypeScript + Tailwind CSS v4 + shadcn/ui で構築した日英バイリンガル対応の開発者ポートフォリオ。両ロケールの静的生成・型安全な翻訳・ダークモードを実装し、Vercel にデプロイ済み。

    役割: 個人開発

    機能

    • 日英バイリンガル対応 — next-intl v4 によるランタイム言語切り替え(日本語デフォルト)
    • ダークモード — クラス戦略による OS テーマ連動 + Light / Dark / System の手動切り替え
    • 静的生成 — generateStaticParams() でビルド時に日英両ロケールを事前レンダリング
    • 型安全な翻訳 — messages/ja.json からすべてのメッセージキーを TypeScript が推論。キーの誤字・欠落はコンパイル時にエラー
    • プロジェクトを箇条書きセクション・技術スタックバッジ・GitHub / デモリンク付きで掲載
    • キャリアチャットボット(Hugging Face Spaces の Gradio アプリ)をローディングスピナー&フェードイン付きで About ページに埋め込み
    • レスポンシブサイドバー — モバイルはオフキャンバス式コラプス、デスクトップは常時表示

    アーキテクチャ

    • Next.js 16 App Router — next-intl のミドルウェア接続に proxy.ts(middleware.ts ではなく)を使用。エクスポート関数名は proxy
    • Tailwind CSS v4 — CSS ファイルのみで設定(OKLCH カラートークン含む)。tailwind.config.ts は不要
    • shadcn/ui プリミティブ + Radix-Maia スタイル + HugeIcons アイコンセット
    • プロジェクトメタデータを lib/projects.ts(ProjectMeta 型)で一元管理 — ホームページカードとプロジェクトページのレンダリングを制御
    • Vercel の GitHub 自動デプロイ連携。環境変数の設定は不要
  • Google Workspace 管理ダッシュボード

    ReactNext.jsNode.jsExpress.jsPostgreSQLRedisDocker

    Google Workspace 管理者向けの拡張機能 Web アプリケーション。8名チームによるアジャイル開発で、Google グループ管理・メンバー操作・階層構造の可視化など幅広い機能を担当。

    役割: メンバー・タスク作成 / 振り分け

    バックエンド(Google API)

    • Google グループの一覧取得・作成・検索エンドポイント
    • グループメンバー管理(一覧取得・追加)
    • アクティビティログ取得
    • グループ階層・ネストされたメンバーシップ取得
    • Google API 権限借用の認証モジュール

    フロントエンド / 開発者向けツール

    • グループ新規作成・CSV / 連番での一括作成
    • CSV によるメンバー一括追加・削除
    • グループメンバー詳細の CSV エクスポート
    • ネストされたメンバーシップ表示ページ
    • グループ階層構造のグラフ可視化ページ
    • グループ管理ページ(フィルタ・テーブル・CSV ダウンロード)
  • Gmail 自動化 Chrome 拡張機能

    JavaScriptChrome Extension APIBootstrap

    定期メール送信・連絡先グループ管理・Google Drive バックアップ機能を持つ Gmail 自動化 Chrome 拡張機能。6名チームでゼロから開発し、要件定義・アプリ全体のコアロジック・初期 UI 実装を主に担当。

    役割: メンバー

    定期メール管理画面

    • 定期メールの作成・編集・削除
    • Gmail エイリアスの送信元設定
    • Google コンタクト連携による動的な宛先検索
    • Cc / Bcc・下書き保存・下書きからの復元
    • 件名・宛先によるメール検索
    • 言語切り替え(日本語・英語)

    連絡先管理画面

    • ポップアップ内での Google コンタクトの直接作成・編集・削除
    • 連絡先グループ(ラベル)の作成・削除・付け外し
    • ラベル単位での宛先一括挿入

    バックグラウンドタスク

    • 指定頻度でのメール自動送信
    • メールデータ・スケジュール・下書きの localStorage 保存
    • Google ドライブへの自動バックアップ
  • 汎用 RAG アプリ

    PythonTypeScriptFastAPINext.jsPostgreSQLAWS Bedrock

    社内ドキュメント検索用の汎用 RAG アプリにプロジェクト中途から参画。UI/UX 改善・バックエンド API 実装・RAG 精度向上・GraphRAG の PoC まで、フルスタックで機能追加・改善を主導。

    役割: メンバー・タスク進捗管理 / 作成 / 振り分け

    フロントエンド

    • 複数ファイルの一括アップロード・再アップロード・プレビュー機能の UI 実装
    • Context API・カスタムフックを活用したリファクタリングで保守性・再利用性を向上
    • Zod 導入によるスキーマバリデーションと型定義の統一

    バックエンド・LLM チューニング

    • ファイル操作(マルチアップロード・プレビュー等)対応の API エンドポイント設計・実装
    • マルチプロンプティング手法導入による LLM 回答精度と文脈理解度の改善
    • チャンククオリティ評価指標(MRR・NDCG 等)の導入による検索精度の定量評価
    • ダミードキュメント生成モジュールの開発でテスト・評価を効率化
    • GraphRAG(Neo4j)導入に向けた技術調査および PoC の実施
    • 同期処理から非同期処理アーキテクチャへの移行調査・実装

    テスト・品質保証

    • Pytest を用いた API エンドポイントの単体テストおよびストレステストの設計・実施
    • 手動動作検証・チーム内コードレビューによる品質向上
  • ドキュメント処理システム

    PythonFastAPIStreamlitDockerGoogle Cloud

    画像・PDF からの OCR テキスト抽出・翻訳、Google Cloud Document Translation API を使ったレイアウト保持のドキュメント翻訳、PDF コンパイラを提供する Web アプリ。Google Cloud Vision / Translation API を活用し、Docker Compose でコンテナ化。

    役割: 個人開発

    OCR・翻訳

    • 画像(JPG/PNG)または PDF をアップロードし、Google Cloud Vision API でテキスト抽出
    • デジタル PDF は直接抽出、スキャン PDF・画像は Vision API で OCR
    • 翻訳前に抽出テキストを手動編集可能
    • Google Cloud Translation API で任意の言語ペアに翻訳
    • 翻訳結果を .txt ファイルでダウンロード

    ドキュメント翻訳(レイアウト保持)

    • Word(.doc/.docx)・PowerPoint(.ppt/.pptx)・Excel(.xls/.xlsx)・PDF をアップロード
    • Google Cloud Document Translation API でドキュメント全体を翻訳し、元のレイアウト・書式を保ったまま出力 — テキスト抽出・手動編集の工程が不要
    • オンライン(同期)翻訳のみ対応:ファイルサイズ 20MB まで(ネイティブ PDF 300 ページ・スキャン PDF 20 ページまで)
    • 出力形式は常にアップロード時と同じ形式
    • 翻訳済みドキュメントを元の形式でそのままダウンロード

    PDF コンパイラ

    • 複数の画像(JPG/PNG)または PDF をアップロード
    • アップロード順に A4 サイズの PDF へ統合
    • 統合済み PDF をダウンロード
  • キャリアチャットボット

    PythonGradioOpenAI APISupabaseGoogle Cloud

    Gradio と OpenAI API で構築した AI チャットボット。GPT-4o mini を用いて経歴・スキル・経験に関する質問に回答し、興味を持った訪問者のメールアドレスを収集・管理します。Hugging Face Spaces にデプロイ済み。

    役割: 個人開発

    機能

    • GPT-4o mini を活用して経歴・スキル・経験についての質問に回答
    • 興味を持った訪問者のメールアドレスを Supabase に記録
    • Google Cloud Gmail API で新規コンタクト登録時にメール通知を送信
    • 回答できなかった質問を Supabase に記録・管理
    • Gradio で UI を構築し Hugging Face Spaces にデプロイ
  • RAG エージェントシステム

    PythonFastAPIStreamlitLangGraphPostgreSQLRedisDockerGoogle Cloud

    Google Workspace 向けのエージェント型 RAG システム。Google Drive 共有ドライブを連携して複数形式のドキュメントを差分インデックス化し、自己修正型検索・スレッドごとの会話メモリを備えたトークンストリーミング WebSocket チャット UI でチームの質問に回答します。

    役割: 個人開発

    取り込みパイプライン

    • マルチフォーマット対応: PDF・Google ドキュメント/スプレッドシート/スライド・DOCX・CSV・テキスト/Markdown
    • 差分インデックス: Drive の modifiedTime を比較し、新規・更新ファイルのみ再解析・再埋め込み。Drive から削除されたファイルはインデックスからも削除
    • LangGraph ステートマシン: list_files → sync_files → build_bm25。Redis ロックで同一ドライブの並行取込みを防止
    • ドライブのステータス遷移(ingesting → active/error)を UI に表示
    • BM25 インデックスの日本語トークナイザーに Janome を使用

    RAG・チャット

    • ハイブリッド検索: pgvector ベクトル検索 + BM25 全文検索を Reciprocal Rank Fusion で統合。BM25 インデックスは Redis から消えた場合 PostgreSQL から自動再構築
    • Cohere によるリランキングで最終チャンクを選択
    • 自己修正型検索ループ: リランクスコアが閾値未満のとき LLM ノードがクエリを書き換えて検索をリトライ(最大 1 回)
    • 会話メモリ: LangGraph チェックポインタがスレッドごとの会話履歴を保持。フォローアップ質問は独立した検索クエリに文脈解決
    • リアルタイムトークンストリーミング: 構造化出力を使いながら JSON ストリームを逐次パースし、answer フィールドのトークンのみ WebSocket に配信
    • インデックスベースの出典表示: プロンプト内で抜粋に番号を振り、LLM は番号で引用(ファイル名ではない)するため出典が常に正確
    • 管理者限定 Google OAuth: バックエンドが ID トークン・ドメイン・Workspace 管理者ロールを Admin SDK で独立検証
    • Redis レスポンスキャッシュ: 回答済みクエリをキャッシュし、ドライブの再取込み・切断時に自動無効化
    • 未回答時の Gmail 通知: 関連ドキュメントが見つからない場合にクエリを記録し、管理者にバックグラウンドで通知(同一クエリは 1 日 1 回に重複排除)
  • 設備点検アプリ

    Ruby on RailsRubyMySQLBootstrapHeroku

    教室設備の点検結果をタブレット・スマートフォンから現場で記録・共有できる Ruby on Rails 製モバイルファースト Web アプリ。設備ごとのステータス管理・画像アップロード・コメントスレッドに対応。プログラミングスクール卒業制作として個人開発。

    役割: 個人開発

    点検管理

    • 点検の作成・編集・削除
    • 点検名と作成者名をカード形式で一覧表示
    • 各点検カードからチェックシート一覧へ遷移

    チェックシート管理

    • 設備ごとのステータス(OK・NG 等)をドロップダウンで選択して作成
    • 設備ごとにテキスト詳細と画像のアップロードが可能
    • 担当者・ヘルパーを登録済みユーザーからドロップダウンで指定
    • 教室ごとの点検結果・実施日・担当者を詳細表示
    • チェックシートの編集・削除

    コメント

    • 画像付きフォローアップコメントをチェックシートに投稿
    • コメントを新着順で一覧表示
    • 自分のコメントのみ削除可能
  • AI ニュース投稿 Bot

    PythonOpenAI APINewsAPIGoogle CloudTerraformDocker

    2日に1回(20:00 JST)、キーワードに合った最新ニュースを NewsAPI で取得し、GPT-4o が日本語ツイートに変換して X に自動投稿するサーバーレスエージェント。Cloud Scheduler → Cloud Run Job のパイプラインで完全自動化。

    役割: 個人開発

    自動投稿パイプライン

    • Cloud Scheduler が2日に1回・20:00 JST に Cloud Run Job を起動
    • ラウンドロビンでキーワードを選択し、インデックスを Cloud Storage に永続化
    • NewsAPI で最新記事を取得(日本語優先、英語フォールバック)
    • GPT-4o が 280 文字以内の日本語ツイートに変換
    • OAuth 2.0(リフレッシュトークンローテーション)で X に投稿し、キーワードインデックスを更新

    インフラ・デプロイ

    • GCP リソース全体を Terraform で管理(Cloud Run Job・Cloud Scheduler・Cloud Storage・Artifact Registry・Secret Manager・サービスアカウント・IAM)
    • ワンコマンドデプロイ: terraform apply → Docker ビルド&プッシュ → Secret Manager 登録 → テスト実行
    • 月額コスト: 約 $3.00
  • LINE グループ ↔ メール ブリッジ

    PythonAWS LambdaAmazon SESTerraformLINE Messaging API

    Python と Terraform で AWS 上に構築したサーバーレスの双方向ブリッジ。送信方向: パブリック Function URL の裏に Lambda を配置し、LINE Webhook を受信して SES でメール通知を送信。受信方向(任意): 専用サブドメインの秘密アドレスにメールを送ると、Lambda がメール本文をグループへの LINE push メッセージとして投稿。

    役割: 個人開発

    送信パイプライン(グループ → メール)

    • パブリック Function URL の裏に Lambda を配置し LINE Messaging API の Webhook を受信。X-Line-Signature ヘッダーを HMAC-SHA256 で署名検証
    • チャンネルアクセストークンで送信者の表示名を取得。テキスト以外のメッセージは [<type> message] として表示
    • カスタムドメインの DKIM 検証済みアドレスから Amazon SES でメール送信(DMARC 準拠)

    受信パイプライン(メール → グループ)

    • 専用サブドメインの MX レコードで SES がメールを受信し S3 に保存、Lambda をトリガー
    • 3 段階のセキュリティゲート: SES の DMARC 判定が PASS・From アドレスが allowed_senders に含まれる・秘密アドレス宛のメールである、の 3 条件をすべて満たす場合のみ投稿
    • 署名・引用返信を除去し、メール本文を LINE push メッセージとしてグループに投稿(上限約 4900 文字)

    インフラ

    • Lambda・SES・S3・CloudWatch・IAM・Function URL など全 AWS リソースを Terraform で管理
    • SES Easy DKIM によるカスタムドメイン検証。Gmail / Yahoo などの共有プロバイダーは厳格な DMARC ポリシーを公開しているため送信元に使用不可
    • AWS プロバイダー 6.28 以上が必要: パブリック Function URL には lambda:InvokeFunctionUrl と lambda:InvokeFunction の両許可が必要(2025 年 10 月以降、6.28 以上で自動追加)