ByebugとRails、Powを使ったリモートデバッグのやり方
Ruby 2.x向けの優れたデバッガー「Byebug」をご存じない方は、ぜひ一度試してみてください。シンプルでありながら多機能で、日々のRuby開発を強力にサポートしてくれるツールです。開発者自身による説明がこちらです。
ByebugはRuby 2向けの、使いやすく機能豊富なデバッガーです。実行制御には新しいTracePoint API、コールスタックのナビゲーションにはDebug Inspector APIを採用しているため、Ruby内部のコアソースに依存しません。C拡張として実装されているため動作が高速で、充実したテストスイートを備えているため信頼性も高いのが特徴です。
基本的な使い方
セットアップはとても簡単です。まずgemをインストールします。コード内の任意の場所でbyebugメソッドを呼び出すと、その位置でプログラムの実行が停止し、デバッグコンソールに切り替わります。お好みでpryと組み合わせて使うよう設定することも可能です。
例えば、次のようにしてデバッガーを呼び出せます。
require 'byebug'
def my_method
a = 1
byebug
end
my_method()
このファイルを実行すると、byebugを記述した箇所でデバッガーが起動します。
デバッガーがトリガーされると、インタラクティブなシェルに切り替わります。
Powを使うときに発生する問題
アプリをコマンドラインから直接実行できるのであれば、ここまでの話で十分です。しかし、ローカル環境でRailsアプリをPowで動かしている場合はどうでしょうか?
Powは他の多くのアプリサーバーと同様、バックグラウンドで動作します。そのため、仮に実行を停止させてデバッガーを起動できたとしても、そのコンソールと対話する手段がないのです。
幸い、Byebugにはリモートデバッグの仕組みが用意されています。
リモートデバッグの概念はシンプルです。byebugメソッドが呼び出されたタイミングで、通常のようにインタラクティブシェルを表示する代わりに、デバッガーが専用のサーバーを立ち上げます。開発者側はコマンドラインクライアントからそのサーバーへ接続し、デバッグ作業を行うという流れになります。
リモートデバッグの実際の動き
まず、コントローラーのアクション内でbyebugメソッドを呼び出します。
class PagesController < ApplicationController
def index
if user_has_never_signed_in? && request.subdomain == "www"
@hero_bg = ab_test("hero_bg", "control", "variable")
else
@hero_bg = "control"
end
byebug
end
end
次に、そのアクションに対してリクエストを送ります。すると、ブラウザー上ではレスポンスが返ってこず、接続がハングアップしたように見えます。
デバッガーがトリガーされるとWebリクエストは応答を返さなくなります
最後に、Byebugクライアント側に画面を切り替えると、指定した箇所で停止したデバッグコンソールが表示されます。
Byebugリモートデバッガーの実際の様子
Byebugでリモートデバッグ環境を構築する手順
まだgemをインストールしていない場合は、先にインストールしておきましょう。
# Gemfile
gem "byebug", group: "development"
次に、PowがRailsアプリを起動したタイミングでByebugサーバーも同時に起動するよう、イニシャライザを追加します。設定が必要なのは基本的にポート番号だけで、以下のコードでは環境変数経由で変更できるようにしています。
イニシャライザを追加したら、設定が確実に読み込まれるようアプリを再起動してください。
# config/initializers/byebug.rb
if Rails.env.development?
Byebug.start_server 'localhost', ENV.fetch("BYEBUG_SERVER_PORT", 1048).to_i
end
最後に、Byebugクライアントを起動し、サーバーの接続先を指定します。クライアントは待機状態となり、デバッグがトリガーされるのを待ち続けます。
別のポート番号を設定した場合は、コマンド内のポート番号も忘れず置き換えてください。
bundle exec byebug -R localhost:1048
これで準備完了です。あとは快適なデバッグライフをお楽しみください。
-
Vue、Vuex、Railsを使用したフルスタックアプリケーションの構築
スケーラビリティを念頭に置いてフルスタックアプリケーションを構築することは、特に、完全なタイプスクリプトをサポートする最新バージョンのVueおよびVuexを使用して構築する場合、威圧的になる可能性があります。この記事では、不健康な家畜への治療の処方を管理するCRUDアプリケーションを探索することで、APIリクエストとデータベースの相互作用を処理するVuex4.0を使用した状態管理からスケーラブルなフルスタックアプリケーションを構築するために知っておく必要のあるすべてを読者に教えます。バックエンドはRailsで構築され、フロントエンドによる統合のために基本的なCRUDAPIを公開します。 ほと
-
Rails5でのAngularの使用
あなたは前にその話を聞いたことがあります。分散型で完全に機能するバックエンドAPIと、通常のツールセットで作成されたフロントエンドで実行されているアプリケーションがすでにあります。 次に、Angularに移動します。または、AngularをRailsプロジェクトと統合する方法を探しているだけかもしれません。これは、この方法を好むためです。私たちはあなたを責めません。 このようなアプローチを使用すると、両方の世界を活用して、たとえばRailsとAngularのどちらの機能を使用してフォーマットするかを決定できます。 構築するもの 心配する必要はありません。このチュートリアルは、この目的のた