まだプログラマーですが何か?

プログラマーネタ中心。たまに作成したウェブサービス関連の話も https://twitter.com/dotnsf

2014/06

IBM Bluemix は開発者向けのコンテストなども行われていますが、オープンな Cloud Foundry をベースとした PaaS 環境です。そのため、コミュニティなどから Cloud Foundry 向けに提供されている実行環境を流用して環境構築することも可能ですし、それも Bluemix の魅力の1つです。

その一例として、コンテンツ管理システムとして有名な WordPress サーバー環境を Bluemix 上に構築するまでの一連の手順を紹介します。

一部、このエントリの内容と重複していますが、ご了承ください:
BlueMix 上で PHP アプリを動かす



まず IBM Bluemix にログインして、ダッシュボードが表示されている状態にします。そして "Create Application" と書かれたボタンをクリックして、WordPress を導入することになるアプリケーションサーバーを1つ追加(作成)します:
2014062701


アプリケーションサーバーの種類を選択します。最終的には Buildpack から PHP アプリケーションサーバーを選択することになるので、ここではどれを選択しても構いません。図では Liberty for Java を選択しています:
2014062702


"CREATE APP" ボタンをクリックします:
2014062703


アプリケーションサーバーの名称と、ホスト名(の mybluemix.net の前の部分)を指定して "CREATE" ボタンをクリックします。この例では名称は "wordpress"、ホスト名は "wordpress.mybluemix.net" に指定しています。名称は "wordpress" のままでも構いませんが、ホスト名には同じものが使えません。実際に入力する場合はこれとは異なるホスト名を入力してください:
2014062704


しばらく待つとアプリケーションサーバーが作成され、"wordpress" サーバーがダッシュボードに追加されているはずです:
2014062705


次に WordPress のデータベースとなる MySQL サーバーを追加します。再びダッシュボード画面から今度は "Add a Services" ボタン(先ほどの "Add Applicatoin" よりも下にあるはずです)をクリックします:
2014062706


IBM Bluemix 環境内に用意されているサービスの一覧が表示されます。今回は WordPress 用の MySQL データベースサーバーを追加するのが目的なので、少し下の "Data Management" セクションの中にある "mysql" と書かれたアイコンをクリックします:
2014062707


先程と同様の確認画面が表示されるので、"CREATE AND ADD TO APP" ボタンをクリックします:
2014062708


次の画面では、この MySQL サーバーをどのアプリケーションサーバーと紐付けるのか(或いは紐付けなしで起動するのか)を入力する箇所があります。ここでは先程作成した "wordpress" サーバーを選択します。そして "CREATE" ボタンをクリックして MySQL サーバーを作成します:
2014062709


紐付けを行った "wordpress" アプリケーションサーバーを再起動します、という旨のメッセージが表示されたら "OK" をクリックして再起動します。再起動処理は一瞬で終わります:
2014062710


この状態で再びダッシュボード画面を確認すると、作成した MySQL サーバーがサービスとして追加されていることが確認できるはずです:
2014062711


次に、この MySQL サーバーにアクセスするための情報を確認します。ダッシュボード画面の上の方に戻り、アプリケーションサーバー("wordpress")のアイコン部分をクリックします:
2014062712


この "wordpress" サーバーのシステム概要が表示されます。この時点で "wordpress" アプリケーションサーバーと、MySQL サーバーが関連付けられていることが確認できます。 MySQL への接続情報を取得するには、この画面の左ペインから "Runtime" と書かれた箇所をクリックします:
2014062713


この画面の下の方の "Environment Variables" と書かれた所に、環境の変数の情報が表示されている箇所があります:
2014062714


その中にこのような感じで、MySQL サーバーへのアクセス情報が書かれています。この中の赤字部分の内容をメモしておきましょう:
{
   "mysql-5.5": [
      {
         "name": "mysql-qs",
         "label": "mysql-5.5",
         "plan": "100",
         "credentials": {
            "name": "(databasename)",
            "hostname": "192.155.XXX.XXX",
            "host": "192.155.XXX.XXX",
            "port": 3307,
            "user": "(username)",
            "username": "(username)",
            "password": "(password)",
            "uri": "mysql://(username):(password)@192.155.XXX.XXX:3307/(databasename)"
         }
      }
   ]
}

ちなみに "name" の値がデータベース名、"hostname" は MySQL サーバーのホスト名(IPアドレス)、"port" は接続ポート番号ですが、常に 3307 のようです。そして "username" と "password" がユーザー名とパスワードになります。


