シェルスクリプトからcondaコマンドを活用したいとき

シェルスクリプトからcondaコマンドを活用したいとき

こんにちは!

今日はみんな大好きcondaコマンドについてです。
condaコマンドで仮想環境に入って、何らかの処理をして、戻ってくる ようなシェルスクリプト、バッチタスクをやるときのTipsです。

AI開発において、Anacondaとその中核であるcondaパッケージマネージャーはとっても重宝します。
しかし、シェルスクリプトから自動的にcondaを利用しようとすると、意外なハードルがあります。

本記事では、シェルスクリプトからcondaコマンドを正しく呼び出す方法について解説します。

condaと非対話モードの課題

AnacondaがインストールされているLinux環境において、condaコマンドは通常、.bashrc.bash_profileなどの設定ファイルによって初期化されます。

なんとなくシェルをつかっていると、このcondaコマンドの初期化を忘れてしまいますが、これらの設定は多くの場合シェルの「対話モード」でのみ有効になるように設計されています。

ゆえにシェルスクリプトのような非対話モードでは、condaコマンドが正しく機能してくれません

例えば、.bashrcファイル内のconda初期化部分には、以下のような条件が含まれています

# >>> conda initialize >>>
if [[ $- == *i* ]]; then  # 対話モードの場合のみ実行
    . "/path/to/anaconda3/etc/profile.d/conda.sh"
fi
# <<< conda initialize <<<

ここでの if [[ $- == *i* ]] が対話モードチェックであり、シェルスクリプトのような非対話環境では、この条件に合致せずconda初期化が行われません。
つまりシェルスクリプトの中でcondaコマンドがうまく動いてくれません。

解決策→enable_conda.shスクリプト

この問題を解決するために、以下のようなスクリプトを作成しましょう

#!/bin/bash
###[enable_conda.sh]###########################################################
# condaの初期化を明示的に行う
# ~/.bashrcの対話モードチェックをバイパスするために、条件部分を直接実行する

# ユーザーのホームディレクトリを使用
CONDA_PATH="$HOME/anaconda3"

# condaの初期化部分を直接実行
__conda_setup="$('$CONDA_PATH/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "$CONDA_PATH/etc/profile.d/conda.sh" ]; then
        . "$CONDA_PATH/etc/profile.d/conda.sh"
    else
        export PATH="$CONDA_PATH/bin:$PATH"
    fi
fi
unset __conda_setup

# パスを確認
echo "使用するcondaのパス: $(which conda)"
echo "condaのバージョン: $(conda --version)"
###[/enable_conda.sh]#########################################################

このスクリプトでは、

  1. 対話モードチェックをバイパスして、直接conda初期化コードを実行します
  2. 環境変数を適切に設定し、condaコマンドをシェルスクリプト中からも使用可能にします

sourceコマンドの重要性

さて、このスクリプトの効果を得るためには、これをsourceコマンドをつかって実行するのがポイントです

source ./enable_conda.sh
# または
. ./enable_conda.sh  # ドットコマンド(sourceと同等)

復習)sourceコマンドとは?

sourceコマンドは、指定されたファイル内のコマンドを現在のシェルプロセス内で直接実行するためのシェルビルトインコマンドです。これには以下のような特徴があります

  • ファイル内のコマンドが現在のシェルプロセス内で実行される
  • 環境変数の変更やエイリアスの定義など、シェルの状態変更が現在のセッションに反映される
  • .(ドット)コマンドと同じ機能を持つ

sourceと直接実行の違い

普段あまり気にしていませんが、スクリプトを直接実行する場合との違いは以下のようになります

実行方法 プロセス 環境変数への影響 Condaの場合
sh script.sh 新しいシェルプロセス(子プロセス)を作成 スクリプト内で設定された環境変数は終了後に失われる 初期化は子プロセスでのみ有効、親シェルではcondaコマンドは使えない
source script.sh 現在のシェルプロセス内で直接実行 環境変数の変更が現在のシェルに保持される 現在のシェルでconda初期化が行われ、以降condaコマンドが使える

Condaのような環境管理ツールを初期化するスクリプトでは、現在のシェル環境に変更を反映させる必要があるため、必ずsourceコマンドを使用しましょう

実践的な使用例

以下のように使用することができます

バッチ処理スクリプト

#!/bin/bash
# データ処理バッチジョブ

# condaを初期化
source /path/to/enable_conda.sh

# 特定の環境をアクティベート
conda activate myenv

# Pythonスクリプトを実行
python /path/to/process_data.py

# 処理完了後、基本環境に戻る
conda deactivate

定期実行(cron)ジョブ

crontabファイル:

# 毎日午前2時にデータ更新を実行
0 2 * * * /bin/bash /path/to/daily_update.sh

daily_update.sh:

#!/bin/bash
# conda初期化
source /home/user/scripts/enable_conda.sh

# 環境をアクティベート
conda activate analysis_env

# スクリプト実行
python /home/user/projects/update_database.py

