投稿

12月, 2017の投稿を表示しています

来年の抱負

今日で2017年も終わりです。
今年は、自律神経失調症で休職したり、思ったように仕事が出来なかったりと、個人的には辛い1年でした。
大晦日に、何か書くような気力は残ってないんですが、来年の豊富だけ書いておこうかなと。

自己の体調管理を見直す(良くはなりつつあるんですが、まだまだ万全とは言い難い)日々の学びをアウトプットする(ブログでも、勉強会でも)自分で今までやってきたこと、自分が持っている知識・技術などを上手くアウトプット出来ていない気がするので、来年の目標にしようかなと。

Macにプリインストールされているrsync

Macにプリインストールされているrsyncを使って、リモートのホストへファイルを同期している時に起きた問題です。

TL;DR
Macにプリインストールされてるrsyncは2.6.92.6.9だとiconvオプション使えないので、ファイル名が文字化けしたり、エラーになるHomebrewでインストールしたrsyncを使うか、ファイル名に日本語入れないで
環境
MacOS ... 10.12.6rsync ... 2.6.9
invalid byte sequence in UTF-8
MacOS上でリモートにファイルを同期しようとしたら、突如エラーが出ました。
invalid byte sequence in UTF-8 何とも悲しいメッセージです。
まさかと思い、ファイル名をリストにしてみると...
ファイル名に日本語が含まれているファイルがありました。

rsync2.6.9だとiconvオプションもないし、文字化けすると聞きました。
Homebrewでrsyncをインストールして、そちらを使うようにしてみます。

Homebrewでrsyncをインストール
特に難しいこともないです。
最新のrsyncをインストールしましょう。

$ brew install rsync $ rsync --version rsync version 3.1.2 protocol version 31 Copyright (C) 1996-2015 by Andrew Tridgell, Wayne Davison, and others. Web site: http://rsync.samba.org/ Capabilities: 64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints, socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace, append, ACLs, xattrs, iconv, symtimes, no prealloc, file-flags rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welco…

サービスイン前ならDNSレコードのTTL短くしとく

サービスを作る時にドメインを取得し、そのドメインのDNSレコードを設定しますよね。
会社で先輩から言われたことでもあるんですが、サービスイン前ならTTLを短くしておいた方が良いです。

TL;DR
サービスイン前は、TTLを短くするサービスイン後は、TTLをある程度長くしておく
TTLを短くする
サービスイン前に限定して話ですが、AWSなどといったサービスを利用していると、頻繁にインスタンスが変わったり、AレコードなどといったDNSレコードの設定を変更する時ありますよね。
そういった時にTTLが長いとどうでしょうか?
中々が変更が更新されずに、開発や環境構築のペースが落ちてしまいます。

NSレコードは5~10分、Aレコードなどは1分あたりで良いです。

サービスイン後は?
サービスイン後は、短くする理由は基本的にはないです。
何故なら、TTLを短く設定している時のメリットよりも、デメリットの方が大きいからです。
どんなデメリットが考えられるでしょうか?

DNSキャッシュポイズニングの危険性DNSサーバーへの負荷が上がる
パッと出てくるのは、この2つです。

DNSキャッシュポイズニングの危険性
ここでは、DNSキャッシュポイズニングの具体的な流れについては触れませんが、TTLが短い場合は、この攻撃を遂行しやすくなります。
TTLを長くすることで、その危険性をある程度は下げることが可能です。

DNSサーバーへの負荷が上がる
TTLが短いと、エンドユーザー側の端末でもキャッシュの期限が切れ、短い間隔でDNSサーバーに対してリクエストされるようになります。
となると、DNSサーバー側はどうでしょうか?
多少リクエスト増えたぐらいでどうにかなるものではないですが、負荷が上がってしまうことが容易に考えられます。
多くの人達に使ってもらうサービスなら、こういった細かい点を、どこかのタイミングで考えれると良いですね。

