tusbasaのブログ

業務や勉強中に調べたことを自分用にメモするブログ

【Nuxt.js】関数の依存とテストのしやすさ

composition apiでロジックを別ファイルに切り出して実装している。 関数Aを一つ定義して、そのプロパティとして関連する関数を複数定義する際に、プロパティとして定義した関数同士で呼び出す実装は良くない。 単体テストを書く際モックしたくなった場合に、同じ関数A内のメソッドはモックできない。(できるのかもしれないが複雑な実装になる、またテストフレームワークはjestを使っている)

【javascript】nameプロパティ

Nuxt.jsでcomposition apiを使って開発している際に関数オブジェクトを定義して、そのプロパティに関数を定義することが多いが、その際既存のプロパティ名を上書きしない方が良い。 デバッグの際に紛らわしくなる。 既存のプロパティは他にはlength, prototypeなどがある。

function sayHi() {
  console.log('Hello');
}

console.log(sayHi.name); // "sayHi"

// 関数sayHiを変数hiと変数heyに代入
let hi = sayHi;
let hey = sayHi;

// 元の関数名が出力される
console.log(hi.name); // "sayHi"
console.log(hey.name); // "sayHi"

参考

tcd-theme.com

【SQL】ALL

副問い合わせに対して比較述語(=、!=、<>、<、<=、>、>=)を使用した比較を一度にすることができる。 すべての条件に一致しているレコードだけを抽出することができる。 副問い合わせでは、複数のカラムを返すようなSELECT文を使用することはできない。

SELECT *
FROM teachers
WHERE age > ALL (SELECT age
                  FROM teachers
                  WHERE address = "東京都");

参考

tech.pjin.jp

【Nuxt.js】contextとは

Nuxt から Vue コンポーネントに追加のオブジェクト/パラメータを提供する。 asyncData 、fetch 、plugins 、middleware そして nuxtServerInit のような特別な Nuxt ライフサイクル内で使用できる

<script lang="ts">
import { fetch } from '@nuxtjs/composition-api'
...
export default defineComponent({
  fetch(context) {
    console.log(context);
    },
<ref *1> {
  isStatic: false,
  isDev: true,
  isHMR: false,
  app: {
    head: [Function: head],
    router: VueRouter {
      app: [Vue],
      apps: [Array],
      options: [Object],
      beforeHooks: [],
      resolveHooks: [],
      afterHooks: [],
      matcher: [Object],
      fallback: false,
      mode: 'abstract',
      history: [AbstractHistory],
      resolve: [Function (anonymous)]
    },
    nuxt: {
...

以下のキーも参照できる

const {
    app,
    store,
    route,
    params,
    query,
    env,
    isDev,
    isHMR,
    redirect,
    error,
    $config
  } = context

以下のような形でカスタムプロパティを追加できる takacc.hatenadiary.jp

参考

techblog.roxx.co.jp

v2.nuxt.com

プロセスとスレッドの違い

  • プロセスとは

    • OSが実行しているプログラムのインスタンス
    • 各プロセスは同じメモリ領域を一切共有しない
  • スレッドとは

    • CPUから見たプログラムの「実行単位」
    • プロセスに含まれる
    • プロセス内の同じメモリ領域を共有する

マルチスレッド環境で適切なメモリ管理を行うことをスレッドセーフと呼ぶ

参考

webpia.jp

【AWS】EFSについて

Amazon EC2Amazon ECS、を含む複数のコンピュートインスタンスから同時にアクセスできるファイルシステムVPCを選択して作成する。その為同じVPC内からアクセスすることが一般的。異なるVPC間で利用するにはEFS マウントヘルパーを使用してVPC ピアリング接続または VPC トランジットゲートウェイを使用する必要がある。

  • マウントターゲット

  • アクセスポイント

    • クライアントからEFSをマウントする際のディレクトリや権限を指定する
    • EFSの特定の領域のみクライアント側からアクセスさせることができる
    • NFSクライアントによって使用されるユーザー ID とグループ ID を上書きできる
  • ユーザーの指定

    • デフォルトでは、ルートユーザー (UID 0) のみが読み取り/書き込み/実行のアクセス許可を持つ
      • この為、書き込みを行う際はアクセスポイントを使用する必要があるかも(ユーザーID=0を指定してユーザーIDを上書きする)
      • NFSクライアント側で実行ユーザーがルートユーザーであることを確認したが、アクセスポイントを使用しないと書き込みが行えなかった(要調査)

参考

qiita.com

blog.serverworks.co.jp