SlideShare a Scribd company logo
Neo4j.rbにみるOGM
Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved.
発表者紹介
2
高部 真一郎
(たかべ しんいちろう)
テクノロジックアート エンジニア
趣味はパラグライダー
Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved.
Neo4jでやりたいこと
3
・人探し、先祖探し
・ある一定の制限をもたせたパターン分析
・株のトレーディング
・グラフ理論を使った知的ゲーム
・人間系の色々
Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved.
Neo4jrb
4
今日はNeo4jrbのお話をします。
これは2014年に「Best Community Contribution」というものでGraphDB接続カン
ファレンス?で賞を獲得したrubyのライブラリです。
コミュニティがライブラリを開発して発表しているので参考までに題材にしてみました。
Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved.
Neo4jの利用
5
Neo4jの性能や事例については何度かア
ジェンダがあったけど、
アプリからどのように呼べばいいの?
→呼び出しに手間がかかるようだとNeo4j
自体は使い方によって速いし便利でも実
装しづらい・・・
Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved.
Neo4jの利用
6
Neo4jの性能や事例については何度かア
ジェンダがあったけど、
アプリからどのように呼べばいいの?
→呼び出しに手間がかかるようだとNeo4j
は便利でも実装しづらい・・・
オブジェクトグラフマッパー(OGM)なるも
のがあります!
Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved.
OGMとは
7
Object-Graph-Mapper(オブジェクトグラ
フマッパー)のこと。
O/Rマッパー( Object-relational
mapping )の一つであるRuby(プログラ
ミング言語)で利用されるActiveRecord
と同様の記載ができる。
O/Rマッパーって?ActiveRecordって?
Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved.
O/Rマッパーとは
8
O/Rマッパーって?(分かっている方についてはすみません。説明も一部言い方が違うかも)
オブジェクトとリレーショナルデータベースのミスマッチをマッピング(対応付け)をすることです。
管理番号 分類 名称
001 哺乳類 シカ
002 爬虫類 ワニ
003 両生類 カエル
生物
哺乳類
シカ
爬虫類
ワニ
両生類
カエル
ミスマッチが生じる
例えば「シカ」インスタンスを扱いたい場合、
SQLで呼び出して変数に代入して・・・
データベース オブジェクト指向
Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved.
O/Rマッパーとは
9
コネクション管理機能 データベースとの接続やコネクションプーリングが管理
できるようになる。
自動マッピング機能 外部ファイルにオブジェクトの属性名とテーブルの列名
に関するマッピング定義を設定することによって自動的
にマッピング処理を行ってくれます。
マッピングファイル、
DTO、DAOの自動生成
機能
O/Rマッピングツールの提供する自動生成ツールによっ
てマッピングファイル、DTO(DataTransferObject)、
DAO(DataAccessObject)といったファイルを自動で作成し
てくれます。
接続情報の管理機能 データベース接続のためのドライバやデータベースの接
続情報を、O/Rマッピングツール側で管理してくれます。
キャッシュ機能 一度取得した検索結果をメモリ上に保持しておいて、同
じ検索処理が行われた場合は、メモリ上にある検索結
果を返します。これによって、データベースへのアクセス
を減らし、パフォーマンスがあがります。
具体的にはこんな機能です・・
Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved.
O/Rマッパーとは
10
つまり、オブジェクト指向的にデータベースを扱うことができる!
管理番号 分類 名称
001 哺乳類 シカ
002 爬虫類 ワニ
003 両生類 カエル
生物
哺乳類 爬虫類 両生類
橋渡し
データベース オブジェクト指向
Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved.
くどいですが例です。
11
例えば、哺乳類の全てを選びたい場合・・・
SQLでは SELECT * FROM MAMMAL;(Cypher Match n Return n Litmi) とかなるのが、
O/Rマッパー(ActiveRecord)を使うとプログラム上から
mammals = Mammal.all(これはActive supportっぽいですが、)
最初の哺乳類は
(例?)mammal = Mammal.first
シカという名前を持つ最初の哺乳類を探したい場合は
deer = Mammal.find_by(name: ‘シカ’)
となる。
Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved.
ORMとは
12
• O/Rマッピングを導入することで、ソースコードからデータベースにアクセスする
処理の部分を切り離すことがでるので、変更に強くなります。
• O/Rマッピングを導入することで、オブジェクトとリレーショナルデータベースとの
構造的な違いを意識することなく開発できます。さらに人が理解しやすいメソッド
を用意されている。
• 自動生成機能を利用することで、ソースファイルなどの作成の手間が省けるので
開発効率があがります。
• O/Rマッピングを導入することで、データベースの差(SQL方言の差)を吸収でき
ます。
Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved.
話をOGMに戻すと
13
Object-Graph-Mapper、つまりNeo4jを代表とす
るグラフデータベースを利用しやすくしたもの!
では実際につかってみよう!
投稿(post)にコメント(comment)を追加していく
簡単なWebアプリケーションです。
Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved.
このコマンドだけです。
14
rails new whisper -m http://neo4jrb.io/neo4j/neo4j.rb -O
cd whisper
rake neo4j:install[community-2.1.4,development]
rake neo4j:config[development,7000]
rake neo4j:start
追記
config.neo4j.session_type :server_db
config.neo4j.session_path = 'http://localhost:7000‘
rails g scaffold post title body
rails g scaffold comment body
追記
has_one :out, :post, type: :comments_on
has_many :in, :comments, origin: :post
あとはviewに少し記載するだけ
ではどんなアプリケーションであるか見てみましょう!
Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved.
サンプルで実装していきましょう!
15
⚫Webアプリ全体とneo4j
rails new whisper -m http://neo4jrb.io/neo4j/neo4j.rb -O
cd whisper
rake neo4j:install[community-2.1.4,development]
rake neo4j:config[development,7000]
rake neo4j:start
⚫データベース定義
config/environments/development.rb
config.neo4j.session_type :server_db
config.neo4j.session_path = 'http://localhost:7000'
何もない状態(rubyやrakeは入っている必要がありますが・・・)から下記のコマンド
を実行するだけでNeo4jのWebアプリケーションが生成されます。
Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved.
サンプルで実装していきましょう!
16
⚫画面、モデルとビューの作成
rails g scaffold post title body
rails g scaffold comment body
ここからがモデリングの話
⚫モデル、まずコメントの定義
app/model/comment.rb
has_one :out, :post, type: :comments_on
Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved.
サンプルで実装していきましょう!
17
⚫️モデル、投稿のモデリング
app/model/post.rb
has_many :in, :comments, origin: :post
ここで一度rails s –p 3000
http://localhost:3000/posts
⚫画面、コメントを表示するコードを追記。
app/views/comments/_form_html.erb
<div class=“field”>
<%= f.label :post %><br>
<%= f.select :post,
options_from_collection_for_select(Post.all, :id :title,
@comment.post.try(:id)) %>
</div>
3枚目になってしまいました。
Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved.
サンプルで実装していきましょう!
18
⚫投稿に各コメントを表示するコードを記載
app/views/posts/show.html.erb
<ul>
<% @post.comments.each do |comment| %>
<li><%= comment.body %></li>
<% end %>
</ul>
⚫コントローラにpostの情報も渡してあげる
app/controllers/comments_controller.rb
def comment_params
params.require(:comment).permit(:body, :post)
end
4枚目
Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved.
サンプルアプリログ
19
Railsログをみると・・・
CYPHER 40ms MATCH (result_comment:`Comment`) WHERE
(result_comment.uuid = {result_comment_uuid}) RETURN
result_comment ORDER BY ID(result_comment) LIMIT {limit_1}
Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved.
コード内部での書き方
20
⚫新しいノードの作成は
@comment = Comment.new(comment_params)
@comment = Comment.find(params[:id])
⚫保存は
@comment.save、@comment.update(comment_params)
ほぼほぼ、ActiveRecordと同じ。
Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved.
モデリングのおさらい
21
⚫投稿モデル
class Post
include Neo4j::ActiveNode
property :title, type: String
property :body, type: String
has_many :in, :comments, origin: :post
end
⚫コメントモデル
class Comment
include Neo4j::ActiveNode
property :body, type: String
has_one :out, :post, type: :comments_on
end
Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved.
投稿のサイトなんてみせられても仕方ない
22
ではどのように実装しているかみてみよう!
Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved.
オープンソース
23
blog/vendor/bundler/ruby/2.1.0/gems
ここにライブラリが保存されています!
neo4j-4.1.5
neo4j-core-4.0.7
がneo4j関連で
blog/vendor/bundler/ruby/2.1.0/gems/neo4j-
4.1.5/lib/neo4j/active_node
Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved.
オープンソース
24
例えばactive_nodeのnode_wrapper.rbなんかは・・・
require 'active_support/inflector/inflections'
module Neo4j
module ActiveNode
module HasN
class Association
include Neo4j::Shared::RelTypeConverters
include Neo4j::ActiveNode::Dependent::AssociationMethods
attr_reader :type, :name, :relationship, :direction, :dependent
def initialize(type, direction, name, options = {})
validate_init_arguments(type, direction, options)
@type = type.to_sym
@name = name
@direction = direction.to_sym
@target_class_name_from_name = name.to_s.classify
apply_vars_from_options(options)
end
Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved.
オープンソース
25
まあ、今日はこの辺りで・・・
Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved.
感想
26
JavaのAPIを使ってneo4jからデータを取ってき
てActiveSupportでデータを使いやすくしている。
RDBを扱っているのとほぼ同じ記述でいけそ
う!
性能面の検証はまだですが、処理速度はそれほ
ど早くない印象。
オープンソースなので開発にご協力してみてくだ
さい!
Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved.
GitHub
27
Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved.
ご静聴ありがとうございました!
28
ということで次回機会があり、今回のアジェンダ
の反響がよく、発表する機会があればjavaのア
プリをご紹介したいです。