最後に
確かにサービスイン前だと、早く変わってもらわないと困る時が多々あるので、TTLを短くしておくのが嬉しいですね。
短くしたら、サービスイン前後で設定を見直すことを忘れないようにしましょう。
サービスイン後には、NSレコードは1日程度にしておくのが良いです。(割りと一般的らしい)

データへアクセスさせるなら必ず対策をしよう

つい先日、特定のテーブルのレコードが全削除されるような事件を、初めて目の当たりにしました。(私が関わってるわけでない)
そこで再確認できたことは、アクセス権を渡すなら権限を絞ることの重要さでした。

実際にあった話を書くわけにもいかないので、その話をベースに若干変更したフィクションです。

何が起きたのかあるシステムのDBに、関連会社のAさんが作業上、ツールなどを介して直接アクセスする必要がありました。
その作業では、データの確認や修正があったことは言うまでもありません。

ある日、Aさんはツールで操作を誤ってしまい、あるテーブルの全レコードを削除してしまったのでした。
要は、DELETE FROM table_name;が発行されたということです。

何故、起きたのか当事者では、ないので想像で語るしか出来ません。
その想像を語る価値もないので、皆さんのご想像にお任せします。

どれだけの問題なの?データや復旧の可不可によって、レベルが変わります。
NetflixやHulu、dTVなどといったVODサービスを想像してみてください。
VODサービスには、動画のようにサービス提供に必要なコンテンツや、ユーザーの決済情報や連絡先などを保持する会員情報、各ユーザーの視聴履歴などの履歴データなどが保存されると考えられます。

例えば、コンテンツが削除されてしまった場合はどうでしょうか?
コンテンツは、VODサービスにとってはサービスそのものです。
これが削除されるということは、サービスが停止し、解約の危険や競合のサービスへの顧客流出などが考えられます。
皆さんは色んなサービスを利用していると思うので、これが1,2時間程度でなら許せる方もいるでしょう。
もし、バックアップなどがなく、復旧できない状態だったらどうなるでしょうか?
これは言うまでもなく分かりますよね。

会員情報についても同様です。
軸は違いますが、これも相当というか、会員系サービスの場合は致命的過ぎます。
「決済系の情報が操作ミスで消えました」と言われたら、あなたはそのサービスを利用し続けようと思いますか?

最後に履歴データですが、視聴履歴などといった情報も重要なことには重要ですが、その情報をサービスの根幹にしてない限りは、サービスは継続可能でしょう。
もちろん、顧客流出はあります。
が、上2つの例とは比較にならないです。

例とし…

ブログ用のMarkdown変換ツール

このブログはBloggerで書いてるんですが、下書きはMarkdownで書いています。
となると、HTMLに変換するツールが必要になります。
専用のコマンドラインツールを用意しているんですが微妙だったので、ウェブアプリとして作り直しました。

Markdown to HTMLMarkdown to HTMLというのを、herokuで動かしています。
自分でパーサーなどを作っているわけではないので、技術的には面白みがないです。
md2htmlというリポジトリにコードは公開してあります。
<p>タグで囲いたくない(囲わなくていい設定にしてる)ので、こういうツールを作ったんですねー。

最後にJSのライブラリもあるので、ここまでやる必要もなかった気がしますが、今回は普段使い慣れてるRubyでさっと書きました。
他にもこういうツールを、作っては捨て、作っては捨てしてるので、ある程度は残していこうかなと思いました。

入社してから今までを振り返って

私は、今の会社に2014年4月に新卒入社しました
2016年春頃(3年目になる直前ぐらいかな)に、大規模案件の開発リーダーをやることになりました。
そして、2017年2月~3月末の約2ヶ月間、休職することになりました。
今は復職し、小規模なチームの開発リーダーをやっています。
それらを振り返ってみようと思います。

入社1年目 2014/04~2015/03全然覚えてないです。
ただただがむしゃらに技術書を読み漁り、プライベートでも休憩中だろうと、ひたすらコードを書いていました。
それだけは覚えています。

