博物館登録者
AIエージェントで構築
博物館登録バックエンド

博物館登録アプリバックエンドテンプレート
MuseumObjectロケーション管理と登録ワークフロー

Back4app上での博物館登録バックエンドにはMuseumObjectトラッキング、コレクション所有権、ロケーション更新、LoanAgreementワークフロー、DeaccessionLog履歴、およびActivityLog監査が含まれています。ER図、データ辞書、JSONスキーマ、APIプレイグラウンド、そして迅速なセットアップのためのAIエージェントプロンプトが含まれています。

記録係の要点

このテンプレートは、MuseumObjectレコード、場所の更新、LoanAgreementワークフロー、DeaccessionLogエントリ、ActivityLog履歴のための博物館記録係のバックエンドを提供し、コレクションチームが1つの共有の真実の情報源から作業できるようにします。

  1. MuseumObjectの位置管理各MuseumObjectをcurrentLocation、status、collection、conditionSummary、provenanceNoteでモデル化し、記録係がギャラリーから保管場所までの接収を追跡できるようにします。
  2. LoanAgreementワークフローLoanAgreementのステータス、loanNumber、borrowingInstitution、startDate、dueDate、signedByスタッフを使用して、出庫と入庫の貸出を追跡します。
  3. DeaccessionLogの責任各MuseumObjectに関連付けられたDeaccessionLogエントリにおいて、廃止の決定、承認ステップ、最終処分に関するメモを記録します。
  4. 登録者に優しい権限ACLおよびCLPルールを使用して、登録者、キュレーター、コレクションマネージャー、保存者が割り当てられたクラスのみを扱うことができます。
  5. コレクション操作のための単一のAPIMuseumObject、Location、Collection、LoanAgreement、DeaccessionLog、およびActivityLogに対して、1つのRESTおよび GraphQL レイヤーを通じて、ウェブ、モバイル、および管理ツールを提供します。

美術館登録者アプリテンプレートとは何ですか?

美術館登録者の締切はほとんどオプションではありません。構造化された記録レイヤーは、日付をサプライズではなく警告に変えます。勢いは正確な状態に依存します。 Back4app上のCollection、Location、MuseumObject、LoanAgreement、DeaccessionLogを使用することで、美術館登録者チームは同じケースレコードで協力しながらも職務の分離を強制できます。このスキーマは、User(ユーザー名、メール、パスワード、役割、フルネーム)、Collection(受入番号、タイトル、部門、主要キュレーター)、Location(コード、名前、タイプ、安全かどうか)、MuseumObject(受入番号、オブジェクトタイトル、オブジェクトタイプ、コレクション、現在の場所、ステータス)、LoanAgreement(貸出番号、美術館オブジェクト、貸出タイプ、借用機関、開始日、期日、署名者、契約状態)、DeaccessionLog(廃止番号、美術館オブジェクト、決定日、理由、承認者、最終処分、記録状態)、およびActivityLog(アクター、美術館オブジェクト、アクションタイプ、アクション日時)をカバーし、認証および記録保持のワークフローが組み込まれています。お好みのフロントエンドを接続して、より早く出荷してください。

最適:

美術館登録者システムコレクション追跡ツールローン契約ワークフロー非所持記録システム展示および保管場所アプリBaaSを博物館運営のために選択するチーム

この博物館レジストラバックエンドの構成

ピークの週は博物館レジストラの負債を暴露します:1月に問題なかったショートカットが、2月のコミットメントを逃す理由になります。

コレクション、ロケーション、およびMuseumObjectをMVPスコープのチェックリストとして使用してください:モデル化されていなければ、スプレッドシートの代替手段になります。

ミュージアムレジストラ機能

このハブのすべての技術カードは、User、Collection、Location、MuseumObject、LoanAgreement、DeaccessionLog、ActivityLogを使用して同じ博物館レジストラーバックエンドスキーマを利用しています。

MuseumObject管理

