Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
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
1k
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
5.7k
「速く作る」から「正しく作る」へ ─ 生成AI時代の開発フロー改革の ロードマップと実行 ─
starfish719
3
14k
AI活用を推進するために ファインディが下した、一つの小さな決断
starfish719
1
410
生成AI時代のエンジニア育成 変わる時代と変わらないコト
starfish719
0
16k
【Claude Code】Plugins作成から始まったファインディの開発フロー改革
starfish719
0
1.2k
Findy AI+の開発、運用におけるMCP活用事例
starfish719
0
4.2k
生成AIが出力するテストコードのリアル よくあるコードと改善のヒント
starfish719
0
890
生成AI時代に若手エンジニアが最初に覚えるべき内容と、その学習法
starfish719
2
950
Other Decks in Programming
See All in Programming
Dockerfile CMD for Node.js
grazie1999
0
160
信頼性の目標を誰も求めてない
shubox
0
460
夏だ!祭りだ!祭りとはドメインモデリングでは?
ryugen04
0
490
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
3
460
이 함수, 실패하면 어떻게 되나요? null부터 Rich Errors까지, Kotlin 에러 처리 15년
haeti2
0
110
楽しそうなつよつよエンジニアと目が死んでる僕/A brilliant engineer having a blast, and dead-eyed me.
3l4l5
2
270
Swift愛好会と私(ウホーイ) / Swift Fan Club and Uhooi
uhooi
0
100
関東Kaggler会_NVIDIA_Nemotron_コンペ_振り返り
rick_ds
0
770
源内ハンズオン概要編
hideg
0
230
高専キャリア LT 発表内容
crysta1221
6
5.3k
業務時間外もAIに働いてもらう話
colorful12
3
9.5k
DynamoDBの基礎を振り返りながらベクトル検索機能を理解する
musan
3
260
Featured
See All Featured
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
580
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
240
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
A better future with KSS
kneath
240
18k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
460
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
300
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
430
Being A Developer After 40
akosma
91
590k
GraphQLとの向き合い方2022年版
quramy
50
15k
Navigating Team Friction
lara
192
16k
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