SlideShare a Scribd company logo
1 of 12
Download to read offline
ActiveStorage::Analyzer Powered by Rabbit 3.0.0
ActiveStorage
::Analyzer
鍋太郎
ActiveStorage::Analyzer Powered by Rabbit 3.0.0
自己紹介
プログラマー✓
Debian JP 事務局✓
小市若者連 委員長 (留任)✓
https://about.me/nabetaro✓
ActiveStorage::Analyzer Powered by Rabbit 3.0.0
Webでファイルをアップ
ロード
Railsでは
ActiveStorage✓
paperclip (depricated)✓
etc...✓
✓
ActiveStorage::Analyzer Powered by Rabbit 3.0.0
ActiveStorage
Rails5.2以降✓
ローカルディスク・S3・
Azure・GCS
✓
オブジェクトにファイル添付✓
2テーブル✓
ActiveStorage::Analyzer Powered by Rabbit 3.0.0
ファイルを添付すると
画像ファイルの場合、画像の縦横
ピクセルを解析
✓
active_storage_blobs の
metadata に
✓
ActiveJobで非同期実行✓
いつのまにか解析するAnalyzer
ActiveStorage::Analyzer Powered by Rabbit 3.0.0
要件
ファイルの全文検索✓
テキストを検索インデックスに✓
Office対応✓
ActiveStorage::Analyzer Powered by Rabbit 3.0.0
方針
テキストファイルはそのまま✓
PDFはPopplerで✓
LibreOfficeでPDF化✓
ActiveStorage::Analyzer Powered by Rabbit 3.0.0
抽出をカスタムAnalyzerで
self.accept?(blob)
trueになるファイル(blob)が対象✓
✓
metadata
metadataに格納するHashを返す✓
✓
ActiveStorage::Analyzer Powered by Rabbit 3.0.0
カスタムAnalyzer登録
Rails.application.config.activ
e_storage.analyzers に追加
✓
Rails.application.config.active_storage.analyzers.append カスタムAnalyzer名
ActiveStorage::Analyzer Powered by Rabbit 3.0.0
実装例
class ExtractTextAnalyzer < ActiveStorage::Analyzer
# 画像以外が対象
def self.accept?(blob)
!blob.image?
end
def metadata
read_file do |file|
{ content_text: extract_text_from_file(file) }
end
end
private
# 添付ファイルを一時ディレクトリに読み出す
def read_file
download_blob_to_tempfile do |file|
yield file
end
end
# snip...
end
Rails.application.config.active_storage.analyzers.append ExtractTextAnalyzer
ActiveStorage::Analyzer Powered by Rabbit 3.0.0
便利メソッド
download_blob_to_tempfile
対象ファイルを取り出しTempfileに✓
ストレージがローカルディスクとは
限らない
✓
✓
ActiveStorage::Analyzer Powered by Rabbit 3.0.0
まとめ
アップロードしたファイルの内
容を解析
✓
標準の解析で足りなければ、カ
スタムAnalyzer
✓
重い処理も非同期実行
でもそのメタデータがすぐに使えな
い
✓
即時はanalyzeメソッド✓
✓

More Related Content

What's hot

JavaScriptから利用するFirebase
JavaScriptから利用するFirebaseJavaScriptから利用するFirebase
JavaScriptから利用するFirebaseTakuji Shimokawa
 
Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月
Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月
Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月VirtualTech Japan Inc.
 
イケてる分析基盤をつくる
イケてる分析基盤をつくるイケてる分析基盤をつくる
イケてる分析基盤をつくるAtsushi Hayakawa
 
Elixir Meetup #1 Loggerの構造と拡張
Elixir Meetup #1 Loggerの構造と拡張Elixir Meetup #1 Loggerの構造と拡張
Elixir Meetup #1 Loggerの構造と拡張Sugawara Genki
 
Fluentd+elasticsearch+kibana(fluentd編)
Fluentd+elasticsearch+kibana(fluentd編)Fluentd+elasticsearch+kibana(fluentd編)
Fluentd+elasticsearch+kibana(fluentd編)Daisuke Kikuchi
 
実践 Reactive Extensions
実践 Reactive Extensions実践 Reactive Extensions
実践 Reactive ExtensionsShin Ise
 