More Related Content

PPTX
(2017.6.9) Neo4jの可視化ライブラリまとめ
PPTX
(2017.4.27) IBM watson developer cloudのアプリケーションログを可視化する
PPTX
(2017.8.27) Elasticsearchと科学技術ビッグデータが切り拓く日本の知の俯瞰と発見
PDF
[db tech showcase Tokyo 2017] D25: データの分析や解析の前に必要となる「データ準備」とは。データ・プレパレーション・プラ...
PDF
異次元のグラフデータベースNeo4j
PDF
深層学習の導入で抱える課題とユースケース実例
PDF
Dll講演資料 2017616
PDF
[Livesence Tech Night] グリーにおけるHiveの運用
(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.4.27) IBM watson developer cloudのアプリケーションログを可視化する
(2017.8.27) Elasticsearchと科学技術ビッグデータが切り拓く日本の知の俯瞰と発見
[db tech showcase Tokyo 2017] D25: データの分析や解析の前に必要となる「データ準備」とは。データ・プレパレーション・プラ...
異次元のグラフデータベースNeo4j
深層学習の導入で抱える課題とユースケース実例
Dll講演資料 2017616
[Livesence Tech Night] グリーにおけるHiveの運用

What's hot (20)

PDF
DIMoの操作実演とSCSKが提供する研修プログラム
PDF
クラウドネイティブトランスフォーメーションのススメ
PDF
Deep inspectionの特徴
PDF
IoTにおけるクラウドインフラからサーバサイドまでの概要的な話
PPTX
Deep Learning Lab コミュニティ 企画概要
PDF
Hyperledger Tokyo Meetup 22/07/2020
PPTX
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
PDF
タブブラウザSDKを作った話 #yjcamp
PDF
Googleにおける機械学習の活用とクラウドサービス
PDF
Py conjp2017ジョブフェア
PPTX
Siderご紹介スライド@第2回 GitHub Enterprise ユーザ会
PPTX
Redisの特徴と活用方法について
PDF
ハイブリッドガイドライン解説
PPTX
Jazug3周年lt deployブランチを追加してみましょう
PDF
Node-REDのworldmapの活用
PDF
Hyperledger Projectの概要
PDF
Deep Security on Bluemix IaaSによるセキュリティ対策について
PPTX
【AWS×Deployment】TechTalk #5
PDF
Prestoクエリログの保存/分析機能の構築 #yjdsnight
DIMoの操作実演とSCSKが提供する研修プログラム
クラウドネイティブトランスフォーメーションのススメ
Deep inspectionの特徴
IoTにおけるクラウドインフラからサーバサイドまでの概要的な話
Deep Learning Lab コミュニティ 企画概要
Hyperledger Tokyo Meetup 22/07/2020
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
タブブラウザSDKを作った話 #yjcamp
Googleにおける機械学習の活用とクラウドサービス
Py conjp2017ジョブフェア
Siderご紹介スライド@第2回 GitHub Enterprise ユーザ会
Redisの特徴と活用方法について
ハイブリッドガイドライン解説
Jazug3周年lt deployブランチを追加してみましょう
Node-REDのworldmapの活用
Hyperledger Projectの概要
Deep Security on Bluemix IaaSによるセキュリティ対策について
【AWS×Deployment】TechTalk #5
Prestoクエリログの保存/分析機能の構築 #yjdsnight
Ad

