Rubyと筋肉とギターとわたし

筋トレが仕事です

【Ubuntu】heroku cliでGPGエラー

どうもてぃ。

今回のエラーはいつも出るのでさすがに記事にしてあとで見返そうと思い書くことにしました。

毎回調べるのに疲れた…。

エラー内容

% sudo apt update

ヒット:1 http://ubuntutym.u-toyama.ac.jp/ubuntu bionic InRelease
ヒット:2 http://ubuntutym.u-toyama.ac.jp/ubuntu bionic-updates InRelease                                                                                                                                                          
ヒット:3 http://ubuntutym.u-toyama.ac.jp/ubuntu bionic-backports InRelease                                                                                                                                                                                                                                                   
ヒット:4 https://cli.github.com/packages stable InRelease                                                                                                                                                                                                                                                                    
ヒット:5 http://packages.microsoft.com/repos/code stable InRelease                                                                                                                                                                                                                                                           
無視:6 http://ftp.jaist.ac.jp/pub/Linux/linuxmint/packages tricia InRelease                                                                                                                                                                                                                                                  
ヒット:7 https://repo.steampowered.com/steam stable InRelease                                                                                                                                                                                                                                                                
ヒット:8 http://dl.google.com/linux/chrome/deb stable InRelease                                                                                                                                                                                                                                                              
ヒット:9 http://ftp.jaist.ac.jp/pub/Linux/linuxmint/packages tricia Release                                                                                                                                                                                                                                                  
ヒット:10 https://repo.nordvpn.com/deb/nordvpn/debian stable InRelease                                                                                                                                                                                                                                                       
取得:12 https://packages.cloud.google.com/apt cloud-sdk InRelease [6,751 B]                                                                                                                                                                                                                                                  
ヒット:13 http://apt.postgresql.org/pub/repos/apt bionic-pgdg InRelease                                                                                                                                                                                                                                                      
取得:14 https://packages.stripe.dev/stripe-cli-debian-local stable InRelease [3,427 B]                                                                                                                                                                     
ヒット:15 http://ppa.launchpad.net/alessandro-strada/ppa/ubuntu bionic InRelease                                                                                                                                                                             
ヒット:17 http://archive.canonical.com/ubuntu bionic InRelease                                                                                                                                                                                                              
取得:16 https://cli-assets.heroku.com/branches/stable/apt ./ InRelease [2,550 B]                                                                                                                                                              
エラー:16 https://cli-assets.heroku.com/branches/stable/apt ./ InRelease                                                                                                                                                                      
  公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY 536F8F1DE80F6A35
ヒット:19 http://ppa.launchpad.net/chrdevs/figma/ubuntu bionic InRelease                                                                                                     
取得:20 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]                                                                                                                                                                           
ヒット:21 http://ppa.launchpad.net/ethereum/ethereum/ubuntu bionic InRelease                                                                                                                                                                   
ヒット:18 https://packagecloud.io/github/git-lfs/linuxmint tricia InRelease                                                                                                                                                  
ヒット:23 http://ppa.launchpad.net/linuxuprising/java/ubuntu bionic InRelease                                                        
ヒット:22 https://packagecloud.io/slacktechnologies/slack/debian jessie InRelease                                                                                
ヒット:24 http://ppa.launchpad.net/obsproject/obs-studio/ubuntu bionic InRelease                                                     
ヒット:25 http://ppa.launchpad.net/peek-developers/stable/ubuntu bionic InRelease                                                  
取得:26 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 Packages [1,224 kB]
ヒット:27 http://ppa.launchpad.net/xuzhen666/ppsspp/ubuntu bionic InRelease                                                       
取得:28 http://security.ubuntu.com/ubuntu bionic-security/universe i386 Packages [1,034 kB]                                                                                                                                                                                                                                  
取得:29 http://security.ubuntu.com/ubuntu bionic-security/universe Translation-en [282 kB]                                                                                                                                                                                                                                   
2,641 kB を 8秒 で取得しました (327 kB/s)                                                                                                                                                                                                                                                                                    
パッケージリストを読み込んでいます... 完了
W: 署名照合中にエラーが発生しました。リポジトリは更新されず、過去のインデックスファイルが使われます。GPG エラー: https://cli-assets.heroku.com/branches/stable/apt ./ InRelease: 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY 536F8F1DE80F6A35
W: https://cli-assets.heroku.com/branches/stable/apt/./InRelease の取得に失敗しました  公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY 536F8F1DE80F6A35
W: いくつかのインデックスファイルのダウンロードに失敗しました。これらは無視されるか、古いものが代わりに使われます。