ここからしばらくは Bluemix 上ではなく、自分のローカル環境での作業になります。まずローカル環境で cf ツールが使える状態にしておきます。cf ツールの導入方法についてはこちらを参照ください。cf ツールが使えるようになっている前提で以下を続けます。ちなみに以下は Linux 環境に cf ツールを導入している前提での説明になりますが、Windows 環境でもほぼ同じだと思っています(未確認です)。

まずはアプリケーションサーバーのドキュメントルートに相当する空のディレクトリを1つ作成しておきます。今後、このディレクトリの中にドキュメントルートの内容となるモジュールを追加していくことになります:
# cd /tmp
# mkdir wp
# cd wp


今回は PHP アプリケーションである WordPress を導入することになりますが、この PHP アプリを Bluemix で動かす場合、ローカル環境ではアプリケーションサーバーのドキュメントルート以下の状態を作っておく必要があります。今回であれば、ドキュメントルート以下に WordPress を導入することになるので、WordPress のモジュールを用意して展開しておくことになります。

というわけで、まずは最新版の WordPress を入手します。WordPress のホームページから最新版のバージョンを確認して、モジュールをダウンロードします(2014/06/27 時点での最新の日本語版は 3.9.1 でした):
# wget http://ja.wordpress.org/wordpress-3.9.1-ja.zip

ダウンロードしたモジュールを展開します。展開後、インストールモジュールは不要なので削除するか、このディレクトリ以下に含まれないディレクトリに移動します(含まれていると一緒にデプロイされてしまいます):
# unzip wordpress-3.9.1-ja.zip
# rm wordpress-3.9.1-ja.zip

なお、今回は /tmp/wp をドキュメントルートとします。WordPress は /tmp/wp/wordpress 内に展開されているので、実際に WordPress にアクセスするには http://wordpress.mybluemix.net/wordpress という URL でアクセスすることになります。もし http://wordpress.mybluemix.net/ という URL でアクセスできるようにしたいのであれば、/tmp/wp/wordpress をドキュメントルートとみなすことになります。この点、ご注意ください。


展開された WordPress モジュールの設定ファイルを Bluemix 環境用に編集します。まずは wordpress/wp-config-sample.php ファイルを wordpress/wp-config.php にリネームします(これが設定ファイルになります):
# mv wordpress/wp-config-sample.php wordpress/wp-config.php

次にこの wordpress/wp-config.php を編集して、Bluemix 上の MySQL サーバーにアクセスできるようにします。具体的には以下の赤字の箇所を上記でメモした自分の環境に合わせて編集してください:
# vi wordpress/wp-config.php
: define('DB_NAME', '(databasename)' ); データベース名 define('DB_USER', '(username)' ); DBユーザー名 define('DB_PASSWORD', '(password)' ); DBパスワード define('DB_HOST', '192.155.XXX.XXX:3307' ); ホスト名:ポート番号
define('FS_METHOD', 'direct' ); プラグインのアップデート用にこの行を追加 :

これらに加えて最初から加えておきたいプラグインやテーマなどがあれば初めから入れておきます。今回は特に用意しません。

最後にメディアアップロード用とアップグレードのフォルダを作成して、プラグインやテーマ用フォルダと合わせて書き込みパーミッションを与えておきます:
# mkdir wordpress/wp-content/uploads
# mkdir wordpress/wp-content/upgrade # chmod 777 wordpress/wp-content/uploads
# chmod 777 wordpress/wp-content/upgrade
# chmod -R 777 wordpress/wp-content/plugins
# chmod -R 777 wordpress/wp-content/themes 

これでローカルホスト側の準備も整いました。改めてドキュメントルート用に作成したフォルダへ移動して、cf ツールで API にログインし、ディレクトリごと Bluemix の wordpress サーバーへ push します。またその際にコミュニティから提供されている PHP アプリケーションサーバーの buildpack を指定することで wordpress サーバーを PHP アプリケーションサーバーとしてデプロイします。デプロイに少し時間がかかりますが、全て完了することを確認します:
# cd /tmp/wp
# cf login -a https://api.ng.bluemix.net -u (IBM ID) -p (パスワード) # cf push -b https://github.com/dmikusa-pivotal/cf-php-build-pack.git wordpress :
:
:
1 of 1 instances running

App started

