Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
Fukuhara
Product and Topic Expert
Product and Topic Expert
739
SAP Cloud SDK for JavaScriptを使ってアプリを作成してSAP Cloud Foundry Application Runtimeへデプロイする方法のメモです。

Create an App Using SAP Cloud SDK for JavaScriptの内容を少し変えています。

開発環境


以下の環境で実行しています。

  • OS: Ubuntu18.04.01 LTS

  • Node.js: 12.14.1

  • npm: 6.13.4

  • CF cli: 6.49.0+d0dfa93bb.2020-01-07

  • SAP Cloud SDK for JavaScript:1.16


 

手順


1. プロジェクト作成


以下のコマンドでProjectフォルダが作成される。

途中project nameを入れ、anonymous usage analyticsはNo
# Node.jsのプロジェクトを管理したいディレクトリから
$ sap-cloud-sdk init chat-test

This folder does not contain a `package.json`.
Should a new `nest.js` project be initialized in this folder? (y|n): y
Building application scaffold... done
Enter project name (for use in manifest.yml) [chat-test]: chat-test
Do you want to provide anonymous usage analytics to help us improve the SDK? (y|n): n
Creating files
Modifying test config
Adding dependencies to package.json
Installing dependencies
Modifying `.gitignore`

+--------------------------------------------------------------+
Init finished successfully.

Next steps:
- Run the application locally (`npm run start:dev`)
- Deploy your application (`npm run deploy`)

Consider setting up Jenkins to continuously build your app.
Use `sap-cloud-sdk add-cx-server` to create the setup script.
+--------------------------------------------------------------+

プロジェクト"chat-test"内に何が作られたかを確認します。
# 何が作られたか確認
$ ls chat-test
credentials.json Jenkinsfile nest-cli.json package.json pipeline_config.yml s4hana_pipeline src test tsconfig.json
deployment manifest.yml node_modules package-lock.json README.md sap-cloud-sdk-analytics.json systems.json tsconfig.build.json

 

2. プロジェクト作成確認


# プロジェクトディレクトリに移動
$ cd chat-test

# start:devを実行(package.jsonで定義)
$ npm run start:dev

"start:dev"は以下のように"package.json"内で定義されています。"nest start"コマンドはコンパイルと実行で"watch"オプションをつけているのでコード変更したら自動でリロードしてくれます。詳細は公式ヘルプ参照。
  "scripts": {
中略
"start": "nest start",
"start:dev": "nest start --watch",

ブラウザでhttp://localhost:3000/を開くと"Hello World!"と出てきます。

3. コントローラ作成


フォルダ"scr"以下に"test.controller.ts"を作ります。
import { Controller, Get } from '@nestjs/common';

@Controller()
export class TestController {
@Get('test')
getTest() {
return 'We will implement this in a minute.';
}
}

"src"フォルダの"app.module.ts"を変更
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { TestController } from './test.controller';

@Module({
imports: [],
controllers: [AppController, TestController],
providers: [AppService],
})
export class AppModule {}

ブラウザでhttp://localhost:3000/testを開くと"We will implement this in a minute."と表示されます。

※今回はマニュアルで作りましたが、nest cliというものがあって、使うと便利そうです。今回なら"nest g controller test"でコントローラーを作成できます(フォルダを作るなど少し今回の動きと異なります)。

4. "Deployment"フォルダへコピー


以下のコマンドで"deployment"フォルダへコピーします。これをやらずにCloud FoundryへPushしてしまうと不要なファイルまで持っていってしまうので重いです。

※何故か非常に時間がかかりました。1回目は20分ほどかかっても終わらずに、再度やったら5分程度で終わりました。"-v"で途中動いているかを確認できます。
$ sap-cloud-sdk package -v

4 packages are looking for funding
run `npm fund` for details
Overwrite deployment
Copying files
Install productive dependencies

 

※cf pushのときにアップロードするサイズが重いと思ったのですが、"Deployment"フォルダに"node_modules"もコピーされていました。純粋なnestでbuildしてもコピーされないですし、"node_modules"を試しに"Deployment"フォルダから削除してもcf上で動きました。cf pushを軽くしたい場合は試してみるのもいいと思います。

 

5. CFへPush


Cloud Foundryへアプリをデプロイします。と言っても、これは"cf login" して"cf push <app name>"するだけです。
manifest.ymlで"random-route: true"となっているため、何度も作り直しているとquota超過エラーとなるので注意が必要です。エラーとなった場合は、不要なrouteを削除すれば大丈夫です。

これでデプロイ先のURLをブラウザで開けば、ルートでは"Hello World!"が、"/test"では、"We will implement this in a minute."が表示されます。

 

以上が簡単ですが、SAP Cloud SDK for JavaScriptを使ってSAP CP CFへアプリをデプロイするまでの手順です。SDKを使ったことを大してしていないので物足りないですが、いくつか詰まりやすいポイントがあったので書きました。

 

※追記

「4. "Deployment"フォルダへコピー」と「5. CFへPush」にわけましたが、"npm run deploy"のコマンド一発でデプロイまでできるようです。実態として、"package.json"に定義されている"npm run ci-build && npm run ci-package && cf push"が実行されます。