ISUCON7予選の上位陣の戦略まとめ

Speee社でISUCON7の復習会をやったのでその資料を公開します。 ISUCON7復習会 2017/11/08 at Speee Lounge. original repo: https://github.com/isucon/isucon7-qualify 概要 ISUCON7の予選突破組の上位陣の戦略をいくつか分析してみました。 †空中庭園†《ガ…

TypeScript+webpack+Hypernova on RailsでSSRするときの設定ファイル

「Roppongi.rb #3 で「RailsエンジニアがReactを始めてSSRとReduxを導入するまで」という発表を行いました - Bit Journey's Tech Blog」あたりの話のなかで触れている、KibelaにおけるJSのビルド環境に関係する設定ファイルなどを公開します。 現在もこのと…

RubyKaigi 2017にゴールドスポンサーとして協賛いたします

井原(@ihara2525)です。今年もRubyKaigiの季節がやってきましたね。 株式会社ビットジャーニーでは、2015年、2016年に引き続き、2017年もGole SponsorとしてRubyKaigiに協賛いたします。RubyKaigi 2017運営事務局の皆様、今年もスポンサーをやらせていただ…

Markdown Night 2017 Summerで「Markdownはなぜ拡張され続けるのか」という発表をしました

資料: Markdownはなぜ拡張され続けるのか | bitjourney Kibela イベントページ: Markdown Night 2017 Summer - connpass 最近のMarkdownの現状と、Kibelaのmarkdown*1について話をしました。 メルカリさん会場提供ありがとうございました。 Markdownネタだけ…

RejectKaigi 2017で「GraphQL on Rails」という発表をしました

id:gfxです。 RejectKaigi 2017で「GraphQL on Rails」という発表をしました。 当日はKibelaでプレゼンテーションをしたので、それをそのまま資料として発表します。 2017/08/19 at Speee, Roppongi. 自己紹介 Kibelaという情報共有サービスを開発している K…

サービス開発を加速させる技術選定 in Kibela

2017/07/18 Service Dev Meetup #1 の資料です。 会場は Speee さんに提供していただきました。ありがとうございました。 自己紹介 FUJI Goro / @__gfx__ ビットジャーニーのエンジニア 最近のスコープ: Ruby on Rails / TypeScript / React / GraphQL 情報…

Roppongi.rb #3 で「RailsエンジニアがReactを始めてSSRとReduxを導入するまで」という発表を行いました

id:gfx です。Roppongi.rb #3 に登壇する機会をいただいたので、最近のKibelaのフロントエンドについて発表をいたしました。 RailsエンジニアがReactを始めてSSRとReduxとTypeScriptを導入するまで | bitjourney Kibela イベントページ: Roppongi.rb #3 “Rai…

CircleCIでElasticsearchのログが吐かれていない問題を修正する(続き)

井原(@ihara2525)です。 (引き続きめちゃ小ネタです) 「CircleCIでElasticsearchのログが吐かれていない問題を修正する」でタイトル通りCircleCIでElasticsearchのログが吐かれるようになったのですが、その対応だと/var/log/elasticsearchディレクトリ…

CircleCIでElasticsearchのログが吐かれていない問題を修正する

井原(@ihara2525)です。 (めちゃ小ネタです) CircleCI上でelasticsearch-extensionsを使ってテストを動かすのように引き続きテストを行っているのですが、elasticsearch-railsが0.1.8になった頃?から、テストは通るものの以下のようなエラーが出るよう…

CircleCI上でnpmパッケージを定期アップデート

出口 (@dex1t) です。 現在開発中のサービスでは、Railsを使いつつ、React.jsを導入しています。 React.jsを使うと必然的にBrowserifyなどのnpmのエコシステムを、Railsプロジェクトに取り入れることになります。 そうすると、Railsプロジェクトであっても、…

Elasticsearchを使ったテストを書くときにsleep 1するのはやめましょう

井原(@ihara2525)です。 以前RSpecでElasticsearchを使ったテストを書くというエントリの中で、 before do Post.__elasticsearch__.create_index! force: true Post.__elasticsearch__.refresh_index! page Post.import # Wait test cluster to index the …

GulpでSVGスプライトとアイコン一覧を一発生成

出口 (@dex1t) です。 ベクター素材をSVGスプライト化し、インラインSVGとして利用する仕組みを作ったので紹介します。 アイコンフォントかSVGか アイコンフォントとSVGの違いは、ググるとたくさん出てくると思うのですが、 現在開発中のサービスはモダンブ…

Apartment::TenantNotFoundをrescueするElevatorを使う

井原(@ihara2525)です。 apartmentを使ってサブドメインでテナントを切り替える場合、存在しないテナントのサブドメインにアクセスするとApartment::TenantNotFoundが投げられるのですが、これはApplicationController等のレベルではrescueできません。 と…

CircleCI上のCapybara::Poltergeist::JavascriptErrorを回避する

