アトトック代表の開発ブログ

プログラミングや会社のこと、写真、自転車のことなど書いてます。

Visual Studio Codeでruby-debug-ideを使ってデバッグ

会社では開発メンバーそれぞれが好きなエディタを使ってRailsアプリ開発を行なっています。
以前はAtomを使っていましたが、Atomプラグインを入れすぎたからか重くなったので ここ1年くらいはVisual Studio Codeを使いデバッグはpryです。

Visual Studio Codeを使っていると右側にDebuggingアイコンが表示されています。
今まであまり気にしていなかったのですが
これ、どうやって使うんだと思い使ってみました。

デバッガーをインストール

ruby-debug-ideとdebaseをインストールします。

必要なGemをGemfileに追加

ruby-debug-ideとdebaseをGemfileに追加します。

  gem "ruby-debug-ide"
  gem "debase"

bundle install

$ bundle install --path vendor/bundle

ruby-debug-ideをインストール

$ gem install ruby-debug-ide

アプリを実行してみる

構成の追加

Visual Studio codeの左側のDebuggingアイコンを選択するとデバッグビューが表示されます。 デバッグビューには変数、ウォッチ式、コールスタック、ブレークポイントがあり、上部のプルダウンメニューに「構成がありません」表示されています。

f:id:kurusaki:20180720035210p:plain

このプルダウンメニューから「構成の追加...」を選択すると環境(言語)が表示されるのでRubyを選択します。

f:id:kurusaki:20180720035233p:plain

Rails serverを選択

Rubyを選択すると、.vscode/launch.jsonが作成されデバッグビュー上部のプルダウンメニューに下記の項目が表示されます。

  • Debug Local File
  • Listen for rdebug-ide
  • Rails server
  • RSpec - all
  • RSpec - active spec file only
  • Cucumber

Railsのアプリをデバッグしたいので「Rails server」を選択します。

f:id:kurusaki:20180720035330p:plain

ブレークポイントの設定

ブレークポイントを設定したいソースを開きブレークポイントを設定したい行番号の左側をクリックすると、ブレークポイントが設定されデバッグビューのブレークポイントに表示されます。

f:id:kurusaki:20180720035350p:plain

実行

アプリを起動

デバッグビューの上部にある▶︎の実行ボタンをクリックするとアプリケーションが起動し、デバッグコンソールにログが出力されます。

f:id:kurusaki:20180720035414p:plain

ブレークポイントを設定したページを開く

ブレークポイントを設定したページを開くとブレークポイントを設定したところで停止し、デバッグビューに変数の状態が表示されます。

変数を右クリックするとメニューが表示されます。

f:id:kurusaki:20180720035438p:plain

デバッグ:ウォッチに追加」を選択すると変数がウォッチ式に追加され状態を確認できます。

f:id:kurusaki:20180720035501p:plain

続行、ステップオーバー、ステップイン、ステップアウト、再起動、停止ボタンでデバッグを続けます。

f:id:kurusaki:20180720035519p:plain

デバッグコンソールの下の入力エリアに変数名を入力しエンターキーを押すと、デナッグコンソールに変数の状態を表示できます。

f:id:kurusaki:20180720035534p:plain





久々にIDEのデバッガを使ってみました。

今後はpryよりpryとruby-debug-ideを使うことが多くなりそうです。




RailsでLIKE句のキーワードをサニタイズする

RailsでLIKE句のキーワードをサニタイズする場合、sanitize_sql_likeヘルパーを使います。

下記のようにモデルにスコープを定義しLIKE句で検索してみます。

class Setting < ApplicationRecord
  scope :search, ->(keyword) {
    where('setting_key like ?', "%#{sanitize_sql_like(keyword)}%")
  }
end

このメソッドをrails cで実行してみます。

[2] pry(main)> Setting.search("100%abc")
  Setting Load (0.7ms)  SELECT `settings`.* FROM `settings` WHERE (setting_key like '%100\\%abc%')

%がエスケープされます。

