Check! Bluemix で Node.js をスピーディーに開発したい！ 〜 オススメとトラブルシューティング

こんばんは、[cloudpack][] の @dz_ こと[大平かづみ][]です。

Prologue - はじめに
====

[Bluemix][] というPaaSで、 [Node.js][] のアプリを作って遊んでいます。(もとい、[SoftLayer Bluemix Summit 2015](http://softlayer-bluemix-summit.jp/ "SoftLayer Bluemix Summit 2015 | 日本最大級 SoftLayerとBluemixの技術カンファレンス") 登壇の準備…！)

[Bluemix]:https://console.ng.bluemix.net/ "IBM Bluemix - 次世代のクラウド・アプリ開発プラットフォーム"
[Node.js]:https://nodejs.org/ "Node.js"

この投稿では、Bluemix で Node.js アプリケーションを開発するあたり、今の時点の私なりのオススメを書き留めます。

なお、私の Node.js のスキルは初心者と思って下さい(笑) 普段はPHPがメインですし、さらに昔はC/C++で組込み開発がメインでした。

オススメのコーディング環境
====
さて、まずはコーディング環境のオススメです。試行の結果、以下の環境に落ち着きました。

- [IBM Bluemix DevOps Services](https://hub.jazz.net/docs "Docs - IBM Bluemix DevOps Services") 
    - ウェブIDE
        - おそらく[Orion](https://orionhub.org/ "Orion - Open Source Web and Cloud Development Environment")ベース
        - Node.js (javascirpt) のコード補完可能
        - ライブ編集 (サーバーを再起動せずコードのみインスタンスに反映)
    - Git管理
        - GitHub などリポジトリ選択可能
    - デバッグ可能
    - ほぼリアルタイムログ表示可能
    - チケット管理機能とも連携

特に「ライブ編集」「ログ表示」が便利です！

シングルサインオンの実装をしていたので、ローカルではデバッグしにくく、PaaS側のコードを直接変更でき、ログを直接見れるのは重宝します。

Bluemix DevOps Services で Node.js を書くときのトラブルシューティング
====
node_modules 配下の独自のモジュールを扱う場合の対処
----
Bluemix でももちろんモジュールの追加が可能です。

- package.json に記述しておくとデプロイの際に自動的にインストールしてくれます。
- アプリディレクトリ内の node_modules ディレクトリを用意して、そこに独自のモジュールを配置することも可能です。

さて、この独自モジュールなんですが、何もせずにデプロイすると、node_modules 配下はデプロイしてくれません…

なぜかというと、プロジェクトにある `.cfignore` を見てみてください。 node_modules 配下は明示的に除外されているのがわかります。

```:.cfignore
node_modules
```

 `.cfignore` はどうやら、 Cloud Foundry (※)のデプロイツールで使う除外設定ファイルのようです。 Git の `.ignore` と同じように書けそうです。

(※ Cloud Foundry は、Bluemix のインフラベース)

ですので、例えば `node_modules/passport-idaas-openidconnect` もデプロイしたい場合は以下のように記述します。

```:.cfignore
node_modules/*
!node_modules/passport-idaas-openidconnect
```

ちなみに、 `passport-idaas-openidconnect` は [Bluemix Single Sign On サービス](https://www.ng.bluemix.net/docs/#services/SingleSignOn/index.html#sso_gettingstarted "Bluemix Single Sign On サービス") で使用するモジュールです。（私はこの独自モジュールがデプロイできないせいで、いろいろ遠回りしましたw）

エディタでシンタックスエラーが多発している場合の対処
----
jsファイルの先頭に `/*eslint-env node*/` を記述すると、シンタックスを正しく解釈してくれます。

```js:*.js
/*eslint-env node*/

var express = require('express');
...
```

これは、Bluemix DevOps Services のプロジェクトを作成した際に作られる app.js の先頭に書いてある記述を参考にしました。

他に試した環境
====
ちなみに、以下も試しました。

- コマンドラインツール (cf コマンド)
    - お手軽だが、デプロイがどうしても時間がかかってしまいます。
    - 余談、上記にも書いたように node_modules 配下がデプロイができず諦めていたが、最近試したらあっさりできました(笑)
- Eclipse x [IBM Eclipse Tools for Bluemix](http://marketplace.eclipse.org/content/ibm-eclipse-tools-bluemix "IBM Eclipse Tools for Bluemix | Eclipse Plugins, Bundles and Products - Eclipse Marketplace")
    - 開発環境作成に時間がかかることと、そもそもJava, PHP向けのIDEのため、 Node.js (javascript) に関してプラグインに頼ることになってしまうので、採用しませんでした。

Epilogue - おわりに
====
まだまだスムーズには行きませんが、だいぶん慣れてきました。作るのは楽しい！また進展あればご紹介します〜


近況
====

最近
----
- [Check! Node.js Express でウェブ開発 with Visual Studio Code](http://qiita.com/dz_/items/f24b66f9f464b054dd1b/ "Check! Node.js Express でウェブ開発 with Visual Studio Code") ← :new: :sparkles:
- [Check! Bluemix で Node.js をスピーディーに開発したい！](http://qiita.com/dz_/items/50949f47ad8e09e491a3/ "Check! Bluemix で Node.js をスピーディーに開発したい！") ← :new: :sparkles:

Phalcon関連
----

- [爆速フレームワーク!! Phalcon PHP Framework](
http://qiita.com/dz_/items/55ae18f7fe3a873bace1 "爆速フレームワーク!! Phalcon PHP Framework")
- [Meet Volt ! Phalcon 謹製テンプレートエンジン Volt - from 第71回 PHP勉強会](http://qiita.com/dz_/items/974a90b32ba6a6e38182 "Meet Volt ! Phalcon 謹製テンプレートエンジン Volt - from 第71回 PHP勉強会")
- [Meet Phalcon! - Phalcon PHPフレームワークを Nginx on Amazon EC2 にインストール！](http://qiita.com/dz_/items/e70d61487224b854b971 "Meet Phalcon! - Phalcon PHPフレームワークを Nginx on Amazon EC2 にインストール！")

Webフレームワーク関連
----
- [[初メモ] はじめての Tomcat 〜 つまづいたところまとめ (Java のバージョン指定、起動パラメータ など)](http://qiita.com/dz_/items/879ca03b5b594007ceab "[初メモ] はじめての Tomcat 〜 つまづいたところまとめ (Java のバージョン指定、起動パラメータ など)")
- [Check! はじめての CakePHP2 ポイントまとめ 〜 Blog Tutorial を動かそう](http://qiita.com/dz_/items/2dd4c68f43484f0f78da "Check! はじめての CakePHP2 ポイントまとめ 〜 Blog Tutorial を動かそう")
- [Check! はじめての CakePHP2 〜 bake でプロジェクトスケルトンを利用する](http://qiita.com/dz_/items/3fa2a7a184de645f71d4/ "Check! はじめての CakePHP2 〜 bake でプロジェクトスケルトンを利用する")

クラウド・インフラ関連
----
### Amazon Web Services
- [Check! はじめての fluentd を Amazon Linux で動かしてみる (ログを PHP から送る)](http://qiita.com/dz_/items/960319ffffa0d7355f8c "Check! はじめての fluentd を Amazon Linux で動かしてみる (ログを PHP から送る)")
- [Check! はじめての Fluentd 〜 IAMロールで Amazon EC2 と S3 間をセキュアに](http://qiita.com/dz_/items/224607c84112ccafa2d6 "Check! はじめての Fluentd 〜 IAMロールで Amazon EC2 と S3 間をセキュアに")
- [Check! はじめての Zabbix インストール on Debian x Amazon RDS](http://qiita.com/dz_/items/3e85dd369c8053ceffe8 "Check! はじめての Zabbix インストール on Debian x Amazon RDS")

### Azure
- [Check! Azure オートメーション ランブックで OMS Search API を利用する (和訳)](http://qiita.com/dz_/items/7de3c282adef71aae7c6/ "Check! Azure オートメーション ランブックで OMS Search API を利用する (和訳)")


技術ブログ寄稿
----

[cloudpack技術ブログ][cloudpack-blog]でも記事を書いています。

- <a href="http://blog.cloudpack.jp/author/oohira/" title="大平 かづみ の記事一覧 | cloudpack技術情報サイト"　target="_blank" rel="nofollow">大平 かづみ の記事一覧</a>

[cloudpack]:https://cloudpack.jp/ "cloudpack（クラウドパック） 400社を超える導入実績! EC2などAWSクラウドの導入設計、構築、運用保守サービス"
[cloudpack-blog]:http://blog.cloudpack.jp/ "cloudpack技術情報サイト"
[大平かづみ]:http://blog.cloudpack.jp/author/oohira/ "大平かづみの記事一覧"