アクトインディ開発者ブログ

子供とお出かけ情報「いこーよ」を運営する、アクトインディ株式会社の開発者ブログです

tahara

Rust で Web アプリを作った感想

こんにちは、tahara です。 弊社のメインは Ruby on Rails ですが、 簡単な周辺システムは担当者の好きな言語を使って作ったりします。 今回は Rust を使って MySQL(Amazon Aurora)のレコードや MongoDB に入っいるログを集計して表示する Web アプリを Ru…

rustup

こんにちは、tahara です。 この記事はアクトインディ Advent Calendar 2016 11日目です。 rustup: the Rust toolchain installer について書いてみたいと思います。 rustup は Rust における Ruby での rbenv や RVM みたいなものです。 以前は、multirust …

メールの Subject が読めない

こんにちは、tahara です。 Rails でメールを送信するとログに次のような感じで出力されますよね。 Sent mail to user@example.com (8.6ms) Date: Mon, 03 Oct 2016 14:32:16 +0900 To: user@example.com Message-ID: <57f1ed60d1544_656931b0dc404e7@yarn.m…

act-fluent-logger-rails の Rails5 対応をリリース

こんにちは、tahara です。 act-fluent-logger-rails の Rails5 対応をリリースしました。 https://rubygems.org/gems/act-fluent-logger-rails/versions/0.3.0

Paperclip を使っている Rails アプリのテスト高速化

こんにちは、tahara です。 テストでも Paperclip を使っているモデルを FactoryGirl.create(:facility) とかすると、 ImageMagick の convert コマンドなどが走ってしまいます。 これがなかなか重くてテストを遅くしちゃっています。 そこで Paperclip のサ…

Rinari + RVM + Bundler 環境での rails console

こんにちは、tahara です。 いつもコンソールで rails c していましたが Emacs にひきこもることにしました。 (defun rinari--wrap-rails-command (command) (concat (expand-file-name "~/.rvm/wrappers/default/bundle") " exec rails " command)) Pry 使…

delivery_method を smtp にしたら 2.5 倍速くなった

こんにちは、tahara です。 Rails で config.action_mailer.delivery_method を :sendmail から :smtp にかえたら、44 分かかっていたメール送信バッチが 17 分で完了するようになりました。 ( ^-^)/:★*☆オメデト♪ なのでみなさん :smpt にしましょう! とい…

MySQL の GROUP_CONCAT