# ログ出力
echo "$(date): データベース更新完了" >> /home/user/logs/cron.log

上記のようにスクリプトを別ファイルにしなくてもそんなにながくないので、実行していスクリプトに直接conda初期化コードを入れてしまってもOKですね

まとめ

シェルスクリプトからcondaコマンドを使用するには

  1. 対話モードチェックをバイパスする初期化スクリプト(enable_conda.sh)を作成する(またスクリプトに入れちゃってもOK)
  2. 外部スクリプトにする場合は、それをsourceコマンドで実行し、現在のシェル環境にconda設定をおぼえさせる
  3. 環境変数を活用して、異なる環境でも再利用可能にする

ということで、シェルスクリプトのなかで気軽にcondaが使えるようになりました!

Read more

AIエージェントを"事業に載せる"ために【第3回】AI導入を止めないために、実務で先に設計すべきこと

AIエージェントを"事業に載せる"ために【第3回】AI導入を止めないために、実務で先に設計すべきこと

— AI導入を"事業に載せる"ために、いま設計すべきこと(全3回) こんにちは!Qualitegコンサルティングチームです。 今回の「AI導入を“事業に載せる”ために、いま設計すべきこと」シリーズも、いよいよ第3回です。 第1回では、実際のAI導入事故を通じて、AIエージェントのリスクが単なる技術不良ではなく、権限や運用設計の不在から生まれることを見てきました。第2回では、事故が起きたときに責任をどこに置くのか、法務・契約・組織の観点から責任分解の難しさを整理しました。 では、AI導入を止めずに前に進めるためには、実務として何を先に設計しておくべきなのでしょうか。 本記事では、品質保証の転換、人間レビューの限界、海外で進む保険市場の変化も踏まえながら、AIエージェント導入前に設計すべき5つの領域と、経営として先に答えるべき3つの問いを整理します。 1. 品質保証の転換:「AIは自信を持って間違える」を前提にする 従来のソフトウェアの品質保証は、少なくとも同じ入力に対して同じ結果を期待しやすく、仕様・テスト・再現性を軸に品質を確認する考え方に立っていました。 ISACA

By Qualiteg コンサルティング
主要LLMプロバイダーのAPI料金表 — Claude / GPT / Gemini/Grok 【2026年5月13日時点】

主要LLMプロバイダーのAPI料金表 — Claude / GPT / Gemini/Grok 【2026年5月13日時点】

こんにちは、 今回は、主要LLMプロバイダー( Claude / GPT /Gemini/Grok)のAPI料金表  をまとめてみました。(2026年5月13日時点) プロバイダ別 料金一覧 まずは各社の現行ラインナップを縦に並べた一覧をご紹介します。価格はすべて per 1M tokens、円表記は 1ドル=160円換算です。 Anthropic(Claude) モデル Status Context Input Output Cached Input Claude Opus 4.7 Fast Mode Beta(Opus専用) 1M $30.00<br>(¥4,800) $150.00<br>

By Qualiteg プロダクト開発部
コーディングエージェントの現状と未来への展望 【第3回】"書くAI"から"指揮するAI"へ──2026年の開発現場で起きている変化

コーディングエージェントの現状と未来への展望 【第3回】"書くAI"から"指揮するAI"へ──2026年の開発現場で起きている変化

こんにちは! コーディングエージェントシリーズ、ついに最終回です! 2026年に入り、Claude Code、Cursor 3、GitHub Copilot Coding Agentはいずれも、単なるコード補完やチャット型支援を超え、複数エージェントを使った開発ワークフローへ進化しつつあります。本稿では、AIコーディングエージェントの最新動向を、Claude CodeのAuto Memory / Subagents、Cursor 3のAgents Window、GitHub CopilotのCoding Agent、そしてSWE-benchの読み方まで含めて整理します。 第1回では、2025年12月時点で百花繚乱状態にあったAIコーディングエージェントの全体像を俯瞰し、商用からOSSまで20以上のツールを「CLIベース」「IDE統合型」「AI特化IDE型」「自律型」の4つのカテゴリに整理しました。 第2回では、Claude Code・Codex CLI・Aiderを詳細比較したうえで、現在のコーディングエージェントが共通して抱える構造的課題——コンテキストウィンドウの限界、セッ

By Qualiteg コンサルティング
Windows版 Claude Code を irm でインストールして「claude is not recognized」を直すまで

Windows版 Claude Code を irm でインストールして「claude is not recognized」を直すまで

こんにちは! 公式PowerShellインストーラー(irm https://claude.ai/install.ps1 | iex)で Claude Code を入れたのに、claude --version を叩くと「The term 'claude' is not recognized as a name of a cmdlet...」と怒られるときがあります これは Anthropic 公式 GitHub にも報告されている 既知のバグで、インストーラーが PATH の追加を忘れています。実際にインストール作業をやって詰まったので、最短の解決手順をまとめます。 環境 * Windows 11 * PowerShell 7.x(コードは PowerShell

By Qualiteg プロダクト開発部