Similar to Neo4jrbにおけるOGM (20)

PPTX
WebAppDev勉強会 #4
PDF
Next-L Enju 開発WS #03 Ruby on Railsの使い方
PPTX
WebAppDev勉強会 #2 at cafe? IKAGAWA DO
PDF
A HUGE CHANGE RAILS 5 IS APPROACHING FAST
PPTX
Tech fun rails_workshop
PDF
20110820 metaprogramming
PPTX
RailsTutorial - 発表資料, -beta-
PDF
Rails Controller Fundamentals
PDF
react_rails
PDF
nomlab_okayamaruby_slide
KEY
Rails基礎講座 part.2
PDF
Cumiki - エンジニアのための、ちょっといい感じのドキュメント作成ツール
PDF
Railsハイパー実践講座-第35回NaCl勉強会
PDF
はじめての Rails アプリ開発
PDF
Rails vim easy
PDF
Hyper → Highspeed → Development
PDF
アジャイルソフトウェア開発の道具箱
ODP
Rubykaigi2010
PDF
超高速アプリ開発法
PDF
Why did I become a ruby committer
WebAppDev勉強会 #4
Next-L Enju 開発WS #03 Ruby on Railsの使い方
WebAppDev勉強会 #2 at cafe? IKAGAWA DO
A HUGE CHANGE RAILS 5 IS APPROACHING FAST
Tech fun rails_workshop
20110820 metaprogramming
RailsTutorial - 発表資料, -beta-
Rails Controller Fundamentals
react_rails
nomlab_okayamaruby_slide
Rails基礎講座 part.2
Cumiki - エンジニアのための、ちょっといい感じのドキュメント作成ツール
Railsハイパー実践講座-第35回NaCl勉強会
はじめての Rails アプリ開発
Rails vim easy
Hyper → Highspeed → Development
アジャイルソフトウェア開発の道具箱
Rubykaigi2010
超高速アプリ開発法
Why did I become a ruby committer
Ad

