SAP BTP 学習日記 Day2 —— 最初の CAP プロジェクト作成から cf push デプロイまで
はじめに
今日は SAP CAP(Cloud Application Programming Model)の Node.js プロジェクトをゼロから作成し、SAP BTP の Cloud Foundry 環境にデプロイするまでの全手順を記録します。途中いくつかのエラーに遭遇しましたが、すべて解決できました。同じところでハマる方の参考になれば幸いです。
環境情報
ステップ1:CF CLI のインストール
# Cloud Foundry 公式 apt リポジトリを追加
wget -q -O - https://packages.cloudfoundry.org/debian/cli.cloudfoundry.org.key | sudo apt-key add -
echo "deb https://packages.cloudfoundry.org/debian stable main" | sudo tee /etc/apt/sources.list.d/cloudfoundry-cli.list
# インストール
sudo apt-get update
sudo apt-get install cf8-cli
# 確認
cf --version⚠️
Warning: apt-key is deprecatedという警告が出ますが無視して問題ありません。OKと表示されれば成功です。
ステップ2:BTP CF 環境にログイン
cf login -a https://api.cf.ap21.hana.ondemand.comメールアドレスとパスワードを入力後、Org と Space を選択します。
Targeted org dfcf715btrial.
Targeted space dev.ステップ3:CAP プロジェクトの作成
mkdir -p ~/projects
cd ~/projects
cds init my-first-cap
cd my-first-capls -la で確認すると以下の構造が作成されます:
app/ ← Fiori フロントエンド
db/ ← CDS データモデル
srv/ ← OData サービス定義
.gitignore
readme.md⚠️ ハマりポイント①:新しいバージョンの
cds initではpackage.jsonが生成されません。手動で作成が必要です。
npm init -y
npm add @sap/cds @sap/cds-dk @cap-js/sqliteステップ4:データモデルとサービスの定義
db/schema.cds(データモデル):
namespace my.bookshop;
entity Books {
key ID : Integer;
title : String;
author : String;
stock : Integer;
}srv/cat-service.cds(OData サービス):
using my.bookshop as my from '../db/schema';
service CatalogService {
entity Books as projection on my.Books;
}ステップ5:ローカルでの起動確認
cds watch⚠️ ハマりポイント②:
@sap/cdsのバージョンが9.8.5と9.8.4で混在していると以下のエラーが発生します。TypeError: Cannot read properties of undefined (reading 'impl') at hotReloading解決方法:バージョンを統一します。
npm install @sap/cds@9.8.4
バージョンが統一されると正常に起動します:
[cds] - loaded model from 2 file(s)
[cds] - connect to db > sqlite { url: ':memory:' }
[cds] - serving CatalogService { at: '/odata/v4/catalog' }
[cds] - server listening on { url: 'http://localhost:4004' }ブラウザで http://localhost:4004 を開くと CAP の管理画面が表示されます。
ステップ6:CF デプロイの準備
manifest.yml(CF デプロイ設定):
---
applications:
- name: my-first-cap
memory: 256M
disk_quota: 512M
buildpacks:
- nodejs_buildpack
random-route: true.cfignore(デプロイ除外ファイル):
node_modules/
.git/
.vscode/
*.logステップ7:package.json の最終形
CF デプロイで2つのエラーに遭遇し、最終的に以下の設定が必要でした:
{
"name": "my-first-cap",
"version": "1.0.0",
"scripts": {
"start": "cds serve all --in-memory"
},
"engines": {
"node": ">=20"
},
"cds": {
"requires": {
"db": {
"kind": "sqlite",
"credentials": { "url": ":memory:" }
},
"auth": {
"kind": "mocked"
}
}
},
"dependencies": {
"@cap-js/sqlite": "^2.2.0",
"@sap/cds": "9.8.4",
"@sap/cds-dk": "^9.8.3"
}
}⚠️ ハマりポイント③:CF 環境では CAP が自動的に HANA ドライバーを探してクラッシュします。
Error: Failed loading service implementation from @cap-js/hana解決方法:
startコマンドをcds serve all --in-memoryにして、cds.requires.dbで SQLite を明示的に指定します。
⚠️ ハマりポイント④:CF 環境では CAP が自動的に JWT 認証を有効にして
@sap/xssecがないためクラッシュします。Error: Cannot find '@sap/xssec'解決方法:
cds.requires.authにkind: mockedを追加します。
ステップ8:cf push でデプロイ
cf push成功すると以下が表示されます:
state since cpu memory disk
running 2026-04-10T23:52:24Z 2.9% 60M of 256M 275.3M of 512Mステップ9:動作確認
cf app my-first-cap | grep routes表示された URL の /odata/v4/catalog にアクセスすると:
{"@odata.context":"$metadata","value":[{"name":"Books","url":"Books"}]}OData V4 サービスが BTP Cloud Foundry 上で正常に動作していることを確認できました!
BTP コックピットで確認





マップされたルート:
https://my-first-cap-industrious-wombat-th.cfapps.ap21.hana.ondemand.com/
データ取得できるルート
https://my-first-cap-industrious-wombat-th.cfapps.ap21.hana.ondemand.com/odata/v4/catalog
まとめ
今日学んだことは以下の通りです。
CAP プロジェクトの基本構造(db / srv / app の3層)
CDS によるデータモデルとサービスの定義
cds watchによるローカル開発環境の起動manifest.ymlと.cfignoreによる CF デプロイ設定cf pushによる BTP Cloud Foundry へのデプロイ
ローカルとクラウドで動作が異なる点(HANA / JWT 認証の自動切替)が最大のハマりポイントでした。本番環境では HANA Cloud と XSUAA を正しく設定する必要があり、それは今後の学習テーマです。
この記事は「SAP BTP 学習」シリーズの第2回です。6ヶ月間の独学で SAP BTP 開発へのキャリアチェンジを目指しています。