本文へ移動
カトレアテック Catrare Tech

トップ / 開発状況 / 2026年10月

2026年10月の開発状況

自社プロダクトの、この1か月の主な変更と技術のトピックです。今月は確定申告準備の DEDUCT を公開し、iPhoneアプリの Ride Metrics とにゃんくらいむの App Store での配信を始めました。

2026年10月31日時点の内容です。

Webアプリ・公開中

LEDGER(帳簿システム)

10月に公開した版:1.5.2 〜 1.19.0(19回)

今月の主な変更
  • 振替:取引の区分に「振替」を追加し、事業⇄個人・事業外の入金・事業用口座どうしの4種類のお金の動きから、事業主貸・事業主借などの2行仕訳を自動で作るようにしました。損益の集計からは外し、貸借対照表・元帳にだけ反映します
  • 償却方法の選択:定額法に加えて、一括償却資産(3年均等・直接法)と少額減価償却資産の特例を選べるようにし、償却仕訳を年度締めで自動生成するようにしました
  • 消費税:取引・出金伝票・固定資産・手動仕訳の明細に8種類の消費税区分を持たせ、「売上/仕入 × 区分 × 税率」の集計と、本則課税・簡易課税・2割特例の納付税額を並べる試算の画面を追加しました
  • インボイス登録年の消費税:年の途中でインボイス発行事業者に登録した年は、消費税の集計と試算の期間を既定で登録日以後にし、年全体へも切り替えられるようにしました
  • 帳簿一括出力:仕訳帳・総勘定元帳・残高試算表・損益計算書・貸借対照表・固定資産台帳・年間集計を、年度ごとに ZIP(CSV)または連続印刷で出力できるようにしました
  • 青色申告決算書の2〜4ページ目:月別の売上・仕入、地代家賃の内訳、減価償却費の計算、期首・期末の貸借対照表など、決算書の2〜4ページ目へ転記する表と印刷用の表示を追加しました
  • ダッシュボード:経費率・所得率、手元資金の月数、消費税の納付見込み、売上の取引先集中度などの指標を追加し、月別の経費内訳に固定資産の減価償却費を月割りで積み上げるようにしました
  • 同じ内容の取引の登録前の確認(取引先名は NFKC 正規化して比較)、取引一覧の列見出しでの並べ替えと「詳細な条件」での絞り込み(家事按分あり・支払元・入金先)、DEDUCT への連携フォルダ出力を追加しました
技術のトピック
  • 税制の数値はコードに書かない:消費税の税率・基準額・端数処理の単位は年度別のルールセットにだけ置き、国税庁の一次情報の出典と確認日を記録しています。直書きを検出する静的テストと、国税庁の手引きの設例を実ルールセットで再現する照合テストを用意しました
  • 端数処理は整数で:税額は税率ごとに1回だけ丸め、税率は basis point(1万分率)の整数で持って浮動小数点を使いません。ダッシュボードの経費率・所得率も千分率の整数で丸め、2つの合計が100.0%になるようにそろえています
  • 月割りの端数を年額に合わせる:減価償却費の年額 A を n か月に配るとき、k 番目の月を floor(A×k/n) − floor(A×(k−1)/n) とする累積の切捨てで配ります。月ごとの差は1円以内で、配った合計は年額と必ず一致します
  • 決算書の表は1つの純関数から:青色申告決算書の各表は、画面と印刷で共用する純関数でまとめて組み立て、表どうしの金額が合わないときは警告を出します。印刷が A4 縦で正しく改ページされ、はみ出さないことを E2E で確かめています
  • 既存データの移行:データベースのスキーマを更新し、既存の取引へ勘定科目の既定の区分を自動で補いました。補完の前後で年間集計・残高・年度締めのスナップショットが1円も変わらないことをテストで固定しています。古いバックアップを復元するときも同じ補完をかけます
  • ZIP は自前で:帳簿 CSV は数 MB 程度で圧縮の利点が小さいため、依存ライブラリを足さず、無圧縮(stored)の ZIP を CRC-32 とヘッダーの組み立てだけで書き出しています(PKWARE APPNOTE 準拠・ファイル名は UTF-8)
  • アプリ間の連携:DEDUCT との連携は File System Access API で利用者が選んだフォルダを介し、2つのアプリの IndexedDB は分けたままにしています。ファイルはスキーマで検証し、壊れたファイルや、ファイル名と中身の年度の食い違いを検出してから一覧に出します
主な技術
TypeScript / React 19 / Vite / Dexie.js(IndexedDB)/ Zod / Zustand / Tailwind CSS v4 + shadcn/ui(Base UI)/ Vitest / Playwright
LEDGERの消費税集計。課税売上・課税仕入を消費税区分と税率ごとに集計する
消費税集計
LEDGERの納付税額の試算。本則課税・簡易課税・2割特例の3方式で、売上税額・控除対象仕入税額・納付税額の合計と適用の可否を並べて比べる
納付税額の試算