MuseumObjectは、accessionNumber、objectTitle、objectType、status、collection、currentLocationを保存します。

位置追跡

位置はコード、名前、タイプ、isSecureをキャプチャします。

ローン契約ワークフロー

ローン契約はmuseumObject、loanNumber、loanType、borrowingInstitution、dueDate、およびagreementStatusにリンクします。

DeaccessionLogトラッキング

DeaccessionLogはdeaccessionNumber、decisionDate、reason、finalDispositionおよびrecordStatusを記録します。

なぜ Back4app でミュージアムレジストラアプリバックエンドを構築するのか?

Back4app は登録者、キュレーター、コレクションマネージャーに必要なクラスを提供し、チームはインフラストラクチャではなく、受入番号、現在の所在地、移動履歴に集中できます。

  • MuseumObjectとLocationは接続されたままです: MuseumObjectとLocationのポインタは、現在の所在地、ステータス、およびコレクションの所有権を簡単に照会できるようにします。
  • LoanAgreementの記録は監査可能なままです: LoanAgreementは、貸出番号、貸出タイプ、借入機関、開始日、期限、契約ステータス、および署名者を、出力および入力オブジェクトのために保存します。
  • DeaccessionLogエントリは初日から構造化されています: DeaccessionLogは、各オブジェクトの除籍ケースのために、除籍番号、決定日、理由、承認者、最終処分、および記録ステータスをキャプチャします。

レジストラバックエンドを一度構築し、すべてのコレクションワークフローとクライアントで同じスキーマを再利用します。

レジストラの利点

コレクションチームが動き、貸出、非所持を整理できるよう支援する博物館のバックエンド。

より迅速なオブジェクト検索

出品者および棚追跡テーブルを手動で構築するのではなく、MuseumObjectとLocationから始めます。

クリーンな貸出管理

貸出契約のフィールド(agreementStatus、dueDate、borrowingInstitution、signedByなど)を使用して、アウトバウンドおよびインバウンドの貸出を見えるように保ちます。

追跡可能な非所蔵履歴

決定日、理由、最終処分、承認者を含むDeaccessionLogに非所蔵決定を保存して、後からレビューできるようにします。

スタッフの役割に対する権限の境界

ACLおよびCLPルールを適用して、登録者がMuseumObjectレコードを編集できるようにし、より広範なスタッフは承認されたオブジェクトの位置のみを読み取れるようにします。

検索可能なコレクション操作

スキーマを毎シーズンリセットすることなく、MuseumObject、Location、LoanAgreement、DeaccessionLog、およびActivityLogのエントリをクエリします。

AI支援のスキャフォールド

1つの構造化されたプロンプトから博物館登録者のバックエンドとスターター統合を生成します。

博物館登録者アプリを起動する準備はできましたか?

Back4app AIエージェントに登録者バックエンドのスキャフォールドをさせ、1つのプロンプトからMuseumObject、LoanAgreement、DeaccessionLog、ActivityLogワークフローを生成させましょう。

無料で始められます - 月50件のAIエージェントプロンプト、クレジットカード不要

博物館技術スタック

このミュージアムレジストラバックエンドテンプレートに含まれているすべて。

フロントエンド
13以上のテクノロジー
バックエンド
Back4app
データベース
MongoDB
認証
組み込み認証 + セッション
API
RESTとGraphQL
リアルタイム
Live Queries

博物館ER図

博物館登録者バックエンドスキーマのエンティティ関係モデル。

