Dify と LangGraph/LangChain を比較:表現力・保守性・学習コストのリアル

AI アプリケーション開発の世界で、どのツールを選ぶべきか悩んでいませんか。Dify、LangGraph、LangChain という 3 つの主要なツールは、それぞれ異なるアプローチで AI 開発を支援します。本記事では、これらのツールを表現力・保守性・学習コストという 3 つの軸で徹底比較し、プロジェクトに最適な選択肢を見つけるための実践的な指針をお示しします。
開発速度を重視するなら Dify、柔軟な制御が必要なら LangGraph、豊富な機能を活用したいなら LangChain というように、それぞれに明確な特徴があります。しかし、実際の選択はそう単純ではありません。チーム構成、プロジェクト規模、長期的な保守性まで考慮した総合的な判断が必要です。
各ツールの特徴と位置づけ
Dify:ノーコード/ローコード AI アプリ開発プラットフォーム
Dify は、プログラミングスキルがなくても AI アプリケーションを構築できるビジュアル開発プラットフォームです。ドラッグ&ドロップでワークフローを作成し、直感的な UI で LLM アプリケーションを開発できることが最大の特徴です。
Dify の核となるのはワークフローエディタです。このエディタでは、ユーザー入力、LLM 処理、条件分岐、外部 API 呼び出しなどのノードを線で繋いでアプリケーションロジックを構築します。コードを書かずに済むため、非エンジニアでも AI 機能を組み込んだアプリケーションを短時間で開発できます。
また、Dify にはプロンプト管理機能が組み込まれており、プロンプトのバージョン管理や A/B テストも簡単に実行できます。開発したアプリケーションは、API 経由で既存システムに組み込んだり、Web アプリとして直接公開したりできるでしょう。
LangGraph:状態管理型 AI ワークフロー構築フレームワーク
LangGraph は、LangChain チームが開発した、状態管理に特化したワークフロー構築フレームワークです。グラフベースの設計により、複雑な分岐やループを含む AI ワークフローを、プログラマティックに記述できます。
LangGraph の特徴はステートフルな処理にあります。従来の LangChain では扱いにくかった「前の処理結果を後の処理で参照する」「条件によって処理フローを動的に変更する」といった複雑なロジックを、明確な状態管理で実現できます。
例えば、マルチエージェントシステムにおいて、各エージェントの処理結果を共有状態で管理し、エージェント間の協調処理を効率的に実装できるでしょう。また、エラー処理や再試行ロジックも、状態を持ったノードとして表現できるため、堅牢なシステム構築が可能です。
LangChain:LLM アプリケーション開発の包括的ツールキット
LangChain は、LLM アプリケーション開発のための包括的なライブラリ集です。データ接続、プロンプト管理、メモリ機能、エージェント、チェーンなど、AI 開発に必要なコンポーネントを豊富に提供します。
LangChain の強みはエコシステムの充実にあります。300 を超えるインテグレーションを通じて、様々なデータソース、LLM プロバイダー、ベクトルデータベース、外部サービスと簡単に連携できます。また、コミュニティによる活発な開発により、新しい機能やアダプターが継続的に追加されています。
プログラマーにとって、LangChain は完全にコード駆動の開発環境を提供します。細かい制御が可能な反面、適切に使いこなすには相応のプログラミングスキルと、LangChain の概念に対する理解が必要でしょう。
表現力の比較
ワークフロー設計の柔軟性
AI アプリケーションにおけるワークフロー設計の柔軟性を比較すると、それぞれのツールで大きく異なるアプローチが見えてきます。
Dify のワークフロー設計は視覚的な直感性を重視しています。ノードベースのエディタにより、非エンジニアでも複雑なフローを理解しやすい設計になっています。しかし、この視覚的なアプローチには制約もあります。
Dify で表現できるワークフローは、基本的に**有向非循環グラフ(DAG)**に限定されます。つまり、ループ処理や複雑な条件分岐を伴う動的なフロー制御は、標準機能では実現が困難です。また、ノード間のデータ受け渡しも、事前定義されたスキーマに従う必要があるため、動的なデータ構造の扱いには制約があります。
以下の図で、各ツールのワークフロー表現力の違いを示します。
mermaidflowchart TD
A["シンプルなフロー"] --> B["複雑な分岐"]
B --> C["ループ処理"]
C --> D["動的フロー制御"]
subgraph tools["ツール対応範囲"]
dify["Dify<br/>○ → △ → × → ×"]
langgraph["LangGraph<br/>○ → ○ → ○ → ○"]
langchain["LangChain<br/>○ → △ → △ → △"]
end
D --> tools
図で理解できる要点:
- Dify は直線的なフローに最適化
- LangGraph は複雑なフロー制御まで対応
- LangChain は中間的な表現力を持つ
LangGraph では、グラフノードとエッジの組み合わせにより、極めて柔軟なワークフロー設計が可能です。ループ処理、条件分岐、並列実行、エラーハンドリングなど、プログラミング言語と同等の制御構造を表現できます。
typescript// LangGraphでの動的フロー制御例
const workflow = new StateGraph({
channels: {
messages: [],
iteration_count: 0,
max_iterations: 5,
},
});
// 条件付きループの実装
workflow.addConditionalEdges(
'process_node',
(state) => {
if (state.iteration_count < state.max_iterations) {
return 'continue';
}
return 'end';
},
{
continue: 'process_node', // ループバック
end: 'final_node',
}
);
LangChain のワークフロー設計は、チェーンベースのアプローチを採用しています。複数の処理ステップを連鎖させる形でワークフローを構築しますが、LangGraph ほどの動的制御は標準では提供されていません。
複雑なロジック実装の可能性
複雑なビジネスロジックの実装において、各ツールの表現力には明確な差が現れます。
Dify では、カスタムノードを作成することで、ある程度の複雑なロジックに対応できます。しかし、カスタムノードの開発には Python プログラミングが必要であり、ノーコード開発の利点が失われる場合があります。
python# Difyカスタムノード例(複雑な条件判定)
from dify_plugin import CustomNode
class ComplexLogicNode(CustomNode):
def process(self, inputs):
# 複雑な業務ロジックの実装
score = self.calculate_complex_score(inputs['data'])
if score > 0.8:
return {"result": "high_priority", "score": score}
elif score > 0.5:
return {"result": "medium_priority", "score": score}
else:
return {"result": "low_priority", "score": score}
LangGraph では、状態管理とグラフ構造の組み合わせにより、非常に複雑なロジックを表現できます。マルチエージェントシステム、段階的推論、動的プランニングなど、従来は実装が困難だった高度な AI パターンを実現可能です。
typescript// LangGraphでの複雑なマルチエージェント協調
const agentGraph = new StateGraph({
channels: {
task: '',
agent_outputs: {},
consensus_reached: false,
},
});
agentGraph.addNode('coordinator', coordinatorAgent);
agentGraph.addNode('analyst', analystAgent);
agentGraph.addNode('reviewer', reviewerAgent);
agentGraph.addNode('consensus_checker', checkConsensus);
// 動的なエージェント協調フロー
agentGraph.addConditionalEdges(
'consensus_checker',
(state) => {
if (state.consensus_reached) {
return 'end';
}
return 'retry';
}
);
LangChain では、カスタムチェーンやカスタムツールの作成により、複雑なロジックに対応します。豊富なコンポーネントライブラリを活用することで、効率的な開発が可能ですが、大規模な状態管理が必要な場合は設計が複雑になる傾向があります。
カスタマイゼーション範囲
各ツールのカスタマイゼーション範囲を詳しく見てみましょう。
項目 | Dify | LangGraph | LangChain |
---|---|---|---|
UI/UX カスタマイズ | ★★★ | ★ | ★ |
ロジックカスタマイズ | ★★ | ★★★ | ★★★ |
インテグレーション | ★★ | ★★ | ★★★ |
デプロイメント | ★★★ | ★★ | ★★ |
Dify の最大の魅力はUI/UX レベルでのカスタマイゼーションです。チャットインターフェース、フォーム、ダッシュボードなど、エンドユーザー向けの画面を簡単にカスタマイズできます。これにより、技術的な詳細を隠蔽した使いやすい AI アプリケーションを迅速に構築できるでしょう。
LangGraph と LangChain は、プログラマティックなカスタマイゼーションに優れています。特に LangGraph では、グラフの構造自体を動的に変更することも可能で、実行時の状況に応じてワークフローを適応させることができます。
保守性の比較
コードの可読性と管理
保守性の観点で最も重要な要素の一つが、システムの可読性と管理のしやすさです。この点で、各ツールは大きく異なる特性を示します。
Dify のビジュアルワークフローは、非エンジニアでも理解しやすい反面、複雑になると管理が困難になる場合があります。ノード数が 100 を超えるような大規模なワークフローでは、全体の把握が困難になり、意図しない依存関係が生まれるリスクがあります。
以下の図で、各ツールの保守性特性を示します。
mermaidstateDiagram-v2
[*] --> simple_project: プロジェクト開始
simple_project --> medium_complexity: 機能追加
medium_complexity --> complex_project: さらなる機能追加
state simple_project {
dify_simple: Dify(高可読性)
lg_simple: LangGraph(中可読性)
lc_simple: LangChain(中可読性)
}
state complex_project {
dify_complex: Dify(可読性低下)
lg_complex: LangGraph(構造的管理)
lc_complex: LangChain(要設計配慮)
}
図の要点:
- 小規模プロジェクトでは Dify が最も理解しやすい
- 大規模化すると LangGraph の構造的アプローチが有効
- LangChain は設計次第で保守性が大きく変わる
LangGraph では、状態とフローの分離により、システムの複雑性を管理しやすくなっています。状態の変更履歴を追跡でき、各ノードの責任範囲が明確であるため、デバッグや修正が容易です。
typescript// LangGraphでの保守性を考慮した設計例
interface ApplicationState {
user_input: string;
processed_data: any;
validation_errors: string[];
processing_stage:
| 'input'
| 'validation'
| 'processing'
| 'output';
}
// 各ノードは状態の特定部分のみを変更
const validationNode = (state: ApplicationState) => {
const errors = validateInput(state.user_input);
return {
...state,
validation_errors: errors,
processing_stage:
errors.length > 0 ? 'input' : 'processing',
};
};
LangChain では、適切なアーキテクチャパターンを採用することで保守性を確保できます。しかし、自由度が高い分、設計者のスキルに依存する部分も大きくなります。
バージョン管理対応
バージョン管理は、長期的な保守性において極めて重要な要素です。
Dify はデータベースベースの設定管理を採用しているため、従来のファイルベースのバージョン管理との親和性に課題があります。ワークフローの変更履歴は管理画面で確認できますが、Git のような分散バージョン管理システムとの連携は限定的です。
yaml# Difyワークフロー設定のエクスポート例
workflow:
id: 'customer-support-bot'
version: '1.2.0'
nodes:
- id: 'input_node'
type: 'user_input'
config:
fields: ['question', 'customer_id']
- id: 'rag_node'
type: 'rag_retrieval'
config:
knowledge_base: 'support_docs'
top_k: 5
LangGraph と LangChain は、コードベースであるため、標準的なバージョン管理ツールとの親和性が高くなっています。差分管理、ブランチ戦略、マージ戦略など、ソフトウェア開発のベストプラクティスをそのまま適用できます。
チーム開発における協業性
チーム開発での協業性について、各ツールの特徴を比較してみましょう。
協業要素 | Dify | LangGraph | LangChain |
---|---|---|---|
同時編集 | ○ | × | × |
コンフリクト解決 | △ | ○ | ○ |
ロール分担 | ○ | △ | △ |
レビュープロセス | △ | ○ | ○ |
Dify のWeb ベースエディタでは、複数のメンバーが同時にワークフローを編集できます。リアルタイム同期により、変更が即座に他のメンバーに反映されるため、迅速な協業が可能です。しかし、同じノードを同時に編集した場合のコンフリクト解決は、ユーザーの手動操作に依存します。
LangGraph や LangChain では、コードレビュー文化をそのまま適用できます。プルリクエストベースの開発フローにより、変更内容の詳細な検証と、チーム全体での知識共有が可能になります。
typescript// LangGraphでのコードレビュー対象例
// PR #123: エラーハンドリング機能の追加
const errorHandlingWorkflow = new StateGraph({
channels: {
error_count: 0,
max_retries: 3,
current_step: '',
},
});
// レビューポイント:エラー処理の適切性
errorHandlingWorkflow.addNode('error_handler', (state) => {
if (state.error_count >= state.max_retries) {
throw new Error('Maximum retry limit exceeded');
}
return { ...state, error_count: state.error_count + 1 };
});
学習コストの比較
初期習得難易度
各ツールの初期習得難易度は、対象となるユーザー層によって大きく異なります。
Dify は最も低い学習コストの初期習得を実現しています。ドラッグ&ドロップの直感的な操作により、プログラミング経験がない人でも、1-2 時間程度でシンプルな AI アプリケーションを作成できるでしょう。
markdown# Dify 初心者の典型的な学習パス(所要時間:4-6 時間)
1. チュートリアル完了(1 時間)
2. シンプルなチャットボット作成(1 時間)
3. RAG アプリケーション構築(2 時間)
4. API 連携の基本(1-2 時間)
LangGraph は中程度の学習コストを要求します。Python プログラミングの基礎知識は必須であり、さらに状態管理とグラフ理論の概念理解が必要です。しかし、一度習得すれば非常に強力なツールとして活用できます。
python# LangGraph学習者が最初に理解すべき概念
from langgraph.graph import StateGraph
# 1. 状態定義の理解
class WorkflowState(TypedDict):
input: str
output: str
step_count: int
# 2. ノード関数の作成
def processing_node(state: WorkflowState) -> WorkflowState:
return {
**state,
"output": f"Processed: {state['input']}",
"step_count": state["step_count"] + 1
}
# 3. グラフ構築の理解
workflow = StateGraph(WorkflowState)
workflow.add_node("process", processing_node)
workflow.set_entry_point("process")
LangChain は最も高い学習コストを要求します。豊富な機能と柔軟性を持つ反面、適切に使いこなすには相当な学習投資が必要です。プログラミングスキル、LLM の知識、ライブラリの概念理解すべてが求められます。
開発者のスキル要件
各ツールが要求するスキル要件を詳しく分析してみましょう。
スキル領域 | Dify | LangGraph | LangChain |
---|---|---|---|
プログラミング | 不要 | Python 必須 | Python 必須 |
AI/ML 知識 | 基礎レベル | 中級レベル | 上級レベル |
システム設計 | 不要 | 中級レベル | 上級レベル |
デバッグスキル | 基礎レベル | 中級レベル | 上級レベル |
Dify を効果的に活用するには、ビジネス要件の整理能力が最も重要です。プログラミングスキルは不要ですが、AI アプリケーションの要件定義や、ユーザーエクスペリエンスの設計能力は必要になります。
LangGraph では、構造化された思考力が重要です。複雑なワークフローを状態とフローに分解して設計する能力、そして Python での実装スキルが求められます。
python# LangGraph開発者に求められる思考プロセス例
"""
要件:顧客サポートの多段階エスカレーション
1. 状態設計
- customer_query: 顧客の質問
- confidence_score: AI回答の信頼度
- escalation_level: エスカレーション段階
- resolution_status: 解決状況
2. フロー設計
- 初回AI回答 → 信頼度チェック → 必要に応じてエスカレーション
- 各段階での状態更新ロジック
3. エラーハンドリング
- タイムアウト処理
- 外部API障害時の代替フロー
"""
LangChain を使いこなすには、包括的な AI 開発スキルが必要です。RAG、エージェント、チェーン、プロンプトエンジニアリングなど、幅広い概念の理解と実装経験が求められます。
ドキュメント・コミュニティサポート
学習を支援するドキュメントとコミュニティの充実度も、学習コストに大きく影響します。
Dify は日本語ドキュメントも充実しており、スクリーンショット付きの詳細なチュートリアルが豊富に提供されています。また、公式の Discord コミュニティでは、初心者向けの質問にも丁寧に回答される傾向があります。
LangGraph は比較的新しいツールであるため、ドキュメントは発展途上です。しかし、LangChain チームによる継続的な改善により、品質は向上し続けています。コミュニティはまだ小規模ですが、開発者による深い技術的な議論が活発に行われています。
LangChain は最も充実したドキュメントと最大規模のコミュニティを持っています。公式ドキュメント、チュートリアル、サンプルコード、コミュニティによる非公式ガイドなど、学習リソースが豊富に揃っています。
実用性とパフォーマンス
開発速度
実際のプロジェクトにおける開発速度は、ツール選択の重要な判断基準です。
Dify はプロトタイピング段階で圧倒的な速度を発揮します。シンプルな RAG アプリケーションであれば、30 分程度で動作するプロトタイプを作成できるでしょう。この迅速性により、ステークホルダーとの早期フィードバックループを構築できます。
typescript// 同等機能の実装時間比較(RAGベースのQ&Aシステム)
/**
* Dify: 30分
* - Knowledge Base設定: 10分
* - ワークフロー構築: 15分
* - UI調整: 5分
*
* LangGraph: 2-3日
* - 環境設定: 半日
* - グラフ設計: 1日
* - 実装・テスト: 1-1.5日
*
* LangChain: 1-2日
* - 環境設定: 半日
* - チェーン設計: 半日
* - 実装・テスト: 半日-1日
*/
しかし、カスタマイゼーションが必要になると、開発速度の関係は逆転します。Dify ではカスタムノードの開発が必要になり、結果的に開発時間が大幅に増加する場合があります。
LangGraph と LangChain は、初期の学習コストが高い反面、継続的な開発では安定した速度を維持できます。特に類似機能の実装や、既存コードの再利用により、開発効率は向上していきます。
運用時の安定性
本番環境での安定性は、ビジネスクリティカルなアプリケーションにおいて最重要課題です。
Dify はマネージドサービスとしての安定性を提供します。インフラストラクチャの管理、スケーリング、セキュリティアップデートなどは、Dify チームが責任を持って管理します。これにより、アプリケーション開発者は業務ロジックに集中できるでしょう。
yaml# Difyの運用面での利点
monitoring:
- 自動パフォーマンス監視
- リアルタイムエラー検知
- 使用量ダッシュボード
scaling:
- 自動スケールアウト
- 負荷分散
- CDN最適化
security:
- 定期セキュリティ更新
- データ暗号化
- アクセス制御
LangGraph と LangChain では、運用責任は開発チームにあります。この自己管理により完全な制御が可能になりますが、適切な監視、ログ収集、エラーハンドリングの実装が必要です。
スケーラビリティ
アプリケーションの成長に対応するスケーラビリティも重要な評価軸です。
スケール要素 | Dify | LangGraph | LangChain |
---|---|---|---|
ユーザー数増加 | ★★★ | ★★ | ★★ |
機能複雑化 | ★ | ★★★ | ★★ |
データ量増加 | ★★ | ★★ | ★★ |
開発チーム拡大 | ★★ | ★★ | ★★ |
Dify は水平スケールに優れていますが、機能の複雑化には制約があります。ユーザー数の増加に対しては、マネージドサービスとしての自動スケーリングが威力を発揮しますが、ワークフローが複雑になると保守が困難になる傾向があります。
LangGraph は機能の複雑化に最も対応しやすい設計になっています。モジュラーなグラフ構造により、新機能の追加や既存機能の修正が、他の部分に影響を与えにくくなっています。
用途別推奨選択
実際のプロジェクトでの選択指針を、具体的なユースケース別に整理します。
プロトタイピング・概念実証では、Dify が最適です。迅速な実装により、アイデアの検証とステークホルダーとの合意形成を効率的に進められます。技術的な制約よりも、速度と理解しやすさを重視する段階では、Dify の価値は絶大です。
エンタープライズアプリケーションでは、要件の複雑さに応じて選択が分かれます。シンプルな業務効率化であれば Dify、複雑なワークフローや既存システムとの深い連携が必要であれば LangGraph または LangChain が適しています。
typescript// 用途別選択フローチャート
const selectTool = (requirements) => {
if (
requirements.complexity === 'simple' &&
requirements.speed === 'critical'
) {
return 'Dify';
}
if (
requirements.workflow === 'complex' &&
requirements.state_management === 'required'
) {
return 'LangGraph';
}
if (
requirements.integrations === 'extensive' &&
requirements.customization === 'deep'
) {
return 'LangChain';
}
return 'evaluate_hybrid_approach';
};
研究開発プロジェクトでは、LangGraph や LangChainが適しています。新しい AI 手法の実験や、カスタムアルゴリズムの実装には、プログラマティックな制御が不可欠です。
チーム構成による選択も重要な要素です。非エンジニア中心のチームなら Dify、AI 専門チームなら LangGraph/LangChain、混合チームなら段階的なアプローチ(プロトタイプは Dify、本格実装は LangGraph)が効果的でしょう。
まとめ
Dify、LangGraph、LangChain の比較を通じて、それぞれのツールが異なる強みと用途を持つことが明確になりました。
Difyは、迅速なプロトタイピングと非エンジニアでも扱える直感性が最大の価値です。学習コストが低く、短期間で成果を出せる反面、複雑な要件には制約があります。ビジネス要件の検証や、シンプルな AI 機能の実装において威力を発揮するでしょう。
LangGraphは、複雑なワークフローと状態管理に特化した新世代のツールです。高い表現力と構造的な保守性を持つ反面、相応の学習投資が必要です。マルチエージェントシステムや複雑な分岐ロジックが求められるプロジェクトに最適です。
LangChainは、豊富なエコシステムと実績のある包括的なツールキットです。高い柔軟性と豊富な機能を持つ反面、適切に使いこなすには上級レベルのスキルが必要です。大規模で複雑な AI アプリケーションの構築において、その真価を発揮します。
最適な選択は、プロジェクトの要件、チームのスキル、期待する成果によって決まります。重要なのは、各ツールの特性を理解し、プロジェクトの成功に最も貢献する選択肢を選ぶことです。また、段階的なアプローチ(プロトタイプから本格実装への移行)も有効な戦略として検討する価値があるでしょう。
関連リンク
- article
Dify と LangGraph/LangChain を比較:表現力・保守性・学習コストのリアル
- article
Dify でジョブが止まる/再実行される問題の原因切り分けガイド
- article
Dify の内部アーキテクチャ超図解:エージェント・ワークフロー・データストアの関係
- article
2025年 Dify コミュニティとエコシステムの最新動向
- article
Dify × GitHub Actions で DevOps 自動化
- article
Dify の利用ログ・解析データの活用でプロダクト改善
- article
Dify と LangGraph/LangChain を比較:表現力・保守性・学習コストのリアル
- article
LangChain を Edge で走らせる:Cloudflare Workers/Deno/Bun 対応の初期配線
- article
LangChain を“1 枚絵”で理解する:データ取り込み → 前処理 → 推論 → 評価 → 運用の全体像
- article
LangChain で RAG 構築:Retriever・VectorStore の設計ベストプラクティス
- article
LangChain の PromptTemplate 最適化:再利用・バージョニング・評価手法
- article
LangChain × LCEL 徹底解説:Runnable で組む宣言的パイプライン
- article
Prisma トラブルシュート大全:P1000/P1001/P1008 ほか接続系エラーの即解決ガイド
- article
ESLint vs Biome vs Rome 後継:速度・エコシステム・移行コストを実測比較
- article
Pinia と TanStack Query の使い分けを徹底検証:サーバー/クライアント状態の最適解
- article
Dify と LangGraph/LangChain を比較:表現力・保守性・学習コストのリアル
- article
Cursor と Copilot Chat/Codeium の役割比較:設計支援 vs 実装支援の最適配置
- article
Obsidian Sync と iCloud/Dropbox/Google Drive:速度・信頼性・復旧性を実測比較
- blog
iPhone 17シリーズの発表!全モデルiPhone 16から進化したポイントを見やすく整理
- blog
Googleストアから訂正案内!Pixel 10ポイント有効期限「1年」表示は誤りだった
- blog
【2025年8月】Googleストア「ストアポイント」は1年表記はミス?2年ルールとの整合性を検証
- blog
Googleストアの注文キャンセルはなぜ起きる?Pixel 10購入前に知るべき注意点
- blog
Pixcel 10シリーズの発表!全モデル Pixcel 9 から進化したポイントを見やすく整理
- blog
フロントエンドエンジニアの成長戦略:コーチングで最速スキルアップする方法
- review
今の自分に満足していますか?『持たざる者の逆襲 まだ何者でもない君へ』溝口勇児
- review
ついに語られた業界の裏側!『フジテレビの正体』堀江貴文が描くテレビ局の本当の姿
- review
愛する勇気を持てば人生が変わる!『幸せになる勇気』岸見一郎・古賀史健のアドラー実践編で真の幸福を手に入れる
- review
週末を変えれば年収も変わる!『世界の一流は「休日」に何をしているのか』越川慎司の一流週末メソッド
- review
新しい自分に会いに行こう!『自分の変え方』村岡大樹の認知科学コーチングで人生リセット
- review
科学革命から AI 時代へ!『サピエンス全史 下巻』ユヴァル・ノア・ハラリが予見する人類の未来