Kibanaでsysstatを可視化する
Kibanaでsysstatを可視化するKibanaでsysstatを可視化する
Kibanaでsysstatを可視化するKensuke Maeda
 
postgresql conference 2018 on-premise to rds
postgresql conference 2018 on-premise to rdspostgresql conference 2018 on-premise to rds
postgresql conference 2018 on-premise to rdsYukiya Hayashi
 
EmbulkのGCS/BigQuery周りのプラグインについて
EmbulkのGCS/BigQuery周りのプラグインについてEmbulkのGCS/BigQuery周りのプラグインについて
EmbulkのGCS/BigQuery周りのプラグインについてSatoshi Akama
 
Lambda in java_20160121
Lambda in java_20160121Lambda in java_20160121
Lambda in java_20160121Teruo Kawasaki
 
AWS Lambdaで作るクローラー/スクレイピング
AWS Lambdaで作るクローラー/スクレイピングAWS Lambdaで作るクローラー/スクレイピング
AWS Lambdaで作るクローラー/スクレイピングTakuro Sasaki
 
Sbtのマルチプロジェクトはいいぞ
SbtのマルチプロジェクトはいいぞSbtのマルチプロジェクトはいいぞ
SbtのマルチプロジェクトはいいぞYoshitaka Fujii
 
Lambdaによるクラウド型言語の実装
Lambdaによるクラウド型言語の実装Lambdaによるクラウド型言語の実装
Lambdaによるクラウド型言語の実装Sugawara Genki
 
Kafka 0.10.0 アップデート、プロダクション100ノードでやってみた #yjdsnight
Kafka 0.10.0 アップデート、プロダクション100ノードでやってみた #yjdsnightKafka 0.10.0 アップデート、プロダクション100ノードでやってみた #yjdsnight
Kafka 0.10.0 アップデート、プロダクション100ノードでやってみた #yjdsnightYahoo!デベロッパーネットワーク
 
TokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoopTokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoopTeruo Kawasaki
 
Osc2012.dbに行ってきました
Osc2012.dbに行ってきましたOsc2012.dbに行ってきました
Osc2012.dbに行ってきましたMasaru Kobashigawa
 
Kafkaを活用するためのストリーム処理の基本
Kafkaを活用するためのストリーム処理の基本Kafkaを活用するためのストリーム処理の基本
Kafkaを活用するためのストリーム処理の基本Sotaro Kimura
 
実践リーダブルコードのアイスブレイク
実践リーダブルコードのアイスブレイク実践リーダブルコードのアイスブレイク
実践リーダブルコードのアイスブレイクKouhei Sutou
 
PostgreSQL on Amazon EC2の可能性
PostgreSQL on Amazon EC2の可能性PostgreSQL on Amazon EC2の可能性
PostgreSQL on Amazon EC2の可能性Serverworks Co.,Ltd.
 

What's hot (20)

JavaScriptから利用するFirebase
JavaScriptから利用するFirebaseJavaScriptから利用するFirebase
JavaScriptから利用するFirebase
 
Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月
Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月
Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月
 
イケてる分析基盤をつくる
イケてる分析基盤をつくるイケてる分析基盤をつくる
イケてる分析基盤をつくる
 
Elixir Meetup #1 Loggerの構造と拡張
Elixir Meetup #1 Loggerの構造と拡張Elixir Meetup #1 Loggerの構造と拡張
Elixir Meetup #1 Loggerの構造と拡張
 
Fluentd+elasticsearch+kibana(fluentd編)
Fluentd+elasticsearch+kibana(fluentd編)Fluentd+elasticsearch+kibana(fluentd編)
Fluentd+elasticsearch+kibana(fluentd編)
 
実践 Reactive Extensions
実践 Reactive Extensions実践 Reactive Extensions
実践 Reactive Extensions
 
Kibanaでsysstatを可視化する
Kibanaでsysstatを可視化するKibanaでsysstatを可視化する
Kibanaでsysstatを可視化する
 
postgresql conference 2018 on-premise to rds
postgresql conference 2018 on-premise to rdspostgresql conference 2018 on-premise to rds
postgresql conference 2018 on-premise to rds
 
