LCL Engineers' Blog

夜行バス比較なび・格安移動・高速バス比較を運営する 株式会社LCL開発者のブログ

パフォーマンス計測ツール:SpeedCurveの使い方

フロントエンドエンジニアの岡田です。今回は、パフォーマンス計測ツール:SpeedCurveをLCLでどのように使っているかお伝えします。 設定について 計測タイミング(Times) 計測タイミングは多いに越したことはないとは思いますが、コストとのバランスで、今…

Baltoを利用して素早くサービスを改善する

LCLでは、今年の初めから開発フィードバックのツールとしてGoodpatch様のBaltoをメインで活用しています。 先日、Goodpatch様へ事例として取り上げていただきましたが、より具体的な利用方法について紹介します。 goodpatch.com Baltoとは Webサイトやモバイ…

AWS EC2 パラメータストアを利用した秘匿情報管理

DBの接続情報・APIキーなどの秘匿情報は、git管理下に置くべきではないですが、皆さんはどのようなに管理しているでしょうか? 先日のAWS Summit Tokyo 2017のDMM様の事例で、EC2 System Managerパラメータストアの紹介がありましたので、使ってみました。 …

パフォーマンス計測、はじめました(フロントエンド編)

フロントエンドエンジニアの岡田です。 LCLでは、フロントエンドのパフォーマンスを計測するために、SpeedCurveを導入しました。 speedcurve.com 検討した計測サービス 導入にあたっては、以下のサービスも検討しました。 最初は、RUM (Real User Monitorin…

Railsのデプロイ時にwebpackのビルドを実行する

夜行バス比較なび(https://www.bushikaku.net/)の一部はReact & ES2015で実装されています。Railsのデプロイとwebpackの連携について紹介します。

ES5からWebpack管理下の関数を呼び出す方法

フロントエンドエンジニアの岡田です。 先日ご報告したとおり、LCLが運営する「夜行バス比較なび」では、jQueryで作られたサイトをReactへ置き換えています。 techblog.lclco.com 記事を書いた後も細々と置き換えを進めていますが、ページ単位での置き換えは…

LINE botの返事をカルーセル形式にしてみました

フロントエンドエンジニアの岡田です。 先日作ったLINE botを改良しましたのでご紹介します。 techblog.lclco.com 前回の状態では、botはテキストメッセージを返すだけでした。 これでは開いてみるまでどんなヨガ動画かわかりませんし、候補が1つしかないの…

RailsでPaperclipを利用して、画像に透かし(ウォーターマーク)を付与する

弊社で運営している「バスとりっぷ」というメディアでは、Paperclipを利用して画像のアップロードを行っています。Paperclipでは、サムネイルの作成やリサイズ・背景色の変更などを行っていましたが、透かし(ウォーターマーク)の付与にも対応しました。 ww…

GitHubへのpush時に、featureブランチ環境を自動作成する

弊社では、作業中ブランチの動作を誰でも確認できる仕組みを用意しています。今回の記事では、導入背景から運用方法までを紹介したいと思います。 解決したかった課題 弊社のWebサービス開発では、GitHub Flowを採用しています。 GitHub Flowでは、masterへ…

RubyMineでよく使うキーボードショートカット

弊社が運営している夜行バス比較なび、格安移動のサーバーサイドは主にRuby on Railsで実装されておりエンジニアのほとんどがIDEにRubyMineを使用しています。 IDEは触れる時間が長いツールなので使いこなしたいし、楽をしたいですね。そんな時に重要なのが…

本番DBを開発環境に簡単にコピーする仕組み

こんにちは、エンジニアの森脇です。 弊社では、本番DBを開発環境にコピーして開発をしています。今回は、どのような仕組みで実現しているかを紹介します。 なぜ本番DBを利用するか cookpad様の記事でも言及されていますが、弊社でも全く同じ認識を持ってお…

スクロールするタブはスライダーのプラグインで実装できる

フロントエンドエンジニアの岡田です。 本日、夜行バス比較なびでは、プレミアムフライデー用の特集ページをリリースいたしました。 www.bushikaku.net こちらの特集でつかった、スクロールできるタブの実装についてご紹介します。 スマホ用のページの以下の…

プレミアムフライデーにヨガLINE botを作った話

フロントエンドエンジニアの岡田です。 先週の金曜日は、プレミアムフライデーでしたね。 LCLでも従業員全員が15時に退社しました。 premium-friday.go.jp 私は今回はどこへも出かけられなかったのですが、せっかく時間ができたので、LINE botをつくってみま…

BugsnagでRailsのエラーを漏れなく補足する

弊社では、以下のエントリで紹介したように、Bugsnagを利用してエラー監視をしています。 techblog.lclco.com 前回は、JavaScriptでの利用について紹介しましたが、今回はRailsでどのように利用しているのかを紹介します。 Bugsnagの選定理由 Railsのエラー…

自社サービスの常時SSL(サイト全体HTTPS)対応でやったこと

Webエンジニアの森脇です。 弊社では先日「格安移動」という自社サービスの常時SSL化(サイト全体HTTPS化)へ対応しました。 この記事では、常時SSL対応のためにやったことを紹介したいと思います。 idou.me なぜHTTPS化したか GoogleやApple等のHTTPS化への積…

JavaScriptのエラーをBugsnagで監視しています

フロントエンドエンジニアの岡田です。 先日、夜行バス比較なびを一部React+ES2015化しましたが、これに備えて、LCLでは昨年11月頃からBugsnagでJavaScriptのエラー監視を開始していました。 今回は、Bugsnagについて、簡単な説明と導入方法をまとめました。…

iOS/Androidアプリのリリースフローとチェックリスト

こんにちは、森脇です。 今回は、弊社でのモバイルアプリのリリースフローと、リリース時に利用しているチェックリストについて、可能な範囲でご紹介したいと思います。 リリースサイクル 決まった期間でのイテレーションを回しているわけではなく、次のリリ…

働き方を工夫して効率UP

フロントエンドエンジニアの岡田です。私の仕事は、勤務時間中はほぼPCの前にいなければなりません。そうなると、1日8時間は座って同じ姿勢を続けることになりますが、それは体に良くないそうですし、頭の回転も悪くなる気がします。 そこで、働き方を工夫し…

jQuery + Railsで作られた非SPAサイトを一部だけReact & ES2015で書き換えました

フロントエンドエンジニアの岡田です。 昨年末に、弊社のサービス:夜行バス比較なびの一部分をReactで書き換えました。 www.bushikaku.net 夜行バス比較なびのJavaScriptは、構築から3年以上たつこともあり、コードの見通しが悪くなってきています。 リグレ…

gradle-play-publisherを利用したGoogle Play申請の自動化

新年早々ですが、先日 Andriod版「高速バス比較 」アプリをリリースしました。 圧倒的なバス便の掲載数に、わかりやすい最安値比較、細かい条件での検索など、高速バス・夜行バスを探すためにはなくてないらないアプリです。 play.google.com なお、iOS版は…

Visual RegressionテストによるWebデザイン崩れの防止

明けましておめでとうございます。 エンジニアブログを初めて、ちょうど1年になりました。 去年はなんとか月に1記事が書ける程度でしたが、今年は月に最低5記事は書いていきます。 今年最初の記事としては、弊社で最近取り組んでいる「Visual Regressionテ…

リモートワークへの取り組み

この記事はリモートワーク Advent Calendar 2016 - Adventar 25日目の記事です。 弊社におけるリモートワークの事例や普段の取り組みを見波が紹介したいと思います。 基本的なルール 細かい部分は割愛しますが大まかには以下のようなルールで運用しています…

Bitrise + GradleでAndroidアプリのCI環境構築

弊社では、Bitriseを利用してAndroidアプリのCI環境を構築しています。まだまだBitriseを利用している事例は少ないので、簡単にご紹介いたします。 なお、Bitriseを利用したiOSアプリのCI環境構築については、以下の記事で紹介しています。 techblog.lclco.c…

Hubot + Jenkins + Mackerelを利用したデプロイの見える化

弊社では最近、今更ながらHubotを利用したデプロイを行うようにしました。 なぜ今更ながら取り組んだのかも踏まえて、構成などを簡単に紹介いたします。 導入の背景 Hubot導入前は、以下のような流れでデプロイを行っていました。 デプロイ担当者が、Google …

LCLエンジニアのオフィス環境

弊社は、今年の8月に勝どきにあるトリトンスクエア 40Fにオフィスを移転しました。 移転してから2ヶ月ほどたちましたので、今回は新オフィスを簡単に紹介したいと思います。 景色 40Fだけあって、東京湾を一望できます。目を休めるためにも、たまに眺めてま…

pgpool-IIでストリーミング・レプリケーションへ対応する

以下の記事に続いて、pgpool-II+ストリーミング・レプリケーション構成について紹介致します。 (だいぶ時間が空いてしまいましたが。。) pgpool-II 入門(インストールと簡易設定) - LCL エンジニアブログ 説明に利用する環境 PostgreSQL 9.4 pgpool-II 3.5…

Webブラウザへのプッシュ通知はpushnateを使うと簡単

フロントエンドエンジニアの岡田です。先月のHTML5 Conferenceに参加してから、プッシュ通知を試したくてしかたがなかったのですが、ようやくまとまった時間が取れたので試してみました。 最初は、Webサイトからプッシュ通知を送ろう! JavaScriptでのプッシ…

ESLintでnot definedが出るときに確認すること

フロントエンドエンジニアの岡田です。 弊社では現在、フロントエンド環境の見直し中です。 現在はjQueryが中心ですが、サービスを運用しながら、少しずつ以下の環境へ移行していく予定です。 Webpack + babel + ESLint(Airbnb)+ ES6 + React ひとまず開…

2016年 新規iOSアプリ開発で採用した技術・プロセス

弊社では、2016年07月に「高速バス比較」というiOSアプリをリリースしました。 www.bushikaku.net リリースして1ヶ月ほどたちましたので、本記事では、今回の開発で採用した技術・ツール・プロセスを一通りご紹介します。 言語 Swift 2.2を採用しています。 …

RubyでiTunes ConnectからiOSアプリのダウンロード数を自動取得する

iOSアプリのダウンロード数は、Appleから提供されいてるJavaのツールを使うことでiTunes Connect (以下 iTC) から自動取得できます。 今回は、それをRubyで行う方法をご紹介します。 手順 事前準備 iTCへの接続には、以下の情報が必要です。 iTCへログイン可…

iOSアプリ(Swift)へのGTM導入 & TIPS

弊社は、2016/07/25(月)に夜行バス・高速バスの最安値検索アプリ『高速バス比較』をリリースしました! www.bushikaku.net 今後は、本アプリで得た知見を随時公開していきたいと考えてます。 今回はまず、Google Tag Manager(以下GTM)の導入と多少のTIPSを紹…

もっと気軽にリファクタリングするために、BackstopJSを導入した話

フロントエンド担当の岡田です。 ある程度の期間運用しているWebサイトの場合、CSSがカオスになりますよね。 ちょっとした修正が全体に影響してしまうのがCSSの怖いところです。 弊社でも、Sass化したり、共通のCSSを変更したりする度に主要ページを目視チェ…

iOSアプリでデバッグ/テスト/リリース環境に応じてアプリを分ける

iOSアプリ開発において、接続先のサーバー等を切り替えた複数のアプリを用意するのは一般的かと思います。 弊社では、Debug版、Test版、RC版、Release版の4種類に分けています。 環境の種類 それぞれ以下の定義としています。 Debug版 開発者のシミュレータ…

Photoshop不要! ブラウザにPSDを重ねてコーディングする方法

フロントエンドエンジニアの岡田です。 弊社ではデザイナーとフロントエンドエンジニアで分業をしていることもあり、HTML/CSSコーディングの際にはデザインカンプ(PSD)にスクリーンショットを重ねて確認しています。 ですが、この作業、少し面倒ですよね… …

fastlane pemで、iOSのPush通知用証明書を自動生成する

各所で言われてますが、iOSのPush通知用証明書は作成手順が複雑です。 今回は、証明書を自動作成してくれる「fastlane pem」を紹介します。 pemがあれば、複雑な手順を全く覚える必要がなくなるので、非常に楽になります。 github.com 事前準備 App IDは事前…

Bitrise,fastlane,CrashlyticsでiOSアプリのテスト配布を自動化する

先日、Crashlyticsを利用したテスト配布について紹介しましたが、CIサービス + fastlane を利用して自動化にも対応しました。 fastlaneについては各所で紹介されていますので、本記事では比較的情報の少ないCIサービス(Bitrise)を中心に紹介します。 techblo…

pgpool-II 入門(インストールと簡易設定)

弊社のサービスには、PostgreSQL用のミドルウェアであるpgpool-IIを利用しています。 techblog.lclco.com pgpool-IIは非常に良いソフトウェアだと思いますが、多機能であり用途によって設定が異なるため、最初の導入が難解なのがネックです。 公式ドキュメン…

Google Chrome拡張機能で業務改善 入門編

フロントエンドエンジニアの岡田です。 業務改善大好きです。 LCLに入社してからは、Google Chromeの拡張機能でちょっと便利なツールを作っています。 Google Chromeの拡張機能は、HTML, CSS, JSで作るので、気軽に始められます。 今まで作ったツールは以下…

Fabric Crashlyticsで iOSアプリをテスト配布する

弊社ではモバイルアプリケーションのBeta配信に、Fabric Crashlyticsを利用しています。 Web上にいくつか記事がありますが、部分的な記載であったり、少し環境が古かったりするので今回まとめました。 2016年3月時点の最新環境である、下記の環境で試してい…

Varnishを導入して、急激なアクセス増に耐える

弊社で運営している「バスとりっぷ」というメディアに、キャッシュサーバとしてVarnishを導入しました。導入する上でハマった事・得たノウハウなどを書きたいと思います。 www.bushikaku.net Varnishとは Varnish は、リバースプロキシとして動作して、HTML…

New RelicのAlertをChatWorkに通知する

最近、New RelicのAlertの通知先をメールから、ChatWorkに変更しました。 Slack等と比較すると、ChatWorkは外部サービスとの連携が弱く、New Relicとの連携もなかなか面倒です。 数カ月前に、zapierというハブサービスが出てきたものの、無償版だと制限が厳…

PostgreSQLでWebサービスを運用するためにやっていること

弊社では、RDBMSにPostgreSQLを利用して数年間サービスを運営しています。 PostgreSQLはMySQLと違って、Webサービスでの運用事例をあまり見かけないので、今回は弊社サービスの「夜行バス比較なび 」でどのように運用しているかを紹介いたします。 システム…

開発者ブログ始めました

はじめに はじめまして、LCLでエンジニアをしている森脇です。 弊社では、「夜行バス比較なび」という高速バス・夜行バスの情報を比較できるサービスを運営しています。 夜行バス比較なびは、月間 150万人以上のユーザにご利用いただいており、夜行バスの比…