NO_PUBKEY 536F8F1DE80F6A35

これ。システム側にGPGエラーで出てきたキーがないとのこと。なので追加してあげます。

解決方法

% sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 536F8F1DE80F6A35

Executing: /tmp/apt-key-gpghome.a9Y6s4DyNb/gpg.1.sh --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 536F8F1DE80F6A35
gpg: 鍵536F8F1DE80F6A35: 公開鍵"Heroku Inc. <support@heroku.com>"をインポートしました
gpg: 処理数の合計: 1
gpg:               インポート: 1

問題なくシステム側にpublic keyがインポートできました。

終わり

% sudo apt update
ヒット:1 http://ubuntutym.u-toyama.ac.jp/ubuntu bionic InRelease
ヒット:2 http://ubuntutym.u-toyama.ac.jp/ubuntu bionic-updates InRelease                                                                                                                                                                                                                                                     
ヒット:3 http://ubuntutym.u-toyama.ac.jp/ubuntu bionic-backports InRelease                                                                                                                                                                                                                                                   
無視:4 http://ftp.jaist.ac.jp/pub/Linux/linuxmint/packages tricia InRelease                                                                                                                                                                                                                                                  
ヒット:5 http://ftp.jaist.ac.jp/pub/Linux/linuxmint/packages tricia Release                                                                                                                                                                                                                                                  
ヒット:6 https://cli.github.com/packages stable InRelease                                                                                                                                                                                                                                                                    
取得:7 https://cli-assets.heroku.com/branches/stable/apt ./ InRelease [2,550 B]                                                                                                                                                                                                                                              
ヒット:8 http://dl.google.com/linux/chrome/deb stable InRelease                                                                                                                                                                                                                                                              
ヒット:9 https://repo.nordvpn.com/deb/nordvpn/debian stable InRelease                                                                                                                                                                                                                                                        
ヒット:10 https://packages.cloud.google.com/apt cloud-sdk InRelease                                                                                                                                                                                                                                                          
ヒット:12 https://repo.steampowered.com/steam stable InRelease                                                                                                                                                                                                                                                               
ヒット:13 http://security.ubuntu.com/ubuntu bionic-security InRelease                                                                                                                                                                                                                                                        
取得:14 https://cli-assets.heroku.com/branches/stable/apt ./ Packages [608 B]                                                                                                                                                                                                            
ヒット:16 http://archive.canonical.com/ubuntu bionic InRelease                                                                                                                                                                                                                                                               
ヒット:17 http://ppa.launchpad.net/alessandro-strada/ppa/ubuntu bionic InRelease                                                                                                                                                                                                                                             
ヒット:18 http://packages.microsoft.com/repos/code stable InRelease                                                                                                                                                                                                                                                          
ヒット:19 http://apt.postgresql.org/pub/repos/apt bionic-pgdg InRelease                                                                                                                                                                                                                                                      
ヒット:15 https://packagecloud.io/github/git-lfs/linuxmint tricia InRelease                                                                                                                                                         
ヒット:21 http://ppa.launchpad.net/chrdevs/figma/ubuntu bionic InRelease                                                                                  
ヒット:20 https://packagecloud.io/slacktechnologies/slack/debian jessie InRelease                                                                                                             
ヒット:22 http://ppa.launchpad.net/ethereum/ethereum/ubuntu bionic InRelease                                                                                                                  
取得:23 https://packages.stripe.dev/stripe-cli-debian-local stable InRelease [3,427 B]                                        
ヒット:24 http://ppa.launchpad.net/linuxuprising/java/ubuntu bionic InRelease                     
ヒット:25 http://ppa.launchpad.net/obsproject/obs-studio/ubuntu bionic InRelease                
ヒット:26 http://ppa.launchpad.net/peek-developers/stable/ubuntu bionic InRelease               
ヒット:27 http://ppa.launchpad.net/xuzhen666/ppsspp/ubuntu bionic InRelease                                                                                                                                                                                                                                                  
6,585 B を 6秒 で取得しました (1,058 B/s)                                                                                                                                                                                                                                                                                    
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています       
状態情報を読み取っています... 完了
パッケージはすべて最新です。

