Fly.ioとRails 8のデプロイ方法を初心者向けに丁寧解説
はじめに
皆さんは、Ruby on Rails 8を使ってウェブアプリケーションを開発し、本番環境に公開してみたいと考えたことはないでしょうか。
昨今は多様なホスティングサービスが登場しており、その中でも Fly.io はシンプルな操作でアプリケーションをグローバルに展開できるとして注目を集めています。
一方で、初めてのデプロイは「どんな手順を踏めばよいか」「そもそもクラウド上で動かす際の注意点は何か」といった疑問が多いものです。
本記事では 初心者の方 を主な対象として、Fly.ioを使ったRails 8アプリケーションのデプロイ方法を丁寧に紹介します。
サインアップからアプリを実際に動かすところまで一連の流れをわかりやすく解説しますので、初めての方でもぜひ安心して読み進めてみてください。
この記事を読むとわかること
Fly.ioの概要
Railsアプリを動かすホスティングとしての特長やメリットを学ぶ
Rails 8アプリのデプロイ手順
アカウント登録、コマンドラインツール(flyctl)の導入からアプリの実行確認までの流れ
実務での利用例
データベース連携やスケール、ログ管理などのポイント
初心者がつまずきやすいトラブルの対処法
デプロイ時によく起こるエラー例と、その解決方法
セキュリティや運用管理の注意点
Secretsの設定や環境変数の扱い方など、実運用で不可欠なポイント
Fly.ioとは何か
Fly.ioの特徴
Fly.ioは、コンテナ技術をベースとしたアプリケーションプラットフォームです。
無料枠から利用を始めることもでき、シンプルなコマンドライン操作でアプリをグローバルにデプロイできます。
複数リージョンへの展開も比較的簡単なので、世界中のユーザーに対して快適にアクセスしてもらえるよう構成しやすい点が大きな魅力です。
一般的にRailsアプリをどこかにホスティングする場合、AWSやGCPなどのクラウドサービスを利用したり、HerokuのようなPaaSを利用したりといった手段があります。
しかしFly.ioは「Dockerfile」を活用する仕組みや、高速なデプロイ体験を重視しているため、軽量かつスムーズにRails 8アプリを公開しやすい環境といえます。
なぜRails 8と相性がいいのか
Railsは機能が一体化していて、Webアプリケーションを素早く開発できるフレームワークとして知られています。
Fly.ioではプロジェクト直下にある「Dockerfile」を基にアプリケーションをコンテナ化し、コンテナ単位で動かす方法をとります。
Rails 8はアセットパイプラインやプリコンパイルを標準で備えており、Fly.ioが提供するシンプルな設定とも組み合わせやすいと考えられます。
Docker対応が比較的容易なので、初めてでもトラブルを抑えながら本番環境を整備できるでしょう。
学習コストが低め
初心者の場合、新しいホスティングサービスを使う際には敷居が高いと感じることが多いです。
Fly.ioはコマンドラインツールの「flyctl」さえインストールすれば、あとは「fly launch」や「fly deploy」など、比較的わかりやすいコマンド操作だけで構成を進められます。
これにより、複雑な設定ファイル をあまり意識せずにデプロイ作業をスタートできるのがメリットです。
Rails 8アプリを作成する方法の概要
Railsプロジェクトの基本構造
初心者の皆さんは、まずRailsのプロジェクト構造を軽くおさえておくとデプロイの手順で迷いにくくなります。
Rails 8の基本プロジェクトを作ると、以下のようなディレクトリやファイルが生成されることが多いです。
- appディレクトリ: コントローラやモデル、ビューなどの主要ロジックが入る
- configディレクトリ: ルーティングやデータベース設定、アプリ全体の設定ファイルが入る
- Dockerfile(Fly.io利用時): Fly.ioのデプロイに必要なコンテナ設定が入る
- Gemfile: RubyGemsでインストールするライブラリの管理ファイル
- Gemfile.lock: ライブラリ依存関係が記録されたファイル
ここではすでにRails 8がインストール済みとして進めますが、未インストールの場合は事前に環境構築を行ってから読み進めるとよいでしょう。
サンプルアプリの例
デプロイの練習用に、最初は小さなアプリケーションを用意するとスムーズです。
たとえば「ブログ記事を一覧表示する簡易アプリ」や「メモ帳アプリ」など、軽量なものが良いでしょう。
新規アプリを作成する場合は、以下のようなコマンドを実行します。
rails new my_app
cd my_app
プロジェクトが生成されたら、ローカルで一度 rails server
を使って動作確認をしておくと安心です。
「このページが表示されれば成功」というものをシンプルに用意し、余計な設定が少ない状態で進めるのがポイントです。
Fly.ioのアカウント登録とflyctlのインストール
アカウント登録
最初に、Fly.ioの公式サイトでアカウントを作成します。
SNSアカウント連携やメールアドレスでの登録が可能なので、自分が使いやすい方法を選びましょう。
登録後は、ダッシュボードにアクセスできるようになります。
ここではまだ何も設定していない状態ですが、「新しいアプリケーションを作成する」 といったメニューが見えるはずです。
とはいえ、基本的にはコマンドラインツールのflyctlから作業する場面が多いので、ダッシュボードは軽くチェックしておくだけでもOKです。
flyctlのインストール
Fly.ioを操作するコマンドラインツールである flyctl をインストールします。
一般的な方法としては以下のような手順が想定されます。
macOSの場合: Homebrewを使う
brew install flyctl
Windowsの場合:
公式ドキュメントからインストーラをダウンロード
Linuxの場合:
curlコマンドなどを利用してバイナリを取得
インストールが完了したら、以下のコマンドでバージョンやヘルプを確認してみてください。
flyctl --version
flyctl --help
バージョン情報が正しく表示されれば準備完了です。
Fly.ioへログイン
flyctlを使って自身のアカウントにログインします。
ログイン時にはウェブブラウザが開くので、登録済みアカウントの情報を用いて認証することになります。
flyctl auth login
認証に成功すると、今後flyctlコマンドを通してアプリケーションを操作できるようになります。
Fly.ioにRails 8アプリをデプロイする手順
ここからが本番の手順です。
ローカル環境で動くRailsアプリを用意できたら、flyctlを使って実際にクラウド上へ公開してみましょう。
初期設定: fly launch
プロジェクトのフォルダに移動し、以下のコマンドを実行します。
flyctl launch
このコマンドを実行すると、いくつかの質問が表示されることがあります。
たとえば「アプリ名をどうするか」「リージョンはどこにするか」などです。
初心者の場合は、最初は自動生成されるアプリ名やデフォルトのリージョンを選んでもかまいません。
リージョン選択は、主にユーザーが多い地域を選ぶか、開発者の住む地域に近いリージョンを選ぶとアクセス速度が速くなる傾向があります。
対話的な質問に答え終わると、自動的に Dockerfile
や fly.toml
が生成されます。
これらはFly.io用の設定ファイルです。
Dockerfileについて
Fly.ioでコンテナをビルドするために必要な設定が書かれています。
Rails 8のプロジェクトの場合、assets:precompile
をビルド時に実行するステップが記述されることが多いです。
Dockerfile は、アプリの動作に必要なRubyやNode.jsのバージョンを設定しているため、自分の開発環境との互換性を確かめる上で重要です。
もしバージョンが食い違う場合は、Dockerfileを修正するか、bin/rails generate dockerfile
コマンドで再生成するとスムーズでしょう。
fly.tomlについて
Fly.ioのアプリ設定をまとめたファイルです。
- アプリ名
- ビルド時の設定
- ポート番号
- 環境変数
などが定義されています。
Railsプロジェクトの場合、通常はポートが 8080
になっていることが多いです。
特に変更の必要がなければ、そのままでも問題ありません。
データベースの設定
Railsアプリでは、PostgreSQLやMySQLなどのデータベースを利用することが一般的です。
Fly.ioでは「fly launch」時に、PostgreSQLをセットアップするかどうかを尋ねる場合があります。
もし「デフォルトのプランでPostgreSQLを作成する」などの選択肢が出たら、必要に応じて「Yes」を選んでみてください。
そうすると、Fly.ioのManaged Postgresサービスがプロビジョニングされ、Railsアプリと自動的に接続設定が行われます。
これによりデータベースURLなどの環境変数がアプリに付与され、config/database.yml
内で参照できるようになっています。
既存のデータベースを使う場合
すでにどこか別の場所にあるデータベースとつなぎたい場合は、DATABASE_URL
を自分でFly.ioに設定すればOKです。
例えば以下のようなコマンドで環境変数を設定することができます。
flyctl secrets set DATABASE_URL=postgres://username:password@hostname:port/dbname
この設定をすると、アプリの再起動後に ENV["DATABASE_URL"]
としてRails側で参照できるようになります。
どちらの場合も、Rails側は通常 config/database.yml
で url: <%= ENV["DATABASE_URL"] %>
のように書いておけば問題ありません。
デプロイ実行: fly deploy
いよいよ本番環境へアプリを反映する段階です。
以下のコマンドでデプロイを開始します。
flyctl deploy
このコマンドによって、以下のような処理が順番に実行されます。
- ソースコードのアップロード: 現在のRailsプロジェクトが圧縮されてFly.ioへ送信される
- Dockerイメージのビルド: 自動生成されたDockerfileを使ってコンテナイメージをビルド
- アプリのデプロイ: ビルド済みイメージがFly.ioのサーバー上に配置される
- 動作確認: Fly.io側でコンテナが起動し、正常に応答できるかチェック
問題なく動作が確認されれば、デプロイ完了です。
コンソール上で「Deployment succeeded」と表示されれば成功です。
アプリが動いているか確認
デプロイが完了したら、アプリのURLを確かめてみましょう。
URLは fly launch
実行時に決めた「アプリ名」で、https://[アプリ名].fly.dev
の形式になります。
ブラウザでアクセスし、Rails 8のトップページや独自に作成したトップ画面が表示されればOKです。
実務での活用シーン
ここからは、実際に業務や趣味のプロジェクトでFly.ioを活用する際におさえておきたいポイントを紹介します。
初心者の方でも「これを知っておくと後々困らない」という視点でまとめます。
マルチリージョン展開
Fly.ioではマルチリージョン対応が比較的簡単です。
たとえば以下のコマンドで、別リージョンにもアプリのインスタンスを増やすことができます。
flyctl regions add syd
これにより、シドニー地域への配信も可能になり、ユーザーの地理的な場所に合わせた高速レスポンスが期待できます。
実務で海外からのアクセスが多い場合などに活用できるでしょう。
スケールアウト・スケールアップ
利用者が増えた場合、アプリを拡張(スケーリング)する必要があります。
Fly.ioでは、インスタンス数の調整やメモリ割り当ての変更を簡単に行えます。
flyctl scale count 2
flyctl scale memory 2048
上記のようにコマンド一発でインスタンスの数やメモリ容量を変更できるのは、運用面で便利です。
アクセス集中時に即座に対処しやすくなるため、実務でも重宝します。
Secretsの管理
Railsアプリでよく扱うAPIキーやDBパスワードなどの機密情報は、環境変数として設定することが多いです。
Fly.ioでは以下のコマンドで簡単に管理できます。
flyctl secrets set API_KEY=xxxxxx
flyctl secrets list
flyctl secrets unset API_KEY
コンテナ内部では ENV["API_KEY"]
で取得可能になります。
これにより、ソースコードに直接キーを書かずに済むため、安全性が高まります。
よくあるトラブルシューティング
デプロイ時のエラー
一番多いのはデプロイ途中のビルドで失敗するパターンです。
Gemのバージョン不一致
開発環境で使っているRubyやBundlerのバージョンがDockerfileの指定と合っていない
Node.jsのバージョン不一致
RailsのアセットパイプラインはNode.jsを利用するため、Docker内のバージョンが古いとエラーになる可能性あり
環境変数不足
SECRET_KEY_BASE
などが設定されていない場合にエラーが発生する
こうしたエラーが出た場合は、Dockerfile
や Gemfile.lock
をチェックし、flyctlで指定しているバージョンと整合性が取れているかを確認しましょう。
また、エラーメッセージに「SECRET_KEY_BASE
がない」といった内容があれば、flyctl secrets set SECRET_KEY_BASE=xxxx
のようにして解決するケースがあります。
Railsコンソールでの確認
本番環境で直接Railsコンソールを開きたい場合もあるでしょう。
flyctl ssh console -C "/rails/bin/rails console"
このようにすることで、Fly.io上で動いているRailsアプリのコンソールにアクセスできます。
例えば、データベースに保存されている値を確認したり、ちょっとした修正を加えたりする際に便利です。
ログの確認
デプロイ直後にアプリが動かない場合、ログを見ることがトラブル解決の近道です。
flyctl logs
このコマンドでリアルタイムにログを追いかけながら、どのタイミングでエラーが発生しているかを確かめましょう。
Rails特有のスタックトレースが表示されるので、必要に応じてスクロールしながらエラーの先頭を読むことがポイントです。
データベースとActiveStorageの活用
PostgreSQLの利用
先述の通り、fly launch
コマンドでPostgreSQLを一緒にセットアップすると、初期構築がスムーズになります。
Fly.ioのPostgresは単一ノードからクラスター構成まで選べるプランがあります。
- 開発用: シンプルな構成で低コスト
- 本番用: 複数ノードでフェイルオーバー対応
実務で堅牢さを求める場合は、複数ノード構成で冗長化しておくと安心です。
ActiveStorage
Railsでファイルアップロード機能を実装する場合、ActiveStorage を使う方も多いでしょう。
ActiveStorageは、画像やPDFなどをクラウドストレージに保存する仕組みで、設定次第でS3互換サービスやGCSなどにも対応できます。
Fly.ioで使う場合は、外部ストレージサービスを指定する か、ファイルをDBに格納 する方法が一般的です。
ファイルをローカルディスクに保存するとコンテナ終了時に消えてしまう可能性があるので、実運用では注意してください。
セキュリティと負荷対策のポイント
SSL/TLS対応
Fly.ioのデフォルトドメイン(例: xxx.fly.dev
)には、自動でSSL証明書が設定されることが多いです。
独自ドメインを使いたい場合でも、Fly.ioが証明書を発行し、HTTPSアクセスをサポートします。
これにより、機密データの通信が暗号化されるため、追加のSSL設定を自力で行わなくても安全な通信が確保されます。
CORS設定
APIやフロントエンドとの連携がある場合、 Cross-Origin Resource Sharing (CORS) の設定が必要になることがあります。
Railsの場合、rack-cors
のようなミドルウェアを導入し、特定のドメインのみアクセスを許可するなどの設定を行えば、Fly.io上でも問題なく動作します。
キャッシュ戦略
アクセスが集中すると、Railsアプリに負荷がかかりすぎる場合もあります。
Railsキャッシュ
一部ページをキャッシュし、DBアクセスを減らす
Redisとの連携
セッションやAction CableのデータをRedisに保存し、高速化やスケーラビリティを向上
CDN利用
Fly.ioの前段にCDNを配置して、静的ファイルをキャッシュ
これらを組み合わせることで、応答速度を安定化させることができます。
本番運用時のデプロイフロー
ブランチ戦略
チーム開発や本番運用では、Gitのブランチを分けて作業することが多いです。
たとえば mainブランチ を本番用にして、developブランチ で新機能開発を進める形です。
テストが完了したらmainブランチにマージし、本番環境へのデプロイを実行するといった流れにすると、リスク管理しやすくなります。
CI/CDと連携
Fly.ioを使ったRailsアプリのデプロイは、CI/CDパイプラインを構築すれば自動化できます。
GitHub Actions
リポジトリへのpushをトリガーに、flyctl deploy
を自動実行
GitLab CI や CircleCI
同様にdockerのビルドやテストを行った後、flyctlで本番へ反映
これらを活用すれば、開発からリリースまでを効率的に進められるでしょう。
Fly.ioと他のPaaSとの違い
Dockerfileベースの柔軟性
他のPaaSでRailsを動かす場合、プラットフォーム独自の設定に合わせる必要があることがあります。
Fly.ioはDockerfileを直接扱うので、コンテナのビルドや依存パッケージを細かくコントロールできるのが強みです。
グローバル配置の簡易さ
複数地域へのデプロイを比較的容易に設定できる点は、Fly.io特有の大きなアドバンテージと言えます。
グローバルユーザー向けのアプリでは、この機能により応答速度を向上させやすいです。
無料枠やコスト構造
一部のPaaSと同様に無料枠がありますが、詳細は公式ドキュメントを確認するとよいでしょう。
たとえば、コンテナごとのメモリ使用量やCPU時間などで料金が変動します。
Railsのメモリ消費量を踏まえたプラン選択が重要です。
実際の開発で気をつけるポイント
コンテナのライフサイクル
Fly.ioはコンテナを停止・再起動する場合があり、ローカルディスクに保存したデータは消えてしまうことがあります。
セッションやアップロードファイルを保持したい場合は、専用のボリューム を作成するか、外部ストレージ を使いましょう。
ミドルウェアのインストール
アセットパイプラインのビルドにはNode.jsなどが必要です。
Dockerfileで Node.js をインストールしないと、アセットプリコンパイルの段階でエラーが出ることがあります。
Rails 8のDockerfileでは、デフォルトでNode.jsやYarnが含まれていることが多いですが、バージョンの整合性に注意してください。
静的ファイルの扱い
CSSやJavaScript、画像などをRailsのアセットパイプラインで事前コンパイルする場合、コンテナ内部に格納されます。
CDNを併用すると、こうした静的ファイルをキャッシュして世界各地で高速配信できます。
本番運用では静的ファイルのアクセスを効率化することが重要です。
まとめ
ここまで、Fly.ioを使ってRails 8アプリを初心者がデプロイする方法 をかなり細かく紹介してきました。
- Fly.ioのアカウントを作成し、
flyctl
をインストール fly launch
コマンドでアプリの初期設定とDockerfileの生成- データベース(PostgreSQL)をセットアップして接続
fly deploy
で本番環境へのデプロイ- ログ確認やRailsコンソール接続などのトラブルシュート手順
- 実務でのマルチリージョン対応、スケール、キャッシュ戦略
これらを押さえておけば、初めてのデプロイで大きく迷うことは減るはずです。
Fly.ioはコンテナ技術を活用しながら、比較的シンプルな操作でグローバルにアプリを配置できるサービスです。
Rails 8のプロジェクトにおいては、Dockerfileによる柔軟なビルド・デプロイが可能で、初心者でも最小限の設定 で立ち上げられるのが魅力です。
今後は、本番運用での安定稼働やバージョンアップを見据えて、ログ監視やCI/CDパイプラインの整備など、運用面の工夫を続けていくとよいでしょう。
皆さんのRails 8アプリがFly.ioで快適に動作することを願っています。
もしエラーに遭遇しても、本記事で紹介したトラブルシューティングの手順やコマンドを活用すれば、問題を素早く発見して対処できる可能性が高いはずです。
Fly.ioとRails 8の組み合わせで、新しいアイデアをどんどん本番環境に反映してみてくださいね。