気付いた事やした事を表にまとめています。
Ctrl + F で目当ての用語などを入れると検索出来ます。
普段から Notion でメモしている事をそのままコピーしているだけですけど!笑
詳しく聞きたい事や間違い等があればコメント頂ければ幸いです。
少しタイミングはズレますが、今年の抱負をここで宣言しておこうと思います!
① 基本情報技術者試験に受かる。
まぁまぁ勉強しないと簡単な試験では無いので、コツコツ進めていきます。
② 継続的な運動を習慣化する。
近所の神社までの往復ウォーキングで30分ちょいなので、それを無の境地でこなす。
③ コーヒーに詳しくなる。
とうとう全自動コーヒーメーカーを購入しました。
色んな豆を試して好みの銘柄を見つけるところからやっていきます。
今年も突っ走っていきますので、応援よろしくお願いします!
2023年1月
タグ | 内容 | タイトル |
---|---|---|
PHP | デフォルトでは、cURLはリダイレクトを辿れない。
CURLOPT_FOLLOWLOCATION にtrue を指定すると、自動でリダイレクトをするようになる。 | 無題 |
APIGooglePHP | @file_get_contents → cURL に切り替え。
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); で文字列として返す設定をしないと、出力されるだけで変数として使えない。 | 無題 |
TypeScript | ? でオプショナルに出来る場所は、!で必ずある事を明示する事も出来る。 が、!は極力使わず以前の処置でしっかり切り分ける。(エラー時にどこでどんなエラーなのかが追えない。) | 無題 |
TypeScript | .then() には Promise へアプローチするためのメソッド。
xxx.then(x ⇒ {
console.log(x); // 第一引数に fulfilled 時の挙動。
), y ⇒ {
console.log(y); // 第二引数に rejected 時の挙動。
}); | 無題 |
TypeScript | await Promise.all(x) でそれ以前の x の処理すべてが終わるのを待つ。(すべてがpending じゃなくなった時点のものが入っている。) | 無題 |
TypeScript | Promise オブジェクトには3つの内部状態がある。 pending(保留:初期値)、fulfilled(成功)、rejected(拒否) メソッドの中で try/catch による分岐がある場合、catch での処理は rejected として返る。 | 無題 |
TypeScript | メソッドの定義に async がついていると、そのメソッドは非同期処理になる。(処理の完了を待たずに次の処理が走る。) それを逐次実行したい場合は、実行時に await をつける。(メソッドの返り値を使った処理を後でする場合など) async メソッドが返すのは単純な処理結果では無く、Promise というオブジェクト。 | 無題 |
TypeScript | 代入は式(代入式)なので、} の後ろには ; がつく。 オブジェクトの } の後ろには、 , がつく。 | 無題 |
TypeScript | 配列のインデックス参照 [0] を何回も使うのはパフォーマンスが悪いので一度変数に取ると良い。 | 無題 |
TypeScript | 空配列 [] の [0] は、undefined | 無題 |
TypeScript | 以下のコードで、2つの配列で重複したものだけを抽出する。
var xxx = [1, 2, 3];
var yyy = [2, 3, 4, 5];
var zzz = xxx.filter(x ⇒ yyy.incrudes(x)); | 無題 |
TypeScript | .filter() で返すのは空でも1個でも配列型。 | 無題 |
TypeScript | 基本的には .map() .filter .find() .reduce() などのJavascript のメソッドで配列操作を行う。 return が無くてもエラーにならないので忘れないように注意する! | 無題 |
GeneralWork | メソッドの引数をすべて任意にするのは望ましくない。無い時の処理は呼び出し元でやる。 | 無題 |
TypeScript | String() や Number() でのキャストは気をつけて使う。 String() で null, undefined などを文字列にして返してしまう。 Number() で “ “ のような半角スペースを 0 として返してしまう。 | 無題 |
TypeScript | 型の “?” は、undefined を許容する。という意味。| undefined と同様だが、こっちは undefined を明示しないとエラーになる。 | 無題 |
TypeScript | 関数型と呼ばれる書き方はメソッドチェーンでどんどん繋げば、コード量はかなり削減できる。 ※可読性とのバランスを取る。 | 無題 |
TypeScript | return で何かを返すタイプじゃないメソッド .push() などに const xxxx = は不要。 | 無題 |
OOPTypeScript | 変数の定義は極力使う場所の近くに書く。始めにすべてを定義したりしていると、どこでその変数が変更されているか分かりにくく、バグの解消が大変。 変数へのアプローチが一回だけなら、const xxxx = で中でメソッドを書く。 | 無題 |
GraphQLNode.jsTypeScript | Daoクラスが返すエンティティの型定義を TypeORM の typeorm-model-generator で 指定したDBと同じで自動生成できる。 QraphQL のスキーマの型定義は graphql-codegen で指定した .graphql ファイルから自動生成できる。 | 無題 |
OOP | number型より int型のほうが効率的で早い。32ビット と 53ビット | 無題 |
TypeScript | コードブロックや if, for, function の {} の後ろに ; は必要ない。 | 無題 |
OOP | 型名に [] をつけると、配列型という型になる。 Javaではリスト型(List)と配列型(Array)があり別物。 | 無題 |
Windows | CLI で $export XXXX=xx で環境変数を変更できる。 $ export -n XXXX で初期値に戻せる。 | 無題 |
GraphQL | GraphQL Code Generator で
graphql-codegen --config codegen.yml --debug true --verbose true で自動生成の時、エラーになればそのエラー内容を教えてくれる。 | 無題 |
GraphQL | GraphQL 自動生成されるスカラー型には次のものがある。 ID: string; String: string; Boolean: boolean; Int: number; Float: number; Upload: any; 上記以外を schema.graphql で定義しようとするとエラーになる。 | 無題 |
Network | URI の最後につける情報には、パスパラメーター(/区切り)と、クエリパラメーター(?以降)がある。 | 無題 |
TestWork | 単体テストは実装にかけた時間の約2~4倍かかる。 実装よりもテストが強い。実装に合わせてテストを変更しない。 ※ テスト定義書がある場合。 | 無題 |
TestWork | Docker を使っての結合テストで 他のシステムなどを呼んでいる場合、そのシステムも Compose Up をして Nodemon 実行して起動させておく必要がある。 | 無題 |
TestWork | プロジェクトにもよるが、環境変数を変えてテストを行いたい場合、dev.json で環境変数を変更したら Compose Up からやり直す。 理由は app.ts の始めに環境変数の初期化を行っているから。 | 無題 |
Test | テストクラスにはあまり変数を書かない方が良い。 可読性や、その変数の中身を想定して行うので。 | 無題 |
JestTest | Taskクラスでは どのDaoを、
何回 toBeCalledTime()
どんな引数 toBeCalledWith()
で呼んでいるか?などをテストする。 | 無題 |
JestTest | テストでは、Expected(期待値)と Received(返り値)では、返り値の方が間違っているとは限らない。 当然だが、特に人が作ったコードの場合、返り値に意識がいきがち。 | 無題 |
TypeORM | TypeORM リポジトリパターンでの操作は SQL に限界がある?基本は queryBuilder を使用する。 | 無題 |
A5M2Work | A5M2 でクエリが取得できないなど sql を叩いても動かない場合は、カレントスキーマを見て思っているDBを参照しているか確認する。 | 無題 |
A5M2SQL | console.log(xxxx.getQueryAndParameters().toString()); で取得した sql をそのままA5M2 に貼り付けてもエラーになる。
バインド箇所が ? になっているので、そこをsql の後にあるパラメーターにー書き換える必要がある。
Ctrl + Shift + P で SQLパラメーター設定が設定でき、デフォルト値が設定できる。 | 無題 |
A5M2SQL | A5M2 Ctrl + N で新規タブ作成 → Ctrl + V で sql をペースト、→ Ctrl + Q で整形、Ctrl + Enter で実行できる。sql をカーソルで選択していれば、その範囲だけの sql が叩ける。 | 無題 |
TypeORM | TypeORM SQL文を確認したい時は、
console.log(xxxx.getQueryAndParameters().toString()); でログに出して確認する。
※ SQLが作成された後じゃないと確認できない。 | 無題 |
GraphQL | GraphQL + Apolloサーバー で Header情報 はありきで開発を進めるので、ここが無くても教えてくれない。app.ts や resolver.ts でチェックしても良いかも。 Header情報を使って app.ts を呼んでいるので、ここに不備があれば一覧表示されない。 | 無題 |
GraphQL | GraphQL 取得系 = query、更新系 = mutation と大きく分ける。 | 無題 |
JavaScriptPHP | JavaScript で取得した緯度経度を PHP で使う方法で .fetch() を使うのだが、緯度経度を取得したファイルの中では使えず、違うファイルに渡して、そこで処理してHTMLを造成する流れになる。 .fetch() の URL にカレントディレクトリを入れても上手くいかない。 これは今度、ノートで書く! | 無題 |
PHP | array_multisort(array_column($連想配列名, ‘キー名’), SORT_ASC, $連想配列名); で、連想配列の並び替えができる。 一発では出来ず、array_column で並び替えたいキーだけの配列を作る必要がある。 | 無題 |
APIGooglePHP | Google Maps Platform > Geocoding API で住所から緯度経度を取得できない件。 住所の文字列に 空白文字が入っているなどが原因だった。 urlencode() でURLエンコードする必要がある。 | 無題 |
GTMShopify | Shopify + Google タグマネージャー
決済完了ページにコンバージョンタグを埋め込む方法
設定 > チェックアウト > 注文状況ページ の追加スクリプトに追加する。
{{ checkout.order_number }} で注文番号 (#xxxx)
{{ total_price | money_without_currency }} で総額が動的に埋め込める。
「もしもアフィリエイト」では総額に、”,” が入っていると認識しないため変数に入れてからカンマを外す処理を挟む必要がある。
var total_p = total_p_raw.replace(/,/g, ''); | 無題 |
PlantUML | フロー図などを書く時などに使われる。0 から書くのは大変なのでコピーして使うと良い。 par:非同期処理、opt:if文、alt:ifelse文、loop:ループ文 box:枠で囲む、active:白棒始め、deactive:白棒終わり participant:縦軸作成、group:枠で囲む(クラス単位のイメージ) | 無題 |
JestTest | DB とコネクションプールしたままだと怒られる。要 .close ※コネクションが増える。 | 無題 |
JestTest | .toBeCalledTimes() :呼ばれた回数
.toStrictEqual() :中身が同じか
.toBeCalledWidh() :何を引数として呼ばれたか
.toHaveProperty() :どんな属性を持っているか
.toHaveLength() :何個あるか
などのテストで使えるメソッドがある。 | 無題 |
JestTest | 期待値が同じテストをリクエストの値を変化させて確認したい時は、変数に入れてテストのループを回す事ができる。
test.each’
testNo | testPerspective
${1} | ${’テスト名’}
${2} | ${’テスト名’} | 無題 |
JestTest | jest.mock(’相対パス’) でそのクラスをモックとする。
const mockクラス名: jest.Mock = Xxxxx as unknown as jest.Mock; でモックを変数で使い回せるようにし、
const mockメソッド名 = jest.fn(); でモック関数を変数で使えるように
mockクラス名.mockImplementation(() ⇒ {
return {
メソッド名: mockメソッド名.mockImplementation(async () ⇒ {
return 返却データ;
}
}
} で好きな返却データをモックとして返せる。 | 無題 |
JestTestVSCodeWork | VSCode でデバッグ中、左ペインで各変数の値が確認できる。 ※Date型は表示されない?ので、cosole.log() などを一時的に仕込んで確認する。 | 無題 |
Work | 7-Zip で圧縮と同時にパスワードをかけられる。 | 無題 |
Work | 同一場所へ複数に分けて請求書を発行する時は、合算した金額で税金は計算する。 | 無題 |
Docker | Start と Stop、Compose Up と Compose Down の違いは、コンテナを削除するかどうか。 後述をすると DB が リポジトリ内で指定したものに初期化される。 ※ Restart はコンテナの再起動なので、一度削除される。 | 無題 |
Docker | nodemon = TypeScript(JavaScriptコンパイル言語)を変換無しで使える。 | 無題 |
Docker | docker-compose.yml 右クリック Compose Up でコンテナが立ち上がる。 | 無題 |
VSCode | VSCode ショートカット Ctrl + @ でターミナル起動 Ctrl + P ファイル名検索 ターミナル内で Ctrl + C で リセット ターミナル内で Tab でディレクトリ名が補完される。 Ctrl + Space 補完機能をトリガー(最強) ダブルクリックでの単語選択は、Ctrl + D でもできる。 何も選択してない状態で Ctrl + C や Ctrl + X で行コピー(切り取り) | 無題 |
A5M2DB | A5M2 トランザクションを開始してからSQL文などでDBを変更すると、ロールバックかコミットを選択できる。 一時的にDB を変更してテストする時(更新系)などに使用する。 設定により、自動でトランザクション開始するようにできる。 | 無題 |
Git | SourceTree などで、チェックアウトしているブランチで右クリックから develop をマージする事を 逆マージという。この時もテストなどが通っているのを確認してから行う。 逆マージ後は自動生成などを叩き、テストが通る状態にして、一度プッシュしてから作業を開始する。 | 無題 |
Git | ブランチを切る前は、ブランチ元でテストが通るかなどを一通り確認しておく。 どこでエラーが出るようになったかが分からなくなると原因が追求しにくい。 | 無題 |
Git | Git にはローカルブランチ と リモートブランチが存在する。 ローカルは何をしてもプッシュしなければ問題ない。 ブランチを切った瞬間はローカルにしか無い。初プッシュ時に始めてリモートに反映される。(一般的にoriginがつく) | 無題 |
Git | プル時に変更箇所をコミットしていない時はエラーになる。 | 無題 |
Git | プル(リモート → ローカル) プッシュ(ローカル → リモート) フェッチ(差分確認) コミット(セーブ) リモートにある場合のみ マージ(合体)責任がかかる作業 | 無題 |
GitWork | Git ブランチは必ず切ってから作業する。mainでの作業は大抵のプロジェクトでは禁止されている。 | 無題 |
Work | 正規表現 xxxx$ で、文末に xxxx が来ているものを探せる。 | 無題 |
GeneralWork | 配列型の変数名は最後に、Array をつける。for文で回す時は、
for (const xxxx of xxxxArray) などとなる。 | 無題 |
GeneralWork | Daoから取得したデータが入っている変数の変数名には、xxxxはテーブル名で、xxxxEntity それが複数形なら、xxxxEntities とする事で何が入っているか分かるように工夫する。 | 無題 |
LinuxWindows | Windows はパス名の大文字・小文字を区別しない。 Linux は区別するので、違っていればエラーになる。 | 無題 |
GeneralGit | ゼロ幅スペースという目に見えないスペースが存在する。 その有無も Git の差分では出てくるのでしっかり確認する! \u200b で正規表現で検索し、一括置換で消すと早い。 | 無題 |
General | そのクラスでどのクラスのメソッドが呼ばれているか?は、import文を見ればだいたい分かる。 当たり前っちゃぁ当たり前。 | 無題 |
TypeScript | any型に何かしらを詰める(ダウンキャスト)時のエラーは実行時にしかわからない。 | 無題 |
GeneralTypeScript | {} 中かっこの中はオブジェクトを書く場所と思って良い。 | 無題 |
Network | HTTPリクエストには、「HTTPリクエスト行(メソッド・URL・HTTPのバージョン)」「HTTPヘッダー」「データ本体」が含まれている。 | 無題 |
Worketc | タイポ → タイプミスなどの小さなミスの事 | 無題 |
Worketc | TypeORM など新しめの技術をググる時は日本語のサイトが少ない。 そんな時は、StackOverFlow というサイトが分かりやすい。 | 無題 |
TypeScript | new Date() は世界標準時(UTC)に変わってしまう。この挙動はエラーや不具合の原因になりがちなので、しっかり統一する事が大切。
プロジェクトによっては、変換のメソッドを専用に用意したりする。 | 無題 |
TypeScript | String型 → Number型 で丸め誤差が生じる。 | 無題 |
Git | SourceTree stash は変更を一時的に保存しておける。これにより、差分がある状態でブランチを切り替えても元に戻せる。 | 無題 |
Git | SourceTree Ctrl 押しながらクリックで差分を確認出来る。 | 無題 |