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 HomeやGoogleアシスタントで実行できるアプリの開発が可能です。
また、DialogflowのIntegrationsから色々なサービスのボットを作成できます。
こんな感じ
- Google Assistant
- Slack
- Viber
- Twilio IP
- Twilio (Text messaging)
- Skype
- Tropo (Text messaging)
- Telegram
- Kik
- LINE
- Cisco Spark
- Amazon Alexa
- Microsoft Cortana
Dialogflowを利用して簡単なチャットボットの作成手順をAtotok Labo
の方にまとめました。
こちらでは、Dialogflowでチャットボットを作成し動作確認までの手順をまとめています。
シミュレータで実行する時にGoogleのアカウントの設定の影響でうまく動作しなかったりしたので解決方法なども記載しています。
atotok.co.jp
Webhookなど利用して外部サービスとの連携もできるので試したらこちらでも紹介したいと思います。