Recto MD
本のように読める、Markdownリーダー兼エディタ。
無料 · App Store(Mac / iPad / iPhone)と Mac 向け直接ダウンロード
公式サイトは、アプリやサービスの裏側を支える
ItsuCaraの共通技術基盤です。
データを守り、権限を整え、AIの変化に備える。
サービスに必要な共通の仕組みを、
一つの土台にまとめます。
サービスの裏側で守ること
見えないところを支える、共通の土台
ItsuCaraが企画・開発・提供するアプリです。
対応環境や提供状況は、各公式サイトでご確認いただけます。
本のように読める、Markdownリーダー兼エディタ。
無料 · App Store(Mac / iPad / iPhone)と Mac 向け直接ダウンロード
公式サイトコピーした内容を、すぐに呼び出せるクリップボード履歴。
現在は無料 · Apple 公証済み
公式サイトMacの中だけで処理する、日本語音声入力。
現在は無料 · 直接ダウンロードと Mac App Store
公式サイトAIに秘密の値を見せずに使わせる、パスワードマネージャー。
無料・オープンソース(MIT または Apache 2.0)· Apple 公証済み · 英語のみ
公式サイト重量と回数、自己ベストを残すトレーニング記録。
Google Play で配信中 · App Store は近日公開予定
公式サイト教科書やPDFから、自分に合った英語学習コースを。
App Store・Google Play(日本)で配信中
公式サイト紙の文字を読み取り、テキストとして持ち出すOCRアプリ。
ベータ版 · App Store は準備中
公式サイト02 / WHY
動くものをつくることと、
安心して使い続けられることは違う。
だから、機能を積む前に
何を守り、どう確かめるかを決める。
出力を検証してから業務につなぐ。
データの境界をDB層で守る。
誰が何をできるかを、一箇所で判断する。
モデルと業務の処理を、直接つなぎすぎない。
サービスごとに違うのは、事業の機能。
共通して守るべきことは、基盤にまとめる。
01 / データ境界
会社・店舗ごとの情報をDB層で分離。アプリ側の書き忘れに頼らず、データの境界を守る。
ALTER TABLE records ENABLE ROW LEVEL SECURITY;
ALTER TABLE records FORCE ROW LEVEL SECURITY;
CREATE POLICY tenant_isolation ON records
USING (tenant_id = current_setting('app.tenant_id')::uuid);02 / 認証・権限
誰が何を見て、何を操作できるか。実行直前の一箇所で判断し、サービス全体に同じルールを通す。
const decision = await authz.evaluate({
actor: { id: ctx.user.id, roles: ctx.user.roles },
action: 'invoice:delete',
resource: { type: 'invoice', id, tenantId },
})
if (!decision.allowed) throw new Forbidden(decision.reason)03 / 実行記録
いつ、誰が、何をしたかを記録。AIの入出力は本文ではなくハッシュを残し、後から経緯を確かめられるようにする。
await audit.append({
actor: ctx.user.id,
tenantId: ctx.tenantId,
action: 'ai:generate',
ai: { model, promptHash, outputHash }, // 本文は保持しない
prev: lastHash,
at: now(),
})04 / モデル接続
業務の処理とAIの接続部分を分ける。モデルの差し替えに備え、処理ごとにモデルとトークン量を選ぶ。
const ai = createAdapter(pickModel(task))
const result = await ai.run(prompt, schema)
// 軽い処理は軽いモデル・少ないトークンへ05 / AI境界
出力を検証・型変換してから業務へ渡す。想定外の応答には代替処理を用意し、システムの内側を守る。
const raw = await llm.complete(prompt)
const parsed = OutputSchema.safeParse(raw)
if (!parsed.success) return fallback(ctx)
return parsed.data06 / テスト
権限・データ分離・AI境界・記録を自動テスト。機能を増やしても、守るべき仕組みを繰り返し検証する。
describe('tenant isolation', () => {
it('他テナントのデータは絶対に返さない', async () => {
const rows = await queryAs(tenantB)
expect(rows.every(r => r.tenantId === tenantB.id)).toBe(true)
})
})TECHNOLOGY
型・データ・AIの境界を、実装に落とし込む。
共通化
認証・認可・データ分離・記録を共通の仕組みにまとめ、サービス固有の機能に開発を集中する。
再利用
必要な仕組みを組み合わせ、同じ設計を繰り返さない。構成や開発期間は、サービスの要件に合わせて決める。
継続性
機能の追加やAIモデルの更新を見据え、業務の処理と基盤の役割を分けておく。
AIの接続も共通化。処理ごとにモデルとトークン量を選び、更新のしやすさと運用コストを考える。
ITSUCARA &
派手な機能より、崩れない構造を選んだ。
信頼は、後から追加できない。だから最初に設計する。
会社のフォーム(itsucara.com)へ移動します。