IBM Bluemix KinetiseでMobile Applicaiton開発(1)

**Kinetiseとは**
[Kinetise](https://console.ng.bluemix.net/catalog/services/kinetise-build-mobile-apps-in-a-snap/)は、Bluemixで利用できるMobile Application開発サービスです(2015年12月時点)。PythonとDjangoによるWebServiceと連携することでCRUD処理可能なMobile Applicationのすばやい開発を実現しています。

**この記事で伝えたいこと**
PythonとDjangoのWeb Service、Bluemix Pythonランタイムのデプロイ、Kinetiseによるアプリケーションのビルドについて、Kinetiseのガイド[Starters SDK](https://helpcenter.kinetise.com/backend-developers)を参考に、実際の作業手順と課題の解決方法を説明します。なお、Authenticationについては実装していません。実際に開発する際には、別途、検討する必要があります。

**作業環境について**
Windows 7 SP1 64bit環境で、作業しています。Python、Django、その他は後述のrequirements.txtを参考にしてください。重要なのはBluemixでデプロイするため、Githubの[Python buildpack](https://github.com/cloudfoundry/python-buildpack)に含まれるバージョンを使用することです。buildpackに含まれないバージョンを使用するとデプロイ時に互換性に関するエラーが発生し、問題の切り分け作業が複雑になります。なお、Kinetise専用のライブラリであるrf_alter_api.zipのために、Python 2.7を使用しています。rf_alter_api.zipでは、Python 3で変更された関数(例 Python 2.7のurlparseはPython 3でurllib.parseにリネームされた)が使われているため、エラーになるからです(2015年12月現在)。

**作業手順**
以下の手順です。作業毎に解説します。
1. EclipseとPython関連の準備(導入、Pythonプロジェクトの作成)
2. [Pythonのコード修正](http://qiita.com/yoshiono/items/39a86297773963407eea)
3. [POSTMANで動作確認](http://qiita.com/yoshiono/items/39a86297773963407eea)
4. [Bluemix Pythonランタイムにデプロイ](http://qiita.com/yoshiono/items/2fb5a4505e3561458854)
5. KinetiseでMobile Applicationの開発とビルド　（鋭意作成中です）

**1. EclipseとPython関連の準備(導入、Pythonプロジェクトの作成)**
1.1. 偉大な先達の方々の[手順](http://qiita.com/kaki_k/items/1fff7fefcf26dc4b69bc)を参考に、EclipseとPythonをインストールします。なお、この記事では、Eclipse Marse.1(4.5.1)とPython 2.7.10を使用しています。EclipseのPython開発用プラグインについては、Pleiades All in OneのPython版を選択すれば、最初からPyDev環境を使用可能です。

1.2. マイドキュメントに仮想環境(env3)を構築し、必要なモジュールを導入します。仮想環境やEclipseの利便性については、先達の方々の記事を参考にしてください。この作業PCでは、複数バージョンのPythonが導入済み、かつ複数の仮想環境を構築しているので、混乱を避けるためにvirtualenv、pipといったコマンドを絶対パスで指定しています。なお、vitualenvは導入済みなのでfreezeでバージョンを確認しています。未導入の場合は導入してから作業してください。以下、ログです。ユーザー名は、hogeです。

```text:コマンドのログ
C:\Users\hoge\Documents>C:\Python27\Scripts\pip.exe freeze -l
virtualenv==13.1.2

C:\Users\hoge\Documents>C:\Python27\Scripts\virtualenv.exe env3
New python executable in env3\Scripts\python.exe
Installing setuptools, pip, wheel...done.

C:\Users\hoge\Documents>cd env3\Scripts

C:\Users\hoge\Documents\env3\Scripts>activate
(env3) C:\Users\hoge\Documents\env3\Scripts>pip install django
Collecting django
  Using cached Django-1.9-py2.py3-none-any.whl
Installing collected packages: django
Successfully installed django-1.9

(env3) C:\Users\hoge\Documents\env3\Scripts>pip install djangorestframework
Collecting djangorestframework
  Using cached djangorestframework-3.3.2-py2.py3-none-any.whl
Installing collected packages: djangorestframework
Successfully installed djangorestframework-3.3.2

(env3) C:\Users\hoge\Documents\env3\Scripts>pip install markdown
Collecting markdown
Installing collected packages: markdown
Successfully installed markdown-2.6.5

(env3) C:\Users\hoge\Documents\env3\Scripts>pip install django-filter
Collecting django-filter
  Using cached django_filter-0.11.0-py2.py3-none-any.whl
Installing collected packages: django-filter
Successfully installed django-filter-0.11.0

(env3) C:\Users\hoge\Documents\env3\Scripts>pip install yattag
Collecting yattag
Installing collected packages: yattag
Successfully installed yattag-1.5.2

(env3) C:\Users\hoge\Documents\env3\Scripts>pip install drf-extensions
Collecting drf-extensions
Requirement already satisfied (use --upgrade to upgrade): djangorestframework>=2
.3.5 in c:\users\hoge\documents\env3\lib\site-packages (from drf-extensions)

Installing collected packages: drf-extensions
Successfully installed drf-extensions-0.2.8

(env3) C:\Users\hoge\Documents\env3\Scripts>pip freeze -l
Django==1.9
django-filter==0.11.0
djangorestframework==3.3.2
drf-extensions==0.2.8
Markdown==2.6.5
wheel==0.24.0
yattag==1.5.2
```
1.3. Eclipseを起動します。C:\Users\hoge\workspace_env3をワークスペースとして指定します。ウィンドウ-設定でPython Interpreterを選択し、インタープリター名はpython27、インタプリター実行可能ファイルはC:\Users\hoge\Documents\env3\Scripts\python.exeとします。kinetiseからダウンロードしたrf_alter_api.zipを解凍しrf_alter_apiフォルダをC:\Users\hoge\Documents\env3\Lib\site-packagesにコピーします。その際にフォルダのプロパティで読み取り専用のチェックを外します。外さなくても動作します。このフォルダ内にpycファイルが生成されるため、書き込みエラーが発生するかも？という不安を払拭するのが目的です。

1.4. Eclipseでファイル-新規-プロジェクトからPyDev-PyDev Djangoプロジェクトを選択し、プロジェクト名kinetiseとして新規Pydevプロジェクトを作成します。インタープリターにはpython27を選択します。kinetiseプロジェクトを右クリックしDjango-マイグレーション(Django >= 1.7)manage.py migrateを選択します。同様に、Django-Create Application(manage.py startapp)を選択しDjango app名にcommentsを指定します。
(補足)　もし1.2でPython 3のvirtualenvで仮想環境を構築していると、kinetiseプロジェクトのPYTHONPATHにkinetise未対応のPython 3のモジュールが含まれてしまって、kinetiseプロジェクトは正常動作しません。解決するためには、Python 2.7のvitualenvで作業をやり直す必要があります。また、一連の作業は、コマンドラインにおけるdjango-admin startproject kinetise～manage.py startapp commentsに相当し、これによりEclipse上でmanage.pyが使えるようになります。ところで、Eclipseの新規プロジェクトの作成についてですが、なぜかPydevプロジェクトを最初から選択するとmanage.pyが作成されず、その後の作業が複雑になりますので注意してください。最終画面がsqlite3の設定画面ならばmanage.pyが作成されています。自分でmanage.pyを追加してもよいですが、最初からファイル-新規-プロジェクトで作成しなおしたほうが簡単です。またrf_alter_apiフォルダにはKinetiseのWeb Serviceのためのオブジェクトが含まれているので、PYTHONPATH経由で参照される必要があります。つまり、rf_alter_apiフォルダのパスを、Eclipseでは「実行で使用するPYTHONPATH」に、Bluemixではrun.shでPYTHONPATH環境変数に、含める必要があります。

これで、EclipseとPython関連の準備(導入、Pythonプロジェクトの作成)の説明は終了です。次は、[PYTHONのコード修正](http://qiita.com/yoshiono/items/39a86297773963407eea)を説明します。