[6] pry(main)> Setting.search("100_abc")
  Setting Load (6.0ms)  SELECT `settings`.* FROM `settings` WHERE (setting_key like '%100\\_abc%')

_がエスケープされています。

[9] pry(main)> Setting.search("100\\abc")
  Setting Load (0.6ms)  SELECT `settings`.* FROM `settings` WHERE (setting_key like '%100\\\\abc%')

\がエスケープされています。

実行環境

Railsのモデルのhas_manyに外部キーを指定する

Railsで開発しているとRailsの規約に乗っていればサクサクと開発できることが多いのですが、ときどきレールから外れないとしょうがない場合があります。
例えば別のシステムで開発したテーブルを利用する場合に、参照先のテーブルのIDがRailsの規約と合っていない場合があります。
fugasというテーブルにhogesテーブルのidを保持する場合、Railsの規約ではhoge_idとなりますが、規約から外れてhogehoge_idになっていた場合など一手間必要です。
Hogeモデルにhas_manyでfugasを指定したい場合は、has_manyにforeign_keyで外部キーのhogehoge_idを指定します。


こんな感じ

class Hoge < ApplicationRecord
  has_many :fugas, foreign_key: 'hogehoge_id', class_name: 'Fuga', dependent: :destroy
end

Let’s EncryptでSSL証明書の更新作業から解放されたい

Let’s Encryptは2016年4月に正式に開始された認証局で、無料で利用できるSSL証明書を提供しています。
Let’s Encryptコマンドラインcertbotを使用するとSSL証明書の取得や更新が自動化できるようになります。


SSL証明書のインストールって簡単だけどなんか煩わしくて嫌な作業だったりします。

そういう面倒な作業からは解放されたい!
いつもそう思いながら作業してます。

最近は、Google Chrome 66, 70 の対応でSSL証明書の更新作業がいくつもあったりと....

そこで、Let’s Encryptを試してみました。


Let’s Encryptコマンドラインcertbotを使用するとSSL証明書の取得や更新を自動化できるようになります。
SSL証明書の取得かたnginxの設定までコマンド一発でやってくれたりします。
SSL証明書の更新もcronなどで実行すれば自動化も可能です。
かなり楽です。
楽すぎます。

SSL証明書の取得方法や更新方法などアトトックラボの方にまとめました。

atotok.co.jp

まずは社内の開発環境をLet’s Encryptに移行してみようかと思います。
自社のサイトもLet’s Encryptでいいかも。


受託開発でもスマホアプリと連携するようなサイトなどLet's Encrypで十分じゃないのかな?
しばらく使ってみてどこまで利用するか検討してみようと思います。

Dialogflowでチャットボットの開発

最近、チャットボット関係の開発の話があり独自実装だったり、いろんなサービスを試したりしてます。
今回は最近使ってみたGoogleのDialogflowを紹介したいと思います。
DialogflowはGoogle HomeGoogleアシスタントで実行できるアプリの開発が可能です。
また、DialogflowのIntegrationsから色々なサービスのボットを作成できます。

こんな感じ
f:id:kurusaki:20180629001915p:plain


Dialogflowを利用して簡単なチャットボットの作成手順をAtotok Labo の方にまとめました。
こちらでは、Dialogflowでチャットボットを作成し動作確認までの手順をまとめています。
シミュレータで実行する時にGoogleのアカウントの設定の影響でうまく動作しなかったりしたので解決方法なども記載しています。
atotok.co.jp



Webhookなど利用して外部サービスとの連携もできるので試したらこちらでも紹介したいと思います。

自転車で神社巡り 2018.4〜2018.6

4月から自転車で神社巡りはじめたので、今まで参拝した神社をまとめてみました。

kuru-photoblog.blogspot.com



御朱印がいただける神社マップを作成中です。



RubyのNet::HTTPのリトライについて調べてみた

ruby 2.3.0と2.5.1でNet::HTTPのリトライの動作が気になったので確認してみました。

atotok.co.jp