入社2年目 2015/04~2016/03この歳は、良くも悪くも覚えています。
当時付き合ってた方と別れ、その後ドイツから同年代のインターンシップ生が来て友人になり、年度末には開発リーダーになりました。
その方には迷惑をかけてしまいました。
謝りきれないぐらいに。
ドイツからきたインターンシップ生は、ほぼ同年代だったので、一緒に帰ってMac行ったり、ダベったりしてました。
当時、恋人いなかったので、そのことにちょいちょいつつかれたの覚えてるからな!
彼とは頻繁ではないですが、未だにメールする仲です。
年賀状送り忘れて本当にごめん。
開発リーダーに抜擢されたという表現は合ってないと思います。
そのため、敢えて「なりました」という表現にしました。
人手不足の兆候だったと捉えるべきでした。
開発リーダーになれたことに誇りに思いますし、選んでくれた人達には感謝しています。
ただ、最初の案件としては俺には大きすぎたかな。

入社3年目 2016/04~2017/01開発リーダーをやっていた期間ですね。
この期間も余り覚えてないですが、補助してくれた先輩や、間に入ってくれた先輩たちのおかげもあって、余り負担がなかったように思っていました。
この時期もがむしゃらに自分の出来ることを、ひたすらやっていただけです。
そのがむしゃらが良くなかったのかもしれません。
2年目で恋人と別れてしまって、ちょっとした自暴自棄になっていたのかもしれません。
自分の身を大切にしないような行動ばかりしていました。
ただただ負担をかけて、自分を追い込んで。
それが結果として自律神経失調症となって、休職するきっかけになったのは言うまでもないです。
当時の関係者の方々には謝っても謝りきれないです。
この案件が具体…

後で読みたいウェブサイトをTrelloにタスクとして追加する方法

イメージ
ウェブサイトを後で読みたい時に、Pocketやリーディングリストなどといったサービスを利用すると思います。
私は、Discordに専用のチャンネルを用意して、そこにURLを貼っています。
量が少ないうちは十分なんですが、量が増えてくるとどこまで読んだのか忘れてしまう時があります。
今回は、Trelloに追加する方法です。

PC+Chrome普段、Chromeを使っているため、Chromeの拡張で探してみます。

Trelloありました。
Trelloです。



評価は微妙そうですね。
とりあえず使ってみます。
ボタンが追加されるので、クリックするとこのような画面が出てきます。



後で読むの箇所がボードで、未読の箇所がリストです。
単純に開いただけでは、Card TitleとDescriptionが入力されないですね。
Attach xxxにチェック入れてみました。(今回は、Discordに日本サーバー登場というタイトルのページを開いているので、Attach Discordに日本サーバー登場)



チェック入れると、タイトル入れてくれるんですね。
ありがたいです。
後は、Addボタンを押せばタスクが追加されます。
評価は良くないですが、今回の利用用途であれば十分そうです。
使っていくと、問題が明らかになってくるのかもしれないですが。

振り返りTrelloをインストールしておく。
後は、

拡張のボタンをクリックAttach xxxのチェックを入れるAddボタンをクリック
Android+ChromeスマホでもChromeを使っているので、Trelloにタスクとして追加出来れば十分です。

前提
スマホにはTrelloのアプリをインストール済み
Chromeの共有はい、ありました。
若干手間ですが、スマホのUI上仕方ないでしょう。
まず、共有...があるダイアログ?を開きます。



共有...をタップすると、共有先が表示されます。



その中のTrelloにカードを追加をタップする。
すると、カード作成画面が出ます。

後は、作成をタップすれば完了です。



振り返り事前にTrelloのアプリをインストールしておく。

共有...をタップTrelloにカードを追加をタップ作成をタップ
最後に他に良いやり方や、拡張があれば是非教えて下さい。
せっかくTrelloを使っているので、他のことでもTrelloをうまく使っていけるようにし…

特定の配列に別の配列の値が入っているか確認する

最近、Twitterでこんな話をみたような気がしなくもないんだけど、とりあえず仕事でも書く機会があったのでメモ。
Arrayの&演算子を利用します。
結果である積集合が空かどうかをチェックすれば良さそうですね。

