EatSmartシステム部ブログ

ウェブサイトの開発や運営に関する情報です。

2020-01-01から1年間の記事一覧

2020年を振り返って

怒涛の2020年も、もうすぐ終わりになります。EatSmart社システム部の2020年を振り返ってみたいと思います。 サービス的に取り組んできたこととしては、 1月 クスパ レッスン決済サービス開始 1月〜2月 もぐナビ月次ランキングサービス開始 3月〜6月 もぐナビ…

HTMLのプレビュー機能を作る

WEBサービスを運営していると、ユーザー向けのアプリ(以後"フロントエンド"と呼びます)のほかに運営向けのアプリ(以後"バックエンド"と呼びます)を作ることがあると思います。 イートスマートで提供しているWEBサービスでも、バックエンドがいくつか存在…

JavaScriptでファイルアップロード時に動画ファイルの総再生時間を取得する

動画ファイルをアップロードする際に、チェック等の用途で総再生時間が取得できないか検証してみました。 検証内容について 最初は、JavaScriptのFile APIで簡単に取得できるものだと思っていましたが、試してみたところ出来ませんでした。 そこで、色々調べ…

Reactのオブジェクトから、呼び出し元のJavaScriptを実行する

サービス内で、ページ内の一部の機能をReactで実装することがあります。 完全に独立した機能であれば、単体でReactの実装をすれば良いのですが、元ページにある要素と連携させたい場合があります。 その場合は、以下のように呼び出し元ページのJavaScript関…

JavaScriptで子ウィンドウから親ウィンドウを操作する

もぐナビの運営には、日々投稿されるクチコミの監視業務があります。 そこで利用しているWebアプリには、投稿された画像を編集する機能があります。 クチコミの一覧が表示される親ウィンドウから編集機能をもつ子ウィンドウが開かれ、画像の編集と保存を行い…

javaで文中のURLを個別にaタグ置換する

サービスの改善要望で、ユーザーが投稿する文中のURLを自動的にaタグに置換することになり、その実現方法について記載します。 文中のURLを一括でaタグに置換する 文中のURLを一括でaタグ置換する場合、正規表現で行うことができます。 private static final…

PostgreSQLのJSON型

業務で主にPostgreSQLを使用しているのですが、Ver9.2以降でJSON型というのが追加されたとの事で、少し使ってみました。 使い方 機能としては、 型(INDEXも使える) 演算子 関数 とあるのですが、今回はJSON型と演算子を使ってみました。 JSON型 公式のドキュ…

1つのリポジトリで2つのSpring Bootアプリを管理する

Webサービスを提供する場合、ユーザーにサービスを提供するためのフロントエンドと、データの閲覧や管理を行うためのバックエンドの2つWebアプリを作ることになると思います。 イートスマートでは、新規にWebサービスをつくる場合は主にSpring Bootを利用し…

Spring Boot + Thymeleaf でページネーションを実装する

業務のなかで一覧表示を実装することはよくあると思います 件数が多い場合はページあたりの件数を設け、複数ページに分割します Spring Boot を利用して開発を行っているなかで、この複数ページの分割を実現する仕組みを見つけたので利用してみました Pageab…

日別で保持しているレコードを行単位で月別集計してみる

表題のような集計をDBで行うに辺り、その変換方法を交えて記載していきます。 使用DBMS:PostgreSQL9.3.5 はじめに 今回は日別で保持している個々の予約データを、月別でレッスン形式毎に予約ユーザー数を集計し、その結果を行単位(横持ち)に変換するまで…

Spring Security で独自の認証処理を利用する

新規プロジェクトのため Spring Security を勉強しています。 そこで、既存のアプリケーションを移植してみることにしたのですが、ユーザーを認証する処理で躓いてしまいました。 移植を試みたアプリケーションでは、認証に利用するパスワードのハッシュ化に…

ヒアドキュメントについて

プログラム内に別のプログラムや長いテキストを埋め込む際に、文字列の結合やエスケープなど面倒な処理が必要となることが多いと思いますが、ヒアドキュメントを使うと楽になることを知りました。 と言いつつも、メインで使っているJavaでは13以降の機能のよ…

gitで管理するシェルの実行権限について

弊社では、Linuxサーバー上で使用するシェルをgitで管理しているのですが、Windowsで作業しているメンバーが「シェルに実行権限を付けた状態でgitにcommitできない」と言っていたので、調査をしてみました。 はじめは、「gitはファイル実行権限についてはリ…

FontAwesomeのplaceholder表示について

今回HTMLのplaceholderにFontAwesomeのアイコンを表示する方法を記事にしてみました。 FontAwesomeとは FontAwesomeとはWebでよく使用されるアイコンをフォントとして扱うことができます。 使い方はとても簡単で無料版も用意されており、必要なソース一式をF…

正しいインデックスを作成する

今回は、クチコミ検索のインデックスを設計するうえで失敗した話です もぐナビでは商品のクチコミを集めています 新たな機能としてクチコミ一覧ページて"追記順"でソートすることになりました この時に作成したインデックスが期待したように動かなかったこと…

