個人開発シリーズ1:ドメイン知識の習得
こちらの記事の続きになります。
投資支援ツールを作っていくにあたり、まずそのドメインについての理解度を高める必要があります。本来であればドメインエキスパートが開発チームにいてそこと対話することで理解を深めるべきですが、個人開発なのでそうもいきません。そこで自分がドメインエキスパートになるために、VCの投資活動や業務について何冊か書籍を読んだり、調査を行ったのでそのまとめを書いています。
ここではツール開発に向けた要点のみ書き上げているので、ドメインについてより詳細なまとめはこちらの記事で書いています。
ドメイン知識メモ
VCの分類
- マネジメント型VC
- 投資先の経営支援も行う
- 業界特化型VC
- ファイナンシャル型VC
- 株式市場への理解やノウハウを活かす
- 株式市場に左右される
これらそれぞれのタイプのVCから、知識を凝集する。できるだけ株式市場の値動きに左右されない中長期投資を行うことを目指すため、 特にフィナンシャル型以外のVCから、個人投資家にも活かせる知識を取り入れる。
とはいえあくまで個人投資家向けの投資支援ツールなので、投資先のマネジメントは対象外。業務プロセスや方法論についてのみ取り入れる想定。
VC業務プロセス(マネジメント型VC)
個人投資家でも関係ありそう/開発するアプリケーションで担当したい部分は⭐️マーク。 その部分の文献や研究から個人投資家の支援に活かせそうなノウハウをツールに取り入れていく。
- 案件発掘(Deal Sourcing)⭐️
- 投資案件を幅広く集める業務
- ある程度パターン化された方法論がある
- 投資検討:デューデリジェンス(Due Diligence)⭐️
- そのなかから投資すべき案件を見出し、投資の的確性を精査する業務
- ある程度パターン化された方法論がある
- 業界慣習として基本的に3ヶ月以内とされている(CVCに限る話かも?
- 意思決定⭐️
- バリュエーション(株価)を決めて投資額などを意思決定する業務
- 経営支援
- エグジット
- ある程度成長を経た後に、経営陣と相談しながら株式公開や売却などに導く業務
VC活動に必要な素養
- VCとしての活動に最も重要なのは業界人脈
- 人脈を形成し、その中心にいる人物ほど情報アクセスの速度や案件紹介の数が増える⭐️
- 投資先企業側にも人脈の提供ができるため
- ベンチャー企業側としても、そのような人物に投資や経営支援を受けることが旨味が大きい
- VC同士は自身の持つ有望投資案件の紹介も行っている
- 将来自分も同様に有望案件への投資機会を紹介してもらえるという見返りを期待(⭐️)
- 意見交換にもなり、自らの投資検討の精度を上げることもできる⭐️
- 投資先の支援にもなる⇒そのため、特にアーリーステージでは共同投資パートナー選びは重要
=> 個人投資家もやりたい・メリットがあるが、個人投資家同士では見返りを期待することが難しいので人脈形成の観点は難しい?
=> 当面は個人利用を考えているが、リリースも目指す際はここの解決も目指す(個人投資家同士の人脈形成を支援するアイデアも一応あるがここでは略)
まとめ
まとめると、「VCの業務プロセスや方法論の導入」、「個人投資家の人脈形成(オプション)」の観点で個人投資家を支援するツールを作成していきたいと思います。自分自身、エンジニアをしつつ個人投資家もやっていきたいと思っているのですが。VCや投資機関と同水準の投資活動を行えるようにしていくのが目標です。
長い時間かけて作ってこうと思うので割とまともにやることを明確化してみました。 (もっとちゃんとした企画書みたいなのも作ってみたんですが、そちらはまた別の機会でブログにするかもしれません)
それでは、やっていきます💪
コーポレートベンチャーキャピタルの実務 読書録
こちらの書籍の読書録になります。個人開発で投資支援ツールを作ることにしたのですが、そのためにドメイン知識を習得する必要があり、読みました。 VCの投資活動や業務について何冊か書籍を読んだり、ネットで調べたりしたんですが、この本が学びが大きかったのでブログに残しておきます。特に、VCに最も必要な素養は分析スキルなどではなく人脈と割り切って述べている部分がなるほどと思いました。
個人開発についての背景はこちらになります。 moai510.hatenablog.com
自分自身はエンジニアですが、こういった分野のことも学ぶことで視座が高まった気がしました。事業に関わるエンジニアにとってもおすすめできる本だと思います。
それでは章ごとの簡単なまとめと感想です。
1章 CVCが求められる背景
- 全体を通して、日本とアメリカにおけるVC、CVCの傾向を掴むためのデータが記載されている。
- オープンイノベーション
- アメリカでは大手事業会社は外部にR&Dをもつ
- 日本では現状、M&Aや戦略的投資を活用したR&Dの外部化を実行することができていない
- その他、日本のCVCには様々な部分で課題があり、うまくいってない
- アメリカではベンチャーやVCがうまくまわり、イノベーションを支えるエコシステムが出来上がっている
- アメリカでは起業家がペイアウトしてVCになるという流れが多いが、日本ではそうでなく新卒入社からの叩き上げが主
- VC側にも経営経験があるのがやはり強い、少なくとも事業会社勤務経験があるのがベター
感想・大事な点メモ
- 最近ではシードやアーリーステージの企業にもバンバン投資されるようになっている
- 上場する頃には食い尽くされてしまっているのではないか?
- ⇒ 個人投資家が勝つには、同じように上場前企業に投資できるサービスを使う、もしくは買収先企業の株を先に買っておくか?
2章 CVCの設立と戦略
- 大手企業は漸進的イノベーションには多く投資するものの、抜本的イノベーションの創造においては生産性が悪いとされている
- イノベーションは様々な知識の統合によって作り出される要素が大きい
- 米国のソフトウェア、インターネットサービス企業の成功には成長率の加速が必須であり、そのためにはM&Aは定期的に行わなければならず、M&Aプログラムが、本業とそれ以外の事業の成長の双方を加速する事業のコアとして認識され、設計されなければならないとしている。
成長を加速するM&Aの4つのタイプ
顧客基盤の拡大と統合:
企業が成功できる製品やサービスを確立できた場合、対象顧客基盤を持つターゲット企業を買収することで成長は加速する。これにより、売り上げは拡大し、未開拓の地域に展開可能になり、製品やサービスの信頼性を向上させ、市場シェアの拡大により差別化を強化することができる。このタイプのM&Aの場合、既存顧客と新規顧客の双方への影響に注意を払う必要がある。
製品ポートフォリオの隙間の充足:
企業は自社の主要な製品やサービスの隙間を埋めるためにM&Aを使うことができる。この場合、ターゲット企業の製品やサービスが確実に隙間を埋めることができること、買収後に既存の製品やサービスとしっかり統合できるよう、深い技術的理解が必要になる。
横展開の加速化:
既存市場を超えた更なる成長を志向する企業は、一般的に隣接する市場での事業機会を模索する。成長におけるスピード感の求められるソフトウェア、インターネットサービス市場では、自前での隣接市場への参入では遅すぎる可能性があるため、参入を加速するためにM&Aを使うケースが多い。この場合、リスクは想定していた隣接市場や被買収企業が期待ほど魅力的でないケースや、買収企業が買収後、被買収企業の事業を隣接市場での成功に導く能力がないケースがある。
人材獲得:
このタイプのM&Aは、買収企業のコア事業を成長させるために役立つ、非常に優れた人材を獲得するためだけに行われるものである。この場合の注意点はそうした人材を買収後も自社内に留めておくことができるかどうか、そして買収企業がその人材の能力を過大評価していないかどうかという点である。
イノベーションを発見するという目的において、M&AよりCVCは明らかに投資効率が良い
- CVCやアライアンスは少ないリスクでの技術の探究に適し、M&Aは既存技術の活用に適するとされている
ベンチャー企業との資本提携手段
- VCファンドへの投資
- VCファンドに出資し、出資先VCの投資するベンチャー企業の情報を取得
- 最もリスクの低い手段であり、日米で多くの事業会社が実施済み
- CVCの運用をVCに委託
- ファンドに必要なリソースを確保することなく自社戦略に適う領域のベンチャー企業の発掘、育成ができるメリットがあり、一流のVCを確保できれば高い投資収益も期待できる
- ただし、VCとCVCの関係が重要。VCが受託してくれるかどうか
- CVCの自己運用
- 体制の構築は必要(結構大変)だが、自由度は高い
- 本体企業から切り離してファンドを設立することで、迅速な意思決定が可能に
CVCと社内R&D投資額は予算を奪い合って競い合うようなものではなく、むしろ補完し合うものであるとしている。
⇒ 社内R&DはCVC投資による知識の刈り取り能力を高めるだけでなく、買収によって得られた技術や人材、資産を有効活用する能力にも影響するとしている。
⇒ R&D部門から人を派遣するCVCプログラムも数多く存在する
CVCを行っている企業は時価総額の上昇もよく見られる。さらにファイナンシャルリターン目的のCVCよりも戦略的リターン目的のCVCを行っている企業の方が将来性が高いと期待されて上がりやすい。
戦略的リターンの具体的内容
買収: CVC活動を通じて、企業は興味のあるベンチャー企業についてより多くの知見や戦略的適合性も把握できる等、買収判断時の戦略的ベネフィットを得られる。
CVCを通じて企業はベンチャー企業の技術や市場にアクセスし、製品開発をモニタリングすることで買収のターゲットになるようなベンチャー企業を発掘し、評価する能力を高めることができる
技術ライセンス: ベンチャー企業は製品開発のスピードが早いため、大企業にとってはその技術のライセンスを早期に得ることはメリットとなる
プロダクトマーケティング:
ベンチャー企業にとって、大企業のマーケティング&販売チャネルは魅力的である。そのため、大企業にプロダクトマーケティングの権利を渡すことは双方にとってベネフィットのある提携となると考えられる
国際的事業機会: ベンチャー企業は米国市場に注力してビジネスを行っている場合が多いため、国際展開を手伝ってくれる大企業との提携は魅力的である。海外の大企業にとっても米国のビジネスを自国の市場で展開できることはメリットがある。
- 技術窓口: 大企業にとってCVC活動は自社の製品開発や事業開発の補完的役割を果たすものである。CVCを通じて得た先端の知見を元に変化の激しい市場動向を把握し、自社の戦略立案に活用する事例もある。
- 企業内部における起業家精神の育成: 社内人材がじかにベンチャー企業と接し、彼らがどのように事業を創っていくかを見ることで社内人材に起業家精神が養われる。
- 業界人脈: CVC活動を通じて、ベンチャーキャピタリストやTMTセクターの投資銀行、起業家、科学者、コンサルタント等の業界人脈を獲得可能である。
このほかにも、CVCで有望なベンチャーに投資することで、同じ市場で競合する他企業のイノベーションへの投資意欲を削ぐ効果を生み、自社のR&Dの成功確度を高めることもできるとしている。
CVCのタイプ別分類
図表2-6(略)
ベンチャー企業にとってのCVCのメリット
図表2-7(略)
様々なデータでCVCを受けたベンチャー企業の価値向上を証明している。
CVCの成功要因
先行研究とそこで主張されている成功要因のまとめ
図表2-8(略)
それぞれの詳細は本書を参照。
- VC業界との窓口になる人材は最も能力の高い人物でなければならなず、理想的には技術とビジネス両方の専門性を持っていることが望ましいとしている。⇒CVCの評判は担当者によって影響を受ける
- CVC担当者は案件が持ち込まれるのを待っていてはならず、主体的、積極的にVC業界に関わっていくことで投資案件を発掘する必要がある。逆に、もしまだ実績の無いCVCに、VCから共同投資を持ちかけられた場合には十分な注意を払う必要がある。
投資形態と事例
- それぞれの投資手段の別で事例を紹介しているが略。
- Google Venturesの話もある
- 実際どんな人がCVC業務を担当しているかも記してある
3章. CVCの運用-実務上のベストプラクティス-
ここから実務の話。ここの知見をアプリケーションに組み込んでいきたい。
1. 案件発掘(Deal Sourcing)
- 同業である他のVCからの紹介、投資先ベンチャー企業経営者からの紹介、イベントでの接触やウェブサイトからの問合せ、弁護士や投資銀行からの紹介等の発掘ルートがある
- また、CVCはこれに加え、自社の開発部門、営業部門、アライアンス部門等からの紹介というルートがこれに加わる
- VCであれ、CVCであれ、ベンチャー投資を成功させるためには、成功角度の高い有望案件にいかに早期にコンタクトできるかが重要
- ⇒そのために業界人脈を構築することが極めて重要。VC業界においては一部のVCが良質なネットワークを保有するため、他のVCより影響力が強い立場にある。ベンチャー企業も著名なVCを求める。
- VC業界人脈における中心度がパフォーマンスに非常に大きな影響を与える ⇒ VCにとっては中心度を高めることが戦略上重要
CVCの投資案件発掘
- VCからの紹介
- VCファンドにLPとして参戦
- 本体企業のリソースを活用した案件発掘
2. 投資検討:デューデリジェンス(Due Diligence)
- VCのベンチャー企業の評価軸については、様々な先行研究が行われている
- 書籍などからも様々な知見が得られるようになっている
実務上重要となる検討項目
下記チャートを埋める形で検討を進めるとよい。
図表3-1(略)
- 市場性
- 市場規模により、取るべき戦略が変わる
- 市場拡大のスピードの見極めが重要
- 周辺技術の立ち上がりやその事業がどのくらいのスピード感で顧客に受け入れられるかによって拡大のペースは遅延し、起業家とVCは大きな影響を受ける
- 狙いは良くても時期尚早で失敗したベンチャー企業やVCの事例は列挙にいとまがない
- 製品と技術
- 開発、提供する製品やサービスの価値、そしてそれを裏付ける技術の優位性の調査
- どういった想定顧客のどのような課題を解決するのか
- 顧客はその課題のためにどれほど困っていて、どのくらい優先度高く課題解決に取り組むか
- なぜその会社が提供できるのか
- 現在の製品の完成度、今後の開発上の課題、開発ロードマップはどうなっているか
- 様々な確認項目を調査する上で、顧客レファレンスは欠かせない作業
- 現在 or 潜在的な顧客に直接話を聞くことで知見を深めることができる
- 精度の高い顧客レファレンスが十分に取れる人脈を持つかどうかもVCとしての差別化となる
- 開発、提供する製品やサービスの価値、そしてそれを裏付ける技術の優位性の調査
- ビジネスモデル、財務状況
- どのタイミングでどのように顧客から課金し、事業を拡大していくか
- VCは、その計画が現実的なのか、事業計画上の想定数値の現実性の検証、今後追加でどの程度資金が必要なのかについて見定める必要がある
- 技術的に難易度の高い製品やサービスを開発する場合や、市場でのリーダーシップを獲得するためにサービスを無料で提供してユーザ数の拡大を図る場合は、初期段階で大きな資金調達を必要とする
- 競合優位性
- 製品やサービスの競合優位性、代替手段の調査をさす
- 現在の競合は誰なのか、そして比較した場合の優位性や課題の分析
- 他社はなぜ容易に真似できないのか
- 参入障壁の存在とその大きさについての分析も必要
- 買収やパートナーシップによって、現在の競合環境そのものが変化する可能性についても分析が必要
- 製品やサービスの競合優位性、代替手段の調査をさす
- 経営陣
- 投資リターン分析
CVCのデューデリジェンス
- 社内リソースの活用
- 社外のVCや顧客の評価に加え、自社の開発リソースの意見を取得可能
- それらをバランスをとりつつ、自社にとって有益な判断をする必要がある
- 協業案の精査
- 戦略的リターンを投資の目的とするCVCにおいては、如何に投資先との協業案が自社事業に貢献するかという観点での検討が必要
- 投資検討時に事業部門を交えた投資候補先との協業案の策定、協業事業計画の検証が必要となり、これが十分に魅力的であるかどうかという観点がCVC投資実行に重要
- 単なるアライアンスではなく、投資が本当に必要なのかどうかについても十分な検討が必要
- 経営陣の評価
- 大企業の人事評価と同様の目線で起業家を評価してはいけない
- 投資リターンの分析
- CVCは妥協しがちだが、投資コストを上回る戦略的リターンを創出することは容易でない
- 投資先の時価総額が適正か正しく評価し、ファイナンシャルリターンについても検討することが必要
3. 投資実行(Execution)
- CVCの投資額、投資持分
- 戦略的リターンの獲得
- 資金使途の限定
- M&A独占交渉権締結前の事前連絡事項
- ファイナンシャルリターンの獲得
- ミドルステージ以降でのフォロー投資
- ミドルステージ以降でのリード投資
- アーリーステージでのリード投資
- ※それぞれの投資戦略での注意点などが書かれている。が省略
4. 投資先の支援と管理(Monitoring)
- VCの投資先支援と管理
- CVCの投資先支援と管理
- VCと異なり、戦略的リターンの獲得のための協業事業の進捗の管理が重要となる
- 投資先経営陣と社内の関係者を集めて協業事業に関する議論を定期的に行うことで、投資の意義、目的である戦略的リターンの獲得を推進する
- リードVCとCVCの投資先への提供価値の違いを下図に示す
図表3-2(略)
5. 投資回収(Exit)
CVCにおいては、本体企業による買収とファイナンシャルリターンの回収の二つのパターンがある。
略。
4章 発展するベンチャー・エコシステム
米国ベンチャー企業の経営手法
図表4-1, 4-2(略)
- ソフトウェアとインターネットサービス企業にとって、売上高の年平均成長率が成功にとって何よりも重要という統計が出ている ⇒ 上場企業の時価総額に最も影響を与えるのもこれ
- ソフトウェアとインターネットサービス分野では、売上高40億ドルに達するまでは、売上高年間平均成長率の上昇は、時価総額に対してEBITDAマージンの改善の2倍の影響があるとしている
- ⇒つまり、企業の成長ステージに応じた成長戦略を取るべき
成長ステージ別成長戦略
- 序章
- 企業は製品と市場の適合性を確認すべきで、通常それは最初の顧客に対して特注の製品を納めることで行われる
- 多くの顧客に訴求できるような製品とビジネスモデルを見つけ出すことに注力すべきである
- 第一章
- 多くの顧客に提供し、継続的に売り上げを計上できることで事業を拡大させることができる事業に注力するべきである
- ソフトウェアやインターネットサービス事業では、最初のヒット製品で自らのビジネスモデルを実証し、通常1,000万ドルから1億ドル程度の売り上げを上げることができる。こうした企業は、この急成長を元に上場を果たし、成長資金を得ることが重要である
- 第一章で成功するための成功要因は5つあり、「拡大する巨大市場」、「マネタイズモデルの確立」、「急速な顧客拡大」、「ステルス(開発途中のプロダクトを市場で公開せず、競合に知られない間に開発を進めること)」、「経営メンバーに対するストックオプション等のインセンティブシステム設計」
- 第二章
- 最初の製品の市場規模や市場シェアの壁に直面することになる
- 新しい地域に製品を展開したり、既存事業基盤を生かした新しい事業を始めたり、既存事業に新しい種類のメニューを加えたりすることができる
- 第一章で展開した事業の市場が巨大で急拡大しており、複数の成長段階を支えることができる場合にのみ適用可能である
- 第一章で実証したビジネスモデルを隣接する異なる市場で展開することもできる
- M&Aを通じてこの戦略を展開する企業も多い
- 第一章で成功した事業をプラットフォーム化し、その上に自社の製品を補完する経済圏を作るというやり方もある
- また、第一章から第二章へ移行する適切なタイミングを見極めることが重要
- 早く移行しすぎると既存の市場からの収益を取り損ね、競合が市場シェアを奪うことを許すことになる
- 遅すぎると、既存事業の成長の鈍化が時価総額の低下を招き、最終的には市場シェアを失うことになる
- 適切なタイミングを見極める先行指標として、市場が飽和してきたことによる顧客獲得ペースの鈍化、顧客の生涯価値の低下、自社経済圏へのパートナー企業の参加率の低下、新規参入者による市場破壊、そして自社の重要な人材の流出を挙げている
図表4-3(略)
米国ベンチャー企業のExit
図表4-4(略)
- VCの投資回収までの期間は年々長くなっており、IPOでは2014年時点で7.5年、M&Aでは6.2年になっており、2000年時点と比べるとそれぞれ倍増していることがわかる
図表4-5(略)
図表4-6(略)
- ベンチャー企業のM&Aが多いのも米国の特徴である
- VC投資先の被買収企業数は2014年には459件であり、買収金額平均は約3.5億ドル
- 以下は米国IT分野の2014年の大型M&A案件一覧
- 成長過程のベンチャー企業が大手企業によって30億ドルを超える価格で買収される事例も多い
図表4-7(略)
日本のベンチャー業界の発展
- サブプライム住宅ローン危機以降、大企業に勤務していれば安全という固定概念が崩れ、若い世代を中心に価値観の多様化が促され、日本の起業環境にインパクトを与えた。
- 政府としても、経済振興策の一つとしてベンチャー企業の支援を明確に打ち出していることもこれを後押しとなっている
- 大企業経験者と未経験者の起業事例
図表4-10(略)
図表4-11(略)
- VCファンドへのコミットメント額、平均投資額は増えてきている。ただし、アメリカと比較したらまだ10倍以上の差があり、発展途上
- 日本でこれまでベンチャー企業のM&Aが活発に行われなかった要因
- 有望な案件数の不足
- 日本においては優秀な理系出身の学生が大企業に就職する傾向が強かった
- 優秀(?)⇒ そもそも日本においては学歴で就職が決まる要素が強く、技術力をつける必要がないのも実態だと思われる
- 買収実行時のハードル
- 買収側のスキル不足
- 有望な案件数の不足
日本のインターネットサービス企業のパフォーマンス分析
- 分析の仕方がためになりそうなのであとで参照すると良いかも
- 米国では時価総額と売上高成長率の相関があったが、日本では営業利益成長率との相関が見られる
- 日本では本質的な成長を目指すため売上高成長率重視の経営を行うことが必ずしも株主に評価されない可能性を示している
5章. 日本のCVCの現状
日本のCVCの実態調査・ヒアリング実施結果が載っている。
図表が多いので略。⇒本書を参照すること
- 要点
CVCの成功要因
分析結果が記載されてあるが、そこまで新しい発見はなかったと思うので略。
6章. 日本のCVCの発展に向けて
本書のまとめ
- 日米格差は広がっている
- 日本のIT企業が時価総額やその生み出すイノベーションにおいてグローバル市場での存在感を持つためには、米国企業に倣ったM&A、CVCを中心としたオープンイノベーションの実施が必須である
- オープンイノベーションを経営上の必須の手段として定着させる必要がある
- 米国のCVC成功要因を取り込むことが大事
- 日本の大企業のカルチャーや人事制度とは合わない
日本のCVCへの提言
個人開発シリーズ0:目的と作るものを決める
個人開発を始めて行こうかと思うので、今後やったことを順次ブログに書いて行こうと思います。 同じように個人開発を始めようとしている人の参考になれば幸いです。
ここまでブログにしたものは以下の通りです。
個人開発の目的
- 自分が欲しいものを作ること
- 業務で触らない技術も扱い、技術の幅を広げること
- 個人開発とはいえ、技術力向上が目的なのでスピードより品質重視で作ることを考えている
- DDD、マイクロサービスアーキテクチャなどをガッツリやってくのが目標
- リリースする
DDD、マイクロサービスでやっていくため、以下の書籍をバイブルとして開発を進めていきます。それぞれかなりわかりやすく、お勧めの本です。
作るもの
いわゆる投資ツールです。 投資にも興味があり、本職でやってる機械学習も活かせそうなので選びました。
ただし、数字やグラフだけを追っていく投資ではなく、VC等のように投資先をしっかり分析していく方が興味があるので、 そういった投資活動を支援するツールを作る想定です。
VCの投資案件発掘やベンチャー企業評価には、様々な方法論があり、研究も多くされているそうですが、 そういったものから得た知見やフレームワークのようなものを取り込んでいき、個人投資家でもVCなどと同じ水準の投資活動が行えるような ツールを作ることも目指したいと思います。
※投資の分析ツールのようなものもすでに出てきてはいるのですが、調べた限りではそういったツールは企業向けの価格帯で提供されています。一方個人向けにはいわゆる証券会社が出しているトレーディングツールのようなものになってしまい、今回自分がやりたいことには合わないことから作ろうと思った背景もあります。
40歳〜50歳あたりで投資が収入源にできれば良いなぁと考えているので、それまでのんびり作って行こうかと思います。
Android Kotlin Fundamentals をやった
はじめに
Googleが出しているandroid開発に関するチュートリアルについての備忘録です(※以前書いた記事を移行してきたものになります)。 https://codelabs.developers.google.com/codelabs/kotlin-android-training-welcome
ネイティブアプリ開発は他の言語を学ぶのと違って、最初は必要な知識量が多くて戸惑うと思います(Activity、Fragment、DataBinding 、ViewModel、LiveData、RecyclerViewなど)。 ただ、このチュートリアルさえ読んでおけば、結構ちゃんとしたアプリが書けるようになるんじゃないかと思います。無料で公開してくれていますし、かなりおすすめです。
これを学んでから作ったアプリもあるので、サンプルとして参考にしていただければと思います。ハッカソン用に作ったアプリです(当時ネイティブアプリ開発経験は0でしたが、ここまで書けるようになりました)。
https://github.com/tonouchi510/navitime-challenge
チュートリアル紹介
- Androidのライフサイクル、データバインディング、Room、Repository、RecyclerViewなどカバー
- MVVMとかAndroidで推奨されているアーキテクチャ周りまで全部学べる
- 英語しかないので英語の勉強にもなる
それではチュートリアルの各章について概要をメモしていきます。
チュートリアル内容メモ
Lesson 1: Build your first app
- Androidアプリ開発のプロジェクト構成、設定ファイル、静的ファイルの扱いを学べる
- ハマりポイント:ビルドする時に前回ビルドのキャッシュが残ってたり、ファイルロックがかかってたりなど特有のポイントがある
- 前回のビルドのプロセスがキャッシュファイルのロックを取っていてAndroid Studioのビルドができないとき - woshidan's blog
Lesson 2: Layouts
- 特にdata bindingの部分が重要。基本的にdata bindingは有効にして開発していくべき
- 従来のfindViewByIdで毎回階層をたどるのではなく、各ビューへの参照を含むオブジェクトを作成する
- アプリ起動時のみオブジェクト生成のための捜査が走る
Lesson 3: Navigation
- Activity(ページ)単位だけでなくFragment(コンポーネント)単位でビューを開発できるようになったという話
- ここはあまり読んでない
Lesson 4: Activity and fragment lifecycles
- Androidの(Activity&Fragment)のライフサイクルおよびライフサイクルメソッドについて学べる
- アプリの各時点でログを出力してライフサイクルメソッドの呼び出しタイミングを確認する
- パフォーマンスとかが問題になった時にここを復習してちゃんとライフサイクルメソッド駆使すると良さそう
Lesson 5: Architecture components
- この辺から初学者は結構しんどくなる
- ViewModelとかMVVMについて学べる
- アプリのデータ変化を監視し、ビューに通知するためのLiveDataクラスも導入する
- DataBindingと組み合わせると結構きれいに書ける(ていうかViewについてはほぼコーディングいらない)
Lesson 6: Room database and coroutines
Lesson 7: RecyclerView
- 最適化されたリスト表示のためのライブラリ
- 画面に表れる必要な部分だけデータのレンダリングが走る
- 実装しようと思うと結構複雑だった
Lesson 8: Connecting to the internet
- 外部のAPIを使うためのチュートリアル
- ここで紹介されているretrofitというライブラリを使うのが良さそう
- Android emulatorのDNSの設定やアンチウイルスソフトが原因でネットワークアクセスエラーになる場合もある
- チュートリアル関係ないが、firebaseと接続するアプリ作った時にエラーが起こった
- エラーがわかりにくいので注意
Lesson 9: Repository
- いわゆるrepository層の導入
- 複数データソースとのインタラクションの抽象化(ViewModelに合わせてデータ構築)
- Roomを使ったオフラインキャッシュからの取得とネットワークアクセスによるリフレッシュ
Android アプリ開発の推奨アーキテクチャ
[ディレクトリ構成]
. ├── database # Roomデータベースの作成、データベースのエンティティ・DAOの定義とか。 ├── domain # ドメイン層。アプリが使う形のデータを定義・表現する。 ├── network # 外部サービスとの連携・APIアクセス周り。Retrofit2のオブジェクトを作成する。 ├── repository # DBやネットワークなど複数のデータソースとのやり取りを抽象化する。 ├── ui # activityとかfragmentを置く。Data BindingでViewModelからのデータを表示したりユーザからの入力を伝える。 └── viewmodel # 表示するデータの生成・変換やユーザのデータ入力の処理を行う。UI層との依存関係を持たないようにすべき
このチュートリアルだけで結構きれいに書けるようになるんじゃないかと思います。 加えてアプリ開発にクリーンアーキテクチャを入れてたりするケースも聞きますが、個人的にはネイティブにいらない(このチュートリアルの話)で十分ではないかと思います。
会社のお金で食べる"俺のフレンチ"オードブル
趣味はおいしいご飯を食べることなんですが、今回会社のリモート懇親会で(ありがたいことに)タダで俺のフレンチが食べれて、 今まで食べてきたフードボックス系の商品の中でかなりおいしい方だったので、ブログに残しておきます。
最近は時世的に、懇親会もリモートでやることが多いと思いますが、最近ではこういったフードボックス系サービスのお店の種類も増えてきているのですごい便利になってきてますよね(他のメニューもすごい気になります)。
以下、写真です。見た目は少なめに見えるかもしれませんが、想像以上に量があり十分お腹一杯になれると思います。
ちなみにお酒はこれとは別で注文してもらったモエ・エ・シャンドン モエ アンペリアルというシャンパンです。 シャンパンとか苦手だったんですが、高いやつはやっぱりおいしいですね。
モエ・エ・シャンドン モエ アンペリアル ギフトボックス入り [ スパークリング 辛口 フランス 375ml ]
AIソフトウェアのテスト―答のない答え合わせ [4つの手法] 読書録
はじめに
AIソフトウェアのテスト――答のない答え合わせ [4つの手法]
こちらの書籍の読書録になります。
業務でAIモデルやライブラリ更新を行なったことをきっかけに、AIシステムを安心・安全にデプロイすることの難しさや、テストについて色々と課題感や難しさを感じたので読んでみました。 この書籍の中ではAIソフトウェアに対するいくつかのテスト手法が紹介されています。結構面白い考え方も多く、MLエンジニアとして業務に関わる身であればもっと早く読んでおくべきだったなぁと思いました。
背景
AIソフトウェアの更新は、例えば精度上の問題を解決するための学習済みモデルの交換や、脆弱性対応のためのライブラリのバージョン更新などが考えられると思います。
今回は、脆弱性対応のためにOS・ライブラリの更新を行なっていたのですが、それに伴いAIモデルの予測出力が微妙に変わってしまうという問題が発生していました。 この場合、今回生じた予測の微妙な差異がどんな影響を及ぼす可能性があるのかを把握する必要がありますが、手元にある評価用のデータセットのみでそれを担保するのも厳しいという状況でした。 特に今回の扱っていたモデルの予測結果はシステムに蓄積され、他の場面でも使われるものだったので、影響が不明なままだと本当に本番サービスにデプロイして良いのか?問題が起きないのか?という部分で悩ましい問題になりました。
同じように、本番サービスに導入したいけど本当に大丈夫か担保するのが難しいケースはあるかと思います。 今後モデルの更新を行う際に、迷わず・時間をかけずにやれるよう、AIソフトウェアのテストについて整備しようとなったのがきっかけです。
書籍のまとめ
※備忘録としての概要のまとめであるため、だいぶ簡略化してます。
AIソフトウェアのテストの難しさ
従来型ソフトウェアの開発とAIソフトウェアの開発の違いを、「演繹」と「帰納」という言葉で表している。
- 演繹: 一般的な前提をもとに、より個別的な結論を得る推論
- 帰納: 個別の事例をもとに、一般的な法則を見出そうとする推論
従来型ソフトウェアとの違い
- 従来型:定義した要件を前提として、それを満たす具体的な使用を策定し、その使用を満たすソフトウェアを作成する
- 開発作業が正しく行われれば、要件や仕様を満たすソフトウェアが作られる
- 要件や仕様をもとにテスト問題と模範解答を作成するのがソフトウェアのテスト
- AIソフトウェア:学習用データセットという個別の事例の中から、他のデータにも適用できる一般的な法則を見出す
- えられた法則が常に正しいとは限らない => 正しい前提に基づくテストができない
従来のソフトウェアテストの考え方
例えば入場料の計算をするソフトウェア。以下のような決まった仕様を実現することが求められる。
同値分割などの入出力の関係を示す仕様に基づく方法でテストデータを作成する。
一方でAIソフトウェアは仕様上の同値クラス、境界値を定義することができない。従来と同じようなテストだけでは間違いがないことを担保できない。
機械学習固有の難しさ
- 学習データセットの分布・範囲にない「外挿」
- 少しの差異で推論結果が大きく変わってしまう
- 学習済みモデルは人間が内容を理解することが困難
- 従来と同様に、人間が理解してレビューしたり、不具合発生時に原因特定して修正したりなどができない
これらがこの本で述べられているAIソフトウェアのテストが難しい主な要因になります。他にも冒頭で書いたような難しさもあると思います。
AIソフトウェアのテストアプローチ
それではここまで述べた課題がある中で、どういったテストが行えるか、この書籍で紹介されている手法を書いていきます。
メタモルフィックテスティングの概要
入出力関係に基づく方法とは違う方法でテストデータを作ることを考える。「入力に対する出力の正解」が分からずとも、「入力が変化したときに出力がどう変化するかはわかっている」という場合がある。
例
- 入場料算定システムの場合
- 正確な入場料はわからないとしても、同じ年齢であれば生年月日に限らず入場料は同じである
- 猫の画像判定AIの場合
- どの写真が猫であるかはわからないとしても、猫と判断された写真の明るさを変えても、その写真は猫と判断されるはず
こういった「入力データの変化によって、推論結果がどう変化するか(しないか)」という関係性に基づくテストをメタモルフィックテスティングという(AIソフトウェアのために考案されたわけではないが、AIにも有効であることが知られてきている)。
入力データとメタモルフィック関係が明確に定義されていればテストの準備や自動化が簡単に行える利点もあります(アノテーション作業みたいなこともしなくて良い)。
ただし、メタモルフィックテスティングでは予測結果の正解を見るわけではないので、組み合わせで考慮したほうがよさそうです。
ニューロンカバレッジの概要
この辺りからAI特有の手法になります。学習済みモデルを使ってテストデータを作る方法です。
ニューラルネットワークに対するカバレッジテストのような考え方で、テストデータセットによってニューラルネットワーク中のニューロンがどれだけ活性化したかを計測し、活性化していないニューロンを活性化するようなテストデータを追加していきます。 このように、ニューラルネットワーク内部の挙動についての網羅性を高めるようにテストデータを集めることで、稀な誤りなどを検出することができるようになる、というメリットが得られます。
従来型のテストでもテストデータでソフトウェアのどれだけの範囲を網羅したか(カバレッジ)を測定すると思いますが、その考え方をニューラルネットワークにも持ってきていて面白い手法だなと思いました。
テストデータの用意・加工の仕方の解説やチュートリアルについては、長くなってしまうので本書を参照していただければと思います。
最大安全半径の概要
AIモデルには、「学習用データから離れた入力データに対しては適切な推論ができない」、「どのくらい離れた範囲まで妥当な推論結果を得られるのかも分からない」という課題があります。
そこで、妥当な推論結果が得られる範囲は分からないものの、「少なくともこの範囲であれば妥当な値が得られる」という範囲を求める考え方が、この手法の内容です。 よくロバスト性という言葉が使われますが、こちらの手法もAIモデルのロバスト性を評価する方法の一つです(といっても他の手法と異なり、最大安全半径は保証されたロバスト性を表します)。
最大安全半径を求めることができれば、「最大安全半径が大きいAIソフトウェアほど、入力データが変化しても妥当な出力を得られる良いAIソフトウェアだ」と言えます。このすぐ外側のデータはAdversarial Exampleに相当する入力になります。
ちなみにAIモデルの最大安全半径を計算する手法としては、「CNN-Cert」というものが提案されています。こちらも書籍6章で解説やチュートリアルが載っています。
網羅検証の概要
たとえ正解データが分からない機械学習とはいえ、これだけは必ず守っておきたい条件がある場合がある。
- 入場料算定システム
- いくら何でも入場料が10万円を超えるはずがない
- 猫判別AI
- 何も写っていない写真を猫であると答えるのはやめてほしい
- 自動運転AI
- 道路ではないところを走ろうとするな、時速500kmで走ろうとするな など
まとめ
感想・その他
面白いアプローチで、かつ割と現実的な手法が書かれていたので、実務でも使えそうで勉強になりました。 特に、推論結果の重要性が大きいもの(自動運転等)や何らか非可逆なもの(画像の圧縮など)になる場合、ニューロンカバレッジテストをすることでより安心を得たり、最大安全半径を求めてそれ以内のデータだけ処理をかけたりなどのことも考えられるなと思いました。
業務等で効果的なテストが実践できたら、その辺りも何らかの機会で外部に発信していこうと思います。
データサイエンティストの心構え的な話
スケーラブルデータサイエンス データエンジニアのための実践Google Cloud Platform
上記書籍の備忘録になります(1章部分のみ)。1章では、データサイエンティストや機械学習エンジニア(この本ではそれらを総称してデータエンジニアと呼んでいる)として働いていく上での心構えなど大事なことが書いてあり、 自分自身データエンジニアとして就職し、業務をやり始める際に読んでいて非常に役に立ちました。
当時他のブログで書いていたものですが、今でも大事な考え方の部分ですので、1章部分の要約を移行してきてこのブログに残しておこうと思います。
他の章は具体的な実践をGCPのプロダクトを使いながらやっている例を紹介しているのですが、それらは適宜必要になった際に読めば良いと思います(積読中)。
1章 データに基づくより良い意思決定
データ分析の主目的はより良い決定を下すこと
分析結果に基づいた意思決定が必要なければ分析に時間を費やす必要はない。
当時の感想:
当たり前ですが、考えてみると自分自身学生の頃には特に意味もなくとりあえず主成分分析なり可視化なりをしてしまっていました。 趣味で遊ぶくらいならいいのですが、業務に置き換えると大規模なデータを扱うことも相まり、分析は時間・費用などのコストが大きいタスクになります。
ここで目的もなく分析をしても、出てきた結果は「別に分析しなくても分かってたよね」「やることは変わらないよね」ということになってしまいます。
一人前の機械学習エンジニアとなるために、これからは分析の先の「ビジネス上の価値」といったところまで意識しながら取り組んでいきたいと思いました。 またこういう面でもビジネス理解・ドメイン理解は機械学習エンジニアに求められるスキルだなと感じました。
データエンジニアに必要な素養
- ビジネス理解
- データの安全性
- データが改竄されていないこと、プライバシーの侵害をしないこと
- アクセス制御、ログ収集・管理
- データ・ドメインに対する理解
- サービスの品質
- 信頼性、耐障害性、スケーラビリティ、監視
- 統計学や機械学習への理解
- 機械学習モデルの構築
- データ処理パイプラインの構築スキル
- データベーススキーマの設計
- SQLクエリの作成スキル
などなど。こうやって書いていくとデータエンジニアの役割がかなり広範にわたってしまうように感じるが、統計モデル構築やチャート・レポート作成が最終目標ではなく、ビジネスで成果を出すことができる人が優秀なデータエンジニアとして認められる。その観点で考えると、これら全てにおける素養が必要になる。
データエンジニア、データサイエンティスト、データアナリストなどの職種があるが、求められているのはこれらの3つの役割を全てカバーできる人材で、そのような人を以降で「データエンジニア」とする。
※Googleでは、データエンジニアを「データ分析を実行してビジネスで成果を出す」ことができる人とみなしている。
ここで、実際にこのような複数の領域に精通するエンジニアになるのは現実的でないと思われるが、実際にはかなり現実的なところまで来ているーー近年ではクラウドやフレームワークの発達から、これらの仕事をこなすために必要な知識量が数年前よりずっと少なくなっているため
1章まとめ
- データ分析は意思決定を支援するためのものである
- 経験ベースでなく、データドリブンな意思決定の方が優れている可能性がある
- 意思決定モデルの精度は、適切な統計的手法、もしくは、機械学習によるアプローチの選択に依存する
- データの微妙な違いによって、モデルが全く役に立たなくなることがあるため、データの本質的な理解が大切である
- 意思決定を体系的に支援し、それをサービスとして提供する大きな市場機会がある
- そのようなサービスは、継続的なデータ収集とモデルの更新を必要とする
- 継続的なデータ収集には、強力なセキュリティと監査が必要
- 顧客は、サービス信頼性、正確性、待ち時間についての保証を必要とする
まとめると、これら全てを認識し、カバーする能力が求められる。
2章以降では、実際の課題とソリューションを構築するステップを踏みながら、その過程における「頭の使い方」を学んでいける構成になっています。 読んだら適宜更新していこうと思います。
おまけ
ちなみに、これまで業務で自分自身データエンジニアをやってきましたが、こういったことを心がけながら研究開発の戦略や論文を読んできたため、 AIに関するビジネス成果を発表しあう勉強会等で登壇もして、当時新卒ながら賞を頂いたりすることもできたことがあります。
一応スライドはこちらになります。
www.slideshare.net
やはり技術的にすごいものに飛びつくのも面白いですが、それだけではなくビジネス上の成果を上げれると非常にやりがいを感じることができるなぁと思いました。 この本が良いきっかけとなってくれましたが、これからもこういった心構えを忘れずにAI開発に取り組んでいきたいと思います。