a = [1, 2, 3, 4] b = [3, 2] puts (a & b).empty? 結果

false 十分ですね。
&は他にも利用するシーンがあると思うので、うまく利用していけたらいいですね。

取得したドメインの名前解決が出来ない

先日、取得したドメインの名前解決が出来ない問題がありました。

TL;DR
digを実行したらNXDOMAINだったwhoisでドメインステータスを確認したらclientHoldだったclientHoldが返ってくるのは、「情報認証手続きをしていない」か「whois情報に不備がある」今回の問題は受信出来るメールアドレスを登録していなかったために情報認証手続きをしていなかった登録時だけでも良いから、受信して内容を確認できるメールアドレス登録しよう
名前解決が出来ない具体的に言うと、NXDOMAINが返ってくる状態だったのです。
この状態だと、何のレコードもない状態です。
NSレコードもです。

$ dig example.com 明らかにおかしいですよね。
はい、2時間ぐらい試行錯誤して考えました。

whoisを確認してみるダメでした。
会社の先輩から「whoisの情報も見といた方がいいよ」と言われたので、愚直にwhoisコマンドを実行してみる。

$ whois example.com whoisコマンドの結果の中にdomain statusというものがありました。
このドメインステータスの値が client holdとなっていて、ぐぐってみると、お名前.comのヘルプセンターがヒットしました。
ここを読むと、大きく分けて2つの理由が考えられそうです。

情報認証手続きを行っていないドメインのWhois情報に不備がある
最初だけでもいいから内容を確認できるメールアドレスを登録しよう今回は、前者の情報認証手続きを行っていないに該当していました。
ドメイン取得したり、whoisに情報を登録する時は、ちゃんと受信して内容を確認出来るメールアドレスを使いましょう。
じゃないと、急に名前解決出来なくなったりしますからね。。。

ダンベル何キロ持てる?は読み始めました

3巻まで出ているダンベル何キロ持てる?を2巻まで呼んだのだが、思ったよりも面白い。
完全に偏見なのだが、こういった表紙をしている漫画は私に合わない事が多い。
賞与も入ったことだし、他の本を買うついでに「1巻だけ試しに...」と思って買ったのだが、思っていたよりも良かった。
ゲーム活動向けのツイ垢でとんでもない発言してしまうほど、良かった。
何が良かったのかを箇条書きで書き出してみる。

表紙通り女性主人公(男性主人公の周りに女性がいる漫画は飽きてきてる)トレーニングのやり方について、コツを含めて書いてある(初心者の人はまあ知らないし、勘違いするよなっていうこととか)主人公達の個性が強い(強い過ぎてギャグ漫画として受け入れられる)筋肉女子の魅力を上手く表現して書かれているカット(尊い)私自身の性癖がチラリと覗かせるような感想だったけれど、今から筋トレしたいっていう人は、モチベ維持のために買ってみるのもいいかもしれない。
詳細な感想は別にここで書くことでもないと思うので書きはしないけど、久しぶりに友人に勧められる漫画だと思いました。
筋肉女子尊い...

Deviseのメールを非同期で送信する

Ruby on Railsを使った開発に関わっていると、Deviseを利用しているアプリケーションによく出会います。
ここではDeviseの良し悪しはさておき、Gemを利用してDeviseが送信するメールを手軽に非同期送信してみます。

TL;DR
devise-asyncというGemを利用するconfig/initializer/devise_async.rbで設定を書くDeviseを使うARモデルのdeviseの引数に、:asyncを追加する
前提
ActiveJobを使った非同期送信の仕組みを、アプリに組み込まれている(Sidekiqなど)Ruby on Rails ... 5.1.4Devise ... 4.3.0
Deviseのメールを非同期送信するdevise-asyncというGemがあります。
これをGemfileに定義して、設定を書いて、ARモデルのdeviseの引数に:asyncを追加するだけです。

Gemfileに追記するこれは書かなくてもいいレベルだと思いますが、devise-asyncを定義しましょう。