Showing health and status for app wordpress in org (IBM ID) / space dev as (IBM ID) ...
OK

requested state: started
instances: 1/1
usage: 512M x 1 instances
urls: wordpress.mybluemix.net

state since cpu memory disk
#0 running 2014-06-27 11:42:09 PM 0.0% 68.2M of 512M 55.1M of 1G 
 

これで wordpress.mybluemix.net サーバーに PHP アプリケーションサーバー環境と WordPress を展開したドキュメントルート以下がデプロイされました。ウェブブラウザで http:///wordpress.mybluemix.net/wordpress/ にアクセスしてみると、導入した WordPress の初期セットアップ画面が表示されるはずです:
2014062715


初期セットアップができてしまえば、WordPress として使うことができます:
2014062716


これで IBM Bluemix 上で WordPress の動くサーバー環境を作ることができました。WordPress のような、どちらかというと IaaS 向けのオープンなツールを使うことができる、という意味でも Bluemix(Cloud Foundry) という PaaS のポテンシャルの高さを感じますね。






























CentOS に Java アプリケーションサーバーである Apache Tomcat を導入します。
2014062601



手順としては、まず Java(JDK) をインストールし、その後で Tomcat を導入します。


Java(JDK) のインストール

Oracle Java でも Open Java でもいいのですが、ここでは簡単な後者の手順を紹介します。Java 7 であればこのコマンドで JDK が導入できます:
# yum install java-1.7.0-openjdk-devel

あるいは Java 実行環境だけでもよければこちら:
# yum install java-1.7.0-openjdk

これだけ。


Apache Tomcat のインストール

Apache Tomcat も yum で導入できます。インストールと、起動と、自動起動設定までを行っています:
# yum install tomcat6 tomcat6-webapps tomcat6-admin-webapps
# /etc/init.d/tomcat6 start
# chkconfig tomcat6 on

ちなみにこの方法で導入すると Apache Tomcat 6 が /var/lib/tomcat6/ 以下にインストールされます。

起動後(/etc/init.d/tomcat6 start 実行後)にブラウザで http://(サーバーアドレス):8080/ にアクセスすると Tomcat のデフォルトトップ画面が表示され、正しく導入・動作できていることが確認できます:
2014062701



Apache Tomcat の設定

設定ファイルを書き換えて管理用画面にもアクセスできるようにします:
# vi /etc/tomcat6/tomcat-users.xml

(以下を </tomcat-users> の直前に追加)
  <role rolename="manager"/>
  <user name="admin" password="(管理者用パスワード)" roles="manager"/> 

そして Tomcat サーバーを再起動します:
# /etc/init.d/tomcat6 restart

これで管理用画面のURL である http://(サーバーアドレス):8080/manager/html にもアクセスできるようになりました。ログイン時の ID とパスワードは上記 tomcat-users.xml で指定したものです:
2014062702




(おまけ)Apache Tomcat を 80 番ポートで起動する

まず設定ファイルを書き換えます。server.xml に proxyPort の部分を追加します:
# vi /etc/tomcat6/server.xml

    :
  <Connector port="8080" protocol="HTTP/1.1"
        connectionTimeout="20000"
        redirectPort="8443"
        proxyPort="80" />
:

そして iptable で 80 番ポートへのリクエストを 8080 番に転送し、この設定ルールを iptables に保存します:
# iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
# /sbin/service iptables save



これで Tomcat を再起動すると、Tomcat に 8080 番ポートではなく、 80 番ポートでアクセスできるようになります。
 

リアルタイム価格比較サイト「ねっぴ」の使い方を紹介します:
http://neppi.co/


「ねっぴ」とは?

ネットで購入できる様々な商品の価格をリアムタイムに比較するサービスです。PCのブラウザでも見れますが、画面はスマートフォン向けに最適化されています。
2014062501


こう書くと「カカクコムみたいな感じ?」と思われる人もいると思います。理解として間違ってはいませんが、「ねっぴ」ではカカクコムも比較対象です(カカクコムよりも安く買える所はけっこう見つかります)。

現在、「ねっぴ」は以下の9サイトを対象に検索・比較します。楽天やアマゾンのようにサイト内の複数ショップで同じ商品を扱っている場合は、その中の最安値を対象に比較します:
楽天
アマゾン
Yahoo!ショッピング
カカクコム
ケンコーコム
ヤマダウェブコム(ヤマダ電気)
セブンネットショッピング
ブックオフオンライン
グーグルショッピング