図のソースを見る
Mermaid
erDiagram
    User ||--o{ Collection : "primaryCurator"
    User ||--o{ LoanAgreement : "signedBy"
    User ||--o{ DeaccessionLog : "approvedBy"
    User ||--o{ ActivityLog : "actor"
    Collection ||--o{ MuseumObject : "collection"
    Location ||--o{ MuseumObject : "currentLocation"
    MuseumObject ||--o{ LoanAgreement : "museumObject"
    MuseumObject ||--o{ DeaccessionLog : "museumObject"
    MuseumObject ||--o{ ActivityLog : "museumObject"

    User {
        String objectId PK
        String username
        String email
        String password
        String role
        String fullName
        Date createdAt
        Date updatedAt
    }

    Collection {
        String objectId PK
        String accessionNumber
        String title
        String department
        String primaryCuratorId FK
        Date createdAt
        Date updatedAt
    }

    Location {
        String objectId PK
        String code
        String name
        String type
        Boolean isSecure
        Date createdAt
        Date updatedAt
    }

    MuseumObject {
        String objectId PK
        String accessionNumber
        String objectTitle
        String objectType
        String collectionId FK
        String currentLocationId FK
        String status
        String conditionSummary
        String provenanceNote
        Date createdAt
        Date updatedAt
    }

    LoanAgreement {
        String objectId PK
        String loanNumber
        String museumObjectId FK
        String loanType
        String borrowingInstitution
        Date startDate
        Date dueDate
        String signedById FK
        String agreementStatus
        Date createdAt
        Date updatedAt
    }

    DeaccessionLog {
        String objectId PK
        String deaccessionNumber
        String museumObjectId FK
        Date decisionDate
        String reason
        String approvedById FK
        String finalDisposition
        String recordStatus
        Date createdAt
        Date updatedAt
    }

    ActivityLog {
        String objectId PK
        String actorId FK
        String museumObjectId FK
        String actionType
        String notes
        Date actionAt
        Date createdAt
        Date updatedAt
    }

レジストラ統合フロー

認証、MuseumObjectの検索、位置情報の更新、LoanAgreementの作成、DeaccessionLogの記録、およびActivityLogの更新の典型的な実行フロー。

図のソースを見る
Mermaid
sequenceDiagram
  participant User
  participant App as Museum Registrar App
  participant Back4app as Back4app Cloud

  User->>App: Sign in as registrar, curator, or collections manager
  App->>Back4app: POST /login
  Back4app-->>App: Session token

  User->>App: Open object location board
  App->>Back4app: GET /classes/MuseumObject?include=collection,currentLocation&order=accessionNumber
  Back4app-->>App: MuseumObject list with Location and Collection pointers

  User->>App: Record a transfer to storage or gallery
  App->>Back4app: PUT /classes/MuseumObject/{objectId}
  Back4app-->>App: Updated currentLocation and status

  User->>App: Create a loan agreement or deaccession log
  App->>Back4app: POST /classes/LoanAgreement or /classes/DeaccessionLog
  Back4app-->>App: Agreement or log saved

  App->>Back4app: Subscribe to ActivityLog updates
  Back4app-->>App: Live updates for object movements and record changes

博物館フィールドガイド

博物館のレジストラスキーマのすべてのクラスに対するフィールドレベルの完全な参照。

フィールドタイプ説明必須
objectIdStringAuto-generated unique identifier自動
usernameStringUser login name
emailStringUser email address
passwordStringHashed password (write-only)
roleStringRole of the user (e.g., registrar, curator, collections-manager, conservator, read-only-staff)
fullNameStringDisplay name for staff and stakeholders
createdAtDateAuto-generated creation timestamp自動
updatedAtDateAuto-generated last-update timestamp自動

8 フィールドが User にあります

登録者のセキュリティと権限

ACLおよびCLP戦略がMuseumObjectレコード、貸出書類、除籍ノートをどのように保護するか。

役割ベースの登録者アクセス

登録者はMuseumObject、Location、LoanAgreement、およびDeaccessionLogのエントリを作成および編集できます。他のスタッフは適切な範囲で読み取り専用アクセスを得ます。

貸出と除籍の管理

LoanAgreementおよびDeaccessionLogへの書き込みアクセスを制限し、承認が認可されたコレクションスタッフに留まるようにします。

オブジェクト履歴の整合性

Cloud Codeを使用してcurrentLocationの更新を検証し、移動変更を保存する前にActivityLogを追加します。

JSONスキーマ

コピーしてBack4appに入れるか、実装の参考として使用するための生のJSONスキーマ定義。

JSON
{
  "classes": [
    {
      "className": "User",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "username": {
          "type": "String",
          "required": true
        },
        "email": {
          "type": "String",
          "required": true
        },
        "password": {
          "type": "String",
          "required": true
        },
        "role": {
          "type": "String",
          "required": true
        },
        "fullName": {
          "type": "String",
          "required": true
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "Collection",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "accessionNumber": {
          "type": "String",
          "required": true
        },
        "title": {
          "type": "String",
          "required": true
        },
        "department": {
          "type": "String",
          "required": true
        },
        "primaryCurator": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "Location",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "code": {
          "type": "String",
          "required": true
        },
        "name": {
          "type": "String",
          "required": true
        },
        "type": {
          "type": "String",
          "required": true
        },
        "isSecure": {
          "type": "Boolean",
          "required": true
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "MuseumObject",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "accessionNumber": {
          "type": "String",
          "required": true
        },
        "objectTitle": {
          "type": "String",
          "required": true
        },
        "objectType": {
          "type": "String",
          "required": true
        },
        "collection": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Collection"
        },
        "currentLocation": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Location"
        },
        "status": {
          "type": "String",
          "required": true
        },
        "conditionSummary": {
          "type": "String",
          "required": false
        },
        "provenanceNote": {
          "type": "String",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "LoanAgreement",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "loanNumber": {
          "type": "String",
          "required": true
        },
        "museumObject": {
          "type": "Pointer",
          "required": true,
          "targetClass": "MuseumObject"
        },
        "loanType": {
          "type": "String",
          "required": true
        },
        "borrowingInstitution": {
          "type": "String",
          "required": true
        },
        "startDate": {
          "type": "Date",
          "required": true
        },
        "dueDate": {
          "type": "Date",
          "required": true
        },
        "signedBy": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "agreementStatus": {
          "type": "String",
          "required": true
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "DeaccessionLog",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "deaccessionNumber": {
          "type": "String",
          "required": true
        },
        "museumObject": {
          "type": "Pointer",
          "required": true,
          "targetClass": "MuseumObject"
        },
        "decisionDate": {
          "type": "Date",
          "required": true
        },
        "reason": {
          "type": "String",
          "required": true
        },
        "approvedBy": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "finalDisposition": {
          "type": "String",
          "required": true
        },
        "recordStatus": {
          "type": "String",
          "required": true
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "ActivityLog",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "actor": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "museumObject": {
          "type": "Pointer",
          "required": true,
          "targetClass": "MuseumObject"
        },
        "actionType": {
          "type": "String",
          "required": true
        },
        "notes": {
          "type": "String",
          "required": false
        },
        "actionAt": {
          "type": "Date",
          "required": true
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    }
  ]
}

AIエージェントを使用して構築

Back4app AIエージェントを使用して、このテンプレートからリアルな美術館の登録者アプリを生成します。フロントエンド、バックエンド、認証、およびオブジェクト、貸出、除籍ワークフローを含みます。

Back4app AIエージェント
構築の準備ができました
Back4app上でこの正確なスキーマと動作を持つ博物館登録アプリのバックエンドを作成します。

スキーマ:
1. ユーザー (Back4app 内蔵使用): ユーザー名、メール、パスワード、役割、フルネーム; objectId、createdAt、updatedAt (システム)。
2. コレクション: アクセッション番号 (文字列、必須)、タイトル (文字列、必須)、部門 (文字列、必須)、主任キュレーター (ユーザーへのポインター、必須); objectId、createdAt、updatedAt (システム)。
3. 位置: コード (文字列、必須)、名前 (文字列、必須)、タイプ (文字列、必須)、安全性 (ブール値、必須); objectId、createdAt、updatedAt (システム)。
4. 博物館オブジェクト: アクセッション番号 (文字列、必須)、オブジェクトタイトル (文字列、必須)、オブジェクトタイプ (文字列、必須)、コレクション (コレクションへのポインター、必須)、現在の位置 (位置へのポインター、必須)、ステータス (文字列、必須)、状態の概要 (文字列、オプション)、由来のノート (文字列、オプション); objectId、createdAt、updatedAt (システム)。
5. 貸出契約: 貸出番号 (文字列、必須)、博物館オブジェクト (博物館オブジェクトへのポインター、必須)、貸出タイプ (文字列、必須)、借入機関 (文字列、必須)、開始日 (日付、必須)、期限日 (日付、必須)、署名者 (ユーザーへのポインター、必須)、契約状況 (文字列、必須); objectId、createdAt、updatedAt (システム)。
6. 廃棄ログ: 廃棄番号 (文字列、必須)、博物館オブジェクト (博物館オブジェクトへのポインター、必須)、決定日 (日付、必須)、理由 (文字列、必須)、承認者 (ユーザーへのポインター、必須)、最終処分 (文字列、必須)、記録状況 (文字列、必須); objectId、createdAt、updatedAt (システム)。
7. アクティビティログ: アクター (ユーザーへのポインター、必須)、博物館オブジェクト (博物館オブジェクトへのポインター、必須)、アクションタイプ (文字列、必須)、ノート (文字列、オプション)、アクション時 (日付、必須); objectId、createdAt、updatedAt (システム)。

セキュリティ:
- 登録者、キュレーター、コレクションマネージャーの役割は、それぞれの責任に応じて博物館オブジェクト、位置、貸出契約、廃棄ログのレコードを作成および編集できます。
- コレクションおよびオブジェクトレコードへの書き込みアクセスを認可されたスタッフに制限します。
- 貸出および廃棄のエントリを監査可能に保ちます; アクティビティログの履歴を保存します。

認証:
- サインアップ、ログイン、ログアウト。

動作:
- オブジェクトの位置を追跡し、貸出契約を管理し、廃棄ログを記録します。
- 部門ごとにコレクションを表示し、現在の位置とステータスによってオブジェクトを表示します。
- 博物館オブジェクトが移動したとき、貸出が署名されたとき、または廃棄が承認されたときにアクティビティノートを保存します。

配信:
- スキーマ、CLP、ACL、およびオブジェクトの移動、貸出書類、廃棄ワークフローを管理するための登録者、キュレーター、コレクションマネージャー、保存者向けのインターフェースを備えた Back4app アプリ。

下のボタンを押して、このテンプレートプロンプトが事前に入力されたエージェントを開きます。

これは技術のサフィックスなしの基本プロンプトです。生成されたフロントエンドスタックを後で適応できます。

数分でデプロイ月あたり50無料プロンプトクレジットカードは不要

APIサンドボックス

GraphQLエンドポイントに対して博物館登録者スキーマに対してRESTを試してください。応答はモックデータを使用し、Back4appアカウントは必要ありません。

サンドボックスを読み込んでいます…

このテンプレートと同じスキーマを使用します。

テクノロジーを選択

各カードを展開して、選択したスタックとコレクション、ロケーション、およびMuseumObjectを統合する方法を確認してください。

Flutter ミュージアムレジストラバックエンド

React ミュージアムレジストラバックエンド

React ネイティブ ミュージアムレジストラバックエンド

Next.js ミュージアムレジストラバックエンド

JavaScript ミュージアムレジストラバックエンド

Android ミュージアムレジストラバックエンド

iOS ミュージアムレジストラバックエンド

Vue ミュージアムレジストラバックエンド

Angular ミュージアムレジストラバックエンド

GraphQL ミュージアムレジストラバックエンド

REST API ミュージアムレジストラバックエンド

PHP ミュージアムレジストラバックエンド

.NET ミュージアムレジストラバックエンド

すべてのテクノロジーで得られるもの

すべてのスタックは、同じ博物館登録者バックエンドスキーマとAPI契約を使用します。

統一された博物館データ構造

1つのスキーマでMuseumObjectレコード、Locationエントリ、LoanAgreementファイル、およびDeaccessionLogノートを管理します。

コレクションチームのためのオブジェクト位置追跡

currentLocationと活動履歴を登録者やキュレーターが読みやすいように保ちます。

博物館のための貸出契約ワークフロー

借用機関、期限、契約状況、署名者を1つの構造化されたフローに保存します。

博物館のための撤収書類

記録の状態、決定日、およびレビューと監査の理由を記録します。

REST/GraphQL APIs for museum apps

柔軟なAPIを使用して、Web、モバイル、内部ツールを接続します。

コレクション操作のための拡張可能なアーキテクチャ

収蔵および展示の進化に伴い、フィールドやクラスを追加します。

博物館レジストラスタックの比較

すべてのサポート技術におけるセットアップ速度、SDKスタイル、およびAIサポートを比較します。

フレームワークセットアップ時間博物館登録者の利益SDKタイプAIサポート
約5分レジストラのモバイルおよびウェブツールのための単一コードベース。型付きSDKフル
5分未満オブジェクトトラッキング用の高速ウェブダッシュボード。タイプ付きSDKフル
約3〜7分コレクションスタッフのためのクロスプラットフォームモバイルアプリ。タイプ付きSDKフル
迅速な(5分)セットアップスタッフ用のサーバーレンダリングレジストラポータル。タイプ付きSDKフル
~3〜5分レジストラーツールのための軽量ウェブインテグレーション。型付けされたSDKフル
約5分ギャラリーとストレージ管理のためのネイティブAndroidアプリ。型付けされたSDKフル
5分未満博物館スタッフのためのネイティブiOSアプリ。型付けされたSDKフル
~3〜7分Reactコレクション操作のためのウェブUI。タイプされたSDKフル
迅速な(5分)セットアップ登録者のワークフローのためのエンタープライズウェブアプリ。タイプされたSDKフル
2分未満オブジェクトおよびローンビュー用の柔軟なGraphQL API。GraphQL APIフル
クイック(2分)セットアップREST APIのレジストラシステム統合。REST APIフル
~3分ミュージアムツール用のサーバーサイドPHPバックエンド。REST APIフル
~3〜7分コレクション管理用の.NETバックエンド。タイプSDKフル

セットアップ時間は、このテンプレートスキーマを使用してプロジェクトのブートストラップから最初のMuseumObjectまたはLoanAgreementクエリまでの期待される期間を反映しています。

博物館のレジストラに関する質問

このテンプレートを使用して博物館のレジストラバックエンドを構築する際の一般的な質問。

博物館の登録者の実践は、量が増えるにつれてどのように受け入れ品質を維持しますか?
博物館の登録者チームは、クライアント、案件、内部の引き継ぎをどのように曖昧さなくモデル化すべきですか?
博物館登録者の記録を分断せずに、電子署名やドキュメントストレージを統合できますか?
Flutterを使用して博物館オブジェクトや位置に対するクエリを実行するにはどうすればよいですか?
どうやって Next.js Server Actions で博物館の登録者アクセスを管理しますか?
React ネイティブキャッシュはローン契約をオフラインで保持できますか?
不正な除籍編集を防ぐにはどうすればよいですか?
Android で受領番号を表示する最良の方法は何ですか?
オブジェクト移動フローはエンドツーエンドでどのように機能しますか?
この博物館登録者テンプレートを動かすクラスは何ですか?

世界中の開発者に信頼されています

Back4appテンプレートを使用して、より迅速にミュージアムレジストラ製品を出荷するチームに参加しましょう

G2 Users Love Us Badge

ミュージアムレジストラアプリを作成する準備はできていますか?

数分でミュージアムレジスタープロジェクトを開始できます。クレジットカードは必要ありません。

テクノロジーを選択