gem 'devise-async'
devise-asyncの設定を書く今回は分かり易くするために、config/initializers/devise-async.rbを追加して、ここに書きます。

Devise::Async.setup do |config| config.enabled = true end これだけです。

deviseの引数に:asyncを追加するDeviseを使うARモデルのdeviseの引数に:asyncを追加するだけです。
今回は、例としてUserクラスを使います。

class User < ApplicationRecord devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :async # NOTE: devise-async end これで完了です。

最後にDeviseのメールを非同期で送信する場合の簡単な方法を書きました。
今回の記事を書くために、検証用に作ったアプリは、send-devise-mail-…

PXC550買いました

SennheiserのPXC550買いました。
Bluetoothヘッドフォンには興味があったんですけど、昔のBluetoothヘッドフォンの音質を味わって(悪い意味で)から中々手が出なかったんですが、店頭で聞いてみたら思ったよりもいい音だったので、つい買ってしまいました。

音についてですが、PXC550も相変わらず優等生な音っていう風に受け取れます。(イヤホン・ヘッドセット共にSennheiser使っているので、そう受け取れるのかもしれない)
装着感ですが、工夫して装着すれば耳が大きい私でも、そこまで痛くならないです。
重量については、227gと書いてある通り比較的軽い印象を受けます。
持ち運び用のケースが付属してくるんですが、ハード?ソフト?どっちつかずといったケースなんですが、思ってるより頑丈です。
でも、もう少し守ってくれそうなケースの方が良かったなと思います。
稼働時間は、仕事に出かけて戻ってくる間(約11時間)では全然持ちます。

まだ買ってから日が浅いですが、今のところ不満はないです。
やっぱり、ヘッドフォンだと、仕事場で聞こえる愚痴が聞こえなくて助かりますね。

Playbookでuserを指定するとuserオプションが無視される

Playbookでuserを指定すると、ansible-playbookの--userオプションが無視される。
Playbookでuserを指定しないで、コマンド実行時にuserを指定するように統一した方が、実行時に変にハマらなくて良さそう。

Bitbucketへ接続可能な鍵がssh-agentに登録されているか確認する

SSHのagent forwardingを利用したいケースは、デプロイなどで頻繁にあると思います。
仕事ではBitbucket上にリポジトリを作って、そこにアプリケーションなどを置いています。

TL;DR~/.ssh/configに設定がある場合、単純にssh -T git@bitbucket.orgが成功してしまうsshコマンドには、-Fという設定ファイルを指定するオプションがある/dev/nullは、空ファイルとして扱えるssh -T git@bitbucket.org -F /dev/nullすれば確認出来る
環境OS ... macOS Sierra 10.12.6手元のマシンの~/.ssh/configにBitbucketの接続情報を定義済みssh-agentは起動してある
接続確認Atlassianの公式ドキュメントのTest SSH authenticationに書いてある通りに通りに実行してみます。
この時点では、ssh-agentに鍵は登録していません。

$ ssh -T git@bitbucket.org logged in as xxx. You can use git or hg to connect to Bitbucket. Shell access is disabled. $ echo $? 0
~/.ssh/configに接続情報を定義していあるので、もちろん成功します。
ssh-agentに登録されている鍵で接続が可能な場合は、接続情報が定義されていなくても成功します。
この挙動を利用して、確認します。

SSHのオプションを確認するさすがに、~/.ssh/configを削除したり、一時的に退避したりするのは手間だし、ダサいのでNGです。
このサイトには、sshコマンドで使えるオプションが日本語で載っています。
この中から設定ファイルを指定出来るオプションを探し出します。

-F 設定ファイル
ユーザ毎の設定ファイルに別のファイルを指定します。設定ファイルがコマンドラインから与えられた場合、システム全体の設定ファイル
/etc/ssh/ssh_config
は無視されます。デフォルトでは、ユーザ毎の設定ファイルは~/.ssh/configになっています。
ありました。
-Fオプションに接続情報がないファイルを指定してやれば、~/.ssh/confi…

