GAミント至上主義

Web Monomaniacal Developer.

TypeScriptでdate-fnsを使って先月の最初と最後の日付を取得する

集計系だとデフォルトで先月1ヶ月分のってのをよくやる。結局使わなくなったけどメモ。日付でだいたい必要なものはdate-fnsで足りてます。TypeScriptでも問題なく使えます。date-fns.org実行時の日にちになるように関数。 import { format, startOfMonth, en…

Mac OSでFirebaseローカルエミュレータを動かす。Javaが必要

Firebaseのローカル開発環境で、Pub/Subだけ動かしてなかったので、最近リリースさればばかりのUIとともに試してみることにしました。 Mac OSのバージョンは10.15.4。firebase.googleblog.comCLIのバージョンが8.4.0以上なのを確認 $ firebase --version 8.4…

ユーザーの閲覧履歴をRedisのSorted Setを使って保存&表示する

ユーザーの閲覧履歴をDB(MySQL)からBigQueryに移すにあたり、既存のDBを使っている「最近見たお仕事」を表示する機能も変更が必要になりました。「最近見たお仕事」は文言は異なるものの、よくECなどでも「最近チェックした商品」、不動産系では「最近見た…

IEで起こるJavaScriptエラーをpolyfill.ioを使ってなんとかする

シニアジョブでは、まだまだ古いPCを使っているシニアの方が多いのか、令和になったこの頃でも、残念ながらIEのアクセス数が無視できない程度に健在です。JavaScriptのエラーが起きてしまうとその後の処理が止まってしまったり影響が多いため、なんとかした…

Cloud BuildのSlack通知をFirebase Functions + TypeScriptで作る

Cloud Buildは同じGCP製品だけあって非常にシンプルにFirebase(WEBしかやったことない)のデプロイを行えますが、ビルド成功、失敗時の通知機能はついてません。cloud.google.comCircle CIのように標準ではついていないので、下記の公式ドキュメントのよう…

@google-cloud/pubsubをTypeScriptで使おうとしたらエラー

@google-cloud/pubsub": "^1.7.2"を使い、tscしたところ下記のエラーが出た。www.npmjs.com node_modules/@grpc/grpc-js/build/src/call.d.ts:68:5 - error TS2416: Property '_write' in type 'ClientWritableStreamImpl<RequestType>' is not assignable to the same pr</requesttype>…

シニアジョブのデータ基盤のETLとしてApache AirflowをGKEで構築した理由

これまで小ネタは書いたけど、なぜApache Airflow (以下Airflow)使ってるのか、Cloud Composerを使わずGoogle Kubernetes Engine(以下GKE)を使っているのか等そもそも論的なことは書いてなかったので、忘れないうちにまとめ。 データ基盤を作る理由 シニア…

AirflowでImportError: cannot import name 'HTMLString' from 'wtforms.widgets'

AirflowをCloud Buildでビルドして動かしたら突然、下記のようなエラーが起きた。 Traceback (most recent call last): File "/usr/local/bin/airflow", line 26, in <module> from airflow.bin.cli import CLIFactory File "/usr/local/lib/python3.7/site-packages</module>…

AirflowのSlack通知で実行にかかった時間を表示する

Airflowを使っていてタスク完了時、失敗時にSlack通知を自作する必要があるけど、そこで実行にかかった時間を表示したかった。結論としてコールバックに渡されるcontextのdag_runにstart_date, end_dateが入っているので引き算すれば出せる。Airflowのバージ…

AirflowのwebserverでLBを通すとhttpにリダイレクトされてしまう問題

Cloud Composerを使わず、GKEでAirflowを構築し、ロードバランサーにGCP HTTPS Load Balancer+Google管理の証明書を使用した。通常の管理画面表示には問題なかったものの、VariablesなどのPOST系のアクションをすると、http接続に戻ってしまう問題があった…

Cloud BuildでGKEにデプロイするときに「Error: secret "key-name" not found」で死ぬ

手動でkubectlコマンドでデプロイは問題ないのに下記を参考にCloud BuildでGKEのデプロイをしたら「CreateContainerConfigError」でなかなかビルドが終了しなかった。podの状態をみると下記のような感じ $ kubectl get po NAME READY STATUS RESTARTS AGE ai…

Kubernetesの「converting YAML to JSON」エラーメッセージは信じるな

結論 npm install -g yaml-lint yamllint filename.yaml使うKubernetesを使ってるとyamlからは逃れられない。本当はJSONでやりたいけどだいたいのサンプルはyamlなので使わざるを得ない。自分で書いていて長くなってくるとどうしても構文エラーを起こしてし…

AirflowでGoogleアカウント認証を使う。RBAC使うのは諦めた

Airflowでは通常のメールアドレス+パスワード認証以外にOAuthが使えます。 会社でG Suiteを使っているのでGoogleアカウント認証が良さげ。パッケージのインストールが必要なのと、airflow.cfgの変更が必要。 Security — Airflow Documentation 基本的に上記…

AirflowのGoogleCloudStorageToBigQueryOperatorでAlready Existsエラー

差分だけ追記しようとしたら下記のエラーがでた。 Exception: BigQuery job failed. Final error was: {'reason': 'duplicate', 'message': 'Already Exists: Table project_id:airflow_local.table'}AirflowというよりはBigQueryの設定でwrite_disposition…

AirflowのMySqlToGoogleCloudStorageOperatorで実行時刻などをSQLで使う

ローカルで立てたAirflowで開発中のアプリDB→BigQueryのDAGがざっくり動いたので、今度は前回の更新日以降を差分同期したいと思った。 DBの種類がMySQLなのでちょっと違うけどやりたいのはまさにこれ。tech.enigmo.co.jp 前回実行時間と今回の実行時間があれ…

AirflowでMySQLの文字化けを直す

シニアジョブのデータ基盤を構築するべく、アプリケーションのDBデータをBigQueryに入れて活用しようとしてます。データを移すワークフロー管理にAirflowを使おうとまずはローカルであれこれしています。とりあえず下記のレポジトリを参考にしつつ、バージョ…

Node.jsでSlackのIncoming Webhooksを使う

検索結果に出てくる記事が古かったりして時間をロスしてしまうのでメモ。 結論 公式のパッケージを使おう。 www.npmjs.com npmでインストールできる $ npm install @slack/webhook公式のサンプルコードを見ればわかるけどURLを渡してsendするだけで使えてし…

Raspberry Pi + MH-Z19B + Firebaseで二酸化炭素濃度をウォッチする

仕事中眠くなったり、ぼーっとすることがあったら二酸化炭素が原因です(確信)。濃度によってこのような影響が明らかになっており、オフィスや学校など法律でも一定以下にするよう決められているそうです。特に新型コロナのご時世、テレワークをしている家…

地図から市区町村を選択する機能をLeafletとVue.jsと国土交通省のデータを使って作った

3日ぐらいで勢いで作れてしまったので忘れないうちにポイントと流れをメモ。 作ったもの 日本地図クリックでその市区町村のリストを取得できるやつ。左バーがVue, 右の地図がLeaflet + 国交省データ 動画LeafletとVueと国土交通省のデータで作った地図で市区…

Firebase deploy時のエラー Error: HTTP Error: 404, Requested entity was not found.

久しぶりにFireabse(WEB)のアプリをデプロイしようとしたらこのエラーが出た。詳細がなく分かりづらい。 Error: HTTP Error: 404, Requested entity was not found.アップロードするファイルがないとか、変化がないとか疑ったけどそんなとこはなく そうい…

PHPの公式Docker alpine環境でphpredisをインストールする(公式ドキュメント通り)

結論 公式ドキュメント通りpcelで入る。 FROM php:7.2-fpm-alpine RUN pecl install redis && \ docker-php-ext-enable redisgit cloneとかいらない。 概要 Laravel 5.6から6にアップデートした際(自分はやってない)、推奨のRedisのクライアントがこれまで…

Vue.jsとPHPで給与計算処理を書いた

シニアジョブでは、派遣従業員の勤怠や給与計算まで自社のシステムでまかなっていますが、いろいろと足りない機能や問題があり、これまで多くが手作業で行われてました。 その作業をできるだけ無くすために、既存の機能と併存する形で新しく開発しました。機…

ElasticsearchをローカルDocker開発環境で動かす

シニアジョブの人材管理システムでは、全文検索エンジンとしてElasticsearchを使っています。Elasticsearchは業務で直接触るのは初めての初心者です。 昔はElasticSearchと思っていたり、Elasticって付いてるからAWSのサービスかーとか思ってた。基本的に開…

シニアジョブに入社して1ヶ月でやったこととこれから

ちょうど一ヶ月なのでメモも兼ねて。1週間はこっちに書いた。あとTwitterで随時。 uyamazak.hatenablog.com システムの現状 50歳以上、シニア専門の人材会社です。派遣も紹介もやってます。 全体で20人程度、開発者は2人とデザイナー1人で、人材のマッチング…

MySQLの公式DockerイメージでMySQLクライアントから日本語が入力できない

ローカル開発環境にDockerの公式イメージを使っているが、mysqlのコマンドから日本語を入力したり、コピペしても消えてしまって困った。https://hub.docker.com/_/mysql文字コードはUTF−8。日本語の表示は文字化けするけど set names utf8;で表示できる。毎…

Vuetify + Jestで[Vue warn]: Unknown custom elementが出てしまう時

Vue CLIでVuetify、TypeScript、テストランナーにJestを使ったら下記のようなエラーがたくさん出た。 /app # yarn test:unit yarn run v1.21.1 $ vue-cli-service test:unit PASS tests/unit/example.spec.ts (6.266s) MainNavigation.vue ✓ mount navigatio…

Docker Desktop For Macでディスクいっぱい系のエラー

Vagrantでやっていた開発環境構築をDocker化するにあたり、MySQLのダンプデータのインポート中やビルドコマンド実行時にディスクいっぱい系のエラーにぶつかりました。www.docker.comDocker Desktop for Macを使っています。MySQLのときはインポート中に、 E…

DMM.comを退職してシニアジョブに転職しました

2020/1/14から株式会社シニアジョブに入社しました。ちょっと時間がたったけど転職エントリ。 DMM.comをやめた理由 同人事業部にいました。盲腸での入院を除くと賞味9ヶ月。 給料、福利厚生、人間関係とか職場環境には問題なく、キャリアプラン的な問題です…

Firestoreを使ったハムスター回転車メーターの設計を考える

前回の記事のとおり、Raspberry Pi + ホール素子 + 磁石でハムスター回転車を検知することまではできた。 そこからどうやってFirestoreに保存するかと考えると結構パターンができたのでメモ。 スマホで書いたので読みづらい。 uyamazak.hatenablog.com ハー…

LED8 子どもとユーザーテスト

LEDを消したり点けたりするだけのLED8ですが、1歳8ヶ月の子どもが一緒に遊んで楽しんでくれます。詳細は動画。LED8 - You can L-chika on your browserwww.youtube.com子供でも操作できるようにUIを考えたり、勉強になるのでおすすめです。Raspberry Pi3 Mod…