質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
npm

npmは、Node Packaged Modulesの略。Node.jsのライブラリ・パッケージを管理できるツールです。様々なモジュールを簡単にインストールでき、自分でモジュールを作成し公開する際にも使用できます。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

Q&A

解決済

1回答

1808閲覧

npmでmysqlをローカルインストールした際に実行ファイル(mysql.psl)が存在しない原因を知りたい

yuki_20211108

総合スコア14

npm

npmは、Node Packaged Modulesの略。Node.jsのライブラリ・パッケージを管理できるツールです。様々なモジュールを簡単にインストールでき、自分でモジュールを作成し公開する際にも使用できます。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

0グッド

0クリップ

投稿2021/11/08 12:52

前提・実現したいこと

express+mysqlでNode.jsを使ったmysqlの接続とCRUD操作できる環境を作ろうとしています。
(下記サイトのようなことをしようとしています)
https://code-database.com/knowledges/113

発生している問題・エラーメッセージ

npmを使ってexpressとmysqlをローカルインストールした後、PowerShell上でmysqlコマンド(mysql.psl)を使ってmysqlでデータベースとテーブルを作成しようとしていました。
しかし、mysqlコマンドを使って接続しようとしたところで以下のエラーが出てしまい作業を進められず困っている状況です。

mysql : 用語 'mysql' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されませ ん。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。 発生場所 行:1 文字:1 + mysql -help + ~~~~~ + CategoryInfo : ObjectNotFound: (mysql:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException

なお、ローカルインストールした際「node_modules/.bin」フォルダ内に
mysqlの実行ファイル(mysql.pslなど)が存在していませんでした。
そのため、「パスが通っていないことによる問題」とは別と考えています。

今のところ原因が全く分からずネットで調べても当QAのタイトルの事象を解決したような記事を
見つけられなかったため質問させていただきました。

試したこと

<案1>
[取り組んだこと]
一度作った環境を削除して、一から環境を作り直す。このときはローカルインストールで再実施。
[結果]
node_modules/.binフォルダ配下には、expressの実行ファイルはあるがmysqlの実行ファイルは存在しない。

<案2>
[取り組んだこと]
一度作った環境を削除して、グローバルインストールで一から環境を作り直した。
[結果]
案1と同様の状況になった。つまり、mysqlだけ実行ファイルが存在しない。

補足情報(FW/ツールのバージョンなど)

Node.js:14.16.1
npm:6.14.12
mysql:2.18.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

npmを使ってexpressとmysqlをローカルインストールした後、PowerShell上でmysqlコマンド(mysql.psl)を使ってmysqlでデータベースとテーブルを作成しようとしていました。

npmで提供されるmysqlというのは
大規模なRDBMSのMySQL本体そのものではなく
「MySQL本体に向かって問い合わせを行う小さなトランシーバー」みたいなものです。

MySQLという大規模RDBMSはC++で書かれたものです。
MySQLは起動させるとプロセスに常駐し、
パソコンのTCP3306番ポートで通信を待ち受けます。

この3306番ポートに通信を行う手段(プロトコル)は仕様として公開されており、
その通信手段を再現出来るのであればMySQL純正クライアントである必要はありません。
参考記事: MySQL道普請便り - 第78回 MySQLプロトコルのハンドシェイクパケットを眺めてみる

だったら、Node.jsで通信手段をエミュレートしてもいいよね?
そしたら得られた文字列を必死に解析せずに、ダイレクトに配列で扱えるし!
こういう思想で作られた、MySQLと対話するモジュールがnpmのmysqlです。

この考え方はNode.jsに限りません。
PHPやRuby、Python、Java……という感じで多くの流行っている言語がこの手法を採用しています。
これらの言語のMySQLモジュールもトランシーバーですので、結局の所、本体が別途必要です。


なのでNode.js用の小さな通信モジュールはnpmからインストール出来ますが
別途正規のMySQL本体をインストールしなければなりません。

手段は2通りです。

  • WSL等でLinux仮想マシンを立ち上げて、その中でMySQLサーバをインストールする

→ついでにNode.jsもLinux仮想マシン内でインストールする
なんでそんな事するのか?
→WSLで作った環境は失敗しても壊して再インストールが楽
→勉強中の人は勿論、導入手順を絞りたい既存IT技術者にも好まれている
→Webサービスの本番マシンはLinuxが大正義、Linux向けの情報は腐るほどあり、検索すれば大抵の問題は解決できる

  • MySQL公式サイトから、Windows版のMySQLをインストールする

2.3 Microsoft Windows に MySQL をインストールする - MySQL公式サイト
ただしWindows向けのトラブルシューティング情報は殆ど無いのでハマった時が地獄


因みにnpmで導入するmysqlクライアントはmysql2にしましょう。

mysqlは作った人が既に逃げた後です。
当時乱立していたMySQLクライアントをNode.jsで実現しているチーム同士が手を取り合って、
内部ロジックを共通したものに書き換えつつmysql2として再出発したという感じです。

ほぼ全てのコードがmysqlそのまま使えますし、
Promise版という新しいJavaScriptの記述方法にも対応しています。
なので今からmysqlを使う意味はNode.jsのv6系(サポート終了済で使っている人居ない)で動くくらいしかありません。

変更点をその記事から挙げると、これだけです。

npm install mysql2

js

1# ファイル冒頭のモジュールをrequireして呼び出す箇所をこう書き換える。 2const mysql = require("mysql2");

投稿2021/11/09 09:52

編集2021/11/10 04:01
miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuki_20211108

2021/11/09 12:54

ご回答いただきありがとうございます。 ・npmで提供されているmysqlはMySQL本体ではない。  あくまで問い合わせの役割を担っているもの。 ・npmで提供されているmysqlの作られた背景 ・mysqlよりmysql2をオススメする理由 詳細な説明の中で、とくにこれらの情報はネットで調べても 見つけられなかった情報なのでとても勉強になりました! 記載してくださった手順や情報を参考に引き続き自己学習に努めたいと思います。 改めて、ご回答と詳細な説明ありがとうございましたm(_ _)m!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問