mk-toolブログ

エンジニアと家のことをごちゃごちゃと書いてます

PullRequestの差分が正しく出ない

PullRequestの差分が正しく出ない問題に遭遇しました。 それぞれのブランチが全く同じ内容のファイルなのにもかかわらず、です。 PullRequestの差分が正しく出ない理由は、新しく作ったブランチとtargetブランチのcommitIdが異なることに原因がありました。 …

masterブランチにcommitしたという濡れ衣

本当にあった怖い話、何かを知っていれば全く怖くない話。 masterブランチ(masterとかmainとか、とりあえずその辺の名前)に直接commitしていないのに、直接masterにcommitしましたよね?、という問い合わせ。 確かに git log でAuthorを見てみると、Authorは…

javascriptでarrayを結合して重複を排除する

javascriptでarrayの結合(足し算) をして、重複を出したくない場合、以下のやり方でok。 const array3 = [ ...new Set([ ...(array1 || []), ...(array2 || []), ]), ]

Dockerコンテナ内からlocalhostのmysqlへの接続ができない

hostアドレスに docker.for.mac.host.internal を設定するとうまく動く。 hostのIPアドレスは /sbin/ip route|awk '/default/ { print $3 }' のように取得できるが、それを使ってもコンテナ内からmysqlへの接続はできなかった。 (が、host のIPアドレスを使…

moment.jsで東京の時刻をISO形式で表示

いくら、timezoneを東京に設定しても、ISO形式での表示はUTCになるな〜、と思って調べたら、引数に true を入れなければいけなかったみたい。 momentjs.com const moment = require('moment-timezone') moment.tz.setDefault('Asia/Tokyo') const date = mom…

Make the specific file public with ACL for GoogleCloudStorage

In API spec, we can see the source code for "Make Public". Home - Documentation github.com let storageRef = storage.bucket(BUCKET_NAME); await storageRef.file(payload.fileName).makePublic()

CloudStorageとのCORSを解消する

GCP

手順 Cloud SDK を install 既存の設定を取得する cors対策用のファイルを作成 デプロイ 設定が書き換わっていることを確認 詳細 1. Cloud SDK を install Cloud SDK Command Line Tools | Cloud SDK: Command Line Interface 2. 既存の設定を取得する gsuti…

CloudStorageとのCORSを解消する

手順 Cloud SDK を install 既存の設定を取得する cors対策用のファイルを作成 デプロイ 設定が書き換わっていることを確認 詳細 1. Cloud SDK を install Cloud SDK Command Line Tools | Cloud SDK: Command Line Interface 2. 既存の設定を取得する gsuti…

CloudStorageとのCORSを解消する

手順 Cloud SDK を install 既存の設定を取得する cors対策用のファイルを作成 デプロイ 設定が書き換わっていることを確認 詳細 1. Cloud SDK を install Cloud SDK Command Line Tools | Cloud SDK: Command Line Interface 2. 既存の設定を取得する gsuti…

Sequelizeで多対多のテーブルジョインを定義する

一つの記事には複数の著者が存在し(共同著者)、著者には複数の記事が結びつく場合、中間テーブルを利用して多対多の状態をつくれるようにしなければならない。 そのように行う方法を説明する。 これには、 belongsToMany を利用することで多対多のデータ構造…

resolveJsonModuleでDate型を使いたい

resolveJsonModule では json を読みこみ、 typeof を与えてあげることで、モックデータから型を自動で生成してくれる。 しかしながら、 json を読み込む部分では、 Date 型を扱いたくても、 string と判定されてしまう。 { ... createdAt: "2000-01-01 00:0…

firebaseのチャットで画像を扱うために

LINEのようなチャットツールでは、チャットしている時系列に画像を表示したり、それとは別に、写真だけを一覧表示することができる。 これがRDBMSでは頭を捻らなくても実装することができるが、firebaseのようなNoSQLでこれを実装するためにはどのようにすれ…

SequelizeでwhereHasを行う

include内のrequired値をtrueにすることでwhereHasと同じ挙動の動作をさせることができる。 falseの場合は、ORMのリレーションの結果が0件でも取得できる。 attributesを[]にすることで、whereHasだけを利用することも可能。 XXX.findAll({ where: findAllPa…

firebaseのAuthenticationとfirestoreを利用したセキュリティルール設定

ここではセキュリティルールを考えた際にfirestoreはどういったデータ構造にするか、ということを説明する。 詳細の設定については、 公式ブログ に譲る。 チャットアプリのような双方向の通信を実現する際は、 firebase を利用することで簡単に実装できる。…

H2Oを利用してFlaskをFastCGIとして動かすまで

とりあえず、Flaskは動くことを前提としている。 Flaskが動く環境が整ったら、UNIXドメインソケットを利用してFastCGIデーモンを動かすようにしてあげる。 UNIXドメインソケットは、以下のようにすることで作成される。以下をxxx.fcgiと、自分で名前を付けて…

ReactはNativeでtypescript対応したらしい

下記のQiita記事でReactをTSで開発する時の初期状態を作るコマンドが乗っていた。 ReactとTSの環境を整えるにはReactやTSのパッケージをいれたり、としないといけなかったのに、コマンド一つでプロジェクトを作成することができ、随分と楽になったんだなぁ、…

TypeScriptで"SyntaxError: Unexpected identifier "と言われたら

以下のようなエラーにさいなまれた際の対応方法。 SyntaxError: Unexpected identifier or SyntaxError: Unexpected * or SyntaxError: Unexpected token import この問題が発生する原因は、トランスパイルされた js ファイルをNodeが実行できないため。 試…

Use object destructuring prefer-destructuring

以下のような場合、eslintがエラーが報告してくる。 async post(req: Request, res: Response) { const body = req.body; } そのため、以下のように修正することでエラーがなくなる。 プロパティをドット区切りで取得するのではなく、変数を展開して格納して…

javascriptでプロトコル、ポート、ホスト名を取得

プロトコル+ポート+ホスト名をなんと呼ぶのかわかりませんが、 https://xxx.com:3000 みたいなものを出力する。 80番ポートの時は、ポート番号はつけないようにしている。 const protocol = window.location.protocol const port = window.location.port con…

API Gatewayで Authorizer が動かない

AWS

オーソライザーが動かない API Gatewayでオーソライザーが動かなかったのメモ。 動かないというより、そこまで到達していなかった、というだけの話だが、HTTPリクエストヘッダに Authorization を付与すればオーソラーザーが実行される。 Authorization に入…

Cognitoで Invalid phone number format. と言われる

AWS

Invalid phone number format.と言われる Cognitoでユーザを作成する際、電話番号を 00000000000 や 000-0000-0000 で入力しても、エラーが返ってくる。 電話番号の正しい(?)フォーマットは、+15555555555 だった。日本だと +81 かな。 参考 stackoverflow.c…

jsでテキストをclipboardにcopyする

javascriptで外部モジュールなしに、クリップボードへコピーする方法を紹介する。 以下の関数で動く。 copyToClipboard(text){ navigator.clipboard.writeText(text).then(function() { /* clipboard successfully set */ }, function() { /* clipboard writ…

Dockerfileで環境変数を設定する

ENVコマンドでOK 最初はRUNコマンドを実行してしまったが、ENVコマンドを利用するのが正しい。 # 正 ENV AAA BBB # 誤 RUN export AAA=BBB

AWSSESのSMTPを利用するとmessageIDが書き換わる

AWS

AWSSESのSMTPを利用してメール送信をすると、messageIDが上書きされてしまう。 そのため、以下のようなシステムは破綻することになる。 message_header_id を生成する 生成した message_header_id をDBに保存 返信メールの in_reply_to と突き合わせてどのメ…

Lambda関数が実行されない

AWS

Lambdaが実行されない 検証環境でLambdaの実行を確認したし、このロールを本番でも流用しちゃおう、と思って検証用のソースと本番用のソースで同じロールを利用すると、Lambdaが実行されなかった。 原因は、検証用のソースを作った時に作成されたロールに与…

lambdaからRDSに書き込みをする

AWS

VPCに入れる lambdaをRDSにリーチできるように、VPC内に入れることで、RDSに対して直接データを書き込めるようになる。 lambdaの「ネットワーク」の設定から設定することができる。 以下のサイトにエンドポイントの作成について参考になると思う。 VPC Endpo…

mailparserで `iso-2022-jp` を扱う

メールが文字化けをしてしまう 何も考えずに mailparser を利用すると、 iso-2022-jp の文字コードの日本語文字が文字化けしてしまう。 これを対処するには、 iconv を利用することで解決することができる。 まず、 iconv をinstallする。 npm i iconv MailP…

nodemailerとさくらのメールサーバからメールを送信

nodemailerからさくらのメールサーバ経由でメールを送信する 普通には送信できない 以下のような587ポートへの接続は失敗する。 port: 587, secure: true, メッセージは以下のようなものが表示される。 Error: 47437359817600:error:140770FC:SSL routines:S…

各種メールサービスプロバイダのSMTP設定

各種メールサービスプロバイダのSMTP設定 GmailのSMTP設定 送信は安定している。 GmailをSMTP利用する際は、同時に最大5件までのメールしか送れなかったので注意。 TLS の場合はポート587を利用する。 host: 'smtp.gmail.com', port: 465, user: 'gmailのア…

Laravelでパスワードが正しかを比較する

概要 Laravelでパスワードが正しかを比較する 詳細 Laravelでパスワードの整合性を確かめるために、以下のことを行った。 現在DBに保存されているpasswordを取得(これはHashされている) 入力されたパスワードをDBにパスワードを格納させる際のHash関数でHash…