Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
ドワンゴCTOとしての仕事
株式会社ドワンゴ
代表取締役会長&CTO 川上量生
1
自己紹介
• ドワンゴ代表取締役会長CTO
• スタジオジブリ見習いプロデューサー
• スタジオカラー取締役
• KADOKAWA・DWANGO代表取締役会長
2
そもそもなぜ自己紹介が必要なの?
象徴CTO制
• ドワンゴ社とドワンゴエンジニア統合の象徴
• 2011年ドワンゴ社内のエンジニアが大量離脱
• 絶対CTO制の崩壊
• 象徴CTO制へ移行
• 初代象徴CTOとして私が就任
3
創立以来の
危機!
エンジニアとしてどうなの?
• 中学生時代 BASIC+Z80。歴史学習ソフト。
• 大学生時代 MS-C。CADの開発。
• 社会人時代 雑誌で連載。勝手社内DB+LAN構築
• 起業後 ネットワーク会社に就職。ARPを知らずに
馬鹿にされる...
象徴CTOとしての初仕事
• 社内の雰囲気が暗かった。

→ 女子マネ弁当
• 会社がわりと地味な場所にあった。

→ 浜町明治座から銀座歌舞伎座へ
• インフラがボトルネックかつプログラマーが触れない

→ プログラマーをインフラエンジニアへ...
6
象徴CTOとしてエンジニアに指示した
最近の仕事の紹介
覚えていますか?2年前のデブサミ。
あるドワンゴエンジニアのプレゼン
今日はニコニコ生放送をScalaで書き直している話
そもそもなぜ書き直さねば
ならなかったのか?
2012年12月
コードの技術的負債
• PHPのコード行数 300万行に対し
• コピー&ペースト数1万ヶ所
• 潜在的不具合数(PMD警告値)が4500ヶ所
• 循環的複雑度600超メソッドがいくつも
存在
• IDEサポートができない文字列のリフレ
クショ...
循環的複雑度600超メソッドは

例えるなら終盤のジェンガ
• 人類の英知を結集しても不具合を
入れずに不具合改修することが困
難なレベル
• 今も解消されていない
• 不具合修正をする数よりもそれに
よって発現する不具合の方が多く
なってしま...
12
昨年、このプレゼン内容を受けて、
ぼくが指示して作らせたレポートの
ご紹介
法律の循環的複雑度の定義