EmbulkのGCS/BigQuery周りのプラグインについて
EmbulkのGCS/BigQuery周りのプラグインについてEmbulkのGCS/BigQuery周りのプラグインについて
EmbulkのGCS/BigQuery周りのプラグインについて
 
Lambda in java_20160121
Lambda in java_20160121Lambda in java_20160121
Lambda in java_20160121
 
AWS Lambdaで作るクローラー/スクレイピング
AWS Lambdaで作るクローラー/スクレイピングAWS Lambdaで作るクローラー/スクレイピング
AWS Lambdaで作るクローラー/スクレイピング
 
Sbtのマルチプロジェクトはいいぞ
SbtのマルチプロジェクトはいいぞSbtのマルチプロジェクトはいいぞ
Sbtのマルチプロジェクトはいいぞ
 
Lambdaによるクラウド型言語の実装
Lambdaによるクラウド型言語の実装Lambdaによるクラウド型言語の実装
Lambdaによるクラウド型言語の実装
 
Kafka 0.10.0 アップデート、プロダクション100ノードでやってみた #yjdsnight
Kafka 0.10.0 アップデート、プロダクション100ノードでやってみた #yjdsnightKafka 0.10.0 アップデート、プロダクション100ノードでやってみた #yjdsnight
Kafka 0.10.0 アップデート、プロダクション100ノードでやってみた #yjdsnight
 
TokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoopTokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoop
 
Osc2012.dbに行ってきました
Osc2012.dbに行ってきましたOsc2012.dbに行ってきました
Osc2012.dbに行ってきました
 
Kafkaを活用するためのストリーム処理の基本
Kafkaを活用するためのストリーム処理の基本Kafkaを活用するためのストリーム処理の基本
Kafkaを活用するためのストリーム処理の基本
 
実践リーダブルコードのアイスブレイク
実践リーダブルコードのアイスブレイク実践リーダブルコードのアイスブレイク
実践リーダブルコードのアイスブレイク
 
Nginx
NginxNginx
Nginx
 
PostgreSQL on Amazon EC2の可能性
PostgreSQL on Amazon EC2の可能性PostgreSQL on Amazon EC2の可能性
PostgreSQL on Amazon EC2の可能性
 

Similar to ActiveStorage::Analyzer

[data analytics showcase] B11: ビッグデータを高速に検索・分析する「Elasticsearch」~新プラグイン「Graph」...
[data analytics showcase] B11: ビッグデータを高速に検索・分析する「Elasticsearch」~新プラグイン「Graph」...[data analytics showcase] B11: ビッグデータを高速に検索・分析する「Elasticsearch」~新プラグイン「Graph」...
[data analytics showcase] B11: ビッグデータを高速に検索・分析する「Elasticsearch」~新プラグイン「Graph」...Insight Technology, Inc.
 
Elastic StackでWebサーバのログ解析を始めた件について
Elastic StackでWebサーバのログ解析を始めた件についてElastic StackでWebサーバのログ解析を始めた件について
Elastic StackでWebサーバのログ解析を始めた件についてTakaaki Hoyo
 
サーバレスで分析基盤〜ブートキャンプに参加してみた〜
サーバレスで分析基盤〜ブートキャンプに参加してみた〜サーバレスで分析基盤〜ブートキャンプに参加してみた〜
サーバレスで分析基盤〜ブートキャンプに参加してみた〜Y K
 
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)Uptime Technologies LLC (JP)
 
20110519 okuyama tokyo_linuxstudy
20110519 okuyama tokyo_linuxstudy20110519 okuyama tokyo_linuxstudy
20110519 okuyama tokyo_linuxstudyTakahiro Iwase
 
yidev第七回勉強会:「Assets Library手習い」発表資料
yidev第七回勉強会:「Assets Library手習い」発表資料yidev第七回勉強会:「Assets Library手習い」発表資料
yidev第七回勉強会:「Assets Library手習い」発表資料Hirohito Kato
 
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)Uptime Technologies LLC (JP)
 
スマートニュースの世界展開を支えるログ解析基盤
スマートニュースの世界展開を支えるログ解析基盤スマートニュースの世界展開を支えるログ解析基盤
スマートニュースの世界展開を支えるログ解析基盤Takumi Sakamoto
 
