Upgrade to Pro — share decks privately, control downloads, hide ads and more …

生成AIでGitHubソースコード取得して仕様書を作成

Shu Kobuchi
December 20, 2024

 生成AIでGitHubソースコード取得して仕様書を作成

https://generative-ai-conf.connpass.com/event/335205/
2024生成AI革命期を振り返る忘年会にて、
「生成AIでGitHubソースコード取得して仕様書を作成する」というテーマでLTさせていただきました。

Shu Kobuchi

December 20, 2024
Tweet

More Decks by Shu Kobuchi

Other Decks in Programming

Transcript

  1. 自己紹介 • 小渕 周(Shu Kobuchi)こぶシュー • https://x.com/shu_kob @shu_kob • システムエンジニア

    → ブロックチェーン業界 • 2023年12月スリーシェイク入社 ◦ Sreake 事業部 ◦ アプリケーション開発支援チーム エンジニア ◦ 生成 AI アプリケーション開発等 ◦ Gemini、Google Cloudを使用 2
  2. 会社情報 会社名 株式会社スリーシェイク 設立日 2015/1/15 Mission: インフラをシンプルにして イノベーションが起こりやすい世界を作る Vision: 労苦〈Toil〉を無くすサービスを適正な価格で提供し続ける

    Value: エンジニアリングレイヤーに横たわる人、手法、ツールが サイロ化されて労苦が発生しているプロセスをシンプルにし サービス機能開発に集中できるソリューション (SRE、DevSecOps、DataOps、HROps)を提供する 2015 2016 2017 2018 2019 2020 2021 2022 0 50 100 従業員: 200名over Engineer 60% 所在地 東京都新宿区大京町22-1 グランファースト新宿御苑3F・4F  代表者 代表取締役社長 吉田 拓真 Google Cloud、AWSの両方に強みを持ち SREを軸にご支援 4
  3. SREを主軸にクラウドネイティブ化/エンジニアリング内製化を支援 SRE/DevOps SecOps BizOps HR ・SRE総合支援からセキュリティ対 策を全方位支援 ・生成AIの活用支援 ・ワンストップで脆弱性診断を行う セキュリティ対策SaaS

    ・クラウド型ETL/データパイプ ラインSaaSの決定版 ・あらゆるSaaSをノーコードで連携 ・ハイスキルフリーランスエンジニ ア紹介エージェント IT内製化 / 高度化 クラウドネイティブ化 モダナイゼーション ITアジリティ向上 5
  4. Sreakeの概要 1. SREの考え方を軸にした全方位型のご支援 クラウドネイティブインフラ・セキュリティ支援 クラウドネイティブアプリケーション開発支援 生成AIアプリケーション開発構築支援 ・コンテナ化、コンテナ運用ご支援  (Kubernetesに強み) ・CI/CD環境構築支援 ・クラウドセキュリティ設計・運用支援

    ・Observability設計・運用支援 データモダナイゼーション支援 ・コンテナ化対応などクラウドネイティブ対応に関す るアプリケーション開発のご支援 ・アプリケーションモダナイゼーション支援 ・バックエンド開発支援(Go, Python, TypeScript) ・フロントエンド開発支援(Vue, React) ・Big Query/Dataplex データ基盤構築支援 ・BI(Looker)構築をフルスタックで支援 ・Snowflakeメインのデータ基盤構築支援 ・DBRE支援(Spanner/AlloyDB) ・NewSQL(TiDB, YugabyteDB)支援 ・生成AIアプリ開発運用支援 ・社内情報検索のためのデータ設定支援 ・SREの考え方を元に開発後の運用支援 ・内製化のための生成AIワークショップ/ハンズ オン開催 • 高度な技術力と幅広い領域の経験を持つエンジニアが多数在籍しており、伴走型でお客様に最適なクラウドネイティブ対応の ご支援を行います。 • インフラ・アプリケーション・セキュリティなど含め全方位型で対応可能です。 SREの考え方を元に運用まで見据えたご支援を行います。 7
  5. ソースコード読解の実用例 • ソフトウェア開発への生成AI活用 ◦ プロジェクトマネージャが開発者に確認しなくても迅速に正確に仕様を把握可能 ◦ プロジェクトへの新規着任者がシステムの仕様理解迅速化 GenAI App Source

    Codes 仕様書作成 指定したGitHubリポジトリの ソースコードを読み取り ソフトウェア開発支援生成 AI アプリ 作成した仕様書を RAGに配置して、検 索、質問が可能 LLM 「ソースコードから仕様書を作 成してください」 文章と異なり、 ソースコードは 要約できない
  6. LangChainでGitHubリポジトリのソースコード取得 • 実行例サンプルコード ◦ https://github.com/shu-kob/genai-web-github-loader/blob/main/githubLoader.ts • 使い方 ◦ https://js.langchain.com/v0.2/docs/integrations/document_loaders/web_loaders /github/

    ▪ GitHub Access Tokenを使うことで、Privateリポジトリの情報も取得可能 11 import { GithubRepoLoader } from "@langchain/community/document_loaders/web/github" ; export const run = async () => { const loader = new GithubRepoLoader ( "https://github.com/langchain-ai/langchainjs" , { branch: "main", accessToken: "ghp_A1B2C3D4E5F6a7b8c9d0" , recursive: false , unknown: "warn", maxConcurrency: 5, // Defaults to 2 } ); const docs = await loader.load(); console.log({ docs }); }; Privateリポジトリ 読み取りで使用
  7. LangChainでGitHubリポジトリのソースコードを取得して利用 • 準備 ◦ Google Cloud サービスアカウントのクレデンシャルを取得、設定 ◦ const project

    = 'PROJECT_ID' // 書き換える $ npm i • 実行例 $ npx tsx loadGitHub.ts https://github.com/oguemon/tax-calc ◦ https://github.com/oguemon/tax-calc ▪ 簡単!ザックリ手取り給料計算機 12 const prompt = `あなたはプログラムの設計、実装のスペシャリストです。 ${JSON.stringify(sourceCodes)} を読んで、以下のフォーマットで仕様書を出力してください。 仕様書には以下を含めてください。 ・リポジトリ名 ・ファイル名 ・メソッド名とその引数、戻り値、説明 ・ファイル全体の説明 ・importしているライブラリ名 `
  8. Gemini 2.0 Flash (experimental)での出力例 #### 26. `ts/UnemplymentInsurance.ts` - **ファイル名**: `ts/UnemplymentInsurance.ts`

    - **説明**: 雇用保険料を計算するクラスを定義するファイルです。 - **クラス**: - `UnemplymentInsurance` extends `InsurancePremium` - **コンストラクタ**: - **引数**: - `industry_type`: `IndustryType` (デフォルト: 0) 業種タイプ - `income`: number (デフォルト: 0) 税率を掛ける収入額 - **説明**: 月給またはボーナスに対する雇用保険料を計算します。 - **import**: - `* as Data` from `./Data` - `round` from `./Util` - `InsurancePremium` from `./InsurancePremium` #### 27. `ts/Util.ts` - **ファイル名**: `ts/Util.ts` - **説明**: ユーティリティ関数を定義するファイルです。数値の整形と丸め処理を提供します。 - **関数**: - `add1000Separator(value: number = 0): string` - **引数**: `value`: number (デフォルト: 0) 整形する数値 - **戻り値**: string: 3桁ごとにカンマを追加した文字列 - **説明**: 数値を3桁ごとにカンマ区切りでフォーマットします。 - `round(value: number = 0, width: number = 1, type: string = 'round'): number` - **引数**: - `value`: number (デフォルト: 0) 丸める数値 - `width`: number (デフォルト: 1) 丸めの桁数 - `type`: string (デフォルト: 'round') 丸めタイプ ('round', 'ceil', 'floor', 'roundhd') - **戻り値**: number: 丸められた数値 - **説明**: 数値を指定された桁数とタイプで丸めます。 - **import**: なし 13 #### 28. `ts/WithholdingBonus.ts` - **ファイル名**: `ts/WithholdingBonus.ts` - **説明**: ボーナスに対する源泉徴収税額を計算するクラスを定義するファイルです。 - **クラス**: - `WithholdingBonus` - **プロパティ**: - `tax_rate`: number (賞与に対する税率) - `tax_value`: number (源泉徴収額) - **コンストラクタ**: - **引数**: - `bonus_without_premium`: number (社会保険料等控除後の賞与額) - `last_salary_without_premium`: number (社会保険料等控除後の前月の給与額) - `is_kou`: boolean (デフォルト: true) 甲種か乙種か - `dependents_count`: number (デフォルト: 0) 扶養親族の数 - **説明**: ボーナスに対する源泉徴収税額を計算します。 - **メソッド**: - `calcTaxRateKou(last_salary_without_premium: number, dependents_count: number): number` - **引数**: - `last_salary_without_premium`: number (社会保険料等控除後の前月の給与額) - `dependents_count`: number (扶養親族の数) - **戻り値**: number (賞与に対する税率) - **説明**: ボーナスに対する源泉徴収税額の導出にあたっての賞与の金額に乗ずべき率を求める (甲)。 - `calcTaxRateOtsu(last_salary_without_premium: number): number` - **引数**: - `last_salary_without_premium`: number (社会保険料等控除後の前月の給与額) - **戻り値**: number (賞与に対する税率) - **説明**: ボーナスに対する源泉徴収税額の導出にあたっての賞与の金額に乗ずべき率を求める (乙)。 - **import**: - `WITHHOLDING_BONUS_TABLE_KOU`, `WITHHOLDING_BONUS_TABLE_OTSU` from `./Data`
  9. 注意点 • ソースコードは文量が多い ◦ ignorePathsで削るなど ▪ https://js.langchain.com/v0.2/docs/integrations/document_loaders/web_lo aders/github/#using-gitignore-syntax ◦ 200万トークン対応のGeminiなど長大なトークン長に対応していたら

    削るのが不要になる場合も 14 import { GithubRepoLoader } from "@langchain/community/document_loaders/web/github" ; export const run = async () => { const loader = new GithubRepoLoader ( "https://github.com/langchain-ai/langchainjs" , { branch: "main", recursive: false , unknown: "warn", ignorePaths: ["*.md"] } ); const docs = await loader.load(); console.log({ docs }); // Will not include any .md files }; 無視対象