MongoDB: 環境セットアップとmongosh:MongoDB開発環境の完全設定ガイド
最終更新:2026-08-26
mongoshはMongoDB公式のコマンドラインクライアントです。MongoDBと対話する最も直接的なツールです。
このチュートリアルは初学者向けに設計されており、ローカルインストールからAtlasへの接続、基本的なmongoshコマンドから最初のpingテストまでをカバーしています。
1. 学習内容
- Windows、macOS、LinuxへのMongoDB Community Editionのインストール
- Dockerを使用したMongoDBコンテナの迅速な展開
- 無料のMongoDB Atlasクラウドクラスターの作成
- mongoshコマンドラインクライアントの核心的な使い方
- VSCode MongoDBプラグインの設定
- 最初のデータベース接続テスト(
db.runCommand({ ping: 1 })) - よくあるインストール問題のトラブルシューティング
2. フルスタックエンジニアの実例
(1) 課題:新しいPCにMongoDB環境をゼロから構築する
Bobは新しいMacBook Pro M3を手に入れ、この新品のマシンにMongoDB開発環境を構築しようとしています:
「30分以内にNode.jsコードをMongoDBに接続し、最初のCRUD操作を動作させたい。でも以前はWindowsを使っていて、今はM3チップを搭載したARM Macに切り替えたので、見つけたチュートリアルがどれも動作しない。」
3つのアプローチを試みましたが、すべて失敗しました:
| ソリューション | 問題 |
|---|---|
| ❌ brew install mongodb | M3 ARMアーキテクチャにはhomebrew/coreの公式フォーミュラがない |
| ❌ .dmgインストーラーをダウンロード | 「開発者が確認できないため開けません」というメッセージ |
| ❌ MongoDBダウンロードページから | macOS ARM版が見つからない |
(2) MongoDBとDockerを使用した解決策
Dockerを使用してローカルコンパイルの問題を回避します。
# 1. Docker Desktop for Mac (Apple Silicon)をインストール
# https://www.docker.com/products/docker-desktop/ からダウンロード
# 2. MongoDBイメージをプル
docker pull mongo:7.0
# 3. MongoDBコンテナを起動(ポート転送 + データボリューム)
docker run -d \
--name mongodb-dev \
-p 27017:27017 \
-v ~/mongodb-data:/data/db \
mongo:7.0
# 4. mongoshで接続
mongosh "mongodb://localhost:27017/admin"
# 5. 接続テスト
db.runCommand({ ping: 1 })
# { ok: 1 }
(3) 成果
| 項目 | ネイティブインストール | Dockerインストール |
|---|---|---|
| クロスプラットフォーム | ❌ プラットフォームごとに異なる | ✅ 一度構築すればどこでも実行可能 |
| 複数バージョンの共存 | ❌ 困難 | ✅ 複数コンテナの起動 |
| 完全アンインストール | ❌ 設定が残る | ✅ コンテナを削除するだけ |
| チーム統一 | ⚠️ OSバージョンに依存 | ✅ イメージバージョン固定 |
| 起動時間 | 1〜3分 | 5〜10秒 |
3. インストール方法の比較
概念概要:MongoDBは4つのインストール方法を提供しています。Dockerコンテナ、Atlasクラウドサービス、ネイティブインストール(brew/apt/msi)、パッケージマネージャー。選択する方法はユースケースによります。開発環境にはDockerを推奨(クロスプラットフォーム、分離、高速)。チーム協業にはAtlasを推奨(メンテナンス不要、グローバル展開)。本番環境にはネイティブインストールを推奨(最高のパフォーマンス)。
仕組み:DockerコンテナはLinux名前空間を使用してMongoDBプロセスを分離し、データはボリュームマウントでホストマシンに永続化されます。AtlasクラウドサービスはAWS、Azure、GCPにレプリカセットを自動展開し、自動バックアップと監視を提供します。ネイティブインストールはmongodプロセスを直接実行し、最適なパフォーマンスを提供しますが、手動管理が必要です。
graph TB
A[MongoDBインストール方法] --> B[ネイティブインストール<br/>brew/apt/dmg/exe]
A --> C[Dockerコンテナ<br/>迅速な開発に推奨]
A --> D[Atlasクラウドサービス<br/>ローカル設定不要]
A --> E[パッケージマネージャー<br/>Homebrew/Chocolatey]
style C fill:#d4edda
style D fill:#d4edda
| 方法 | 適用 | 難易度 | 推奨シナリオ | パフォーマンス |
|---|---|---|---|---|
| Docker | クロスプラットフォーム | ⭐ | ⭐⭐⭐ 迅速な開発 | ⚠️ わずかなオーバーヘッド |
| Atlas | クラウドサービス | ⭐⭐ | ⭐⭐⭐ チーム協業 | ✅ 管理最適化済み |
| brew/aptネイティブ | 単一プラットフォーム | ⭐⭐ | ⭐⭐ 本番環境 | ✅ 最高 |
| 公式.dmg/.exe | グラフィカル | ⭐⭐⭐ | ⭐ 一度だけの使用 | ✅ 最高 |
(1) 4つのインストール方法
graph TB
A[MongoDBインストール方法] --> B[ネイティブインストール<br/>brew/apt/dmg/exe]
A --> C[Dockerコンテナ<br/>迅速な開発に推奨]
A --> D[Atlasクラウドサービス<br/>ローカル設定不要]
A --> E[パッケージマネージャー<br/>Homebrew/Chocolatey]
style C fill:#d4edda
style D fill:#d4edda
| 方法 | 適用 | 難易度 | 推奨シナリオ |
|---|---|---|---|
| Docker | クロスプラットフォーム | ⭐ | ⭐⭐⭐ 迅速な開発 |
| Atlas | クラウドサービス | ⭐⭐ | ⭐⭐⭐ チーム協業 |
| brew/aptネイティブ | 単一プラットフォーム | ⭐⭐ | ⭐⭐ 本番環境 |
| 公式.dmg/.exe | グラフィカル | ⭐⭐⭐ | ⭐ 一度だけの使用 |
(2) MongoDBバージョンの選択
概念説明:MongoDBはLTS(Long-Term Support)リリース戦略に従っており、各メジャーバージョンは3〜5年間サポートされます。バージョンを選択する際は、最新版よりもLTS版を優先すべきです。LTS版は十分にテストされ、長期的なセキュリティ更新の保証が付いています。
| バージョン | リリース日 | ステータス | 推奨用途 |
|---|---|---|---|
| MongoDB 8.0 | 2024年 | 最新LTS候補 | 新規プロジェクト |
| MongoDB 7.0 | 2023年 | 現在のLTS | このチュートリアルで使用 |
| MongoDB 6.0 | 2022年 | 前のLTS | 互換性優先 |
| MongoDB 5.0 | 2021年 | EOLに近づく | 非推奨 |
▶ サンプル 1:バージョン確認コマンド
# mongoshバージョンの確認
mongosh --version
# mongosh 2.1.0
# mongodサーバーバージョンの確認
mongod --version
# db version v7.0.5
# mongosh経由でサーバーバージョンを確認
mongosh "mongodb://localhost:27017" --eval "db.version()"
# 7.0.5
4. Dockerによるインストール(推奨)
概念概要:DockerはMongoDB開発環境を構築する最も推奨される方法です。DockerはMongoDBとその依存関係をコンテナにパッケージ化し、ホストマシンのファイルシステムとネットワークから分離します。これにより「一度構築すればどこでも実行可能」を実現します。ネイティブインストールと比較して、Dockerには次の利点があります:クロスプラットフォームの一貫性、複数バージョンのサポート、クリーンなアンインストール、極めて高速な起動(5〜10秒)。
仕組み:Dockerコンテナは本質的にLinuxプロセスの分離された実行環境です。MongoDBコンテナは公式イメージ(mongo:7.0)を使用し、内部でmongodプロセスを実行します。ポートマッピング(-p 27017:27017)でコンテナのポートをホストマシンに公開し、ボリュームマウント(-v ~/mongodb-data:/data/db)でデータをホストマシンに永続化します。これによりコンテナを削除してもデータが失われません。
graph LR
A[ホストマシン] --> B[Docker Engine]
B --> C[mongodb-devコンテナ]
C --> D[mongodプロセス<br/>ポート27017]
A --> E[~/mongodb-data<br/>データボリュームのマウント]
E --> D
A --> F[mongoshクライアント<br/>localhost:27017に接続]
F --> D
style C fill:#d4edda
(1) 4.1 前提条件
# Docker Desktopのインストール
# macOS: https://www.docker.com/products/docker-desktop/ からダウンロード
# Windows: ダウンロード + WSL 2バックエンドの有効化
# Linux: sudo apt install docker.io docker-compose
# Dockerインストールの確認
docker --version
# Docker version 24.0.7, build afdd53b
(2) 4.2 MongoDBイメージのプル
# 最新の安定版を取得
docker pull mongo:7.0
# 特定バージョンのプル(推奨)
docker pull mongo:7.0.5
# 認証付きイメージのプル(本番環境推奨)
docker pull mongo:7.0-auth
(3) 4.3 MongoDBコンテナの起動
# スタンドアロン開発モード(認証なし)
docker run -d \
--name mongodb-dev \
-p 27017:27017 \
-v ~/mongodb-data:/data/db \
--restart unless-stopped \
mongo:7.0
# 認証付き本番モデル
docker run -d \
--name mongodb-prod \
-p 27017:27017 \
-v ~/mongodb-data:/data/db \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=YourSecurePass123 \
--restart unless-stopped \
mongo:7.0
# コンテナの実行状態を確認
docker ps
# CONTAINER ID IMAGE STATUS PORTS
# a1b2c3d4e5f6 mongo:7.0 Up 2 minutes 0.0.0.0:27017->27017/tcp
(4) 4.4 接続の確認
# mongoshで接続
mongosh "mongodb://localhost:27017"
# mongosh内で
db.runCommand({ ping: 1 })
# { ok: 1 }
(5) 4.5 よく使うDockerコマンド
# コンテナログの確認
docker logs mongodb-dev
# コンテナの停止
docker stop mongodb-dev
# コンテナの起動
docker start mongodb-dev
# コンテナの再起動
docker restart mongodb-dev
# コンテナに入る
docker exec -it mongodb-dev mongosh
# コンテナの削除(データボリュームは保持)
docker rm mongodb-dev
# コンテナとデータボリュームの削除(注意!データ損失)
docker rm -v mongodb-dev
5. macOSネイティブインストール
(1) 5.1 Homebrewのインストール
# MongoDB公式Tapを追加
brew tap mongodb/brew
# 最新安定版をインストール
brew install mongodb-community@7.0
# MongoDBサービスを開始
brew services start mongodb-community@7.0
# 確認
mongosh --version
mongosh "mongodb://localhost:27017" --eval "db.runCommand({ ping: 1 })"
(2) 5.2 手動起動(brew servicesを使用しない場合)
# mongodを起動(データディレクトリとログファイルを指定)
mongod --dbpath ~/mongodb-data --logpath ~/mongodb.log --fork
# 確認
ps aux | grep mongod
# mongodb 12345 ... mongod --dbpath /Users/.../mongodb-data
▶ サンプル 2:完全なmacOSインストールプロセス
# === 1. Xcode Command Line Toolsのインストール ===
xcode-select --install
# === 2. Homebrewのインストール(まだの場合)===
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# === 3. MongoDB Tapの追加 ===
brew tap mongodb/brew
# === 4. MongoDBのインストール ===
brew install mongodb-community@7.0
# === 5. サービスの開始 ===
brew services start mongodb-community@7.0
# === 6. 接続テスト ===
mongosh "mongodb://localhost:27017"
# === 7. 最初のコマンド ===
db.runCommand({ ping: 1 })
出力:
TEXT 📖 参照専用{ ok: 1 }
6. Linuxインストール
Ubuntu / Debian
# 1. MongoDB GPGキーのインポート
wget -qO - https://www.mongodb.org/static/pgp/server-7.0.asc | sudo apt-key add -
# 2. MongoDBリポジトリの追加
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
# 3. パッケージインデックスの更新
sudo apt update
# 4. MongoDBのインストール
sudo apt install -y mongodb-org
# 5. サービスの開始
sudo systemctl start mongod
sudo systemctl enable mongod
# 6. 確認
sudo systemctl status mongod
mongosh --eval "db.runCommand({ ping: 1 })"
CentOS / RHEL / Fedora
# 1. MongoDB Yumリポジトリの追加
sudo tee /etc/yum.repos.d/mongodb-org-7.0.repo << 'EOF'
[mongodb-org-7.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/7.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-7.0.asc
EOF
# 2. インストール
sudo yum install -y mongodb-org
# 3. 起動
sudo systemctl start mongod
sudo systemctl enable mongod
7. Windowsインストール
(1) 7.1 MSIインストーラー(グラフィカル)
1. https://www.mongodb.com/try/download/community にアクセス
2. "Windows" + "msi" + バージョン7.0 を選択
3. MongoDB-windows-x86_64-7.0.x-signed.msi をダウンロード
4. ダブルクリックしてインストール:
✅ Complete Installation Type
✅ Install MongoDB as a Service
✅ Install MongoDB Compass(GUIツール)
5. インストール完了後、MongoDBは自動的にWindowsサービスとして開始
(2) 7.2 Chocolateyによるインストール
# 1. Chocolateyのインストール(まだの場合)
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
# 2. MongoDBのインストール
choco install mongodb
# 3. 起動
mongod --dbpath C:\data\db
# 4. 接続
mongosh "mongodb://localhost:27017"
▶ サンプル 3:完全なWindowsインストールプロセス
# === 1. データディレクトリの作成 ===
mkdir C:\data\db
# === 2. MongoDBの起動 ===
mongod --dbpath C:\data\db
# === 3. 別の端末で接続 ===
mongosh "mongodb://localhost:27017"
# === 4. テスト ===
db.runCommand({ ping: 1 })
出力:
TEXT 📖 参照専用{ ok: 1 }
8. MongoDB Atlasクラウドサービスの設定
概念概要:MongoDB Atlasは、AWS、Azure、GCPの3つの主要クラウドプラットフォームで利用可能な公式のフルマネージドクラウドデータベースサービスです。Atlasはチーム協業と越境展開シナリオに最適な選択肢です。メンテナンス不要、自動バックアップ、グローバル展開、組み込み監視を提供します。Atlasは512 MBの永久無料枠(M0 Sandbox)を提供しており、学習と小規模プロジェクトに十分です。
仕組み:Atlasはクラウドプラットフォーム上に3ノードのレプリカセットを自動展開します。Primaryノードが書き込みリクエストを処理し、2つのSecondaryノードが読み取り冗長性と自動フェイルオーバーを提供します。ユーザーはAtlas Webコンソールを通じてクラスターを管理し、ネットワークホワイトリストを設定し、データベースユーザーを作成します。接続文字列はmongodb+srv://形式をサポートし、DNS SRVレコードを通じてクラスターノードが自動的に検出されます。
graph LR
A[あなたのアプリ] --> B[Atlasグローバルクラスター<br/>3ノードレプリカセット]
B --> C[Primary<br/>読み書き]
B --> D[Secondary 1<br/>読み取り冗長]
B --> E[Secondary 2<br/>読み取り冗長]
B --> F[自動バックアップ<br/>PITR]
B --> G[監視アラート<br/>パフォーマンス推奨]
style B fill:#d4edda
(1) 8.1 無料クラスターの作成
1. https://www.mongodb.com/cloud/atlas/register にアクセス
2. サインアップ(Google / GitHub OAuthが最速)
3. "Build a Cluster" → "Shared" → "M0 Sandbox"(無料)を選択
4. クラウドプロバイダー:AWS(推奨)
5. リージョン:
- 中東ユーザー:me-central-1(UAE)
- ブラジルユーザー:sa-east-1(サンパウロ)
- 日本ユーザー:ap-northeast-1(東京)
6. クラスター名:Cluster0
7. "Create Cluster"をクリック(1〜3分待機)
(2) 8.2 アクセス権限の設定
手順1:データベースユーザーの作成
- Database Access → Add New Database User
- Username: alice
- Password: YourSecurePass123
- Database User Privileges: Read and write to any database
手順2:ネットワークホワイトリストの設定
- Network Access → Add IP Address
- "Allow Access from Anywhere"を選択(0.0.0.0/0)
⚠️ 開発用のみ。本番環境ではアプリケーションサーバーのIPに制限すべき
(3) 8.3 接続文字列の取得
1. Database → Connect → Connect your application
2. Driver: Node.js
3. Version: 5.5以降
4. 接続文字列:
mongodb+srv://alice:YourSecurePass123@cluster0.mongodb.net/mydb?retryWrites=true&w=majority
▶ サンプル 4:Atlasクラスターへの接続
# mongoshでAtlasに接続
mongosh "mongodb+srv://cluster0.mongodb.net/mydb" --username alice
# Password: ********
# mongosh内で
db.runCommand({ ping: 1 })
出力:
TEXT 📖 参照専用{ ok: 1 }
# 最初のドキュメントを挿入
db.users.insertOne({ name: "Alice", email: "alice@example.com" })
出力:
TEXT 📖 参照専用{ acknowledged: true, insertedId: ObjectId('...') }
# 検索
db.users.find()
出力:
TEXT 📖 参照専用{ _id: ObjectId('...'), name: 'Alice', email: 'alice@example.com' }
9. mongoshコマンドラインクライアント
概念概要:mongoshはMongoDB公式のコマンドラインクライアントです(2020年以降、旧来のmongoシェルを置き換え)。Node.js上で動作し、モダンなJavaScript構文、シンタックスハイライト、自動補完、エラースタックトレースをサポートしています。mongoshはMongoDBと対話する最も直接的なツールです。すべてのデータベース操作をmongoshで実行できます。
仕組み:mongoshはMongoDB Wire Protocolを通じてmongodサーバーと通信します。デフォルトでローカルマシンのポート27017に接続しますが、Atlas接続文字列とTLS暗号化接続もサポートしています。mongoshにはdbオブジェクト(現在のデータベース)とグローバルメソッド(show dbs、useなど)が含まれており、すべての操作はJavaScript構文で実行されます。
graph LR
A[mongoshクライアント] --> B[Wire Protocol]
B --> C[mongodサーバー側]
C --> D[WiredTigerエンジン]
A --> A1[JavaScriptランタイム]
A --> A2[自動補完]
A --> A3[シンタックスハイライト]
style A fill:#cce5ff
| コマンドカテゴリー | よく使うコマンド | 説明 |
|---|---|---|
| データベース | show dbs / use db / db.dropDatabase() |
表示、切り替え、削除 |
| コレクション | show collections / db.createCollection() / db.col.drop() |
作成 |
| ドキュメント | insertOne/find/updateOne/deleteOne |
CRUD操作 |
| ヘルプ | help / db.help() / db.col.help() |
組み込みドキュメント |
(1) mongoshの起動
# デフォルトのローカルポートに接続
mongosh
# 指定したホストとポートに接続
mongosh "mongodb://localhost:27017"
# Atlasに接続
mongosh "mongodb+srv://cluster0.mongodb.net/mydb" --username alice
# 接続して単一コマンドを実行
mongosh "mongodb://localhost:27017" --eval "db.runCommand({ ping: 1 })"
# 詳細モードを有効化(各コマンドの所要時間を表示)
mongosh --verbose
(2) 基本的なmongoshコマンド
// === データベース操作 ===
show dbs // 全データベースを一覧
use shopdb // shopdbデータベースに切り替え(存在しない場合は暗黙的に作成)
db // 現在のデータベースを表示
db.dropDatabase() // 現在のデータベースを削除
// === コレクション操作 ===
show collections // 現在のデータベースの全コレクションを一覧
db.createCollection("products") // コレクションを明示的に作成
db.products.drop() // コレクションを削除
// === ドキュメント操作 ===
db.products.insertOne({ sku: "PHONE-001", price: 599.99 })
db.products.find() // 全ドキュメントを検索
db.products.find().pretty() // 整形出力
db.products.countDocuments() // ドキュメント数をカウント
// === ヘルプコマンド ===
help // mongosh組み込みヘルプ
db.help() // データベースコマンドのヘルプ
db.products.help() // コレクション操作のヘルプ
(3) mongoshキーボードショートカット
| ショートカットキー | 機能 |
|---|---|
↑ / ↓ |
コマンド履歴の表示 |
Tab |
自動補完 |
Ctrl + A |
行頭にジャンプ |
Ctrl + E |
行末にジャンプ |
Ctrl + U |
行全体を削除 |
Ctrl + L |
画面をクリア |
Ctrl + C |
現在のコマンドをキャンセル |
Ctrl + D / exit |
mongoshを終了 |
▶ サンプル 5:mongoshスクリプトファイル
# === スクリプトの作成(setup-mongosh.js)===
cat > setup-mongosh.js << 'EOF'
// shopdbに切り替え
use shopdb;
// ユーザーコレクションの作成
db.users.insertMany([
{ name: "Alice", email: "alice@example.com", age: 28 },
{ name: "Bob", email: "bob@example.com", age: 32 },
{ name: "Charlie", email: "charlie@example.com", age: 25 }
]);
// 商品コレクションの作成
db.products.insertMany([
{ sku: "PHONE-001", title: "Phone X", price: 599.99, stock: 50 },
{ sku: "LAPTOP-001", title: "Laptop Y", price: 1299.99, stock: 20 }
]);
// 全ユーザーを検索
print("Users:");
db.users.find().forEach(printjson);
// 全商品を検索
print("Products:");
db.products.find().forEach(printjson);
EOF
# === スクリプトの実行 ===
mongosh "mongodb://localhost:27017" setup-mongosh.js
10. VSCode MongoDBプラグイン
(1) 10.1 プラグインのインストール
1. VSCodeを開く
2. Extensions(Ctrl+Shift+X)
3. "MongoDB for VS Code"を検索
4. Installをクリック(MongoDB Inc.が提供する公式プラグイン)
(2) 10.2 データベースへの接続
1. サイドバーのMongoDBアイコンをクリック
2. "Add Connection"をクリック
3. 接続文字列を入力:
- ローカル:mongodb://localhost:27017
- Atlas:mongodb+srv://cluster0.mongodb.net/mydb
4. ユーザー名とパスワードを入力
5. データベースを選択し、コレクションを閲覧
(3) 10.3 よく使う操作
- 右クリックメニュー → "View Documents":データを閲覧
- 右クリックメニュー → "Insert Document":ドキュメントを挿入
- ドキュメントを右クリック → "Edit Document":編集
- ドキュメントを右クリック → "Delete Document":削除
- トップツールバー → "Playgrounds":mongoshスクリプトを実行
▶ サンプル 6:VSCode Playgroundsでクエリを実行
// VSCode MongoDB Playground
use('shopdb');
db.users.aggregate([
{ $group: { _id: '$age', count: { $sum: 1 } } },
{ $sort: { _id: 1 } }
]);
11. 最初のPingテスト
概念説明:db.runCommand({ ping: 1 })はMongoDBの「ハートビート」コマンドで、クライアントとサーバー間の接続が正常に機能しているかを確認するために使用します。pingテストはMongoDBへの接続を確立する最初のステップです。ビジネスロジックを書く前に、まずpingで接続が成功していることを確認すべきです。これはデータベースデバッグの基本原則です。
仕組み:pingコマンドはMongoDB Wire Protocolを通じてサーバーにpingコマンドを送信します。サーバーは{ ok: 1 }を返して接続が成功したことを示します。ping応答時間はネットワーク往復遅延にサーバー処理時間を加えたものに等しく、ネットワーク品質の監視に使用できます。Node.jsでは、pingコマンドはエンドポイントヘルスチェック(/healthz)やCI/CD事前接続テストに使用されます。
sequenceDiagram
participant App as クライアント
participant Mongo as MongoDB
App->>Mongo: db.runCommand({ ping: 1 })
Mongo-->>App: { ok: 1 }
Note over App,Mongo: 応答時間 = ネットワークレイテンシー
App->>Mongo: db.runCommand({ ping: 1 })
Mongo-->>App: { ok: 1, operationTime: ... }
| pingの用途 | 説明 |
|---|---|
| 接続検証 | 初回接続後にサービスの可用性を確認 |
| レイテンシー監視 | ネットワーク往復時間を測定 |
| ヘルスチェック | /healthzエンドポイントの定期チェック |
| CI/CD事前デプロイチェック | デプロイ前にデータベース可用性を確認 |
(1) 11.1 なぜpingが重要なのか?
db.runCommand({ ping: 1 })はMongoDBの「ハートビート」コマンドです:
- ✅ データベース接続が成功したことを確認
- ✅ 応答時間を測定(ネットワークレイテンシーを監視)
- ✅ ヘルスチェックエンドポイント(
/healthz)に使用 - ✅ CI/CDの事前接続テストに使用
(2) 11.2 mongoshでの実行
// mongosh内で
db.runCommand({ ping: 1 });
出力:
TEXT 📖 参照専用{ ok: 1 }
// タイムスタンプ付きping
const start = Date.now();
const result = db.runCommand({ ping: 1 });
const duration = Date.now() - start;
print(`Ping successful in ${duration}ms`);
printjson(result);
出力:
TEXT 📖 参照専用Ping successful in 5ms { ok: 1 }
(3) 11.3 Node.jsでの接続テスト
// ping-test.js
const { MongoClient } = require('mongodb');
async function testConnection() {
const client = new MongoClient('mongodb://localhost:27017');
try {
const start = Date.now();
await client.connect();
const result = await client.db('admin').command({ ping: 1 });
const duration = Date.now() - start;
console.log(`✅ Connected in ${duration}ms`);
console.log('Ping result:', result);
if (result.ok === 1) {
console.log('🎉 MongoDB connection is healthy!');
} else {
console.error('❌ Ping failed:', result);
}
} catch (err) {
console.error('❌ Connection error:', err.message);
process.exit(1);
} finally {
await client.close();
}
}
testConnection();
出力:
TEXT 📖 参照専用✅ Connected in 15ms Ping result: { ok: 1 } 🎉 MongoDB connection is healthy!
▶ サンプル 7:完全なヘルスチェックスクリプト
// health-check.js
const { MongoClient } = require('mongodb');
const mongoose = require('mongoose');
async function healthCheck() {
const results = {
native_driver: false,
mongoose: false,
timestamp: new Date().toISOString()
};
// 1. ネイティブドライバーのテスト
try {
const client = new MongoClient('mongodb://localhost:27017');
await client.connect();
const ping = await client.db('admin').command({ ping: 1 });
results.native_driver = ping.ok === 1;
await client.close();
console.log('✅ Native driver ping:', ping.ok === 1);
} catch (err) {
console.error('❌ Native driver ping failed:', err.message);
}
// 2. mongooseのテスト
try {
await mongoose.connect('mongodb://localhost:27017/test');
const adminDb = mongoose.connection.db.admin();
const ping = await adminDb.command({ ping: 1 });
results.mongoose = ping.ok === 1;
await mongoose.disconnect();
console.log('✅ Mongoose ping:', ping.ok === 1);
} catch (err) {
console.error('❌ Mongoose ping failed:', err.message);
}
console.log('\nHealth check results:', JSON.stringify(results, null, 2));
return results;
}
healthCheck();
12. よくあるインストール問題のトラブルシューティング
(1) 12.1 接続失敗の問題
| エラーメッセージ | 原因 | 解決策 |
|---|---|---|
ECONNREFUSED 127.0.0.1:27017 |
mongodが実行されていない | brew services start mongodb-community@7.0 |
MongoServerSelectionError: connection timeout |
ネットワーク問題またはAtlasホワイトリスト未設定 | Atlas Network AccessでIPを追加 |
Authentication failed |
ユーザー名またはパスワードが間違っている | パスワードをリセットまたは新規アカウント作成 |
getaddrinfo ENOTFOUND cluster0.mongodb.net |
DNS解決失敗 | ネットワーク接続を確認またはIPアドレスを使用 |
Operation timed out |
ファイアウォールでブロック | ポート27017を開放 |
(2) 12.2 Dockerコンテナが起動しない
# コンテナログを確認して原因を特定
docker logs mongodb-dev
# よくあるエラー:ポートが使用中
# Error: bind: address already in use
# 解決策1:ポートを占有しているプロセスを確認
lsof -i :27017
kill -9 <PID>
# 解決策2:別のポートに切り替え
docker run -d --name mongodb-dev -p 27018:27017 mongo:7.0
mongosh "mongodb://localhost:27018"
(3) 12.3 ディスク容量不足
# ディスク容量を確認
df -h
# MongoDBのデフォルトデータディレクトリが使用するディスク容量
du -sh ~/mongodb-data
# クリーンアップ方法:oplogSizeの制限を設定(レプリカセットモード)
mongod --oplogSize 1024
# またはWiredTiger圧縮を使用(デフォルトで有効)
mongod --wiredTigerCollectionConfig blockCompressor=zstd
▶ サンプル 8:完全なトラブルシューティングプロセス
# === 手順1:mongodが実行されているか確認 ===
ps aux | grep mongod | grep -v grep
# === 手順2:ポートリスニングの確認 ===
lsof -iTCP:27017 -sTCP:LISTEN
# === 手順3:接続試行 ===
mongosh "mongodb://localhost:27017"
# === 手順4:mongodログの確認 ===
tail -50 /usr/local/var/log/mongodb/mongo.log
# === 手順5:サービスの再起動 ===
brew services restart mongodb-community@7.0
# === 手順6:再テスト ===
mongosh "mongodb://localhost:27017" --eval "db.runCommand({ ping: 1 })"
❓ よくある質問
--memory --cpus);(4)本番環境にはKubernetes + StatefulSetを推奨。+srvはどういう意味ですか?mongodb+srv://はMongoDB Atlasで使用されるDNS SRVレコード形式で、クラスターノードを自動的に検出します。mongodb://は従来の形式で、ホストとポートを手動で指定する必要があります。📖 まとめ
- MongoDBインストール方法:Docker(推奨)/ Atlas(クラウドサービス)/ ネイティブインストール
- Docker起動:
docker run -d --name mongodb-dev -p 27017:27017 mongo:7.0 - Atlasは512 MBのM0クラスターを永久無料で提供
- mongoshはMongoDB公式のコマンドラインクライアント(古いmongoシェルを置き換え)
db.runCommand({ ping: 1 })は接続を検証する標準コマンド- VSCode MongoDBプラグインはグラフィカル閲覧とPlaygroundsでのスクリプト実行をサポート
- よくあるインストール問題:ポート競合、ディスク容量、ファイアウォール、ホワイトリスト設定
📝 練習問題
-
基礎問題(⭐):Dockerを使用してMongoDB 7.0コンテナを起動し、ポート27017をマッピングし、mongoshで正常に接続して
db.runCommand({ ping: 1 })を実行してください。 -
基礎問題(⭐):MongoDB Atlasで無料のM0クラスターを作成し、IPホワイトリスト(0.0.0.0/0)とデータベースユーザーを設定し、mongoshでAtlasに接続してください。
-
応用問題(⭐⭐):mongoshで
use shopdb、db.products.insertOne({...})、db.products.find().pretty()を実行し、データベースとコレクションの暗黙的作成メカニズムを理解してください。 -
応用問題(⭐⭐):Node.jsスクリプト
ping-test.jsを書き、mongodbネイティブドライバーを使用してローカルMongoDBインスタンスに接続し、pingコマンドを実行して応答時間を出力してください。 -
応用問題(⭐⭐):VSCodeにMongoDBプラグインをインストールし、Atlasクラスターに接続し、Playgroundsで集計クエリ
db.users.aggregate([{$group: {_id: '$age', count: {$sum: 1}}}])を実行してください。 -
チャレンジ(⭐⭐⭐):Docker Composeを使用して3ノードMongoDBレプリカセットを起動し(公式ドキュメントを参照)、ユーザーを自動作成してデータを初期化するinitスクリプトを設定し、レプリカセットの状態
rs.status()を確認してください。