2020年11月29日日曜日

macOSでminikubeをインストールしようとしたら書き込みエラーになった

ローカル環境でKubernetesを使えるようにしようと環境構築中にエラーが

下記が今回のエラーで書き込みできない感じのメッセージが出ています。

 $ brew install minikube
Updating Homebrew...
Error: The following directories are not writable by your user:
/usr/local/lib/pkgconfig

You should change the ownership of these directories to your user.
  sudo chown -R $(whoami) /usr/local/lib/pkgconfig

And make sure that your user has write permission.
  chmod u+w /usr/local/lib/pkgconfig

メッセージを読んでいくと、「/usr/local/lib/pkgconfig」のディレクトリの所有権を自分のユーザに変更しろとあるので、コマンドを実行

$ sudo chown -R $(whoami) /usr/local/lib/pkgconfig

次のメッセージはパーミッションを書き込めるように変更とあるのでこれも実行。

$ chmod u+w /usr/local/lib/pkgconfig

2つのコマンドを実行してから、もう一度インストールコマンドを実行すると、無事に成功しました。

簡単なエラーで良かった。。

2020年10月25日日曜日

GASで便利なGoogle AnalyticsのCore Reporting APIのフィルター演算子

Google Analytics (GA) のCore Reporting APIでデータを抽出するときに使うフィルタの演算子が気になったのでまとめてみました。


最初は指標のフィルタで使える演算子です。


■指標

演算子 説明
== 次と等しい
!= 等しくない
> 上回る
< 下回る
>= 以上
<= 以下

次がディメンションの絞り込みで使える演算子

■ディメンション フィルタ
演算子説明
==完全一致
!=一致しない
=@文字列の一部に一致
!@文字列の一部に一致しない
=~正規表現の一致を含む
!~次の正規表現に一致する場合を除く

部分一致の方法がよくわからなくて調べたのがきっかけだったので、これを覚えてスムーズにフィルターの抽出をできるようにしたいと思いました。

■ドキュメント
https://developers.google.com/analytics/devguides/reporting/core/v3/reference?hl=ja

2020年7月21日火曜日

EC-CUBE4でリピーターの取引を集計する方法

EC-CUBE4でデータを集計することが増えてきたので、今回はリピーターの取引がどのくらいあるかを集計する方法をまとめてみようと思います。

前提

今回はDBに直接アクセスしてSQLを実行する方法で説明します。

リピーターとは

リピーターとは、同じサイトで1回以上購入をしているユーザのこと。

リピーターの定義をもとにデータの抽出条件を考えていきます。

集計条件

下記の条件を満たしていれば、リピーターの購入ということにしたいと思います。

  • 初回購入日時が注文日時よりも前の取引
  • 取引状態が購入完了後のステータスになっている取引

利用テーブルについて

EC-CUBE4のデフォルトのDB情報は下記のドキュメントに掲載されているので、参考にしながら進めていこうと思います。



初回購入日時が注文日時より前か判断する方法

dtb_customerテーブルのテーブル定義を確認すると、「first_buy_date」というカラムがあることがわかるので、このデータが注文日時より過去の日時になっていれば、リピーターということになります。

注文日時については、dtb_orderテーブルに「order_date」というカラムがあるので、これを使います。

取引状態を絞り込む方法

取引状態については、dtb_orderテーブルに「order_status_id」というカラムがあるのでこれを使います。「order_status_id」は、mtb_order_statusテーブルにマスターデータとして格納されています。

mtb_order_statusテーブルの説明を読んで、購入完了以降のidを選んでつかいます。今回は、1、4、5、6、7を使ってみようと思います。


リピーター取引抽出SQL

下記のSQLを実行することで、年月ごとにリピーター取引の数を集計できるようになります。

SELECT
  DATE_FORMAT(o.order_date, '%Y-%m') AS ym,
  COUNT(o.id) AS order_cnt
FROM
  dtb_order AS o
  INNER JOIN dtb_customer AS c ON c.id = o.customer_id
WHERE
  o.order_date > c.first_buy_date
  AND o.order_status_id IN (1,4,5,6,7)
  AND o.order_date BETWEEN '2020-07-01 00:00:00' AND '2020-07-31 23:59:59'
