Google DriveやDropbox、Gmailといった複数のサービスを利用していると「あのデータはどこのサービスに保存したかな……?」と探す手間がもったいないと考えている人もいるはず。Elasticがリリースした「Workplace Search」を使うと、複数のサービスを一元化して情報を検索することが可能。Elasticのバージョン7.9.0から基本無料で利用できるようになったので、実際にセットアップ&検索までやってみました。

Elastic Workplace Search | Elastic

https://www.elastic.co/jp/workplace-search

Workplace Searchは同じくElasticのサービスである「Enterprise Search」の一要素として提供されています。Enterprise SearchにはDockerイメージが用意されているので、今回はDockerを用いてWorkplace Searchを利用してみることに。Dockerのインストールページを参考にしてDockerの導入を済ませておきます。まずはコンテナ名によるコンテナ間通信の名前解決を行うため、Dockerネットワークを作成しておきます。

docker network create elastic-network


Enterprise Searchはバックエンドに時系列データベースのElasticsearchを利用しているので、Elasticsearchのコンテナを事前に起動しておきます。Workplace Searchを利用するには、オプションに「-e xpack.security.enabled=true」と「-e xpack.security.authc.api_key.enabled=true」を指定しセキュリティ機能を有効にする必要があります。

docker run -it -d -p 9200:9200 -p 9300:9300 --network elastic-network --name elasticsearch \
-e discovery.type=single-node \
-e xpack.security.enabled=true \
-e xpack.security.authc.api_key.enabled=true \
docker.elastic.co/elasticsearch/elasticsearch:7.9.0


コンテナを起動したら、下記コマンドでElasticsearchのデフォルトユーザーのパスワードを変更します。

docker exec -it elasticsearch /usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive


デフォルトユーザーは複数存在しているので、それぞれにパスワードを設定していきます。



続いてWorkplace Searchの設定に必要な暗号鍵を乱数で生成します。実行すると「e2cf0f128f730c3343fc137e0cc06f3677d20e170c06a91146f448e9b97fe0cf」のような文字列が生成されます。

openssl rand -hex 32


環境変数を指定しながら、Enterprise Searchのコンテナを起動。「changeme」の部分は先ほど設定した「elastic」ユーザーのパスワードを入力します。

docker run -p 3002:3002 --name workplace-search --network elastic-network \
-e elasticsearch.host='http://elastic:changeme@elasticsearch:9200' \
-e ent_search.auth.source=standard \
-e elasticsearch.username=elastic \
-e elasticsearch.password=changeme \
-e allow_es_settings_modification=true \
-e secret_management.encryption_keys='[e2cf0f128f730c3343fc137e0cc06f3677d20e170c06a91146f448e9b97fe0cf]' \
docker.elastic.co/enterprise-search/enterprise-search:7.9.0


Elasticsearchへの接続が完了した後、データベースの初期化が始まります。



データベースの初期化が完了した後、画面にEnterprise Searchへのログインに使用するユーザー名とパスワードが表示されるので、メモしておきます。



Enterprise Searchの初期化処理が完了したら、「http://localhost:3002」へアクセス。ウェルカム画面が表示されるので「Continue to Login」をクリック。



ログイン画面が表示されました。



先ほどメモしたユーザー名とパスワードを入力し、「Log In」をクリック。



「Launch Workplace Search」をクリックすると……



Workplace Searchのホーム画面が表示されました。



さっそく検索対象を追加するため「Add sources」をクリック。



検索に対応したサービスの一覧が表示されました。GmailやGoogle Drive、Dropbox、GitHub、Confluence、Jiraなどのサービスと連携可能です。



まずは「Gmail」を検索ソースとして追加してみることに。



「Configure Gmail」をクリック。



GmailでOAuth認証を設定する必要があるとのこと。「Documentation」に従い設定を行っていきます。



まずはGoogle Developer Consoleにアクセス。ログイン画面が表示された場合はログインを済ませます。

API とサービス - API とサービス - Google API Console

https://console.developers.google.com/

