バックエンドエンジニアの高良です。LCLへの転職を機に沖縄から上京して早2年、地元と段違いの寒さにも段々と慣れてきました。ここ最近ではRailsでの開発に加え、インフラ周りのちょっとした調整などの作業をすることも増えてきました。その中で1点、実装方法の調査時に手間取った箇所があったので、解決のポイントを紹介しようかと思います。現在海外航空券では、SQS(FIFO)+Lambdaが連携したバッチジョブが動いています。こちらは1日1回の実行としているのですが、条件によっては実行時間が1日を上回ってしまい、必要な処理が1日で完了しきれないという問題が発生しました。userstechblog.lclco.comバックエンドエンジニアの星野です。東京オリンピック2020が開幕されましたね。LCLは移転前のオフィスがオリンピック選手村に近い勝どきにあったので選手に親近感を覚えます。Railsを採用しています。先日、Railsのアップデートや構成の更新をした際にCredential機能について見直す機会があったのでその知見を共有したいと思います。バックエンドエンジニアの星野です。今年のre:Inventは開催前の時点で大型のアップデート続いており本番で何が発表されるのか全く予想がつきません。LCLではこれまでRailsバッチジョブの実行基盤としてKuroko2を利用してきました。Kuroko2については過去の記事を参照してください。運用面で大きく2つの課題がありました。バックエンドエンジニアの星野です。最近、節電を意識して自宅のUbuntuサーバーを停止しました。夏真っ盛りですが、電気代の値上げで自宅サーバーにとっては冬の時代です。Railsで作成された社内向け管理画面のアップデートを実施しました。7リリース前後で登場した、importmap-railsとdartsass-railsを利用してフロントエンドツールチェインを更新しました。maps経由で読み込みように変更しました。Sassに乗り換えました。6.0以上で利用できるので最新のRailsではなくても利用できます。バックエンドエンジニアの星野です。このアドベントカレンダー同じ人しかいないって?気のせいです。LCLのバッチジョブ実行基盤解説記事の最後のエントリになります。Jobそのものについては解説しませんのでRailsガイドを適宜参照してください。Jobを使う場合はアダプターを選択する必要があります。SidekiqやResqueなどRedisをバックエンドにしたアダプターが人気がありますがRedisの管理をしなければならず、シンプルにperform_laterしたいだけの要件に対して大掛かりになりすぎることがあります。フロントエンドエンジニアのsatoshioです。先日弊社が提供しているバスツアー検索サービスでESLintおよびPrettierのバージョンアップ対応を行ったので、今回は対応の流れやそこで遭遇したエラーとその解決方法についてまとめます。対応開始時点でのESLintの最新バージョンはv8.4.1、Prettierの最新バージョンはv2.5.1のようです。リモートワークと外出自粛の組み合わせにより年の瀬をあまり感じていないバックエンドエンジニアの星野です。ECSを活用しています。APIと組み合わせて使う機会があったので紹介したいと思います。APIの違い、それによるVPCリンクの挙動違いについてはクラスメソッドさんの記事によくまとまっていましたので参考にしてください。システム構成図は次のようになります。フロントエンドエンジニアの川辺です。年末は毎年ソワソワしているのですが、私事ですが今年は12月末に子供が生まれる予定なので例年以上にソワソワしています。赤ちゃんを迎える準備に忙しい日々を送っています。Codeでデバッグする方法についてのドキュメントを見つけたので今日はそれを紹介しようと思います。create-next-appを実行してnextを開発する環境が既にできている前提で進めていきます。LCLのバックエンドエンジニアの古賀です。本記事の内容は以下のような方を対象にしたdockerの初学者向けの記事になっています。チームで使い始めて、ふわっと始めた方は最初が大変ですよね。以下の点で最初の一歩が難儀でした。バックエンドエンジニアの染谷です。LCLでは2018年4月から、バス比較なびやバスツアー検索サービスなどの開発に携わっています。普段使っている言語・フレームワークは下記の通りです。10を使用しています。Windowsでは2020年の中旬くらいにWSL2という機能がリリースされました。簡単にいうと「Macと同様のLinux開発環境がWindowsで構築できる」ものです。Windows開発環境の革命です。WSLの名を冠しますが、WSL1とは仕組みが全然違います。userstechblog.lclco.comこんにちは。環境しかありませんでした。そのため、以下のような事象が発生し、デリバリー速度が低下するという課題がありました。解決のためにチームで話し合い、ブランチ毎に環境があれば、待ちも発生せず、作りかけの時点で確認してもらうこともできる。userstechblog.lclco.comAndroidアプリ兼バックエンドエンジニアの高橋です。弊社のサービス「バス比較なび」では、たくさんのバス会社さんから頂いた高速バスデータを掲載していますが、バス会社さん間での「データの揺れ」が課題の一つとしてあります。バスの「停車地」には以下のような表記揺れがあります。Mapにマッピングしようとしても、難しいですよね。実は、弊社ではこれまで手作業によってこういった名称を「名寄せ」しています。userstechblog.lclco.comWebエンジニアの森脇です。LCLでは、DB設計変更で、DBマイグレーションをする際にシステム障害を回避するためのいくつか工夫をしています。今回は、その内容を簡単にご紹介いたします。原則、migrationのブランチは独立させるようにしています。migration実行後も既存コードで正常稼働するように、migrationを作成します。以下にケース別の手順を紹介します。テーブルの新規作成は特に意識することはありません。userstechblog.lclco.comバックエンドエンジニアの横塚です。Railsで中規模以上のサービスを運用していると、大量のレコードやcsvをバッチで処理したい場面などが出てくると思います。DBからデータを取得してきて処理をしたい場合、eachで処理しようとすると対象データがすべてメモリに展開されてしまいますが、find_eachは1行ずつメモリに展開するため、レコード数を気にせず処理をすることができます。userstechblog.lclco.comAndroidアプリ兼バックエンドエンジニアの高橋です。GW終わってしまいましたね。Robotという海外ドラマを見たりして時間を潰しました。この話が理解できるくらいの(ホワイトな)ハッカーになるべくこれから精進してまいります。入社してから2週間ほどAndroidアプリ版バス比較なびの開発をこなしてきたので、Androidの技術的な話がブログに書けるようになってきました。今回はアプリのアーキテクチャをMVVMにしたという話をご紹介します。現状のアーキテクチャを大雑把に図にすると、こんな感じになっています。userstechblog.lclco.com最近は花粉を避けるためにMTGがある日以外はリモートワークにしています。モバイルアプリエンジニアの山下(@yamshta)です。Wikiを合体させたようなサービスです。非常に多機能ですが、デザインはシンプルで精錬されています。Markdownが使え、Emojiを見出しで表現できるところがエンジニアには親しみやすいです。はじめにNotionを知ったのは、イケてるプロダクトツールとドキュメントツールを探している時で、機能の多さと日本語対応していないことからチームで使うにはハードルが高いと思い、試していませんでした。userstechblog.lclco.comこんにちは。userstechblog.lclco.comWebエンジニアの横塚です。皆さんは情報共有ツールは利用しているでしょうか。LCLエンジニアチームでは先日、以前から利用していたQiita:Teamからesa.ioに移行することにしました。移行の背景と、実際に移行してみてどうだったかを簡単に紹介したいと思います。LCLでは、システム仕様や、共有しておきたい知見、定例MTGの議事録などをQiita:Teamの記事に溜めてきました。記事には必ずタグ付けをしておき、関連記事はタグで検索できるようにしていました。記事が増えていくにつれ、その運用も限界を迎えていました。記事が増えすぎた結果、タグが形骸化し、キーワード検索をするしかない状況になりました。userstechblog.lclco.comモバイルアプリエンジニアの山下(@yamshta)です。LCLでは今年の1月にエンジニアブログ編集部を立ち上げ、『継続』を目標に1年間アウトプットし続けてきました。この記事は66本目となり、この投稿数は前年の約2倍となります。個人としては22本を執筆することができ、執筆以外にも編集部の取り組みとして、他のメンバーへの執筆依頼や記事の校正にも挑戦しました。執筆依頼は、普段ブログを書き慣れていないメンバーにもお願いするため、読者が読みやすい記事をスムーズに執筆できるように、個人的に気をつけていることを執筆ガイドラインとは別に共有しました。今回は、その内容をこちらでも紹介したいと思います。個人的な趣向に偏ってしまうため、あくまで参考程度に受け取っていただければと思います。userstechblog.lclco.comWebエンジニアの古賀です。LCLでは、障害対応の強化の一つとして多機能な通知機能を持つPagerDutyを導入しました。組織的な対応シフト・フローが組めるようになり、精神的にとても安心できるようになったので紹介させていただきます。LCLでは、Mackerelを利用して各サーバの監視しており、障害が発生するとチャットでエンジニアへTO(メンション)で通知をしていました。この運用方法では、以下のような問題がありました。userstechblog.lclco.comWebエンジニアの川辺です。スプレッドシートを操作する際に使用したnode-google-spreadsheetの紹介をしたいと思います。コード上からGoogleスプレッドシートを操作するため、シートへアクセスを許可するための準備が必要です。それでは順を追って進めていきます。アクセスを許可するための認証情報を作成するためにまずプロジェクトを作ります。アクセスし「プロジェクトを作成」をクリックしブロジェクトを作成します。プロジェクトを作成するとこの画面が表示されます。プロジェクトが複数ある場合は今回作成したプロジェクトに切り替えてください。userstechblog.lclco.comモバイルアプリエンジニアの山下です。先日の記事ではデプロイ基盤を構築し、Fargateへ自動デプロイすることができました。これによりEC2の操作を意識することなく、柔軟にコンテナ数をスケーリングできるようになったのですが、LCLの用途として一つ課題がありました。Fargateはデプロイするたびにコンテナを作り変えるため毎回IPが変わってしまいます。LCLでは各サービスでステージング環境やテスト環境を用意しており、これらは認証サーバを経由してアクセスするようにしています。そのため、認証サーバ上のnginxの設定に参照先のIPをセットしているのですが、このままではデプロイされたタスクのIPを毎回手動で変更しなければいけません。これではデプロイ自動化どころかFargateを運用することが難しいです。userstechblog.lclco.comフロントエンドエンジニアの岡田です。10月27日から一週間は、読書週間だそうです。以前ブログでもご紹介しましたが、エンジニアチームでは輪読会を行っています。この輪読会を、他のチームにも広げてみたら良かったので、まとめました。最初は、マネジメント系の本を読む会にするつもりだったので、メンターをしている人・する可能性がある人に声をかけて集めました。メンバーは以下の5名です。userstechblog.lclco.comWebエンジニアの川辺です。今回はChromeのデベロッパーツールでスマホ表示を維持したまま別タブに遷移するという、ちょっとした便利ワザを紹介しようと思います。Iキー(Windowsの場合はF12キー)でデベロッパーツールを開きます。デベロッパーツールの右上の設定メニューから「Settings」を選択します。popups」という設定項目があるのでチェックを付けます。これでページをリロードをすると設定が反映されるため、別タブへ遷移するリンクを開いても新しいタブでデベロッパーツールが開かれるようになりました。userstechblog.lclco.comモバイルアプリエンジニアの山下(@yamshta)です。今回は、AWSの以下のサービスを用いてコンテナデプロイ基盤の構築を試してみました。AWSのドキュメントは丁寧で情報も豊富ですが、サービス毎に手順が書かれているため一連の流れをまとめました。CLIでの操作のみで手順を進めています。疑問に思った方もいらっしゃると思うので手短に書かせていただきます。LCLのエンジニアチームはスペシャリスト集団というよりはゼネラリスト集団に近く、特定の技術に縛られない文化とそれを推奨する環境になっています。そのため、メインに扱う技術力も伸ばしながらも別の技術を習得することができます。今回の経緯ですが、私個人としてはインフラには興味がありませんでした。userstechblog.lclco.comWebエンジニアの森脇です。LCLでは、Capitranoを利用してRailsアプリケーションのデプロイを行っていましたが、「capistrano-bundle_rsync」を利用する方式に変更しましたので、背景含めて紹介いたします。capistranoを利用したデプロイでは、デプロイサーバではcapistranoを実行し、各Webサーバへsshでログインし、各種デプロイ関連処理を行います。このデプロイ方式では、以下の問題がありました。デプロイ時間が、Webサーバのスペックへ依存してしまう。install,precompileを行い、各Webサーバにrsyncで配布する方式に変更しました。userstechblog.lclco.comWebエンジニアの森脇です。現在、障害通知の最適化を進めており、その第一弾としてMackerelのアラートグループ機能を利用して、障害通知の抑制をしました。手軽に実現ができ、便利だったので紹介します。LCLでは、Mackerelを利用して各サーバのメトリクス監視やサービスの外形監視をしています。アラートが発生するとチャットへ通知していますが、大規模な障害発生した場合は、以下のようにアラート通知でチャットが埋まってしまっていました。チャットがアラート通知で埋まってしまうことにより、障害対応の妨げになる問題が多く発生していました。userstechblog.lclco.comWebエンジニアの森脇です。LCLでは、普段使わないテストサーバなど常時稼働が不要なEC2インスタンスは、必要に応じて手動で起動・停止する運用にしています。停止を忘れて起動したままになっているということが、時々発生してしまっています。CLIの勉強会を兼ねて、停止忘れを防止する仕組みを作りました。CLIを利用して、常時稼働が不要なインスタンスのステータスを定期的に取得し、"起動中"であればチャットへ通知します。spot」というタグを付与しました。CLIで対象インスタンスで稼働中のインスタンスのみを抽出します。userstechblog.lclco.comフロントエンドエンジニアの岡田です。LCLではフロントエンドエンジニアがマークアップも担当しており、画像の圧縮もエンジニアが行っています。画像圧縮、面倒ですよね。いままでいくつか自動化を試しましたが、どれも長くは続きませんでした。画像が圧縮されているかは、GitHubのプルリクエストでは確認しにくいこともあり、どうにかして自動化したいと思っていました。そこへ同じチームのメンバーからLIGさんの記事を教えていただき試してみまして、本格運用することになりました。Reserved.設定を変更しましたx。