よいUbuntuライフを。

【Prisma】upsertがうまく動かないときに確認すること

おひさしどうもてぃです。

最近は個人開発で自分のshopだったりhomeブログだったり作っていて、あまり記事をアウトプットできてなかったので書きます。

いつも通り解決シリーズです。

環境

  • NestJS 8.0.0
  • Prisma client 4.0.0

NestJS × Prisma × GraphQLの構成です。

問題

Prismaのupsertで要求されるwhereの型にidしか表示されず、他の条件(たとえばemailとか)を入れたとしてもエラーを返されていました。

該当のコードはこちら。

import { Injectable } from '@nestjs/common'
import { Prisma, User } from '@prisma/client'
import { PrismaService } from '~/prisma/prisma.service'

@Injectable()
export class UsersService {
  constructor(private readonly prisma: PrismaService) {}

  // auth validateで使用
  async findOrCreateBy(email: string): Promise<User> {
    return await this.prisma.user.upsert({
      where: { email: email },
      update: { email: email },
      create: { email: email, name: 'test user' },
    })
  }
}

ちな、Prisma公式を参考にしました。

www.prisma.io

上のままだと型のエラーが出ていたのでupsertの定義元の型を確認してみました。

すると…

  /**
   * User upsert
   */
  export type UserUpsertArgs = {
    /**
     * Select specific fields to fetch from the User
     * 
    **/
    select?: UserSelect | null
    /**
     * Choose, which related nodes to fetch as well.
     * 
    **/
    include?: UserInclude | null
    /**
     * The filter to search for the User to update in case it exists.
     * 
    **/
    where: UserWhereUniqueInput
    /**
     * In case the User found by the `where` argument doesn't exist, create a new User with this data.
     * 
    **/
    create: XOR<UserCreateInput, UserUncheckedCreateInput>
    /**
     * In case the User was found with the provided `where` argument, update it with this data.
     * 
    **/
    update: XOR<UserUpdateInput, UserUncheckedUpdateInput>
  }
  .
  .
  .

  export type UserWhereUniqueInput = {
    id?: string
  }

upsertのwhereに使われているのは UserWhereUniqueInputで、この子を確認してみるとidしか型にない…

どういうこと!?

公式をもっとちゃんと見ましょう

そういうこと。

Upsertのところをもっとちゃんと見てみましょう。

www.prisma.io

↑のwhereのところに注目。

Wraps all unique fields of a model so that individual records can be selected

unique field、これだわ。

もっとわかりやっすく書いてほしい…(切実)、せめて大文字とか。

解決

ということで、prisma.schemaにunique制約をかけて…

// User(ユーザー)
model User {
  id             String     @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
  email          String?    @unique() @default("")
  phoneNumber    String?    @unique() @default("") @map("phone_number")
  companyName    String?    @default("") @map("company_name")
  address String?    @default("")

  createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(6)
  updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz(6)
}

マイグレーションをかければ

$ npx prisma migrate dev --name add_unique --skip-seed

UserWhereUniqueInputがこんな感じになりました。

  export type UserWhereUniqueInput = {
    id?: string
    email?: string
    phoneNumber?: string
  }

ちゃんとUnique制約つけたカラムが追加されてました。

【docker】dockerコマンドにサブコマンドのcomposeを導入する

どうもてぃ。

もてぃ家に新たに家族が増えました。可愛らしい男の子です。

そして新居も引き渡され、やっと落ち着いてきた次第。

環境

