今日というか直近2wくらいのインプット/アウトプット #14 2024-09-12
ルール
毎日何かしら記録する。
どんな些細なことでもOK。レベル感気にしない
書いたらtwitterにでもポストしておく
もう何日ぶりかもよくわからんけど、ルールは変えない。
習慣化のための低ハードル。目指せ習慣化。目指せ#365
とりあえず今日のといいつつ、ここ2週間分くらいをまとめて書く
Duolingo
なんだかんだこれは途切れない。
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 から設定可。
名称どおり環境毎に異なるデータを設定できる。
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}"
その他こまごまと学び
js debugger
コード上に仕込めて、ブレークポイントのようにdebugツール起動時には止まってくれるらしい。調査がだいぶ捗りそう
Athenaのテーブル作成
CloudFrontのログがs3に出力されているので、それを元にテーブルを作成
パーティションされてる場合は指定するパスには注意。
テーブル作成自体に料金はかからない。
AWSコンソール上で作成したはいいが、SELECTしても期待した結果が返ってこなくて少し焦った。
なんてことはなくテーブル作成後、"パーティションをロード"する必要があった。データ取り込んでなけりゃそりゃSELECTしても結果は出てこない。
学びじゃないがプロポーザルを出した
出したことなかったけど、さてどうなるかーなー。