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
Satoshi Kaneyasu
September 28, 2023
Programming
280
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
Amazon Managed Grafana で Amazon DynamoDB のデータを可視化する Infinity Plugin + プライベート API 構成
satoshi256kbyte
1
19
AI駆動開発にグラフDBを重ねてみた
satoshi256kbyte
2
790
AWS Transform Customによる Spring Boot 2.xから4.xへのVerUp
satoshi256kbyte
2
160
運用ダッシュボードの設計を誰も教えてくれないのだけどみなさんどうしてるんですか? - チームに監視するという文化を根付かせるための第一歩を踏みたい -
satoshi256kbyte
1
200
AWS CDK ExpressモードとCI/CDの組み合わせ
satoshi256kbyte
1
63
AWS re:Invent 2025の少し振り返り + DevOps AgentとBacklogを連携させてみた
satoshi256kbyte
3
250
Amazon_Cognito_で構築する_スケーラブルな_Web_アプリケーション__シングルページ_Web_アプリケーションに認証を組み込む
satoshi256kbyte
0
55
人間とAI、どちらが書いたコードもCI/CDでチェックしてみよう
satoshi256kbyte
0
63
今こそ押さえておきたい アマゾンウェブサービス(AWS)の データベースの基礎 おもクラ #6版
satoshi256kbyte
1
310
Other Decks in Programming
See All in Programming
XHTMLが残したもの
yosuke_furukawa
PRO
2
800
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
0
270
Claude Codeを組織的に動かして月400PRを実現した話
happy_ryo
0
270
Building an Out-of-Order CPU
latte72
1
770
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
230
スマート反転とウェブアクセシビリティ
camiha
0
210
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
0
120
数年滞っていたダークモード対応をおよそ2週間で完了させる
chigichan24
0
710
WebRTC映像をAirPlayに対応させる挑戦.pdf
monolithic_adam
0
220
From 6 People Classroom Meetup to 100 People Regional Conference / FOSS4G Hiroshima 2026
furukawayasuto
0
200
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
180
モジュールの視点からSwiftを読み解く #iosdc
s_shimotori
0
170
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
So, you think you're a good person
axbom
PRO
2
2.2k
Google's AI Overviews - The New Search
badams
0
1.6k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
280
Making the Leap to Tech Lead
cromwellryan
135
10k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.3k
Fireside Chat
paigeccino
43
4k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
270
Git: the NoSQL Database
bkeepers
PRO
432
67k
GraphQLとの向き合い方2022年版
quramy
50
15k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
390
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パイプラインに繋げて更なる改善に繋げたい 私はもう静的解析は⼿放せない
以上、ありがとうございました。