About
Hiroki Nakagawa (nhiroki)
Staff Software Engineer @ Google。ウェブブラウザ Chrome (Chromium) 開発者。情報理工学修士。2 児の父親。
このブログで述べられている内容はすべて私の個人的な意見に基づくものであり、所属する組織、団体とは一切関係ありません。
振り返り
- 大学入学から大学院卒業までの話: 「新卒のソフトウェアエンジニアになるまで」
- グーグルに新卒入社してから 6 年間の話: 「就職して 6 年過ぎた」
興味のあること
世の中の色々なシステムの仕組みを知ることに興味があります。
- コンピュータサイエンス
- ウェブブラウザ / 仕事で作っているので。
- システムソフトウェア(オペレーティングシステム、ファイルシステム、プログラミング言語処理系、メモリ管理機構) / 仕組みを知るのが面白い。
- コンピュータアーキテクチャ / ソフトウェアとハードウェアの境界に興味があり。上を知ったら下も知りたい。
- 並列・並行プログラミング / スレッドやプロセスをどのように協調動作させるか考えるのが楽しい。
- よく使うのは C++ と JavaScript。ウェブアプリケーションやちょっとしたツールには Ruby。勉強中なのは Rust。その前に勉強していたのは Haskell と Golang。ご無沙汰なのは Java と PHP。もう読めないのは Perl。エディタは Vim です。
- 物理学 / 特に宇宙物理学に興味があります。
その他のこと
- 二児の父親です(2015 年と 2018 年生まれの男の子)
- 音ゲー(beatmania IIDX)好きです。INFINITAS で SP 皆伝 / DP 十段でした。
- 大学では学園祭実行委員会に所属していました(副委員長・総務局長)
- 中学高校では陸上競技部に所属していました(部長)。専門は短距離(200m, 400m)でした。
仕事
2012.04 – 現在 グーグル合同会社(旧:グーグル株式会社) / スタッフソフトウェアエンジニア
ウェブブラウザ Chrome の開発。Chrome のオープンソースプロジェクト Chromium のコミッター。主に以下のことをしていました。
- Prerender API の設計と実装 (TL / Manager)
- レンダリングエンジンに最適化ヒントを与える基盤の設計と実装 (IC)
- 103 Early Hints の評価メトリクスの設計と実装 (IC)
- Off-the-main-thread リソースローディングの設計と実装 (TL)
- ES Modules for Workers API の設計と実装 (TL)
- Worklets API の設計と実装 (TL)
- Workers / Worklets API のスレッディング基盤の設計と実装 (TL)
- CacheStorage API の実装 (IC)
- ServiceWorker API の設計と実装 (IC)
- chrome.syncFileSystem API の設計と実装 (IC)
- PPAPI 用 FileSystem API の設計と実装 (IC)
- FileSystem API / QuotaManagement API のメンテナンス (IC)
私が加えた変更の一覧はこちら(2017 年 6 月以降)とこちら(2017 年 5 月以前)で見ることができます。また、上記コンポーネントとレンダリングエンジン Blink の Core コンポーネントのコードオーナーシップを持っています。主な使用言語は C++ / JavaScript です。
WHATWG の HTML Standard に投げた PR がマージされて、貢献者リストに名前を載せてもらった!何年もウェブブラウザ開発してて今更感あるけどすごく嬉しい :D https://t.co/6eJ72XcMUg #nhspec pic.twitter.com/JnnwTouPe5
— nhiroki (@nhiroki_) 2018年5月23日
2011.02 – 2012.03 アシアル株式会社 / プログラマー、システムエンジニア(アルバイト)
HTML5 ハイブリッドアプリ開発プラットフォーム Monaca の開発チームで、iOS 用のリモートコンパイル環境の構築、リモートデバッガ・テンプレートエンジン・UI フレームワークの実装などをしました。使用言語は Objective-C です。
- 2012.02.06 xcodebuild コマンドで iOS アプリの自動ビルド
- 2011.11.26 Monaca デバッグログ機能で快適デバッグ
- 2011.11.05 Monaca ネットワークインストール機能で快適実機検証
- 2011.09.17 Monaca リモートフォルダ機能で快適プロジェクト管理
2010.08 – 2010.10 グーグル株式会社 / ソフトウェアエンジニア(インターン)
Chrome OS の文字入力変換ウィンドウの UI 改善。Chromium とか iBus とか Mozc とかを変更しました。主な使用言語は C++ / Python です。
それ以前
ウェブクローラーの開発 (Perl / PHP)、Drupal を使った社内ポータルサイトの構築 (PHP)、OpenLDAP / OpenAM を使ったシングルサインオン環境の構築と SNS への組み込み (PHP)、E-Learning アプリケーションの開発 (Ruby on Rails) などをしていました。その他に二年ほど高校生の家庭教師をしていました。
勉強会などでの発表
インタビュー
- 2018.10.24 Chromium から見る Web の未来(WEB+DB PRESS Vol. 107)
発表
- 2021.08.31 JavaScript 処理系 V8 とレンダリングエンジン Blink のアーキテクチャ(PPL サマースクール 2021)[article, slide]
- 2020.12.04 ウェブの進化とウェブブラウザ開発の最前線(慶應義塾大学 情報工学特別講義)[article, slide]
- 2017.03.21 [論文紹介] The Linux Scheduler: A Decade of Wasted Cores (EuroSys 2016)(システム系輪講会)[slide]
- 2016.02.06 IoT 時代の Web エンジニア(IT 分科会 #2)
- 2015.08.02 Mobile Web and Native App -Past, Present, Future-(IT 分科会 #1)
- 2015.04.22 #17 Service Worker(mozaic.fm)[podcast]
- 2015.04.04 Service Worker Primer(Service Worker ハッカソン)[slide, video]
- 2014.06.27 LevelDB のちょっとした話(天下一 InfluxDB 勉強会)[slide, video]
- 2013.06.11 syncFileSystem API(Web オフライン技術研究会 #01、Web アーキテクチャ技術研究会 #01 by html5jえんぷら部)
- 2013.02.28 Introduction to NativeClient(第 4 回若手 Web エンジニア交流会)
- 2012.07.13 Web ブラウザが支える技術(第 1 回若手 Web エンジニア交流会)
大学
2010.04 – 2012.03 東京大学大学院 情報理工学系研究科創造情報学専攻 (笹田研究室)
- Ruby オブジェクトの効率的なプロセス間転送・共有機構の設計と実装
- Ruby で使われている正規表現エンジン鬼車用の AOT コンパイラの実装
2006.04 – 2010.03 慶應義塾大学 理工学部情報工学科 (寺岡研究室)
- ユーザモビリティを考慮した分散ファイルシステムの設計と実装
- 学園祭実行委員会 (副委員長 / 総務局長)
研究
査読付き論文
- 2012.09 中川 博貴, 笹田 耕一「Ruby オブジェクトの効率的なプロセス間転送・共有機構の設計と実装」(情報処理学会論文誌(PRO)Vol.5, No.4, pp.1-16)
口頭発表
- 2012.03 中川 博貴,笹田 耕一: Ruby オブジェクトの効率的なプロセス間転送・共有機構の設計と実装(情報処理学会 第88回 プログラミング研究発表会)
- 2011.09 中川 博貴,笹田 耕一: Teleporter: Ruby オブジェクトの効率的なプロセス間転送・共有機構(ソフトウェア科学会 第28回大会 講演論文集)
- 2011.04 中川 博貴,笹田 耕一: Rubyの文字列処理の手軽な高速化(情報処理学会 第83回 プログラミング研究発表会)
資格・検定
- 2019 天文宇宙検定準 1 級(受験記)
- 2019 統計検定 2 級(受験記)
- 2017 天文宇宙検定 2 級(受験記)
- 2015 TOEIC 965
- 2010 ネットワークスペシャリスト
- 2010 情報セキュリティスペシャリスト
- 2008 ソフトウェア開発技術者
- 2007 基本情報処理技術者
コンテスト
- ACM/ICPC Asia Regional Contest 2008 in Aizu / Participation
- ACM/ICPC Asia Regional Contest 2007 in Tokyo / The 17th place