Streamlitを使ってSAP情報を表示するWEBアプリを作ってみた

この記事を書いたメンバー:

大友 佑介

Streamlitを使ってSAP情報を表示するWEBアプリを作ってみた

目次

大友(yomon8です。

最近、私が参画しているプロジェクトでは、WEBアプリの開発にStreamlitを使う事例が増えてきています。デザインを追求しなくても良いなら、小さなWEBアプリをとても気軽に作ることができ、Pythonでデータの取得からフロントまで記述できるのが素敵なポイントだと思います。

SAPのデータを呼び出すための簡単なサンプルアプリを作ってみましたので、ここで紹介させていただきます。

Streamlitとは

Streamlitですが去年、Snowflakeに買収されニュースになったので、そちらから知った方もいるかもしれません。


データアプリの民主化 - SnowflakeのStreamlit買収 - Blog

注:本記事は(2022年3月2日)に公開された(Democratizing Data Apps — Snowflake to Acquire

snowflake.com

og_img

Snowflakeに関係があるくらいなのでデータ関連です。こちらの公式ページにある説明を引用してきますと、以下の通りです。

A faster way to build and share data apps

Streamlit turns data scripts into shareable web apps in minutes.
All in pure Python. No front‑end experience required.

ざっくりと意訳すると、データ関連のWEBアプリをPythonだけで簡単に作れるツールです。

簡単なStreamlitアプリを作ってみる

どのくらい簡単か説明するためにWEBアプリを作ってみます。手元に、以下のようなdata.csvというCSVファイルがあるので、こちらをWEBで表示できるようにしてみます。

A,B,C
1,2,3
11,12,13
101,102,103

三行のPythonを publish_csv.pyとして保存します。

import streamlit as st
import pandas as pd
st.dataframe(pd.read_csv("./data.csv"))

後はstreamlitコマンドで起動すればWEBサーバーが立ち上がりますので、

 streamlit run publish_csv.py

ブラウザでアクセスするとCSVがテーブル表示されています。本当にシンプルなアプリではありますが、簡単だということが伝わればと思います。

シンプルなアプリだけでなく、作り込むことで多機能なアプリも開発できます。以下のページでデモアプリが公開されているので、どのようなことができるかを見てみると面白いと思います。

https://streamlit.io/gallery

本当に作り込む場合はフロント開発用の技術の利用を検討した方が良いと思います。データエンジニアのようなPythonを習得済みの方が、分析したデータを見せるためのフロント開発をするにはとても合っている技術と言えます。

StreamlitでSAP情報を表示するアプリを作ってみた

前置きが長くなりましたが、SAPの情報を表示するアプリを作ってみました。


GitHub - beex-inc/sap-streamlit-app-sample: StreamlitでSAPデータを表示するサンプルアプリ

StreamlitでSAPデータを表示するサンプルアプリ. Contribute to beex-inc/sap-streamlit-app-sample development by creating an account on GitHub.

github.com

og_img

簡単なアプリですが、ここから少し説明を書いていきます。

前提

  • Git
  • Docker
  • Sユーザ(SAP NW SDKのダウンロードに利用)
  • Python(開発に必要。動かしてみるだけなら不要)

利用準備

リポジトリをクローン

上記に記載したGithubリポジトリからソースコードをクローンします。

 $ git clone https://github.com/beex-inc/sap-streamlit-app-sample.git

次にクローンしたリポジトリに移動します。

 $ cd sap-streamlit-app-sample/

SAP NetWeaver RFC SDK取得・配置

以下の情報を参照してダウンロードしてきます。Sユーザが必要になります。

SAP NetWeaver Remote Function Call (RFC) Software Development Kit (SDK)

2573790 - Installation, Support and Availability of the SAP NetWeaver RFC Library 7.50

今回ダウンロードしたのは「nwrfc750P_10-70002752.zip」 というファイルです。参考までにダウンロード画面を貼っておきます。

以下のように resources/フォルダにnwrfcsdk.zipという名前で移動します。

 $ mv nwrfc750P_10-70002752.zip resources/nwrfcsdk.zip
$ ls -l resources/
合計 19276
-rw-rw-r-- 1 ec2-user ec2-user 19737469  1月 14 13:06 nwrfc750.zip

これでSAP NetWeaver RFC SDKの配置が完了しました。

アプリのビルドと起動

以下の通りコマンドを打っていくとWEBアプリが立ち上がります。

# アプリ起動情報
IMAGE_NAME=sap-streamlit-app-sample # 任意のDockerイメージタグ
LISTEN_PORT=8501                    # 任意の待ち受けポート

# SAP接続情報
SAP_HOST=xxx.xxx.xxx.xxx # SAP Host or IP
SAP_SYSNR=nn             # SAP システム番号
SAP_CLIENT=nnn           # SAP クライアント番号
SAP_USER=****            # SAP ユーザ(権限があるユーザ)
SAP_PASSWORD=*****       # SAP ユーザパスワード

# Dockerイメージのビルド
docker build -t ${IMAGE_NAME} .

# 設定した変数を使ってアプリの立ち上げ
docker run -p ${LISTEN_PORT}:8501 ${IMAGE_NAME} \
  --host ${SAP_HOST} \
  --sysnr ${SAP_SYSNR} \
  --client ${SAP_CLIENT} \
  --user ${SAP_USER} \
  --password ${SAP_PASSWORD}

コマンドを打つと以下のような画面で待ち受けになるはずです。

もしローカルPCで作業している場合は、「http://localhost:8501」でWEBアプリに接続できます。

WEBアプリを使ってみる

起動したアプリにアクセスして画面を見てみます。サイドバーからtop/read table/user listの3ページが選べます。

Top画面

Topには接続情報を確認できるようにしています。

なお、この記事で利用しているSAP環境はCALで一時的にGoogle Cloud上に作った空のSAP NetWeaver AS ABAP 7.51 SP02環境で、データはほとんど何も入ってません。

User List画面

次にuser listの画面に飛んでみます。ユーザの一覧をテーブル表示しています。

BAPI_USER_GETLISTとBAPI_USER_GET_DETAILの二つのBAPIを利用していますが、このページのコードはこれだけです。

import streamlit as st
import pandas as pd
from top import sap_connection

user_list_resp = sap_connection.call("BAPI_USER_GETLIST", MAX_ROWS=4)
records = []
for u in user_list_resp["USERLIST"]:
    user_name = u["USERNAME"]
    record = {"Name": user_name}
    res = sap_connection.call("BAPI_USER_GET_DETAIL", USERNAME=user_name)
    record.update(res["ADDRESS"])
    records.append(record)
df = pd.DataFrame.from_dict(data=records)
st.markdown("# User List")
st.dataframe(df)

Read Table画面

最後にRead Tableに飛んでみます。ここは左の入力欄にテーブル名を入れてEnterを押すことで、RFC_READ_TABLEのBAPIを利用してテーブルの内容を読み込み表示してくれます。(大きなテーブルなどはエラーが出るものもあります)

最後に

一昔前までは、SAPと連携するとなると小さなアプリを作るにもかなりの手間がかかっていたと思います。しかし、現在ではちょっとした簡単なアプリなら手数が少なく開発できるようになってきています。 

ここで公開しているのはあくまでサンプルアプリであり、エラーハンドリングや細かいテストは実施していないので、利用する場合はご注意ください。





カテゴリー
タグ

SAPシステムや基幹システムのクラウド移行・構築・保守、
DXに関して
お気軽にご相談ください

03-6260-6240 (受付時間 平日9:30〜18:00)