Semantic UIをRails + Webpackerで使う

Semantic UI
css frameworkで使ったことないものを利用してみようと思って、installしたら少し嵌ってしまったのでメモ。

ちなみに、当初はTailwind CSS を使ってみようと思ったのですが、こっちはどうも慣れないのとclassがhtmlにつきまくってメンテしづらそうな印象だったのでやめました。

Introduction

素でyarn addするとgulpのversion不一致のエラーになったので、(対応方法はあるんだけど)一瞬諦めかけたのですが、doabit/semantic-ui-sass だとさくっとInstallできて便利そうと言うことでこちらを試してみました。

Installation

READMEに書いてはいるのですが、このままだと少し足りないので補足していきます。 https://github.com/doabit/semantic-ui-sass#ruby-on-rails-version-6

1. yarn

yarn add jquery popper.js semantic-ui-sass

これはREADMEと同じで良いです。

2. config/webpack/environment.js

const webpack = require('webpack')

environment.plugins.append(
  'Provide',
  new webpack.ProvidePlugin({
    $: 'jquery',
    jQuery: 'jquery',
    Popper: ['popper.js', 'default']
  })
)
environment.config.resolve.alias = { jquery: 'jquery/src/jquery' }

ちゃんとしたドキュメントが見つからず、少し予想が入ってますが、 library内部で同梱しているjQueryが呼ばれるのを阻止するために resolve.alias を使って jquery/src/jqueryを呼ぶようにしています(多分)。

他のやり方としては pluginの設定の方で $: 'jquery/src/jquery', みたいにしておくのでも良いはずです。 が、冗長なので、resolve.aliasで対応。

3. app/javascript/packs/application.js

require('semantic-ui-sass')
import '../src/stylesheets/application'

jsはsemantic-ui-sassを呼び出すだけ。 cssもwebpackで管理したいので、別ファイルをimportさせます。 (ここはassets使う人もいるかもしれませんね。)

4. app/javascript/src/stylesheets/application.scss

$icons-font-path: '~semantic-ui-sass/icons';
$flags-image-path: '~semantic-ui-sass/images';
@import "~semantic-ui-sass";

cssも@importすれば良いとREADMEに書いてますが、追加でiconとfontのパス指定が必要です。

5. app/views/layouts/application.html.haml

-    = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload'
+    = stylesheet_pack_tag 'application', media: 'all', 'data-turbolinks-track': 'reload'

(一応触れておきます。)webpack用にcssの読み込むメソッドも変えておきます。

(Rails)i18n-tasksのご紹介

昨日、RailsのSecurity UpdateがReleaseされました。
Rails 5.2.4.4 and 6.0.3.3 have been released | Riding Rails

あまり影響がある人は少ないかもしれませんが、こちらで詳しく解説されてます。
Rails: セキュリティアップデート5.2.4.4と6.0.3.3がリリース|TechRacho

これで思い出しましたが、i18nのkey管理にとても良いgemがあるので、こちらをご紹介。
glebm/i18n-tasks: Manage translation and localization with static analysis, for Ruby i18n  

そこそこの規模のwebシステムだと、途中で画面のデザインを変えたりすると、 i18nのkeyの消し忘れや、partial化した時にkeyを適切に振り直し忘れたりして、管理が適切に行われなくなりがちです。 こいつを使うと、足りないkey、使われてないkeyを教えてくれます。i18n利用していればもれなくお勧めできるgemです。
 

Installation

gem入れて、i18n-tasks.yml を用意すればok。
https://github.com/glebm/i18n-tasks

Configuration

さすがに動的に利用しているものは、検知できないので、ignore_unused で対象外にします。 https://github.com/glebm/i18n-tasks/blob/master/templates/config/i18n-tasks.yml

Test

テストに組み込めちゃうのも、非常に良いです。なんかあったらすぐ気付けます。
(normalizeはsort順もチェックするオプションなので、これは未実施にしてたりします。)

$ cp $(i18n-tasks gem-path)/templates/rspec/i18n_spec.rb spec/

or

$ cp $(i18n-tasks gem-path)/templates/minitest/i18n_test.rb test/

その他

Pre-fill missing keys, optionally from Google Translate or DeepL Pro

なんと、Google Translate、DeepL Pro、Yandex を用いて翻訳もしてくれるようです。これ知らなかった。

Alexa + h.ear go 2 + Spotify で快適音楽生活

Spotifyをリビングで聞くのに、今まで h.ear go 2(小型スピーカー)を使っていたのですが、ふとAlexaにh.ear go 2を繋ぐとめっちゃ便利なことに気づきました。 家事しながらとかすごい気軽に使えます。

こんな感じ

f:id:rochefort:20200808173906p:plain

少し解説

h.ear go 2

sonybluetooth/wi-fi対応の小型スピーカーです。 リビングではh.ear go 2を使ってます。書斎はヘッドフォン利用が多いのですが、たまに持ち運んで使ってます。

小型なんですが、結構しっかりしていて、個人的には満足。コンポ用に購入していたスピーカーは処分してしまいました。
 

Alexaスキル設定

AlexaにはSpotifyスキルがあり、こちらを有効にするだけで、AlexaからSpotifyが簡単に利用できます。
Amazon.co.jp: Spotify: Alexaスキル

Alexa買った時に、入れてみたのですが、Alexaのスピーカーから流れてきたしょぼい音質にガッカリして利用しなくなってました。
 

Alexa bluetooth設定

有線も可能ですが、私はbluetoothにしてます。
Amazon.co.jp ヘルプ: スマートフォンまたはBluetoothスピーカーとEcho端末をペアリングする Alexaアプリからbluetoothのペアリングができます。ここでh.ear go 2を選びます。  

Spotify Connect

本筋の話ではないですが、これが結構便利です。Alexaで立ち上げた後でも、AndroidMacからアプリ経由で簡単に操作できます。どっちで触ってもすぐに反応するのでめっちゃ便利です。
Connect - Spotify