Passion make things more better

Ruby on Rails / React.js / Swift / AWS / Docker

Sidekiqの導入

前提

  • redisが必要です

初期設定

やることは以下の2つ。

  • Gemfileの編集
  • 設定ファイルの作成

Gemfile

Gemfileにsidekiqを記述 & bundle install。

# Gemfile
gem 'sidekiq'
gem 'redis-namespace'

~ bundle install --path vendor/bundle

設定ファイルの作成

config/initializers/sidekiq.rbを以下の内容で作成。 host, portに関してはconfigで設定し、そこから呼んでいます。

Sidekiq.configure_server do |config|
  config.redis = {
    url: "redis://#{Settings.redis.host}:#{Settings.redis.port}/#{Settings.redis.db}",
    namespace: '_xxxxxx_sidekiq'
  }
end

Sidekiq.configure_client do |config|
  config.redis = {
    url: "redis://#{Settings.redis.host}:#{Settings.redis.port}/#{Settings.redis.db}",
    namespace: '_xxxxxx_sidekiq'
  }
end

config/sidekiq.yml

:concurrency: 1
:queues:
  - default

Workerの作成

app/workers以下にworker用のファイルを作成します。 以下は例でメールを送信するworkerとして、email_worker.rb作成しています。

class EmailWorker
  include Sidekiq::Worker

  def perform(user_id)
    user = User.find_by(id: user_id)
    # ActionMailerを呼び出す処理なりを書く
  end
end

呼び出し方

上で作ったEmailWorkerを呼び出すには以下のようにします。 これで実行のキューに入ります。

EmailWorker.perform_async(1)

エンジニアがSketchを使い始める時にやったアレコレ

僕がSketchを使うにあたり初めにやったことをまとめました。

基礎知識のインプット

使い方を知らないと元も子もないので、まずは基礎知識のインプットを行いました。 とりあえず以下のリンクを読んで、ざっくりと把握しました。

UIデザインの作成ツール!誰でも分かるSketchの使い方【初心者向け】

これで抑えた点は、ざっくりと以下のような項目になります。

  • とりあえず何か置きたいときは、左上の「Insert」を押せばいいらしい
    • 押すといろいろ出てくるので、見ればわかるかと
  • artboardを使えば、デバイスに応じた画面サイズの枠を作れるらしい
  • 図形の操作(色塗ったりとか)は右側でいろいろやるらしい
    • 項目がそこまで多くないので、結構直感的に使える
    • スライスの設定も右側の下の方でできる
  • マスクは図形を置いて右クリックして「Mask」選択でできる
  • 「File」-> 「New From Template」でよくある系のベーステンプレが現れる
    • コピーして使いたいところに貼り付ける感じで使うのかな
  • ちゃんとショートカットがある
    • これは使い慣れてきたら覚えればいいかくらいに捉えました

プラグイン

「こういうことできないのかなぁ..」と考えていて、あれこれ調べていたら、どうやらプラグインなるものがあるらしい...(そりゃそうだろ)。

プラグインの管理

プラグインの管理どうやるのが良いのだろうか、と探していたらSketch Toolboxを使うのがよくあるパターンらしい。

コマンドでやったほうがいいよ、みたいに書いている人もいましたが、僕はSketch Toolboxを使いました。

使い方は開けばわかると思います笑。installの時はsearchのところに対象のプラグインをいれて、表示された物のinstallボタンを押すだけです。

とりあえず入れたプラグイン4つ

エンジニア視点でとりあえずこんなのあったらなぁ、というのを入れました。

Content Generator for Sketch

仮画像を当てるのに使えるプラグイン

Sketch Measure

フォントサイズとか余白をかき出してくれるプラグイン

Sketch Palettes

配色をパレット化して保存できるプラグイン

Sketch Use FontAwesome

エンジニアなら使ってる人多いですよね!FontAwesomeのアイコンをそのまま使えるプラグインです。 そんなアイコン一個一個作れないよ、という人が多いと思うので。

最後に

あくまでエンジニアの人がSketchを使い始めるときの初めの一歩くらいの感覚で読んでいただけると。 僕の場合、Sketchはワイヤーを作る時に使うことが多いので、これで事足りてしまいます。誰かのお役に立てると幸いです。

