Make組ブログ

Python、Webサービスや製品開発、ライブラリー開発についてhirokikyが書きます

スクリプトやバッチ処理、システム間連携をするときの観点

僕がシステムを作るときに観点としていることのメモです。 自分で作ったり、お客様とやり取りする際に、このあたりに気をつけて見ているという話です。

このネタは 執筆のために書いていたプロットのボツネタなので内容は精査できていません 。 与太話として、メモしている程度です。

スクリプトバッチ処理、システム関連系をするときの観点

スクリプトバッチ処理を作る場合は、まずデータの流れが大切です。 連携するシステムのどの位置にいて、どれだけのシステムが後ろにあるかを把握しましょう。

もし発注元のお客様や、社内の情報としてシステムの図がある場合は聞き出してもらっておきましょう。 これから作るシステムが、全体のどの位置で動くのかはとても重要です。

  • 関連するシステムはなるべく描き出しましょう
  • 関連システムのその先も簡単にでも書いておきましょう
    • データの不備やシステムダウンがあった場合などに、どこまで影響するかを把握できます

書き方は、紙にペンで書いたり、UMLのドローツールを使うのがオススメです。 具体的な書き方をイメージできないのであれば、ロバストネス図を書くと良いです。

以下の観点に注意しましょう

  • 入出力先はどこなのか
    • どこからデータが来るのか
      • 連携先から送られてくるのか(Pushされる)
      • 連携先に取りに行く必要があるのか(Pullする)
    • どこにデータが行くのか
      • 連携先に送るのか(Pushする)
      • どこかに置いておけば取りにきてくれるのか(Pullしてもらう)
    • どうやって通信するのか
  • データ、とは何か
    • ファイルやデータの形式
    • ファイルのサイズ、分割単位
      • 日単位の分割、ID単位、一括
  • 処理は何をするのか
    • どんな処理をするのか
      • XMLから必要な情報を抜き出してCSVに変換する
      • CSV内のID値から、他のメタ情報を問い合わせして追加する
      • HTTPでWebサイトに問い合わせして商品名、商品概要説明を取得してCSVにする
    • 頻度
      • 1日1回なのか
      • 週や月に1回なのか
      • 5分に1回なのか
    • 実行時間
      • 1時間で終わればよいのか
      • 1分以内に終われば良いのか

観点の使い方

  • 連携するシステムや処理の制限を把握すると、どのように処理すれば良いのかが見えてきます。
    • 他システムにデータがPushされる場合、リクエストを受け取るだけ受け取って変換処理は非同期で別途やるなどです。
  • どんなデータがどんな形式でやりとりされているかが見えてきますので名前付けや用語の整理がしやすくなります。
    • そのデータは「本」なのでしょうか「旅館」なのでしょうか「旅館の予約」なのでしょうか
    • あまり単純に「CSVファイル」と読んでいると、CSVファイルの種類が増えたときに混乱が生じます
  • 処理に1時間使える場合と、5分で終わらないといけない場合では利用する技術も変わってきます
    • 例えばAWS Lambdaは便利ですが、5分以内に処理を終わらせる必要があるので長時間の処理には向いていません。
  • 連携先とはどういうファイル、プロトコルで通信するのでしょうか
    • 連携先からHTTPでJSONをPOSTしてくれる場合はHTTPサーバーを作れば済みます
    • 定期的にSFTPでファイルを取得しにいく必要がある場合、サーバーを起動しておいて定期処理を実行する必要があります。
    • HULFTなどであれば固定長のCSVを扱う必要があります
    • USBファイルでないと転送できないのであれば、人がどう運んでくれるのかまで考える必要があります

終わりに

ちゃんと色々調査したり、まとめて書けば良い知見になりそうな気はしています。