> For the complete documentation index, see [llms.txt](https://livlog-llc.gitbook.io/engineering-handbook/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://livlog-llc.gitbook.io/engineering-handbook/di-er-bu-ji-shu-ling-yu/11-system.md).

# 11. システム

リブログのシステムは、Javaを中心とする複数のWebアプリケーション、API、Webhook、WebSocket、バッチ処理、データベース連携によって構成されます。CotoGotoの一部ではKotlinも利用しています。

巨大な共通基盤を先に作るのではなく、プロダクトの目的と既存資産に合う実行単位を選びます。

## 基本方針

* API、画面、データ、バッチ処理の責務を分ける
* プロダクトを独立して開発・公開できるようにする
* 既存のコードとデータモデルを活用する
* 外部サービス連携と秘密情報をアプリケーション本体から分離する
* 生成AIの出力を検証し、保存や表示を制御する
* 将来の保守者が実行単位とデータの流れを追えるようにする

## バックエンド技術

複数の世代と用途に対応するため、次の構成が併存しています。

| 技術                        | 主な利用例                             |
| ------------------------- | --------------------------------- |
| Spring Boot               | CotoGoto、CHROCO、巡る街角              |
| Micronaut                 | 言の場                               |
| Javalin                   | 旅旅、樹辞苑                            |
| Jakarta Servlet / Restlet | 朝夕日和API、夢占いBot、即時探訪、崩壊地名、MATATAVI |

Spring Bootは、Web、WebSocket、テンプレート、DB連携を含む比較的大きなサービスで利用します。MicronautとJavalinは、機能を絞ったWebアプリケーションや既存の実行環境に合わせた構成で利用します。ServletとRestletは、Webhook、API、既存資産を活用する実行単位に残っています。

## API・Webhook・WebSocket

システムには、次のインターフェースがあります。

* REST形式のAPI
* LINE Messaging APIから受け取るWebhook
* WebSocketによる画面や会話の更新
* ブラウザやモバイルクライアント向けのデータ取得
* 外部サービスから記事、写真、地図データを取得する処理

設計時は、入力条件、認証、出力形式、エラー応答、再試行、タイムアウト、外部サービス停止時の挙動を明確にします。

## データベース連携

RDBにはMariaDBまたはMySQL、ドキュメントDBにはMongoDBを利用しています。DBアクセス方式は一つに統一せず、プロダクトごとに次の技術を使い分けます。

* ActiveObjects
* SQL2o
* Doma
* Morphia
* JDBC
* HikariCP
* Commons DBCP

変更時は、採用ライブラリだけでなく、既存スキーマ、トランザクション境界、接続プール、移行手順への影響を確認します。

## バッチ処理

記事、写真、地図データの取得と整形、生成AIによる文章・画像生成、データ更新などは、定期実行または管理者実行のバッチとして扱う場合があります。

バッチ処理では、次を記録します。

* 入力と出力
* 実行条件と実行頻度
* 外部APIと必要な設定
* 同じ処理を再実行した場合の挙動
* 途中失敗時の再開・復旧方法
* ログと結果の確認方法

## AI・会話処理

生成AIは、記事、説明文、画像、位置情報に基づく案内などの生成に利用します。会話処理は、LINE、WebSocket、既存の会話ロジックと組み合わせます。

AIの応答を直接正解として扱わず、入力制約、構造化、保存前の検証、表示上の注意、秘密情報の分離、コストとタイムアウトを設計に含めます。

## 今後の課題

* APIとWebhook仕様の整理
* 実行単位とデータフローの可視化
* DB変更履歴と移行手順の管理
* バッチ処理の運用手順化
* LINE Botと会話処理の共通化検討
* 生成AI連携の品質、安全性、コスト管理
* テストとCI/CDの適用範囲整理


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://livlog-llc.gitbook.io/engineering-handbook/di-er-bu-ji-shu-ling-yu/11-system.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