Log analysis by using elasticsearch,kibana and fluentd.
Log analysis by using elasticsearch,kibana and fluentd.Log analysis by using elasticsearch,kibana and fluentd.
Log analysis by using elasticsearch,kibana and fluentd.Tadayasu Yotsu
 
20201102 postgresql unconference_debility
20201102 postgresql unconference_debility20201102 postgresql unconference_debility
20201102 postgresql unconference_debilitySatoshi Hirata
 
Zabbix-jp study #4 20111020 session2
Zabbix-jp study #4 20111020 session2Zabbix-jp study #4 20111020 session2
Zabbix-jp study #4 20111020 session2Hitoshi Yoshida
 
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜Takahiro Inoue
 
Serverspec at July Tech Festa 2013
Serverspec at July Tech Festa 2013Serverspec at July Tech Festa 2013
Serverspec at July Tech Festa 2013Gosuke Miyashita
 
TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_GebNobuhiro Sue
 

Similar to ActiveStorage::Analyzer (20)

HBase on EC2
HBase on EC2HBase on EC2
HBase on EC2
 
100615分散nagios
100615分散nagios100615分散nagios
100615分散nagios
 
[data analytics showcase] B11: ビッグデータを高速に検索・分析する「Elasticsearch」~新プラグイン「Graph」...
[data analytics showcase] B11: ビッグデータを高速に検索・分析する「Elasticsearch」~新プラグイン「Graph」...[data analytics showcase] B11: ビッグデータを高速に検索・分析する「Elasticsearch」~新プラグイン「Graph」...
[data analytics showcase] B11: ビッグデータを高速に検索・分析する「Elasticsearch」~新プラグイン「Graph」...
 
Elastic StackでWebサーバのログ解析を始めた件について
Elastic StackでWebサーバのログ解析を始めた件についてElastic StackでWebサーバのログ解析を始めた件について
Elastic StackでWebサーバのログ解析を始めた件について
 
サーバレスで分析基盤〜ブートキャンプに参加してみた〜
サーバレスで分析基盤〜ブートキャンプに参加してみた〜サーバレスで分析基盤〜ブートキャンプに参加してみた〜
サーバレスで分析基盤〜ブートキャンプに参加してみた〜
 
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
 
Osoljp201210 oi swift
Osoljp201210 oi swiftOsoljp201210 oi swift
Osoljp201210 oi swift
 
Apache Arrow
Apache ArrowApache Arrow
Apache Arrow
 
いまさら聞けないPostgreSQL運用管理
いまさら聞けないPostgreSQL運用管理いまさら聞けないPostgreSQL運用管理
いまさら聞けないPostgreSQL運用管理
 
20110519 okuyama tokyo_linuxstudy
20110519 okuyama tokyo_linuxstudy20110519 okuyama tokyo_linuxstudy
20110519 okuyama tokyo_linuxstudy
 
yidev第七回勉強会:「Assets Library手習い」発表資料
yidev第七回勉強会:「Assets Library手習い」発表資料yidev第七回勉強会:「Assets Library手習い」発表資料
yidev第七回勉強会:「Assets Library手習い」発表資料
 
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
 
スマートニュースの世界展開を支えるログ解析基盤
スマートニュースの世界展開を支えるログ解析基盤スマートニュースの世界展開を支えるログ解析基盤
スマートニュースの世界展開を支えるログ解析基盤
 
Log analysis by using elasticsearch,kibana and fluentd.
Log analysis by using elasticsearch,kibana and fluentd.Log analysis by using elasticsearch,kibana and fluentd.
Log analysis by using elasticsearch,kibana and fluentd.
 
20201102 postgresql unconference_debility
20201102 postgresql unconference_debility20201102 postgresql unconference_debility
20201102 postgresql unconference_debility
 
Zabbix-jp study #4 20111020 session2
Zabbix-jp study #4 20111020 session2Zabbix-jp study #4 20111020 session2
Zabbix-jp study #4 20111020 session2
 
PostgreSQLバックアップの基本
PostgreSQLバックアップの基本PostgreSQLバックアップの基本
PostgreSQLバックアップの基本
 
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
 