ダッシュボードの組織名/プロジェクト名が表示されているボタンをクリック。



「新しいプロジェクト」をクリック。



わかりやすいプロジェクト名を入力して「作成」をクリック。



上部の検索ウィンドウに「gmail」と入力すると表示される「Gmail API」をクリック。



「有効にする」をクリックします。



ページが移動したら「認証情報を作成」をクリック。



「使用するAPI」に「Gmail API」、「APIを呼び出す場所」に「ウェブブラウザ(JavaScript)」、「アクセスするデータの種類」に「ユーザーデータ」を選択し、「必要な認証情報」をクリック。



OAuth同意画面の設定を促されるので「同意画面を設定」をクリック。



同意画面の設定画面に移ります。「User Type」を「内部」に設定して「作成」をクリック。なお、G Suiteアカウントではなく通常のGoogleアカウントの場合は「外部」のみ設定可能です。



詳細なオプションを指定する画面が表示されます。このうち設定する必要があるのは「アプリケーション名」と「スコープ」です。アプリケーション名はわかりやすい名前であれば何でもOK。「スコープを追加」をクリックします。



「../auth/gmail.readonly」にチェックを入れて「追加」をクリック。



ページ下部の「保存」をクリックします。



「認証情報」から「認証情報を作成」をクリック。



プルダウンメニューが表示されるので「OAuth クライアントID」を選択します。



「アプリケーションの種類」を「ウェブアプリケーション」、「名前」はわかりやすい名前を入力。



「URLを追加」をクリックして、Workplace SearchのURLを指定します。



「承認済みのリダイレクト URI」には、Workplace SearchのURLのサブディレクトリ「/ws/org/sources/gmail/create」と「/ws/sources/gmail/create」を加えたURIを指定。



「作成」をクリックすると……



OAuthのクライアントIDとシークレットキーが生成されました。



生成されたIDとキーをWorkplace Searchの画面に入力し、「Save Configuration」をクリック。



認証が成功すると「Gmail Configured」と表示されます。「Configure a new source」をクリック。



「Configured Sources」にGmailが追加されています。



「これでGmailの内容が検索できるはず」と思い、ホーム画面に戻ってみましたが、検索ソースの数はゼロのまま。



正しく設定できているのか確認するため、「Setting」をクリックして……



「Content Source Connectors」をクリック。



各検索ソースの接続状況を確認すると、Gmailはプライベートソースとなっており、かつプライベートソースは「Platinum」ライセンスが必要とのこと。残念ながらGmailの検索は有料となっていました。



気を取り直してGmailと同じ要領でGoogle Driveを検索ソースとして追加すると、こちらは「Connect」ボタンが緑色になり、クリックできる状態。



クリックするとGoogle Driveとの接続を行うボタンが表示されるので「Connect Google Drive」をクリック。



Googleの認証ページに移るので「許可」をクリック。



これでGoogle Driveの内容を検索することができるようになりました。「Details」でGoogle Driveの情報を取得できているかどうか確認します。



ファイル数などが表示されており、きちんと接続できていることが確認できました。



Google DriveとDropboxの横断的な検索を実現するため、Dropboxとの接続方法を参考にし、Dropboxとも接続してみました。



実際に検索を行うには「Go to search application」をクリック。



検索ページのトップには、最近更新されたファイルが一覧で表示されます。



試しに検索ウィンドウに「text」と入力すると……



PDFなどのテキストファイルをGoogle Drive、Dropboxで横断して検索することができました。



左側には検索に対するサービスごとのヒット数、ファイルのタイプや拡張子ごとのヒット数が表示されています。



検索した項目をクリックすると、右側に項目の詳細が表示されます。



下部の「Open on サービス名」をクリックすると、オリジナルのデータを検索ソースのサービス上で確認することができます。



Workplace Searchは基本無料ではあるものの、GmailはPlatinumライセンスを購入しなければ利用できないことが判明。アクセス権限をOAuthで限定しセキュリティを高めている反面、セットアップが少し煩雑ではありますが、複数のサービスを利用している人は便利に利用できそうです。