growthhacker

エンジニアのためのグロースハッキング:入門編

ある程度のトラクションがあるスタートアップの経営陣の方々と話をすると、最近必ずといっていいほど、この話題になります。

「グロースハッキングの意味や内容はおおよそ理解している。でも、それを実行できる人材が社内にいない。どうしたらいいのか?」

それもそのはず。グロースハッキングとは読んで字の如く、growth(=顧客獲得の仕組み、成長エンジン)を hacking(=実装)することを指しているので、平たく言えばマーケティング脳を持ったプログラマでない限り、その役割の全てを担えないからです。

そして、両方のスキルをもった本物のグロースハッカーは、シリコンバレーですら希有な存在で、世界中どこでも引っぱりだこの存在であるため、資金調達前のスタートアップではなかなか手が出せない人材だったりします。

では、グロースハッカーを社内で育成する場合、マーケティング担当者にプログラミングスキルを身につけさせるのと、エンジニアにマーケティングを教えるのと、どちらが近道がと言えば、自分は圧倒的に後者の方が近道だと思っています。

理由は、以下の2つ。

1)テクノロジー系スタートアップでのマーケティングは、やるべきことがある程度決まっていて、それらを覚えさえすれば、実行するするのには特にスキルは要らないため。

2)実用レベルでのプログラミング技術を習得するには、理系出身の人であっても数ヶ月〜1年程度の時間がかかるため。

マーケティング活動には、コピーライティングやバナー広告デザインなど一部センスを要するものもありますが、ここではセンスに依存しない、かつ「確実に」顧客を増やすことができるグロースハッキングの手法をエンジニア向けに何回かの連載の形で紹介したいと思います。

まず、最初にやるべきことは、いわゆるトランザクショナルメールの導入です。

トランザクショナルメールの定義については、MailChimp の ブログ を参考にしてください。ここでは、分かりやすく「ユーザーのアクションをトリガーにして送信されるメール」とします。

なぜ、トランザクショナルメールなのか。それは、トランザクショナルメールを導入することが、潜在顧客・見込顧客・既存顧客の活性化に最も有効で、プロダクトやサービスのコンバージョン率と単価を向上させるため、つまり売上を伸ばすために必要不可欠だからです。

このトランザクショナルメールを導入するに当たって、一番やってはいけないパターンを先に例で示しておきます。


# view.py
import smtplib

@view_config(route_name='signup', renderer='signup.mako')
def signup(request):
  # 何かしらの処理をする。例:ユーザの新規登録

  from_addr = 'me@example.com'
  to_addr = 'customer@example.com'
  msg = create_message(from_addr, to_addr, 'メール題名', 'メール本文')

  # 登録された旨を知らせるメールをユーザ宛に送信
  s = smtplib.SMTP()
  s.sendmail(from_addr, [to_addr], msg.as_string())
  s.close()

  # HTML テンプレートをレンダリングしてブラウザに返す
  return {}

上記は Python (Pyramid) で書いたユーザ登録フォームの例ですが、ここではフォームの内容をブラウザから受け取って、ユーザを登録した後に、登録されたことをメールでユーザに知らせるような処理を想定しています。他のプログラミング言語を使用される方も、同じような処理をするコードを想像してください。

このコードには3つの問題があります。

1)処理時間の長いブロッキング関数がリクエスト処理の中に含まれている。

これは、メール送信を行う sendmail() と SMTP ライブラリがブロッキング関数であるためメール送信が完了するまでユーザにレスポンスが返らない、つまりユーザのブラウザが待たされるということになります。

ユーザが待たされるだけならまだしも、新しい HTTP リクエストの度にプロセスやスレッドが生成されるような Nginx の設定にしていると、大量のユーザがアクセスした際に1つのリクエスト処理が終わる前に次のリクエストがサーバに届いてしまい、あっという間に Nginx で設定した最大プロセス・スレッド数に達してしまいます。つまり、ユーザがさばけない状態に簡単に陥ります。

2)メール関連のエラーでリクエスト処理自体がエラーになる。

上記の例では、メール送信に関連する例外処理が全く行われていないため、例えばメールサーバに接続できないだけでも、リクエスト処理そのものがエラー(500 Internal Server Error) になります。

本来は、メール関連でエラーが起きた場合は、再度後からトライするように実装して、リクエスト処理自体はエラーの有無に関わらず最後まで継続されるべきです。

3)アプリエンジニアとグロースハッカーのコードが混在している。

ベストな環境では、アプリケーションを開発するエンジニアとグロースハッカーは別々の人物であるべきで、前者はプロダクトを作ることだけに専念し、後者は顧客を増やすことだけに専念すべきです。

上記の例では、両者のコードが混在しているため、Git や Mercurial でコミットするとかなりの確率で conflict (競合) が発生してしまいます。両者のコードは別々の場所、つまり別々のソースファイルで管理されなければなりません。

CTO がやむなく一人で全てのコードを書く場合でも、グロースハッキングに関わる部分は最初から別のソースファイルで最初から開発を進める方が良いでしょう。

これらの問題を解決しつつ、トランザクショナルメールを正しく導入する初め一歩がプロセスの非同期化になります。

プロセスを非同期化することで、ブラウザからのリクエスト処理やアプリケーション本体の動作に全く影響を及ぼさずに、グロースハッキングを行えるようになります。言い換えれば、トランザクショナルメールに関する処理は、基本的に全て別スレッドで行うという考え方です。

次回以降では、500 Startups の Distribution Team で採用されている手法を学びながら、Python の非同期化ライブラリである gevent を使って、トランザクショナルメールによるグロースハッキングのやり方を解説していきたいと思います。

  • このエントリーをはてなブックマークに追加