Webアプリ・公開中

WORKBILL(稼働報告・請求書)

10月に公開した版:1.4.0 〜 1.12.2(16回)

今月の主な変更
  • 注文請書:契約から注文請書を作成・発行・印刷できるようにしました。データとバックアップの形式を更新し、更新前のバックアップもそのまま復元できるようにしています
  • 打刻:稼働カレンダーに開始・終了の打刻を付け、終了時刻なし(稼働中)の稼働を保存できるようにしました
  • 稼働実績と月末推定:月の実績と、2通りの月末推定(実績平均のペース・標準稼働時間で働いた場合)を1つの表にまとめ、各行に精算幅や目安に対する位置のグラフを入れました
  • 環境間の移行:案件ごとの稼働カレンダーを書き出し、別のブラウザの WORKBILL へ、取り込み先のデータを消さずに追加できるようにしました
  • 稼働日の一括入力、前回の作業内容の初期表示、契約の複製、バックアップの保存先の用途別設定を追加しました
技術のトピック
  • 移行ファイルの取り込み:ファイルは保存用のスキーマから派生させた、余分な項目を許さない厳密なスキーマで検証し、取引先・案件を「ID が一致 → 名前が一致 → 新しく作る」の順で対応付けます。取り込み計画を作り、確定の直前にもう一度計画を作って照合してから、1つのトランザクションで書き込みます
  • 書類は発行時点で凍結:請求書・稼働報告書と同じく、注文請書も発行した時点の宛先・受注者をスナップショットとして保存し、訂正は取消して作り直すライフサイクルにしています
  • 保存先の設定:バックアップ・自動バックアップ・書き出しの保存先フォルダを File System Access API で用途ごとに持ち、対応していないブラウザや権限がないときは通常のダウンロードに切り替えます
  • 時間は分の整数:稼働時間は分単位の整数で扱い、丸め・報酬・月末推定の計算は画面から切り離した純関数に集めてテストしています
主な技術
TypeScript / React 19 / Vite / Dexie.js(IndexedDB)/ Zod / Zustand / Tailwind CSS v4 + shadcn/ui(Base UI)/ Vitest / Playwright
WORKBILLの稼働カレンダー。上部に稼働実績と月末推定の表とグラフ、その下に日ごとの稼働が並ぶ
稼働カレンダーの稼働実績と月末推定
WORKBILLの注文請書の印刷用表示
注文請書の印刷用表示

Webアプリ・公開中

DEDUCT(確定申告準備)

10月10日に公開。10月に公開した版:1.0.0 〜 1.8.2(12回)

今月の主な変更
  • 確定申告の準備アプリとして公開しました
  • 2026年分の制度改正に対応したルールセットを追加しました
  • 国税庁の作成コーナーのマイナポータル連携を前提に、連携で自動入力される分・追加で手入力する分・作成コーナーで確認する分を分けて表示するようにしました
  • 電子的控除証明書(XML)の取り込み、退職所得の源泉徴収票、所得区分の拡充と繰越損失に対応しました
  • 所得税・復興特別所得税の概算と還付・納付の見込み、ふるさと納税の上限の目安を追加しました
技術のトピック
  • 年度別ルールセット:控除額・所得の要件・年齢・率はすべて年度別のルールセットのパラメータにし、実ルールセットの値は国税庁の一次情報で確かめて出典・確認日を記録しています。テストは合成したルールセットで行い、制度の数値に依存させていません
  • 計算結果は保存しない:控除・税額は入力から毎回計算し直す純関数です。保存するのはサマリーを出力したときのスナップショット(ルールの版・計算エンジンの版・計算日時・アプリの版つき)だけにしています
  • XML の安全な読み取り:e-Tax の仕様の電子的控除証明書は DOCTYPE を含むファイルを解析せず(外部エンティティを扱わない)、名前空間に依らずローカル名で要素を探します。読み取りの失敗は理由の種類ごとのエラーで返し、画面に案内を出します
  • 機微な情報の扱い:医療・障害・家族・所得の情報は外部へ送らず、ログにも出しません。マイナンバーは入力欄を設けず保存しません
主な技術
TypeScript / React 19 / Vite / Dexie.js(IndexedDB)/ Zod / Zustand / Tailwind CSS v4 + shadcn/ui(Base UI)/ Vitest / Playwright / fflate
DEDUCTの税額の概算。源泉徴収税額との差を還付される見込みとして表示する
税額の概算・還付の見込み
DEDUCTの寄附一覧。ふるさと納税の上限の目安と上限までの残りを表示する
ふるさと納税の上限の目安

iOSアプリ・App Storeで配信中

Ride Metrics

10月23日に App Store で配信を開始

