Skip to Content
Technical Articles

SAP Cloud SDK for JavaScriptを使ってSAP CP CFへアプリをデプロイ

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”が実行されます。

Be the first to leave a comment
You must be Logged on to comment or reply to a post.