こんにちは、ビジネスサイドチームの柾屋です。
本記事はAI Shift Advent Calendar 2021の10日目の記事です。
非エンジニアのビジネス側チームでは、初めての執筆になります。
今回は、文系で非エンジニアの私でも活用することができた効率化ツールや簡単なプログラミングについて紹介します。
本記事の対象読者
本記事は非エンジニアの方を対象にしています。特に下記の項目に当てはまるような方へ参考となる情報を提供できればと思います。
・非エンジニアだけど、業務効率化を進めていきたい人
・Excelやスプレッドシートで分析業務をしており、1段レベルアップした分析をしたい人
・チームの生産性を向上させていきたいリーダー・マネージャーの方
毎年急成長するベンチャー企業では、いつでも人手不足な状態です(笑)。
私が所属する株式会社AI Shiftは、サイバーエージェントの中でも注目されているスタートアップの1つで、代表的な「ザ・ベンチャー企業」と呼べる環境です。
先月の10月で部署異動してきて丸2年が経ちました。半年毎に業務量が1.5倍〜2倍になるような環境では「業務の取捨選択」と同時に、「業務の効率化」が必須です。
今回のブログでは文系で非エンジニアの私が取り組んできた効率化について事例を交えながら紹介していきたいと思います。
普段、Excelやスプレッドシート、パワーポイントで分析やレポーティング業務を行っている人は参考にしていただける点もあるかと思いますので、最後まで読んでいただけると嬉しいです。
本記事の内容
・そもそも執筆者は何やっている人?
・BIツール「Tableau」は超絶オススメなツール
・RPAでレポート提出を完全自動化できる
・Pythonで面倒な処理を自動化しよう
・GASを使って簡単なBOTを作ると便利
そもそも執筆者は何をやっている人?
中途入社から未経験で広告プロダクト立上げ
最初に自己紹介をさせてください。私はもともと新卒でマーケティング・リサーチの会社に入り、その後サイバーエージェントへ中途で入社しました。
もともとはExcelやパワーポイントが人並みに使えるくらいで、これと言って良いほどの特徴はありませんでした。
サイバーエージェントでは新規の広告プロダクトの立上げ、アドネットワークプロダクトの運用・コンサルティングを経て、チャットボット・ボイスボットを提供している株式会社AI Shiftへジョインしました。
組織立上げと同時に未経験のTableauをイチから勉強
ジョイン後は、カスタマーサクセスの組織立上げ、広告運用〜SEO対策、データアナリティクス、新規プロダクト開発・立上げに関わっています。
広告と異なり、チャットボットでは何十万もの「ユーザーの生の会話データ」を分析する必要があり、Excelやスプレッドシートではとても無理だったため、イチからTableauを学び使い始めました。
ジョインから2年ほどで、多くのスキルセットをマスター
チームで活用できるように、汎用的なレポート作成や、組織横断の効率化プロジェクト等を経て、気付けば、Tableauのみならず、RPAやGoogle Apps Script、Pythonなどが使えるようになっていました。
今回は、この2年間で多くのチャレンジや失敗を経て、チャレンジして良かったものを紹介します。
BIツール「Tableau」は超絶オススメなツール
「Tableau (タブロー)」とは?
Tableauは簡単に言うと、自動更新される「グラフ」です。
グーグルアナリティクスやグーグル広告、セールスフォースなどのCRMツールなどを利用したことがある方はイメージが着くかもしれません。
Excelやスプレッドシートでグラフを作成する場合は、データ元の対象範囲を選択して作成するため、データが追加された場合には、都度手動で更新しなければいけません。
また、何か広告などの管理画面などからデータを取得している場合は、都度CSVでデータをダウンロードしてから作成するため、同じような作業を繰り返す必要があります。
Tableauの場合は、「サーバー・Googleドライブ・スプレッドシート」など様々なサービスと連携することができるため、データ元の情報を自動で取得し、更新がされます。
一度グラフなどのフォーマットを作成してしまえば、自動的に更新され続けると言うのがTableauのメリットです。
Tableauではデータ加工が簡単にできちゃう
Tableauデータでは、より見やすいグラフィックなレポートを作成できることが一番の特徴ですが、それ以上にデータ加工のしやすさも注目すべきポイントです。
スプレッドシートやExcelの関数にはない関数をTableauでは利用することができるため、複雑や条件式を描かずとも簡単にデータを加工することができます。
データ加工したものは、新しく「変数」として作成されるため、ピボットテーブルのように簡単に、行や列に追加・削除することができます。
Tableauを使って得られた3つのメリット
私がTableauを活用したことで得られたメリットは下記3つです。
1.毎回Excelやスプレッドシートで作成する必要がなくなった
2.自分しか作れないレポートが無くなり、任せることができるようになった
3.より複雑で細かい分析に注力できるようになった
Tableauを利用する前までは、自分しか作ることができないレポートが数多くありました。1つでも工程を間違えると、レポートにも影響がでてしまうため、教えるコスト以上に間違えた場合の対処コスト大きかったのです。
Tableauを活用したことで、レポート作成が不要となり、その後の報告作業を他の人に任せられるようになりました。その空いた時間でより難しい分析へチャレンジすることができるようになりました。
こうして生産性を3倍へ向上させた
参考としてTableauをどのように活用して生産性を高めたのか、そのフローも紹介します。
Step①:社内のエンジニアさんにデータサーバーからTableauへデータ取得できるように作成してもらう
Step②:レポートの型をTableauで作成する
Step③:Tableauでのレポート提出や報告フローを構築し、他の人に作業を任せる
Step④:より細かい分析に時間を取り、より高度な分析レポートの型を作成する
Step⑤:分析のフローを構築し、他の人に作業を任せる
基本は1人でできる仕事の量には限界があります。Tableauをうまく活用することで品質を高く維持しつつ、レポートを効率よく量産することが可能となりました。
Tableauを「今後導入してみても良いかも」という方は参考としていただけると良いかもしれません。
RPAでレポート提出までを完全自動化
RPAとは人間に代わってロボットが実行する機能
RPAはロボティック・プロセス・オートメーションの略で、辞書的には
「これまで人間のみが対応可能と想定されていた作業、もしくはより高度な作業を、人間に代わって実施できるルールエンジンやAI、機械学習等を含む認知技術を活用して代行・代替する取り組みです」
日本RPA協会
という定義のようです。
Tableauだけでは実績報告まで自動化できなかった
RPAを導入しようとした背景は、人手不足です(笑)。Tableauを使ってうまくレポート作成の効率化を実施できたものの、クライアント先が何十社と増えてきたタイミングで、手が回らなくなってきました。
画像としてならTableau単体でもメール送信機能があるのですが、CSVでとなると、どうしても手動で実施するしかありませんでした。
そこで、毎日自動的にTableauからデータをダウンロードして、実績を共有する手段としてRPAの導入を決めました。
ノンコードで画面ポチポチでRPAが作れる
RPAもいろんなベンダーがいますが、私が活用したものはBiztex Cobitというサービスです。
このRPAツールは非エンジニアでも簡単に作成することができる使いやすいさがあり、30分ほどのレクチャーでマスターすることができました。
毎日のレポート報告を完全自動化
TableauとRPAを活用することで、毎日のレポート報告を完全自動化することに成功しました。1社あたり5-10分と仮定しても、数十社あるため、組織全体で何十時間もの業務削減へと繋げることができました。
この空いた時間を元に、別の業務へと時間を割くことができるようになりました。
Pythonの簡単なコードを覚えるとTableauとの相性抜群
プログラミングは意外とコピペしただけで稼働するもの
Pythonと聞くと、非エンジニアのみなさんは抵抗があるかもしれません。でも、安心してください。ググると親切な人がコードを公開しているので、コピペするだけで稼働します(笑)。
私も最初は1hほど、YouTubeを見て学んだ後は、とりあえずググりまくり、コピペをして、またググるを繰り返していました。
Pythonを使ったのは、ExcelのデータをTableauに繋げたかったから
自社で提供しているサービスの場合は、データサーバーから直接Tableauへ繋げてレポート作成や分析をすることができます。
しかし、自社サービスではない場合は、どうしてもCSVでダウンロードしてからTableauへ繋げる必要があります。
Tableauへは1つのExcelファイルで、新しくダウンロードしたCSVのデータをコピペして行を追加して利用していましたが、データ量が重たくなるにつれ、作業に限界を感じるようになりました。
ファイルを開くだけで10分もかかり、コピペに関しては、PCがフリーズしてしまうのです(笑)。
そこで、プログラミングを使ってみることを決めました。
30分かかる作業も5分で実行
Pythonで実施した処理は非常にシンプルです。
Googleドライブに新しくダウンロードしたCSVを手動で格納してもらっているので、「Googleドライブにある何十個もあるCSVを1つのExcelにまとめる」という処理をPythonを使って実行できるようにしました。
これまで30分もかかるとてもイライラする作業がなくなり、トイレ休憩をしている間に自動で実行できるようになりました。
参考コードはこちら
私はGoogleのColaboratoryというブラウザ環境からPythonを記述、実行できるサービスを活用していました。
※Googleアカウントさえあれば誰でも無料で利用ができます。
#事前処理
import pandas as pd
from glob import glob
import os
from google.colab import drive
import openpyxl
pip install xlsxwriter
#Googleドライブとの連携
drive.mount('/content/drive')
#CSVが格納されているフォルダにアクセス
os.chdir('/content/drive/MyDrive/フォルダのパス')
#CSVのファイルにアクセス
filepaths = glob('*.csv')
filepaths
filepath = filepaths[0]
filepath
df_1 = pd.DataFrame()
for filepath in filepaths:
_df_1 = pd.read_csv(filepath,encoding="cp932")
df_1 = pd.concat([df_1, _df_1])
df_1.to_excel('/content/drive/MyDrive/フォルダのパス/作成したファイル名.xlsx', engine= 'xlsxwriter')
外部サービスのデータの分析も生産性3倍へ
Tableauのレポート作成で実施したフローで作業効率化を進めていき、自分しかできない作業をなくしていきました。
結果として、組織全体として分析やレポート作成の生産性を3倍へ高めることができました。
GASを使って簡単なBOTを作ると便利
GASとは?
GASとは「Google Apps Script」のことで、Googleが提供しているプログラミング言語の1つです。
Googleが提供しているサービスで、GoogleドキュメントやGoogleスプレッドシートなどで活用することができます。
GASを使うと何が良い?
私は普段、SlackやChatworkといったビジネスチャットを利用しているのですが、GASを使うことで簡単にBOTを作成することができます。
例えば、毎日決まった時間に
・昨日の実績を共有する
・ZoomのURLを送る
・検温やアンケートなどのリマインドを送る
などの作業をBOTで自動化することができます。
ルーティンワークは集中を邪魔する
頭の片隅で「これをやらなくちゃ」を覚えた状態で仕事をしていると、必然的にマルチタスクの状態になってしまいます。マルチタスクはメリットもあるのですが、「集中力の低下やストレス」などの相関が発表されています。
私個人としてはなるべくシングルタスクに集中できるような環境作りを意識するようにしており、このようなルーティンワークは自動化した方が良いと思っています。
シンプルですが、私が実際に多用していたslackのBOTのコード例を紹介します。気になる方は是非参考サイトなども掲載しておきますので、試してみてください。
完成イメージ
自動で毎日決まったタイミングでメッセージを送るBOTを作成できる参考コードを紹介します。朝会やアラートなど、決まったタイミングで何か連絡をしなければいけない際に活用することができます。
参考コードはこちら
正直、Slack BOTを作成するのはやや面倒でした(笑)。
ただ、最初のSlack周りの設定が済んでしまえば、使い回しができるので、チャレンジしたい方は参考にしてみてください。
丁寧に記載しようと思うと、ブログ2−3本くらいの量になりそうなので、今回はGASでのコードのみを紹介します。Slackとの連携についてはこちらのサイトで詳しく紹介されているので、参考にしてみてください。
GASではぴったりの実施時間の指定をトリガーで実施することができないため、稼働させるコードとは別に、ピッタリ営業時間に稼働できるようにコードを作成しています。
全体的な構図としては
Step①:GASのトリガーでBOTを稼働させたい時間より前に、営業日判定のスクリプトを稼働させる
Step②:営業日が平日だったら、指定した時間にBOT通知のスクリプトを稼働させる
という流れになります。
▼Slackで通知を飛ばしてくれるBOTのコード
function myFunction() {
//Slack用
var slackAccessToken = "xoxb-xxxxx2653-sss35494020-uxxxxxxx" //slackトークンを入力
var slackApp = SlackApp.create(slackAccessToken)
var channelId = "Cfx25xxxxxx" //slackのチャンネルIDを入力
// 現在のスプレッドシートを取得します
var ss= SpreadsheetApp.getActiveSpreadsheet()
var sheet = ss.getSheetByName("シート1")//スプレッドシートのシート名
var mention = "<!channel>"
//今日の日付
var today = new Date()
slackApp.postMessage(channelId,mention
+ "\n" + "月曜日は朝会だよ:sun:\n"
+ "1番乗りのあなた!Zoom URLの発行お願いします^^"
)
}
▼平日の決まった時間だけBOTを稼働させるためのコード
function isBusinessDay() {
var date = new Date();
/* 土日判定 */
if (date.getDay() % 6 === 0) return false;
/* 祝日判定 */
var calendar = CalendarApp.getCalendarById('ja.japanese#holiday@group.v.calendar.google.com');
var holidays = calendar.getEventsForDay(date);
if (holidays.length > 0) ;
date.setHours(通知したい時間(時));
date.setMinutes(通知したい時間(分));
ScriptApp.newTrigger('myFunction').timeBased().at(date).create();
}
SFAツールを導入しなくても大量メルマガ送付ができる参考コード
完成系のイメージ
同じメールを会社名や宛名、メールアドレスを変えるだけで何十通も送付をする機会があります。そのような際に、都度アドレスや宛名をコピペをしてると、時間がかかるだけでなく、コピペミスなどから送付間違いが発生する可能性があります。
スプレッドシートの情報から自動でメールアドレス、メール本文の宛名を変更し、メールを送信する方法を紹介します。
1. Googleドキュメントでメール本文を作る
今回は会社名や性、名を変更するために、下記のような書き方をしておきます。
{会社名}
{姓}{名}
↓Googleドキュメントで作成したメール文章例
{会社名}
{姓}{名}様
お世話になっております。
株式会社xxxxxxのaaです。
この度、新サービスをローンチ致しましたので、
ご紹介のお時間を頂きたく、メール致しました。
詳細は下記の通りです。
-------------------------
xxxxxxxxxxxxx
xxxxxxxxxxxxx
xxxxxxxxxxxxx
xxxxxxxxxxxxx
-------------------------
下記日時でご都合いかがでしょうか?
-------------------------
6/21 11:00 - 15:00
6/23 11:00 - 15:00
※30分~1時間ほど
-------------------------
よろしくお願い致します。
2. スプレッドシートで送付先のリストを作る
今回は下記画像のように情報をまとめていきます。
- A列:会社名
- B列:姓
- C列:名
- D列:送付先のメールアドレス
3. 下記コードをコピペし、必要箇所を入力していく
- スプレッドシートで、「拡張機能」> 「Apps Script」を開く
- 「コード.gs」の箇所を開く
- 必要箇所を入力(修正)していく
- シート名:送信リストを記入したGoogleスプレッドシートのシート名
- GoogleドキュメントのURL:メール本文を記載したGoogleドキュメントのURL
- 件名:メールの件名
- Ccで送りたいアドレス:なければ削除でOK
↓メルマガ送信の参考コード
function mailMagagine(){
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1"); //シート名
const lastRow = sheet.getLastRow();
const DOC_URL = 'GoogleドキュメントのURL'; //Googleドキュメント
const doc = DocumentApp.openByUrl(DOC_URL);
const docText = doc.getBody().getText();
for(let i = 2; i <= lastRow; i++){
const company = sheet.getRange(i,1).getValue(); //会社名
const lastName = sheet.getRange(i,2).getValue(); //姓
const firstName = sheet.getRange(i,3).getValue(); //名
const mailAdress = sheet.getRange(i,4).getValue(); //メールアドレス
const body = docText //置き換え
.replace('{会社名}',company)
.replace('{姓}',lastName)
.replace('{名}',firstName);
// console.log(mailAdress);
// console.log(body);
sendMail(body, mailAdress) //メール送信
}
}
function sendMail(body, mailAdress) {
const recipient = mailAdress;
const subject = '件名'; //件名
const options =
{cc: 'test1@xxxxx.com,test2@xxxxx.com, test3@xxxxx.com'}; //Ccで送りたいアドレス
GmailApp.sendEmail(recipient, subject, body, options);
console.log(recipient,options,subject,body)
}
4. 実行ボタンを押す
全てコードの修正が終わったら「実行」ボタンを押すと、自動でメールが送付されます。もしエラーが発生した際は、エラーが発生した行でスペルミスや入力ミスがないかを確認してみてください。
※初回実行時のみ、Googleアカウントの認証画面が出てくるので、ログインをして「許可」ボタンを押します。
ただ、Google無料アカウントの場合は1日の最大メール配信数が100通の制限(G Suiteユーザーなら1,500通まで可能)があるようなので、ここだけご注意ください。
まとめ
今回は文系で非エンジニアの私が、株式会社AI Shiftにジョインしてから2年間で実施してきた効率化ツールの利用や簡単なブログラミングコードの紹介をしました。
・そもそも執筆者は何やっている人?
・BIツール「Tableau」は超絶オススメなツール
・RPAでレポート提出を完全自動化できる
・Pythonで面倒な処理を自動化しよう
・GASを使って簡単なBOTを作ると便利
本記事を読んで、「効率化ツールやプログラミングを使ってみようかな」と思ってもらえたら幸いです。
「大変だった?」、「何が効率化できるか相談に乗って欲しい!」など社内外関係者問わず、気になる方はお気軽に質問・相談いただければと思います。