CrystalDiskMark&CrystalDiskInfo開発裏話
〜個人開発の限界突破!世界中のユーザーに愛されるソフトウェアを目指して〜
宮崎 典行
Agenda  自己紹介
 はじめに
 致命的な不具合
 オープンソースの奇跡
 モチベーションを維持・向上するための秘訣
 まとめ
自己紹介
名前:宮崎 典行 / hiyohiyo
趣味:ソフトウェア開発(24年)
受賞:Microsoft MVP for
Developer Technologies
(2014年1月~)
Web:https://crystalmark.info/
Microsoft Global Summit 2019
【代表作】以前開発していたソフトウェア
CrystalMark 2004 総合ベンチマークソフト CrystalCPUID CPU情報ソフト
フリーウェア 修正BSDライセンス
【代表作】現在開発しているソフトウェア
CrystalDiskMark ストレージベンチマークソフト CrystalDiskInfo ストレージ情報ソフト
MITライセンス
2,500万DL
MITライセンス
5,000万DL
個人開発者としての24年
98 99 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22
大学
大学院
修士
埼玉勤務 札幌勤務 東京勤務
CrystalMark
CrystalCPUID
CrystalDiskMark
CrystalDiskInfo
Microsoft MVP
Agenda  自己紹介
 はじめに
 致命的な不具合
 オープンソースの奇跡
 モチベーションを維持・向上するための秘訣
 まとめ
はじめに
世界中のユーザーに愛されるソフトウェアを目指すことで
私の人生は豊かで鮮やか
になりました。
【本セッションの主な内容】
・致命的な不具合が発生したときの乗り越え方
・ユーザーから厳しいご意見をいただいた時の受け止め方
・コミュニティの協力を仰ぎながら技術的な壁を突破する方法
・モチベーションを保ち続けるための秘訣
ソフトウェア開発をはじめた きっかけ
高校時代に、友人がパソコン通信で見つけてきたWindSockを実行した瞬間に
「いつかベンチマークソフトを作る!」と決意しました!
WindSock by Chris Hewitt, Copyright (c) 1992, 1993 Technical Pixies
CrystalMark 2004(総合ベンチマークソフト)
世界一の総合ベンチマークソフトを目指して開発!!
CrystalMark 2004(総合ベンチマークソフト)
日本では広くご利用いただいたものの・・・
グローバル知名度は ほぼ0
CrystalCPUID(CPU情報ソフト)
世界一のCPU情報ソフトを目指して開発!!
差別化要素:独自のクロック周波数制御機能
CrystalCPUID(CPU情報ソフト)
ほんのわずかな期間だけ世界中でご利用いただけたものの・・・
新CPUに対応できず フェードアウト
個人開発者としての24年
98 99 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22
大学
大学院
修士
埼玉勤務 札幌勤務 東京勤務
CrystalMark
CrystalCPUID
CrystalDiskMark
CrystalDiskInfo
Microsoft MVP
開発断念
Agenda  自己紹介
 はじめに
 致命的な不具合
 オープンソースの奇跡
 モチベーションを維持・向上するための秘訣
 まとめ
CrystalDiskMark(ストレージベンチマークソフト)
ストレージに特化すればイケるのでは?
約2ヵ月かけてシンプルなストレージベンチマークソフトを開発
http://www.forest.impress.co.jp/article/2007/04/03/crystaldiskmark.html
翌々営業日に
窓の杜に掲載
バグ・ストーリーは突然に
ある日、掲示板にこんな書き込みが・・・
CrystalDiskMark1.0のDiskBench.cppの372行目で、4KBのランダム
アクセスのための領域の個数を
split = 64 * (DiskTestSize / 1024 / 1024);
で決めていると理解したのですが、ここは64ではなくて256でないと、
多くてもテストファイルの1/4しか使わないのではないでしょうか。
(1MBあたりの4KB領域の個数が入るべきという理解です)
理解が間違っていたらすみません。よろしくお願いいたします。
原文ママ
致命的なバグが発覚!
バグの内容
テストファイルサイズ
アクセス範囲
1/4
4KBランダムリード・ライトテストに
おいて、テストファイルの先頭1/4しか使用しない。
⇒ 実態よりも良い結果となる。
// テストファイルを4KBで分割
正)split = 256 * (DiskTestSize / 1024 / 1024);
誤)split = 64 * (DiskTestSize / 1024 / 1024);
// ループ内でファイルポインタを操作しながらリード/ライトを実行
SetFilePointer(hFile, (rand() % split) * bufSize, NULL, FILE_BEGIN);
人間だもの
もみ消して、
しれっと修正
しちゃえば・・・
当日:修正版リリース
不具合の詳細と改善内容
翌々日:窓の杜で記事化
https://forest.watch.impress.co.jp/article/2008/01/15/crystaldiskmark200.html
致命的な不具合ながらも迅速かつ誠実な対応を評価する声もあり、
ユーザーの優しさを嚙み締めました。しかし・・・
数ヶ月後:致命的な不具合が2件発覚
https://forest.watch.impress.co.jp/article/2008/02/04/crystaldiskmark210.html https://forest.watch.impress.co.jp/article/2008/09/16/crystaldiskmark220.html
こんなベンチマークソフトは見たことがない!
• 〇んでしまえ
• お前のソフトは二度と使わん
• お前にソフトを作る資格はない
ユーザーの反応(原文ママ、一部伏字)
自業自得ではあるが、さすがに凹む・・・
危機管理の原則
包み隠さず公表 迅速に対応
CrystalDiskMark 3.0
NCQ(Native Command Queuing)対応で復活
https://forest.watch.impress.co.jp/docs/news/356338.html
CrystalDiskMark 4.0 秘話
ある日こんなメールを受領(要旨)
やぁ、ひよひよ!
今度、台湾出張があるんだけど
ついでに遊びに行っても良いかい?
インテル(米国本社)のエンジニアが札幌の自宅に!?
Intel SSD 750 1.2TB
検証用機材の提供
 当 時 非 常 に 高 価 だ っ た NVMe SSD
