商談をTrello + Google Colaboratoryで管理（その1）

このシリーズでは、商談の管理をTrelloで行いその分析をGoogle Colaboratoryで行うことを考えていきます。

* 1回目の記事（本記事）
* 2回目の記事（https://qiita.com/yazn/items/ea44ab987d1709c77d9f ）
* 3回目の記事（https://qiita.com/yazn/items/f1e0d05f14db49473b1f ）

#1. このシリーズのゴール
商談管理を行うためのTrello + Google Colaboratoryを扱います。簡易的なコンテキスト図を以下に示します。

![無題の図形描画 (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/984649/dbdaa22a-c446-8e2b-19fd-fd2c3127a2bf.png)


この記事執筆時点ではGoogle Colaboratoryを私は使ったことがないため、このような構成での実現可能性はまだわかっていません。わかり次第この記事の修正を行います。もし実現できなかったとしてもこの箱がJupyter Notebookに置き換わるだけなのであまり影響はないですけどね。

私自身がここで記載している営業担当者やフォーキャストミーティング参加者になるため、私が使いやすく報告がしやすい状態になることがゴールです。また、全て無料枠で行える前提で進めます。

本記事では、導入として背景的なトピックとTrelloの準備までを扱います。

#2. 前提とする営業プロセス
営業の教科書として評価が高い書籍 THE MODEL/福田 康隆(2019) で紹介されているプロセスを**参考**にします。単なるモノマネは避けたいので、これを参考にし自社文化や自社顧客に合わせて導入して行きたいと思います。これについては、THE MODEL著者の福田さん自身も「**THE MODELそのまま実装するのはよくない**」と仰ってます（https://note.com/yfukuda0709/n/na2ad992bdc83 ）。

![41lSAQ-5R+L._SY344_BO1,204,203,200_.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/984649/e557f0af-f603-8d9d-7739-388c28d11304.jpeg)

とはいえ、読者であるあなたと私はそれぞれ事情が異なるので、まずは当該書籍をベースに議論を進めます。

#3. Trelloでボードを作成
Trelloで以下のようなボードを作成しました。どのように運用するかも赤字で記載しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/984649/0a78d9a4-a55c-8cd2-f55c-fb37ce207ca9.png)

ここ記載したフェーズ名や定義は内容は前述で紹介したTHE MODELに**例示された**ものを引用しています。企業文化や顧客によって適宜変更すれば良いでしょう。私はこれと異なるフェーズ定義で運用しています。

運用初期や新メンバーのボードでは、このフェーズ定義を目立つところにおくと良いと私は思います。営業プロセスを理解していない人にとってフェーズ名だけでは意味がわからず、プロセスが形骸化してしまう事態に陥る可能性が高いのではないでしょうか。

また、各定義カードには以下のように次のフェーズへの移行判定基準を記載するようにしています。（こちらもTHE MODELの引用です）
<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/984649/a9a4833d-f124-695a-fab8-97a86c16cf69.png">

各案件カードは、{顧客名}_{案件名}という名前にし、以下のように案件詳細がわかるようにします。
<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/984649/bad6acce-6c8b-2bbe-20eb-6daa3a5940b9.png">

また今後Pythonで処理をするために以下に示すいくつかのルールを採用しました。

* 案件カード以外は、名前の最初に.（ピリオド）をつける
* .（ピリオド）で開始されるカードには「メタ」と名付けたラベルを付与する（Notebook連携時に自動化予定）
* 案件カードの名前は{顧客名}_{案件名}とする
* 案件カードの説明は決まったルールで案件情報を記載する（現在は「クローズ時期」「予算（JPY）」のみ）

#4. TrelloでAPI Key及びTokenを取得
公式のガイド（https://developer.atlassian.com/cloud/trello/guides/rest-api/api-introduction/ ）やググって出てきたガイドを参考にAPI tokenを取得します。

##4.1. API取得サイトへアクセス
こちらへアクセス: https://trello.com/app-key
<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/984649/9b3c8bc9-6580-7f66-7be6-0e745f399319.png">

キーをメモ帳にコピペし、トークン生成画面へ遷移してください。