井原(@ihara2525)です。 CircleCIでPoltergeistを使ってテストを回しているのですが、PhantomJSのバージョンが古いため(2015/7/27現在1.9.8)、以下のようなエラーが出てしまいました。 Capybara::Poltergeist::JavascriptError: One or more errors were…

ActiveJob#perform_laterにモデルのインスタンスを渡すテストを書く

井原(@ihara2525)です。 以下のような、インスタンスが変更されるとActivejobでElasticsearchのインデックスを更新する処理があり、そのテストを書きたい!ということでやってみました。 after_commit -> { ElasticsearchIndexerJob.perform_later('index'…

Gyazoでキャプチャした画像をS3に保存するSinatraサーバを書いてみた

井原(@ihara2525)です。 会社はできましたが画像を共有する仕組みがない!というわけで、 画像はS3に保存する 鍵等の共有を各クライアントでやりたくないのでHerokuでサーバを動かす サーバは画像の一覧表示等できなくて良いので、とにかくS3に上げてくれ…

Hound CIを自前でホスティングする

エンジニアの出口 (@dex1t)です。 プルリクエスト毎に、コードの品質をチェックしてくれるHound CIですが、 Privateリポジトリ毎に、$12/Monthとちょっとお高い 自前のカスタムCopを使いたい ということで、自前でホスティングしてみました。Hound自体は、こ…

RuboCopのカスタムCopをつくるときの注意点

井原(@ihara2525)です。 自社の文法チェックのためにRuboCopのカスタムCopをつくりたいと思い調べていたところ、RuboCopのCustom Copを作るという良い記事があるのですが、2015/6/16時点で若干気をつけないといけない点がありました。 rubocop-0.29.1まで…

予約語を管理するgemをつくりました

井原(@ihara2525)です。 先日apartmentを使ってマルチテナントを実装するというエントリを書いたのですが、取得されたくないサブドメインをどうやって管理しようかということで、予約語をためておくだけのgemをつくってみました。 bitjourney/reserved_wor…

ruboty-trelloをつくりました

井原(@ihara2525)です。 弊社にはjourneyさんというrubotyでできたボットがいて、ごみの日を教えてくれたりします。 そんなjourneyさんにTrelloのカードを追加してもらいたく、ありそうでなかったrubotyのプラグインをつくってみました。 bitjourney/rubot…

apartmentを使ってマルチテナントを実装する

井原(@ihara2525)です。 サブドメインでデータを分けたい(例えばhttps://bitjourney.slack.comみたいな)場合、RailscastsにあるMultitenancy with Scopesみたいに実現するのもありですが、その中でも参照されている、apartmentというgemを使うと、一つの…

RSpecでアップロードされたファイルをつくってテストする

井原(@ihara2525)です。 RSpecでアップロードされたファイルをつくってテストしたい、という場合、以下のようなファイルをshared contextとして作成し、必要な箇所でincludeして使うようにしています。 spec/support/shared_contexts/uploaded_file.rb inc…

CircleCI上でelasticsearch-extensionsを使ってテストを動かす

井原(@ihara2525)です。 elasticsearch-extensionsのTest::Clusterを使ってESのテストを書いているときに、ローカルの環境のまま動かそうとすると、 Starting 1 Elasticsearch nodes..sh: 1: elasticsearch: not found とelasticsearchコマンドが見つから…

複数のドメインを許可するemail属性のバリデーションを設定する

井原(@ihara2525)です。 サービスへのログイン時に、メールアドレスがexample.comかgmail.comなユーザなら許可する、みたいなことを、以下のように実装してみました。 ENV['USER_DOMAIN']には'example.com gmail.com'みたいにスペースで区切ったドメインの…

omniauth-google-oauth2でログインをGoogle Appsのアカウントに制限する

井原(@ihara2525)です。 omniauth-google-oauth2を使ってログイン機能を実装する際に、Google Appsの特定のドメインのユーザのみにログインを制限するので、アカウントを選ぶ画面を出して欲しくない、みたいな場合、以下のようにhdにドメインを指定してあ…

RSpecでElasticsearchを使ったテストを書く

井原(@ihara2525)です。 以下のようにElasticsearchを使って検索するアクションがあり、RSpecでこのコントローラスペックを書きたい!という場合にどうしようって話です。 class PostsController < ApplicationController def search @records = Post.sear…

RSpecでActionMailerのメソッドが呼び出されるテストを書く

井原(@ihara2525)です。 RSpecでActionMailerのdeliver_later!が呼び出されることをテストするコードを書いてみます。 コメントがあったときにメールで通知するサービスオブジェクトをつくり、それは中でActionMailerのdeliver_later!等を呼び出していると…

Capistrano 3によるデプロイをSlackに通知する

井原(@ihara2525)です。 今つくっているRailsアプリケーションのデプロイにはCapistrano 3を使っています。 slackistranoというgemを使うとデプロイの開始や終了を簡単にSlackに通知できるようになるのですが、終了の通知にgitの最後のコミットの内容とそ…