NocoBase で最初の業務アプリを作ってみよう! コレクションを定義して画面に配置するまで

NocoBase で最初の業務アプリを作ってみよう! コレクションを定義して画面に配置するまで

第3回で立てたローカル環境の上に、蔵書管理のアプリを作ります。コレクション(テーブル)を定義し、関連を張り、画面に配置して動かすまでを通します。あわせて、フィールドの識別子や選択肢の値など、作る時点で決めると後から変えにくい選択を整理しました。
2026.09.20

はじめに

杉浦です。NocoBase シリーズの第4回です。

第3回で Docker Compose を使ってローカルに NocoBase を立てました。今回はその環境の上に、最初の業務アプリを作ります。

題材は蔵書管理です。書籍の一覧を持ち、誰がいつ借りたかを記録するだけのアプリです。ありふれた題材にしたのは、仕様が想像しやすく、NocoBase の構造への理解に繋がると思ったからです。

この記事から3回で、ひとつのアプリを構築していきます。今回はコレクションを定義して画面に配置するところまで。第5回で権限を付け、第6回で自動化を足す予定です。第1回で示した「テーブルを作る → 画面に配置する → 操作と権限を付ける → 自動化を足す」という積み上げ方にそのまま対応していて、3回を通して NocoBase の基本的な仕組みを学べる構成にしています。

前提は次のとおりです。第3回の最後に触れた設定は済ませておいてください。

  • 第3回で立てたローカル環境(v2.2.5)が動いていること。執筆時点の最新安定版は 2.2.15 ですが、第3回でイメージのタグを 2.2.5 に固定しているので、この記事もその環境で進めます
  • 管理画面を日本語にしてあること

何を作るか

コレクションを2つ作ります。NocoBase では、いわゆるテーブルのことをコレクションと呼びます。

書籍(books) が本の情報、貸出(loans) が貸し借りの記録です。貸出は必ずどれかの書籍に紐づくので、貸出から書籍への関連を張ります。

この2つを作って、それぞれの一覧と入力フォームを画面に置くところまでが今回の範囲です。

コレクションを作る

画面右上の歯車アイコンから データソース を開きます。

画面右上の歯車アイコンを押すと開くメニュー。この中の「データソース」を選ぶ。歯車の左隣がペン(UI エディタ)のアイコン

一覧には「メイン」が1行あるので、操作列の 設定 を押します。すると、メインのデータソースにあるコレクションの一覧が出ます。最初から「役割」と「ユーザー」が入っていますが、これは NocoBase 本体が使うものです。

コレクションの作成 を押すと、データテーブルテンプレートの一覧が出ます。一般データテーブル・カレンダーデータテーブル・ツリーコレクション・ファイルデータテーブル・SQLコレクション・ビューに接続、の6つです。今回は 一般データテーブル を選びます。ほかはカレンダーやツリー構造など用途が決まっているもので、ふつうの業務データはこれで足ります。

識別子と表示名は別物

作成ダイアログには、名前を入れる欄が2つあります。

  • コレクション名: 画面に出る表示名。日本語でよい。「書籍」
  • コレクション識別子: システムが内部で使う名前。英数字で付ける。「books」

識別子は後から変えられません。表示名はいつでも変えられます。ここが今回いちばん大事な「後から変えにくい選択」です。第3回でバージョンやデータベースについて同じ話をしましたが、データモデルにも同じ性質の選択があります。

命名に迷ったら、複数形の英小文字で揃えておくと後で困りません。booksloans のように。

実際の業務では、社内やチームにデータベースの命名規則があれば、それに従ってください。NocoBase 側の制約は、英字で始まり、英数字とアンダースコアだけ、という点です。

コレクションの作成ダイアログ。コレクション名に「書籍」、コレクション識別子に books を入れたところ

フィールドを追加する

コレクションができたら、フィールドの追加 からフィールドを足していきます。ダイアログには フィールド表示名フィールド識別子フィールドタイプ の欄があります。書籍には次の5つを作ります。

フィールド表示名 フィールド識別子 フィールドタイプ 備考
書名 title 一行テキスト
著者 author 一行テキスト
分類 category ドロップダウン(単数選択) 技術書/ビジネス/小説/その他
状態 status ドロップダウン(単数選択) 在庫あり/貸出中
購入日 purchased_at 日付のみ

フィールドにも識別子と表示名があり、識別子は同じく後から変えられません

フィールドの追加ダイアログ。購入日をフィールドタイプ「日付のみ」で作っているところ。左には追加済みのフィールド一覧が見える

