SENN の開発よもやま話

SENN の歩みと、最新バージョン(ベータ版)

QA ツールから始まり、チームの仕事に必要なものを一つずつ足してきました。
最新バージョン(ベータ版)は、その積み重ねの上にあります。でも、終点ではありません。

最新バージョンをベータ版として公開しています。社内でも毎日使っています。

  1. 表紙。SENN の歩みと、最新バージョン(ベータ版)。困ったから、足してきた。QA ツールから 7 か月、チームの「これが要る」を積み重ねた道具。最新バージョンをベータ版として公開している。社内でも毎日使っている。
  2. 困ったから、足した。3月、品質の確認を回したいので QA の記録。4月〜、誰が何をやっているか分からないのでチケット、いつ終わるのか見えないのでガントチャート、手順や決めたことが散らばるので Wiki。6月末〜、開発の仕事は期限で切りにくいのでポイントとサイクル、何から手を付ければよいか分からないので依存関係。9月、更新に気づかないのでリアルタイムの反映、操作のたびに待たされるのでIndexedDB(ローカルファースト)。一つ足すと、次の困ったが見えてくる。
  3. 仕組みも、そのたびに作り変えた。AI と一緒に。QA Tool(Django)、WIP(Django と機能追加)、SENN(Rust、React)、ローカルファースト(IndexedDB と WebSocket)、最新バージョン(ベータ版・見せ方の決まり)。3 月の最初の QA ツールから、ずっと AI と一緒に作ってきた。
  4. 最新バージョン: 開いて、守るものだけ閉じる。チームのチケットは、これまでそのチームのメンバーだけだったが、ベータ版では公開チームなら社内の誰でも見られる。守りたいチームは非公開にすると、参加者以外からはあることも見えない。チケットはプロジェクトに入れなくても、チームのチケットとして作れる。社外の人は招待した範囲だけ、AI はキーを持つ人と同じ範囲で動く。細かい権限は作らず、公開か非公開かだけで決まる。
  5. 最新バージョン: 決まりは 1 か所。画面、IndexedDB への同期、リアルタイム、AI と外部のすべてが、1 か所の見せ方の決まりを通ってデータに届く。切り替えは試運転から。新旧の決まりを並べて動かし、違いを確かめてから少しずつ。
  6. でも、終点じゃない。いま開発を進めている機能(次のバージョンで提供予定)。レポート(進み具合や負荷を探さなくても分かるように)、ドキュメント連携(外にある資料と、チケットや Wiki を行き来できるように)、議事録連携(会議で決まったことをそのままチケットや Wiki へ)、障害管理の自動化(障害を見つけたら過去の記録を LLM と RAG で引き、記録・調査・対策までを自動で)、知見の入口(業務のエキスパートの知見やノウハウを LLM・RAG にためて引き出す。SENN はその入口になる)。どれも、チームで仕事をするなかで「これが要る」となったもの。
  7. 最新バージョン(ベータ版)のアーキテクチャ。ブラウザ(React SPA)では React と TanStack Query の画面が IndexedDB(Dexie)を使い、sync engine と outbox でスコープ済みのデータだけを持つ。AI エージェント(Claude Code・Cursor・Antigravity)は MCP 経由で、API キーの発行者と同じ権限で動く(MCP は社内版)。REST API(axum)、Sync API(差分 pull / push)、WebSocket 配信、MCP / 外部 API のすべてが、1 つのアクセスポリシー(domain::access の can() と scope_sql。Public / Private と、社内・管理者・Guest・AI の区別で判定)を通って PostgreSQL(sqlx、LISTEN / NOTIFY)に届く。開発中のレポート、議事録、ドキュメント連携、障害管理の自動化、LLM と RAG への入口も同じポリシーを通る。ここまで積み重ねてきたもの。でも、終点じゃない。必要になったものを、一つずつ。これからも。