RailwayでPGroongaのテンプレートを公開した児玉です。
この記事では、まずRailwayについて簡単に紹介し、その後PGroongaテンプレートの使い方を説明します。最後に実際の利用例として、Redmine全文検索プラグインを利用したRedmineをRailway上で動かすデモを用意しました。
Railwayとは
Railwayは、アプリケーションのデプロイからデータベース管理、スケーリングまでを一元的に扱えるクラウドプラットフォームです。 GitHubやDocker Imageを利用したデプロイに対応しており、PostgreSQLやMySQLなどのデータベースも簡単にデプロイして利用できます。
特徴的なのは、テンプレート機能です。テンプレートを利用することで、事前に構成されたサービスをボタン一つでデプロイできます。 今回公開したPGroongaのテンプレートもこの仕組みを利用しています。
補足: PGroongaは日本語や中国語などの言語に対応した全文検索をPostgreSQLで実現する拡張機能です。詳しく知りたい方は、こちらをみてください。 (この記事では、PGroongaがインストールされたPostgreSQLのことを「PGroonga」と呼びます。)
それでは、実際にPGroongaテンプレートを使って、Railway上にPGroongaをデプロイしてみましょう。
PGroongaテンプレートの利用
PGroongaをRailway上で手軽に試せるテンプレートを利用します。 このテンプレートを使うと、数クリックでPGroongaをRailway上にデプロイできます。
以下では、実際のデプロイ手順を紹介します。
デプロイ手順
0. Railwayのアカウントを作成する
Railwayにアクセスしてアカウントを作成します。 GitHubアカウントを利用すると、一瞬でアカウントを作成できるのでオススメです。
1. PGroongaテンプレートのデプロイ
アカウントを作成したら、実際にPGroongaのテンプレートを利用してデプロイします。 PGroongaテンプレートにアクセスします。 画面右上のDeploy Nowをクリックしてください。テンプレートの設定画面に移ります。

2. テンプレートの設定
テンプレートの設定画面では、利用するDocker Imageやマウントディレクトリなどを設定できます。 今回は、すでに設定してあるので無視で大丈夫です。
Configureをクリックするとテンプレートの各種設定ができます。
次のPostgreSQLのユーザー名、パスワード、データベースの名前だけは、必ずご自身の値を設定しておきましょう。 とくにデフォルトのパスワードは、ランダムに生成されるようにしていますが、ご自身で設定しておくのを強くオススメします。

Environment variablesにて、次の項目をご自身の値で設定します。
POSTGRES_USER: PostgreSQLのユーザー名POSTGRES_PASSWORD: PostgreSQLのパスワードPOSTGRES_DB: 作成するデータベースの名前

Save Configをクリックして設定を反映します。
3. テンプレートのデプロイ
DeployをクリックするとPGroongaをデプロイします。 ここまででデプロイ完了となります。すごく簡単でしたよね! 早速、デプロイしたPGroongaを実際に触ってみましょう。

4. ローカルから接続する事前準備
デプロイ後のPGroongaは、外部ネットワークに公開されていないため、ローカルからはアクセスできません。 今回は手軽に試せるように、TCP Proxy機能を利用して、 PGroongaを外部ネットワークに一時的に公開して接続できるようにします。 (実際に利用する場合は、セキュリティの観点からオススメしないので、別の方法でアクセスするようにしてください。)
デプロイしたPGroongaサービスの設定画面に移動します。 Settingsのタブをクリックします。次に、Public Networkingの項目で、TCP Proxyのボタンをクリックします。 今回のテンプレートのPGroongaは、5432ポートで動いているので、5432ポートを設定します。 設定完了後は、再びデプロイを行い設定を反映します。

ここまでで、ローカルから接続する準備が完了です!
5. ローカルから接続して試す
ローカルから接続する準備が完了したので、デプロイしたPGroongaに接続して、実際に試してみましょう。
RailwayのダッシュボードでPGroongaサービスの「Variables」タブを開くと、DATABASE_URLが表示されています。
この値を使って次のコマンドでローカルから接続できます。
$ psql "${DATABASE_URL}"

接続できたら、次のようにPGroongaを有効化して全文検索を試してみましょう。
-- PGroonga拡張を有効化
CREATE EXTENSION pgroonga;
-- 検索対象のテーブルを作成
CREATE TABLE memos (
id SERIAL PRIMARY KEY,
content TEXT
);
-- PGroongaインデックスを作成
CREATE INDEX pgroonga_content_index ON memos USING pgroonga (content);
-- データを挿入
INSERT INTO memos (content) VALUES ('PostgreSQLで高速全文検索');
INSERT INTO memos (content) VALUES ('PGroongaは日本語検索に強い');
INSERT INTO memos (content) VALUES ('Railwayで簡単にデプロイできる');
-- 全文検索を実行
SELECT * FROM memos WHERE content &@~ '検索';
-- id | content
-- ----+----------------------------
-- 1 | PostgreSQLで高速全文検索
-- 2 | PGroongaは日本語検索に強い
-- (2 rows)
さくっと無事に検索できたのではないでしょうか!
6. 最後にデプロイしたサービスのお掃除
Railwayでは、アカウント作成時に5ドル分の無料枠を利用できますが、デプロイしたものを放置しているとその枠を食いつぶしてしまうかもしれません。 なので、今回デプロイした内容はお掃除しておくことで、他の用途に無料枠を使えるようにもしておきましょう。
画面右上のSettingsをクリックして、Project Settingsを開きます。 Dangerタブをクリックして、Delete Projectができる画面に移ります。 そこで、Delete Projectボタンを押して削除しておきましょう!

これで、Railwayへのデプロイ紹介はおしまいです!
少し発展的な内容として、実際にPGroongaのテンプレートを利用してアプリケーションをデプロイする例も実は準備しています。 もしよければ次のセクションの内容を試してみてください。
Redmine全文検索のデモ
PGroongaの実践的な活用例として、Redmine全文検索プラグインを搭載したRedmineをRailway上で動かすデモも用意しました。
このデモでは、Redmine 6.1に全文検索プラグインが統合された状態でデプロイできます。 先ほどのPGroongaテンプレートでデプロイしたPostgreSQLと組み合わせることで、Redmineでの高速全文検索を体験できます。
詳しいセットアップ手順はリポジトリのREADMEに記載していますが、大まかな流れは次のとおりです。
- PGroongaテンプレートでデータベースをデプロイ
- Redmineのリポジトリをデプロイ
- 環境変数でデータベース接続情報を設定
- 検索インデックスを構築
Redmineの検索が遅くて困っている方は、ぜひ試してみてください。全文検索プラグインの詳細については、以前書いたハンズオン記事も参考になるかと思います。
まとめ
今回は、RailwayでPGroongaを簡単にデプロイできるテンプレートを公開したことを紹介しました。 PGroongaをさくっと試してみたい方や、Railwayをさわってみたい方は、ぜひこのテンプレートを活用してみてください。 また、PGroongaやRedmine全文検索についてのサポートや導入支援が必要な方は、お気軽にお問い合わせください。