「ねっぴ」の使い方

グーグルで『(商品名、あるいは検索ワード) neppi』と、検索ワードの後にスペースに続けて "neppi" と付けて検索するか、
2014062502


或いは「ねっぴ」のトップページから右上の虫眼鏡アイコンをクリックして検索フィールドに検索文字を入れて検索します。
2014062503


「ねっぴ」の検索結果は一覧として表示されます:
2014062504


または「ねっぴ」のトップページから商品カテゴリを辿って絞り込みながら商品を選ぶこともできます。
2014062505


画面上部には選択カテゴリ内(カテゴリ選択前は全カテゴリ内)での人気商品をスライドさせながら確認することも可能です。
2014062506


1つの商品を選択すると、上記9サイトでその商品を扱っているかどうかを調べ、扱いがあった場合はその値段情報も含めて取り出し、画面に表示します。この商品の場合はヤフーで購入した場合が一番安く買えそうです(リアルタイム検索なので、常に同じ結果になるとは限りません):
2014062507


この画面のサービス名(「ヤフー」や「楽天」)部分をクリックすると、実際にそのサイトで購入するページにジャンプします。現実問題としては送料の差があったり、プレミアム会員の有無、付与ポイントの差などがあるため、必ずしも「一番安い=一番得」とは限りませんが、参考にはなると思います。

この画面の価格の右にある ">>" 部分をクリックすると、本当にそのサイトでその価格で売られているのか、を確認できる画面がポップアップで表示されます。ポップアップ後に ESC キーを押すか、画面内のポップアップ外の部分をタップするとポップアップが消えます:
2014062508


なお、「ねっぴ」内の検索で見つからない(「ねっぴ」内データベースにない)商品でも、その商品の JAN コードと呼ばれるバーコード番号が分かれば、その番号を使って、
 http://neppi.co/item.jsp?code=(JANコード)
のように直接URLにアクセスすれば「ねっぴ」内データベースにない商品のリアルタイム価格比較情報をその場で表示することもできます。


欲しいものの評判などはネットの情報などを使って調べていただいた上で、最後に「ねっぴ」を使って、一番お得に買えるサイトを調べて購入するとお得です!


プライバシーポリシー(個人情報保護方針)

個人情報の管理
当サービスは、お客さまの個人情報を正確かつ最新の状態に保ち、個人情報への不正アクセス・紛失・破損・改ざん・漏洩などを防止するため、セキュリティシステムの維持・管理体制の整備・社員教育の徹底等の必要な措置を講じ、安全対策を実施し個人情報の厳重な管理を行ないます。
 
個人情報の利用目的
お客さまからお預かりした個人情報は、当サービスからのご連絡や業務のご案内やご質問に対する回答として、電子メールや資料のご送付に利用いたします。
 
個人情報の第三者への開示・提供の禁止
当サービスは、お客さまよりお預かりした個人情報を適切に管理し、次のいずれかに該当する場合を除き、個人情報を第三者に開示いたしません。
 
お客さまの同意がある場合
お客さまが希望されるサービスを行なうために当サービスが業務を委託する業者に対して開示する場合
法令に基づき開示することが必要である場合
 
個人情報の安全対策
当サービスは、個人情報の正確性及び安全性確保のために、セキュリティに万全の対策を講じています。
 
法令、規範の遵守と見直し
当サービスは、保有する個人情報に関して適用される日本の法令、その他規範を遵守するとともに、本ポリシーの内容を適宜見直し、その改善に努めます。


IBM Bluxmix のアプリケーション開発アカウントを所有している人にはメールで通知されているのですが、IBM Bluemix アプリケーションのドメインが6月26日に変更になるようです。

これまで、IBM Bluemix 上で作成したアプリケーションには
 (アプリ名).ng.bluemix.net
というホスト名が割り当てられていましたが、最近になって、
 (アプリ名).mybluemix.net
というホスト名も同時に付与されるようになりました。

この前者のホスト名は6月26日までは使えますが、それ以降は後者のホスト名に統一される、とのことです。現在は移行期間の扱いで、どちらの名前でもアクセスできます。

Bluemix 上で動いているアプリケーションをブックマークされている人は後者の名称でブックマークを変更する必要があります。

開発者の視点だと、影響のあるケースとないケースがあると思います。アプリケーションにアクセスするURLが変わるだけなので、開発時に影響を受けるアプリケーションは限られていると思いますが、OAuth でコールバックアドレスを使うケースなど、特定のURLに依存するような機能を使っていると、そのURLを新しいものに変更する必要があります。


