$30 off During Our Annual Pro Sale. View Details »

簡単!Slack+GAS+GCPでIT棚卸自動化

 簡単!Slack+GAS+GCPでIT棚卸自動化

GREE Tech Conference 2022で発表された資料です。
https://techcon.gree.jp/2022/session/TrackA-7

gree_tech
PRO

October 25, 2022
Tweet

More Decks by gree_tech

Other Decks in Technology

Transcript

  1. グリー株式会社  蔡 品儀
    簡単!Slack+GAS+GCPで
    IT棚卸自動化

    View Slide

  2. 自己紹介
    2

    • 名前
    • 蔡 品儀(ツァイ ピンイ)
    • 所属
    • グリー株式会社
    • 開発本部 / 情報システム部 / 業務アプリケーショングループ
    ITディベロップメントチーム
    • 経歴
    • 台湾出身。大学院を修了してから、2015年に来日し、2017年にグリーに入社。6
    年ほどソーシャルゲームの運営・開発に関わって、2021年7月より情報システム
    部業務アプリケーションに異動し、現在は社内システム効率化をメインに担当して
    います。

    View Slide

  3. Agenda
    3

    •グリーの情報システム部の紹介
    •IT棚卸自動化とは
    • 開発の背景について
    • 仕組みおよび課題解決
    • 開発中に遭遇した問題と解決策
    • 実際リリースしてみたら
    • 運用で気づいた問題と解決策
    • 今後の展望

    View Slide

  4. 4

    4

    グリーの情報システム部の紹介
    開発本部
    情報システム部
    IT基盤
    サービス
    オペレーション
    業務アプリケーション
    IT基盤
    ITサービス
    オペレーション
    業務アプリケーション
    情報システム部
    サーバ、ネットワーク担当 ヘルプデスクやPC・ライセンス管理 業務アプリケーション
    開発導入

    View Slide

  5. Slack
    Zoom
    Confluence
    クラウドストレージ
    電子署名
    業務システム
    Adobe Sign
    ワークフロー
    ServiceNow
    サービスデスク
    JIRA
    Slack
    データ共有
    Google Drive
    Box
    ファイルサーバ
    Cohesity
    問い合わせ
    ナレッジ共有
    Wiki
    Portal
    Sharepoint Online
    FAQ
    ServiceNow
    コミュニケーション
    ビジネスチャット
    Web会議
    コラボレーション
    開発基盤
    アプリケーション開発
    Google Cloud
    データ連携
    Workato
    Google Workspace
    設備-ネットワーク 設備-オフィス
    Active Directory
    Client VPN
    Global Protect
    電子ホワイトボード
    Google Jamboard
    無人受付システム
    RECEPTIONIST
    ビジネスフォン
    INNOVERA
    レポート
    Google データポータル
    VDI
    Amazon Workspaces
    SSO
    Google Sites
    5

    情シスが提供するさまざまなツール

    View Slide

  6. Agenda
    6

    •グリーの情報システム部の紹介
    •IT棚卸自動化とは
    • 開発の背景について
    • 仕組みおよび課題解決
    • 開発中に遭遇した問題と解決策
    • 実際リリースしてみたら
    • 運用で気づいた問題と解決策
    • 今後の展望

    View Slide

  7. ツール開発の背景
    PC・検証用端末・ソフトウェアライセンスなど、合計140種類以上のIT資産を
    管理しています。
    この数量・コストの適正化のために、契約更新のタイミングに合わせてかなり
    の工数をかけて棚卸を行う必要があり、利用者・情報システム部ともに負担が
    大きい状況が続いていました。
    7


    View Slide

  8. ツール開発の背景 - 導入前の棚卸フロー(運営側)
    8

    ServiceNowより
     データ取得
    未回答者抽出
    シート作成
    リマインド
    フォーマットに
    沿って整形
    特定カラムで
    ソート
    その他の細
    かい手作業
    Slackで対象者
    を検索
    棚卸担当者
    から連絡
    締め切りまで繰り返す 全て手作業です

    View Slide

  9. ツール開発の背景 - 導入前の棚卸フロー(利用者)
    9

    ポータルでお
    知らせ
    みんなで
    シート更新
    締切まで
    繰り返し

    View Slide

  10. ツール開発の背景 - 棚卸あるある
    • シート作成が手動で時間がかかる
    • 一斉アナウンスでは利用者に気づいてもらえず、回答率が60%ほど......
    • 締切までに何度も手動でリマインドが必要である
    • 回答に手間がかかるので、利用者がストレスを感じる
    • Google Spreadsheetの同時編集に上限があるため大人数で同時に回
    答できない、等
    10


    View Slide

  11. Agenda
    11

    •グリーの情報システム部の紹介
    •IT棚卸自動化とは
    • 開発の背景について
    • 仕組みおよび課題解決
    • 開発中に遭遇した問題と解決策
    • 実際リリースしてみたら
    • 運用で気づいた問題と解決策
    • 今後の展望

    View Slide

  12. Apps Script
    Apps Scriptを使い、棚卸ごとにシートを作成する
    システム構成(運用者の操作:シート作成)
    12

    該当項目
    の検索
    管理シート
    テンプレートシート
    個別シート

    View Slide

  13. 運用で使うシート
    1. 管理シート
    • シート作成およびリマインド時に使用
    2. テンプレートシート
    • シート作成に使用
    3. 個別シート
    • リマインド時に使用
    13


    View Slide

  14. 1. 管理シート
    Slack通知の内容をSpreadSheetのマスタで管理
    • 資産のタイプ、タイトル、締め切り日、リマインド方法など、シートの内容をメンテす
    れば通知内容を変更できるようにしている
    14


    View Slide

  15. 2. テンプレートシート
    • 個別棚卸シートを作成するためのもの
    • 管理シートにタイトル等を記入後、テンプレートシートのメニューに表示される
    15


    View Slide

  16. 3. 個別シート
    該当棚卸の対象ユーザー、資産詳細、利用状況等を記載してある
    資産ごとに作る
    16


    View Slide

  17. 導入後の棚卸フロー
    17

    シート作成
    ServiceNowより
    所持データ取得
    フォーマットに
    沿って整形
    特定カラムで
    ソート
    役職者除外
    新規利用者
    除外
    管理シート templateシート
    所持データ(csv)
    格納
    入力 ワンボタンで作成
    導入前の棚卸フロー

    View Slide

  18. Apps Script
    Apps Scriptを使い、Slack APIで通知
    システム構成(運用者の操作:リマインド送信)
    18

    該当項目
    の検索
    Slack API
    管理シート
    個別シート 情報システム
    部から棚卸の
    お願いです!
    :
    :

    View Slide

  19. 導入後の棚卸フロー
    19

    リマインド
    未回答者抽出 Slack ID取得
    棚卸担当者
    から連絡
    締め切りまで繰り返す
    個別シート
    ボタンを押すだけ
    導入前の棚卸フロー

    View Slide

  20. Cloud Functionsでリクエスト(継続/返却の回答)を受け付け、Sheets APIでシートを更
    新する
    システム構成(利用者の操作:回答)
    20

    管理シート
    個別シート
    Sheets API
     で更新
    リクエストを受付
    Cloud
    Functions
    継続 返却
    ライセンスA

    View Slide

  21. ユーザへの棚卸依頼
    21

    ダイレクトメッセージで棚卸回答を依頼

    View Slide

  22. ユーザの棚卸更新
    22

    ダイレクトメッセージについているボタンを押すだけ
    リマインド本文
    データ更新中
    更新完了
    エラー
    期限切れ

    View Slide

  23. Agenda
    23

    •グリーの情報システム部の紹介
    •IT棚卸自動化とは
    • 開発の背景について
    • 仕組みおよび課題解決
    • 開発中に遭遇した問題と解決策
    • 実際リリースしてみたら
    • 運用で気づいた問題と解決策
    • 今後の展望

    View Slide

  24. Cloud Functionsの処理時間が長くなった場合に、
    Slack Appの制限時間を超えて、タイムアウトエラーが発生
    問題1
    24

    Cloud
    Functions
    この部分の処理

    View Slide

  25. 問題1 - 解決方法👏
    処理完了前にいったんresponse(200)を返し、
    Cloud Functionsの処理完了後に、Slackメッセージを更新し
    ユーザーに処理が本当にちゃんと終わったか伝える
    25

    Cloud Functionsの処理時間が長くなった場合に、
    Slack Appの制限時間を超えて、タイムアウトエラーが発生

    View Slide

  26. SpreadSheetのGASで作成したトリガー(Simple Trigger)からは
    シートを跨いだ処理を実行できない。
    →テンプレートシートから管理シートを参照することができない
    問題2
    26

    Apps Script
    該当項目
    の検索
    管理シート
    テンプレートシート
    個別シート

    View Slide

  27. 問題2
    ②Simple Triggersから起動したスクリプトで管
    理シートを参照(OnOpenURL)
    Error:
    SpreadsheetApp.openByUrl を
    呼び出す権限がありません
    テンプレートシート 管理シート
    ①シートを開く
    (起動イベント)

    View Slide

  28. 問題2 - 解決方法👏
    ②Installable Triggerから起動したスクリプトで管
    理シートを参照(OnOpenURL)
    テンプレートシート 管理シート
    ①シートを開く
    (起動イベント)
    Installable Triggersを設定することで、テンプレートシートから管理
    シートを参照できるようになった

    View Slide

  29. SpreadSheetのメニューを動的に設定したい
    →関数に引数が渡せないので、シートごとに手動で設定しないといけな
    かった
    問題3
    29

    追加したカスタムメニュー

    View Slide

  30. 問題3 - 解決方法👏
    30

    棚卸対象の資産ごとに項目名を切り替えられるよう、動的に関数を作るこ
    とにした
    functionName = 'ITEM_FUNCTIONS.' + functionName
    const temData = {name: displayName, functionName: functionName}
    menuList.push(temData)
    const ITEM_FUNCTIONS = (function() {
    let result = {};
    for (let key in 項目リスト) {
    result[項目タイトル] = function() {makeSheet(項目タイトル)}
    }
    return result
    })()
    ref: https://qiita.com/neonemo/items/86f34ecb0db3cfc51c8d

    View Slide

  31. Agenda
    31

    •グリーの情報システム部の紹介
    •IT棚卸自動化とは
    • 開発の背景について
    • 仕組みおよび課題解決
    • 開発中に遭遇した問題と解決策
    • 実際リリースしてみたら
    • 運用で気づいた問題と解決策
    • 今後の展望

    View Slide

  32. 32

    実際にリリースしてみたら
    • シート作成が手動で時間がかかる
    ▶シート作成の工数が激減し、他の作業に時間を取れるようになった
    • 一斉アナウンスでは利用者に気づいてもらえず、回答率が60%ほど......
    • 締切までに何度も手動でリマインドが必要である
    ▶リマインドの工数が減り、他の作業に時間を取れるようになった
    ▶期限内の回答率が90%台に!!
    • 回答に手間がかかるので、利用者がストレスを感じる
    • Google Spreadsheetの同時編集に上限があるため大人数で同時に回
    答できない、等
    ▶ボタンを押すだけなので回答が楽に。SpreadSheetの同時編集にも ひっ
    かからなくなった。

    View Slide

  33. Agenda
    33

    •グリーの情報システム部の紹介
    •IT棚卸自動化とは
    • 開発の背景について
    • 仕組みおよび課題解決
    • 開発中に遭遇した問題と解決策
    • 実際リリースしてみたら
    • 運用で気づいた問題と解決策
    • 今後の展望

    View Slide

  34. • APIの制約(Rate Limit)
    • パフォーマンス
    • 参照が消える問題
    34

    運用で気づいた問題と解決策

    View Slide

  35. リリース後気づいた問題と対策1
    • Google Sheet APIのGETリクエスト上限を超えると、処理が止まる
    (レコード数が多いときに発生することがある)
    1アカウントで最大60回/秒しかリクエストできないので、Google
    Cloudのサポートに「上限を上げてほしい」という要望を出す

    「長期的に上限を超えた実績が無いと上げられない」と回答 😢
    35


    View Slide

  36. Sheet API
    36


    View Slide

  37. →レコード数が1000行までの棚卸は、問題なくクリアした 🍺
    リリース後気づいた問題と対策1(cont.)
    • GET回数を減らす
    • 現状の、管理シートにGETを1回、個別シートに1回を、管理シート1回
    のみに変更
    • コストをかけて、制限をあげる
    • 「一つのアカウント」で最大60回/秒の制限があるため、Google
    Sheet APIを実行するアカウントを、2つに増やしてみた
    37


    View Slide

  38. 参照が消えるエラー
    リリース後気づいた問題と対策2
    管理シートの肥大化を避けるため、完了したレコードは消してもらっています。
    本来は期限切れの文言を出すはずだが、ユーザーが完了後ボタンを押した
    ら、管理シートにレコードが見つからないのでエラー
    →ボタンに締め切り日を持たせて、管理シートにデータがなくても完了後かどう
    か判定できる
    38


    View Slide

  39. Agenda
    39

    •グリーの情報システム部の紹介
    •IT棚卸自動化とは
    • 開発の背景について
    • 仕組みおよび課題解決
    • 開発中に遭遇した問題と解決策
    • 実際リリースしてみたら
    • 運用で気づいた問題と解決策
    • 今後の展望

    View Slide

  40. 現状で何となく棚卸はある程度スムーズできていますが・・・
    今後の展望
    • WEB UIで個人所持資産をいつでもチェックできるようにして、同時に棚卸
    機能も追加したり?
    • ログインしたアカウントでレコードを絞れるAppSheetに棚卸作業を移行す
    る?
    40

    Google Workspace 、 Google Sites 、 Google Drive 、 Google Cloud 、 Google データポータル および、 Google Jamboard は Google
    LLC の商標です

    View Slide

  41. 41


    View Slide