Linkers Tech Blog

リンカーズ株式会社の開発者ブログです。

JavaScriptでのイベントキャンセルの落とし穴

Railsで開発していると、デフォルトのSubmitイベントを上書きしたい時に遭遇することがあると思います。 そういった場合は、Clickイベントなどを利用して、デフォルトのSubmitイベントはキャンセルし、上書きした処理を実行することになります。 しかし、イベントリスナーの設定方法やキャンセル方法によっては、予期せぬ動作を引き起こすことがあります。 JavaScriptのイベント伝播の仕組みを理解していれば、予期せぬ動作を未然に防ぐことが出来ます。

  • イベントの伝播の仕組み
    • デフォルトアクションのキャンセルとバブリングの停止
  • 例:二重送信の防止
  • まとめ
続きを読む

Slack始めました MattermostからSlackへの移行手順

リンカーズでは最近コミュニケーションツールを Mattermost から Slack に切り替えました。当ブログでは2回に分けてSlack移行についてお伝えしたいと思います。まず今回はMattermostからデータを抽出し、Slackにインポートする手順です。

  • 概要
  • 移行できなかったもの
  • 作業
    • export
    • 手元に移動
    • convert
    • import
  • 自動化できなかった作業
    • カスタム絵文字
    • チャンネル
      • mattermostにはなかったチャンネルを追加
      • プライベート化、アーカイブ
  • おわりに
続きを読む

リモートオフィスでの仕事を紹介! 2019年3月Matz会ダイジェスト

こんにちは、リンカーズ情報システム部の鈴木です。今回は弊社に残るMatz会アーカイブから2019年3月開催分をお送りします。

  • 似た企業名を探す
    • アルゴリズムの紹介
    • パフォーマンス計測
    • Ruby本体での採用例
  • リモート勤務3年目
    • 東海オフィスの環境
    • メリット・デメリット・注意していること
    • まつもとさんから
  • まとめ
  • We are hiring!!
続きを読む

イベントトラッキング用gem ahoyで、deviseの複数のユーザモデルを取り扱う

ahoy導入の経緯と課題

ahoyはRailsアプリケーションにアナリティクスツールを組み込むためのgemで、Railsアプリケーション上でユーザ行動ログを取得し、保存することができます。データの保存先としてActiveRecordを選択することができるので、最小構成のインフラでも簡単に導入することができます。また、Railsアプリケーションの一部として動くため、Google Analyticsへの接続を制限している環境のユーザの行動も補足することができるというメリットもあります。

開発中のRailsアプリケーションは認証用のライブラリとしてdeviseを利用しており、お客様と社内のスタッフをテーブル単位で分けています。ahoyは標準では複数のモデルに対応していないため、導入するにあたってこの問題を解決する必要がありました。