##4.2. トークンの生成
先程のリンクをクリックし、スクロールダウンすると以下のような画面が確認できます。
<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/984649/f618644a-0dc8-6eb7-d489-c2d897bf1d7f.png">

「許可」をクリックするとトークンが生成されることがわかります。こちらもメモ帳にコピペします。

くれぐれもキーやトークンを共有しないようにしましょう。


#5. ボードの情報が取得できることを確認
Qiitaはプログラミング情報ナレッジコミュニティみたいなので、私もこの記事でプログラミング情報を共有しないといけません。

py-trelloをローカルにインストールし、先程作成したカードを取得してみます。なお、py-trelloはGoogle Colaboratoryでも使いますが、本記事ではまだGoogle Colaboratoryは登場しません。ローカルで動作確認をしないという方はこの章を読む必要はないです。

##5.1. py-trelloのインストール
py-trelloはtrello連携用ライブラリです。pipでインストール可能なので下記のようにご自身の環境でインストールしてください。

```sh
$ pip3 install py-trello
```

##5.2. ボードから様々な情報を取得
Pythonで以下のコードを流し込むと様々な情報をボードから取得することができます。私と同じものを作っていたら同じ結果が得られるはずです。ぜひ楽しんでください。

```py
from trello import TrelloClient

trello_client = TrelloClient(
    # 先程取得したキーとトークンを記載
    api_key = '',
    token = ''
)

# ボード名一覧を取得
[x.name for x in trello_client.list_boards()]

# 対象のボードである'Opportunities'ボードを取得（ボードの名前がユニークでない場合は困る）
opps_board = [x for x in trello_client.list_boards() if x.name == 'Opportunities'][0]

# 案件フェーズ一覧取得
opps_board.get_lists(list_filter='all')
# [<List Ph.1 リード以上商談未満>, <List Ph.2 ビジネス課題の認識>, <List Ph.3 評価と選定>, <List Ph.4 最終交渉と意思決定>, <List Ph.5 稟議決裁プロセス>, <List Closed (Won/Lost)>]

# 各フェーズの案件数取得
{x.name: len([y for y in x.list_cards() if not y.name.startswith('.')]) for x in opps_board.get_lists(list_filter='all')}
# {'Ph.1 リード以上商談未満': 1, 'Ph.2 ビジネス課題の認識': 0, 'Ph.3 評価と選定': 0, 'Ph.4 最終交渉と意思決定': 0, 'Ph.5 稟議決裁プロセス': 0, 'Closed (Won/Lost)': 0}

# 顧客名リストアップ
set(x.name.split('_')[0] for x in opps_board.get_cards() if not x.name.startswith('.'))
# {'（株）ぼったくり印刷'}
```

#6. まとめと次回予告
本記事では以下のトピックを扱いました。

* 商談フェーズ管理の運用例について
* 商談フェーズ管理を行うために、ここではTrelloとGoogle Colaboratoryを使って行うこと
* 必要なボードを作成
* API keyやtokenを取得し、Pythonからボードの情報を取得すること

次回は以下のトピックを扱おうと考えてます。

* Google Colaboratoryの準備
* 商談レポートの作成

次回記事: https://qiita.com/yazn/items/ea44ab987d1709c77d9f

---
#7. Appendix なぜこの組み合わせか？
## SalesforceなどのSFAを使わない理由
業務運用に関わる部分で、完成されたシステムを先に導入してしまうと単なるモノマネになってしまい本質が見えなくなると考えました。また、ポストイットで管理できるものに費用を払う必要性を感じるほどの規模感ではないというのも大きな理由の一つです。

## Trelloの理由
APIがあってニュルニュル動いて、どんな運用でも実現できます。また、最悪Trelloがなくなってもポストイットで代替できます。

## Google Colaboratoryの理由
無償のJupyter Notebookホスティングサービスです。最悪Google Colaboratoryがなくなっても、ローカルでJupyter Notebook動かせばいいし、それがなくなっても紙のノートで代替できます。


要は何が起きても商談管理と言う運用は継続できると言う理由ですね！