GREE Tech Conference 2022で発表された資料です。 https://techcon.gree.jp/2022/session/TrackA-7
グリー株式会社 蔡 品儀簡単!Slack+GAS+GCPでIT棚卸自動化
View Slide
自己紹介2 • 名前• 蔡 品儀(ツァイ ピンイ)• 所属• グリー株式会社• 開発本部 / 情報システム部 / 業務アプリケーショングループITディベロップメントチーム• 経歴• 台湾出身。大学院を修了してから、2015年に来日し、2017年にグリーに入社。6年ほどソーシャルゲームの運営・開発に関わって、2021年7月より情報システム部業務アプリケーションに異動し、現在は社内システム効率化をメインに担当しています。
Agenda3 •グリーの情報システム部の紹介•IT棚卸自動化とは• 開発の背景について• 仕組みおよび課題解決• 開発中に遭遇した問題と解決策• 実際リリースしてみたら• 運用で気づいた問題と解決策• 今後の展望
4 4 グリーの情報システム部の紹介開発本部情報システム部IT基盤サービスオペレーション業務アプリケーションIT基盤ITサービスオペレーション業務アプリケーション情報システム部サーバ、ネットワーク担当 ヘルプデスクやPC・ライセンス管理 業務アプリケーション開発導入
SlackZoomConfluenceクラウドストレージ電子署名業務システムAdobe SignワークフローServiceNowサービスデスクJIRASlackデータ共有Google DriveBoxファイルサーバCohesity問い合わせナレッジ共有WikiPortalSharepoint OnlineFAQServiceNowコミュニケーションビジネスチャットWeb会議コラボレーション開発基盤アプリケーション開発Google Cloudデータ連携WorkatoGoogle Workspace設備-ネットワーク 設備-オフィスActive DirectoryClient VPNGlobal Protect電子ホワイトボードGoogle Jamboard無人受付システムRECEPTIONISTビジネスフォンINNOVERAレポートGoogle データポータルVDIAmazon WorkspacesSSOGoogle Sites5 情シスが提供するさまざまなツール
Agenda6 •グリーの情報システム部の紹介•IT棚卸自動化とは• 開発の背景について• 仕組みおよび課題解決• 開発中に遭遇した問題と解決策• 実際リリースしてみたら• 運用で気づいた問題と解決策• 今後の展望
ツール開発の背景PC・検証用端末・ソフトウェアライセンスなど、合計140種類以上のIT資産を管理しています。この数量・コストの適正化のために、契約更新のタイミングに合わせてかなりの工数をかけて棚卸を行う必要があり、利用者・情報システム部ともに負担が大きい状況が続いていました。7
ツール開発の背景 - 導入前の棚卸フロー(運営側)8 ServiceNowより データ取得未回答者抽出シート作成リマインドフォーマットに沿って整形特定カラムでソートその他の細かい手作業Slackで対象者を検索棚卸担当者から連絡締め切りまで繰り返す 全て手作業です
ツール開発の背景 - 導入前の棚卸フロー(利用者)9 ポータルでお知らせみんなでシート更新締切まで繰り返し
ツール開発の背景 - 棚卸あるある• シート作成が手動で時間がかかる• 一斉アナウンスでは利用者に気づいてもらえず、回答率が60%ほど......• 締切までに何度も手動でリマインドが必要である• 回答に手間がかかるので、利用者がストレスを感じる• Google Spreadsheetの同時編集に上限があるため大人数で同時に回答できない、等10
Agenda11 •グリーの情報システム部の紹介•IT棚卸自動化とは• 開発の背景について• 仕組みおよび課題解決• 開発中に遭遇した問題と解決策• 実際リリースしてみたら• 運用で気づいた問題と解決策• 今後の展望
Apps ScriptApps Scriptを使い、棚卸ごとにシートを作成するシステム構成(運用者の操作:シート作成)12 該当項目の検索管理シートテンプレートシート個別シート
運用で使うシート1. 管理シート• シート作成およびリマインド時に使用2. テンプレートシート• シート作成に使用3. 個別シート• リマインド時に使用13
1. 管理シートSlack通知の内容をSpreadSheetのマスタで管理• 資産のタイプ、タイトル、締め切り日、リマインド方法など、シートの内容をメンテすれば通知内容を変更できるようにしている14
2. テンプレートシート• 個別棚卸シートを作成するためのもの• 管理シートにタイトル等を記入後、テンプレートシートのメニューに表示される15
3. 個別シート該当棚卸の対象ユーザー、資産詳細、利用状況等を記載してある資産ごとに作る16
導入後の棚卸フロー17 シート作成ServiceNowより所持データ取得フォーマットに沿って整形特定カラムでソート役職者除外新規利用者除外管理シート templateシート所持データ(csv)格納入力 ワンボタンで作成導入前の棚卸フロー
Apps ScriptApps Scriptを使い、Slack APIで通知システム構成(運用者の操作:リマインド送信)18 該当項目の検索Slack API管理シート個別シート 情報システム部から棚卸のお願いです!::
導入後の棚卸フロー19 リマインド未回答者抽出 Slack ID取得棚卸担当者から連絡締め切りまで繰り返す個別シートボタンを押すだけ導入前の棚卸フロー
Cloud Functionsでリクエスト(継続/返却の回答)を受け付け、Sheets APIでシートを更新するシステム構成(利用者の操作:回答)20 管理シート個別シートSheets API で更新リクエストを受付CloudFunctions継続 返却ライセンスA
ユーザへの棚卸依頼21 ダイレクトメッセージで棚卸回答を依頼
ユーザの棚卸更新22 ダイレクトメッセージについているボタンを押すだけリマインド本文データ更新中更新完了エラー期限切れ
Agenda23 •グリーの情報システム部の紹介•IT棚卸自動化とは• 開発の背景について• 仕組みおよび課題解決• 開発中に遭遇した問題と解決策• 実際リリースしてみたら• 運用で気づいた問題と解決策• 今後の展望
Cloud Functionsの処理時間が長くなった場合に、Slack Appの制限時間を超えて、タイムアウトエラーが発生問題124 CloudFunctionsこの部分の処理
問題1 - 解決方法👏処理完了前にいったんresponse(200)を返し、Cloud Functionsの処理完了後に、Slackメッセージを更新しユーザーに処理が本当にちゃんと終わったか伝える25 Cloud Functionsの処理時間が長くなった場合に、Slack Appの制限時間を超えて、タイムアウトエラーが発生
SpreadSheetのGASで作成したトリガー(Simple Trigger)からはシートを跨いだ処理を実行できない。→テンプレートシートから管理シートを参照することができない問題226 Apps Script該当項目の検索管理シートテンプレートシート個別シート
問題2②Simple Triggersから起動したスクリプトで管理シートを参照(OnOpenURL)Error:SpreadsheetApp.openByUrl を呼び出す権限がありませんテンプレートシート 管理シート①シートを開く(起動イベント)
問題2 - 解決方法👏②Installable Triggerから起動したスクリプトで管理シートを参照(OnOpenURL)テンプレートシート 管理シート①シートを開く(起動イベント)Installable Triggersを設定することで、テンプレートシートから管理シートを参照できるようになった
SpreadSheetのメニューを動的に設定したい→関数に引数が渡せないので、シートごとに手動で設定しないといけなかった問題329 追加したカスタムメニュー
問題3 - 解決方法👏30 棚卸対象の資産ごとに項目名を切り替えられるよう、動的に関数を作ることにしたfunctionName = 'ITEM_FUNCTIONS.' + functionNameconst 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
Agenda31 •グリーの情報システム部の紹介•IT棚卸自動化とは• 開発の背景について• 仕組みおよび課題解決• 開発中に遭遇した問題と解決策• 実際リリースしてみたら• 運用で気づいた問題と解決策• 今後の展望
32 実際にリリースしてみたら• シート作成が手動で時間がかかる▶シート作成の工数が激減し、他の作業に時間を取れるようになった• 一斉アナウンスでは利用者に気づいてもらえず、回答率が60%ほど......• 締切までに何度も手動でリマインドが必要である▶リマインドの工数が減り、他の作業に時間を取れるようになった▶期限内の回答率が90%台に!!• 回答に手間がかかるので、利用者がストレスを感じる• Google Spreadsheetの同時編集に上限があるため大人数で同時に回答できない、等▶ボタンを押すだけなので回答が楽に。SpreadSheetの同時編集にも ひっかからなくなった。
Agenda33 •グリーの情報システム部の紹介•IT棚卸自動化とは• 開発の背景について• 仕組みおよび課題解決• 開発中に遭遇した問題と解決策• 実際リリースしてみたら• 運用で気づいた問題と解決策• 今後の展望
• APIの制約(Rate Limit)• パフォーマンス• 参照が消える問題34 運用で気づいた問題と解決策
リリース後気づいた問題と対策1• Google Sheet APIのGETリクエスト上限を超えると、処理が止まる(レコード数が多いときに発生することがある)1アカウントで最大60回/秒しかリクエストできないので、GoogleCloudのサポートに「上限を上げてほしい」という要望を出す↓「長期的に上限を超えた実績が無いと上げられない」と回答 😢35
Sheet API36
→レコード数が1000行までの棚卸は、問題なくクリアした 🍺リリース後気づいた問題と対策1(cont.)• GET回数を減らす• 現状の、管理シートにGETを1回、個別シートに1回を、管理シート1回のみに変更• コストをかけて、制限をあげる• 「一つのアカウント」で最大60回/秒の制限があるため、GoogleSheet APIを実行するアカウントを、2つに増やしてみた37
参照が消えるエラーリリース後気づいた問題と対策2管理シートの肥大化を避けるため、完了したレコードは消してもらっています。本来は期限切れの文言を出すはずだが、ユーザーが完了後ボタンを押したら、管理シートにレコードが見つからないのでエラー→ボタンに締め切り日を持たせて、管理シートにデータがなくても完了後かどうか判定できる38
Agenda39 •グリーの情報システム部の紹介•IT棚卸自動化とは• 開発の背景について• 仕組みおよび課題解決• 開発中に遭遇した問題と解決策• 実際リリースしてみたら• 運用で気づいた問題と解決策• 今後の展望
現状で何となく棚卸はある程度スムーズできていますが・・・今後の展望• WEB UIで個人所持資産をいつでもチェックできるようにして、同時に棚卸機能も追加したり?• ログインしたアカウントでレコードを絞れるAppSheetに棚卸作業を移行する?40 Google Workspace 、 Google Sites 、 Google Drive 、 Google Cloud 、 Google データポータル および、 Google Jamboard は GoogleLLC の商標です
41