を評価用にご提供いただきました。
技術課題の共有
 CrystalDiskMark 3.0では、
最新NVMeのパフォーマンスを
適切に評価できない。
↓
マルチスレッド対応が必要
↓
しかし、自力での対応は難しそう・・・
CrystalDiskMark 4.0
DiskSpd
https://github.com/Microsoft/diskspd
UI
ベンチマーク機能
CrystalDiskMark 3 CrystalDiskMark 4 以降
全て内製
内製
ベンチマーク部にDiskSpdを採用
Microsoft製ストレージベンチマーク (MITライセンス)
定番ストレージベンチマークソフトの地位を確立
CES2020 COMPUTEX 2018
https://pc.watch.impress.co.jp/docs/news/event/1228117.html https://www.phison.com/en/company/newsroom/event-press-
kits/event/1210-ces-2020
https://www.gdm.or.jp/review/2019/0101/288880/3
新製品発表、PC雑誌、レビュー記事、個人ブログなど
世界中で広く活用いただけるようになりました!
macOS版&Linux版も!
AmorphousDiskMark
by Katsura Shareware
KDiskMark by JonMagon
https://www.katsurashareware.com/ja/amorphousdiskmark/ https://github.com/JonMagon/KDiskMark
Agenda  自己紹介
 はじめに
 致命的な不具合
 オープンソースの奇跡
 モチベーションを維持・向上するための秘訣
 まとめ