選択肢は別途登録します。 ドロップダウン(単数選択)は、フィールドを作っただけでは選択肢が空です。ダイアログの オプション に、値とラベルの組を登録してください。値は tech、ラベルは「技術書」のように、値は英数字、ラベルは日本語にします。理由は後述します。

日付の種類

日時のフィールドタイプには 日付のみ のほかに、日時(タイムゾーン含む)日時(タイムゾーンなし) があります。購入日のように日付だけを扱うなら、日付のみで十分です。

第3回で、データベース製品によって日時の保存形式が変わる話をしました。予定や締切のように時刻まで扱うフィールドを作るときは、そこを思い出してください。今回の蔵書管理では日付だけなので、この問題は起きません。

タイトルフィールドを決めておく

もうひとつ、書籍のコレクションで済ませておきたい設定があります。コレクションの編集 を開くと タイトルフィールド という欄があるので、「書名」を選んでください。

タイトルフィールドは、他のコレクションからこのレコードを参照したときに「代表として表示する項目」です。設定しないと ID が代表になります。試しにタイトルフィールドを未設定に戻して貸出の追加フォームを開くと、書籍を選ぶ欄には書名ではなく 387048334229504 のような ID の数値が並びました。あとから直す場合は、コレクションの設定を変えるか、フォーム側の書籍の欄にある タイトルフィールド の設定を「書名」にします。

関連を作る

次に貸出のコレクションを作ります。コレクション名「貸出」、識別子 loans。フィールドは次の4つです。

フィールド表示名 フィールド識別子 フィールドタイプ
利用者 borrower 一行テキスト
貸出日 loan_date 日付のみ
返却期限 due_date 日付のみ
書籍 book 多対1

最後の「書籍」が関連フィールドです。フィールドタイプで 多対1 を選び、参照先コレクション に「書籍」を指定します。貸出は1冊の書籍に紐づき、1冊の書籍は何度も貸し出される、という関係です。

ダイアログには 外部キー の欄もあります。これは「どの書籍か」を保持するための列で、既定ではランダムな名前が入っています。保存すると、この名前のフィールドが貸出のフィールド一覧に現れます。この名前も後から変えられませんbook_id のように、あとで見て分かる名前に直すのを勧めます。データベースを直接のぞいたり、API で取り出したりしたときに、ランダムな列名は読めません。

多対1のフィールド設定ダイアログ。参照先コレクションに「書籍」、外部キーに book_id を指定

関連フィールドを作ると、画面側で「書籍を選ぶ」UI が自動的に用意されます。貸出の入力フォームを作ったときに、書籍の欄が選択肢として出てくる、ということです。これが第1回で触れた「データモデルと UI の分離」の実例です。UI を作る前に、データの関係だけを定義しておけば、画面はそれに従って組み上がります。

画面に配置する

コレクションができたので、画面を作ります。データが入っていなくても、画面は先に作れます。

右上のペンのアイコンで UI エディタ をオンにします。第3回のログイン直後に「UI Editor のアイコンから始めてください」と案内が出ていた、あれです。

画面右上のペンのアイコン。マウスを乗せると「UI エディタ」と表示され、オンにすると背景色が変わる

UI エディタはこのアイコンでオンとオフを切り替えます。オンにすると、ブロックやフィールドの追加、操作の設定といった画面を変更するためのメニューが表示されます。ページに何かを配置したいときや、画面の構成を変えたいときはオンにして作業し、終わったらオフに戻すと、利用者が見る状態の画面になります。

ページを作る

左のメニューにある メニュー項目を追加 を押すと、グループ・Classic page (v1)・Modern page (v2)・リンクの4つが出ます。ページは v1 と v2 の2種類があり、今回は Modern page (v2) を選びます。v1 は旧版、v2 は 2.x の新版で、公式の入門チュートリアルも v2 で統一しています。この記事の手順はすべて v2 のページが前提です。

メニュー項目を追加を押すと出る4つの選択肢。グループ、Classic page (v1)、Modern page (v2)、リンク

名前は「蔵書管理」にしました。今回は、このページ1枚に書籍と貸出の両方を置きます。

テーブルブロックを置く

ページを開くと ブロックを追加 が出るので、テーブル を選び、コレクションに「書籍」を指定します。空のテーブルが置かれます。

ブロックを追加のメニューでテーブルを選び、コレクションに「書籍」を指定する

テーブルの右上に フィールド があります。ここで表示する列を選びます。書名・著者・分類・状態・購入日をオンにします。

テーブルの「フィールド」で表示する列を選ぶ。貸出テーブルの例

操作を付ける

同じくテーブルの右上の 操作 から、追加 を有効にします。これで一覧の上に「追加」ボタンが出ます。