GROUP BY DATE_FORMAT(o.order_date, '%Y-%m')
ORDER BY ym ASC


集計対象の期間を変更したい場合は、「o.order_date BETWEEN '2020-07-01 00:00:00' AND '2020-07-31 23:59:59'」の日付を変更することで、集計対象の期間を変更することができます。

2019年9月28日土曜日

Postfixで特定メールアドレス宛のメールだけ送信するようにしたい!

開発環境のPostfixを構築しているときに、本番のデータでユーザにテストメールが飛んでしまうという事故を起こさないために、特定アドレスにだけを送信したかったので、設定を調べてみました。

調べてみたところ、header_checksで条件を書けば実現できることがわかりました。

$ vim /etc/postfix/header_checks
# Accept email address
/^To:.*@example.com/ OK

正規表現で指定できるので、いろんなパターンも指定できそう。 今回は「OK」で設定していますが、「REDIRECT」とかも使えるので、特定のものを他のPostfixとかにリレーするとかもできそうでした。

2019年9月10日火曜日

sendmailコマンドでEnvelope Fromを変更する方法

最近、sendmailコマンドでメールの疎通確認を行うときに、Envelope Fromを変更したいときがありました。

いろいろ調べた結果、-f オプションで変更できることがわかりました。

$ sendmail -t -f info@example.com
From: info@example.com
To: to@example.com
Subject: test
test

.

これで、無事に指定したEnvelope Fromでメールが送信できました。

2019年6月17日月曜日

pythonの実行環境をDockerで構築してスクリプトを実行する方法

pythonの環境をローカルに構築するのに、pythonのバージョンを指定して入れるのもな
と思って、dockerでやってみることにしました。

まずは、コンテナの準備をDockerfileで進めていきます。

今回は、pythonのイメージを使いたいので、ドキュメント見ながら書いて行きます。

$ vim Dockerfile
FROM python:3

WORKDIR /usr/src/app

COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD [ "python", "./script.py" ]

このDockerファイルを実行するとコンテナにコピーした「script.py」というスクリプトが実行されます。

次は、実行するスクリプトを作ります

$ vim script.py

if __name__ == '__main__':
    print('hello')

実行すると「hello」が表示されるスクリプトです。 Dockerfileでビルドしてみます。

$ docker build  . -t script --no-cache
Sending build context to Docker daemon  63.49kB
Step 1/5 : FROM python:3
...
Step 2/5 : WORKDIR /usr/src/app
...
Step 3/5 : COPY requirements.txt ./
...
Step 4/5 : RUN pip install --no-cache-dir -r requirements.txt
...
Step 5/5 : CMD [ "python", "./script.py" ]
...
Successfully built 36d309824e5f
Successfully tagged script:latest

docker buildの-tオプションでscriptを指定したので、実行するときはこのタグを指定して実行します。

$ docker run --rm -it script
hello

無事に「hello」が表示されたので、実行できたことを確認できました。 思ったより簡単だったけど、docker buildでファイルをコピーしているので、毎回docker buildしないといけないのはめんどくさいなと思ったりしました。

2019年5月19日日曜日

create nuxt-appデフォルトのElement UIでHTMLElement is not defined

最近、仕事でプログラミングをすることがなくなってきたので、そろそろ勉強を始めようと思ってNuxt.jsを試してみることに。

$ yarn create nuxt-app <project-name>

上記のコマンドでプロジェクトを作成するときに、element-uiを選んでプロジェクトを開始してみると…



「HTMLElement is not defined」とかいうエラー発生。出鼻を挫かれた感じがするけれど、めげていられないので調べてみると、Githubのissueを発見!

ぱっと見だと、バージョンアップすれば大丈夫そう!と思ってみたものの、「2.8.2」までしかリリースされておらず。。

これは待ってろということなのか…。

どうしようかな。。



macOSでminikubeをインストールしようとしたら書き込みエラーになった

ローカル環境でKubernetesを使えるようにしようと環境構築中にエラーが 下記が今回のエラーで書き込みできない感じのメッセージが出ています。  $ brew install minikube Updating Homebrew... Error: The following ...