LINE Clova占いアプリを作る(サーバーサイド編)

Taiji
14 min readAug 13, 2018
本記事は、2018年8月17日に実施する[ハンズオン] LINE Clova×IBM WatsonでAIを学ぶのサーバーサイドアプリ実装の手順になります。Clova側の実装手順と合わせてご利用ください。

IBM Cloudへログインします。
この時点ではまだ何もアプリが存在しないことが分かります。

IBM Cloudダッシュボード

GitHubから今回のサーバーサイドアプリに必要なソースコードを取得します。こちらへアクセスしてソースコード一式をダウンロードするかCloneしてください。

GitHubリポジトリ
$ git clone https://github.com/taijihagino/cek-handson-fortune

ターミナルからIBM Cloudへログインします。

$ ic login
Email> 自分のIBM Cloudアカウントのメールアドレス
Password> 自分のIBM Cloudアカウントのパスワード

作業するターゲットを指定します。

$ ic target --cf

今回必要なモジュールをnpmでインストールします。

$ npm install

インストールした内容を確認

$ npm list --depth=0

.cfignoreファイルを作成します。内容は一行のみ「node_modules」と記述します。

$ vi
node_modules
:wq .cfignore
$

アプリケーションを自分のIBM Cloud環境へpushします。自動で実行環境を構築してくれます。

$ ic app push skill-fortune-taijiInvoking ‘cf push skill-fortune-taiji’…Pushing from manifest to org fillgapapp02@fillgap.jp_1532612733939 / space dev as fillgapapp02@fillgap.jp…Using manifest file /Users/taiji/Documents/linehandson/cek-handson-fortune/cek-handson-fortune/manifest.ymlGetting app info…Creating app with these attributes…+ name: skill-fortune-taijipath: /Users/taiji/Documents/linehandson/cek-handson-fortune/cek-handson-fortune+ buildpack: sdk-for-nodejs+ command: node app.js+ memory: 256Mroutes:+ skill-fortune-taiji.mybluemix.netCreating app skill-fortune-taiji…Mapping routes…Comparing local files to remote cache…Packaging files to upload…Uploading files…11.88 KiB / 11.88 KiB [======================================================================================================] 100.00% 1sWaiting for API to complete processing files…Staging app and tracing logs…Downloading sdk-for-nodejs…Downloaded sdk-for-nodejsCreating containerSuccessfully created containerDownloading app package…Downloaded app package (11.9K)Staging… — — -> IBM SDK for Node.js Buildpack v3.21–20180628–1258Based on Cloud Foundry Node.js Buildpack v1.5.24NPM_CONFIG_LOGLEVEL=error — — -> Creating runtime environmentNPM_CONFIG_PRODUCTION=trueNODE_ENV=productionNODE_MODULES_CACHE=true — — -> Installing binariesengines.node (package.json): unspecifiedengines.npm (package.json): unspecified (use default)Resolving node version (latest stable) via ‘node-version-resolver’Installing IBM SDK for Node.js (6.14.3) from cacheUsing default npm version: 3.10.10 — — -> Restoring cacheSkipping cache restore (new runtime signature) — — -> Building dependenciesInstalling node modules (package.json)├─┬ @line/clova-cek-sdk-nodejs@1.0.1│ │ └── @types/connect@3.4.32│ ├── @types/core-js@0.9.46│ ├─┬ @types/express@4.16.0│ │ ├─┬ @types/express-serve-static-core@4.16.0│ │ │ ├── @types/events@1.2.0│ │ └── @types/mime@2.0.0│ ├─┬ body-parser@1.18.3│ │ ├── bytes@3.0.0│ │ ├── content-type@1.0.4│ │ ├─┬ debug@2.6.9MemoApp@1.0.0 /tmp/app│ ├─┬ @types/body-parser@1.17.0│ │ │ └── @types/range-parser@1.2.2│ │ └─┬ @types/serve-static@1.13.2│ ├── @types/node@9.6.27│ │ │ └── ms@2.0.0│ │ ├── depd@1.1.2│ │ ├─┬ http-errors@1.6.3│ │ │ ├── inherits@2.0.3│ │ │ ├── setprototypeof@1.1.0│ │ │ └── statuses@1.5.0│ │ ├─┬ iconv-lite@0.4.23│ │ │ └── safer-buffer@2.1.2│ │ ├─┬ on-finished@2.3.0│ │ │ └── ee-first@1.1.1│ │ ├── qs@6.5.2│ │ ├─┬ raw-body@2.3.3│ │ │ └── unpipe@1.0.0│ │ └─┬ type-is@1.6.16│ │ └─┬ mime-types@2.1.19│ │ └── mime-db@1.35.0│ └── core-js@2.5.7├─┬ body-parser@1.8.4│ ├── bytes@1.0.0│ ├── depd@0.4.5│ ├── iconv-lite@0.4.4│ ├── media-typer@0.3.0│ ├─┬ on-finished@2.1.0│ │ └── ee-first@1.0.5│ ├── qs@2.2.4│ ├── raw-body@1.3.0│ └─┬ type-is@1.5.7│ └─┬ mime-types@2.0.14│ └── mime-db@1.12.0├── ejs@1.0.0├─┬ express@4.9.8│ ├─┬ accepts@1.1.4│ │ ├─┬ mime-types@2.0.14│ │ │ └── mime-db@1.12.0│ ├── cookie@0.1.2│ ├── cookie-signature@1.0.5│ ├─┬ debug@2.0.0│ ├── depd@0.4.5│ ├── escape-html@1.0.1│ ├─┬ etag@1.4.0│ │ └── crc@3.0.0│ ├─┬ finalhandler@0.2.0│ │ └── negotiator@0.4.9│ │ └── ms@0.6.2│ │ └─┬ debug@2.0.0│ │ └── ms@0.6.2│ ├── fresh@0.2.4│ ├── merge-descriptors@0.0.2│ ├── methods@1.1.0│ ├─┬ on-finished@2.1.1│ │ └── ee-first@1.1.0│ ├── parseurl@1.3.2│ ├── path-to-regexp@0.1.3│ ├─┬ proxy-addr@1.0.10│ │ ├── forwarded@0.1.2│ │ └── ipaddr.js@1.0.5│ ├── qs@2.2.4│ ├── range-parser@1.0.3│ ├─┬ send@0.9.3│ │ ├── debug@2.0.0│ │ ├── depd@0.4.5│ │ ├── destroy@1.0.3│ │ ├── mime@1.2.11│ │ ├── ms@0.6.2│ │ └─┬ on-finished@2.1.0│ │ └── ee-first@1.0.5│ ├── serve-static@1.6.5│ ├─┬ type-is@1.5.7│ │ └─┬ mime-types@2.0.14│ │ └── mime-db@1.12.0│ ├── utils-merge@1.0.0│ └── vary@1.0.1├─┬ method-override@2.2.0│ └─┬ debug@2.0.0│ └── ms@0.6.2├── moment@2.8.4├─┬ morgan@1.3.2│ ├── basic-auth@1.0.0│ ├── depd@0.4.5│ └─┬ on-finished@2.1.0│ └── ee-first@1.0.5└── node-uuid@1.4.8 — — -> Installing App ManagementChecking for Dynatrace credentialsNo Dynatrace Service Found (service with substring dynatrace not found in VCAP_SERVICES) — — -> Caching buildClearing previous node cacheSaving 2 cacheDirectories (default):- node_modules- bower_components (nothing to cache) — — -> Build succeeded!├── @line/clova-cek-sdk-nodejs@1.0.1├── body-parser@1.8.4├── ejs@1.0.0├── express@4.9.8├── method-override@2.2.0├── moment@2.8.4├── morgan@1.3.2└── node-uuid@1.4.8Exit status 0Staging completeUploading droplet, build artifacts cache…Uploading droplet…Uploading build artifacts cache…Uploaded build artifacts cache (1.8M)Uploaded droplet (18.7M)Uploading completeStopping instance 099701cb-d03f-4b56-b65b-62091c74b33aDestroying containerSuccessfully destroyed containerWaiting for app to start…name: skill-fortune-taijirequested state: startedinstances: 1/1usage: 256M x 1 instancesroutes: skill-fortune-taiji.mybluemix.netlast uploaded: Mon 13 Aug 12:58:46 JST 2018stack: cflinuxfs2buildpack: sdk-for-nodejsstart command: node app.jsstate since cpu memory disk details#0 running 2018–08–13T03:59:50Z 0.0% 0 of 256M 0 of 1G$

