importしたライブラリをconsoleから呼び出してデバックする方法 [JavaScript]

debuggerを仕込んだ後に、Dev Toolで axios を呼ぶと エラーメッセージ「Uncaught ReferenceError: axios is not defined」が出力される。

import axios from 'axios';

function ApiRequest() {
  debugger;
}

これは、変数 dubug_axios に axiosを代入し、dubug_axios を呼び出すことで解決できる。

import axios from 'axios';

function ApiRequest() {
  const dubug_axios = axios;
  debugger;
}

参考文献

ES6 module import is not defined during debugger

社内勉強会で候補になった書籍 +α

レジェンド入り

票が集まったやつ

3票

2票

1 票

決戦投票

選ばれた書籍

スプレッド構文を利用して、オブジェクトの値を更新する

「React Hooks 入門: フックの基礎や使い所をしっかり理解して使いこなす」を読んで知ったテクニックに感動したので、ブログに残しておく。

以下のようにすると、objの値に更新できる。

obj = {x: 1, y: 2}
{...obj, y: 3}

また、以下の結果は、falseになる。

obj === {...obj, y: 3}

developer.mozilla.org

2020年登録しているYoutubeチャンネルリスト

登録

  • CMU Database Group
  • DENPO-ZI(無料で動画制作を学べる総合サイト)
  • TORAERA DOUGA
  • 無駄づくり / MUDAzukuri
  • Academeia
  • AKITOの特異点
  • Fラン大学就職チャンネル
  • Hussein Nasser
  • PASSLABO in 東大医学部発「朝10分」の受験勉強cafe
  • Simply Explained
  • モモウメ【公式】
  • Subcultures& Economic
  • Traversy Media
  • 【公式】オードリーさん、ぜひ会ってほしい人がいるんです。
  • おやまだ ゆうじ
  • ゆっくりゴシップちゃんねる
  • アルノ
  • カカチャンネル
  • コタツ研究所
  • タマキ/環耀の数学
  • チルテレ
  • プログラマのための数学勉強会
  • 新時代のサーバーレス チャンネル
  • 日雇礼子のドヤ街暮らしチャンネル
  • 最強のメラ
  • 浸透襲撃
  • 犬も食わないチャンネル
  • 貨幣ちゃんねる
  • ガーリィレコードチャンネル
  • Satoru Takeuchi
  • DBSJ最強データベース講義
  • Drifting Ruby
  • 崎山蒼志
  • 東京工業大学 システム開発プロジェクト

オススメ

  • チルテレ
  • ガーリィレコードチャンネル
  • モモウメ【公式】
  • 【公式】オードリーさん、ぜひ会ってほしい人がいるんです。

感想

  • 登録者10万以下の面白いチャンネルをフォローしていく方針なのだが、学生時代から登録チャンネルを整理してないので大物Youtubeチャンネル(登録者10万以上)になっているものが多かった
  • 「日雇礼子のドヤ街暮らしチャンネル」が割と投稿しており、生存確認できて安心できる2020年だった
  • 「おやまだ ゆうじ」のように、動画が抹消?されているチャンネルや、動画作成やめたので登録を見直すべきチャンネルが多数存在した
  • バイブルである、「Fラン大学就職チャンネル」を観る機会が少なくなったので、時間をとって観るべきだと思った

「MySQL徹底入門: MySQL8.0対応」6章を読んだ

WIPです

はじめに

「MySQL徹底入門: MySQL8.0対応」6章を読んだので学んだことや試したことを書き留めておきます

MySQLのパラメータ

MySQLのパラメータには、以下のパラメータが存在する。

  1. グローバルスコープのみが存在するパラメータ
  2. セッションスコープとグローバルスコープが存在するパラメータ
  3. セッションスコープのみが存在するパラメータ

TODO: トランザクション分離レベルは、どれか調べる

2のグローバルスコープが適応されるのは、ほぼコネクションの開始時のみ。

TODO: 試す

my.cnfに記述する [mysqld] をオプショングループと呼ぶ。 オプショングループとは、どのプログラムがどの行を読み取るべきかを制御するための記述である。

覚えておくべきオプショングループは、以下の3つ。

  • mysqld
  • mysql
  • client

オブション名の接頭辞は、2つある。

  • loose
  • skip/disable