普段のメモ書き用にInkdropを使うようにしてみる

ちょっとしたメモを書くにも、ブログの下書きをするにもMarkdownを利用しています。
Markdownで書けるメモツールを探していたらInkdropというツールに出会いました。

TL;DR良いツールだし、作者の考え方に共感したし、応援したくなったから使う
メモ書きツールに求めるモノ私がタスク管理ツールに求めるモノは、以下になります。

Markdown形式で書けることタグで管理出来ること暗めのカラーテーマが選べることオフラインで利用出来ることWindows、Macなどマルチプラットフォームで動作すること
になります。
それぞれについての説明と、Inkdropがどうマッチしたのか書いていこうと思います。

Markdown形式で書けることこれが個人的には、かなり重要な要素です。
Markdown形式に慣れているので、他の形式よりもそれなりに早い速度書くことが出来ます。
また、Markdown形式で下書きを書いておけば、ツールをかませることで、他の形式に変換も容易に出来ます。

Inkdropは、Markdownで書けるツールなので、マッチしない訳がないですね。
シンタックスハイライトも見やすく、文字サイズも変更してくれので、個人的には嬉しいです。

タグで管理出来ることタグ付けができ、タグで検索出来ると、後からメモを見返す時に便利です。

Inkdropは、タグ管理が出来ます。
タグだけはなく、ステータスという概念もあるようで、ブログの記事を書いたり、議事録・アイデアをメモする時には便利そうです。

暗めのカラーテーマが選べること私は夜型なので、暗い環境での作業が多いです。
となると、明るいカラーテーマはどぎついです。
本当に辛いです。

Inkdropは、明るいテーマと暗いテーマがあるようで、使う人の好みによって切り替えれるようなので、個人的には助かります。

オフラインで利用出来ることメモを書く時は、どんな場所で書くかは本当に分かりません。
仕事場だったり、自宅だったり、コワーキングスペース・カフェ、はたまたコインランドリー※という時もあります。
それこそネットワークが繋がらない場所で作業している時もあります。
そういう作業環境でもメモすることが出来るのは必須とも言えます。

Inkdropは、この点も大丈夫そうでした。

Windows、Macなどマルチプラットフォームで動作すること自宅では、…

Ansibleでsftp出来ない

仕事で使っているCentOS7のマシンに対してansible-playbook実行時、sftpの箇所で接続エラーが出てしまい、反映出来ないという問題に遭遇しました。

環境Ansible ... 2.3.2.0
解決策SFTP disableなCentOS環境でansibleを使うという記事を見つけまして、ここに書いてある状況とそっくりでした。
実際にANSIBLE_SCP_IF_SSHを環境変数として指定したら動作しました。
paramikoの動作上、仕方ないんですねー。
今のところ、困らないので環境変数を指定していく方針にしていきます。

Discordに日本サーバー登場

イメージ
具体的にいつ頃追加されたのかは判明していないですが、ついにDiscordのサーバーリージョンに日本が追加されました。



サーバーの選択欄にJapanが追加されていますね。
ちなみに平均pingの値は、約3msでした。
めちゃめちゃ速いです。
ありがたい。


プライベートでゲームする俺からすると、Discord以外を選択する必要はなくなりました。
Discord Inc.の皆さん、本当にありがとうございます。

Hugoに移行するかもしれない

Bloggerに移行したばかりなのだが、Hugoに移行するかもしれない。
理由は簡単なんですが、Markdownで書けるのが非常に強力です。

このブログ自体もMarkdownで書いたものを自作コマンドでBlogger用に変換して使ってますが、その手間が無くなるのはかなりでかい。

ソフトバンクペイメントサービス用のGem

ウェブシステムやウェブサービスを開発していると、決済代行サービスを利用することは珍しくないです。
今回はソフトバンクペイメントサービスという決済代行サービスの処理をいい感じにラップしてくれるGemを紹介します。

sbpaymentsbpaymentというGemがあります。
このライブラリを使うと、比較的に楽にAPIを呼び出すことが出来ます。

