Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
bitbank, Inc. Tokyo, Japan
PDF, PPTX
2,026 views
持続的な運用開発のために社内基盤を整えている話 〜auditのCI組み込みやlintの社内PKG化〜
tslintの社内標準化やyarn auditを無理なく運用に載せるために開発したツールを紹介します。
Engineering
◦
Read more
2
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 36
2
/ 36
3
/ 36
4
/ 36
5
/ 36
6
/ 36
7
/ 36
8
/ 36
9
/ 36
10
/ 36
11
/ 36
12
/ 36
13
/ 36
14
/ 36
15
/ 36
16
/ 36
17
/ 36
18
/ 36
19
/ 36
20
/ 36
21
/ 36
22
/ 36
23
/ 36
24
/ 36
25
/ 36
26
/ 36
27
/ 36
28
/ 36
29
/ 36
30
/ 36
31
/ 36
32
/ 36
33
/ 36
34
/ 36
35
/ 36
36
/ 36
More Related Content
PPT
色彩センスのいらない配色講座
by
Mariko Yamaguchi
PPTX
ICASSP2019音声&音響論文読み会 論文紹介(認識系)
by
貴史 益子
KEY
ノンデザイナーのための配色理論
by
tsukasa obara
PDF
200人での対戦も可能!?Photon 新SDKについて
by
Photon運営事務局
PDF
開発速度が速い #とは(LayerX社内資料)
by
mosa siru
PPT
レイトレ空間構造入門
by
Toru Matsuoka
PDF
ARでVRアバターを表示するシステムを構築しよう
by
torisoup
PPTX
ディープラーニングによる時系列データの異常検知
by
Core Concept Technologies
色彩センスのいらない配色講座
by
Mariko Yamaguchi
ICASSP2019音声&音響論文読み会 論文紹介(認識系)
by
貴史 益子
ノンデザイナーのための配色理論
by
tsukasa obara
200人での対戦も可能!?Photon 新SDKについて
by
Photon運営事務局
開発速度が速い #とは(LayerX社内資料)
by
mosa siru
レイトレ空間構造入門
by
Toru Matsuoka
ARでVRアバターを表示するシステムを構築しよう
by
torisoup
ディープラーニングによる時系列データの異常検知
by
Core Concept Technologies
What's hot
PDF
Webデザインのセオリーを学ぼう
by
Toshiaki Sasaki
PPTX
OpenCVを用いた画像処理入門
by
uranishi
PDF
フロー効率性とリソース効率性について #xpjug
by
Itsuki Kuroda
PDF
【Unite Tokyo 2018】Audio機能の基礎と実装テクニック
by
UnityTechnologiesJapan002
PDF
ロジカルシンキング研修用パワーポイント資料の無料サンプル
by
Jun Chiba
PDF
強いて言えば「集約どう実装するのかな、を考える」な話
by
Yoshitaka Kawashima
PDF
やさしく音声分析法を学ぶ: ケプストラム分析とLPC分析
by
Shinnosuke Takamichi
PPTX
冬のLock free祭り safe
by
Kumazaki Hiroki
PDF
Tensorflow Liteの量子化アーキテクチャ
by
HitoshiSHINABE1
PDF
これでわかる!Webアクセシビリティって?JIS X 8341-3って?
by
Web Accessibility Infrastructure Committee (WAIC)
PDF
最近のDQN
by
mooopan
PPTX
[DL輪読会]Few-Shot Unsupervised Image-to-Image Translation
by
Deep Learning JP
PDF
自称・世界一わかりやすい音声認識入門
by
Tom Hakamata
PDF
UXの考え方とアプローチ
by
Masaya Ando
PDF
年の瀬リアルタイム通信サーバ勉強会
by
モノビット エンジン
PDF
【DL輪読会】Vision-Centric BEV Perception: A Survey
by
Deep Learning JP
PDF
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
by
Yoshiki Hayama
PDF
コンピュテーショナルフォトグラフティの基礎
by
Norishige Fukushima
PDF
基礎線形代数講座
by
SEGADevTech
PDF
UIデザインの基本
by
Roy Kim
Webデザインのセオリーを学ぼう
by
Toshiaki Sasaki
OpenCVを用いた画像処理入門
by
uranishi
フロー効率性とリソース効率性について #xpjug
by
Itsuki Kuroda
【Unite Tokyo 2018】Audio機能の基礎と実装テクニック
by
UnityTechnologiesJapan002
ロジカルシンキング研修用パワーポイント資料の無料サンプル
by
Jun Chiba
強いて言えば「集約どう実装するのかな、を考える」な話
by
Yoshitaka Kawashima
やさしく音声分析法を学ぶ: ケプストラム分析とLPC分析
by
Shinnosuke Takamichi
冬のLock free祭り safe
by
Kumazaki Hiroki
Tensorflow Liteの量子化アーキテクチャ
by
HitoshiSHINABE1
これでわかる!Webアクセシビリティって?JIS X 8341-3って?
by
Web Accessibility Infrastructure Committee (WAIC)
最近のDQN
by
mooopan
[DL輪読会]Few-Shot Unsupervised Image-to-Image Translation
by
Deep Learning JP
自称・世界一わかりやすい音声認識入門
by
Tom Hakamata
UXの考え方とアプローチ
by
Masaya Ando
年の瀬リアルタイム通信サーバ勉強会
by
モノビット エンジン
【DL輪読会】Vision-Centric BEV Perception: A Survey
by
Deep Learning JP
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
by
Yoshiki Hayama
コンピュテーショナルフォトグラフティの基礎
by
Norishige Fukushima
基礎線形代数講座
by
SEGADevTech
UIデザインの基本
by
Roy Kim
Similar to 持続的な運用開発のために社内基盤を整えている話 〜auditのCI組み込みやlintの社内PKG化〜
PDF
PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima
by
Shigeru Hanada
PDF
OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏
by
Daisuke Ikeda
PDF
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
by
Insight Technology, Inc.
PDF
Osc 2021 fall_tis_変化に強いチーム育成のための取り組み紹介
by
Daisuke Ikeda
PDF
クラウドセキュリティ基礎 #seccamp
by
Masahiro NAKAYAMA
PDF
【Agile Conference tokyo 2010】 Going Agile with Tool
by
智治 長沢
PDF
クラウドセキュリティ基礎
by
Masahiro NAKAYAMA
PDF
PostgreSQL開発ことはじめ - 第27回しくみ+アプリケーション勉強会
by
Shigeru Hanada
PDF
アジャイルソフトウェア開発の道具箱
by
Koichi ITO
PDF
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
by
智治 長沢
PDF
技育祭2025秋 サボろうとする生成AIの傾向と対策 登壇資料(フューチャー渋川)
by
Yoshiki Shibukawa
PDF
Agile japan2010 rakuten様プレゼン資料
by
Akiko Kosaka
PDF
Ldd13 present
by
Masashi Kayahara
PPTX
JaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組み
by
Hideki Sugimoto
PDF
家族のためにエンジニアとしてやってみたこと(What I did for my family as an engineer)
by
Kazuya Numata
PPTX
アプリ向けエラー・クラッシュ検知ツールの運用品質について@Ques13th
by
Hiroki Nakai
PDF
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
by
MorioImai
PDF
Ti dd force09
by
Makoto SAKAI
PDF
GitHubとTravisCIで回す社内ライブラリの継続的インテグレーション事例
by
Ryuji Egashira
PDF
20131209_buildinsidermeetup
by
kumake
PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima
by
Shigeru Hanada
OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏
by
Daisuke Ikeda
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
by
Insight Technology, Inc.
Osc 2021 fall_tis_変化に強いチーム育成のための取り組み紹介
by
Daisuke Ikeda
クラウドセキュリティ基礎 #seccamp
by
Masahiro NAKAYAMA
【Agile Conference tokyo 2010】 Going Agile with Tool
by
智治 長沢
クラウドセキュリティ基礎
by
Masahiro NAKAYAMA
PostgreSQL開発ことはじめ - 第27回しくみ+アプリケーション勉強会
by
Shigeru Hanada
アジャイルソフトウェア開発の道具箱
by
Koichi ITO
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
by
智治 長沢
技育祭2025秋 サボろうとする生成AIの傾向と対策 登壇資料(フューチャー渋川)
by
Yoshiki Shibukawa
Agile japan2010 rakuten様プレゼン資料
by
Akiko Kosaka
Ldd13 present
by
Masashi Kayahara
JaSST2017_大規模業務システムにおける再利用可能なテスト自動化の取り組み
by
Hideki Sugimoto
家族のためにエンジニアとしてやってみたこと(What I did for my family as an engineer)
by
Kazuya Numata
アプリ向けエラー・クラッシュ検知ツールの運用品質について@Ques13th
by
Hiroki Nakai
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
by
MorioImai
Ti dd force09
by
Makoto SAKAI
GitHubとTravisCIで回す社内ライブラリの継続的インテグレーション事例
by
Ryuji Egashira
20131209_buildinsidermeetup
by
kumake
More from bitbank, Inc. Tokyo, Japan
PDF
インフラチームの歴史とこれから
by
bitbank, Inc. Tokyo, Japan
PDF
ビットバンクのデプロイ戦略について
by
bitbank, Inc. Tokyo, Japan
PDF
ビットバンク流 アジャイル開発の紹介.pdf
by
bitbank, Inc. Tokyo, Japan
PDF
ビットバンクで求められるプロジェクトマネジメント
by
bitbank, Inc. Tokyo, Japan
PDF
ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境
by
bitbank, Inc. Tokyo, Japan
PDF
ビットバンクのマッチングエンジン.pdf
by
bitbank, Inc. Tokyo, Japan
PDF
Lightning Network, Swap, Nloop
by
bitbank, Inc. Tokyo, Japan
PDF
ビットバンクにおける少人数で支えるインフラチームの戦略
by
bitbank, Inc. Tokyo, Japan
PDF
bitbank Corporate Information
by
bitbank, Inc. Tokyo, Japan
PDF
ng build --prod & Continuous Delivery
by
bitbank, Inc. Tokyo, Japan
PDF
マーブル図で怖くないRxJS
by
bitbank, Inc. Tokyo, Japan
PDF
中規模Angularアプリケーションの再設計
by
bitbank, Inc. Tokyo, Japan
PDF
仮想通貨取引所 bitbank の IaC の導入と実践
by
bitbank, Inc. Tokyo, Japan
PDF
Introduction of bitbank frontend development environment
by
bitbank, Inc. Tokyo, Japan
PDF
DeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるか
by
bitbank, Inc. Tokyo, Japan
PDF
ビットコインウォレットで手軽にパスワードレス認証が可能なbitidについての紹介
by
bitbank, Inc. Tokyo, Japan
PPTX
Ethereumのシャーディング概論
by
bitbank, Inc. Tokyo, Japan
PDF
Daocasinoにおけるstate channel実装
by
bitbank, Inc. Tokyo, Japan
PDF
TypeScriptでライトニングネットワークを使ってみよう
by
bitbank, Inc. Tokyo, Japan
PDF
Node.jsアプリの開発をモダン化するために取り組んできたこと
by
bitbank, Inc. Tokyo, Japan
インフラチームの歴史とこれから
by
bitbank, Inc. Tokyo, Japan
ビットバンクのデプロイ戦略について
by
bitbank, Inc. Tokyo, Japan
ビットバンク流 アジャイル開発の紹介.pdf
by
bitbank, Inc. Tokyo, Japan
ビットバンクで求められるプロジェクトマネジメント
by
bitbank, Inc. Tokyo, Japan
ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境
by
bitbank, Inc. Tokyo, Japan
ビットバンクのマッチングエンジン.pdf
by
bitbank, Inc. Tokyo, Japan
Lightning Network, Swap, Nloop
by
bitbank, Inc. Tokyo, Japan
ビットバンクにおける少人数で支えるインフラチームの戦略
by
bitbank, Inc. Tokyo, Japan
bitbank Corporate Information
by
bitbank, Inc. Tokyo, Japan
ng build --prod & Continuous Delivery
by
bitbank, Inc. Tokyo, Japan
マーブル図で怖くないRxJS
by
bitbank, Inc. Tokyo, Japan
中規模Angularアプリケーションの再設計
by
bitbank, Inc. Tokyo, Japan
仮想通貨取引所 bitbank の IaC の導入と実践
by
bitbank, Inc. Tokyo, Japan
Introduction of bitbank frontend development environment
by
bitbank, Inc. Tokyo, Japan
DeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるか
by
bitbank, Inc. Tokyo, Japan
ビットコインウォレットで手軽にパスワードレス認証が可能なbitidについての紹介
by
bitbank, Inc. Tokyo, Japan
Ethereumのシャーディング概論
by
bitbank, Inc. Tokyo, Japan
Daocasinoにおけるstate channel実装
by
bitbank, Inc. Tokyo, Japan
TypeScriptでライトニングネットワークを使ってみよう
by
bitbank, Inc. Tokyo, Japan
Node.jsアプリの開発をモダン化するために取り組んできたこと
by
bitbank, Inc. Tokyo, Japan
持続的な運用開発のために社内基盤を整えている話 〜auditのCI組み込みやlintの社内PKG化〜
1.
持続的な運用開発のために社 内基盤を整えている話 〜auditのCI組み込みやlintの 社内PKG化〜 2019/8/1 bitbank LT
Night #5 ~Angular~ @studioTeaTwo
2.
ToshiyaTanaka@studioTeaTwo 🏢個人事業主(屋号:studioTeaTwo)/ OverPage, inc. 👨💻
Angular/react/typescript/c# 個人事業主(フロントエンドエンジニア)として bitbankさんのお手伝いさ せていただいているので今日はその話をします
3.
今日話すこと 1. 基盤を再整備している背景 2. auditのCI組み込み 3.
lintの社内PKG化
4.
基盤を再整備している 背景
5.
背景(1) ● 全社的にtypescriptへシフト中 ○ フロントエンド
typescript(Angular) ○ バックエンド Java→typescriptへ移行中 ● リポジトリ数 ○ typescript 50 / 全社 400
6.
背景(2) ● ソース管理 ○ bitbucket/github
→ gitlabへ移行 ○ オンプレで構築してCIランナーなども社内PCで実施 ○ NPME(npm enterprise)で社内PKG化して再利用
7.
背景(3) ● リリースサイクル ○ 定期は週一 ●
セキュリティは業界的に意識高く ○ gitlabにしてオンプレにしてるのもその一環 ● 攻めに転じていくために色々基盤を整えたい時期
8.
auditのCI組み込み
9.
auditをCIに組み込みたい、しかし... ● レポート量が多い... ● アップデートもそう簡単ではない...重大度とメンテナンス難易度は比例しない。 重大度が低くてもアップデートが難しいケースがある ●
CIでは参考値としてallow_failerしても良いが、いつも黄色になってるのも気持 ち悪い....
10.
auditの結果を任意にフィルタリングしてCIを 落としたい!
11.
やること ● yarn audit
--jsonの出力をnodeスクリプトで加工する ● コマンド引数で対象にする報告を指定する ○ 対象にする重大度を指定する ○ 特定のレポートNOやPKG名を除外する ● 重大度毎の件数だけでなくレポートNO毎のPKG件数も出す ○ インシデントが発生している根っこのPKGだけ知りたい
12.
実施内容 ● yarn audit
--jsonの出力データ構造を解析する ● nodeスクリプトを作成する ● NPMEにする
13.
yarn audit --jsonの出力データ構造 ●
JSONL(JSON Lines)形式。区切り記号無し ● summary(1個)とadvisory(たくさん)で構成される ● advisoryはデータ量が多い ○ 1件あたりnpm auditの数倍ある ○ 出力結果が20MB超えて驚いた
14.
{ "type": "auditSummary", "data": { "vulnerabilities":
{ "info": 0, "low": 63, "moderate": 2, "high": 4, "critical": 0 }, "dependencies": 72361, "devDependencies": 0, "optionalDependencies": 0, "totalDependencies": 72361 } }
15.
{ "type": "auditAdvisory", "data": { "resolution":
{ "id": 786, "path": "jest>jest-cli>jest-config>babel-jest>babel-plugin-istanbul>test-exclude>micromatch>braces", "dev": false, "optional": false, "bundled": false }, "advisory": { "findings": [ { "version": "1.8.5", "paths": [ "jest>jest-cli>jest-config>babel-jest>babel-plugin-istanbul>test-exclude>micromatch>braces", <省略> ], "dev": false, "optional": false, "bundled": false } ], "id": 786, "created": "2019-02-15T21:44:30.680Z", "updated": "2019-04-02T18:18:29.356Z", "deleted": null, "title": "Regular Expression Denial of Service", "found_by": {
16.
nodeスクリプトによるフィルタリング ● コマンド引数を解析する ● yarn
audit --jsonを実行して結果取得する ● advisoryを必要な項目だけ抽出する ● コマンド引数の指定内容でフィルタリングする ● 小計を算出する ● CIにログとexitCodeを伝える
17.
function normalizeAuditFormat(data: string):
AuditAdvisory { const dataJSON = JSON.parse(data); // 出力を`yarn audit`相当にする return { severity: dataJSON.data.advisory.severity, reportNo: dataJSON.data.advisory.id, title: dataJSON.data.advisory.title, module_name: dataJSON.data.advisory.module_name, patched_versions: dataJSON.data.advisory.patched_versions, path: dataJSON.data.resolution.path, url: dataJSON.data.advisory.url, }; } advisoryを必要な項目だけ抽出する
18.
auditAdvisories // 脆弱性プライオリティで絞り込む(一番最初に判定すること) .filter((advisory) =>
targetVulnerabilities.some((targetVulnerability) => targetVulnerability === advisory.severity)) // NPM報告レポートNOで除外する .filter((advisory) => !ignoreReportNumbers.some((ignoreReportNumber) => ignoreReportNumber === advisory.reportNo)) // NPMパッケージ名で除外する .filter((advisory) => !ignorePackages.some((ignorePackage) => ignorePackage === advisory.module_name)) フィルタリング
19.
function subtotalPerReportNo(outputAdvisories: AuditAdvisory[]):
AuditSubtotal { const knownReportNo = new Set(); // 重大度を跨いで同じレポートNoが存在することは無いため、1個で使い回せる const initialValue: AuditSubtotal = { low: 0, moderate: 0, high: 0, critical: 0 }; return outputAdvisories.reduce((accumulator, currentValue) => { switch (currentValue.severity) { case 'low': { if (knownReportNo.has(currentValue.reportNo)) { break; } accumulator.low += 1; knownReportNo.add(currentValue.reportNo); break; } ... } return accumulator; }, initialValue); } レポートNO毎の正味件数
20.
パッケージ依存の自動アップデート ● 現在調査中 ● gitlabかつコードを社外に出したくない ●
実質renovate一択
21.
lintの社内PKG化
22.
tslintを社内PKG化したい理由 ● 属人性を下げPJ間の移動をしやすくする ● 社内標準ルールとリポジトリ固有ルールを明確にする ●
変更やリプレースしやすくする ○ tslintからeslintへ移行問題
23.
アプローチ ● 属人性を下げPJ間の移動をしやすくする ⇨ 社内標準ルールセットを定める ●
社内標準ルールとリポジトリ固有ルールを明確にする ⇨ extendsを活用して、社内標準ルールをPKG化し各リポジトリにはリポジトリ 固有ルールだけを記述する ● 変更やリプレースしやすくする ⇨ NPMEにて社内PKG化して一元管理する
24.
実施内容 ● ドキュメントベースでルール標準素案を起こす ● NPMEの作成する ●
各リポジトリに組み込んでいく
25.
ルール標準セットの種類 ● 共通 ○ tslint:allをベースに策定する ○
tslint-microsoft-contrib/vrsource-tslint-rulesからピックアップ ● Angular ○ Angular-CLIのlintを外部PKGしたtslint-angularをベースに策定する ● サーバサイド(未了) ● rxjs(未了) ● テスト(未了)
26.
ドキュメント 原則tslint:allにしたので、falseにする理由と拡張ルールからピックアップする理由 を記録した
27.
NPMEの作成 ● js/tsでソースやテストを記述して、jsonファイルをアウトプットする ○ コメントが書ける ●
活用する拡張ルールセット系もこのPKGに内包する ○ 各リポジトリではこのNPMEだけインストールすればいいように
28.
NPME PKG構成
29.
ソースファイル
30.
ビルドスクリプト
31.
node_modulesパス問題 ● jsonファイルは静的ファイルのためjsファイルのようにpackage.jsonを利用した node_modules解決はできない ● tslintはextendsやrulesDirectoryに指定されたnpm名の解決のために browserify/resolve
を用いて自力でnodeのrequire.resolve()同様の探索を行って いる(babelも同様) ● ベースパスからnode_modulesを探して探索する ● しかし、npmもyarnもフラットインストールがデフォルトになるため、利用先にインス トールされるとベースパスから上の階層に依存PKGが存在することになる ● そのためnpm名だと解決できない(上位ディレクトリに再帰掛けるのは厄介)
32.
{ "rulesDirectory": [ "../../tslint-microsoft-contrib", "../../vrsource-tslint-rules/rules" ], } { "rulesDirectory": [ "tslint-microsoft-contrib", "vrsource-tslint-rules/rules" ], } ソースファイル ビルドファイル ×物理で殴る ○相対パス参照に置き換える
33.
各リポジトリでやること ● package.jsonにNPMEの社内標準ルールセットPKGを追加する ● 特段事情が無ければdevDependenciesからtslint絡みは消す ●
tslint.jsonのextendsで社内標準ルールの選択をする ● arrayに並べる順番は、基本的なものを最初に置き徐々に特有のものにしてい く。同じルールが定義されている場合に後のもので上書きされるため ● tslint.jsonのrulesに各リポジトリの固有ルールを上書き・追加する
34.
tslint.json例 { "extends": ["@bitbank/coding-rules/tslintBase", "@bitbank/coding-rules/tslintAngular", "tslint-config-prettier"], "rules":
{ "component-selector": [ true, "element", "baw", "kebab-case" ], ... } ・左から基本となるものを並べて上書きしていく。 ・一番右にtslint-config-prettierを置く。フォーマッタ系 ルールをリセットして prettierに一任する。 ・リポジトリ固有のルールだけを記述する ・例ではAngularのHTMLタグ名のprefixを定めている
35.
課題 ● 標準ルール策定は割れ窓になりやすい ○ 基本は緩める方向に ○
それでも統一することは難しい。採用フレームワーク毎の事情、tscと babel-preset-typescriptの文化違いなど ○ NPME化して変更・リプレースしやすくすることを第一目的にするのがいい かも > eslint問題
36.
END
Download