1. はじめに
企業で使用されるCRM(顧客関係管理)システムの中でも、Salesforceは非常に人気があります。一方で、データ分析や可視化のために、PythonのフレームワークであるStreamlitも多くのユーザーに利用されています。今回の記事では、StreamlitとSalesforceを連携させて、データをインタラクティブに表示するアプリケーションを作成する方法について解説します。
2. 準備
2.1 必要なツールとライブラリのインストール
まず、以下のツールとライブラリをインストールします。
- Python
- Streamlit
- Salesforceのライブラリ(Simple-Salesforce)
以下のコマンドを使用してインストールを行います。
pip install streamlit simple-salesforce
2.2 Salesforce APIの設定
Salesforce APIを使用するには、Salesforceのデベロッパーアカウントが必要です。以下の手順に従って、APIアクセスの設定を行います。
- Salesforceデベロッパーアカウントの作成:
- Salesforce Developersにアクセスし、無料アカウントを作成します。
- Connected Appの設定:
- Salesforceにログイン後、「設定」→「アプリ」→「アプリケーションマネージャー」に移動し、「新しい接続アプリケーション」を作成します。
- API(OAuth)設定で、必要な情報(Callback URLやOAuthスコープ)を入力します。
- OAuth認証情報の取得:
- 作成したConnected Appの「コンシューマーキー」と「コンシューマー秘密」を取得します。
2.3 Pythonコードの準備
必要なライブラリをインポートし、Salesforceに接続するための基本的なコードを準備します。
import streamlit as st
from simple_salesforce import Salesforce
# Salesforce接続設定
sf = Salesforce(username='your_username', password='your_password', security_token='your_security_token')
3. 基本的なStreamlitアプリの作成
まずは、Streamlitアプリの基本構造を作成します。
import streamlit as st
st.title('Salesforceと連携するStreamlitアプリ')
st.write('このアプリでは、Salesforceのデータを表示します。')
このスクリプトをapp.py
として保存し、以下のコマンドで実行します。
streamlit run app.py
ブラウザが自動的に開き、基本的なタイトルと説明が表示されます。
4. Salesforceデータの取得と表示
次に、Salesforceからデータを取得し、Streamlitで表示する方法を説明します。今回は、Salesforceの標準オブジェクトである「Account」データを取得して表示します。
import streamlit as st
from simple_salesforce import Salesforce
import pandas as pd
# Salesforce接続設定
sf = Salesforce(username='your_username', password='your_password', security_token='your_security_token')
st.title('Salesforceと連携するStreamlitアプリ')
st.write('このアプリでは、Salesforceのデータを表示します。')
# Salesforceからデータを取得
query = "SELECT Id, Name, Industry, AnnualRevenue FROM Account LIMIT 10"
records = sf.query(query)['records']
# データをDataFrameに変換
df = pd.DataFrame(records).drop(columns='attributes')
# データを表示
st.write("Accountデータ:")
st.write(df)
このスクリプトを実行すると、Salesforceから取得したAccountデータがDataFrame形式で表示されます。
5. インタラクティブな機能の追加
次に、ユーザーがインタラクティブに操作できる機能を追加します。例えば、特定の業界(Industry)を選択して、その業界に関連するAccountデータのみを表示する機能を追加します。
import streamlit as st
from simple_salesforce import Salesforce
import pandas as pd
# Salesforce接続設定
sf = Salesforce(username='your_username', password='your_password', security_token='your_security_token')
st.title('Salesforceと連携するStreamlitアプリ')
st.write('このアプリでは、Salesforceのデータを表示します。')
# Salesforceからデータを取得
query = "SELECT Id, Name, Industry, AnnualRevenue FROM Account"
records = sf.query(query)['records']
# データをDataFrameに変換
df = pd.DataFrame(records).drop(columns='attributes')
# 業界リストを取得
industries = df['Industry'].unique().tolist()
industries.insert(0, 'すべて')
# ユーザー入力を取得
selected_industry = st.selectbox('業界を選択してください', industries)
# データフィルタリング
if selected_industry != 'すべて':
df = df[df['Industry'] == selected_industry]
# データを表示
st.write("Accountデータ:")
st.write(df)
このスクリプトを実行すると、ユーザーは業界を選択でき、選択した業界に関連するAccountデータのみが表示されます。
6. データの可視化
Streamlitを使うと、データの可視化も簡単に行えます。次に、Accountデータの年収(AnnualRevenue)を棒グラフで表示する方法を紹介します。
import streamlit as st
from simple_salesforce import Salesforce
import pandas as pd
import matplotlib.pyplot as plt
# Salesforce接続設定
sf = Salesforce(username='your_username', password='your_password', security_token='your_security_token')
st.title('Salesforceと連携するStreamlitアプリ')
st.write('このアプリでは、Salesforceのデータを表示します。')
# Salesforceからデータを取得
query = "SELECT Id, Name, Industry, AnnualRevenue FROM Account"
records = sf.query(query)['records']
# データをDataFrameに変換
df = pd.DataFrame(records).drop(columns='attributes')
# 業界リストを取得
industries = df['Industry'].unique().tolist()
industries.insert(0, 'すべて')
# ユーザー入力を取得
selected_industry = st.selectbox('業界を選択してください', industries)
# データフィルタリング
if selected_industry != 'すべて':
df = df[df['Industry'] == selected_industry]
# データを表示
st.write("Accountデータ:")
st.write(df)
# 年収データを可視化
st.write("年収の分布:")
fig, ax = plt.subplots()
ax.bar(df['Name'], df['AnnualRevenue'])
plt.xticks(rotation=90)
st.pyplot(fig)
このスクリプトを実行すると、選択した業界の各Accountの年収が棒グラフで表示されます。
7. ユーザー入力に基づくデータ更新
最後に、ユーザーが入力したデータを基にSalesforceのデータを更新する方法を説明します。例えば、特定のAccountの年収を更新する機能を追加します。
import streamlit as st
from simple_salesforce import Salesforce
import pandas as pd
# Salesforce接続設定
sf = Salesforce(username='your_username', password='your_password', security_token='your_security_token')
st.title('Salesforceと連携するStreamlitアプリ')
st.write('このアプリでは、Salesforceのデータを表示します。')
# Salesforceからデータを取得
query = "SELECT Id, Name, Industry, AnnualRevenue FROM Account"
records = sf.query(query)['records']
# データをDataFrameに変換
df = pd.DataFrame(records).drop(columns='attributes')
# 業界リストを取得
industries = df['Industry'].unique().tolist()
industries.insert(0, 'すべて')
# ユーザー入力を取得
selected_industry = st.selectbox('業界を選択してください', industries)
# データフィルタリング
if selected_industry != 'すべて':
df = df[df['Industry'] == selected_industry]
# データを表示
st.write("Accountデータ:")
st.write(df)
# 年収の更新
st.write("年収の更新:")
account_id = st.selectbox('Accountを選択してください', df['Id'])
new_revenue = st.number_input('新しい年収を入力してください', min_value=0, value=0)
if st.button('年収を更新'):
sf.Account.update(account_id, {'AnnualRevenue': new_revenue})
st.write(f'Account ID {account_id} の年収が {new_revenue} に更新されました。')
このスクリプトを実行すると、ユーザーは特定のAccountを選択して新
しい年収を入力し、ボタンをクリックすることで年収を更新できます。
8. まとめ
本記事では、StreamlitとSalesforceを連携させる方法を解説しました。Streamlitを使用すると、PythonコードだけでインタラクティブなWebアプリケーションを簡単に作成できます。Salesforceからデータを取得し、表示、可視化、更新するアプリケーションを作成することで、データの活用がさらに広がります。これを基に、さらに高度な機能を追加して、あなた自身のニーズに合ったアプリケーションを作成してみてください。