「モノリスからマイクロサービスへ ―モノリスを進化させる実践移行ガイド」第2章を読んだ

はじめに

「モノリスからマイクロサービスへ ―モノリスを進化させる実践移行ガイド」の第2章を読み終わって、学んだことを書き留めておきます

マイクロサービスを導入したいとき

他のアプローチで解決できないかを考える

マイクロサービスが悪いアイデアのとき

不明瞭なドメイン

スタートアップ

PMFしてないとドメインが存在しない

サービスのコアが変更しやすい

顧客の環境にインストールして管理するソフトウェア

顧客は、複雑なシステムを管理・実行できない

もっともな理由を持たないとき

感想

マイクロサービスの導入目的が常にブレないようにする必要がある。 スモールスタートの重要性

マイクロサービスを導入するための必要なスキルがとてつもなく多い。

モノリスからマイクロサービスへ ―モノリスを進化させる実践移行ガイド

モノリスからマイクロサービスへ ―モノリスを進化させる実践移行ガイド

  • 作者:Sam Newman
  • 発売日: 2020/12/26
  • メディア: 単行本(ソフトカバー)

「モノリスからマイクロサービスへ ―モノリスを進化させる実践移行ガイド」第1章を読んだ

はじめに

「モノリスからマイクロサービスへ ―モノリスを進化させる実践移行ガイド」の第1章を読み終わって、学んだことを書き留めておきます

マイクロサービスで解決したい問題はなにか

  • 実装とデプロイを並列作業できないこと

メリット

  • 開発対象以外のコードがカプセル化されているため、開発ドメインを理解することが容易
  • 各サービスのドメインに合った柔軟な技術選定が可能

デメリット

  • データ整合性を担保するのが困難になる

モノリス

伝統的なアプローチでは、技術の凝集度は高いが、ビジネス機能の凝集度が低いため、ビジネス変更に弱い

モノリスの利点

  • 運用が容易
  • コードの再利用が容易

モノリスのデメリット

  • コードを触る人が増えるほど、デリバリー衝突が発生しやすい

モノリスは、3つに分解できる

単一プロセスのモノリス

全てのコードが単一のプロセスにある

モジュラーモノリス

「単一プロセスのモノリス」の一部。以下の特徴を持つ

  • コードがモジュール化されているため、開発者の並列作業を可能
  • デプロイが独立でないため、マイクロサービスでない

分散モノリス

モノリスでも、マイクロサービスでもないもの

サードパーティ製のブラックボックスシステム

Saasなど、外部の誰かが開発したソフトウェアでコードを変更できない

ビジネスドメインに基づいてモデル化されているので、マイクロサービスであるように思えるがデプロイできないので、モノリスであると理解した

結合度

モジュール結合度の話ではなかった

4つの結合度を以下に作らないかを考えてサービス分割を考える必要がある

実装結合

公開可能なデータベースを作成するというアプローチは、頭になかったので勉強になった

一時結合

同期通信を複数のサービスに跨って行うため発生する結合

キャッシュや、非同期通信を行うことで低減できる

疑問

  • 実装結合として例に挙がっている「データベースを共有する」以外、思いつくことができなかった

  • 以下の問題を解決する方法が分からなかったので、4章に期待

    • 決済サービス、受講サービスというサービスがあるとする
    • ユーザーは決済直後にサービス利用したいので、初回購入時のみ「決済サービス」、「受講サービス」間で同期通信するため一時結合になる

感想

  • モノリスも分散システムであるという言葉に、ハッとした
  • サービス分割をする時に、「独立したデプロイは可能か」、「インターフェースは、安定するのか」を問うてみると良さそう

モノリスからマイクロサービスへ ―モノリスを進化させる実践移行ガイド

モノリスからマイクロサービスへ ―モノリスを進化させる実践移行ガイド

  • 作者:Sam Newman
  • 発売日: 2020/12/26
  • メディア: 単行本(ソフトカバー)

MySQLのReplace構文はAUTO_INCREMENTカラムがサロゲートキーの場合、利用しない方が良い

MySQL徹底入門 第4版の第3章を読み、MySQLにReplace構文があることを学んだのでアウトプットしておく。

Replace構文 は、INSERTと似た挙動をする。

しかし、UNIQUE インデックスがついている時、古い行を削除し新しい行をInsertするという注意するべき挙動がある。