Railsでseedデータを分割して実行できるようにする

個人的にRailsのseed運用は以外と悩みがちです。seed-fu使ったりと色々やりましたが、これから説明する方法に落ち着きました。

  • ファイルを指定してseedを実行できるようにrake taskを作成する
  • db/seeds以下のディレクトリを作成し、以下にxxxx.rbといった実行したい処理を書いたファイルを用意
  • bundle exec rake db:seed:xxxx(作成したファイル名)で実行

rake taskの作成

コマンドでファイルを指定して実行できるようにrake taskを作成します。 ※参考に記載したサイトのコードをお借りしております。

# lib/tasks/seed.rakeとして以下を作成する

Dir.glob(File.join(Rails.root, 'db', 'seeds', '*.rb')).each do |file|
  desc "Load the seed data from db/seeds/#{File.basename(file)}."
  task "db:seed:#{File.basename(file).gsub(/\..+$/, '')}" => :environment do
    load(file)
  end
end

seedファイルの用意

db/seedsというディレクトリを作成し、以下に行いたい処理を記載したファイルを作成します。 今回は例でCategory(nameカラムを持つ)モデルに対してseedデータを挿入するファイルを作成します。

# db/seeds/category.rb

Category.create(name: 'サンプル')

seedファイルの実行

db/seeds/category.rbを以下のコマンドにて実行します。

~ bundle exec rake  db:seed:category

これでseedデータが挿入できたかと思います。 個人的にはこのやり方が一番しっくりきているので、しばらくはこちらで続けたいと思います。

参考

Code Sign error: No code signing identities found: No valid signing identities (i.e. certificate and private key pair) matching the team ID "xxx" were found. の解決方法

チームで開発をしていたとき通常のbuildは通ったのに、archiveをした際にエラーが起きてしまいました。 エラーメッセージを見ると以下が表示されていました。

Code Sign error: No code signing identities found: No valid signing identities (i.e. certificate and private key pair) matching the team ID "xxx" were found.

原因

本来とは違うteam IDでbuildしたため。

解決方法

エラーメーセージに表示されているteam IDで検索をかけて、ひかかったところを元のteam IDに書き換える。 ※私の場合は通常のProjectの方は大丈夫でしたが、Podの方のteam IDが書き換わっていました。

carrierwaveの設定ファイル

carrierwaveを使う時にいつも設定ファイルを調べているので、備忘録としてよく使うベースの物を。

  • ファイル名をuniqueにしたい
  • original及びthumbのversionで、リサイズを行う
    • resize_to_fitとresize_to_limitどちらもありますが、今回はresize_to_fitを使用
# encoding: utf-8

class ImageUploader < CarrierWave::Uploader::Base

  # Include RMagick or MiniMagick support:
  include CarrierWave::RMagick
  # include CarrierWave::MiniMagick

  # Choose what kind of storage to use for this uploader:
  storage :file
  # storage :fog

  # Override the directory where uploaded files will be stored.
  # This is a sensible default for uploaders that are meant to be mounted:
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  # Provide a default URL as a default if there hasn't been a file uploaded:
  # def default_url
  #   # For Rails 3.1+ asset pipeline compatibility:
  #   # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
  #
  #   "/images/fallback/" + [version_name, "default.png"].compact.join('_')
  # end

  # Process files as they are uploaded:
  # process :scale => [200, 300]
  #
  # def scale(width, height)
  #   # do something
  # end

  process :resize_to_fit => [640, 640]
  # Create different versions of your uploaded files:
  version :thumb do
   process :resize_to_fit => [160, 160]
  end

  # Add a white list of extensions which are allowed to be uploaded.
  # For images you might use something like this:
  def extension_white_list
    %w(jpg jpeg)
  end

  # Override the filename of the uploaded files:
  # Avoid using model.id or version_name here, see uploader/store.rb for details.
  def filename
    "#{secure_token}.#{file.extension}" if original_filename.present?
  end

  protected
  def secure_token
    var = :"@#{mounted_as}_secure_token"
    model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.uuid)
  end

end

参考