今月の主な変更
  • App Store での配信を始めました
  • 審査(Guideline 2.5.1)の指摘を受け、HealthKit 連携の画面に「Apple Health」と明示し、書き込むデータ(ワークアウトの距離・時間・消費カロリー・GPS ルート)と読み取るデータ(体重)を設定画面に書くようにしました
技術のトピック
  • 表記のテスト:日本語・英語の文言は String Catalog で管理し、英語の画面とプライバシーの説明に「Health」単独の表記が残らないこと、見出し・選択肢に「Apple Health」が入ることを Swift Testing で確かめています
  • 計測ロジックは決定的に:距離・速度・停止判定などの計算は OS に依存しない Domain 層の純関数にまとめ、同じ GPS ログから同じ結果を再現できるようにアルゴリズムの版を管理しています
  • 端末内で完結:計測データは SwiftData で端末内にだけ保存し、当方のサーバーや広告・解析の事業者へは送りません。ライドの削除は物理削除です
主な技術
Swift 6 / SwiftUI / SwiftData / Core Location / Core Motion / MapKit / HealthKit / Swift Testing
関連リンク
紹介ページ、App Store
Ride Metricsのホーム画面。月間サマリーと直近ライドを表示
ホーム画面

iOSゲーム・App Storeで配信中

にゃんくらいむ

10月23日に App Store で配信を開始

今月の主な変更
  • App Store での配信を始めました
  • 配信に向けて、AdMob を本番の App ID・広告ユニット ID に切り替え、Info.plist に SKAdNetworkItems を追加しました
技術のトピック
  • 広告 ID の切り替え:Xcode からの実行と単体テストの DEBUG ビルドでは Google 公式のテスト用、TestFlight・App Store の Release ビルドでは本番の広告ユニット ID を #if DEBUG で切り替え、開発中に本番広告を表示しないようにしています。App ID がテスト用でないこと、SKAdNetworkItems の形式と重複をテストで確かめています
  • ゲームの決まりは純関数:床の生成・ステージの判定・着地判定・スコアは Domain 層の決定的な関数で、乱数は RandomNumberGenerator を注入して固定シードでテストします。プレイ中の時間はシーンの経過時間で測り、ゲームバランスの設定は版を付けて管理しています
主な技術
Swift 6 / SpriteKit / SwiftUI / Core Motion / SwiftData / Google Mobile Ads(AdMob)・UMP / Swift Testing
関連リンク
紹介ページ、App Store
にゃんくらいむのプレイ画面。最初のステージ「2階建ての家」
プレイ画面(2階建ての家)

共通の開発基盤

開発の進め方・共通部品

今月の主な変更
  • PR ごとの自動チェック:Web アプリ(LEDGER・WORKBILL・DEDUCT)と共通パッケージへのプルリクエストで、Biome・tsc -b・Vitest・Playwright(Chromium)の E2E を GitHub Actions で自動で実行するようにしました
  • Content Security Policy:3つの Web アプリと公式サイトは同じオリジンで配信しているため、すべてのページに CSP を入れ、スクリプトは自サイトのファイルだけを実行するようにしました。解析・広告などの外部スクリプトはサイトのどのページにも置かない方針を設計書に明記しています
  • 依存ライブラリの更新:3つの Web アプリの主要な依存ライブラリを最新へ更新しました(テストツールの Vitest はメジャーバージョンを更新)。月末の更新では、開発用ツールが間接的に使うライブラリの脆弱性を、修正版への置き換えで解消しました
  • 画面タイトルの説明を「?」ボタンで必要なときだけ表示する、表の横スクロールの目印と「操作」列の固定など、3つのアプリ共通の画面部品を改善しました
技術のトピック
  • 変更に応じて対象を選ぶ:PR の変更ファイルから実行対象を決め、アプリのコードならそのアプリだけ、共通パッケージ(UI・shared・配布ツール)なら3アプリすべて、ロックファイルやワークフローを変えたら全件をマトリクスで実行します。ドキュメントや iOS アプリだけの変更では何も走らせません
  • CSP をテストで守る:アプリの CSP はビルド時に meta タグとして入れ、配布物の検査で同じポリシーが1つだけ入っていることを確かめます。E2E ではすべての画面と証憑のプレビューを開き、CSP 違反が起きないことを確認しています。検証ライブラリが実行時のコード生成を試す処理も E2E で違反として見つかったため、その機能を使わない設定にしました
  • モノレポ:pnpm ワークスペースで3つの Web アプリと共通パッケージ(UI 部品・共通ロジック・配布ツール・サイト公開ツール)を管理し、--frozen-lockfile でロックファイルとのずれを CI で止めます
  • 設計書とテスト駆動:どの製品も、設計書と実装計画を先にまとめ、テストケースの表を先にテストへ書き起こしてから実装しています