この挙動は、サロゲートキーを設定している時に問題になる。以下は、実験コードだ。

replace into user (name, email) values ("hoge", "taro@example.com"); を実行した時、id が 11から12になっている。

mysql> create table user (id int auto_increment primary key, name varchar(255) not null, email varchar(255) not null unique key);


mysql> INSERT INTO `user` (`name`,`email`) VALUES ("Alec","nostra.per.inceptos@aliquet.net"),("Myles","libero.mauris.aliquam@tristiquepharetra.edu"),("Damian","dictum@necluctusfelis.co.uk"),("Baker","Curabitur.consequat@enimNunc.edu"),("Alvin","eget@magnaPhasellus.org"),("Fulton","adipiscing@feugiatplaceratvelit.com"),("Malachi","ultrices.Duis@est.org"),("Vernon","arcu@porttitor.edu"),("Carl","Etiam.ligula.tortor@auctor.ca"),("Gray","Suspendisse@diamdictum.ca");

mysql> replace into user (email) values ("hoge@example.com");

mysql> select * from user;
+----+---------+---------------------------------------------+
| id | name    | email                                       |
+----+---------+---------------------------------------------+
|  1 | Alec    | nostra.per.inceptos@aliquet.net             |
|  2 | Myles   | libero.mauris.aliquam@tristiquepharetra.edu |
|  3 | Damian  | dictum@necluctusfelis.co.uk                 |
|  4 | Baker   | Curabitur.consequat@enimNunc.edu            |
|  5 | Alvin   | eget@magnaPhasellus.org                     |
|  6 | Fulton  | adipiscing@feugiatplaceratvelit.com         |
|  7 | Malachi | ultrices.Duis@est.org                       |
|  8 | Vernon  | arcu@porttitor.edu                          |
|  9 | Carl    | Etiam.ligula.tortor@auctor.ca               |
| 10 | Gray    | Suspendisse@diamdictum.ca                   |
| 11 | taro    | taro@example.com                            |
+----+---------+---------------------------------------------+

mysql> replace into user (name, email) values ("hoge", "taro@example.com");

mysql> select * from user;
+----+---------+---------------------------------------------+
| id | name    | email                                       |
+----+---------+---------------------------------------------+
|  1 | Alec    | nostra.per.inceptos@aliquet.net             |
|  2 | Myles   | libero.mauris.aliquam@tristiquepharetra.edu |
|  3 | Damian  | dictum@necluctusfelis.co.uk                 |
|  4 | Baker   | Curabitur.consequat@enimNunc.edu            |
|  5 | Alvin   | eget@magnaPhasellus.org                     |
|  6 | Fulton  | adipiscing@feugiatplaceratvelit.com         |
|  7 | Malachi | ultrices.Duis@est.org                       |
|  8 | Vernon  | arcu@porttitor.edu                          |
|  9 | Carl    | Etiam.ligula.tortor@auctor.ca               |
| 10 | Gray    | Suspendisse@diamdictum.ca                   |
| 12 | hoge    | taro@example.com                            |
+----+---------+---------------------------------------------+

感想

Railsで開発をしている時に、上記挙動を知っていないと取り返しのつかないデータ破損に繋がるため注意して開発したい。

docker-composeでMySQLコンテナを立ち上げたが、日本語入力できない時にやること

なぜ、できたのか説明できないがメモとして有用なのでブログに残しておく。

解決策

LANG: C.UTF-8 を追加する。

version: '3.3'
services:
  db:
    image: mysql
    restart: always
    environment:
      LANG: C.UTF-8
      MYSQL_DATABASE: imaharu
      MYSQL_USER: imaharu
      MYSQL_PASSWORD: imaharu
      MYSQL_ROOT_PASSWORD: Pass1234

やったこと

clientの文字コードが問題だと思い、utf8mb4でMySQLクライアントを立ち上げたが入力することができなかった。

$ mysql -u imaharu -p
mysql> status

...
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    latin1
Conn.  characterset:    latin1
$ mysql --default-character-set=utf8mb4 -u imaharu -p

mysql> status

...
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4

MySQLではなく、OSの問題であると推測をつけMySQLコンテナのDockerfileを確認すると、Debianであることが判明し検索すると解決策が見つかった。

これから調べたいこと

LANG: ja_JP.UTF-8 を指定しても、日本語入力はできなかったので理由を調査したい。