% cat /etc/os-release 
NAME="Linux Mint"
VERSION="19.3 (Tricia)"
ID=linuxmint
ID_LIKE=ubuntu
PRETTY_NAME="Linux Mint 19.3"
VERSION_ID="19.3"
HOME_URL="https://www.linuxmint.com/"
SUPPORT_URL="https://forums.linuxmint.com/"
BUG_REPORT_URL="http://linuxmint-troubleshooting-guide.readthedocs.io/en/latest/"
PRIVACY_POLICY_URL="https://www.linuxmint.com/"
VERSION_CODENAME=tricia
UBUNTU_CODENAME=bionic

% docker -v
Docker version 20.10.7, build 20.10.7-0ubuntu5~18.04.3

github公式のインストールコマンドを実行

こちらを参考。

github.com

ま、結論から言えば失敗です。

% docker compose version
docker: 'compose' is not a docker command.
See 'docker --help'

docker V2公式ドキュメントを見る

自分はubuntuを使っているので、ここを参照。

docs.docker.com

まんまここに書いてる通りで上手く行きました。公式 is best.

% docker compose version
Docker Compose version v2.2.3

【docker】コンテナの再起動を通知したい

どうもてぃです。

Herokuのようにインスタンスを定期的に再起動したい。そんなことを思ったことはありませんか?僕だけですか?

自社サービスをコンテナで動かしているのですが、原因不明でVMにアクセスできなくなり、VMを再起動しコンテナも同じく再起動する…といったかなり良くない運用方法で進めていたので、コンテナを定期的に再起動して対応してみました(主な原因としては、workerのコンテナでredisと突然接続できなくなるものでした)。

環境

  • GCE (VM: CentOS)
  • docker
  • docker-compose(アプリケーション側の構成用)

slack-dockerを使用する

当初はcronでコンテナを再起動したあと、slack通知用にスクリプトを組もうと考えていて、cron実行ユーザー用に環境を作ろうか…と思いましたがめんどくさくなり、

「え、これもコンテナでよくね?なんかimageあるやろ」

と思いしらべたらすぐに見つかりました。

github.com

slack-dockerコンテナにホスト側のdockerプロセスを同期し、更に通知したいwebhook urlを渡してあげるだけで通知が完了します。

slackのincoming webhookのURLは↓

https://my.slack.com/services/new/incoming-webhook

URLが出てきたら以下のコマンドを実行する。

$ docker run -d -e webhook="上で作ったincoming webhook url" -h "$(hostname)" -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/int128/slack-docker

設定がうまくいくとchannelに通知が行きます

f:id:rdwbocungelt5:20211116100001p:plain

すばらしい...

IaaSでdockerを使う場合はこれを採用すると幸せになりますね(IaaSでコンテナ立てるのは微妙なんですがね)

【aws】vpcネットワークを作っていくメモ

VPCネットワーク

デフォルトVPC

設定名 設定内容 設定の割当最小単位
VPC デフォルトVPC全体のネットワークアドレス。範囲 172.31.0.0/16 リージョン
サブネット 各AZに1つずつ設置。 [/20]のネットワークアドレスが割り当てられる。 AZ
ルートテーブル VPCネットワークアドレス範囲内の通信はVPC内部へルーティング。それ以外はインターネットに向けたルーティング。 サブネット
インターネットゲートウェイ インターネットへの接続用ゲートウェイが作成され、ルートテーブルに割り当てられている。 VPC
ネットワークACL インバウンド・アウトバウンドともに全ての通信を許可 サブネット
セキュリティグループ インバウンドは全ての通信を拒否、アウトバウンドは全ての通信を許可 インスタンス
  • VPCネットワークアドレスは一度設定すると後から変更できないので注意

カスタムVPC

VPC → VPCを作成で新規に作成する。

  • テナンシーを専用にすると利用料が割高に
  • 新規作成時、自動でルートテーブル・ネットワークACL・セキュリティグループが作成される
  • EC2インスタンスでパブリックDNSを使用する場合は、DNSホスト名を有効化する

aws cli経由で作成

$ aws ec2 create-vpc --cidr-block 10.0.0.0/16

# Nameをつけたい場合 *******はVPC ID
$ aws ec2 create-tags --resources vpc-*********** --tags Key=Name,Value=awscli

# hostname 有効化
aws ec2 modify-vpc-attribute --vpc-id vpc-********* --enable-dns-hostnames

