今日というか直近2wくらいのインプット/アウトプット #14 2024-09-12

ルール

  • 毎日何かしら記録する。

  • どんな些細なことでもOK。レベル感気にしない

  • 書いたらtwitterにでもポストしておく

もう何日ぶりかもよくわからんけど、ルールは変えない。
習慣化のための低ハードル。目指せ習慣化。目指せ#365
とりあえず今日のといいつつ、ここ2週間分くらいをまとめて書く

Duolingo

228日目

なんだかんだこれは途切れない。

PHPStan

導入直後なのもあって、少し触っただけで大量のエラーが出てしまった。
結果的にbaselineから300近くは取り除けた気がする

タイプを絞ったIgnore

いかんともしがたい箇所は // @phpstan-ignore-next-line とか指定してた箇所もあったけど、特定のエラーに絞っての指定もできることを知った。
ignoreしないにこしたことはないが、するにしても限定的にはしていこう。

// @phpstan-ignore argument.type
// @phpstan-ignore method.nonObject

と、phpstan-ignoreの後にタイプを指定する
エラーの種類は https://phpstan.org/error-identifiers はこの辺が指定できそう。

phpstan-assert-if-true

色々例が書かれてますが

/** @phpstan-assert-if-true !null $this->getName() */
public function hasName(): bool
{
    return $this->name !== null;
}

public function getName(): ?string
{
    return $this->name;
}

特定の関数の結果によって、他の関数の結果はこうなるよというのを明示してあげられる。

if ($a->hasName()) {
    $txt = sprintf("名前は%sです", $a->getName());
}

phpstanは関数の呼び出し箇所で、内部の処理まで追うわけじゃないのでこの例だと前述の phpstan-assert-if-trueの記述がない場合、getNameはnullを返す可能性があると認識されてしまいエラーとなる。
人間側はhasNameの実装を知ってるからわかるけど。
似たようなパターンに遭遇したのでコメントつけて @var にしたところがあったけど、教えてもらって回避できた。

ありがたいまとめ記事

躓いたら参考にさせていただく

GItHub CI/CD実践ガイド

複数ジョブの実行

  • jobは複数定義したら基本並列に実行される

  • needsで別ジョブとの依存関係を定義

  • outputsでジョブ間のデータ受け渡し

matrix 組み合わせ爆発による使用時間増加

matrixで複数のパターンのビルドが可能。社内でもphpのバージョン移行時にテストのCIなどをphp7.4 と php8 で実行というような事例があった。

githubactionは使用時間で課金される。
matrixは多次元の指定もできるが、掛け算で実行ジョブが増える
ジョブは1秒でも実行すると1分とみなされる
1秒でも起動するジョブが100個起動すると100分の料金という計算になるらしい。要注意

Environments

Secrets and variablesとはまた別の設定。
Settings -> Environments から設定可。
名称どおり環境毎に異なるデータを設定できる。

Environment variables と Repository variables で同じ名称の変数を設定したら?
on: 
    workflow_dispatch:
        inputs:
            env-name:
                type: environment
                default: test
                required: false
                description: "環境名の指定(default: test)"
jobs:
    print:
        runs-on: ubuntu-latest
        environment: ${{ inputs.env-name }}
        env:
            USERNAME: ${{ vars.USERNAME }}
            PASSWORD: ${{ secrets.PASSWORD }}
        steps:
            - run: echo "${USERNAME}"
Environmentsのほうが優先して参照される(それはそう)

その他こまごまと学び

js debugger

コード上に仕込めて、ブレークポイントのようにdebugツール起動時には止まってくれるらしい。調査がだいぶ捗りそう

Athenaのテーブル作成

CloudFrontのログがs3に出力されているので、それを元にテーブルを作成

Amazon S3 で処理するデータセットへのパスを入力します。例えば、s3://input-data-set/logs/1.csv にデータが保存されている場合は、s3://input-data-set/logs/ と入力します。s3://input-data-set/logs/year=2004/month=12/day=11/ のようにデータが既にパーティション化されている場合、ベースとなるパスの s3://input-data-set/logs/ のみを入力します

パーティションされてる場合は指定するパスには注意。

CREATE TABLE、ALTER TABLE、DROP TABLE などの Data Definition Language (DDL) ステートメント、パーティションを管理するステートメント、または正常に実行されなかったクエリに対しては課金されません。

https://aws.amazon.com/jp/athena/pricing/

テーブル作成自体に料金はかからない。
AWSコンソール上で作成したはいいが、SELECTしても期待した結果が返ってこなくて少し焦った。
なんてことはなくテーブル作成後、"パーティションをロード"する必要があった。データ取り込んでなけりゃそりゃSELECTしても結果は出てこない。

学びじゃないがプロポーザルを出した

出したことなかったけど、さてどうなるかーなー。

この記事が気に入ったらサポートをしてみませんか?