macOS上のRubyonRailsアプリケーションでPostgreSQLを使用する方法
序章
Ruby on Rails Webフレームワークを使用する場合、アプリケーションはデフォルトでSQLiteをデータベースとして使用するように設定されています。 SQLiteは、軽量で移植性があり、ユーザーフレンドリーなリレーショナルデータベースであり、メモリの少ない環境で特に優れたパフォーマンスを発揮し、多くの場合にうまく機能します。 ただし、より信頼性の高いデータ整合性とプログラムによる拡張性を必要とする非常に複雑なアプリケーションの場合、PostgreSQLデータベースがより堅牢で柔軟な選択肢になります。 PostgreSQLを使用するようにRubyonRailsセットアップを構成するには、RubyonRailsを起動して実行するためにいくつかの追加手順を実行する必要があります。
このチュートリアルでは、ローカルmacOSマシン上のPostgreSQLデータベースに接続されたRubyonRails開発環境をセットアップします。 PostgreSQLをインストールして構成し、データベースサーバーとしてPostgreSQLを使用するRailsアプリケーションを作成してセットアップをテストします。
前提条件
このチュートリアルには、次のものが必要です。
-
macOSがインストールされた1台のコンピューターまたは仮想マシンで、そのマシンへの管理アクセスとインターネット接続があります。 このチュートリアルは、 macOS 10.14Mojaveでテストされています。
-
macOSマシンにインストールされたRubyonRails開発環境。 これを設定するには、macOSでrbenvを使用してRubyonRailsをインストールする方法に関するガイドに従ってください。 このチュートリアルでは、Rubyのバージョン2.6.3とRailsの5.2.3を使用します。 最新バージョンについては、RubyおよびRailsの公式サイトをご覧ください。
ステップ1—PostgreSQLのインストール
PostgreSQLをデータベースとして使用してWebアプリケーションを作成するようにRubyonRailsを構成するには、最初にデータベースをマシンにインストールします。 PostgreSQLをmacOSにインストールする方法はたくさんありますが、このチュートリアルではパッケージマネージャーHomebrewを使用します。
PostgreSQLのさまざまなバージョンをインストールするための複数のHomebrewパッケージがあります。 最新バージョンをインストールするには、次のコマンドを実行します。
- brew install postgresql
特定のバージョンのPostgreSQLをダウンロードする場合は、前のコマンドのpostgresql
を目的のパッケージに置き換えてください。 利用可能なパッケージは、HomebrewのWebサイトで見つけることができます。
次に、PostgreSQLコマンドラインツールにアクセスするために、PATH
変数にPostgreSQLバイナリを含め、10
を使用しているバージョン番号に置き換えてください。
- echo 'export PATH="/usr/local/opt/postgresql@10/bin:$PATH"' >> ~/.bash_profile
次に、~/.bash_profile
ファイルに加えた変更を現在のシェルセッションに適用します。
- source ~/.bash_profile
サービスを開始し、ログイン時に開始できるようにするには、次のコマンドを実行します。
- brew services start postgresql@10
インストールが成功したことを確認してください。
- postgres -V
次の出力が得られます。
Outputpostgres (PostgreSQL) 10.9
PostgreSQLがインストールされたら、次のステップは、Railsアプリケーションが後でデータベースを作成するために使用する役割を作成することです。
ステップ2—アプリケーションのデータベースロールを作成する
PostgreSQLでは、rolesを使用して権限と承認を整理できます。 HomebrewでPostgreSQLを起動すると、macOSユーザー名でスーパーユーザーの役割が自動的に作成されます。 これらのスーパーユーザー権限をRailsアプリケーションに使用するデータベースインスタンスから分離するために、このステップでは、アクセスの少ない新しいロールを作成します。
新しい役割を作成するには、次のコマンドを実行し、appname
を役割に付けたい名前に置き換えます。
- createuser -P -d appname
このコマンドでは、createuser
を使用して、appname
という名前のロールを作成しました。 -d
フラグは、新しいデータベースを作成する権限をロールに与えました。
-P
フラグも指定しました。これは、新しい役割のパスワードを入力するように求められることを意味します。 必要なパスワードを入力し、将来のステップで構成ファイルで使用できるように、必ず記録してください。
-P
フラグを使用せず、作成後にロールのパスワードを設定する場合は、次のコマンドを使用してPostgreSQLコンソールに入ります。
- psql postgres
PostgreSQLコンソールのプロンプトとともに、次の出力が表示されます。
Outputpsql (10.9)
Type "help" for help.
postgres=#
PostgreSQLコンソールは、postgres=#
プロンプトで示されます。 PostgreSQLプロンプトで、次のコマンドを入力して、新しいデータベースロールのパスワードを設定し、強調表示された名前を作成した名前に置き換えます。
- \password appname
PostgreSQLはパスワードの入力を求めます。 プロンプトで目的のパスワードを入力し、確認します。
次に、次のコマンドを入力してPostgreSQLコンソールを終了します。
- \q
通常のプロンプトが再び表示されます。
このステップでは、アプリケーションのスーパーユーザー権限なしで新しいPostgreSQLロールを作成しました。 これで、この役割を使用してデータベースを作成する新しいRailsアプリを作成する準備が整いました。
ステップ3—新しいRailsアプリケーションを作成する
PostgreSQL用に構成されたロールを使用して、PostgreSQLをデータベースとして使用するように設定された新しいRailsアプリケーションを作成できます。
まず、ホームディレクトリに移動します。
- cd ~
このディレクトリに新しいRailsアプリケーションを作成し、appname
をアプリと呼びたいものに置き換えます。
- rails new appname -d=postgresql
-d=postgresql
オプションは、PostgreSQLをデータベースとして設定します。
このコマンドを実行すると、appname
という名前の新しいフォルダーがホームディレクトリに表示され、基本的なRailsアプリケーションのすべての要素が含まれます。
次に、アプリケーションのディレクトリに移動します。
- cd appname
新しいRailsアプリケーションを作成し、プロジェクトのルートディレクトリに移動したので、Railsアプリ内からPostgreSQLデータベースを構成および作成できます。
ステップ4—データベースの構成と作成
アプリケーション用にdevelopment
およびtest
データベースを作成する場合、Railsはステップ2で作成したPostgreSQLの役割を使用します。 Railsがこれらのデータベースを確実に作成するために、プロジェクトのデータベース構成ファイルを変更します。 次に、データベースを作成します。
Railsアプリケーションで行う構成変更の1つは、最後の手順で作成したPostgreSQLロールのパスワードを追加することです。 パスワードなどの機密情報を安全に保つために、構成ファイルに直接書き込むのではなく、これを環境変数に保存することをお勧めします。
ログイン時に環境変数にパスワードを保存するには、次のコマンドを実行し、APPNAME
をアプリの名前に置き換え、PostgreSQL_Role_Password
を前の手順で作成したパスワードに置き換えます。
- echo 'export APPNAME_DATABASE_PASSWORD="PostgreSQL_Role_Password"' >> ~/.bash_profile
このコマンドは、export
コマンドを~/.bash_profile
ファイルに書き込み、ログイン時に環境変数が設定されるようにします。
現在のセッションの変数をエクスポートするには、source
コマンドを使用します。
- source ~/.bash_profile
ご使用の環境にパスワードを保存したので、構成ファイルを変更します。
お好みのテキストエディタでアプリケーションのデータベース構成ファイルを開きます。 このチュートリアルでは、nano
を使用します。
- nano config/database.yml
default
セクションで、pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
という行を見つけ、次の強調表示された行を追加して、資格情報と作成した環境変数を入力します。 次のようになります。
...
default: &default
adapter: postgresql
encoding: unicode
# For details on connection pooling, see Rails configuration guide
# http://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: appname
password: <%= ENV['APPNAME_DATABASE_PASSWORD'] %>
development:
<<: *default
database: appname_development
...
これにより、Railsアプリケーションは正しい役割とパスワードでデータベースを実行します。 CTRL+X
、Y
、ENTER
の順に押して、保存して終了します。
Railsでのデータベースの構成の詳細については、Railsのドキュメントを参照してください。
config/database.yml
に変更を加えたので、rails
コマンドを使用してアプリケーションのデータベースを作成します。
- rails db:create
Railsがデータベースを作成すると、次の出力が表示されます。
OutputCreated database 'appname_development'
Created database 'appname_test'
出力が示すように、このコマンドはPostgreSQLサーバーにdevelopment
およびtest
データベースを作成しました。
これで、Railsアプリに接続されたPostgreSQLデータベースができました。 アプリケーションが機能していることを確認するための次のステップは、構成をテストすることです。
ステップ5—構成のテスト
アプリケーションがPostgreSQLデータベースを使用できることをテストするには、Webアプリケーションを実行してブラウザに表示されるようにします。
まず、Rails用の組み込みWebサーバーPumaを使用してアプリケーションを提供します。 このWebサーバーにはRailsが自動的に付属しており、追加のセットアップは必要ありません。 アプリケーションを提供するには、次のコマンドを実行します。
- rails server --binding=127.0.0.1
--binding
は、アプリケーションを指定されたIPにバインドします。 デフォルトでは、このフラグはRailsを0.0.0.0
にバインドしますが、これはRailsがすべてのインターフェイスをリッスンすることを意味するため、127.0.0.1
を使用してlocalhost
を指定する方が安全です。 デフォルトでは、アプリケーションはポート3000
でリッスンします。
Railsアプリが実行されると、コマンドプロンプトが消え、次の出力に置き換えられます。
Output=> Booting Puma
=> Rails 5.2.3 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.6.3-p62), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://127.0.0.1:3000
Use Ctrl-C to stop
アプリケーションが実行されているかどうかをテストするには、サーバーで新しいターミナルウィンドウを開き、curl
コマンドを使用して127.0.0.1:3000
にリクエストを送信します。
- curl http://127.0.0.1:3000
HTMLで多くの出力を受け取り、次のようになります。
Output...
<strong>Rails version:</strong> 5.2.3<br />
<strong>Ruby version:</strong> 2.6.3 (x86_64-darwin18)
</p>
</section>
</div>
</body>
</html>
次のサイトにアクセスして、ローカルWebブラウザでRailsアプリケーションにアクセスすることもできます。
http://127.0.0.1:3000
このURLには、RubyonRailsのウェルカムページがあります。
これは、アプリケーションが適切に構成され、PostgreSQLデータベースに接続されていることを意味します。
結論
このチュートリアルでは、ローカルmacOSマシン上のデータベースとしてPostgreSQLを使用するように構成されたRuby onRailsWebアプリケーションを作成しました。 Rubyプログラミング言語について詳しく知りたい場合は、Rubyシリーズのコーディング方法をご覧ください。
アプリケーション用のデータベースの選択の詳細については、 SQLite、PostgreSQL、およびMySQLの違いとユースケースに関するチュートリアルを確認してください。 データベースの使用方法について詳しく知りたい場合は、 PostgreSQLでのクエリの概要の記事を参照するか、DigitalOceanの管理対象データベース製品を参照してください。