2013年9月24日火曜日

Go言語からNeo4jを試してみる

ここ一年半ほどあるものを実装しようとモヤモヤしていたのですが、先週元上司との会話の中でヒントをもらった気がしたので、グラフDBをためしてみることにしました。
グラフDBは初挑戦のため、情報も多いメジャーどころのNeo4jを使用することにしました。
そもそもグラフDBとはなんぞや?って人は各々ググッてください。

◯Neo4Jのインストール

とりあえずローカルで試せればいいので、brewから一発でインストールします
brew install neo4j
で、インストールが終わったら、
neo4j start
で実行させるのですが、Neo4jの動作にはJava7が必要ということらしく、Oracleのサイトからダウンロード&インストールを行いました。
再度 neo4j start コマンドを実行すると、文句を言われながらも、サーバーが立ち上がります。
$ neo4j start
WARNING! You are using an unsupported version of the Java runtime. Please use Oracle(R) Java(TM) Runtime Environment 7.
Using additional JVM arguments: -server -XX:+DisableExplicitGC -Dorg.neo4j.server.properties=conf/neo4j-server.properties -Djava.util.logging.config.file=conf/logging.properties -Dlog4j.configuration=file:conf/log4j.properties -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -Dneo4j.ext.udc.source=homebrew
Detected installation in launchd, starting it...

 サーバが正常に立ち上がったら、Web管理者用ページを開いてみます。
open http://localhost:7474/webadmin/
Neo4j 001
上記の画面はいくつかテスト的にデータを突っ込んだ後の状態になっています。
とりあえず、ここまで確認できたら、インストールは完了です。


◯Go言語用クライアントをインストール

Go言語のライブラリを探す際は、
  • できるだけ最近更新されており
  • こまめにコミットされている
を基準としてるため、Neo4jを試した日(2013/09/23時点)で、最も上記に当てはまった
jmcvetta/neoism
 を採用しました。
ということで、さくっとインストールを行います。
$go get github.com/jmcvetta/neoism

◯データの登録

Go言語からデータの登録を行います。

上記のコードで、一個のルートノードに対して、5つの子ノードを、"ConnectTo"というリレーションで接続したグラフが作成されます。
fmt.Printlnで表示しているルートノードのIDはメモっておきましょう。この後使用します。


◯データの検索

RDBのSQLの様に、Neo4JではCypherというクエリでデータの作成、検索を行えます。
先ほどの
http://localhost:7474/webadmin/
にアクセスして、Power tool Console タブを選択します。
Neo4j 002
そして、コンソールに対して、以下のクエリを入力します。
START a = node([先ほどの実行結果のID])
MATCH a-[r]->b
RETURN a,r,b;
Neo4j 003

START句は、検索開始のノードを指定します。
今回は自分の環境での実行結果が、ルートノードID=20だったため、node(20)を開始ノードとして設定しています。
そして、開始ノード に対して a という別名を定義しています。

MATCH句は、検索対象のパターンを記載します。
MATCH a-[r]->b
は、aに接続されている、リレーション r と、子ノード bという意味合いです。
それぞれ、a, r, b という別名が定義され、以降は別名で参照することができます。
なおここで、リレーションの種類を指定したい場合は、[r]の代わりに
MATCH a-[:ConnectTo]->b
と記載することで、aとbをつなぐリレーションをConnectToのみに限定することができます。

RETURN句はそのまま、返却する値を定義します。
ここで指定した別名がそのまま実行結果として返ってきます。
RDBでいうところのSELECT句ですね。

と、比較的わかりやすい構文で構成されています。
構文についは、Consoleの左サイドバーにチートシートがあるので、いろいろ試してみると新しい発見があるかもしれません(僕もまだ全部は見てないです)

◯感想

触ってみた感想としては、RDBとは異なったパラダイムですが、Cypherが比較的理解しやすいのと、データ構造が人間に理解しやすい形のため、
さわりの部分で投げ出すことはなさそうです。
とは言え、『やっと動かせた!』ってレベルなので、そもそも僕の目的にあっているのか吟味しながら触っていこうと思います。

2013年9月17日火曜日

話題の Genymotionをインストールしてみた

話題の高速androidエミュレータの GenymotionをMacBook Airにインストールしてみました。

 

◯前準備

まずは公式ページにサインアップし、アカウントの作成とdmgファイルをダウンロードしておきます。

Genymotion

 

Genymotionは仮想エンジンとして、VirtualBoxを使用しているので、こちらも事前にインストールしておきます。

 

◯インストール

dmgファイルをマウントし、以下のファイルをApplications内に放り込みます

  • Genymotion.app
  • Genymotion Shell.app

 

Genymotion 008

 

とりあえず、Genymotionを起動します。

『仮想デバイスが無いけど、作るかい?』と聞かれるので、Yesと答えておきましょう。

Genymotion 001

 

 

すると、前準備で作成したアカウントを尋ねられるので、それぞれ入力した後に『Connect』をクリックします。

Genymotion 002

 

 

次に作成する仮想イメージのタイプを選択します。

今回はとりあえず、我が愛機『Galaxy Nexus』の4.2.2 with Google Appsを選択しました。

Genymotion 003

 

 

確認画面が出てくるので、そのまま『Next』をクリックします。

Genymotion 004

 

仮想イメージのダウンロードが始まります。

Genymotion 005

 

自分の環境では約200MBのダウンロードで、5〜10分くらいで完了しました。

Genymotion 006

 

作成する仮想環境に名前をつけます。

今回は特に深く考えずにそのままにしておきました。

Genymotion 007

 

サクッと作成完了です。

ここまでで20分もかかってません。

Genymotion 009

 

◯イメージの起動

