nyagato’s blog

Programming and Photo

HHKBを買った

会社のテックサポート制度を活用して、HHKB Professional HYBRID Type-Sを買いました。
人生初のHHKBです。
これまでは分離メカニカルキーボードのMint60を愛用してました。

f:id:nyagato_00_miya:20191218151653j:plain
会社のデスクに設置した図

イキって無刻印を買ってしまったので不安でしたが、1日でなれました。

tech.medpeer.co.jp

鹿児島Ruby会議01で発表しました

CfP Advent Calendar 2019の記事です。

先日行われた鹿児島Ruby会議01で、ruby-vipsについて発表しました。 Rails6からデフォルトで利用できるように成った、画像処理ライブラリlibvipsのラッパーであるruby-vipsについて紹介と導入事例をお伝えしました。

発表の中で2点ご質問を貰っておりましたので、補足の方をしようかと思います。

pdfの読み込みはできるのか?

.pdfloadというメソッドがあります。 引数に読み込みたいpdfファイルのファイル名(パス)を渡してあげれば、読み込むことができVips::Imageの戻り値が帰ります。 オプションで、読み込み対象のページの指定もできます。

画像に矩形などを書き込めるか?

以下のように任意の画像に対して矩形を描画することができます。

require ‘vips’

image = Vips::Image.black(16, 16) + 128
image = image.draw_rect 255, 10, 12, 1, 1

矩形以外にも、円やラインなどが用意されています。

RollbarにSourceMapsを送ろう

RollbarにSourceMapsを送る方法を調べました。

どうして?

Railsのエラー箇所は、どのファイルの何行目で起きたのか教えてくれるので、すぐに原因を探しに行けるのですが、Javascriptは隠蔽化されていて原因究明に時間がかかったり、「わからん」と匙を投げることがしばしば有りました。

RollbarにSourceMapsをアップロードしてあげれば、Javascript側もバックトレースできそうでした。
willnetさんに、RollbarSourceMapPluginというpluginがあることを教えていただいたので、こちらを使ってSourceMapsのアップロードに取り組みました。

SourceMapsをアップロードしていないと、以下のようなmessageが表示されます。

f:id:nyagato_00_miya:20191210182252p:plain
SourceMapsをRollbarにアップロードしていない場合

パッケージの導入

まずは、RollbarSourceMapPluginをインストールしましょう

# npmで入れる場合
$ npm install rollbar-sourcemap-webpack-plugin --save-dev

# yarnで入れる場合
$ yarn add rollbar-sourcemap-webpack-plugin

アップロードスクリプトの追加

webpack.config.jsや、config/webpack/staging.jsconfig/webpack/production.jsなどに、アップロードを行うスクリプトやコードを追加します。 accessTokenやversionなどは、利用する環境に応じたものを設定してください。
僕は、versionにUUIDで生成した値を代入しています。

const RollbarSourceMapPlugin = require('rollbar-sourcemap-webpack-plugin')
const PUBLIC_PATH = 'https://my.cdn.net/assets'
const webpackConfig = {
  entry: 'index',
  publicPath: PUBLIC_PATH,
  output: {
    path: 'dist',
    filename: 'index-[hash].js'
  },
  plugins: [new RollbarSourceMapPlugin({
    accessToken: 'aaaabbbbccccddddeeeeffff00001111',
    version: 'version_string_here',
    publicPath: PUBLIC_PATH
  })]
}

動作確認

アップロードスクリプトの準備ができたので、envの指定をして実行してみましょう。

$ RAILS_ENV=staging NODE_ENV=staging bin/webpack

するとwebpackerのビルドが実行され、以下のように、SourceMapsがそれぞれアップロードされていきます。

Uploaded js/vendor-88f0**************010.chunk.js.map to Rollbar
Uploaded js/notifications/index-c***************bcc9.js.map to Rollbar
Uploaded js/features/index-9b2***************4d3.js.map to Rollbar
Hash: f7**************************
Version: webpack 4.39.3
Time: 54239ms
Built at: 12/10/2019 3:19:28 PM

f:id:nyagato_00_miya:20191210184634p:plain
staging環境にアップロードが成功

はまりどころ

手元でビルドもアップロードも成功したので、デプロイタスクにフックさせるように修正し、staging環境にマージしました。 ところが何度デプロイしても、SourceMapsのアップロードが行われず頭を抱えました。

原因は、デプロイ時にNODE_ENVの指定を忘れていたことでした。 NODE_ENVの指定がないため、RAILS_ENV=staging NODE_ENV=production bin/webpackの状態で、stagingデプロイが行われていました。

NODE_ENVを指定しよう

環境に応じてnode_envを設定しましょう。

set :node_env, (fetch(:node_env) || fetch(:stage))

assets:precompile時に、webpacker:compileも実行される。 webpacker:compile実行時に、./bin/webpackも走るのでSourceMapsのアップロードも行われる。

task :assets_precompile do
    on roles(:deploy) do
      within fetch(:tmp_new_path) do
        # ↓ここで、rails_envと一緒にnode_envも指定してあげる
        with rails_env: fetch(:rails_env), node_env: fetch(:node_env) do
          # assets:precompile前の処理をゴニョゴニョ頑張る
          execute :rake, "assets:precompile"
        end
      end
    end
  end

おわりに

無事、デプロイ時にそれぞれの環境のRollbarへ、SourceMapsのアップロードが確認できました。 これで、Javascriptのエラーが来ても、「わからん」と匙を投げずに原因究明に当たれそうです。

SQLアンチパターンを買った

会社の輪読会*1で読んでいる「Rubyの仕組み」がもうすぐ読了しそう。 次に読む本が、「SQLアンチパターン」に決定したので、先に読むために買ってみた。

f:id:nyagato_00_miya:20191204203934p:plain
SQLアンチパターンの電子版

はてなブログを開設した

こんばんは、nyagato_00です。
自分のアウトプット場所としてブログを開設しました。

業務や個人開発で得た知見を書いて行きたいと思います。
(自分の備忘録も兼ねて)

最初からガッツリ書くと、続かなくなりそうなので初回は簡単に。