サブネット

大きなネットワークを複数の小さなネットワークに分割して管理する際の管理単位となるネットワークのこと。

VPC -> サブネット -> サブネット作成 で新規に作成する。

  • ELBを作成する予定があるサブネットは余裕をもって/24以上のネットワーク範囲で作成すること

aws cli経由で作成

$ aws ec2 create-subnet --vpc-id vpc-*********** --availability-zone ap-northeast-1a --cidr-block 10.0.0.0/24

# tag Name作成(resource idは上記実行時に返ってくるsubnet-***********)
$ aws ec2 create-tags --resources subnet-************ --tags Key=Name,Value=awscli

ルートテーブル

サブネット単位で設定することが出来る、サブネット内で稼働するEC2インスタンスのネットワークルーティングを制御する。

VPCネットワークを作成すると、自動的にルートテーブルも作成される。

VPC -> ルートテーブル -> ルートテーブルの作成で新規に作成する。

aws cli経由で作成

$ aws ec2 create-route-table --vpc-id vpc-****************

# tag name
$ aws ec2 create-tags --resources rtb-************* --tags Key=Name,Value=awscli

作成したサブネットとルートテーブルの関連付け

ルートテーブル -> 作成したルートテーブルを選択 -> サブネットの関連付け -> 編集 -> サブネットにチェックでおk

作成したサブネットはVPC内の1つのルートテーブルに関連付ける必要がある。

  • メインルートテーブルに自動的に関連付けされたサブネットはそのままにせず、明示的にルートテーブルと関連付けるようにする。
  • メインルートテーブルを他のルートテーブルに変更した場合、明示的に関連付けていないサブネットは新たに設定したメインルートテーブルに関連付けられてしまい、それまで出来ていた通信ができなくなったり不要な通信が出来るようになったりする等の問題が発生するため。
  • メインルートテーブルはできるだけ必要最低限のルーティング設定にしておく、VPCの内部通信のみ可能な設定から変更しないようにする

aws cli経由で作成

$ aws ec2 associate-route-table --route-table-id rtb-***************** --subnet-id subnet-******************

インターネットゲートウェイ

VPC内で稼働するEC2インスタンスがインターネットを通じて外部と通信する際に必要。EC2以外のリソースも同様で通信する際に必要。VPCごとに1つだけ紐付けが可能。

ルートテーブルのターゲットとして使用する。

VPC -> インターネットゲートウェイ -> インターネットゲートウェイの作成で新規に作成する。

VPCと関連付ける

アクション -> VPCにアタッチで作成したVPCと関連付けられる。

aws cli経由で作成

$ aws ec2 create-internet-gateway

# tag name(igw-******は上記実行時に取得)
$ aws ec2 create-tags --resources igw-************ --tags Key=Name,Value=awscli-gateway

# VPCへアタッチ
$ aws ec2 attach-internet-gateway --internet-gateway-id igw-*********** --vpc-id vpc-**********

インターネットゲートウェイをルーティング先に指定する

  1. VPC -> ルートテーブル
  2. 作成したルートテーブル選択
  3. 編集
  4. ルートを追加
  5. 送信先 0.0.0.0/0にし、ターゲットをインターネットゲートウェイにし作成した igw idを選択
  6. 変更を保存

aws cli経由で作成

# igw-*******/rtb-*********は先程作成したもの
$ aws ec2 create-route --route-table-id rtb-*************** --destination-cidr-block 0.0.0.0/0 --gateway-id igw-*****************
````

【CSS】tips inputにフォーカスしたときborderの色を変える

どうもてぃ。

CSS力向上を願ってtips記事を書いていきたいと思います。

TL;DR

input:focus-visible {
  outline: 1px solid #ddd;
}

// もしくは
input:focus {
  outline: 1px solid #ddd;
}

inputを装飾している場合…

focus時にoutlineで強調すると、inputにborder-radiusを使っていた場合outlineがradius化してくれず若干違和感を感じる挙動になります。

そんなときは outline: none;にしてbox-shadowで装飾しましょう。

See the Pen by motty (@motty93) on CodePen.

以上。

