EatSmartシステム部ブログ

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

Windows10でドメインから抜ける方法について

今回は、Windows10でドメインから抜ける方法について紹介します。 Windows10でドメインを抜けてワークグループに参加するとドメインのアカウントは利用できなくなります。 その為、ローカルPCに管理者権限のアカウントを準備しておく必要があり、ワークグル…

rcloneによるファイルアーカイブ

以前、以下の記事 eatsmart.hatenablog.com で、Googleドライブをストレージとして使うためにgoogle-drive-ocamlfuseやrcloneを試したのですが、最終的にrcloneを使うことにしたので、セットアップについて記事にしたいと思います。 インストールについては…

Shadow DOMのclickイベントを取得する

Shadow DOMの要素がクリックされたことを記録することになり、試行錯誤した記録です。 記録する対象はrss-listという名前のコンポーネントです。 イベントを記録するrecoreEvent関数へevent変数を渡していますが、event変数の中身がShadow DOMとなっておりク…

PostgreSQLのバックアップ処理で使用するディスク容量を減らす工夫

イートスマートが提供するサービスでは、データベースにPostgreSQLを利用しています。 レプリケーションを行うことで冗長性を確保することに加え、毎日バックアップを作成しています。 このバックアップを作成する処理が使用するディスク容量が増えてきたの…

Reactでのページ離脱時のメッセージ表示について

現在Reactで管理画面系のフォームを作っているのですが、少しややこしい画面構成 + 使う人のリテラシーが高くない、という状態なので、フォームをsubmitせずにページ離脱しようとした場合、確認メッセージを表示しようということになりました。 画面遷移時の…

Googleフォームの回答を複数ユーザーへメール通知する方法について

通常、Googleフォームに回答があった場合に作成したオーナーにのみメール通知を設定することが可能です。 また、複数のユーザーで通知を受け取る場合、GASの設定を行えば可能ですが、若干コーディングが必要な為、それ以外の方法がないか調べたとろこスプレ…

ubuntu serverからSAKURAのVPCルーターへのL2TP/IPsec接続

現在、訳あってオフィスにあるノートPCにubuntu serverをインストールし、SAKURAのVPCルーターへL2TP/IPsec接続の設定をしています。 CUI環境でややこしい設定できるのか?と心配していたのですが、下記の記事に書いてある通りNetworkManager-L2TPとnmcliを…

Amplify プレビューで割り当てられたURLを参照する

AWS

認証に Auth0 を利用する場合、戻り先のURLを指定する必要があります。 本番環境なら固定されたURLを指定することが出来ますが、Pull Request ごとに Amplify プレビューを利用する場合はURLを固定することが出来ません。 このため、ビルド処理で割り当てら…

ファイルサーバーからGoogle共有ドライブへの移行について(後編)

前回紹介した内容の後編として「移行準備」「移行作業」「移行後の運用状況」を紹介して行きます。 eatsmart.hatenablog.com 移行準備 移行準備として以下の作業を行いました。 アクセス権の整理 ユーザ(社員)毎にどの共有ドライブをアクセス可能とするか…

React + Highcharts で Client side export を行う

