7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

sqlcommenterをRuby on Railsのデモアプリケーションで動かしてみる

Posted at

Googleが提供しているオープンソースのツールで、ORMが生成するSQLの調査を容易にしてくれるらしいので使ってみました。
具体的にはログなどに、コメントが含まれるようになり、ORMが生成したSQL文はどのコードで生成されたものかを知ることができるみたいです。

今回Rails APIモードのデモアプリケーションが用意されているので、どのようなコメントが出力されるか動かして確認してみます。
google/sqlcommenter | GitHub

sqlcommenterが対応する言語、フレームワーク、DBは以下

言語

  • Ruby
  • Python
  • JavaScript
  • Node.js
  • Java

フレームワーク

  • Ruby on Rails
  • Flask
  • Django
  • Express
  • Knex.js
  • etc...etc

DB

  • MySQL
  • MariaDB
  • PostgreSQL
  • SQLite
  • Google Cloud SQL

デモRailsアプリケーションで試してみる

google/sqlcommenter | Rails demo

RailsのAPIデモアプリケーションでとりあえずsqlcommenterがどんなものかを体験ができるみたいです。
ただ、sqlcommenter_railsはrubygemsではリリースされていないようなので、上記のREADMEの手順に沿って環境構築すればとりあえずは使うことができます。

APIは以下の2つが用意されています。

  • Get /posts
  • POST /posts

APIを叩くcurl

bash
curl localhost:3000/posts
bash
curl -X POST localhost:3000/posts -d 'title=my-post'

POST /postsを実行

bash
curl -X POST localhost:3000/posts -d 'title=my-post'
INSERT INTO "posts" ("title", "created_at", "updated_at") VALUES (?, ?, ?)
 /*action='create',application='SqlcommenterRailsDemo',controller='posts',db_driver='ActiveRecord::ConnectionAdapters::SQLite3Adapter',
 framework='rails_v6.0.3.5',route='/posts', traceparent='00-e71c784d7151a939ef4e8d886a326456-82ad00a116eaa038-01'*/

初期設定では以下の情報が出力されるようです。

  • action
  • application
  • controller
  • db_driver
  • framework
  • route
  • traceparent

設定を追加することで、出力する情報の変更 / 追加が可能です。

bash
mkdir config/initializers
touch config/initializers/marginalia.rb
vim config/initializers/marginalia.rb

# 追加
Marginalia::Comment.components = [ :action, :application, :controller_with_namespace, :hostname, :job, :line]
~
~
~

Rails serverを再起動して再度curlを実行すると先ほど追加した情報が表示されます

/*action='create',application='SqlcommenterRailsDemo',controller_with_namespace='PostsController',
hostname='xxxx',line='/app/controllers/posts_controller.rb:25:in `create\''*/

image.png

GET /postsを実行

次にpostの一覧を取得してみます。

bash
curl localhost:3000/posts
SELECT "posts".* FROM "posts"
/*action='index',application='SqlcommenterRailsDemo',controller_with_namespace='PostsController',
hostname='xxxx',line='/app/controllers/posts_controller.rb:19:in `index\''*/

先程のPOSTと同じくactionや実際にSQL文が生成されたコードの位置を出力してくれました。

posts_controller.rbは以下のようになっています。

app/controllers/posts_controller.rb
#...
17 class PostsController < ApplicationController
18   def index
19    render json: Post.all
20   end
21
22   def create
23     title = params[:title].to_s.strip
24     head :bad_request if title.empty?
25     render json: Post.create!(title: title)
26   end
27  end

参考

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?