メインコンテンツまでスキップ

第 2 回: GUI vs CLI - 効率的な開発ワークフロー

実際のプロダクト開発で使い分けた経験に基づく実践ガイド

GUI CLI Workflow

🎯 この章で学ぶこと

  • Memgraph Lab と mgconsole のそれぞれの強みと適用場面
  • 実際のプロジェクトでの効率的な使い分け戦略
  • GUI→CLI→ 自動化への発展的ワークフロー
  • 各ツールの隠れた機能と生産性向上のコツ

📖 実体験:ツール選択の重要性を学んだ瞬間

不正検知システムのプロジェクトで、私は当初、すべての作業を Memgraph Lab で行おうとしていました。視覚的でわかりやすく、クライアントへのデモにも最適だったからです。

しかし、プロジェクトが進むにつれて以下の問題に直面しました:

  1. 繰り返し作業の非効率性: 同じクエリを何度も実行するのに GUI では時間がかかる
  2. 自動化の困難: バッチ処理や CI パイプラインへの組み込みができない
  3. 大量データでの応答性: ブラウザが重くなり、作業効率が低下

この経験から、**「適材適所のツール選択が、プロジェクト成功の鍵」**であることを学びました。

🖥️ Memgraph Lab (GUI):ビジュアル探索の力

主要機能と実践的活用法

Memgraph Lab Features

1. インタラクティブなグラフ探索

実際の使用場面: 新しいデータセットの理解

-- 全体のデータ構造を把握する初期クエリ
MATCH (n)
RETURN n
LIMIT 50;

Lab 固有の利点:

  • ノードをダブルクリックして関連ノードを展開
  • ドラッグ&ドロップでレイアウト調整
  • ズーム・パンによる詳細確認

2. スキーマの自動生成と可視化

プロジェクトで最も重宝した機能の一つです:

使用手順:

  1. Lab のサイドバーから「Schema」タブを選択
  2. 「Generate Schema」をクリック
  3. 自動生成されたスキーマ図を確認

Schema Generation Process

実践的価値:

  • クライアントへの説明資料として活用
  • データモデルの妥当性検証
  • 新メンバーへのオンボーディング材料

3. Graph Style Script (GSS) による視覚カスタマイズ

実際に使用した GSS の例:

/* ノードタイプごとの色分け */
node {
size: 40;
color: #d3d3d3;
}

node.User {
color: #4caf50;
icon: "👤";
}

node.Transaction {
color: #ff9800;
size: 30;
}

/* 金額に応じたエッジの太さ */
edge.TRANSFER {
width: 2px;
color: #2196f3;
}

edge.TRANSFER[amount > 10000] {
width: 5px;
color: #f44336;
}

4. GraphChat:自然言語から Cypher へ

実際の質問例:

  • "Show me all users connected to suspicious transactions"
  • "Find the shortest path between user A and user B"

生成された Cypher の確認と学習: GraphChat が生成したクエリを確認することで、Cypher の学習にも役立ちます。

Lab が最適な作業

Lab Optimal Tasks

作業タイプ理由具体例
初期データ探索視覚的フィードバックが理解を加速新しいデータセットの関係性把握
複雑クエリの開発パスの可視化でデバッグが容易多段階の関係性を持つクエリの作成
クライアントプレゼン直感的でインパクトのある表現分析結果の説明、データモデルの提示
GSS による見た目調整リアルタイムプレビュー業界・用途に応じたグラフの見せ方

⌨️ mgconsole (CLI):効率性とスクリプタビリティ

基本的な接続と操作

# Docker環境でのmgconsole起動
docker exec -it memgraph-db mgconsole

# 接続確認
mgconsole> RETURN "Hello, Memgraph!" AS greeting;

非対話モード:自動化の基盤

パイプを使った実行:

# ファイルからクエリを実行
cat queries.cypher | docker exec -i memgraph-db mgconsole

# 単発クエリの実行
echo "MATCH (n:User) RETURN count(n);" | docker exec -i memgraph-db mgconsole

実際のプロジェクトでの活用例:

#!/bin/bash
# daily_analysis.sh - 日次分析レポート生成スクリプト

# データの整合性チェック
echo "MATCH (n) RETURN labels(n) AS label, count(n) AS count;" | \
docker exec -i memgraph-db mgconsole > daily_counts.txt

# 異常検知クエリの実行
echo "CALL pagerank.get() YIELD node, rank
WHERE rank > 0.1
RETURN node.id, rank
ORDER BY rank DESC;" | \
docker exec -i memgraph-db mgconsole > suspicious_nodes.txt

mgconsole が最適な作業

MGConsole Optimal Tasks

作業タイプ理由具体例
バッチ処理シェルスクリプトとの統合が容易大量データの一括処理
CI/CD パイプライン軽量で高速、スクリプト化しやすいテストデータの投入・削除
定期的な分析cron やタスクスケジューラとの連携日次・週次レポートの自動生成
サーバー運用SSH セッションで軽量動作ログ確認、簡単な状態チェック

