リーンスタートアップ x java #jjug #jjug_ccc #ccc_h4
DESCRIPTION
TRANSCRIPT
リーンスタートアップ x Java山本 裕介 @yusuke
#ccc_h4
「日本でもっと普及させたくない?」!
「代理店よろしく」!
「・・・はい?」
2012年9月
.。oO
代理店!
↓!商品を右から左!
↓!在庫なし、リスクなし?簡単そう!!
うまくいかなければやめればいい
x
2012年12月 代理店契約締結
2013年2月 営業開始
0
3
5
8
10
2月
発行ライセンス数 受注数
0
50
100
150
200
2月 3月
発行ライセンス数 受注数
0
80
160
240
320
2月 3月 4月 5月 6月 7月 8月 9月 10月
発行ライセンス数 受注数
.。oO!
在庫なし、リスクなし?簡単そう!
受注
ライセンス発行
請求
顕在化するリスク!
• キャッシュフロー!
• 為替リスク!
• 回収リスク
.。oO!
在庫なし、リスクなし?簡単そう!
気をつけてきたこと• 小さく始める!
• システム化を可能な限り「しない」!
• できる限り手抜き
リーンスタートアップ• MVP!
• 価値仮説!
• 成長仮説!
• 構築 - 計測 - 学習!
• A / Bテスト!
• ピボット
リーンスタートアップ• MVP!
• 価値仮説!
• 成長仮説!
• 構築 - 計測 - 学習!
• A / Bテスト!
• ピボット
• JetBrainsの製品!
• 販売フロー
リーンスタートアップ• MVP!
• 価値仮説!
• 成長仮説!
• 構築 - 計測 - 学習!
• A / Bテスト!
• ピボット
• 日本で需要あるはず!
• 日本語!
• 日本円、銀行振込!
• お値頃
リーンスタートアップ• MVP!
• 価値仮説!
• 成長仮説!
• 構築 - 計測 - 学習!
• A / Bテスト!
• ピボット
• マーケットサイズ!
→デベロッパ数
リーンスタートアップ• MVP!
• 価値仮説!
• 成長仮説!
• 構築 - 計測 - 学習!
• A / Bテスト!
• ピボット
• あとで
リーンスタートアップ• MVP!
• 価値仮説!
• 成長仮説!
• 構築 - 計測 - 学習!
• A / Bテスト!
• ピボット
• キャンペーン!
• 販売方法
リーンスタートアップ• MVP!
• 価値仮説!
• 成長仮説!
• 構築 - 計測 - 学習!
• A / Bテスト!
• ピボット
• 生きていけない!
• もっと良い製品が登場!
• JetBrains Japan設立
システム化・自動化の目安• 基本はコンシエルジュMVPで提供!
• 自動化・システム化は!
• 間違いを起こした時!
• 作業負荷が高いと感じた時
受注
ライセンス発行
請求
代理店の仕事(想像)
代理店の仕事(実態)
見積 受注 ライセンス発行
記帳 消し込み
請求書送付送金
資金繰りプロモーション
価格交渉
早期一括返済
(株)サムライズムを支える技術
Webサイト• 当然なら事業をやる上で必要!
• Webサイト構築するならばCMSが必要!
• Javaベースが良い(自分でメンテしやすい)!
• でもWordPressが無難?!
• でもJavaがいい!
Webサイト
• quercus: JVMで動くPHP実装!
• WordPressも動作可能!
• ちょっと触ったけど時間切れで断念
Webサイト• やっぱり無難にApache + WordPressで構築
Webサイト• コンテンツの更新は?!
• 11の製品、128のSKU - 手動は無理
Webサイト• 各製品ページはプログラムで生成
wordpress-java
データソース データアクセス HTMLに変換Apache Velocity
http://samuraism.com/
受注• 確実に受注したい!
• ショッピングカートシステム?
受注• 実装 - Google Docsのフォーム
Google Docsフォームを使って• 良い点!
• 手軽でセキュア(デフォルトでSSL)!
• 悪い点!
• 見た目がしょぼい!
• 条件別のフォームなど実装できない!
• 金額計算、自動折り返しメールなどできない
帳票• 法人との取引には大事!
• 見積書!
• 納品書!
• 請求書!
• 領収書
帳票• 当初: Excelで記入、PDF化!
• 金額ミス等が時折発生!
• めんどくさい
帳票生成自動化• iText - JavaからPDF生成するライブラリ!
• PDFで出来ることはだいたいできる!
• 一からPDFを作るのはめんどくさい
(株)サムライズムにおける帳票生成• Excelで作る!
• PDF化!
• Acrobatで読み込む!
• フォーム要素埋め込み!
• iTextで動的に値を埋め込むfields.setField(key, value);
デモ
iTextで大事なこと• フォームエレメントのflatten : 編集不可に
Set keySet = fields.getFields().keySet(); if (fieldsLeftUnflatten != null) { for (String exclude : fieldsLeftUnflatten) { keySet.remove(exclude); } } for (Object keyobj : keySet) { String key = (String) keyobj; stamper.partialFormFlattening(key); } stamper.setFormFlattening(true); stamper.setFreeTextFlattening(true); stamper.close();
日本で大事なこと• 角印!
xxxxx
日本で大事なこと• 角印 - 帳票をそれらしくするのに必要!
• スキャンして白い部分を透過処理!
• 朱の部分は幾分透明度を与える
郵送に備えて• 窓付封筒に宛名が収まる
ASKUL - 今村紙工 窓付封筒 長3 横型 100g/m2 白ケント MD-05 1パック(200枚入)!http://www.askul.co.jp/ctg/itemdetail/itemEnlargedImageView/?ctgItemCd=260968
メール送信• メール「注文承りました。こちらにお振り込みを・・」!
• すること!
• 製品名、価格、宛先、宛名確認&メール送信!
• めんどくさい
メール送信public class SendPersonalLicenseInvoice { public static void main(String... args) throws UnsupportedEncodingException, MessagingException { String[] columns = "...".split("\t"); ! String endUserName = columns[0]; String email = columns[8]; ! String sku = columns[2].substring(0, columns[2].indexOf(":")); Price theItem = Price.getPrice(sku); ! String finalPrice = theItem.getPriceWithComma(); if(null != WordPress.priceOverride.get(theItem.getSku())){ finalPrice = String.valueOf(WordPress.priceOverride.get(theItem.getSku())) +"円"; } String body = String.format(endUserName + "様\n\n" + "サムライズム山本です。\n\nご注文ありがとうございます。\n" + "代金" + finalPrice + "を以下の口座へお振り込みの上メールにてご連絡ください。\n" +
String subject = theItem.getTranslated() + " のご注文"; GMail.sendMail(subject, body, "[email protected]", email, null, "[email protected]"); } }
メール送信を自動化して• 金額・宛名の間違いがなくなった!
!
• 今後!
• 見積書送付の自動化!
• ライセンス送付の自動化
ライセンス発行• 代理店向けサイトで発行
ライセンス発行• 発行時の入力項目:!
• 顧客情報(名前、住所等々)!
• クレジットカード番号!
• 売上の記録:!
• 法人 - 売掛、個人 - 売上として記録!
• 問題: めんどくさい、遅い
ライセンス発行• Seleniumで自動化
コントロール ライセンス
売上記録
ライセンス発行を自動化して• 圧倒的に楽になった!!
• JetBrainsサイト(GWTベース)の自動操縦大変!
!
• 今後!
• ライセンスの送付まで自動化したい
消し込み• 消し込み: 売掛金の入金確認、記帳!
• やりかた: 売掛と通帳明細の比較!
• めんどくさい
法人向けインターネットバンキング• とあるメガバンク
https://bizstation.bk.mufg.jp/service/kankyou.html より
法人向けインターネットバンキング• とあるメガバンク!
• Windowsのみ対応!
• 要クライアント証明書!
• めんどくさい
最初:UserAgent偽装でSafariからアクセス
最初:UserAgent偽装でSafariからアクセス• 手動でポチポチ操作してCSVダウンロード!
• めんどくさい
消し込み• Selenium + Firefoxである程度自動化
コントロール UA偽装してアクセス CSV形式
Seleniumを使って• 銀行口座の明細CSVダウンロードを自動化!
• 便利!!
• 消し込みはまだ手動!
→ 振込名義人名を特定できない!
• 新規入金の通知(メールやTwitter等)は未実装
Seleniumによる消し込み• 便利!
• どこかのタイミングでOSSにします!
消し込み後• 記帳!
• 通帳の明細を会計ソフトに記入!
• 売上、水道光熱費等々仕訳をしながら・・!
• めんどくさい
Yayoi4J• 通帳明細CSVを弥生で読み込めるよう変換!
• CSVの読み込み: OpenCSV!
!
• 弥生用CSV形式で書き出し: String.format();
http://opencsv.sourceforge.net
String.format(“\"2000\",,\"\",\"%s\",\"%s\",\"\",\"\",\"%s\",%s,0,\"%s\",\"\",\"\",\"%s\",%s,0,\"%s\",\"\",\"\",0,\"\",\"\",\"0\",\"0\",\"no\"", parsedDate, 借方勘定科目, tax1, amount ,貸方勘定科目,tax2,amount,摘要);
Yayoi4J• デモ
Yayoi4J• どこかのタイミングでOSSにします!
経費 - 通信費• 毎月一度エビデンスをプリント!
• オフィスインターネット代金!
• 携帯・PHS代金!
• WiMAX代金!
• めんどくさい
(株)サムライズムを支える技術
wordpress-java
Yayoi4J• デモ
まとめ• 日々の、月々の業務を見直してみましょう!
• 無駄な手動作業!
ある意味リーンスタートアップ!
(コンシエルジュMVP)!
• 自動化できる単調作業を探して実装!
• 実装付加と手動作業負荷のバランスを考えて
もちろんJavaで!