技術スタック概要¶
KanjiIQは、セルフホスト・オープンソースファーストの理念で構築されています。すべてのコンポーネントは私たちが管理するインフラストラクチャ上で動作し、ベンダーロックインはありません。
技術サマリー¶
| レイヤー | 技術 | 用途 |
|---|---|---|
| フロントエンド | Flutter Web | クロスプラットフォームUIフレームワーク |
| バックエンド | Dart Frog | 軽量REST APIサーバー |
| データベース | PostgreSQL 15 | JSONB搭載プライマリデータストア |
| 翻訳 | OpenAI API | 動的コンテンツ翻訳 |
| オーケストレーション | k3s (Kubernetes) | コンテナオーケストレーション |
| Ingress | Traefik | リバースプロキシ、TLS終端、レート制限 |
| TLS | cert-manager + Let's Encrypt | 自動SSL証明書管理 |
| CI/CD | Forgejo Actions | ビルド、プッシュ、デプロイの自動化 |
| コンテナレジストリ | Forgejo Container Registry | Dockerイメージストレージ |
| バージョン管理 | Forgejo (Gitea fork) | セルフホストGitプラットフォーム |
| ホスティング | Hetzner Dedicated Server | インフラストラクチャプロバイダー |
| 管理 | Flutter Web | ロケール/分析管理用管理ダッシュボード |
なぜこれらを選んだのか?¶
Dartをどこでも¶
最も特徴的なアーキテクチャの選択は、フロントエンドとバックエンドの両方にDartを使用していることです:
- Flutter(Dart)フロントエンド用
- Dart Frog(Dart)バックエンド用
これにより以下が可能になります:
- クライアントとサーバー間で共有モデル定義
- チーム全体で単一言語の専門知識
- 一貫したツーリング(Dartアナライザー、フォーマッター、テストフレームワーク)
- 共有ビジネスロジックパッケージの可能性
セルフホストスタック¶
KanjiIQは、マネージドクラウドサービスの代わりにセルフホストの代替手段を意図的に選択しています:
| マネージドサービス | KanjiIQの選択 | メリット |
|---|---|---|
| GitHub/GitLab | Forgejo | 完全な制御、ユーザーごとの課金なし |
| Docker Hub | Forgejo Container Registry | ソースコードと同じ場所に配置 |
| GitHub Actions | Forgejo Actions | 同じYAML構文、セルフホストランナー |
| AWS RDS | PostgreSQL on k8s | 時間単位のデータベース料金なし |
| AWS ALB | Traefik | k3sに内蔵、無料 |
| AWS ACM | cert-manager + Let's Encrypt | 無料のTLS証明書 |
コスト効率¶
本番スタック全体が単一のHetzner専用サーバーで動作し、月額コストを予測可能にし、同等のクラウドマネージドサービスよりも大幅に低く抑えています。詳細はインフラストラクチャを参照してください。
アーキテクチャ原則¶
- コンテナファースト:すべてのコンポーネントがマルチステージDockerビルドでコンテナ化
- Infrastructure as Code:すべてのKubernetesマニフェストがバージョン管理下
- 非root実行:セキュリティのためすべてのコンテナがUID 1000で実行
- ヘルスチェック:すべてのコンテナにlivenessおよびreadinessプローブ
- オフライン対応:ローカルSQLiteキャッシュによりインターネットなしでフロントエンドが動作
- プライバシー配慮:自動匿名化によるGDPR/CCPA準拠の分析