🔄 実践的ワークフロー:GUI→CLI→ 自動化

私のプロジェクトで確立した効率的なワークフローを紹介します:

Practical Workflow

Phase 1: 探索・理解(Lab 中心)

目標: データとビジネス要件の理解

作業内容:

  1. サンプルデータでのスキーマ確認
  2. 基本的なパターンマッチングクエリの試行
  3. 可視化による仮説検証

成果物:

  • 理解したデータモデル
  • 検証済みのクエリパターン
  • クライアント用の可視化設定(GSS)

Phase 2: 開発・最適化(Lab + CLI)

目標: 本格的なクエリ開発とパフォーマンス最適化

作業内容:

  1. Lab で作成したクエリのコピー&ペースト
  2. mgconsole での実行時間測定
  3. 大量データでの動作確認

実際の例:

# Labで開発したクエリをmgconsoleで最適化
echo "EXPLAIN MATCH (u:User)-[r:TRANSFER]->(v:User)
WHERE r.amount > 10000
RETURN u.id, v.id, r.amount;" | \
docker exec -i memgraph-db mgconsole

Phase 3: 自動化・運用(CLI 中心)

目標: 安定した運用基盤の構築

作業内容:

  1. シェルスクリプト化
  2. エラーハンドリングの実装
  3. ログ出力とモニタリング

実際のスクリプト例:

#!/bin/bash
# fraud_detection.sh - 不正検知の自動実行

set -e # エラー時の停止

LOG_FILE="/var/log/fraud_detection.log"
DATE=$(date '+%Y-%m-%d %H:%M:%S')

echo "[$DATE] Starting fraud detection..." >> $LOG_FILE

# メイン処理
RESULT=$(echo "
CALL pagerank.get() YIELD node, rank
WHERE rank > 0.15
WITH node, rank
MATCH (node)-[r:TRANSFER]-()
WHERE r.amount > 50000
RETURN node.id AS suspicious_user, rank, count(r) AS high_amount_transfers
ORDER BY rank DESC;
" | docker exec -i memgraph-db mgconsole 2>&1)

if [ $? -eq 0 ]; then
echo "[$DATE] Detection completed successfully" >> $LOG_FILE
echo "$RESULT" | mail -s "Daily Fraud Detection Report" admin@company.com
else
echo "[$DATE] Detection failed: $RESULT" >> $LOG_FILE
fi

🔧 生産性向上のコツ

Lab での効率化テクニック

1. クエリの履歴管理

  • 重要なクエリはブックマーク機能で保存
  • 定期実行するクエリは「Saved Queries」に登録

2. キーボードショートカット

  • Ctrl + Enter: クエリ実行
  • Ctrl + /: コメントアウト
  • Ctrl + D: 行の複製

3. 結果の効率的な確認

  • Table ViewGraph Viewの使い分け
  • エクスポート機能で CSV/JSON 形式での保存

mgconsole での効率化テクニック

1. 設定ファイルの活用

# ~/.mgconsole設定ファイル(存在する場合)
history_file=/tmp/mgconsole_history
username=default

2. 複数行クエリの実行

# ヒアドキュメントを使った複雑クエリ
docker exec -i memgraph-db mgconsole << 'EOF'
MATCH (u:User)
WHERE u.created_at > datetime() - duration({days: 7})
WITH u
MATCH (u)-[r:TRANSFER]->(v:User)
RETURN u.id, count(r) AS recent_activity
ORDER BY recent_activity DESC
LIMIT 10;
EOF

🔗 関連ツールとの連携

Tools Integration

開発ツールチェーンとの統合

Version Control (Git):

# クエリファイルの管理
git add queries/
git commit -m "Add fraud detection queries"

# 設定ファイルのバージョン管理
git add docker-compose.yml memgraph.conf

Jupyter Notebook との連携:

import subprocess
import pandas as pd

def run_memgraph_query(query):
cmd = f'echo "{query}" | docker exec -i memgraph-db mgconsole'
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
return result.stdout

# Cypherクエリの実行とDataFrameへの変換
query = "MATCH (n:User) RETURN n.id, n.name LIMIT 10;"
result = run_memgraph_query(query)
# パースしてpandas DataFrameに変換

次の章へ

ツールの使い分けをマスターしたら、第 3 回: CSV インポートで始めるグラフ構築で、実際のデータを使ったグラフ構築を学びましょう。


著者ノート: この章で紹介したワークフローは、実際に 3 つの異なるクライアントプロジェクトで検証し、開発効率を約 40%向上させることができた実証済みの手法です。特に GUI→CLI→ 自動化の段階的発展は、チーム全体の生産性向上に大きく貢献しました。