Highcharts で作成したグラフをPNGへ出力する際に、フォントの指定が反映されない現象に悩まされました。 出力する際のフォントの指定は以下のように行います。これが反映されません。 exporting: { chartOptions: { chart: { style: { fontFamily: 'フォン…

nginxのconfで環境変数を利用する

Dockerコンテナで動かすnginxの設定ファイルでホストのIPアドレスを参照する必要があったので、方法を調べました。 まずnginxの設定ファイルを用意します。 参照したい環境変数を"${HOST_IP_ADDRESS}"のように記述します。 proxy_pass http://${HOST_IP_ADDR…

LinuxからGoogleドライブをストレージとして使うために

Linuxサーバー上にある、数が多く容量を必要とするけどすぐには使わないファイルたちを、Googleドライブをストレージとして格納しておけないか検討をしています。 ファイル自体は日々追加更新されるので、現在はストレージ用サーバーにrsyncしているのですが…

ファイルサーバーからGoogle共有ドライブへの移行について

今回はオンプレで運用してるファイルサーバーからGoogle共有ドライブへ移行を行った際のナレッジを紹介します。 移行先選定 まず、ファイルサーバーの移行先をどこにするか選定作業を行いました。 候補としては、クラウドストレージ(Amazon S3/DropBox/One D…

SeleniumでE2Eテストを自動化する

SeleniumでE2Eテストを自動化してみました。 きっかけは、Google Analytics 4を導入したタイミングで既存のJavaScriptの処理に不具合が発生したことで、これを検出することが目的です。 環境構築 必要なライブラリをインストールします。 テストには以前node…

Dockerコンテナが利用するDNSを指定する

先日ステージング環境が稼働するサーバの障害が発生したため、再構築を行いました。 以前は複数台に分かれていたものを、リソースに余裕のある1台に集約しました。 構築自体は本番環境と同様にansibleで実行したので、特に問題無く終わりました。 作業が終…

さくらインターネットのオブジェクトストレージを利用した動画配信

イートスマートが運営する料理教室情報サイト「クスパ」では、昨年からレッスン動画のサービスを開始しました。 cookingschool.jp パン・お菓子・料理の動画レッスン|料理教室検索サイト「クスパ」 サービスの成長に伴い、当初用意したストレージの残量がわ…

Github Actions でブランチのワークフローを手動で実行する

AWS

いま作業しているプロジェクトで、ブランチのワークフローを手動で実行する必要があったので、方法を調べました。 ワークフローを作成する まず、ブラウザ上からワークフローを作成します。 仮に"test"という名前のワークフローとします。 この時点で、メイ…

印刷用CSSでの改ページ指定

弊社サービスの管理機能で、お客様向けのレポートをPDF出力する機能があるのですが、レポートの内容をHTMLで組み立て、CSSで印刷用のレイアウトを指定して出力をしています。 基本的にはtableタグで表を組み立てているのですが、PDFで出力した際に表の項目単…

subqueryで複数項目を取得したい場合(PostgreSQLでLATERALを使う)

SQLで複雑なクエリを作っていると、メイン・テーブルの1行に対して、サブ・テーブルの集計した値を使用したい場合に、 SELECT main.id, main.name, AVG(sub.value) as average_value FROM main_table main INNER JOIN sub_table sub ON main.id = sub.id GRO…

AWS Lambda で非同期に処理を実行する

AWS

先日、AWSを利用した開発を経験することが出来ました。 Lambda関数を利用してAPIを実装していますが、時間のかかる処理を分離する必要がでてきました。 どのような方法があるのか調査したところ、方法を2つ知ることが出来たので、書き残したいと思います。 …

API Gateway + Lambda でAPIの関数をステージごとに切り替える

AWS

API Gateway を利用して API を実装するなかで、呼び出すLambda関数をステージごとに切り替える必要が出てきました。 /example というリソースに対して、本番環境とステージング環境で別の関数を呼び出せるようにします。 関数の作成 本番環境用と、ステージ…

Googleアナリティクスでのログインユーザー動向分析について

今回は自社で運営してるサイトのログインユーザー動向をGoogleアナリティクスで分析を行った際のTipsを紹介します。 ログインユーザー情報の取得 現在運用しているサイトは、GoogleタグマネージャーとGoogleアナリティクス(GA)のUser-ID機能を利用してログイ…

Docker Desktop for Windows でコンテナに割り当てられるIPアドレスを変更する

Windows で Docker を利用した開発環境を構築するため、Docker Desktop for Windows をインストールしました。 Docker コンテナとして作成したアプリから開発環境のデータベースに接続を試みましたが接続出来ません。 コンテナに割り当てられるIPアドレスが …

PostgreSQLの配列型を利用する

リレーショナル・データベースで、例えば1つの商品に対して複数のタグを紐付けるような場合、関連テーブルを作成すると思います。 以下のように、商品IDとタグを組み合わせたテーブルになります。 商品ID タグ 1 スイーツ 1 抹茶 2 スイーツ 3 アイスクリー…

アドセンス のレスポンシブ広告ユニットの高さ・幅指定

弊社のサイトの広告表示にGoogleのアドセンスを使っているのですが、スマートフォン用のサイトの場合、広告ユニットのサイズを指定せずにレスポンシブで使うことが多いです。 ただ、いくらレスポンシブと言っても、広告を掲載したいエリアの大きさを指定した…

SMTP経由でのメール送信時の文字数制限及び対処について

あるフォームで入力文字数の拡張を行い、その内容をSMTP(postfix)経由でメール送信したところ1000文字付近で文字化けが発生しました。 そこで、本内容についての原因及び対処方法を紹介します。 SMTPの1行あたりの文字数制限について メールサーバ間でやり取…

nginx の X-Accel-Redirect を試す

先日Twitterを眺めていたところ、"X-Accel-Redirect"というキーワードが目に止まりました。 調べてみると、バックエンドのレスポンスからnginxで内部リダイレクトを行う仕組みであり、用途としてはバックエンドで認証を行いnginxにコンテンツ配信を任せるこ…

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

だいぶ前の記事の続きになりますが、以前GAMの広告枠の基本的な実装方法と、ページをテンプレートで分割・再利用している場合の問題点を説明しました。 eatsmart.hatenablog.com 弊社では、defineSlotの空呼び出しが発生しないように実装しているので、紹介…

postgresqlでのbooleanの判定について

あるテーブルでboolean型のカラムに対して以下の様にselectしてみたところ期待した(NULLのレコードも含めた)結果が返却されませんでした。 SELECT * TABLE_NAME WHERE COLUMN_NAME <> TRUE; 上記に対して、boolean型のカラムにデフォルト値(TRUE or FALSE)を…

日次サマリデータから週次・月次グラフを出力する

SQL

WEBサービスのページごとのアクセスや、ユーザーの行動の数を日毎にまとめたサマリテーブルから、グラフを出力することになりました。 グラフを出力するにあたり、ロジックではなくSQLを工夫することで、週次・月次のデータを作ってみました。 週次グラフ 今…