GitHub上に、deviseの複数のユーザモデルに対応させたいというIssue( Multiple Devise models · Issue #38 · ankane/ahoy · GitHub )が上がっており、 polymorphic関連で解決する、というgemの作者からの回答があるのですが、その具体的な手続きまでは書かれていません。 今回はその手順をまとめました。

ahoyの導入方法

公式のREADMEか、わかりやすいQiita記事を読んでください。

github.com qiita.com

複数のdeviseのモデルのユーザをトラッキングする設定の手順

ここでは、deviseのユーザモデルが、staff, cutomerの二種類あるとして話を進めます。

まずREADMEのcustom user methodにあるように、コントローラ内でアクセス中のユーザのデータにアクセスするための設定を変更します。

# config/initializers/ahoy.rb
Ahoy.user_method = ->(controller) { current_staff || current_customer }

Ahoy::Visit, Ahoy::Eventのモデルのbelong_toの部分をポリモーフィック関連に置き換えます。

# event.rb
class Ahoy::Event < ApplicationRecord
  include Ahoy::QueryMethods
  self.table_name = 'ahoy_events'
  belongs_to :visit
  belongs_to :user, optional: true, polymorphic: true
end
# visit.rb
class Ahoy::Visit < ApplicationRecord
  self.table_name = 'ahoy_visits'
  has_many :events, class_name: 'Ahoy::Event'
  belongs_to :user, optional: true, polymorphic: true
end

データベースに保存するので、カラムの追加が必要ですね。追加しましょう。

class AddUserTypeToAhoyVisitsAndEvents < ActiveRecord::Migration[5.2]
  def change
    add_column :ahoy_visits, :user_type, :string, after: :visitor_token
    add_column :ahoy_events, :user_type, :string, after: :visit_id
  end
end

また、eventに保存されるデータにカラムを追加する手続きが必要になります。

# config/initializers/ahoy.rb
class Ahoy::Store < Ahoy::DatabaseStore
  def track_event(data)
    data[:user_type] = controller.current_staff ? 'Staff' : 'Customer'
    super(data)
  end
end

以上で完成です。 あとは、好きなページにトラッキングコードを入れることで、複数のユーザモデルに対応した状態でユーザの行動を分析できるようになります。

自己紹介

浜田です。開発に関わるいろんなお仕事とサーバのお守りを担当しています。

「ポストMatz」はいつ、誰が? 2019年2月Matz会ダイジェスト

こんにちは、情報システム部の鈴木です。

弊社では技術顧問: まつもとゆきひろ氏を招いて定期的に勉強会(通称: Matz会)を行なっています。お待たせしました、今回は今年2月開催分のレポートです。

今回のテーマはこちらです。詳しいレポートは「続きを読む」より。

  • Rubyで音楽を奏でる
    • 目指す挙動と実装方針
    • 実装と課題
    • まつもとさんによる補足
  • "xruby syndrome"
    • エンジニアへの提言
    • Pythonコミュニティで起きたこと
    • Ruby長期運用計画
  • まとめ
  • We are hiring!!
続きを読む

リンカーズは「RubyKaigi 2019」にスポンサーとして参加します

おはようございます。情報システム部の鈴木です。

いよいよ今月18日から RubyKaigi 2019 が福岡にて開催されます。リンカーズは Platinum スポンサーとして RubyKaigi 2019 を応援しています!2017年広島開催から、3年連続3回目の協賛になります。

ブース出展

ブースでは弊社社員が皆様のご来場をお待ちしています。またこのようなノベルティも用意しているので、ぜひお気軽に立ち寄って手にとってください。

  • ソースコードの見通しに・デスククリーナー
  • レビュー漏れへの確かな実感・メガネ拭き
  • ビジネスマッチング祈願・ステッカー

リンカーズオリジナル デスククリーナー・メガネ拭き・ステッカー

この他、皆様に楽しんでいただけるちょっとした企画も用意する予定です。詳細は当日をお楽しみに!

メンバーの参加

弊社からメンバー7名が RubyKaigi に参加します。一部は先述の通りブースに常駐している他、セッションの聴講もする予定です。セッションの合間やパーティ会場などでお会いした際はよろしくお願いします。また、代表前田も参加します。リンカーズの事業についてや、経営・起業についてお話したい方もどうぞお越しください!

リンカーズは RubyKaigi に参加するエンジニアも応援しています。社員はイベント当日と前日の移動日は出勤扱いの上、諸経費も会社が負担します。このあたりの制度に興味を持った方、ぜひリンカーズ社員にお声がけください。

Ruby エンジニアにとって最大のイベントを、リンカーズが少しでも盛り上げられたら幸いです。それでは当日楽しみにお待ちしております!

リンカーズは「Rails Developers Meetup 2019」にスポンサーとして参加します

みなさんこんにちは、情報システム部の大河原です。

リンカーズは、3/22金から23土に日本オラクル社様にて開催されるRails Developers Meetup 2019 に1日目のケータリングスポンサーとして参加します!

railsdm.github.io

RailsDMは2017年より継続的に開催されているRuby on Rails開発者が集まる勉強会です。

2018年は計4日間に渡って開催され、いずれも好評を博しました。

今回は、なんとRailsの生みの親・David Heinemeier Hansson(DHH)氏がリモートで参加されるとのこと。

また、登壇者も非常に豪華な顔ぶれとなっており、3トラックになっているのが逆に残念なほどです。体が3つ欲しいですね笑

なお、弊社社員からの登壇者はいませんが、技術顧問の前島真一(@netwillnet)氏が2日目に登壇されます。

テーマは「Clean Test Code, Revised」とのことです。良いテストコードを書いていくため、ぜひご聴講ください!

ところで、これだけの大規模イベントではありますが、オーガナイズされているのは企業ではなく個人の方です。参加者としては本当に頭が下がりますね。

そんなイベントに対するささやかなサポートとして、リンカーズは1日目懇親会にてワインに合う美味しいお肉やチーズを提供します。

どうぞご賞味ください。

また、ノベルティとしてデスククリーナー・メガネ拭き・ステッカーを持っていきますので、見かけたら手にとっていただけると幸いです。

では、当日またお会いしましょう。