Serverspec at July Tech Festa 2013
Serverspec at July Tech Festa 2013Serverspec at July Tech Festa 2013
Serverspec at July Tech Festa 2013
 
TDC20111031_Groovy_Geb
TDC20111031_Groovy_GebTDC20111031_Groovy_Geb
TDC20111031_Groovy_Geb
 

More from Nozomu KURASAWA

プルリク送ったらライブラリ壊したった
 プルリク送ったらライブラリ壊したった プルリク送ったらライブラリ壊したった
プルリク送ったらライブラリ壊したったNozomu KURASAWA
 
LINEのbotを作ってみた
LINEのbotを作ってみたLINEのbotを作ってみた
LINEのbotを作ってみたNozomu KURASAWA
 
電話番号の扱い方の提案(仮)
電話番号の扱い方の提案(仮)電話番号の扱い方の提案(仮)
電話番号の扱い方の提案(仮)Nozomu KURASAWA
 
Windowsを踏台にしてSSH接続
Windowsを踏台にしてSSH接続Windowsを踏台にしてSSH接続
Windowsを踏台にしてSSH接続Nozomu KURASAWA
 
sidで始める開発者生活
sidで始める開発者生活sidで始める開発者生活
sidで始める開発者生活Nozomu KURASAWA
 
Debianのパッチ事情
Debianのパッチ事情Debianのパッチ事情
Debianのパッチ事情Nozomu KURASAWA
 
OpenLayersで地図表示
OpenLayersで地図表示OpenLayersで地図表示
OpenLayersで地図表示Nozomu KURASAWA
 
Debian パッケージングチュートリアル
Debian パッケージングチュートリアルDebian パッケージングチュートリアル
Debian パッケージングチュートリアルNozomu KURASAWA
 
PGP/GPG キーサインパーティ 接触編
PGP/GPG キーサインパーティ 接触編PGP/GPG キーサインパーティ 接触編
PGP/GPG キーサインパーティ 接触編Nozomu KURASAWA
 
aptのマニュアルをpo4a化した話
aptのマニュアルをpo4a化した話aptのマニュアルをpo4a化した話
aptのマニュアルをpo4a化した話Nozomu KURASAWA
 
真・HTML help文字化け対策
真・HTML help文字化け対策真・HTML help文字化け対策
真・HTML help文字化け対策Nozomu KURASAWA
 
Heroku に ChiliProject を入れてみた
Heroku に ChiliProject を入れてみたHeroku に ChiliProject を入れてみた
Heroku に ChiliProject を入れてみたNozomu KURASAWA
 
PO ファイルで翻訳管理
PO ファイルで翻訳管理PO ファイルで翻訳管理
PO ファイルで翻訳管理Nozomu KURASAWA
 

More from Nozomu KURASAWA (16)

プルリク送ったらライブラリ壊したった
 プルリク送ったらライブラリ壊したった プルリク送ったらライブラリ壊したった
プルリク送ったらライブラリ壊したった
 
LINEのbotを作ってみた
LINEのbotを作ってみたLINEのbotを作ってみた
LINEのbotを作ってみた
 
電話番号の扱い方の提案(仮)
電話番号の扱い方の提案(仮)電話番号の扱い方の提案(仮)
電話番号の扱い方の提案(仮)
 
Windowsを踏台にしてSSH接続
Windowsを踏台にしてSSH接続Windowsを踏台にしてSSH接続
Windowsを踏台にしてSSH接続
 
sidで始める開発者生活
sidで始める開発者生活sidで始める開発者生活
sidで始める開発者生活
 
Debianのパッチ事情
Debianのパッチ事情Debianのパッチ事情
Debianのパッチ事情
 
OpenLayersで地図表示
OpenLayersで地図表示OpenLayersで地図表示
OpenLayersで地図表示
 
Debian パッケージングチュートリアル
Debian パッケージングチュートリアルDebian パッケージングチュートリアル
Debian パッケージングチュートリアル
 
PGP/GPG キーサインパーティ 接触編
PGP/GPG キーサインパーティ 接触編PGP/GPG キーサインパーティ 接触編
PGP/GPG キーサインパーティ 接触編
 
