Neo4j|PHPドライバー(Laudis)をインストールしてNeo4jへに接続する

Neo4jグラフデータベースに接続する場合は各言語用に用意されたドライバー(ライブラリ)を使用します。公式にサポートされている言語には、Java、.NET、Javascript、Go、Python、そしてNode.jsがありますが、それ以外の次の言語は公式ではありませんがコミュニティーでサポートされており、Ruby、PHP、Perl、Rustなどが挙げられます。

本記事ではコミュニティーでサポートされているPHPドライバー(Laudis)を使ってNeo4jに接続してデータを取得する方法を学習していきます。本記事はEC2インスタンスが立ち上がっていてSSH接続できている状態を前提として解説していきますので、学習がまだの方は「EC2インスタンスの作成手順」と「WindowsからSSH接続を行う方法」の学習を終えてからこちらの戻ってきてください。

公式サイトの紹介ページ

https://neo4j.com/docs/getting-started/languages-guides/community-drivers

LaudisドライバーのGitHubリポジトリ

https://github.com/neo4j-php/neo4j-php-client

目次

Laudis PHPドライバーのインストール

ここではLaudis PHPドライバーをインストールにComposerを使用します。Composer自体のインストール方法については以下の記事を参考にしてください。

あわせて読みたい
PHP|Composerをインストールする ComposerとはPHPにおける依存関係解消ツールです。基本的にはプロジェクト単位でライブラリをインストールするのに使用します。今回はComposerコマンドをインストールし...

PHPのプロジェクトフォルダ内で以下のコマンドを実行してLaudis PHPドライバーをインストールします。

【例】
sudo mkdir -p /var/www/lib
sudo chown -R apache:ec2-user /var/www
sudo chmod -R g+w /var/www
cd /var/www/lib

sudo -u ec2-user composer require laudis/neo4j-php-client

Neo4jへの接続

Neo4jデータベースを用意する

AuraDBを使用する場合

Neo4jのクラウドサービスのAuraDBを使用する場合は以下の記事を参考にNeo4jのインスタンスを用意してください。本記事ではサンプルデータセットは使用しないので、空のデータベースのまま次に進んでください。

あわせて読みたい
Neo4j|AuraDBにインスタンスを作成してサンプルデータセットを作成する AuraDBとはNeo4jが提供しているNeo4jグラフデータベースのクラウドサービスです。完全マネージドサービスなのでNeo4jデータベースのインストールが不要でかつ保守・運用...

Neo4jデータベースサーバを自前で用意する場合

Neo4jのデータベースサーバを自分で立てる場合は以下の記事を参考にNeo4jのサーバを用意して下さい。

あわせて読みたい
EC2インスタンスにNeo4jをインストールする Neo4jとはNeo4j社によって開発されているグラフデータベースのひとつで、データの関連性を主軸にしてデータの管理を行いまます。MySQL/MariaDBやOracle、PostgreSQLとい...

Webサーバを立てる

Webサーバを立てる場合は以下の記事を参考にして下さい。
Apache(アパッチ)サーバのインストールと設定、そしてHTTPS化
PHPをインストールしてコマンドラインとブラウザでPHPを実行する

Neo4jへの接続とCypherクエリを試す

また、以下の例で使用されているクエリの詳細については「Neoj4|Cypherクエリ基礎編(CRUD+制約とインデックス)」を参考にしてください。それぞれクエリのコメント個所を一つずつアンコメントに入れ替えて、データの挿入や取得を試してみてください。

<?php
require_once('../vendor/autoload.php');

try {
	//$connection_url = 'bolt+s://neo4j:パスワード@ホスト名';
	//AuraDBのホスト名は以下の様なホスト名になります。
	$connection_url = 'bolt+s://neo4j:パスワード@f******d.databases.neo4j.io';
	
	$client = Laudis\Neo4j\ClientBuilder::create()
	->withDriver('bolt+s', $connection_url)
	->build();

} catch(Exception $e) {
	$err_msg = "Exception: ".$e->getLine()." : ".$e->getMessage();
	var_dump($err_msg);
	exit;
}

$movie_id = 1;

//以下コメントを入れ替えてそれぞれ順番に実行してください。

/*
//一意制約の設定
try {

	$cypher = "";
	$cypher .= " CREATE CONSTRAINT ConstraintUniqueMovieMovieId FOR (n:Movie) REQUIRE n.movie_id IS UNIQUE ";
	$cypher .= " ; ";

	$statement = new Laudis\Neo4j\Databags\Statement($cypher, []);

	$result = $client->runStatement($statement);
	
} catch (Exception $e) {
	$err_msg = "Exception: ".$e->getLine()." : ".$e->getMessage();
	var_dump($err_msg);
	exit;
}
*/

/*
//データのインサート
try {

	$cypher = "";
	$cypher .= " MERGE (m:Movie {movie_id: 1}) ";
	$cypher .= " SET m.update_date = datetime() ";
	$cypher .= " RETURN m.movie_id AS movie_id, m.update_date AS update_date ";
	$cypher .= " ; ";

	$statement = new Laudis\Neo4j\Databags\Statement($cypher, []);

	$result = $client->runStatement($statement);
	
} catch (Exception $e) {
	$err_msg = "Exception: ".$e->getLine()." : ".$e->getMessage();
	var_dump($err_msg);
	exit;
}
*/

/*
//データの読みだし
try {

	$cypher = "";
	$cypher .= " MATCH (m:Movie) ";
	$cypher .= " WHERE m.movie_id = \$movie_id ";
	$cypher .= " RETURN ";
	$cypher .= "   m.movie_id AS movie_id ";
	$cypher .= " , apoc.date.format(toInteger(m.update_date.epochSeconds), 's', 'yyyy-MM-dd HH:mm:ss') AS update_date ";
	$cypher .= " ; ";

	$statement = new Laudis\Neo4j\Databags\Statement($cypher, [
		'movie_id' => $movie_id,
	]);

	$result = $client->runStatement($statement);

	foreach($result as $row) {
		echo $row->get('movie_id').' : '.$row->get('update_date');
	}
	
} catch (Exception $e) {
	$err_msg = "Exception: ".$e->getLine()." : ".$e->getMessage();
	var_dump($err_msg);
	exit;
}
*/

/*
//データの削除
try {

	$cypher = "";
	$cypher .= " MATCH (m:Movie) ";
	$cypher .= " WHERE m.movie_id = \$movie_id ";
	$cypher .= " DELETE m ";
	$cypher .= " ; ";

	$statement = new Laudis\Neo4j\Databags\Statement($cypher, [
		'movie_id' => $movie_id,
	]);

	$result = $client->runStatement($statement);
	
} catch (Exception $e) {
	$err_msg = "Exception: ".$e->getLine()." : ".$e->getMessage();
	var_dump($err_msg);
	exit;
}
*/

?>

Cypherクエリ内の変数のプレースホルダー名にはバックスラッシュ(\)が必要です。

まとめ

今回はNeo4jのデータベースに接続するのに、LaudisのPHPドライバーを使用する方法を学習しました。Laudis PHPドライバーはコミュニティーサポートのライブラリでしたね。Composerを使ってインストールしました。接続のテストにはNeo4jのクラウドサービスAuraDBを使用しました。Webサーバを用意して、それからPHPのコードを試しました。Neo4に接続した後は、Cypherクエリでユニーク制約の設定、データのインサート、読み出し、削除をそれぞれ確認しました。総合的な設定スキルが必要になってきました。記事内の各のリンク記事もよく復習しておきましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次