8/25報告
吉村&千野
やったことサマリ
• ソフトウェアの循環的複雑度の調査
– https://atl.dwango.co.jp/confluence/pages/viewpage.action?pageId=49453131
• それをふまえて、法律向けのルール...
商法 第十六条 原文
第十六条  営業を譲渡した商人(以下この章において「譲渡人」と
いう。)は、当事者の別段の意思表示がない限り、同一の市町村(東
京都の特別区の存する区域及び地方自治法 (昭和二十二年法律第六十
七号)第二百五十二条の十九第...
商法第十六条.js
function 営業を譲渡した商人は同一の営業を行ってはならないかどうか(
    当事者の別段の意思表示がない,
    同一の市町村_東京都の特別区の存する区域及び地方自治法_昭和22年法律第67号_第252条の19第...
著作権法 第四十七条の十 原文
第四十七条の十  第三十一条第一項(第一号に係る部分に限る。以下この条において同じ。)
若しくは第三項後段、第三十二条、第三十三条第一項(同条第四項において準用する場合を含
む。)、第三十三条の二第一項若しくは第...
単純な構造化
第四十七条の十 { //1
{ // 1
第三十一条第一項(第一号に係る部分に限る。以下この条において同じ。)or 若しく
は第三項後段、
第三十二条、
第三十三条第一項 or (同条第四項において準用する場合を含む。)、
第三十...
著作権法第四十七条の十.js
function 複製することができる著作物は_譲渡により公衆に提供することができる(著作物) { // cc=1
    var 以下の規定により複製することができる著作物 =
        第三十一条第一項_...
今後どうする案
• 擬似コード方面
– もういくつかの条文を擬似コード化しながら、コード文法確定、複雑度
算出方法ブラッシュアップ
– それにもとづき著作権法全部を擬似コード化
• 人手を投入?
• 字句解析方面
– 形態素解析 「および」「ま...
結論(仮説)
• 年々、法律の複雑度はあがっている
– 複雑度上昇と新法律の数は負の相関がある
– 新法がつくれない
– 複雑すぎて判例に依存してしまいがち
• 複雑度が上がらないように保守すべき
– 法律つくるときは擬似コードを一緒に書くべき...
3年間CTOとして感じたこと
• 現代はスクリプトエンジニアの時代
• コンピュータの動作原理を知らないエンジニア
が増えている。
• 性能の理論的限界を計算できない。計測する。
• 開発手法において宗教依存度が高い。
• 自分の頭で考えるより...
半導体業界の人から聴いた話
• 過去40年間におよぶスケーリングでなにが産み
出されたか
• 3年おきに集積度が4倍。(ムーアの法則)
23
膨大な数の二流の回路設計エンジニア
半導体業界で起こったこと
• 努力しなくても新しい半導体工場で生産すれば勝手に性能
が向上する。
• 優れた回路設計により性能をチューニングするより新しい
工場でさっさと作ったほうがいい。
• 一流の回路設計エンジニアが活躍する機会がない。
•...
ウェブ業界の現状
• サーバーの性能は毎年向上する。
• オープンソースの開発基盤が勝手に性能向上。
• AWSにまかせておけば楽ちん
25
膨大な数の二流のウェブエンジニア?
今後のドワンゴをどうするか
• 自社専用ハードウェア
• 自社専用データセンター
• 自社専用シェアハウス
• 10G専用線。野菜室兼用サーバールーム。
• ボードゲーム大会開催可能な共用リビング
26
技術の理論的限界でサービス設計する会社
最後に
27
帰ってきたら
nicocas(ニコキャス)よろしく!
Upcoming SlideShare
Loading in …5
×

【19-A-1】名誉職としてのCTOのあり方

6,479 views

Published on

【19-A-1】名誉職としてのCTOのあり方

Published in: Technology

【19-A-1】名誉職としてのCTOのあり方

  1. 1. ドワンゴCTOとしての仕事 株式会社ドワンゴ 代表取締役会長&CTO 川上量生 1
  2. 2. 自己紹介 • ドワンゴ代表取締役会長CTO • スタジオジブリ見習いプロデューサー • スタジオカラー取締役 • KADOKAWA・DWANGO代表取締役会長 2 そもそもなぜ自己紹介が必要なの?
  3. 3. 象徴CTO制 • ドワンゴ社とドワンゴエンジニア統合の象徴 • 2011年ドワンゴ社内のエンジニアが大量離脱 • 絶対CTO制の崩壊 • 象徴CTO制へ移行 • 初代象徴CTOとして私が就任 3 創立以来の 危機!
  4. 4. エンジニアとしてどうなの? • 中学生時代 BASIC+Z80。歴史学習ソフト。 • 大学生時代 MS-C。CADの開発。 • 社会人時代 雑誌で連載。勝手社内DB+LAN構築 • 起業後 ネットワーク会社に就職。ARPを知らずに 馬鹿にされる。 • 最後の開発プロダクトの話。 • CTO勉強会を開催。最近の状況を学習中。 4
  5. 5. 象徴CTOとしての初仕事 • 社内の雰囲気が暗かった。
 → 女子マネ弁当 • 会社がわりと地味な場所にあった。
 → 浜町明治座から銀座歌舞伎座へ • インフラがボトルネックかつプログラマーが触れない
 → プログラマーをインフラエンジニアへコンバート • 開発言語がPHPしか使えない
 → なんらかの必然性があれば言語の選択の自由化 • 給料がG社やD社よりも安い
 → ”わりと”上げる。 5
  6. 6. 6 象徴CTOとしてエンジニアに指示した 最近の仕事の紹介 覚えていますか?2年前のデブサミ。 あるドワンゴエンジニアのプレゼン
  7. 7. 今日はニコニコ生放送をScalaで書き直している話
  8. 8. そもそもなぜ書き直さねば ならなかったのか?
  9. 9. 2012年12月
  10. 10. コードの技術的負債 • PHPのコード行数 300万行に対し • コピー&ペースト数1万ヶ所 • 潜在的不具合数(PMD警告値)が4500ヶ所 • 循環的複雑度600超メソッドがいくつも 存在 • IDEサポートができない文字列のリフレ クションの多い、grep不能なPHPのコー ド
  11. 11. 循環的複雑度600超メソッドは
 例えるなら終盤のジェンガ • 人類の英知を結集しても不具合を 入れずに不具合改修することが困 難なレベル • 今も解消されていない • 不具合修正をする数よりもそれに よって発現する不具合の方が多く なってしまうという、まさに負債 循環的複 雑度 複雑さの状態 バグ混入確率 10以下 非常に良い構造 25% 30以下 構造的なリスク あり 40% 50以下 テスト不可能 75% 75以上 いかなる変更も 誤修正を生む 98%
  12. 12. 12 昨年、このプレゼン内容を受けて、 ぼくが指示して作らせたレポートの ご紹介
  13. 13. 法律の循環的複雑度の定義
 8/25報告 吉村&千野
  14. 14. やったことサマリ • ソフトウェアの循環的複雑度の調査 – https://atl.dwango.co.jp/confluence/pages/viewpage.action?pageId=49453131 • それをふまえて、法律向けのルールを仮で定義 – 定義 +0 – 判断(場合によって考慮が分岐するもの) +1 – 定義の中に判断 +1 – 判断の中での別な法律への参照 +2 – または(もしくは) +1 – かつ +1 – を除く +1 • 著作権法四十七条の十、商法十六条を分析 – 手続き型的発想で構造化  – 関数としてプログラミング • // JavaScriptベースのプログラミングで定義する • // ||(和) や &&(積) や -(差) は集合演算を行い定義された全状態をすべて返してくれる便利な演算子であるとする • 関数として書き直したものをチェックして複雑度出すツール作った • 今後の展開をブレスト
  15. 15. 商法 第十六条 原文 第十六条  営業を譲渡した商人(以下この章において「譲渡人」と いう。)は、当事者の別段の意思表示がない限り、同一の市町村(東 京都の特別区の存する区域及び地方自治法 (昭和二十二年法律第六十 七号)第二百五十二条の十九第一項 の指定都市にあっては、区。以下 同じ。)の区域内及びこれに隣接する市町村の区域内においては、そ の営業を譲渡した日から二十年間は、同一の営業を行ってはならない。 2. 譲渡人が同一の営業を行わない旨の特約をした場合には、その特 約は、その営業を譲渡した日から三十年の期間内に限り、その効 力を有する。 3. 前二項の規定にかかわらず、譲渡人は、不正の競争の目的をもっ て同一の営業を行ってはならない。 読みにくい!!!
  16. 16. 商法第十六条.js function 営業を譲渡した商人は同一の営業を行ってはならないかどうか(     当事者の別段の意思表示がない,     同一の市町村_東京都の特別区の存する区域及び地方自治法_昭和22年法律第67号_第252条の19第1項の指定都市にあっては_区_以下同じ__の区域内及びこれに隣接する市 町村の区域内,     その営業を譲渡した日から20年間,     不正の競争の目的もっている) { // 1         return 当事者の別段の意思表示がない         && 同一の市町村_東京都の特別区の存する区域及び地方自治法_昭和22年法律第67号_第252条の19第1項の指定都市にあっては_区_以下同じ__の区域内及びこれに隣接 する市町村の区域内 // 3         && その営業を譲渡した日から20年間 // 4         && !譲渡人は_同一の営業を行ってはならない場合(不正の競争の目的もっている); // 6 } function 特約がその効力を有するかどうか(     同一の営業を行わない旨の特約をした場合,     その営業を譲渡した日から30年の期間内に限り,     不正の競争の目的もっている) { // 1         return 同一の営業を行わない旨の特約をした場合         && その営業を譲渡した日から30年の期間内に限り // 2         && !譲渡人は_同一の営業を行ってはならない場合(不正の競争の目的もっている); // 4 } function 譲渡人は_同一の営業を行ってはならない場合(不正の競争の目的もっている){ // 1     return !不正の競争の目的もっている; } 読みやすい?のか? 複雑度 合計 11
  17. 17. 著作権法 第四十七条の十 原文 第四十七条の十  第三十一条第一項(第一号に係る部分に限る。以下この条において同じ。) 若しくは第三項後段、第三十二条、第三十三条第一項(同条第四項において準用する場合を含 む。)、第三十三条の二第一項若しくは第四項、第三十四条第一項、第三十五条第一項、第三十 六条第一項、第三十七条、第三十七条の二(第二号を除く。以下この条において同じ。)、第三 十九条第一項、第四十条第一項若しくは第二項、第四十一条から第四十二条の二まで、第四十二 条の三第二項又は第四十六条から第四十七条の二までの規定により複製することができる著作物 は、これらの規定の適用を受けて作成された複製物(第三十一条第一項若しくは第三項後段、第 三十五条第一項、第三十六条第一項又は第四十二条の規定に係る場合にあつては、映画の著作物 の複製物(映画の著作物において複製されている著作物にあつては、当該映画の著作物の複製物 を含む。以下この条において同じ。)を除く。)の譲渡により公衆に提供することができる。た だし、第三十一条第一項若しくは第三項後段、第三十三条の二第一項若しくは第四項、第三十五 条第一項、第三十七条第三項、第三十七条の二、第四十一条から第四十二条の二まで、第四十二 条の三第二項又は第四十七条の二の規定の適用を受けて作成された著作物の複製物(第三十一条 第一項若しくは第三項後段、第三十五条第一項又は第四十二条の規定に係る場合にあつては、映 画の著作物の複製物を除く。)を、第三十一条第一項若しくは第三項後段、第三十三条の二第一 項若しくは第四項、第三十五条第一項、第三十七条第三項、第三十七条の二、第四十一条から第 四十二条の二まで、第四十二条の三第二項又は第四十七条の二に定める目的以外の目的のために 公衆に譲渡する場合は、この限りでない。 フクザツ!!!!!!!!
  18. 18. 単純な構造化 第四十七条の十 { //1 { // 1 第三十一条第一項(第一号に係る部分に限る。以下この条において同じ。)or 若しく は第三項後段、 第三十二条、 第三十三条第一項 or (同条第四項において準用する場合を含む。)、 第三十三条の二第一項 or 若しくは第四項、 第三十四条第一項、 第三十五条第一項、 第三十六条第一項、 第三十七条、 第三十七条の二 (第二号を除く。以下この条において同じ。)、 第三十九条第一項、 第四十条第一項 or 若しくは第二項、 第四十一条から第四十二条の二まで、 // あわせて3条 第四十二条の三第二項 又は第四十六条から第四十七条の二まで // あわせて3条 // 22 × 2 } の規定により複製することができる著作物は、 これらの規定の適用を受けて作成された複製物( { // 1 { // 1 第三十一条第一項 or 若しくは第三項後段、 第三十五条第一項、 第三十六条第一項 又は第四十二条 // 5 x 2 } の規定に係る場合にあつては、映画の著作物の複製物 { // 1 (映画の著作物において複製されている著作物にあつては、当該映画の 著作物の複製物を含む。以下この条において同じ。) } を除く。 } )の譲渡により公衆に提供することができる。 ただし、 { // 1 { // 1 第三十一条第一項 or 若しくは第三項後段、 第三十三条の二第一項 or 若しくは第四項、 第三十五条第一項、 第三十七条第三項、 第三十七条の二、 第四十一条から第四十二条の二まで、 // あわせて3条 第四十二条の三第二項 又は第四十七条の二 // 12 x 2 } の規定の適用を受けて作成された著作物の複製物( { // 1 第三十一条第一項 or 若しくは第三項後段、 第三十五条第一項 又は第四十二条 // 4 x 2 } の規定に係る場合にあつては、映画の著作物の複製物を除く。) を、 { // 1 第三十一条第一項 or 若しくは第三項後段、 第三十三条の二第一項 or 若しくは第四項、 第三十五条第一項、 第三十七条第三項、 第三十七条の二、 第四十一条から第四十二条の二まで、 // あわせて3条 第四十二条の三第二項 又は第四十七条の二 // 12 x 2 } に定める目的以外の目的のために公衆に譲渡する } 場合は、この限りでない。 } 複雑度 合計 118
  19. 19. 著作権法第四十七条の十.js function 複製することができる著作物は_譲渡により公衆に提供することができる(著作物) { // cc=1     var 以下の規定により複製することができる著作物 =         第三十一条第一項_第一号に係る部分に限る_以下この条において同じ__ () ||         第三項後段() ||         第三十二条() ||         第三十三条第一項_同条第四項において準用する場合を含む__() ||         第三十三条の二第一項() ||         第三十三条の二第四項() ||         第三十四条第一項() ||         第三十五条第一項() ||         第三十六条第一項() ||         第三十七条() ||         第三十七条の二_第二号を除く_以下この条において同じ__ || // 除くという言葉が入ってるので余分に1         第三十九条第一項 ||         第四十条第一項() ||         第四十条第二項() ||         第四十一条() ||         第四十二条の一() ||         第四十二条の二() ||         第四十二条の三第二項() ||         第四十六条() ||         第四十七条の一() ||         第四十七条の二()     ; // cc=39     var これらの規定の適用を受けて作成された複製物 =         第三十一条第一項() ||         第三十一条第三項後段() ||         第三十五条第一項() ||         第三十六条第一項() ||         第四十二条()     ; // cc=48     var 複製することができる著作物 = 以下の規定により複製することができる著作物                          - これらの規定の適用を受けて作成された複製物; // cc=49    var 以下の規程を受けて作成された著作物の複製物である場合 =         第三十一条第一項() ||         第三十一条第三項後段() ||         第三十三条の二第一項() ||         第三十三条の二第四項() ||         第三十五条第一項() ||         第三十七条第三項() ||         第三十七条の二() ||         第四十一条() ||         第四十二条の一() ||         第四十二条の二() ||         第四十二条の三第二項() ||         第四十七条の二()     ; // cc=72     var 以下が適用される場合には映画の著作物の複製物 =         第三十一条第一項() ||         第三十一条第三項後段() ||         第三十五条第一項() ||         第四十二条()    ; // cc=79     var 以下で定める目的以外の目的のために公衆に譲渡する場合 =         第三十一条第一項() ||         第三十一条第三項後段() ||         第三十三条の二第一項() ||         第三十三条の二第四項() ||         第三十五条第一項() ||         第三十七条第三項() ||         第三十七条の二() ||         第四十一条() ||         第四十二条の一() ||         第四十二条の二() ||         第四十二条の三第二項() ||         第四十七条の二()     ; // cc=100     var この限りではない著作物 = (以下の規程を受けて作成された著作物の複製物である場合                       - 以下が適用される場合には映画の著作物の複製物) // cc=101                                 && 以下で定める目的以外の目的のために公衆に譲渡する場合; // cc=102     return 複製することができる著作物.contains(著作物) && !この限りではない著作物.contains(著作物); // cc=103 } 複雑度 合計 103
  20. 20. 今後どうする案 • 擬似コード方面 – もういくつかの条文を擬似コード化しながら、コード文法確定、複雑度 算出方法ブラッシュアップ – それにもとづき著作権法全部を擬似コード化 • 人手を投入? • 字句解析方面 – 形態素解析 「および」「また」「限る」などを単純カウントしてみる – 機械学習もトライ – 人手がいらない • 両面で比較してみる • 過去の修正履歴ごとに複雑度計測して上昇グラフをみる • 弁護士/学者のレビュー
  21. 21. 結論(仮説) • 年々、法律の複雑度はあがっている – 複雑度上昇と新法律の数は負の相関がある – 新法がつくれない – 複雑すぎて判例に依存してしまいがち • 複雑度が上がらないように保守すべき – 法律つくるときは擬似コードを一緒に書くべき
 or – 毎度測定して確認
  22. 22. 3年間CTOとして感じたこと • 現代はスクリプトエンジニアの時代 • コンピュータの動作原理を知らないエンジニア が増えている。 • 性能の理論的限界を計算できない。計測する。 • 開発手法において宗教依存度が高い。 • 自分の頭で考えるより、結果をググって覚えるだ けの文化がエンジニアの世界まで来ている。 22
  23. 23. 半導体業界の人から聴いた話 • 過去40年間におよぶスケーリングでなにが産み 出されたか • 3年おきに集積度が4倍。(ムーアの法則) 23 膨大な数の二流の回路設計エンジニア
  24. 24. 半導体業界で起こったこと • 努力しなくても新しい半導体工場で生産すれば勝手に性能 が向上する。 • 優れた回路設計により性能をチューニングするより新しい 工場でさっさと作ったほうがいい。 • 一流の回路設計エンジニアが活躍する機会がない。 • ムーアの法則が限界に近づき半導体の性能向上がなくなっ てきた現在は二流の回路設計エンジニアが食えなくなって きた。 24 これってどっかの業界の未来じゃね?
  25. 25. ウェブ業界の現状 • サーバーの性能は毎年向上する。 • オープンソースの開発基盤が勝手に性能向上。 • AWSにまかせておけば楽ちん 25 膨大な数の二流のウェブエンジニア?
  26. 26. 今後のドワンゴをどうするか • 自社専用ハードウェア • 自社専用データセンター • 自社専用シェアハウス • 10G専用線。野菜室兼用サーバールーム。 • ボードゲーム大会開催可能な共用リビング 26 技術の理論的限界でサービス設計する会社
  27. 27. 最後に 27 帰ってきたら nicocas(ニコキャス)よろしく!

×