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

sass-lint を導入する

CSS は、Sass (*.sass) で書いているのですが、プロパティの順番をアルファベット順にしたくて sass-lint を導入してみました。


インストール

npm install -g sass-lint

.sass-lint.yml。便利そうな設定もいくつか追加。

必要最低限の設定にしたいので、merge-default-rules オプションは false にします。

options:
  merge-default-rules: false

files:
  include: 'app/assets/stylesheets/**/*.sass'

rules:
  hex-length: 1
  mixins-before-declarations: 1
  no-trailing-whitespace: 1
  pseudo-element: 1
  property-sort-order: 1
  zero-unit: 1

実行します。

sass-lint -v

参考

法人本店移転の手順

一人で会社をやっていて、管轄法務局が変わる法人移転をする場合の方法メモです。

メインタスク

  1. 移転前の法務局に行く (相談窓口があります)
  2. 登記移転をする
  3. 「移転後」の法務局で、印鑑カードの交付申請をする
  4. 移転前の税務署に、異動届を出す
  5. 移転前の都税事務所に、異動届を出す
  6. 移転前の年金事務所に、事業所所在地変更届を出す

TODO

  • 郵便転送手続き
  • 銀行 (法人口座) の住所変更
  • ホームページの住所変更
  • ドメインの住所変更
  • メール署名の住所変更
  • ASP の住所変更
  • 法人クレカの住所変更
  • 個人型確定拠出年金 所在地変更手続き (http://www.benefit401k.com/tanenkin/sbi/)
  • 勤務先の住所変更
  • 会計事務所に連絡
  • 名刺の作成

参考リンク

全角や空白を含む問い合わせ番号でも検索できる Elasticsearch の analyzer

elasticserach-rails での設定例です。

settings(
  analysis: {
    filter: {
      whitespace_remove: {
        type: 'pattern_replace',
        pattern: "\\p{javaWhitespace}",
        replacement: ''
      }
    },
    
    analyzer: {
      my_code_analyzer: {
        type: 'custom',
        filter: [
          'icu_normalizer',
          'whitespace_remove'
        ],
        tokenizer: 'keyword'
      }
    }
  })

実際の DB データをテストで使用する

Rails で開発していると、実際に使っている DB のデータを、テストで使用したい場合があります。

そのような場合、seed_dumpactiverecord-import を使ってうまく実現することができました。


Gemfile

group :development do
  gem 'seed_dump'
end

group :test do
  gem 'activerecord-import'
end

使わない環境では、gem を読み込まないようにします。


script/dump_models.rb

DUMPED_MODELS = [Site, Category, SubCategory]
OUTPUT_FILE = 'spec/fixtures/seed.rb'

DUMPED_MODELS.each_with_index do |model, i|
  options = {
    append: (i > 0),
    file: OUTPUT_FILE,
    exclude: [:created_at, :updated_at],
    import: true,
  }

  SeedDump.dump model, options
end

ダンプ用のスクリプトです。

モデルの関連を考慮して、DUMPED_MODELS の順番を決めます。

seed_dump のデフォルトでは id カラムが出力されませんが、モデルの関連があるので、id が出力されるように exclude オプションを調整します。

また activerecord-import を使うので、import オプションを true にします。


開発環境などでスクリプトを実行し、データをダンプします。

rails runner script/dump_models.rb

spec/fixtures/seed.rb にインポート用のファイルが出力されます。


最後に、RSpec で seed タグが設定されている example に対し、データがロードされるようにします。

spec/support/shared_context/seed.rb

RSpec.shared_context 'Importing seed' do
  before { load Rails.root.join('spec/fixtures/seed.rb') }
end

RSpec.configure do |config|
  config.include_context 'Importing seed', :seed
end

テストの例です。

describe FooJob, '#perform', :seed do
  it 'seed が設定されている' do
    expect(Site.count).not_to eq 0
  end
end

activerecord-import を使うとインポート速度が上がり、テストが速くなるので便利です。

ふるさと納税の返礼品検索サイト「ふるふる」を作りました

ふるさと納税の返礼品を検索できる「ふるふる」というサービスを作りました。

ふるふる

ふるさと納税のポータルサイトはいくつかありますが、

  • できるだけ多くの返礼品を検索できる
  • ごちゃごちゃしていない
  • 簡単に検索できる

サイトがほしいと思い、開発に至りました。

といいつつ、まだ網羅できていない返礼品があったり、スマホ版がなかったりと問題がありますが、様子を見て改善していこうと思います。

技術的には、

  • HTML5/CSS3
  • Elasticsearch
  • Let's Encrypt
  • Ubuntu 16.04

といったことをやってみました。

HTML5/CSS3 の勉強には、以下の 2 冊が役に立ちました。ありがとうございます。

最強のCSS設計 チーム開発を成功に導くケーススタディ

最強のCSS設計 チーム開発を成功に導くケーススタディ

Let's Encrypt 関係は、9m さんの記事が大変役に立ちました。ありがとうございます。

どうぞご利用ください。

elasticsearch-model で eager loading を行う

elasticsearch-model v0.1.9 で確認しました。

response = Article.search.tap { |r| r.records.options[:includes] = [:comments] }
response.records.each do |article|
  article.comments  # eager loaded
end

#records の引数で指定することもできます。

Article.search.records(includes: [:comments])

Kaminari で、最大ページ数を指定する

Kaminari v0.17.0 で確認しました。

ページングされすぎて、サーバに負担がかかる場合などに便利です。


config/initializers/kaminari.rb

Kaminari.configure do |config|
  config.max_pages = 100
end

これで、ページネーション用のリンクなどが 100 ページまでしか表示されなくなります。


page パラメータを手動で設定された場合の対策もしておきます。

app/controllers/application.rb

class ApplicationController < ActionController::Base
  before_action :normalize_page

  private
  def normalize_page
    page = params[:page].to_i
    params[:page] = (page <= 1 || page > Kaminari.config.max_pages) ? nil : page
  end
end