catch-img

Python初心者でも作れた!DEVNETを用いた自動化事例withウォーキング大会

皆さんこんにちは!

セールスエンジニアリング部2021年度新卒入社の窪田です。

ネットワンパートナーズでは、APIやプログラマビリティへの対応力強化を注力テーマの一つとしています。

その施策の一つとして、SE部若手向けのプログラム勉強会が開催されております。

※NOPのDevNetへの取り組みはこちら

本記事では2年目SEとしてその教育を受けた窪田が、DevNetを活用できた事例についてその背景を交えてご紹介したいと思います。


目次[非表示]

  1. 1.作成背景
    1. 1.1.背景
    2. 1.2.課題
  2. 2.動作説明
  3. 3.プログラム各部説明
  4. 4.おわりに


作成背景

背景

弊社では

①組織横断型の施策検討を行い、社員同士・部門同士の繋がりを創出する

②健康経営を目指して社員の健康を維持する

これら2つを同時に実現するプログラムとして、NOS全社単位でウォーキング大会を開催しております!


「繋がりを創出する」要素としては、参加者を各拠点ごとにチーム分けし、

そのチーム内で交流していただく事で、拠点内の見知らぬ人との新しいつながりができることを狙ってます。


課題

参加者の交流ツールとしては、Webex Teamsを使用しております。


〇イメージ

画面の「一般」「team1」などは"スペース"と呼び、この中にメンバーを追加していきます。

"スペース"の集合体は"チーム"と呼び、画面内では「ウォーキング大会」が相当します。

今回のウォーキング大会は全280名が参加し、それらを34個のチーム(Webex上ではスペース)に分けることになりました。

ご想像は付くかと思いますが、これらを手動で作業するのは非常に労力がかかります。


〇スペースを作成する画面


〇スペースにメンバーを追加する画面

今までは人海戦術で押し進めていたと聞いたときは冗談かと思いましたが、

今回はDevNetの力を使ってこちらを自動化したナレッジを共有したいと思います。


動作説明

今回のウォーキング大会は参加募集をMicrosoft Formsにて行いました。

Formsの質問自体はシンプルに

  1. 自身の所属拠点を選択してください

のみとし、その出力から人数や仲の良さが偏らないように(ここは手動で)チーム分けを行いました。

また、FormsのCSV出力をベースに、アカウント情報をWebex APIに渡しました。

以下は肝となる部分の簡易的なフローチャートです。


〇フローチャート

プログラミング言語はDevNetスタンダードのPythonを用いました。

①実行時の入力からチーム名を受け取ったPythonプログラムは、スペースの集合となるチームを作成し、そのAPI返り値からチームIDを取得します。

②FormsのCSV出力から1行分のEmali列とチーム列を取得し、さらに空の行でないことをチェックします。プログラムはCSVを1行ずつ読んでいき、空行となるまで操作を継続します。

③読み込んだスペースが既に存在しているかをチェックします。存在しない場合はチームIDを引数としてスペースを作成します。作成した場合はスペースIDを取得し、スペース名と紐づけしておきます。

④対象のスペースのスペースIDを引数とし、Email列のユーザを参加させます。


プログラム各部説明

以下では作成したプログラムを小分けにしつつ解説したいと思います!


〇チームを作成するユーザ関数

チームを作成する際は、"Teams"というAPIを用います。

ペイロード内に"チーム名"が必要なため関数の引数として渡し、

ヘッダで"APIトークン"と"コンテンツタイプ"の指定、

チームを"作成"するのでメソッドは"POST"を指定します。

レスポンス内に含まれるIDは後にスペース作成時チームの特定で用いるため、返り値として設定してあります。


〇Excelを読み込む処理抜粋

ExcelをPythonで扱う際は、OpenPyXLというライブラリを使用します。

実際セルの値を取得するまでには、

ファイルの指定>シートの指定>セルの指定>値を抜き出す

というフローが必要になってます。


作成したプログラム上では、line変数に処理中のExcel行番号を、row_personEmail変数にはメールアドレスが記載されている列(ここでは"D")、row_team変数にはスペース名が記載されている列(ここでは"F")を格納しました。

ws.cell(行,列).valueの指定でセルの値を取得できるため、(行,列)の指定は変数で行うと楽ですね。


〇スペースを作成するユーザ関数

スペースを作成する際は、"Rooms"というAPIを用います。

ペイロード内に"スペース名"とスペースを作成するチームの"チームID"が必要なため関数の引数として渡し、

ヘッダで"APIトークン"と"コンテンツタイプ"の指定、

チームを"作成"するのでメソッドは"POST"を指定します。

レスポンス内に含まれるIDは後にスペースに人を追加する際のスペースの特定で用いるため、返り値として設定してあります。


〇スペースに人を追加するユーザ関数

スペースに人を追加する際は、"Memberships"というAPIを用います。

ペイロード内に人を追加するスペースの"スペースID"と"メールアドレス"が必要なため関数の引数として渡し、

ヘッダで"APIトークン"と"コンテンツタイプ"の指定、

スペースに人を"追加"するのでメソッドは"POST"を指定します。


以上で簡単ではありますがプログラムの動作説明となります!


おわりに

プログラムの中身は0から作ったわけでなく、今回はPostmanのコード生成機能を多く活用しました。

そのため全体的な作業時間は5時間前後だと思います!

このウォーキング大会は今年度だけでも3回以上開催する予定で、毎回300人弱分のTeamsの操作が必要なくなることを考えれば工数も削減!自動化スキルもUP!と一石二鳥ですね。


NOPとしてはDevNet活動をこれからも盛り上げていこうと考えておりますので、一緒に盛り上げて頂けるパートナー様を常に募集しております!

また、DevNet活動における弊社へのご要望など御座いましたら是非ご連絡下さい!!

窪田瑛(くぼたあきら)

窪田瑛(くぼたあきら)

ネットワークエンジニア志望