こんにちは、tahara です。 よくあるグループ毎の最大値を持つレコードを取得する SQL の書き方です。 ただし、MySQL 限定。 次のようなテーブルとレコードがあるとします。 create table foo ( id int(11), group_id int(11), value int(11), position int(…

Delayed::Job で絶対にやっておいた方がいいたった1つの設定

こんにちは、tahara です。 アクトインディ Advent Calendar 2015 の25日目の記事です。 これです。 Delayed::Worker.max_attempts = 0 Delayed::Job は実行に失敗した場合、デフォルトで25回リトライします。 気のきいた機能なのですが、メール一斉送信を D…

Common Lisp コードの方が多い gem

こんにちは、tahara です。 アクトインディ Advent Calendar 2015 の8日目の記事です。 Common Lisp コードの方が多い gem をリリースしました。 前回はたった2行でしたが、今回は200行以上あります。 ちなみに Ruby のコードは40行くらいです。 lisp-rails-…

guard-notifier-stumpwm

こんにちは、tahara です。 アクトインディ Advent Calendar 2015 の4日目の記事です。 ふだんいこーよを開発しているとき bundle exec guard ってやってます。 むかしは script/autospec でしたよね。 その当時は autotest-stumpwm でした。 このたび Gurad…

RSpec での悲観ロックのテスト

こんにちは、tahara です。 コードに account とか withdraw とか出てきたら悲観ロック(select for update)が必要ですね。 そのテストをするには次のものが必要になるかと思います。 コミットが機能する 複数スレッドがそれぞれ別々のコネクションでトラン…

requests spec を書こう

こんにちは、tahara です。 ちかごろ Rails のテストは requests spec がいいな、と思ってます。 メリットは リクエストの view → controller → model → レスポンスの view と、ひととおりでテストできる。 実運用にそくしたエンドツーエンドテストがあると…

StumpWM で好きな画像を使って LGTM

こんにちは、tahara です。 StumpWM は弊社エンジニア内で最も人気のあるウィンドウマネージャです。 そのシェアは 50% (3/6) もあります!? コードレビューにかかせない LGTM 画像も簡単に用意できちゃいます。 お好みの画像をブラウザに表示する。 StumpW…

拡張子なし、application/octet-stream のアップロード

こんにちは、tahara です。 Android からのファイルアップロードはエントロピーの神々に支配されているのでしょうか? 拡張子なし、Content-Type: application/octet-stream で jpeg ファイルが ブラウザから POST されたりします。 そんな POST に対応する…

第6回社内エンジニア勉強会 コードの最適化

こんにちは、tahara です。 たぶん第6回目となる社内エンジニア勉強会を開催しました。 持ちまわりで社内勉強会を開催しており、先日は私の担当でしたので、 このブログにも書いておこうと思います。 よくあるフィボナッチ数を求める fib 関数をネタにコード…

アクトインディ技術部隊報告書のソース公開

こんにちは、tahara です。 この「アクトインディ技術部隊報告書」は Common Lisp で書かれていますが、このたびソースを公開しました。 https://github.com/actindi-dev/tech-blog 作りを簡単に説明します。 Web サーバは nginx すみませんが Common Lisp …

バウンスメール処理

こんにちは、tahara です。 Rails システムでのバウンスメール処理ってどうするのがいいんでしょう? ベステプラクティスではないかもしれませんが、弊社でのバウンスメール処理方法を書いてみたいと思います。 まずメーラークラスで return_path にバウンス…

2014年のふりかえり

こんにちは、tahara です。 今日は仕事納めなので、この一年を(技師部隊的な観点で)ふりかえってみたいと思います。 Docker でステージング量産できるようにした http://tech.actindi.net/3604628531 http://tech.actindi.net/3610143537 めちゃくちゃ便利…

Rails で LaTeX を使って帳票出力

こんにちは、tahara です。 システム開発で、もう15年くらい前からやってみたいことがありました。 Web アプリでの帳票出力に LaTeX を使うことです。 社内システムながらようやくその機会に恵まれました。 rails-latex といういい gem があり、めんどうなと…

SolrCloud で Solr を冗長化する

こんにちは、tahara です。 EC2 はとてもいいのですが、たまにインスタンスが勝手にリブートしたりするんですよね。 わかっています。Multi-AZ 配置にしましょう、ということですよね。 ということで SolrCloud で Solr を冗長化しました。 次のような構成で…

Passenger みたいに touch で Unicorn をリスタート

こんにちは、tahara です。 いこーよ では Passenger を使っていました。 最近チケット毎に Docker でステージングを作り、リリースする流れになった中、 デプロイ時の再起動でリクエストがつまってしまうのが問題になってきました。 そのため Unicorn に変…

Docker を使ってどんどんステージング環境を作る方法

こんにちは、tahara です。 Docker を使って git push をトリガーにステージング環境をどんどんたてて開発しています。 いま見たら24面のステージング環境が動いていました。 新しいブランチを push すると Jenkins が Docker のコンテナを作りそこにデプロ…

Active Record で null でない、かつ空文字でない

こんなふうに書けるんですね。 [1] pry(main)> Experience.where.not(content: [nil, '']).to_sql => "SELECT `experiences`.* FROM `experiences` WHERE (NOT ((`experiences`.`content` = '' OR `experiences`.`content` IS NULL)))"

Docker のはまりどころ

こんにちは、tahara です。 ちかごろ Docker を使ってステージング環境を作っています。 いろいろはまりました。 Btrfs 使ってる Btrfs を使っていると pwd が失敗したりします。 Btrfs 上では AUFS だと問題があるようです。 docker のデーモンを -s btrfs …

GitLab 導入しました

こんにちは、tahara です。 弊社もエンジニア一人体制がおわり、コードレビューが必要になってきました。 ついに GitHub Enterprise か! とも思いましが残念ながらコスト的に却下。 GitLab 導入しました。 インストールはこちらのページの手順を愚直に実行で…

Rails で is null と is not null

こんにちは、tahara です。 Rails で is null と is not null ってどうやって書くの? is null Foo.where(bar: nil) is not null Foo.where.not(bar: nil) http://api.rubyonrails.org/classes/ActiveRecord/QueryMethods/WhereChain.html#method-i-not ちゃ…

assets:precompile が遅い

こんにちは、tahara です。 ようやく いこーよ も エンパ においつき Rails4 になりました! おいつかれたエンパ担当者は、「エンパはRails6くらいにしたい」などのたまっていましたが、 その時はエイリアンテクノロジーでつきはなしたいと思っています。 さ…

act-fluent-logger-rails を Rails4 対応にしました

こんにちは、tahara です。 Rails で Fluentd へログ出力する act-fluent-logger-rails を Rails4 対応にしました。 いままで config.log_tags = [ :subdomain, :uuid ] 等を指定していても無視していましたが、 ようやくタグを付けられるようにしました。遅…

もうバックアップ壊れませんように

こんにちは、tahara です。 2つのハードディスクで RAID0 になっている外付けハードディスク2台で バックアップ用の Btrfs のファイルシステムを作っていました。 ある日2台ある外付けハードディスクのうち1台の AC アダプタが外れてしまいました。 そして B…