サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ノーベル賞
blog.bitjourney.com
Speee社でISUCON7の復習会をやったのでその資料を公開します。 ISUCON7復習会 2017/11/08 at Speee Lounge. original repo: https://github.com/isucon/isucon7-qualify 概要 ISUCON7の予選突破組の上位陣の戦略をいくつか分析してみました。 †空中庭園†《ガーデンプレイス》 repo: https://github.com/ryotarai/isucon7q http://eagletmt.hateblo.jp/entry/2017/10/24/010832 https://mozami.me/2017/10/24/isucon7_qualify.html スギャブロエックス repo: https://github.com/gfx/isucon7-qualify http://memo.su
「Roppongi.rb #3 で「RailsエンジニアがReactを始めてSSRとReduxを導入するまで」という発表を行いました - Bit Journey's Tech Blog」あたりの話のなかで触れている、KibelaにおけるJSのビルド環境に関係する設定ファイルなどを公開します。 現在もこのときと基本的な構成は変わっておらず、すでに数ヶ月安定して運用できています。 環境 Rails v5.1 TypeScript v2.5 webpack v3.6 Hypernova*1 webpackerは不使用で、webpack-rails*2を使用 ディレクトリ構成 client/ - フロントエンド用TSコード(.ts, .tsx,.json) spec/javascripts/* - テスト用TSコード なおプロダクション用フロントエンドコードは 100% TypeScript です
井原(@ihara2525)です。今年もRubyKaigiの季節がやってきましたね。 株式会社ビットジャーニーでは、2015年、2016年に引き続き、2017年もGole SponsorとしてRubyKaigiに協賛いたします。RubyKaigi 2017運営事務局の皆様、今年もスポンサーをやらせていただいて、ありがとうございます。 rubykaigi.org rubykaigi.org rubykaigi.org 私たちは2015年からKibelaという情報共有ツールを開発していて、今年の3月に正式リリースを行いましたが、まだまだ収益を上げていかないといけない中(引き続き頑張ります)、自分たちにとってはそれなりのお金を使ってなぜスポンサーをやるのか。 それは、Rubyという素晴らしいプログラミング言語、また、その周囲にあるコミュニティのおかげで自分たちはサービスの開発を行い事業を続けられ
資料: Markdownはなぜ拡張され続けるのか | bitjourney Kibela イベントページ: Markdown Night 2017 Summer - connpass 最近のMarkdownの現状と、Kibelaのmarkdown*1について話をしました。 メルカリさん会場提供ありがとうございました。 Markdownネタだけでスピーカーにせよ聴講者にせよそんなに人が集まるのだろうかという懸念もありましたが、当日のハッシュタグの流速や懇親会の熱気をみるに、Markdownに一言いいたい人は思いの外いるのだなということが確認できました。 今回のスピーカーはMarkdownを採用している商用サービスの開発者が多く、「Markdownはプレインテキストでもそれなりに読めるのがよい」「サービスの改善のために拡張するのはh必要不可欠」というのが共通認識だったと思います。しかし、Mar
id:gfxです。 RejectKaigi 2017で「GraphQL on Rails」という発表をしました。 当日はKibelaでプレゼンテーションをしたので、それをそのまま資料として発表します。 2017/08/19 at Speee, Roppongi. 自己紹介 Kibelaという情報共有サービスを開発している Kibelaの公開Web APIをフルスクラッチするにあたってGraphQLを調べているところ 自分のOSSを誰かに引き継いだり共同開発体制にしていたら、GitHubのpinned reposがすべてorganizationのものになった 本日の話 GraphQLとは GraphQLをRailsに組み込む話 GraphQLとは Web API のためのクエリ言語 http://graphql.org/ RESTful API の次を狙うWeb APIアーキテクチャという位
2017/07/18 Service Dev Meetup #1 の資料です。 会場は Speee さんに提供していただきました。ありがとうございました。 自己紹介 FUJI Goro / @__gfx__ ビットジャーニーのエンジニア 最近のスコープ: Ruby on Rails / TypeScript / React / GraphQL 情報共有サービス Kibela を開発してます 最近の発表: RailsエンジニアがReactを始めてSSRとReduxとTypeScriptを導入するまで 今日の話 Kibelaにおける技術選定とは やらないこと やったこと これからやること Kibelaにおける技術選定とは 自分(@gfx)にとっては技術的挑戦は精神衛生上必要なこと 興味のある分野に限るが… スタートアップにとってはサービスの成長が最も重要 技術的挑戦によって機能を磨いて差別化に
id:gfx です。Roppongi.rb #3 に登壇する機会をいただいたので、最近のKibelaのフロントエンドについて発表をいたしました。 RailsエンジニアがReactを始めてSSRとReduxとTypeScriptを導入するまで | bitjourney Kibela イベントページ: Roppongi.rb #3 “Rails x Frontend-Tech” - connpass (当日は開発中のKibelaのプレゼンテーションモードで行ったため色々不都合があり、ご迷惑をおかけしました。) 書きたいことはほぼ書ききったので特に補足することもないのですが、最近はReactにはだいぶ慣れてきて、Hypernova SSRも安定して運用できています。最初は開発が難しいのではないかという懸念もありましたが、現状はほぼ定形どおりの対応でReact componentの開発ができていま
井原(@ihara2525)です。 サブドメインでデータを分けたい(例えばhttps://bitjourney.slack.comみたいな)場合、RailscastsにあるMultitenancy with Scopesみたいに実現するのもありですが、その中でも参照されている、apartmentというgemを使うと、一つのRailsアプリケーションから複数のDBを扱う実装が、簡単にできそうです。 まずGemfileにapartmentを追加してbundle。 Gemfile source 'https://rubygems.org' do ... gem 'apartment', '1.0.0' ... end apartmentの設定ファイルをつくります。 rails g apartment:install config/initializers/apartment.rbがつくられるので
出口 (@dex1t) です。 現在開発中のサービスでは、Railsを使いつつ、React.jsを導入しています。 React.jsを使うと必然的にBrowserifyなどのnpmのエコシステムを、Railsプロジェクトに取り入れることになります。 そうすると、Railsプロジェクトであっても、npmで管理するライブラリが増えていきます。今回はそのアップデートを自動化してみました。 CircleCIで Gemfile.lock を定期更新する 本題に入る前に、bundle updateの自動化について触れます。 ググると、やり方はいろいろ出てくるのですが、 開発用のサーバからcronで定期的にCircleCIのAPIを叩く circle.ymlのdeploymentセクションで、スクリプトを実行する そのスクリプト内で、bundle updateの実行と差分をプルリクエストする というのが
井原(@ihara2525)です。 (引き続きめちゃ小ネタです) 「CircleCIでElasticsearchのログが吐かれていない問題を修正する」でタイトル通りCircleCIでElasticsearchのログが吐かれるようになったのですが、その対応だと/var/log/elasticsearchディレクトリの権限を変更してあげたりする必要がありました。 /var/log/elasticsearchにログを吐く設定がこのコミットで入っていて、同時にpath_logsというオプションで場所を指定できるようになっています。 /tmp以下には書き込めるだろうということで、以下のようにクラスタを立ち上げてあげると良さそうです。 Elasticsearch::Extensions::Test::Cluster.start(path_logs: '/tmp/log/elasticsearch')
井原(@ihara2525)です。 RSpecでActionMailerのdeliver_later!が呼び出されることをテストするコードを書いてみます。 コメントがあったときにメールで通知するサービスオブジェクトをつくり、それは中でActionMailerのdeliver_later!等を呼び出しているとします。こんな感じ。 app/services/comment_notification.rb class CommentNotification def initialize(comment) CommentNotificationMailer.notify(comment).deliver_later! end end このサービスオブジェクトをnewしたときに、これらのメソッドが呼び出されることを保証するRSpecのテストを書こうとしてみました。 spec/services/com
井原(@ihara2525)です。 以前RSpecでElasticsearchを使ったテストを書くというエントリの中で、 before do Post.__elasticsearch__.create_index! force: true Post.__elasticsearch__.refresh_index! page Post.import # Wait test cluster to index the created objects sleep 1 end みたいなコードを書いていたのですが、いろいろと間違っていました。 まずimportがインデックスをつくってくれるので、 before Post.import # Wait test cluster to index the created objects sleep 1 do でOK。 そしてsleep 1しているのはここにも
井原(@ihara2525)です。 omniauth-google-oauth2を使ってログイン機能を実装する際に、Google Appsの特定のドメインのユーザのみにログインを制限するので、アカウントを選ぶ画面を出して欲しくない、みたいな場合、以下のようにhdにドメインを指定してあげると良いようです。 config/initializers/omniauth.rb Rails.application.config.middleware.use OmniAuth::Builder do options = { prompt: 'consent', hd: 'example.com } provider Rails.application.config.auth, ENV['GOOGLE_CLIENT_ID'], ENV['GOOGLE_CLIENT_SECRET'], options en
出口 (@dex1t) です。 ベクター素材をSVGスプライト化し、インラインSVGとして利用する仕組みを作ったので紹介します。 アイコンフォントかSVGか アイコンフォントとSVGの違いは、ググるとたくさん出てくると思うのですが、 現在開発中のサービスはモダンブラウザのみ対象にしている SVGのまま利用すれば、フォント化する手間がなく管理もしやすい 多色にも対応できる という点から、今回はSVGを利用することにしました。 SVGを利用する方法もいくつかありますが、今回はSVGをスプライト化し、Inline SVGとしてHTMLに埋め込む形を取ることにしました。 デザイナーにSVGを追加更新してもらいたい いまはサービスをガンガン開発してる段階なので、素材の追加や変更も多く発生します。 ベクター素材は、デザイナーがイラレ上で作っているので、書き出しからSVGスプライト化まで一貫してお願いで
井原(@ihara2525)です。 今つくっているRailsアプリケーションのデプロイにはCapistrano 3を使っています。 slackistranoというgemを使うとデプロイの開始や終了を簡単にSlackに通知できるようになるのですが、終了の通知にgitの最後のコミットの内容とそれへのリンクが含まれるように、ちょっとカスタマイズしてみます。 通知されるようにする設定自体は、slackistranoのREADME通りにやればさくっとできると思います。 で、slack_msg_finishedという値でデプロイ終了時のメッセージを設定できるようなのでそれを変更します。 config/deproy.rb set :slack_msg_finished, -> { "#{ENV['USER'] || ENV['USERNAME']} has finished deploying bran
エンジニアの出口 (@dex1t)です。 プルリクエスト毎に、コードの品質をチェックしてくれるHound CIですが、 Privateリポジトリ毎に、$12/Monthとちょっとお高い 自前のカスタムCopを使いたい ということで、自前でホスティングしてみました。Hound自体は、こちらで公開されています。 Houndを手元で動かすにあたって、基本はこちらのドキュメントに沿って進めていけばいいのですが、いくつかハマりどころがありました。 template0を明示する Houndに限ったことではなくPostgresqlの環境によりますが、template1がUTF8以外で作られている環境では、 rake db:createに失敗することがありました。 config/database.ymlにtemplate: template0を明示してあげる必要があります。 Stripeのアカウントを用意
井原(@ihara2525)です。 以下のようにElasticsearchを使って検索するアクションがあり、RSpecでこのコントローラスペックを書きたい!という場合にどうしようって話です。 class PostsController < ApplicationController def search @records = Post.search(params[:query]).page(params[:page]).records end end Gemfileにelasticsearch-extensionsを追加します。バージョンは適当なもので。 このgemがデフォルトで9250ポートで立ち上がるテスト用のElasticsearchのクラスタを用意してくれるので、9200で立ち上がる開発用のクラスタとかぶりません。 Gemfile group :test do gem 'elast
このページを最初にブックマークしてみませんか?
『Bit Journey's Tech Blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く