押すとポップアップが開きますが、最初は中身が空です。ポップアップの中で ブロックを追加 から フォーム (新規追加) を選び、フォームの フィールド で入力させたい項目を選びます。書籍のフォームには、書名・著者・分類・状態・購入日の5つを置きます。ID や作成日などのシステムフィールドは自動で入るので、フォームには置きません。

ポップアップに置いたフォーム (新規追加) の「フィールド」で、書名・著者・分類・状態・購入日をオンにする

フォームにも 操作 があります。ここで 保存 を追加しないと、入力はできても保存するボタンがありません。これで書籍を登録するフォームになります。

一覧の各行にも操作を付けられます。テーブルには最初から「操作」列がありますが、これも中身は空です。操作列の見出しの設定から 表示 編集 削除 を有効にしておくと、一覧から各レコードを開いたり直したりできます。

貸出のテーブルも置く

同じ手順で、ページの下にもうひとつ テーブル を置き、コレクションに「貸出」を指定します。列は利用者・貸出日・返却期限・書籍の4つ、操作は書籍と同じです。「追加」のポップアップにも同じようにフォームを置き、フィールドは書籍・利用者・貸出日・返却期限の4つ、操作に 保存 を追加します。

ここで追加フォームの「書籍」の欄を見てください。テキスト入力ではなく、書籍を選ぶ欄になっているはずです。関連フィールドを作っただけで、画面側はこうなります。

動かしてみる

書籍を数冊登録して、貸出を1件作ってみます。

  1. 書籍の 追加 を押し、書籍を登録する。分類と状態は選択肢から選ぶ
  2. 何冊か入れたら、貸出の 追加 を押す
  3. 「書籍」の欄で、登録した本を選ぶ。利用者と日付を入れて保存する

貸出の追加フォーム。書籍の欄がドロップダウンになっていて、登録した本の書名から選べる

貸出の一覧に、選んだ書籍の書名が表示されれば完成です。

完成した蔵書管理ページ。上が書籍8件、下が貸出1件で、各行に表示・編集・削除の操作がある

貸し出した本の「状態」は「在庫あり」のままです。今回は貸出を記録しただけで、書籍側の状態は手で変えていません。貸出を登録したら状態を自動で「貸出中」にする、といった連動は第6回のワークフローで扱う予定です。

やってみて迷ったのは、コレクションと画面の間にある「もう一手間」でした。ドロップダウンのフィールドを作っただけでは選択肢が空で、「追加」を押しても中身のないポップアップが開くだけです。どちらも作れば済むのですが、テーブルとフォームが自動で用意されるツールに慣れていると、戸惑います。逆に、関連を張った途端に書籍の欄がドロップダウンになったところは、データモデルから画面が組み上がることを実感でき、ここが NocoBase らしさだと感じました。

後から変えられるものと変えられないもの

第3回と同じ切り口で、今回作る中で出てきた設定を、後から変えられるものと変えられないものに分けます。

識別子。 コレクション識別子・フィールド識別子・外部キーの列名は、作ったあと変えられません。表示名は変えられるので、画面の見た目は後から直せます。内部の名前だけ最初に決めておく、と割り切ってください。

必須。 フィールドの追加ダイアログに必須のチェックボックスはなく、Validation のルールとして付けます。ルールはアプリ側の検証で、後から付け外しできるので、こちらは変えやすい側です。

フィールドの型。 一行テキストを数値に、といった型の変更はできません。作り直しになり、データの移し替えが要ります。

選択肢の値。 ドロップダウンの選択肢には「値」と「ラベル」があります。ラベルは表示用で後から変えられますが、値は保存されるデータそのものです。値を変えると既存データとの対応がずれるので、値は最初から安定した英数字にしておくのが無難です。

こうして並べると、表示に関わるものは後から直せて、データの構造に関わるものは直しにくい、という区別がはっきりします。第1回で「データモデルと UI の分離」と書いたのは、こういう場面で意味を持ちます。

次回以降の予定

次の2回は、この順で進める予定です。

  • 第5回(仮): 権限を付けてみる。ロールを作り、見える範囲とできる操作を分ける
  • 第6回(仮): 自動化してみる。返却期限を過ぎたら通知する、といったワークフロー

どちらも今回作った蔵書管理をそのまま使います。

まとめ

  • コレクションを2つ作り、関連を張り、画面に配置して動かすところまでを通しました
  • 関連フィールドを定義すれば、画面側の「選ぶ UI」は自動で付いてきます。データモデルと UI の分離とはこのことです
  • 識別子・型・選択肢の値は、作る時点で決めると後から変えにくい選択です。表示名やラベル、必須の検証ルールは後から直せます

次回は、この蔵書管理に権限を付けていきます。

参考リンク

この記事をシェアする

関連記事