ブラウザから先程のIBM Cloudダッシュボードを確認すると、今pushしたアプリが実行されているのが確認できます。

IBM Cloudダッシュボード

環境変数を設定します。キーはAPPLICATION_ID、値はLINE Clova Developer Centerで設定したExtension IDです。

$ ic cf set-env アプリ名 APPLICATION_ID ご自信のExtension ID
Extension ID

環境変数が設定されたことを確認します。

$ ic cf env アプリ名

設定した環境変数を有効にするため、アプリを再起動します。

$ ic cf restart アプリ名

以上で、サーバーサイド側の実装は完了です。おつかれさまでした!

――――――――――――――――――――――――――――――――――――――

Information

IBM Code Patterns
http://developer.ibm.com/jp/

IBM だチャンネルPodcast
https://ibm.biz/BdjthM

IBM Developer Advocate Profile
https://developer.ibm.com/code/community/advocates/taijih

Cloud Developers Circle
(ベンダー依存しないクラウドデベロッパーのためのコミュニティ)
https://cdevc.connpass.com/

Node-RED ユーザーグループ
https://node-red.connpass.com/

IBM Cloud ユーザーグループ
https://bmxug.connpass.com/

--

--

Taiji
Taiji

Written by Taiji

Datadog Senior Developer Advocate | Ex-OutSystems Dev Community Advocate | Ex-IBM Dev Advocate | Microsoft MVP | 筑波大学、名城大学非常勤講師 | 記事は個人の見解であり、所属する組織とは関係ありません。

No responses yet