Tag: Sre

Coding Agent向けにソースコード構造解析を試す:Call Graph、CFG/DFG/PDG、Ansible、Provenanceの使い分け

Coding Agent向けにソースコード構造解析を試す:Call Graph、CFG/DFG/PDG、Ansible、Provenanceの使い分け

Coding Agentに大きなrepositoryを読ませるとき、単純にsource fileを大量にcontextへ投入する方法には限界がある。

大きなmodelならかなり読めるが、それでも「どのfileから読むべきか」「どのfunctionが中心なのか」「値がどこから来ているのか」「複数repositoryをまたぐ処理は何なのか」を毎回sourceから探索するのは高コストである。特に小型のlocal LLMでは、repository全体をcontextへ入れる方法は現実的ではない。

そこで、sourceから決定論的に構造情報を抽出し、

  • Coding Agentが読むべきsourceを絞る
  • 人間がarchitectureを理解する材料にする
  • refactoring前後の構造差を確認する
  • 小型LLMにはboundedなcontextだけを渡す

という用途に使えないか、homeclusterのPython / Ansible中心のcodebaseでいくつかの解析方法を試した。

今回試したものは次の通りである。

  • Symbol Index
  • Call Graph
  • module / type / provenance
  • receiver method resolution
  • Control Flow Graph(CFG)
  • Data Flow Graph(DFG)
  • Program Dependence Graph(PDG)
  • Ansible domain graph
  • inventory provenance graph
  • cross-repository contract graph
  • bounded structural slice

結論から言うと、どれか1つが勝者というより、それぞれ違う層で有用だった。

さらに実際に作ってみると、すべてを同じ頻度で更新するより、

普段は軽量なstructural indexを継続的に最新化し、難しい調査やarchitecture reviewのときだけDeep解析を実行する

という二層構成が良さそうだと分かった。

この記事では、解析手法の一般論から入り、実際に試して分かったメリット・デメリット、Coding Agentへ任せる場合の設計、自動化で気を付ける点、他言語へ広げるときの考え方まで整理する。

ソースコード解析にはいくつかの「深さ」がある

「source codeを解析する」と言っても、何を知りたいかによって必要な解析は違う。

最も単純なのは、fileやsymbolを探すindexである。

repository
  |
  +-- module A
  |     +-- function foo
  |     +-- class Bar
  |
  +-- module B
        +-- function baz

ここから一段進むと、function同士の呼び出し関係を調べるCall Graphになる。

Read more...

Resume

```text

About Me


インフラ、SREエンジニアです。

* AWS関連だとEC2, ECS, RDS, Organization, WAF などのシステム全般
  * 変わった所では[Media Servicesを用いてのライブ配信システムの構築](https://www.slideshare.net/ssuser612d5a/medialive-mediastore-cloudfront-104556841)をしていました。
* 開発者の方と一緒にCI環境の構築や障害対応
* IDCと調整してラック、ネットワーク回線の調達、サーバ関連だと機種選定、購買、セットアップ、障害対応
* モニタリングツールとしてはMackerel, New Relic, Papertrailなどを使っていました。
    
```text

Experience

インターネット塾で

教育系企業 | 2016–2021


* [EC2](/tags/ec2), [RDS](/tags/rds), Fargate [ECS](/tags/ecs) [ECR](/tags/ecr) オートスケールの導入(スループットを上げてコスト削減)
* GitHub, CodePipeline, [CodeBuild](/aws/codebuild-common/), Fargate, CloudFrontを用いてのCI環境の構築
* Ruby on Railsの学習管理ツール[Canvasの構築と運用](/tags/canvaslms/)
* 顧客向けの[WordPress(KUSANAGI)サイトの構築と運用](/tags/kusanagi/)
* ElastiCache(Redis), AWS Personalize, AWS Organizationなどの導入と運用
* 開発環境のDocker環境の運用
* AWS Lambda, Step Functionsでのバッチ処理構築(Node.js)
* AWS [WAF](/aws/waf/)を用いての開発環境へのアクセス制限
* ライブ配信システムの構築([MediaLive + MediaStore + CloudFront](/aws/mediaservices-medialive-mediastore-cloudfront/) , Vimeo)
* モニタリングと障害対応
        
```text

乗り換え検索サイト

Read more...