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
GitHub CopilotでTypeScriptの コード生成するワザップ
Search
starfish719
December 26, 2024
Programming
7.1k
28
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
GitHub CopilotでTypeScriptの コード生成するワザップ
starfish719
December 26, 2024
More Decks by starfish719
See All by starfish719
VibeCodingからAgenticWorkflowへ
starfish719
0
1.5k
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
7k
「速く作る」から「正しく作る」へ ─ 生成AI時代の開発フロー改革の ロードマップと実行 ─
starfish719
3
14k
AI活用を推進するために ファインディが下した、一つの小さな決断
starfish719
1
430
生成AI時代のエンジニア育成 変わる時代と変わらないコト
starfish719
0
16k
【Claude Code】Plugins作成から始まったファインディの開発フロー改革
starfish719
0
1.2k
Findy AI+の開発、運用におけるMCP活用事例
starfish719
0
4.2k
生成AIが出力するテストコードのリアル よくあるコードと改善のヒント
starfish719
0
910
生成AI時代に若手エンジニアが最初に覚えるべき内容と、その学習法
starfish719
2
950
Other Decks in Programming
See All in Programming
Heart of Swift Concurrency
koher
0
950
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
260
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
460
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
240
Building an Out-of-Order CPU
latte72
1
790
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
4.9k
iOSDC2026登壇資料.pdf
riofujimon
0
180
モバイル交通系ICへのチャージ実例から考える、クロスプラットフォーム開発におけるiOS実機テスト設計とCI運用
yusuga
1
530
新卒PdEのリアル
ryu1013
1
510
The Rails Doctrine Decade
koic
2
250
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
12
9.7k
[GoCon2026] When Goroutines Are Not Enough: Runtime Locality in High-Throughput Go
takehaya
6
2.4k
Featured
See All Featured
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
770
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.3k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
830
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
520
Claude Code のすすめ
schroneko
67
230k
Accessibility Awareness
sabderemane
1
220
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
280
RailsConf 2023
tenderlove
30
1.6k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
240
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
470
Transcript
© Findy Inc. GitHub Copilotで TypeScriptの コード⽣成するワザップ 1
© Findy Inc. 2 今⽇話すこと • GitHub Copilotのカスタムインストラクションについて • 設定⽅法
• 調整⽅法 • 調整⽅法のワザップ ◦ 不要なものは削除 ◦ ⻑⽂よりも簡潔な階層構造 ◦ 曖昧な表現はNG • まとめ
© Findy Inc. GitHub Copilotの カスタムインストラクションについて 3
© Findy Inc. 4 カスタムインストラクション is 何? • Copilotの⽣成コード、サジェスト内容をカスタマイズすることができる機能 •
2024/12/21現在、VS Codeで利⽤可能 • ⾃然⾔語などで記述しておくとCopilotが読み込む • 設定内容を反映したコード⽣成、サジェストを出すようになる • ⾃組織、チームのコードガイドラインを読み込ませるとどうなる、、、? ◦ ⾃分たちにとって最適なCopilotを⽣み出すことができるはず
© Findy Inc. 設定⽅法 5
© Findy Inc. 6 ファイルを⼀個作成するだけ • `.github/copilot-instructions.md` を作成するだけ • このファイルに⾃然⾔語で保存するだけでOK
# フロントエンドのスタイルガイド ## コーディングルール - 推奨するルール - [TypeScript Deep Dive](https://basarat.gitbook.io/typescript/styleguide) ## ファイル命名規則 - [Angular coding style guide](https://angular.io/guide/styleguide) に倣う - ファイル名はケバブケースに統⼀する
© Findy Inc. 調整⽅法 7
© Findy Inc. 8 まず確認⽤プロンプトを⽤意する 以下の条件を全て満たすコードを⽣成してください - hooksである - 引数は次の通り
- カウント数の初期値 - 任意項⽬ - 次の内容を変数で管理する - カウント数 - 引数で受け取ったカウント数の初期値で初期化する - 次の関数を⽤意する - カウント数をインクリメントする - カウント数をデクリメントする - hooksから次の内容を返す - カウント数 - カウント数をインクリメントする関数 - カウント数をデクリメントする関数
© Findy Inc. 9 カスタムインストラクションの調整無しでプロンプトを実⾏してみる import { useState } from
'react'; function useCounter(initialCount = 0) { const [count, setCount] = useState(initialCount); const increment = () => setCount(count + 1); const decrement = () => setCount(count - 1); return { count, increment, decrement }; } export default useCounter;
© Findy Inc. 10 求める結果とのギャップを、カスタムインストラクションで埋める ## Hooks - hooksから返す値は `as
const` を付けてreadonlyにする ## イベントハンドラの命名規則 - Component が受け取る Props は `on` + `アクション名` + `対象名` - 関数そのものの名称は `handle` + `アクション名` + `対象名` ```tsx export const HogeComponent = () => { const { handleChangeHoge } = useHogeHooks(); return <FugaComponent onChangeHoge={handleChangeHoge} /> } ```
© Findy Inc. 11 確認⽤プロンプトを再実⾏する import { useState } from
'react'; function useCounter(initialCount = 0) { const [count, setCount] = useState(initialCount); const handleIncrementCount = () => setCount(count + 1); const handleDecrementCount = () => setCount(count - 1); return { count, handleIncrementCount, handleDecrementCount } as const; } export default useCounter; • カスタムインストラクションの調整に戻る • 確認⽤プロンプトの実⾏と、カスタムインストラクションの調整を繰り返し • トライアンドエラーを繰り返すだけ
© Findy Inc. 調整⽅法のワザップ 12
© Findy Inc. 13 不要なものは削除 • カスタムインストラクションに記述する内容には、正しい内容のみを簡潔に記述する ## イベントハンドラの命名規則 -
Component が受け取る Props は `on` + `アクション名` + `対象名` - 関数そのものの名称は `handle` + `アクション名` + `対象名` bad case ```tsx export const HogeComponent = () => { const { onChangeHoge } = useHogeHooks(); return <FugaComponent handleChangeHoge={onChangeHoge} /> } ``` good case ```tsx export const HogeComponent = () => { const { handleChangeHoge } = useHogeHooks(); return <FugaComponent onChangeHoge={handleChangeHoge} /> } ``` ## イベントハンドラの命名規則 - Component が受け取る Props は `on` + `アクション名` + `対象名` - 関数そのものの名称は `handle` + `アクション名` + `対象名` ```tsx export const HogeComponent = () => { const { handleChangeHoge } = useHogeHooks(); return <FugaComponent onChangeHoge={handleChangeHoge} /> } ```
© Findy Inc. 14 ⻑⽂よりも簡潔な階層構造 boolean型のPropertyを定義する場合、引数名には `is` をprefixで付け、それが共通コンポーネントの場合はoptionalにする。 - boolean
型のProperty - 引数名に `is` を prefix で付ける - 共通コンポーネントの場合 - optional にする • ⻑⽂よりマークダウンの階層構造のほうがCopilotの理解度が上がることが多かった • ⽂章を分解し、マークダウン形式の段落構造などに書き換えるのをおすすめ
© Findy Inc. 15 曖昧な表現はNG • 曖昧な⾔葉を使うと、Copilotはそれらを無視することが多かった • Copilotが中々理解してくれないケースでは、⾔葉の表現を少し変えるだけで⼀気に理解度が上がるこ とがある
- 親コンポーネントからまとめてテストコードを書く - ⼦コンポーネントへの直接的なテストコードは不要 - 親コンポーネントからまとめてテストコードを書く - ⼦コンポーネントへの直接的なテストコードは書かない
© Findy Inc. まとめ 16
© Findy Inc. 17 まとめ • 利⽤⽅法はファイルを⼀つ作成するだけで簡単 • まず⾃組織、⾃チームのコードガイドラインをコピペして叩き台にするだけでも⼀定の効果は出る •
叩き台をベースに、今回のワザップ集を参考にしながら調整を繰り返すと良い • TypeScriptでカスタムインストラクションを利⽤する場合、特に効果的だったもの ◦ ケースバイケースでの型定義 ◦ テストコードで守るべき内容 • ⽣成AIは友達。共存共栄。
© Findy Inc. ご清聴ありがとうございました 18