インストール完了画面で『Finish』をクリックすると、下記のようなメニュー画面が表示されます。

先ほど作成したイメージだけが表示されています。

Genymotion 010

 

そのまま、『Play』をクリックすると、『Android SDKのパスが設定されてねーよ!このスットコドッコイ』と言われてしまったので、

『Yes』をクリックし、設定画面に移ります。

Genymotion 011

 

自分の環境では、android-sdkはhomebrewで管理しているため、下記のように設定を行い、『OK』をクリックします。

/usr/local/Cellar/android-sdk/22.0.5/

Genymotion 012

 

今度は『VirtualBoxのエンジンがロードできねーぞ!この唐変木が!』と言われてしまいました。

もともと入っていたVirtualBoxが古かったようなので、最新の4.2.18をダウンロードし、インストールを行います。

VirtualBoxのインストールは、主題から外れるので割愛します。

 

さて、VirtualBoxの最新化ができたところで、再度メニューから『Play』をクリックします。

瞬殺でandroidが立ち上がりました。

言語を日本語に設定し、『開始』をクリックします。

Genymotion 014

 

なんか表示がおかしくなっている部分がありますが、まぁ見なかったことにしておきましょう。

あとはいつもどおり、Googleのアカウントを設定して、

Genymotion 015

 

バックアップの設定をして

Genymotion 016

 

位置情報の設定をして

Genymotion 017

 

セットアップ完了です!

Genymotion 018

 

あとは煮るなり焼くなり好きにすればいいじゃない。

Genymotion 019

 

 

◯感想

ちょっといじってみた感想としては、前評判通り動作が実機よりさくさく(ぬるぬる?)と動きます。

Google純正のエミュレータよりも、起動もはやくストレスが少なく感じますね。

ただ、この環境で動作テストを行ってしまうと、実機での検証時に『あれ?』ってなってしまいそうです。

 

 

2013年9月10日火曜日

MSDeployを使用して、JenkinsからWebサーバにデプロイする

定型処理は自動化しましょう!ということで、JenkinsからMSDeployを使ってASP.netプログラムを、Windows 2012 Server上のIISにデプロイできるようにしてみました。

 

Windows Server 2012 (デプロイ先)の設定

◯前提条件

  • サーバーマネージャーからIISがインストールされている状態

 

◯Web Platform Installer から、Web配置ツールをインストール

製品 → すべて → Web配置ツールを探し出して、追加をクリック

無題クリップ 062813 030821 PM

 

インストールをクリックすると、『これでインストールするけど、いいかい?』って聞かれるので、同意しましょう。

無題クリップ 062813 030930 PM

 

 

インストールが終了するまで待ちます。

無題クリップ 062813 030957 PM

 

 

他のもいろいろインストールされましたが、Web配置ツールが入ったので良しとしましょう。

無題クリップ 062813 031118 PM

 

 

◯IISで展開の設定

IIS上のDefault Web Site を右クリックし、展開→Web配置による発行の有効化 をクリックします。

無題クリップ 062813 031514 PM

 

 

Web配置による発行の有効化の画面が出てきます。

ほとんどは初期値で良いのですが、『発行の設定ファイルの保存先を指定します』の項目だけは初期値ではうまく行かなかったので、C:¥inetpub¥wwwroot配下に設定します。

無題クリップ 062813 043330 PM

あとは、設定をクリックして、設定を反映しておきます。

 

 

 

Jenkins側の設定(Windows 7 Pro)

◯前提条件

  • .net Framework 4.0がインストールされていること
  • MSBuild(Jenkins Plugin)がインストールされていること

 

◯MSBuildプラグインの設定

まずは、.net Frameworkのバージョンを明示的に指定します。

Jenkinsのトップページから、『Jenkinsの管理』→『システムの設定』から、MSBuildの項目を下記のように設定します。

Name:任意の名称(バージョンがわかりやすければ、どんな名称でも問題ないと思います)

Path to MSBuild : 指定バージョンのMSBuild.exeへの絶対パス

Default Parameters : 今回は使用しません。

Blog 20130910 01

 

 

◯ジョブを作成する

フリースタイル・プロジェクトのビルド を選択して、新規ジョブを作成します。

 

◯MSBuildの設定

『ビルド手順の追加』から、『Buil a Visual Studio project or solution using MSBuild』を選択し、手順を追加します。

Blog 20130910 03

 

MSBuild Version : 『MSBuildプラグインの設定』で作成した、バージョン情報

MSBuild Build File : ジョブディレクトリ配下のworkspaceディレクトリ配下からの、プロジェクトorソリューションファイルへの相対パス

Command Line Arguments : ビルドはリリースで、ターゲットはPackageに指定

Blog 20130910 02

 

◯MSDeployコマンドを設定する

『ビルド手順の追加』から、『Windowsバッチコマンドの実行』を選択し、手順を追加します。 

Blog 20130910 04 

設定するバッチコマンドの内容は以下のようになります。(実際は一行で記述します。)

"C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" 

-verb:sync 

-source:package='[ビルドパッケージのパス]' 

-dest:auto,wmsvc=[サーバアドレス],includeAcls='False',username=[サーバユーザ],password=[ユーザパスワード] 

-setParam:"IIS Web Application Name"="[デプロイ場所]" 

-allowUntrusted=true

Blog 20130910 05

 

 

以上で、デプロイサーバ側、Jenkinsジョブの設定が完了です。

これでVCSのポーリングを組み合わせて、コミット/プッシュに応じてビルド〜デプロイまでを自動化することができます。

本番環境へのデプロイなんかは、間にテストをかませたり、ワークフロー的な動きが出てきたりしますが、開発環境レベルではこのレベルで問題かなぁと思います。