aptのマニュアルをpo4a化した話
aptのマニュアルをpo4a化した話aptのマニュアルをpo4a化した話
aptのマニュアルをpo4a化した話
 
OSMを楽しむ2012
OSMを楽しむ2012OSMを楽しむ2012
OSMを楽しむ2012
 
真・HTML help文字化け対策
真・HTML help文字化け対策真・HTML help文字化け対策
真・HTML help文字化け対策
 
おきらく翻訳
おきらく翻訳おきらく翻訳
おきらく翻訳
 
Heroku に ChiliProject を入れてみた
Heroku に ChiliProject を入れてみたHeroku に ChiliProject を入れてみた
Heroku に ChiliProject を入れてみた
 
PO ファイルで翻訳管理
PO ファイルで翻訳管理PO ファイルで翻訳管理
PO ファイルで翻訳管理
 
OpenStreetMapの紹介
OpenStreetMapの紹介OpenStreetMapの紹介
OpenStreetMapの紹介
 

ActiveStorage::Analyzer

  • 1. ActiveStorage::Analyzer Powered by Rabbit 3.0.0 ActiveStorage ::Analyzer 鍋太郎
  • 2. ActiveStorage::Analyzer Powered by Rabbit 3.0.0 自己紹介 プログラマー✓ Debian JP 事務局✓ 小市若者連 委員長 (留任)✓ https://about.me/nabetaro✓
  • 3. ActiveStorage::Analyzer Powered by Rabbit 3.0.0 Webでファイルをアップ ロード Railsでは ActiveStorage✓ paperclip (depricated)✓ etc...✓ ✓
  • 4. ActiveStorage::Analyzer Powered by Rabbit 3.0.0 ActiveStorage Rails5.2以降✓ ローカルディスク・S3・ Azure・GCS ✓ オブジェクトにファイル添付✓ 2テーブル✓
  • 5. ActiveStorage::Analyzer Powered by Rabbit 3.0.0 ファイルを添付すると 画像ファイルの場合、画像の縦横 ピクセルを解析 ✓ active_storage_blobs の metadata に ✓ ActiveJobで非同期実行✓ いつのまにか解析するAnalyzer
  • 6. ActiveStorage::Analyzer Powered by Rabbit 3.0.0 要件 ファイルの全文検索✓ テキストを検索インデックスに✓ Office対応✓
  • 7. ActiveStorage::Analyzer Powered by Rabbit 3.0.0 方針 テキストファイルはそのまま✓ PDFはPopplerで✓ LibreOfficeでPDF化✓
  • 8. ActiveStorage::Analyzer Powered by Rabbit 3.0.0 抽出をカスタムAnalyzerで self.accept?(blob) trueになるファイル(blob)が対象✓ ✓ metadata metadataに格納するHashを返す✓ ✓
  • 9. ActiveStorage::Analyzer Powered by Rabbit 3.0.0 カスタムAnalyzer登録 Rails.application.config.activ e_storage.analyzers に追加 ✓ Rails.application.config.active_storage.analyzers.append カスタムAnalyzer名
  • 10. ActiveStorage::Analyzer Powered by Rabbit 3.0.0 実装例 class ExtractTextAnalyzer < ActiveStorage::Analyzer # 画像以外が対象 def self.accept?(blob) !blob.image? end def metadata read_file do |file| { content_text: extract_text_from_file(file) } end end private # 添付ファイルを一時ディレクトリに読み出す def read_file download_blob_to_tempfile do |file| yield file end end # snip... end Rails.application.config.active_storage.analyzers.append ExtractTextAnalyzer
  • 11. ActiveStorage::Analyzer Powered by Rabbit 3.0.0 便利メソッド download_blob_to_tempfile 対象ファイルを取り出しTempfileに✓ ストレージがローカルディスクとは 限らない ✓ ✓
  • 12. ActiveStorage::Analyzer Powered by Rabbit 3.0.0 まとめ アップロードしたファイルの内 容を解析 ✓ 標準の解析で足りなければ、カ スタムAnalyzer ✓ 重い処理も非同期実行 でもそのメタデータがすぐに使えな い ✓ 即時はanalyzeメソッド✓ ✓