Neo4jrbにおけるOGM

  • 2. Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved. 発表者紹介 2 高部 真一郎 (たかべ しんいちろう) テクノロジックアート エンジニア 趣味はパラグライダー
  • 3. Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved. Neo4jでやりたいこと 3 ・人探し、先祖探し ・ある一定の制限をもたせたパターン分析 ・株のトレーディング ・グラフ理論を使った知的ゲーム ・人間系の色々
  • 4. Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved. Neo4jrb 4 今日はNeo4jrbのお話をします。 これは2014年に「Best Community Contribution」というものでGraphDB接続カン ファレンス?で賞を獲得したrubyのライブラリです。 コミュニティがライブラリを開発して発表しているので参考までに題材にしてみました。
  • 5. Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved. Neo4jの利用 5 Neo4jの性能や事例については何度かア ジェンダがあったけど、 アプリからどのように呼べばいいの? →呼び出しに手間がかかるようだとNeo4j 自体は使い方によって速いし便利でも実 装しづらい・・・
  • 6. Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved. Neo4jの利用 6 Neo4jの性能や事例については何度かア ジェンダがあったけど、 アプリからどのように呼べばいいの? →呼び出しに手間がかかるようだとNeo4j は便利でも実装しづらい・・・ オブジェクトグラフマッパー(OGM)なるも のがあります!
  • 7. Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved. OGMとは 7 Object-Graph-Mapper(オブジェクトグラ フマッパー)のこと。 O/Rマッパー( Object-relational mapping )の一つであるRuby(プログラ ミング言語)で利用されるActiveRecord と同様の記載ができる。 O/Rマッパーって?ActiveRecordって?
  • 8. Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved. O/Rマッパーとは 8 O/Rマッパーって?(分かっている方についてはすみません。説明も一部言い方が違うかも) オブジェクトとリレーショナルデータベースのミスマッチをマッピング(対応付け)をすることです。 管理番号 分類 名称 001 哺乳類 シカ 002 爬虫類 ワニ 003 両生類 カエル 生物 哺乳類 シカ 爬虫類 ワニ 両生類 カエル ミスマッチが生じる 例えば「シカ」インスタンスを扱いたい場合、 SQLで呼び出して変数に代入して・・・ データベース オブジェクト指向
  • 9. Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved. O/Rマッパーとは 9 コネクション管理機能 データベースとの接続やコネクションプーリングが管理 できるようになる。 自動マッピング機能 外部ファイルにオブジェクトの属性名とテーブルの列名 に関するマッピング定義を設定することによって自動的 にマッピング処理を行ってくれます。 マッピングファイル、 DTO、DAOの自動生成 機能 O/Rマッピングツールの提供する自動生成ツールによっ てマッピングファイル、DTO(DataTransferObject)、 DAO(DataAccessObject)といったファイルを自動で作成し てくれます。 接続情報の管理機能 データベース接続のためのドライバやデータベースの接 続情報を、O/Rマッピングツール側で管理してくれます。 キャッシュ機能 一度取得した検索結果をメモリ上に保持しておいて、同 じ検索処理が行われた場合は、メモリ上にある検索結 果を返します。これによって、データベースへのアクセス を減らし、パフォーマンスがあがります。 具体的にはこんな機能です・・
  • 10. Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved. O/Rマッパーとは 10 つまり、オブジェクト指向的にデータベースを扱うことができる! 管理番号 分類 名称 001 哺乳類 シカ 002 爬虫類 ワニ 003 両生類 カエル 生物 哺乳類 爬虫類 両生類 橋渡し データベース オブジェクト指向
  • 11. Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved. くどいですが例です。 11 例えば、哺乳類の全てを選びたい場合・・・ SQLでは SELECT * FROM MAMMAL;(Cypher Match n Return n Litmi) とかなるのが、 O/Rマッパー(ActiveRecord)を使うとプログラム上から mammals = Mammal.all(これはActive supportっぽいですが、) 最初の哺乳類は (例?)mammal = Mammal.first シカという名前を持つ最初の哺乳類を探したい場合は deer = Mammal.find_by(name: ‘シカ’) となる。
  • 12. Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved. ORMとは 12 • O/Rマッピングを導入することで、ソースコードからデータベースにアクセスする 処理の部分を切り離すことがでるので、変更に強くなります。 • O/Rマッピングを導入することで、オブジェクトとリレーショナルデータベースとの 構造的な違いを意識することなく開発できます。さらに人が理解しやすいメソッド を用意されている。 • 自動生成機能を利用することで、ソースファイルなどの作成の手間が省けるので 開発効率があがります。 • O/Rマッピングを導入することで、データベースの差(SQL方言の差)を吸収でき ます。
  • 13. Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved. 話をOGMに戻すと 13 Object-Graph-Mapper、つまりNeo4jを代表とす るグラフデータベースを利用しやすくしたもの! では実際につかってみよう! 投稿(post)にコメント(comment)を追加していく 簡単なWebアプリケーションです。
  • 14. Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved. このコマンドだけです。 14 rails new whisper -m http://neo4jrb.io/neo4j/neo4j.rb -O cd whisper rake neo4j:install[community-2.1.4,development] rake neo4j:config[development,7000] rake neo4j:start 追記 config.neo4j.session_type :server_db config.neo4j.session_path = 'http://localhost:7000‘ rails g scaffold post title body rails g scaffold comment body 追記 has_one :out, :post, type: :comments_on has_many :in, :comments, origin: :post あとはviewに少し記載するだけ ではどんなアプリケーションであるか見てみましょう!
  • 15. Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved. サンプルで実装していきましょう! 15 ⚫Webアプリ全体とneo4j rails new whisper -m http://neo4jrb.io/neo4j/neo4j.rb -O cd whisper rake neo4j:install[community-2.1.4,development] rake neo4j:config[development,7000] rake neo4j:start ⚫データベース定義 config/environments/development.rb config.neo4j.session_type :server_db config.neo4j.session_path = 'http://localhost:7000' 何もない状態(rubyやrakeは入っている必要がありますが・・・)から下記のコマンド を実行するだけでNeo4jのWebアプリケーションが生成されます。
  • 16. Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved. サンプルで実装していきましょう! 16 ⚫画面、モデルとビューの作成 rails g scaffold post title body rails g scaffold comment body ここからがモデリングの話 ⚫モデル、まずコメントの定義 app/model/comment.rb has_one :out, :post, type: :comments_on
  • 17. Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved. サンプルで実装していきましょう! 17 ⚫️モデル、投稿のモデリング app/model/post.rb has_many :in, :comments, origin: :post ここで一度rails s –p 3000 http://localhost:3000/posts ⚫画面、コメントを表示するコードを追記。 app/views/comments/_form_html.erb <div class=“field”> <%= f.label :post %><br> <%= f.select :post, options_from_collection_for_select(Post.all, :id :title, @comment.post.try(:id)) %> </div> 3枚目になってしまいました。
  • 18. Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved. サンプルで実装していきましょう! 18 ⚫投稿に各コメントを表示するコードを記載 app/views/posts/show.html.erb <ul> <% @post.comments.each do |comment| %> <li><%= comment.body %></li> <% end %> </ul> ⚫コントローラにpostの情報も渡してあげる app/controllers/comments_controller.rb def comment_params params.require(:comment).permit(:body, :post) end 4枚目
  • 19. Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved. サンプルアプリログ 19 Railsログをみると・・・ CYPHER 40ms MATCH (result_comment:`Comment`) WHERE (result_comment.uuid = {result_comment_uuid}) RETURN result_comment ORDER BY ID(result_comment) LIMIT {limit_1}
  • 20. Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved. コード内部での書き方 20 ⚫新しいノードの作成は @comment = Comment.new(comment_params) @comment = Comment.find(params[:id]) ⚫保存は @comment.save、@comment.update(comment_params) ほぼほぼ、ActiveRecordと同じ。
  • 21. Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved. モデリングのおさらい 21 ⚫投稿モデル class Post include Neo4j::ActiveNode property :title, type: String property :body, type: String has_many :in, :comments, origin: :post end ⚫コメントモデル class Comment include Neo4j::ActiveNode property :body, type: String has_one :out, :post, type: :comments_on end
  • 22. Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved. 投稿のサイトなんてみせられても仕方ない 22 ではどのように実装しているかみてみよう!
  • 23. Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved. オープンソース 23 blog/vendor/bundler/ruby/2.1.0/gems ここにライブラリが保存されています! neo4j-4.1.5 neo4j-core-4.0.7 がneo4j関連で blog/vendor/bundler/ruby/2.1.0/gems/neo4j- 4.1.5/lib/neo4j/active_node
  • 24. Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved. オープンソース 24 例えばactive_nodeのnode_wrapper.rbなんかは・・・ require 'active_support/inflector/inflections' module Neo4j module ActiveNode module HasN class Association include Neo4j::Shared::RelTypeConverters include Neo4j::ActiveNode::Dependent::AssociationMethods attr_reader :type, :name, :relationship, :direction, :dependent def initialize(type, direction, name, options = {}) validate_init_arguments(type, direction, options) @type = type.to_sym @name = name @direction = direction.to_sym @target_class_name_from_name = name.to_s.classify apply_vars_from_options(options) end
  • 25. Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved. オープンソース 25 まあ、今日はこの辺りで・・・
  • 26. Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved. 感想 26 JavaのAPIを使ってneo4jからデータを取ってき てActiveSupportでデータを使いやすくしている。 RDBを扱っているのとほぼ同じ記述でいけそ う! 性能面の検証はまだですが、処理速度はそれほ ど早くない印象。 オープンソースなので開発にご協力してみてくだ さい!
  • 27. Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved. GitHub 27
  • 28. Copyright (C) TECHNOLOGIC ARTS INCORPORATED, All Rights Reserved. ご静聴ありがとうございました! 28 ということで次回機会があり、今回のアジェンダ の反響がよく、発表する機会があればjavaのア プリをご紹介したいです。