【vim】vim-prettierがPrettier: failed to parse bufferで動かないときに確認すること

f:id:rdwbocungelt5:20200320131618p:plain

どうもてぃ。

vim + JavaScript/TypeScriptで悩まされる日々が続いておりました。

が、とうとう決着をつけることが出来て感謝カンゲキ雨嵐です(何に?)

何がおきていたか

当方、vimmmmmmmmmmmmmmmmmmmmmerです。

フロントエンド開発で重要になってくるprettierのプラグインvim-prettierを使用しているのですが、いかんせん上手く動かない。

題名どおりのエラーがjs/jsx/tsファイルで起き、prettierが動かないという自体が起きてました(tsxファイルだと何故か動く)。

代替えとしてdense-analysis/aleを使用している人がいたりいなかったり。

自分の方でもaleを使用してprettierを掛けるのですが、以下のように楽しいことになります。

f:id:rdwbocungelt5:20210826205030g:plain

これがマジでムカつく。

最近は色んな所でjsを触る機会が増えてきたため、いい加減直そうと思い調査に走りました。

調査

同じように悩んでる方がたくさんいるようでした。

github.com

github.com

github.com

issue内で書かれてるものを自分の方で試してみても全く効果はなかったのでライブラリのオプションを確認していくことに。

試したこと その1

prettierの入っているプロジェクト内で:PrettierCliPathで何が出てくるか確認。

これに関してはprettierと返ってきたのでプロジェクト内のprettierが実行されてるっぽい。

もしかしたら、vim-prettierのバグでプロジェクト内のprettierを認識できてない可能性がある…ということでglobalで使用しているprettierを使うようにオプション指定。

.vimrcに下記を追加。

# which prettierで出てきたやつを指定
let g:prettier#exec_cmd_path = '/home/motty/.asdf/shims/prettier'

:PrettierCliPathで上記パスが出てきたけど、:Prettierは上手くいかない…。

予想が外れたので次。

試したこと その2

これが正解でした。

何事も解決は公式が書いてるだろうと、vim-prettier本体のドキュメントを見に行くことに。

ローカルにあるprettier.txtを確認(自分のパスは/home/motty/.cache/dein/repos/github.com/prettier/vim-prettier/docでした)

と、自分の.vimrcで設定してある項目に目がつきました。

  " flow|babylon|typescript|css|less|scss|json|graphql|markdown or empty string
  " (let prettier choose).
  " default: ''
  let g:prettier#config#parser = ''

自分はparserをbabylonを指定してました。以前、vim-prettierが動かなかったときにbabylonを指定したら上手く行ったからです。かなり安直な考え。

もしや…と思いdefault状態に戻すことに。以下自分のvim-prettier設定です。

  " vim-prettier
  call dein#add('prettier/vim-prettier', {
       \ 'do': 'yarn install',
       \ 'branch': 'release/1.x',
       \ 'for': [
       \ 'javascript',
       \ 'typescript',
       \ 'typescriptreact',
       \ 'css',
       \ 'less',
       \ 'scss',
       \ 'json',
       \ 'graphql',
       \ 'vue',
       \ 'yaml',
       \ 'html'
       \]})
  let g:prettier#autoformat = 0
  let g:prettier#quickfix_enabled = 0
  let g:prettier#config#semi = 'false'
  let g:prettier#config#single_quote = 'true'
  let g:prettier#config#bracket_spacing = 'true'
  let g:prettier#config#parser = ''
  let g:prettier#exec_cmd_path = '/home/motty/.asdf/shims/prettier'
  " autocmd BufWritePre *.js,*.jsx,*.ts,*.tsx,*.vue,*.css,*.scss,*.json PrettierAsync

:Prettierを動かすと…


























うまくいったぁぁぁああああああああああああああああああああああああああああああああああ

つーか、babylonのリポジトリはすでに4年前に開発終了してましたね。

github.com

babelのモノレポ化前の名残らしく、今は@babel/parserとして開発されているそうです。そら動かんわ。

終わり

色んなものを定期的にメンテナンスしましょう。

今年中にvimrcの整理/toml化へ向けてがんばります。ALEのムカつく問題も残ってますしね。