クレジット関連のAPIを、ライブラリを使ってみた時の感想を書いていこうと思います。

ここがよい

APIのI/FがXMLだが、XMLアレルギーな人は触らなくて済む共通のパラメータを事前に設定出来るハッシュコードを指定しなくても良い
ここがよくない

ライブラリ自体のドキュメントが少ない
APIのI/FがXMLだが、XMLアレルギーな人は触らなくて済むAPIのI/FがXMLなんですが、それを意識せずに利用することも出来ます。
レスポンスも同様です。
自前でパースする必要もなければ、それを意識した実装にある程度はしなくても良いのは大変メリットです。

共通のパラメータを事前に設定出来るドキュメントを見れば察しはつくと思いますが、merchant_idやservice_idなどは、基本的に1つのサービスにつき一意に決まります。
そして、これらの値はどのAPIにも必要なパラメータとなります。
となると、毎回指定するのは非常に面倒です。(それを設定してオブジェクトを返すメソッドを定義すれば済みますが)

このライブラリは、事前にそういった共通パラメータなどを設定することが出来ます。
各APIを呼び出す時に付加してリクエストしてくれます。
これも必要なことにのみ集中して開発出来るのでメリットです。

ハッシュコードを指定しなくても良いAPIのリクエストには、特定の規則に従って、ハッシュコードを付加しなければならないです。
このライブラリは、リクエスト実行時に付加してくれます。
自分達で計算する必要は無くなりました。

ライブラリ自体のドキュメントが少ないサンプルのコードがいくつかある程度で、ドキュメントが充実しているとは言えません。
しかし、ソフトバンクペイメントサービスのAPI仕様書と、ライブラリのテストコードを見比べれば、ある程度は予想がつきます。
ドキュメントがもう少し揃っていれば、便利かな?と思います。

最後にこのライブラリが万能とは思いませんが、個人的には中々…

filter_parametersがフィルターしてくれる範囲

Railsでは、filter_parametersという設定をすることが出来ます。
ググれば具体的にどういう処理をしてくれているのか、他の方が色々書いてくれます。
今回は、それらについて、誤解がないように書いておきます。

環境この記事は、以下のバージョンを使って書いています。

Ruby ... 2.4.1Ruby on Rails ... 5.1.4
リクエストパラメータをフィルターするfilter_parametersに指定された条件にマッチした場合は、パラメータの値を[FILTERED]としてログに出力します。
独自でフィルターしたい値があれば積極的に使っていくと良いでしょう。
パスワード、決済関連の情報などといったパラメータに関しては特にそうでしょう。

SQLの値をフィルターするRAILS_ENVがproductionであろうと、フィルターされることはありません。
リクエストパラメータのうちフィルターした値に関しては、DBに直接保存することはやめましょう。
やろうと思えば出来なくもないですが、これから開発するアプリケーションであれば、そんな事するよりかは設計を変更し、暗号化した値を保存するようにしましょう。

機密情報平ダメ。ゼッタイ。

ログレベルを変えれば、SQLのログを出さないようにすることも出来ますが、そういうことをするのは最終手段にしましょう。
ログを解析しようと思っても情報がロストしてしまって、悲しいことになりますからね。

最後にfilter_parametersにフィルターしたい値を設定しておけば大丈夫という考えは、リクエストパラメータだけにしておきましょう。
それ以外のログ(SQLなど)では出力されてしまうので、それを見越して設計・開発を行うようにしていきましょう。

決済関連の情報など、内部で不正利用されたら事件ですからね。

Terraformの反映をCircleCIで自動化

今の仕事では、アプリのテストもデプロイも、全てCircleCIで自動化しています。
その自動化の流れにのって、Terraformでの構成管理もCircleCIで自動化ています。
.circleci/config.ymlの内容を備忘録。



余り複雑な記述にはならないので、他のTerraformリポジトリにも移行しやすそうです。
Bitbucketを使ってる場合は、Bitbucket Pipelinesで十分な気がしますよ。