CrystalDiskInfo(ストレージ情報ソフト)
データ消失のリスクからユーザーを守りたい!
約5ヵ月かけてシンプルなストレージ情報ソフトを開発
https://static.googleusercontent.com/media/research.google.com/ja//archive/disk_failures.pdf
GoogleがHDDの故障に関する論文を公開
故障の予兆検知、データ消失リスク低減
(バックアップの取得、ストレージ交換など)
世界中にストレージの故障を予測するソフトは
多数存在したが、圧倒的なソフトは存在しない
CrystalDiskInfo の戦略
CrystalDiskMarkとの相乗効果を狙う
世界中の人々に愛される
ストレージベンチマーク&情報ソフトを目指す
某巨大掲示板の評価
https://pc11.5ch.net/test/read.cgi/software/1173061928/
S.M.A.R.T.値を表示するだけ
だとなあ、一工夫ほしいところ
S.M.A.R.T.そのまま表示する
だけであんまし意味ねえ。w
S.M.A.R.T.(Self-Monitoring Analysis and Reporting Technology):
ストレージの健康状態や温度などをレポートする機能
某巨大掲示板のログ
ベータ版の評価はイマイチ
名無しさんのコメントを真に受けて・・・自問自答
S.M.A.R.T.情報を
表示するだけのソフトを
作って誰が喜ぶの?
喜んでくれる人はいない!
本当に必要な機能を実装!
常駐と警報
グラフによる可視化
正式版リリースを約2ヵ月延期
オープンソースの奇跡
>1<
世界中から100万回いただいたリクエスト
USB-HDD対応まだですか?
ユーザーからの要望には応えていきたい・・・
USB/SCSI/ATAについて調査したものの・・・
USB-HDD対応方法
全然わからん!
自身のWebサイトと掲示板にその旨記載
対応パッチ
キタ━━━━(゚∀゚)━━━━!!
ある日、掲示板にUSB-HDD対応パッチが
USB-HDD対応!!
シリアルATA/パラレルATA
USB-ATA
変換チップ
USB パケット or IEEE 1394 パケット
特殊な SCSI コマンド (ベンダー固有)
普通の ATA コマンド
外付けHDD
SCSI/ATA Translation (SAT)
情熱の新規USB-HDD対応作業
https://forest.watch.impress.co.jp/prize/2008/result.html
リリースから約半年後に窓の杜大賞を受賞
窓の杜大賞受賞 (2008年)
名無しさんの一言が
人生を変えた!?
オープンソースの奇跡
>2<
世界中から100万回いただいたリクエスト
NVMe対応まだですか?
新しい規格には迅速に対応していかなければならないが・・・
SSD接続用の新しい規格(Non-Volatile Memory Express)
NVMeについて調査したものの・・・
Windows 8.1のNVMe
ドライバはS.M.A.R.T.
情報取得に非対応!?
TwitterにNVMe対応の課題を投稿
初ツイート
世界の誰かが助けてくれる!(かもしれない)
https://naraeon.net/
https://github.com/ebangin127/nvmetools
Delphi製コードをC++に移植して対応方法を伝授いただきました!
NVMe対応コードを適用
コミュニティの力を借りてNVMe SSD対応
オープンソースの奇跡
>3<
3機種対応
• JMicron JMS583
• ASMedia ASM2362
• Realtek RTL9210
ベンダーからの提供物
• 検証用ボード
• 詳細なデータシート
• パッチ
世界初
ベンダーからUSB-NVMeブリッジチップへの対応依頼を受領
USB-NVMe
変換チップ
NVMe SSD
(M.2)
外付けSSD
NVMe Pass Through
USB パケット
特殊な SCSI コマンド (ベンダー固有)
NVMe コマンド
sptwb.Spt.Cdb[0] = 0xE6; // NVME PASS THROUGH
sptwb.Spt.Cdb[1] = 0x02; // GetLogPage
sptwb.Spt.Cdb[3] = 0x02; // S.M.A.R.T.
sptwb.Spt.Cdb[7] = 0x7F;
length = offsetof(SCSI_PASS_THROUGH_WITH_BUFFERS, DataBuf) + sptwb.Spt.DataTransferLength;
bRet = ::DeviceIoControl(hIoCtrl, IOCTL_SCSI_PASS_THROUGH, &sptwb, length, &sptwb, length,
&dwReturned, NULL);
USB パケット
特殊な SCSI コマンド (ベンダー固有)
NVMe コマンド
NVMe Pass Through (ASMedia専用コマンド)
オープンソースの奇跡
>4<
世界中から100回いただいたリクエスト
DELL製PCのNVMe SSD
が見えないんですけど?
とりあえず実機購入!
動作検証のためだけに購入
約20万円
実機を購入したものの・・・
対応方法がわからん!
CrystalDiskMark 4.0の開発でお世話になった
方に相談してみよう!
Intel RST対応に必要な情報を正式ルートで入手!
Intel Rapid Storage Technology
動作確認後は押入れで保管!
ひたすらお金がかかります!
ユーザー
増
開発
協力
対応HW
増
ユーザー
増
ベンダー
サポート
対応HW
増
圧力
✓ USB-HDD対応
✓ NVMe対応
✓ RAID対応
など
ベンダー:
新製品を出すので
対応お願いします!!
オープンソースが生んだ好循環
Linux版(TUI)も!
CrazyDiskInfo by otakuto
https://github.com/otakuto/crazydiskinfo
Agenda  自己紹介
 はじめに
 致命的な不具合
 オープンソースの奇跡
 モチベーションを維持・向上するための秘訣
 まとめ
ひたすらコミュニティに貢献!
GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE!
GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE!
GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE!
GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE!
GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE!
GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE!
GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE!
GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE!
GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE!
GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! TAKE!
経験則
ユーザーに喜んでもらった分だけ
回り回って幸運が訪れる
ソフトウェア開発を止める理由(想像)
• 職場環境/家庭環境の変化
• ユーザーサポートによる疲弊
⇒ 心無いコメントでメンタル崩壊
• 作りたいものがなくなる
• 他にやりたいことが見つかる
• ウイルス誤判定・・・
モチベーションを維持・向上
するための仕組みが重要
公式応援キャラクター?
自らを励まし続ける仕組み
公式応援キャラクター 水晶雫(すいしょうしずく)
超美麗8K壁紙(20種類以上) 多種多様なグッズ制作&イベント開催
イラストレーター:桐野霞 @kirinokasumu | プロデューサー:橘べるちぇ @bellche
AKIBA PC Hotline!主催
「アキバで見かけた萌えキャラコンテスト」2連覇!
CrystalDiskMark
Shizuku Edition
CrystalDiskInfo
Shizuku Edition
世界一萌えてるストレージソフトウェア
Agenda  自己紹介
 はじめに
 致命的な不具合
 オープンソースの奇跡
 モチベーションを維持・向上するための秘訣
 まとめ
まとめ
世界中のユーザーに愛されるソフトウェアを目指すことで
あなたの人生も豊かで鮮やか
になると思います。
まずは「日本中のユーザー」「身近なユーザー」「お客様」に愛されるソフトウェアを
目指してみませんか?
ますます

CrystalDiskMark & CrystalDiskInfo 開発裏話