http/httpsが混在する環境でのセキュアCookieの取り扱い

WEBサービスをhttpsで提供するのが当たり前になりました。 イートスマートのWEBサービスもhttpsへの移行を完了しています。 www.eatsmart.jp mognavi.jp cookingschool.jp そうした中で、社内向けツールで不具合が報告されました。 社内向けツールなので、ス…

VPN切替に伴う本番サーバー接続方法の変更について

5月上旬にインフラチームにてVPNの切替を行いましたが、切替前はVPN経由で本番サーバーへ接続出来ていましたが、切替後に接続出来なくなってしまいました。 今回はその経緯及び切替後の接続方法変更についてまとめてみました。 切替前後の構成 切替前はSSL-V…

データベースのバックアップ手順の見直し

今回は、前日実施したデータベースのバックアップに関することを書きたいと思います。 ディスク使用量の警告 イートスマートでは管理しているすべてのサーバをZabbixで監視しています。 ある日、イートスマートのデータベースとして利用しているサーバの、デ…

Postfixにたまった不要なメッセージの削除

MTAのPostfixに不正なサーバーから大量にメールを送られ、それに対して自動で返信しようとしてできなかった場合に、MAILER-DAEMONが再送しようとして輻輳することがありました。 それらを一度に削除することを試みました。 各コマンド 1. キューにたまったメ…

Spamhausにブラックリスト登録された場合の対処について

今回は、自社のSMTPサーバーがブラックリスト登録された場合の対処方法についてまとめてみました。 ブラックリストとは ブラックリストとは、DNSBL(Domain Name System Black List)と呼ばれ、こちらに登録されると各メールサービス(outlook等)から受信拒否…

テンプレートパーツで構成されるサイトのGoogleAdManager実装について

弊社のサイトは、ページ内の共通パーツをテンプレートとして作成し、ページごとに組み合わせて構成している実装が多いです。 また、ディスプレイ広告の配信には、GoogleAdManager(旧DFP)を使用していることが多いのですが、この組み合わせだと生じやすい問題…

Docker Registryのクリーンアップ

イートスマートでは、Dockerイメージを管理するため、ローカルネットワークにDocker Registoryを運用しています。 2018年にすべてのアプリケーションをDockerに移行してから約2年が経過し、ストレージの使用量が増加してきました。 今回は、Docker Registry…

Web会議を利用してみて

コロナ対策でテレワークを実施している方が多いのではないかと思います。 私も2月下旬からWFHの通達があり自宅で作業をする様になってから1ヵ月半程経ちますが、元々ノートPCやVPN等の環境が整備されていたため、勤務形態の影響を受けずにテレワークに移行…

複数ファイルのダウンロード

運用メンバーが利用するページを、イートスマートでは"バックエンド"と呼んでいます。 バックエンドでは、商品データの操作やクチコミの監視、ニュースの編集等の業務が行われています。 それらの業務のなかで、CSVをダウンロードするものがあります。 今回…

井桁と嬰記号

もぐナビの投稿について話をしていた時に、意外とハッシュ(#)とシャープ(♯)の違いに気づいていない人が多かったので記事にしてみました。 ことの起こり 先日、もぐナビニュースの記事コンテンツにコメントできるように機能追加をしました。 コメント内でハッ…

EXISTS句を使ったサブクエリについて

今回は、もぐナビのプロジェクトの実装で学んだことについてまとめていきます。 テーマは、EXISTS句を使ったSQLの振り返りです。 実装の内容 特定条件のクチコミを抽出する際に、任意のユーザーのlikeが既にある場合は 除外クチコミとしたいので、その判定に…

ImageMagickを使った画像縮小について

以前ディスク容量逼迫に伴に、jpegtranを使った画像最適化の記事を紹介しましたが、さらにディスクの整理が必要になり、今回はImageMagickを使った画像縮小方法について紹介します。 eatsmart.hatenablog.com ImageMagickとは ImageMagickは画像を操作したり…

データベースサーバのディスク枯渇への対処

2018年3月にデータセンターからさくらインターネットへ移行して、まもなく2年が経ちます。 移行に際しての計画から実施は下記に書かれています。 eatsmart.hatenablog.com クラウド・専用サーバを中心にVPSも併用していますが、データベースサーバに利用し…

ランキング作成時に使ったSQL手法

先日、弊社サービスのもぐナビで、食品ランキングのリニューアルを行いました。 prtimes.jp 今回は、ランキング構築等で使用したいくつかのSQL手法を共有したいと思います。 ちなみに、弊社で使用しているRDBMSはPostgreSQLです。 カテゴリ毎のランクの振り…

CSVのエクスポート処理とSQL

今回は、クスパのオンライン決済のプロジェクトの実装で学んだことについてまとめていきます。 テーマは、CSVのエクスポートと出力内容を取得するSQLの内容を振り返りです。 実現したい処理の流れ 簡単に概要ですが、下記のような仕様を実現します。 オンラ…