メンチカツ

ロースカツが好きです

【メモ】failed to solve with frontend dockerfile.v0: failed to create LLB definition: unexpected status code [manifests latest]: 400 Bad Request

ECRのイメージをビルドするときに以下のエラーになりました。

=> [internal] load build definition from Dockerfile.lambda                      0.0s
=> => transferring dockerfile: 44B                                              0.0s
=> [internal] load .dockerignore                                                0.0s
=> => transferring context: 2B                                                  0.0s
=> CANCELED [internal] load metadata for docker.io/library/golang:1.18.5-alpin  1.2s
=> ERROR [internal] load metadata for public.ecr.aws/lambda/go:latest           0.7s
------
> [internal] load metadata for public.ecr.aws/lambda/go:latest:
------
failed to solve with frontend dockerfile.v0: failed to create LLB definition: unexpected status code [manifests latest]: 400 Bad Request

このエラーはDockerを再起動したら直りました。 Dockerデスクトップを使っている人だったら、アプリをRestartするだけで解決すると思います。

Xcode アップデート後の xcodebuild エラー

Xcodeをアップデートしたら、ターミナル起動時にエラーが出るようになってしまった。

xcodebuild[2933:15402] Requested but did not find extension point with identifier Xcode.IDEKit.ExtensionSentinelHostApplications for extension Xcode.DebuggerFoundation.AppExtensionHosts.watchOS of plug-in com.apple.dt.IDEWatchSupportCore
xcodebuild[2933:15402] Requested but did not find extension point with identifier Xcode.IDEKit.ExtensionPointIdentifierToBundleIdentifier for extension Xcode.DebuggerFoundation.AppExtensionToBundleIdentifierMap.watchOS of plug-in com.apple.dt.IDEWatchSupportCore

この記事を参考に、Xcode CLI を再インストールすると直った。

apple.stackexchange.com

sudo rm -rf /Library/Developer/CommandLineTools

# install latest
xcode-select --install

xcode-select --install、何かの折に、何度も何度もやってる気がする。

【メモ】graphql-codegenの「AggregateError: GraphQL Document Validation failed」を解決する

タイトルの通りなんだけど

graphql-codegen のValidationエラーの原因がいつもよくわからない

$ yarn graphql-codegen

  ...

  ❯ Generate outputs
    ❯ Generate /hoge/fuga/frontend/src/pages/User/graphql.ts
      ✔ Load GraphQL schemas
      ✔ Load GraphQL documents
      ✖ Generate
        → GraphQL Document Validation failed with 1 errors


 Found 1 error

  ✖ /hoge/fuga/frontend/src/pages/User/graphql.ts
    AggregateError: GraphQL Document Validation failed with 1 errors
        at Object.checkValidationErrors (/hoge/fuga/frontend/node_modules/@graphql-codegen/core/node_modules/@graphql-tools/utils/index.js:962:15)

        ...

いやーいくらなんでも抽象的すぎん?

というわけでエラーの詳細を知るために、 @graphql-tools/utils/index.js:962 の手前に console.table を仕込む

// @graphql-tools/utils/index.js:944目あたり

function checkValidationErrors(loadDocumentErrors) {
    if (loadDocumentErrors.length > 0) {
        const errors = [];
        for (const loadDocumentError of loadDocumentErrors) {
            for (const graphQLError of loadDocumentError.errors) {
                const error = new Error();
                error.name = 'GraphQLDocumentError';
                error.message = `${error.name}: ${graphQLError.message}`;
                error.stack = error.message;
                if (graphQLError.locations) {
                    for (const location of graphQLError.locations) {
                        error.stack += `\n    at ${loadDocumentError.filePath}:${location.line}:${location.column}`;
                    }
                }
                console.table(error) // コレを追加
                errors.push(error);
            }
        }
        throw new exports.AggregateError(errors, `GraphQL Document Validation failed with ${loadDocumentErrors.length} errors`);
    }
}

この状態で再実施するとエラーの詳細が表示されて

GraphQLDocumentError

あっ!なるほどな!となれると思います。

【メモ】Laravel で思った動きをしないときに唱えるおまじない

Laravel で、APIを追加したのにアクセスできないんだよな

php artisan route:list にも出てこないんだよな

ってことありませんか?

わたしは割とかなり良くある。

そういうときは雑に以下のコマンドを叩くとだいたい解決します。

rm bootstrap/cache/* &&
php artisan cache:clear &&
php artisan config:clear &&
php artisan config:cache &&
php artisan route:clear &&
php artisan view:clear &&
php artisan clear-compiled &&
php artisan optimize &&
composer dump-autoload

Symfonyphp symfony cc 叩けばだいたい解決したのと同じあれです👍

【メモ】mov を gif に変換する alias

リモートワークで、作ったものをスクリーンキャプチャで共有する機会が多くなりまして

ffmpeg を使って、mov を gif に変換する alias を登録しました。

$ brew install ffmpeg

したあとに ~/.zshrc などに以下を追加

function m2g() {
  command ffmpeg -i $1 -r 6 $1.gif
}

んで source ~/.zshrc して

$ m2g movie.mov

とすると movie.mov と同じ場所に movie.mov.gif が作成されます。 20秒くらいなら github に貼れるサイズ (max10M) の gif になると思います。

もっとサイズを小さくしたい場合は、フレームレート (-r 6 のところ) の数値を小さくすればOKです👍

【メモ】 php:7.3-fpm コンテナに多言語対応モジュール intl を入れる

PHPで多言語対応の際使うメソッド Locale::acceptFromHttp() を利用するために intl を有効にします。

https://www.php.net/manual/ja/intro.intl.php

んで、合わせて libicu-dev をインストールします。これを忘れちゃう!なのでメモ。

Dockerfile に追加してビルドすればOKです。

RUN apt-get update \
    && apt-get install -y libicu-dev \
    && docker-php-ext-install intl

Vue.jsでカウントアップするタイマーのコンポーネントをつくった

必要に駆られて夜な夜な急遽作ったのですがせっかくなので置いておきます。

props でタイマーのON/OFFをセットするよ。

<!-- Usage -->
<CountUpTimer :on-start="isStarted" />
<template>
  <div class="count-up-timer">
    <div class="time">
      {{ time }}
    </div>
  </div>
</template>

<script>
export default {
  name: 'CountUpTimer',
  props: {
    onStart: {
      type: Boolean,
      required: true,
      default: false
    }
  },
  data() {
    return {
      totalSec: 0,
      timeKeeper: null
    }
  },
  computed: {
    time() {
      const hour = Math.floor(this.totalSec / 3600)
      const min = Math.floor((this.totalSec - hour * 3600) / 60)
      const sec = this.totalSec % 60
      const time = []
      if (hour > 0) time.push(`0${hour}`)
      time.push(`00${min}`.slice(-2))
      time.push(`00${sec}`.slice(-2))
      return time.join(':')
    }
  },
  watch: {
    onStart(started) {
      started ? this.start() : this.stop()
    }
  },
  methods: {
    start() {
      this.timeKeeper = setInterval(() => {
        this.totalSec++
      }, 1000)
    },
    stop() {
      clearInterval(this.timeKeeper)
    }
  }
}
</script>