僕が作って公開していた TwiML Editor も facebook の OAuth を使っていたので影響がありました。今後はこちらのアドレスを使ってください:
http://twimleditor.mybluemix.net/


 

前回、BLUAcceleration for Cloud のインスタンスを起動して、ウェブコンソールにログインする手順までを紹介しました。その続きです:
Bluemixから提供されるDBaaS : BLUAcceleration for Cloud を使ってみる(1)

ではこの環境に実際に解析するデータを投入してみます。
データは何でもいいのですが、ビッグデータの活用に積極的で、統計情報を公開している福岡市のサイトからサンプルデータを使わせていただくことにします:
福岡市サンプルデータサイト

使うデータはどれでもいい・・・というわけではなく、対応フォーマットの中でもサンプルとして加工が楽そうな CSV ファイルにします。マップ系データの中の K01 スポーツ施設 というデータをダウンロードしてみます:
2014062101


ダウンロードファイル名は K01.csv というファイル名になっています。

で、実はこの CSV ファイルは文字コードがシフトJISになっています。BLUAcceleration for Cloud だと文字化けしそうなので UTF-8 に変更する必要があると思っています(この辺りの詳しい仕様は未確認)。開発者の方であれば何らかのツールをお持ちだと思います(僕は EmEditor で変換しました)が、K01.csv ファイルを UTF-8 に変換しておいてください。


そして、このファイルを BLUAcceleration for Cloud 環境にロードします。前回紹介した方法でウェブコンソールにアクセスします:
2014062009

画面上部のメニューから Manage - Load Data を選択します。ここから何段階かに分けてロードするデータを指定していきます:
2014062102


まずは CSV ファイルを指定します。「ファイルを選択」ボタンをクリックして、先程ダウンロード&文字コード変換した K01.csv ファイルを指定します。またその下の "Row one contains the column name(1行目は列名データ)" を ON の状態にします:
2014062103


日付時刻データが含まれる場合は Advanced Options を展開して日付・時刻のフォーマットを指定します。最後に Load File ボタンをクリックします:
2014062104


データのプレビューが表示されます(シフトJISコードだとこの時点で文字化けしているはずです)。このデータを使う場合は Next ボタンをクリックします:
2014062105


次にこのデータを格納するテーブルを指定します。既にテーブルが存在していて、その中に格納する場合は上の "Load into an existing table" を、新規にテーブルを作成してその中に格納する場合は下の "Create a new table and load" を選択します(ここでは後者を選択しています)。そして Next ボタンをクリック:
2014062106


データの内容を元に自動生成されたテーブルとその名称が表示されています。必要があればこの内容を編集して改変します(特に変更の必要がなければこのままでも構いません)。そして Finish ボタン:
2014062107


ロード結果が表示されます。この画面ではとりあえず成功して 40 行のデータがロードされた、ということがわかります(ビッグデータといえるかどうか・・・)。このデータは直前に指定した K01 テーブルに格納されているはずです:
2014062108


ロードしたデータを確認してみます。メニューから Manage - Work with Tables を選択します:
2014062109


画面左ペインのスキーマ一覧から K01 テーブルを選択すると、右ペインの K01 テーブルのスキーマが表示されます。今は K01 テーブルの中身を参照したいので、この右ペイン内の Browse Data タブをクリックします:
2014062110


K01 テーブルにロードされたデータの一覧が表示されます。このような状態にまでなっていればデータがデータベースに取り込まれて、解析のための準備ができたことになります。

この状態から各種のフィルタリングや列の表示/非表示切り替え、表示順変更などが可能になります。試しにフィルタリングを作ってみましょう。画面赤枠のフィルタリング作成ボタンをクリックします:
2014062111



フィルターの作成画面が表示されます。ここでは単純ですが、名称に「博多」を含むデータだけをフィルタリングしてみます。条件を指定して「フィルター」ボタンをクリックします:
2014062112


名称に「博多」を含むデータだけが選別されているはずです:
2014062113


本来ならばこうしてクラウドにロードされたデータに対して Cognos BI などを使って解析する、ということになると思うのですが、無料アカウントのせいなのか、どうもそこまでの権限はないようでした(与えられたサンプルデータを使う、ということはできそうでした)。残念、無料アカウントではここまでか。









 

このページのトップヘ