Enviar búsqueda
Cargar
本番環境で使える実行コード記録機能
•
0 recomendaciones
•
769 vistas
M
mametter
Seguir
Cookpad TechConf 2019 LT
Leer menos
Leer más
Tecnología
Denunciar
Compartir
Denunciar
Compartir
1 de 21
Descargar ahora
Descargar para leer sin conexión
Recomendados
マニアックなRuby 2.7新機能紹介
マニアックなRuby 2.7新機能紹介
mametter
型プロファイラ:抽象解釈に基づくRuby 3の静的解析
型プロファイラ:抽象解釈に基づくRuby 3の静的解析
mametter
Ruby 3.0.0 コネタ集
Ruby 3.0.0 コネタ集
Kazuhiro Nishiyama
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
m2ym
Integral - New O/R Mapper for Common Lisp
Integral - New O/R Mapper for Common Lisp
fukamachi
Shelly
Shelly
fukamachi
C#/.NETがやっていること 第二版
C#/.NETがやっていること 第二版
信之 岩永
Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作
terurou
Recomendados
マニアックなRuby 2.7新機能紹介
マニアックなRuby 2.7新機能紹介
mametter
型プロファイラ:抽象解釈に基づくRuby 3の静的解析
型プロファイラ:抽象解釈に基づくRuby 3の静的解析
mametter
Ruby 3.0.0 コネタ集
Ruby 3.0.0 コネタ集
Kazuhiro Nishiyama
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
m2ym
Integral - New O/R Mapper for Common Lisp
Integral - New O/R Mapper for Common Lisp
fukamachi
Shelly
Shelly
fukamachi
C#/.NETがやっていること 第二版
C#/.NETがやっていること 第二版
信之 岩永
Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作
terurou
20131208 agile samuraibasecamp
20131208 agile samuraibasecamp
Hiroshi SHIBATA
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
Taketo Sano
objc2swift (続・自動変換の野望)
objc2swift (続・自動変換の野望)
Taketo Sano
objc2swift (自動変換の野望)
objc2swift (自動変換の野望)
Taketo Sano
minneで学ぶクラウド脳
minneで学ぶクラウド脳
Uchio Kondo
Laravelから学びレガシーと闘いはじめた
Laravelから学びレガシーと闘いはじめた
Yuta Ohashi
プログラミングNet framework3のお題
プログラミングNet framework3のお題
Kazushi Kamegawa
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミング
TanUkkii
ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3
Masahiro Wakame
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
Hiroshi SHIBATA
GraphQL入門
GraphQL入門
Kent Ohashi
C#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること
信之 岩永
PerlMotion
PerlMotion
Kazutake Hiramatsu
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
hecomi
コンパイラ指向ReVIEW
コンパイラ指向ReVIEW
Masahiro Wakame
Ruby でつくる型付き Ruby
Ruby でつくる型付き Ruby
mametter
ECMAScript没proposal追悼式
ECMAScript没proposal追悼式
京大 マイコンクラブ
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
Koichi Sakata
Why Kotlin?
Why Kotlin?
Dev Ogiwara
Introduction to GraalVM and Native Image
Introduction to GraalVM and Native Image
Koichi Sakata
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
Ryosuke MATSUMOTO
The Essence of Using Ruby on Rails in Corporations
The Essence of Using Ruby on Rails in Corporations
Koichiro Ohba
Más contenido relacionado
La actualidad más candente
20131208 agile samuraibasecamp
20131208 agile samuraibasecamp
Hiroshi SHIBATA
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
Taketo Sano
objc2swift (続・自動変換の野望)
objc2swift (続・自動変換の野望)
Taketo Sano
objc2swift (自動変換の野望)
objc2swift (自動変換の野望)
Taketo Sano
minneで学ぶクラウド脳
minneで学ぶクラウド脳
Uchio Kondo
Laravelから学びレガシーと闘いはじめた
Laravelから学びレガシーと闘いはじめた
Yuta Ohashi
プログラミングNet framework3のお題
プログラミングNet framework3のお題
Kazushi Kamegawa
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミング
TanUkkii
ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3
Masahiro Wakame
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
Hiroshi SHIBATA
GraphQL入門
GraphQL入門
Kent Ohashi
C#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること
信之 岩永
PerlMotion
PerlMotion
Kazutake Hiramatsu
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
hecomi
コンパイラ指向ReVIEW
コンパイラ指向ReVIEW
Masahiro Wakame
Ruby でつくる型付き Ruby
Ruby でつくる型付き Ruby
mametter
ECMAScript没proposal追悼式
ECMAScript没proposal追悼式
京大 マイコンクラブ
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
Koichi Sakata
Why Kotlin?
Why Kotlin?
Dev Ogiwara
Introduction to GraalVM and Native Image
Introduction to GraalVM and Native Image
Koichi Sakata
La actualidad más candente
(20)
20131208 agile samuraibasecamp
20131208 agile samuraibasecamp
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
objc2swift 〜 Objective-C から Swift への「コード&パラダイム」シフト
objc2swift (続・自動変換の野望)
objc2swift (続・自動変換の野望)
objc2swift (自動変換の野望)
objc2swift (自動変換の野望)
minneで学ぶクラウド脳
minneで学ぶクラウド脳
Laravelから学びレガシーと闘いはじめた
Laravelから学びレガシーと闘いはじめた
プログラミングNet framework3のお題
プログラミングNet framework3のお題
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミング
ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
GraphQL入門
GraphQL入門
C#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること
PerlMotion
PerlMotion
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
コンパイラ指向ReVIEW
コンパイラ指向ReVIEW
Ruby でつくる型付き Ruby
Ruby でつくる型付き Ruby
ECMAScript没proposal追悼式
ECMAScript没proposal追悼式
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
Why Kotlin?
Why Kotlin?
Introduction to GraalVM and Native Image
Introduction to GraalVM and Native Image
Similar a 本番環境で使える実行コード記録機能
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
Ryosuke MATSUMOTO
The Essence of Using Ruby on Rails in Corporations
The Essence of Using Ruby on Rails in Corporations
Koichiro Ohba
Java in the World of Container by David Buck
Java in the World of Container by David Buck
オラクルエンジニア通信
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
Developers Summit
OSC 2013 .Enterprise
OSC 2013 .Enterprise
Katsuya Hidaka
Percona ServerをMySQL 5.6と5.7用に作るエンジニアリング(そしてMongoDBのヒント)
Percona ServerをMySQL 5.6と5.7用に作るエンジニアリング(そしてMongoDBのヒント)
Colin Charles
AKS+KEDAで実現!Container Functions Pipeline
AKS+KEDAで実現!Container Functions Pipeline
Tsukasa Kato
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
Koto Shigeru
fluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギング
Yuichi Tateno
Docker事始めと最新動向 2015年6月
Docker事始めと最新動向 2015年6月
Emma Haruka Iwao
20150228_渋谷Webエンジニア朝会LT資料
20150228_渋谷Webエンジニア朝会LT資料
慎平 仁藤
Perl Ocean
Perl Ocean
Kazuki KOMORI
新しいOpenShiftのしくみを調べてみた
新しいOpenShiftのしくみを調べてみた
Kazuto Kusama
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらインターネット株式会社
Qt5 の新機能 2012/12/15
Qt5 の新機能 2012/12/15
Takumi Asaki
クラウドデザイン パターンに見るクラウドファーストなアプリケーション設計 Data Management編
クラウドデザイン パターンに見るクラウドファーストなアプリケーション設計 Data Management編
Takekazu Omi
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発
Koichi Shimozono
地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ
地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ
Kazumi IWANAGA
Dockerだけではないコンテナのはなし
Dockerだけではないコンテナのはなし
Katsunori Kanda
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
R S
Similar a 本番環境で使える実行コード記録機能
(20)
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
The Essence of Using Ruby on Rails in Corporations
The Essence of Using Ruby on Rails in Corporations
Java in the World of Container by David Buck
Java in the World of Container by David Buck
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
OSC 2013 .Enterprise
OSC 2013 .Enterprise
Percona ServerをMySQL 5.6と5.7用に作るエンジニアリング(そしてMongoDBのヒント)
Percona ServerをMySQL 5.6と5.7用に作るエンジニアリング(そしてMongoDBのヒント)
AKS+KEDAで実現!Container Functions Pipeline
AKS+KEDAで実現!Container Functions Pipeline
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
fluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギング
Docker事始めと最新動向 2015年6月
Docker事始めと最新動向 2015年6月
20150228_渋谷Webエンジニア朝会LT資料
20150228_渋谷Webエンジニア朝会LT資料
Perl Ocean
Perl Ocean
新しいOpenShiftのしくみを調べてみた
新しいOpenShiftのしくみを調べてみた
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
Qt5 の新機能 2012/12/15
Qt5 の新機能 2012/12/15
クラウドデザイン パターンに見るクラウドファーストなアプリケーション設計 Data Management編
クラウドデザイン パターンに見るクラウドファーストなアプリケーション設計 Data Management編
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発
地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ
地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ
Dockerだけではないコンテナのはなし
Dockerだけではないコンテナのはなし
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
Más de mametter
error_highlight: User-friendly Error Diagnostics
error_highlight: User-friendly Error Diagnostics
mametter
TRICK 2022 Results
TRICK 2022 Results
mametter
クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料
クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料
mametter
Enjoy Ruby Programming in IDE and TypeProf
Enjoy Ruby Programming in IDE and TypeProf
mametter
TypeProf for IDE: Enrich Development Experience without Annotations
TypeProf for IDE: Enrich Development Experience without Annotations
mametter
Ruby 3の型解析に向けた計画
Ruby 3の型解析に向けた計画
mametter
emruby: ブラウザで動くRuby
emruby: ブラウザで動くRuby
mametter
Type Profiler: Ambitious Type Inference for Ruby 3
Type Profiler: Ambitious Type Inference for Ruby 3
mametter
Ruby 3の型推論やってます
Ruby 3の型推論やってます
mametter
A Static Type Analyzer of Untyped Ruby Code for Ruby 3
A Static Type Analyzer of Untyped Ruby Code for Ruby 3
mametter
A Plan towards Ruby 3 Types
A Plan towards Ruby 3 Types
mametter
Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画
mametter
A Type-level Ruby Interpreter for Testing and Understanding
A Type-level Ruby Interpreter for Testing and Understanding
mametter
Transcendental Programming in Ruby
Transcendental Programming in Ruby
mametter
Cookpad Hackarade #04: Create Your Own Interpreter
Cookpad Hackarade #04: Create Your Own Interpreter
mametter
Ruby 3のキーワード引数について考える
Ruby 3のキーワード引数について考える
mametter
TRICK 2018 results
TRICK 2018 results
mametter
Type Profiler: An Analysis to guess type signatures
Type Profiler: An Analysis to guess type signatures
mametter
Esoteric, Obfuscated, Artistic Programming in Ruby
Esoteric, Obfuscated, Artistic Programming in Ruby
mametter
Cookpad Spring 1day internship 2018 超絶技巧プログラミングコース資料
Cookpad Spring 1day internship 2018 超絶技巧プログラミングコース資料
mametter
Más de mametter
(20)
error_highlight: User-friendly Error Diagnostics
error_highlight: User-friendly Error Diagnostics
TRICK 2022 Results
TRICK 2022 Results
クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料
クックパッド春の超絶技巧パンまつり 超絶技巧プログラミング編 資料
Enjoy Ruby Programming in IDE and TypeProf
Enjoy Ruby Programming in IDE and TypeProf
TypeProf for IDE: Enrich Development Experience without Annotations
TypeProf for IDE: Enrich Development Experience without Annotations
Ruby 3の型解析に向けた計画
Ruby 3の型解析に向けた計画
emruby: ブラウザで動くRuby
emruby: ブラウザで動くRuby
Type Profiler: Ambitious Type Inference for Ruby 3
Type Profiler: Ambitious Type Inference for Ruby 3
Ruby 3の型推論やってます
Ruby 3の型推論やってます
A Static Type Analyzer of Untyped Ruby Code for Ruby 3
A Static Type Analyzer of Untyped Ruby Code for Ruby 3
A Plan towards Ruby 3 Types
A Plan towards Ruby 3 Types
Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画
A Type-level Ruby Interpreter for Testing and Understanding
A Type-level Ruby Interpreter for Testing and Understanding
Transcendental Programming in Ruby
Transcendental Programming in Ruby
Cookpad Hackarade #04: Create Your Own Interpreter
Cookpad Hackarade #04: Create Your Own Interpreter
Ruby 3のキーワード引数について考える
Ruby 3のキーワード引数について考える
TRICK 2018 results
TRICK 2018 results
Type Profiler: An Analysis to guess type signatures
Type Profiler: An Analysis to guess type signatures
Esoteric, Obfuscated, Artistic Programming in Ruby
Esoteric, Obfuscated, Artistic Programming in Ruby
Cookpad Spring 1day internship 2018 超絶技巧プログラミングコース資料
Cookpad Spring 1day internship 2018 超絶技巧プログラミングコース資料
本番環境で使える実行コード記録機能
1.
【Ruby 2.6新機能紹介】 本番環境で使える 実行コード記録機能 遠藤侑介 Cookpad TechConf
2019 LT
2.
遠藤侑介 (@mametter) • Rubyコミッタ •
プログラミング言語Ruby開発メンバ • テストを中心にいろいろやってます • フルタイムRubyコミッタ • Ruby開発がクックパッドでの業務 w/ 笹田耕一 • Ruby3の静的解析が主ミッション
3.
Ruby 2.6 リリース •
終端なしRange • unicode 定数名 • cause 表示 • refinement拡張 • ブロック to_h • Enum#chain • #Arithmetic Sequence • Kernel#then • Proc 合成 • exception 引数 • Array#union と #difference • Array#filter • Binding# source_locatoin • Dir#each_child • Exception#full_ message拡張 • Hash#merge拡張 • Random.bytes • ブロック String#split • Unicode 11.0.0 • RubyVM::AST • RubyVM.resolve_ feature_path • TracePoint拡張 • Bundler 同梱 • oneshot coverage • FileUtils#cp_lr • Matrixの破壊的更新 •rescue なし else •フリップフロップ •File.read("|...") •String#crypt •Object#=~ •Procレベルの$SAFE •MJIT •Proc高速化 •VM生成系の一新 •スレッドキャッシュ •タイマースレッド削除 •Fiber の実装向上 •Transient Heap 新機能 廃止・非推奨 性能改善
4.
• 終端なしRange • unicode
定数名 • cause 表示 • refinement拡張 • ブロック to_h • Enum#chain • #Arithmetic Sequence • Kernel#then • Proc 合成 • exception 引数 • Array#union と #difference • Array#filter • Binding# source_locatoin • Dir#each_child • Exception#full_ message拡張 • Hash#merge拡張 • Random.bytes • ブロック String#split • Unicode 11.0.0 • RubyVM::AST • RubyVM.resolve_ feature_path • TracePoint拡張 • Bundler 同梱 • oneshot coverage • FileUtils#cp_lr • Matrixの破壊的更新 •rescue なし else •フリップフロップ •File.read("|...") •String#crypt •Object#=~ •Procレベルの$SAFE •MJIT •Proc高速化 •VM生成系の一新 •スレッドキャッシュ •タイマースレッド削除 •Fiber の実装向上 •Transient Heap 新機能 廃止・非推奨 性能改善 Ruby 2.6 リリース クックパッドのフルタイムコミッタが主導、または深く関わった機能
5.
• 終端なしRange • unicode
定数名 • cause 表示 • refinement拡張 • ブロック to_h • Enum#chain • #Arithmetic Sequence • Kernel#then • Proc 合成 • exception 引数 • Array#union と #difference • Array#filter • Binding# source_locatoin • Dir#each_child • Exception#full_ message拡張 • Hash#merge拡張 • Random.bytes • ブロック String#split • Unicode 11.0.0 • Ruby::AST • RubyVM.resolve_ feature_path • TracePoint拡張 • Bundler 同梱 • oneshot coverage • FileUtils#cp_lr • Matrixの破壊的更新 •rescue なし else •フリップフロップ •File.read("|...") •String#crypt •Object#=~ •Procレベルの$SAFE •MJIT •Proc高速化 •VM生成系の一新 •スレッドキャッシュ •タイマースレッド削除 •Fiber の実装向上 •Transient Heap 新機能 廃止・非推奨 性能改善 詳しくは『クックパッド開発者ブログ – プロと読み解く Ruby 2.6 NEWS ファイル』 Ruby 2.6 リリース クックパッドのフルタイムコミッタが主導、または深く関わった機能
6.
• 終端なしRange • unicode
定数名 • cause 表示 • refinement拡張 • ブロック to_h • Enum#chain • #Arithmetic Sequence • Kernel#then • Proc 合成 • exception 引数 • Array#union と #difference • Array#filter • Binding# source_locatoin • Dir#each_child • Exception#full_ message拡張 • Hash#merge拡張 • Random.bytes • ブロック String#split • Unicode 11.0.0 • Ruby::AST • RubyVM.resolve_ feature_path • TracePoint拡張 • Bundler 同梱 • oneshot coverage • FileUtils#cp_lr • Matrixの破壊的更新 •rescue なし else •フリップフロップ •File.read("|...") •String#crypt •Object#=~ •Procレベルの$SAFE •MJIT •Proc高速化 •VM生成系の一新 •スレッドキャッシュ •タイマースレッド削除 •Fiber の実装向上 •Transient Heap 新機能 廃止・非推奨 性能改善 今日のテーマ 詳しくは『クックパッド開発者ブログ – プロと読み解く Ruby 2.6 NEWS ファイル』 Ruby 2.6 リリース クックパッドのフルタイムコミッタが主導、または深く関わった機能
7.
背景:お台場プロジェクト • クックパッドの中核サービスの アーキテクチャ改善プロジェクト • APIサーバーのアーキテクチャ改善 •
不要なサービスの廃止 • デッドコードの自動検出と削除 • ストレージ数の削減 • 特殊な実行環境・開発環境の廃止
8.
背景:お台場プロジェクト • クックパッドの中核サービスの アーキテクチャ改善プロジェクト • APIサーバーのアーキテクチャ改善 •
不要なサービスの廃止 • デッドコードの自動検出と削除 • ストレージ数の削減 • 特殊な実行環境・開発環境の廃止 詳しくは『クックパッド開発者ブログ – クックパッド基幹システムのmicroservices化戦略 〜お台場プロジェクト1年半の軌跡〜』
9.
背景:お台場プロジェクト • クックパッドの中核サービスの アーキテクチャ改善プロジェクト • APIサーバーのアーキテクチャ改善 •
不要なサービスの廃止 • デッドコードの自動検出と削除 • ストレージ数の削減 • 特殊な実行環境・開発環境の廃止 詳しくは『クックパッド開発者ブログ – クックパッド基幹システムのmicroservices化戦略 〜お台場プロジェクト1年半の軌跡〜』
10.
デッドコードの削除 • 実行されないコードを見つける • 動的言語のRubyでは意外に大変 •
クックパッドでは、rubyインタプリタに パッチを当てて実行を記録してた(!)
11.
デッドコードの削除 • 実行されないコードを見つける • 動的言語のRubyでは意外に大変 •
クックパッドでは、rubyインタプリタに パッチを当てて実行を記録してた(!) 詳しくは『クックパッド開発者ブログ – Ruby の lazy loading の仕組みを利用して 未使用の gem を探す』
12.
Ruby 2.6新機能: oneshot coverage •
実行された行番号を記録する機能 1: if 42 > 0 2: puts "used" 3: else 4: puts "unused" 5: end
13.
Ruby 2.6新機能: oneshot coverage •
実行された行番号を記録する機能 require "coverage" Coverage.start( oneshot_lines: true) load "program.rb" p Coverage.result 1: if 42 > 0 2: puts "used" 3: else 4: puts "unused" 5: end
14.
Ruby 2.6新機能: oneshot coverage •
実行された行番号を記録する機能 require "coverage" Coverage.start( oneshot_lines: true) load "program.rb" p Coverage.result => {"program.rb"=>{ :oneshot_lines=> [1, 2]}} 1: if 42 > 0 2: puts "used" 3: else 4: puts "unused" 5: end
15.
Ruby 2.6新機能: oneshot coverage •
実行された行番号を記録する機能 require "coverage" Coverage.start( oneshot_lines: true) load "program.rb" p Coverage.result => {"program.rb"=>{ :oneshot_lines=> [1, 2]}} 1: if 42 > 0 2: puts "used" 3: else 4: puts "unused" 5: end
16.
Ruby 2.6新機能: oneshot coverage •
実行された行番号を記録する機能 require "coverage" Coverage.start( oneshot_lines: true) load "program.rb" p Coverage.result => {"program.rb"=>{ :oneshot_lines=> [1, 2]}} 1: if 42 > 0 2: puts "used" 3: else 4: puts "unused" 5: end 1・2行目が実行された
17.
Ruby 2.6新機能: oneshot coverage •
実行された行番号を記録する機能 require "coverage" Coverage.start( oneshot_lines: true) load "program.rb" p Coverage.result => {"program.rb"=>{ :oneshot_lines=> [1, 2]}} 1: if 42 > 0 2: puts "used" 3: else 4: puts "unused" 5: end 1・2行目が実行された ➔4行目は実行されなかった (3・5行目は無意味)
18.
1: if 42
> 0 2: puts "used" 3: else 4: puts "unused" 5: end Ruby 2.6新機能: oneshot coverage • 実行された行番号を記録する機能 require "coverage" Coverage.start( oneshot_lines: true) load "program.rb" p Coverage.result => {"program.rb"=>{ :oneshot_lines=> [1, 2]}} 1・2行目が実行された ➔4行目は実行されなかった (3・5行目は無意味) 詳しくは『クックパッド開発者ブログ -- Ruby 2.6 新機能:本番環境での利用を目指した コードカバレッジ計測機能』
19.
実装上の工夫 • 実行記録フックのフラグが バイトコードについている • フックが1回走ったらフラグを消す •
2回め以降はゼロオーバーヘッド • フラグ参照も工夫されている • 簡潔データ構造の利用など 詳しくは『Ruby 2.5 の改善を自慢したい』 詳しくは『簡潔ビットベクトルでRubyをlog N倍速くした』
20.
本当に本番環境でも使える? • 鋭意作業中 詳しくは RubyKaigi
の次の発表で…… Sangyong Sim "Cleaning up a huge ruby application"
21.
まとめ • クックパッドでの実課題から Rubyに実行された行番号を 調べる新機能を入れました • 『クックパッド開発者ブログ』は情報満載 https://techlife.cookpad.com/
Descargar ahora