ウェブサービスを作っています。

Chromebook ターミナルのフォントを Inconsolata などに変更する

Chrome OS のターミナルは Web フォントを設定することで、フォントの変更ができます。

私は Powerline を使っていませんが、powerline-web-fonts というものを使うと、簡単に変更することができました。

GitHub - wernight/powerline-web-fonts: Powerline Web Fonts for Chromebook

Inconsolata など、有名なプログラミング用フォントが複数用意されています。


設定方法

  1. ターミナルで Ctrl+Shift+P を押して、プロファイル設定画面を開く
  2. Text font family の先頭に "Inconsolata", "Hack" など、設定するフォント名を追加する
  3. Custom CSS (URI) に次の URL を追加する: https://cdn.jsdelivr.net/gh/wernight/powerline-web-fonts@ba4426cb0c0b05eb6cb342c7719776a41e1f2114/PowerlineFonts.css

f:id:milk1000cc:20190913184649p:plain


完成

f:id:milk1000cc:20190913191318p:plain

一応日本語も表示できます。表示が乱れる場合がありますが、Ctrl+L を押せば直るようです。

まだ若干見た目がおかしい場合もありますが、ターミナル内のエディタ (emacs -nw など) で開発する分には困らなそうです。

Chrome OS の拡張機能で、カレントウインドウがターミナルかどうか判別する

最近 Chromebook を入手したので Emacs keybindings がちゃんと使えるようにしたく、試行錯誤しています。

その過程で拡張機能を作っており、思いついたコードです。


const TERMINAL_URL_REGEXP = /^chrome\-extension:\/\/.+\/html\/crosh\.html/

let onTerminal = false

chrome.windows.onFocusChanged.addListener(() => {
  const getInfo = {
    populate: true,
    windowTypes: ['normal', 'popup', 'devtools']
  }

  chrome.windows.getCurrent(getInfo, window => {
    onTerminal = (
      window && window.tabs.length > 0 &&
        window.tabs[0].url.search(TERMINAL_URL_REGEXP) > -1
    )
  })
})

manifest.json の permissions に tabs を追加する必要があります。

"permissions": ["tabs"]

Chrome OS、ES6 で OS を操作できるのが良いですね。

参考

Webpacker4 で Vue と Pug を扱う

webpacker v4.0.2 で確認しています。

Webpacker4 + Vue.js の単一ファイルコンポーネント (SFC) で、

<template lang="pug">
  .hoge
</template>

のような Pug テンプレートを扱う方法です。


yarn add pug pug-plain-loader

config/webpack/loaders/pug.js

module.exports = {
  test: /\.pug$/,
  use: [{
    loader: 'pug-plain-loader'
  }]
}

config/webpack/environment.js

const { environment } = require('@rails/webpacker')
const pug = require('./loaders/pug')

environment.loaders.prepend('pug', pug)

参考

IE10以下で HTMLElement.dataset を使う

JavaScript で HTML 要素の data- 属性 を取得する際、モダンブラウザでは elem.dataset.xxx のように取得できます。

HTMLElement.dataset - Web API | MDN

ただ、この機能は IE10 以下で使うことができません。

element-dataset という npm モジュールを使うと、IE10 以下でも使えるようになります。


Webpacker を使用している前提です。

yarn add element-dataset

Webpack のエントリファイルなどに、以下を追加します。

import elementDatasetPolyfill from 'element-dataset'

elementDatasetPolyfill()

VCR で、タイムスタンプなどの動的パラメータを無視する

VCR 4.0.0 + RSpec 3.7.0 で確認しています。


spec/support/vcr.rb

VCR.configure do |c|
  c.cassette_library_dir = 'spec/cassettes'
  c.hook_into :webmock
  c.configure_rspec_metadata!
end

spec

vcr_options = {
  cassette_name: '...',
  match_requests_on: [:method, VCR.request_matchers.uri_without_params(:signature, :timestamp)]
}
it 'this is test...', vcr: vcr_options do
  ...
end

参考

Rails で本番環境の deprecation warning を独自ログに出力する

Rails 5.0.6 で確認しています。

もっと良い方法がある気もするので、ご存知でしたら教えていただけると幸いです。


config/environments/production.rb (デフォルトで :notify になっていると思います)

config.active_support.deprecation = :notify

config/initializers/deprecation.rb

logger = Logger.new(Rails.root.join('log/deprecation.log'))

ActiveSupport::Notifications.subscribe('deprecation.rails') do |*args|
  data = args.extract_options!
  logger.info data[:message]
  logger.info data[:callstack] * "\n"
end

参考