Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
自分が信じられないから静的解析が好きです
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Satoshi Kaneyasu
September 28, 2023
Programming
290
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
自分が信じられないから静的解析が好きです
Satoshi Kaneyasu
September 28, 2023
More Decks by Satoshi Kaneyasu
See All by Satoshi Kaneyasu
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
400
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
400
【業務アプリのモダナイズ】このまま保守・改修し続けて大丈夫ですか?
satoshi256kbyte
1
84
今から学ぶベクトルデータベース基礎知識からAmazon Bedrock Knowledge Basesまで
satoshi256kbyte
2
29
Amazon Managed Grafana で Amazon DynamoDB のデータを可視化する Infinity Plugin + プライベート API 構成
satoshi256kbyte
1
49
AI駆動開発にグラフDBを重ねてみた
satoshi256kbyte
2
900
AWS Transform Customによる Spring Boot 2.xから4.xへのVerUp
satoshi256kbyte
2
200
運用ダッシュボードの設計を誰も教えてくれないのだけどみなさんどうしてるんですか? - チームに監視するという文化を根付かせるための第一歩を踏みたい -
satoshi256kbyte
1
260
AWS CDK ExpressモードとCI/CDの組み合わせ
satoshi256kbyte
1
87
Other Decks in Programming
See All in Programming
Lambda durable functionsでHuman in the Loopを楽に…楽に……
har1101
2
300
AI時代のFlutter品質設計 — アプリ品質を守るQuality Layers
omatty198
0
370
Railsバージョンを4倍にした話
optim
0
1k
Rails初心者がパスキーを実装してみて大変だったこと
ktombow
0
160
AI時代のIaC入門 〜なぜインフラをコードで管理したいのか?〜 / Introduction to IaC in the AI Era
akihisaikeda
6
1.5k
AI Augmentation Techniques with Liberty
ivargrimstad
1
440
[DroidKnights 2026] Workflow AX: From Auto-Documented Policies to E2E Testing
raeminkang
0
560
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
4
1.5k
선언형 햅틱 라이브러리 진동을 소개합니다
l2hyunwoo
1
310
Claude Code ハーネスDeep Dive – 君はどこまで制御する? -
takateeen_knj
6
5.2k
動画プレイヤーはなぜカクつくのか 〜Flutterのレンダリングとネイティブの境界を解剖する〜
naruogram
0
330
Kawaiicon: Kubernetes, it's no longer cool, but let's secure it anyway!
barnbarn
0
130
Featured
See All Featured
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
530
What the history of the web can teach us about the future of AI
inesmontani
PRO
3
800
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
740
Rails Girls Zürich Keynote
gr2m
96
14k
Darren the Foodie - Storyboard
khoart
PRO
5
4.1k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
A better future with KSS
kneath
240
18k
Un-Boring Meetings
codingconduct
0
490
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
690
Transcript
⾃分が信じられないから 静的解析が好きです 2023.09.27 SATOSHI KANEYASU
⾃⼰紹介 ⽒名︓兼安 聡 所属︓株式会社サーバーワークス 最近のお仕事︓DevOpsの推進 趣味︓サックス、筋トレ、CS ゲーム 資格︓ X(Twitter)︓@satoshi256kbyte など
購入しました 明日、受け取りに 行きます
アジェンダ • [エピソード]システムのVerupにおける静的解析の活⽤ • 廃⽌された関数・変数の置換チェック • 独⾃ルールのソースの静的解析、その課題と対策 • 静的解析の⾃動化 •
⾃動化できなかったこと • pre-commitでコミット差分だけ静的解析 • まとめ
システムのVerupにおける静的解析の活⽤ • ⾔語はPHP • フレームワークバージョンアップ • フレームワークのVerupは破壊的変更、廃⽌された関数・変数は多数 • バージョンアップ前・後、両⽅のFWの知識があるのは極少数 •
品質担保の⼀環として、静的解析(PHPStan)を使⽤
廃⽌された関数・変数の抽出に⽤いる • 旧Verのコードは、ほとんどが何らかの修正が必要 • 正規表現&⼿作業で⼀通り修正 • レビュー&⼿動テストでは改修成否のチェックは不可と判断し、 静的解析を採⽤ • 静的解析の準備は(個⼈的には)まあまあ⼤変というレベル
• 効果は「特⼤」、これがないとまともな品質にはならなかっただろう
廃⽌された関数・変数の置換チェック • 廃⽌された関数・変数が正しく置換されてるか、静的解析でチェック • 配列に関する警告等、修正のタイパが悪すぎるものは無視リスト • 最終的には、PHPStanのBaselineも活⽤ • 効果があったことから、 新規だけでなく改修PJでも静的解析は⾮常に有効と考えている
ある時点より前のエラーは認識済とみなす ある時点以降新たに出たエラーだけチェック Baseline
独⾃ルールのソースの静的解析、その課題と対策 • 独⾃のビジネスロジック置き場がある • そのままでは静的解析できない • PHPStanのFW⽤の拡張を更に拡張して、 独⾃のビジネスロジック置き場もフォロー • 拡張ライブラリは、独⾃とはいえFWの
ルールを参考にしていたのでスムーズに作 れた src Controller Business Model View /
静的解析の⾃動化 • AWS CodeBuildで静的解析を⾃動実⾏ • CodeBuildはdevelopへのコミットで起動 • マージのタイミングで全体の解析を⾏うので、 思わぬエラーを拾えた •
最終的には静的解析+独⾃のシェルで、 例外の隠蔽やSQLインジェクションも⾃動抽出 AWS CodeBuild AWS CodeCommit AWS CodeDeploy
⾃動化できなかったこと • AWS CodeBuildで⽔際対策はできた • しかし、静的解析NGなコードはコミットして欲しくないのが本⾳ • コミット前にローカルで静的解析するようルール付けしたが、 定着しなかった
pre-commitでコミット差分だけ静的解析 • 前述の経験を踏まえて改善 • Node.jsのhuskyを使⽤すると、 コミット前にタスクを⾃動実⾏可能 • 開発者が個々に設定する必要はない .husky pre-commit
/ src phpstan-commit.sh
コミット差分だけ静的解析するシェル #!/bin/bash FILES=$(git diff --cached --name-only --diff-filter=ACM | grep "^src/.*¥.php$")
if [ "$FILES" != "" ]; then vendor/bin/phpstan analyse --level=max $FILES if [ $? -ne 0 ]; then echo "PHPStan failed" exit 1 fi fi phpstan-commit.sh
pre-commitで静的解析を実⾏ #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" ./phpstan-commit.sh .husky/pre-commit
コミット時の出⼒サンプル > git -c user.useConfigOnly=true commit --quiet --allow-empty-message --file -
Note: Using configuration file /home/ec2-user/husky-phpstan/phpstan.neon. 0/1 [░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 0% [1G [2K 1/1 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100% ------ ------------------------------------------------------------ Line sample1.php ------ ------------------------------------------------------------ 6 Parameter #1 $a of function add expects int, string given. 6 Parameter #2 $b of function add expects int, string given. ------ ------------------------------------------------------------ [ERROR] Found 2 errors PHPStan failed husky - pre-commit hook exited with code 1 (error)
まとめ • 静的解析は改修案件でも有効 • pre-commitを使えば、静的解析のルール化も可能 コードレビューの前準備︕ • pre-commitで静的解析した上で、 CI/CDパイプラインに繋げて更なる改善に繋げたい 私はもう静的解析は⼿放せない
以上、ありがとうございました。