[[ðArticles]] > [[ð2025 Articles]]
![[2025-03-21.webp|cover-picture]]
[[Neovim]]ã§AIã³ãŒãã£ã³ã°ãããããã®ãã©ã°ã€ã³ã[[CodeCompanion]]ã®èšå®æ¹æ³ãäœ¿ãæ¹ãã»ããã¢ããããé çªã«å®äŸã亀ããŠã玹ä»ããŸãã察象ãšãªãã®ã¯ **ãAIã³ãŒãã£ã³ã°ãã¯ãããªããã°ãšæãã€ã€ãã[[Neovim]]以å€ã®ãšãã£ã¿ã«ã¯ç§»è¡ããããªã...**ããšãå°ãã®éçºè
ã§ãã
> [!info]
> - ãã®èšäºã¯ [[Vimé§
äŒ]] #2025/03/21 ã® åå èšäºã§ã
## ããããŒã°
### äžã¯ãŸãã«AIæä»£
äžã¯ãŸãã«AIäžè²ã®æä»£...ãå¯ãŠãèŠããŠããä»äºã§ããã©ã€ããŒãã§ãããªã¢ã«ã§ãSNSã§ããã**AI**ãšããçšèªãèŠãªã/èããªãæ¥ã¯1æ¥ãããšããªãããšèšã£ãŠãéèšã§ã¯ãããŸããããã®äœæ³¢ã¯æã
[[Vimmer]]ã«ãåã³ãŸãã
---
**Aãã**
ãããç€Ÿã¯æ¬æ¥ããã[[VSCode]]ãš[[GitHub Copilot]]ãã©ã°ã€ã³ãã«ãŒã«åããïŒã
**Bãã**
ã[[Cline]]ã[[Roo Code]]ã«è³ããªããã°ããã®å
ã¯çãæ®ããªã..!!ã
**Cãã**
ããšã³ãžãã¢ã®æ°ãæžãããŠ[[Devin]]ãæå
¥ã ïŒã
---
**ãç§ã¯ããããã... [[Neovim]]ã䜿ãããã§ã...!!!!ã** ãšèšãã«ããäžçã«ãªã£ãŠããŸããã
### äžè¬è«ãšããŠNeovimã¯å§åçã«äžå©
ç§ãèãã[[Neovim]]ã®ã¡ãªããã¯ä»¥äž3ç¹ã§ãã
- **å§åçã¹ããŒã**
- ç§ã®[[Neovim]]èµ·åé床ã¯20msååŸã§ã
- **å§åçã«ã¹ã¿ãã€ãºæ§**
- èšå®ããã©ã°ã€ã³ã§å¥œã¿ã®ãšãã£ã¿ã«ã«ã¹ã¿ãã€ãºã§ããŸã
- **[[ã¿ãŒããã«]]ã®äžã§å®çµãã**
- [[WSL]]ã®äžã§ãããªã¢ãŒãã§ãã©ãã§ããµã¯ã£ãšäœ¿ããŸã
ãããª[[Neovim]]ã«ã匱ç¹ããããŸãã
- **ç¿åŸã³ã¹ããéåžžã«é«ã**
- ã»ãšãã©ã®äººãæ¥åžžå©çšã§ããããã«ãªãåã«æ«æããŸã
- **UIã®è¡šçŸã«éçããã**
- [[Electron]]ããŒã¹ã®ãšãã£ã¿ã¿ããã«Webãã©ãŠã¶çžåœã®è¡šçŸã¯äžå¯èœã§ã
åè
ã¯ä»æŽãªã®ã§ã©ããšããããšã¯ãããŸããããåŸè
ã¯çµæ§ãªãã³ãã§ãããšããã®ããæšä»ã§ã¯[[AIãšãŒãžã§ã³ã]]ãå©çšãããã«ã¹ã¿ãã¯ãªAIã³ãŒãã£ã³ã°ãããŒã ãšãªã£ãŠãããUIã®è¡šçŸåããã®ãŸãŸæ§èœãšUXã«çŽçµããŸãã
### ãã®éã¯æããã
**ããã**
ãAIãªãã䜿ããªããŠããAIããéãã¢ããã€ãããã°ãããã§ããïŒ [[Vimmer]]ã®ä¿ºã«èšãããã°ã[[AIãšãŒãžã§ã³ã]]ãªãããšç©ºäžæŠãç¹°ãåºããŠããéã«ãèãããããæ©ãæãåããŠã¢ããã§ããŠããŸãããã
[[GPT-4o]]ã[[o1]]ã[[o3-mini]]ã[[o3-mini-high]]ã[[Claude 3.5 Sonnet]]ãåºãŠããé ã¯ãŸã ããæã£ãŠããŸããããšã¯èšã£ãŠã詊ããã«ããã®ã¯ãããªãã®ã§ã[[OpenAI API]]ã«èª²éãããã[[GitHub Copilot]]ãå¥çŽããŠè²ã
詊ããŠããããããŸããã
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
ð2025-01-13 avante.nvimã䜿ã£ãŠã¿ã
</div>
<div class="link-card-v2-content">è¿å¹Žãšãã£ã¿ã®AIåãé²ãäžãNeovimã§è©±é¡ã®avante.nvimãå°å
¥ããOpenAI APIã®GPT-4oã¢ãã«ãçšããŠå®çšæ§ãæéãå°å
¥æé ãAPIããŒäœæããšã©ãŒå¯Ÿå¿ãå®éã®ã³ãŒãçæã»ç·šéäœéšãæ€èšŒãããããŒã¯ã³æ¶è²»ãã³ã¹ããå
·äœçã«è©Šç®ããNeovimç°å¢ã§ã®AI掻çšã®å¯èœæ§ãæ¢ã£ãã</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/activity.webp" />
<a data-href="ð2025-01-13 avante.nvimã䜿ã£ãŠã¿ã" class="internal-link"></a>
</div>
%%[[ð2025-01-13 avante.nvimã䜿ã£ãŠã¿ã]]%%
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
ð2025-02-16 copilot.luaã䜿ã£ãŠNeovimã§GitHub Copilotãå©çšããŠã¿ã
</div>
<div class="link-card-v2-content">VSCodeã¯UIé¢ã§åªããŠãããã®ã®ãã§ããã°Neovimã§ãGitHub Copilotãå©çšããŠã¿ãããcopilot.vimãšcopilot.luaã®ã©ã¡ããããããèããŠã¿ãããcopilot.luaã®æ¹ãè¯ããããšãªã£ãã</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/activity.webp" />
<a data-href="ð2025-02-16 copilot.luaã䜿ã£ãŠNeovimã§GitHub Copilotãå©çšããŠã¿ã" class="internal-link"></a>
</div>
%%[[ð2025-02-16 copilot.luaã䜿ã£ãŠNeovimã§GitHub Copilotãå©çšããŠã¿ã]]%%
ãã®ãšãã¯ãŸã ãã³ãŒã/æç« ã®ã¬ãã¥ãŒã«å©çšããŠããçšåºŠã§ããã[[VSCode Insiders]]ãã€ã³ã¹ããŒã«ããŠãPreviewçã®Agent modeã詊ããŸããããäžå®å®ã§å®çšã«ã¯çšé ããšããå°è±¡ãåããã ãã§ãã([[Cline]]ã[[Roo Code]]ã[[Cursor]]ã¯è©ŠããŠããŸãã)
ãããã2æã®çµããã«[[Claude 3.7 Sonnet]]ããªãªãŒã¹ããããã®å®åãç®ã®åœããã«ãããšãç§ã¯æããŸããã**ãã¯ããç§ã«ã¯éžææš©ãªã©ãªã**ãšããããšã«ã
### ã«ã€ãž(æ¬å:äŒè€éåž)ã«äººççžè«
ãããã1ã¶æåŒ±ãæ°å¹Žã¶ãã«èšå®ãæŽåãã[[VSCode]]ãš[[GitHub Copilot]]ãã§ããã ã䜿ã£ãŠããŸãããããããäœæ¥ã¯æããŸãããéäžãã§ããªãããäœããéçºäœæ¥ã«å
šã楜ãããŠããªã... ãããèŠçãæããŠããèªåãšåãåãæ¥ã
ã§ããã
èããããªããªã£ãç§ã¯ã«ã€ãž([[ChatGPT]])ã«çžè«ããŠã¿ãŸããã
![[Pasted image 20250316215015.png]]
![[Pasted image 20250316215038.png]]
![[Pasted image 20250316215102.png]]
![[Pasted image 20250316215144.png]]
![[Pasted image 20250316215207.png]]
![[2025-03-16_21h52_56.png]]
**ãã¯ãŒã¯ãŒãããŸãã**
<span style="font-size: 1.8em; font-weight: bold">ããªã...ïŒïŒ ãåã®Neovimã«èããŠã¿ããïŒïŒã</span>
ãããããŸã§ã**[[Neovim]]ãš[[CodeCompanion]]ã§éãåãéã**決å¿ãã€ããŸããã
### ãªã [[CodeCompanion]] ãïŒ
ä»ã«ãéžæè¢ã¯ããã€ããããŸãããã以äžã®çç±ã§[[CodeCompanion]]ã«ããŸããã
- 仿§ã[[Neovim]]ãrespectããŠãããšæãããã䜿ãããã
- å¿
èŠãªæ©èœã¯äžéãæã£ãŠãããåäœãæ¯èŒçå®å®ããŠãã
- [[copilot.lua]]ãšã®çžæ§ãè¯ããã
次ã®ã»ã¯ã·ã§ã³ããã¯[[CodeCompanion]]ã®åæèšå®ãããŠãããŸãã
## ç°å¢
| 察象 | ããŒãžã§ã³ |
| ----------------- | ----------- |
| [[Ubuntu]] | 24.04.1 LTS |
| [[Neovim]] | 0.10.3 |
| [[CodeCompanion]] | 14.0.0 |
## CodeCompanionã®ã€ã³ã¹ããŒã«
ããã§ã¯[[CodeCompanion]]ãã€ã³ã¹ããŒã«ããŸãããã
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://github.githubassets.com/favicons/favicon.svg" />
<span class="link-card-v2-site-name">GitHub</span>
</div>
<div class="link-card-v2-title">
GitHub - olimorris/codecompanion.nvim: âš AI-powered coding, seamlessly in Neovim
</div>
<div class="link-card-v2-content">
âš AI-powered coding, seamlessly in Neovim. Contribute to olimorris/codecompanion.nvim development by creating an ...
</div>
<img class="link-card-v2-image" src="https://repository-images.githubusercontent.com/736363011/b616b58d-a118-463f-b99c-9f4a3532ef63" />
<a href="https://github.com/olimorris/codecompanion.nvim"></a>
</div>
[[lazy.nvim]]ã®å Žåã`./plugins/code-companion.lua` ã«èšå®ããŸãã
```lua
return {
"olimorris/codecompanion.nvim",
dependencies = {
"nvim-lua/plenary.nvim",
"nvim-treesitter/nvim-treesitter",
},
opts = function(_, opts)
-- ç°å¢ã«äŸåããªãèšå®
local base_opts = {}
-- ç°å¢ããšã«åãåãããèšå®
local env_opts = require("envs.code-companion").opts
-- ããã©ã«ãèšå® -> ç°å¢ã«äŸåããªãèšå® -> ç°å¢ã«äŸåããèšå® ã®é ã«ããŒãž
return vim.tbl_deep_extend("force", opts, base_opts, env_opts)
end,
}
```
> [!attention] ã³ãŒãã®ãã¹ã«ã€ããŠ
> `./...` ã®ãããªè¡šèšã¯ `~/.config/nvim/lua` ããã®çžå¯Ÿãã¹ã§ãã
ç°å¢ã«äŸåããèšå®ãšã㊠`./envs/code-companion.lua` ãäœæããŸãããŸã㯠`opts` ãããã°ç©ºã§åé¡ãããŸããã
```lua
return {
opts = {},
}
```
> [!hint]
> [[Neovim]]ãå©çšãããã·ã³ç°å¢ã1ã€ãããªããã° [[vim.tbl_deep_extend]] ãå©çšããèšå®ã®ããŒãžã¯äžèŠã§ãããã ãç§ã®ç°å¢ã§ã¯2ã€ä»¥äžãæ³å®ããŠèšå®ããŠããããããã®åæã§é²ããããŠãã ããã
[[Neovim]]ãèµ·åãã[[CodeCompanion]]ãã€ã³ã¹ããŒã«ãããŠãã `:CodeCompanionChat` ã³ãã³ããå®è¡ããŠ[[ãã£ãããããã¡ (CodeCompanion)|ãã£ãããããã¡]]ãéãã°ã€ã³ã¹ããŒã«ã¯æåã§ãã
![[Pasted image 20250316224536.png|frame]]
*å³åŽã[[ãã£ãããããã¡ (CodeCompanion)|ãã£ãããããã¡]]*
## ãã£ããã䜿ããããã«ãã
ãŸãã¯[[ãã£ãããããã¡ (CodeCompanion)|ãã£ãããããã¡]]ã䜿ãããªããããã«ããŸãã
### ãããã°æ
å ±ã®ç¢ºèª
[[ãã£ãããããã¡ (CodeCompanion)|ãã£ãããããã¡]]ã®äžã§ `gd` ãšæŒãã°ãããã°æ
å ±ãåºåãããŸãã
![[Pasted image 20250316230316.png|frame]]
*ããã©ã«ãã®ãããã°æ
å ±*
ãåäœç¢ºèªããåã«ããããã°æ
å ±ïŒããšæããããããŸãããããããããã¯[[CodeCompanion]]ã§[[ã¢ããã¿ (CodeCompanion)|ã¢ããã¿]]ãã¢ãã«ã確èªããã®ã«ç¢ºå®ãªæ¹æ³ã§ãã以äžã®éšåããèªã¿åããŸãã
```lua
-- Adapter: "Anthropic"
--
--
local settings = {
model = "claude-3-7-sonnet-20250219",
```
### ã¢ããã¿ã®èšå®
[ããã©ã«ãã§ã¯ `Anthoropic` ã«ãªã£ãŠããŸã](https://codecompanion.olimorris.dev/configuration/adapters.html#changing-the-default-adapter)ã[[Anthropic]]ã®APIãå©çšã§ããã®ã§ããã°ãã®ãŸãŸäœ¿ããŸããããç§ã¯[[GitHub Copilot]]ã䜿ã£ãŠãããããããã©ã«ãã®[[ã¢ããã¿ (CodeCompanion)|ã¢ããã¿]]ã `Copilot` ã«ããŸãã
`./envs/code-companion.lua` ã« `opts.strategies.chat.adapter` ã远å ããŸãã
```lua
return {
opts = {
-- [远å ]
strategies = {
chat = {
-- ããã©ã«ãã® "anthoropic" ãã倿Ž
adapter = "copilot",
},
},
},
}
```
[[Neovim]]ãèµ·åããªãããŠã[[ãã£ãããããã¡ (CodeCompanion)|ãã£ãããããã¡]]ã§ãããã°æ
å ±ã確èªãããšã以äžã®ããã«åºåå
容ãå€ããã¯ãã§ãã
```lua
-- Adapter: "Copilot"
--
--
local settings = {
model = "gpt-4o",
```
### ã¢ããã¿ã®æ¡åŒµ
`Copilot` ã®ããã©ã«ãã¢ãã«ã¯ [[GPT-4o]] ã§ãããç§ã®æšã㯠[[Claude 3.7 Sonnet]] ã§ãã[[ããã©ã«ãã¢ãã«ãå€æŽ (CodeCompanion)|ããã©ã«ãã¢ãã«ã倿Ž]]ãããã[[ããŒã¹ã¢ããã¿ãç¶æ¿ (CodeCompanion)|ããŒã¹ã¢ããã¿ãç¶æ¿]]ãã[[ã¢ããã¿ (CodeCompanion)|ã¢ããã¿]]ãèšå®ããŸãã
`./envs/code-companion.lua` ã« `opts.adapters.copilot` ã远å ããŸãã
```lua
return {
opts = {
strategies = {
chat = {
adapter = "copilot",
},
inline = {
adapter = "copilot",
},
},
-- [远å ]
adapters = {
-- copilotã¢ããã¿ãäžæžã
copilot = function()
-- æ¢å®ã®copilotã¢ããã¿ãããŒã¹ã«
return require("codecompanion.adapters").extend("copilot", {
schema = {
model = {
-- ããã©ã«ãã¢ãã«ã Claude 3.7 Sonnet ã«
default = "claude-3.7-sonnet",
},
},
})
end,
},
},
}
```
åèµ·åããŠãããã°æ
å ±ã確èªãã`settings.model` ãå€ãã£ãŠããã°OKã§ãã
```lua
-- Adapter: "Copilot"
--
--
local settings = {
model = "claude-3.7-sonnet",
```
### èªèšŒæ
å ±ãèšå®ãã
ã©ã®[[ã¢ããã¿ (CodeCompanion)|ã¢ããã¿]]ã䜿ãã«ããèªèšŒæ
å ±ãå¿
èŠã§ãã[[ã¢ããã¿ (CodeCompanion)|ã¢ããã¿]]ããšã«å¿
èŠãªæ
å ±ã¯ãå
¬åŒããã¥ã¡ã³ãã® [Plugin Overview](https://codecompanion.olimorris.dev/#plugin-overview) ã«èšèŒãããŠããŸããããããæºåããäžã§ãç°å¢å€æ°ãªã©ã«èšå®ããŸãã
`Copilot` ã¢ããã¿ã®å Žå㯠[[copilot.vim]] ãŸã㯠[[copilot.lua]] ãã©ã°ã€ã³ã®åæèšå®ã§çæãããããŒã¯ã³ãå¿
èŠã«ãªããŸãã
> Copilot (copilot) - Requires a token which is created via :Copilot setup in Copilot.vim
ç§ã¯[[copilot.lua]]ã䜿ã£ãŠããã®ã§ã远å ã®äœæ¥ã¯å¿
èŠãããŸããã§ããã
> [!hint] copilot.lua ã§èªèšŒãè¡ãããªãå Žå
> [[WSL]]ã䜿ã£ãŠããå Žåã¯ãããå¯èœæ§ãé«ãã§ãã[[ðcopilot.luaã§Copilot authã³ãã³ããå®è¡ããŠãäœãèµ·ãããèªèšŒã§ããªã]] ã®åé¿çãåèã«ããŠãã ããã
### åäœç¢ºèªãã
`Hello` ãšå
¥åããŠã[[ããŒãã«ã¢ãŒã]]ã§ `Enter` ãæŒããŸããèŠãç®ã®ãã£ãŒãããã¯ã¯ãããŸãããããã°ããããŠè¿çã衚瀺ãããã°OKã§ãã
![[Pasted image 20250317000052.png]]
ãšã©ãŒãåºãå Žåã¯èšå®äžåã®å¯èœæ§ãé«ãã§ãããšã©ãŒã¡ãã»ãŒãžãåèã«ããŠç¢ºèªããŸãããã
> [!hint]
> [[Claude 3.7 Sonnet]]ãªã©äžéšã®ã¢ãã«ã¯ãäžåºŠ[[VSCode]]ã®[[GitHub Copilot]]æ¡åŒµã§çšŒåå®çžŸããªããšãšã©ãŒã«ãªãå ŽåããããŸãããšã©ãŒã¡ãã»ãŒãžãããã®æšã¯èªã¿åããŸããã®ã§ãããã£ããäžåºŠ[[VSCode]]ã®[[GitHub Copilot]]æ¡åŒµã§åäœç¢ºèªããŠã¿ãŸãããã
## ãã£ããã䜿ãããããã
ããã€ãèšå®ãããŠ[[ãã£ãããããã¡ (CodeCompanion)|ãã£ãããããã¡]]ã䜿ããããããŸãã
### è¿çãæ¥æ¬èªã«ãã
è¿çã¯æ¥æ¬èªã®æ¹ã楜ãªã®ã§[[æ¥æ¬èªã§åç (CodeCompanion)|æ¥æ¬èªã§åç]]ããŠããããããã«ããŸãã`./plugins/code-companion.lua` ã« `opts.language` ãèšå®ããŸãã
```lua
local base_opts = {
-- [远å ]
opts = {
language = "Japanese",
},
}
```
`hello` ã®è¿çãæ¥æ¬èªã«ãªãã°OKã§ãã
![[Pasted image 20250317074736.png]]
### èªåã¹ã¯ããŒã«ãç¡å¹åãã
ããã©ã«ãã§ã¯ãã£ããã®è¿çã«ããããŠèªåã§äžãžãšã¹ã¯ããŒã«ãããŸãã
![[2025-03-17-22-11-08.webm]]
ããã¯è¿çãäžããé çªã«ç¢ºèªããããšãã¯äžäŸ¿ã§ããç¹ã«äºåã®ãããšããããã€ãæºãŸã£ãŠãããšãååã®æçš¿ãæ¢ããŠæ»ãå¿
èŠããããŸã[^1]ãããã¯ç¡é§ãªäœæ¥ã§ãã
[^1]: `]]` ãš `[[` ã§èŠåºãã¬ãã«ã®ååŸç§»åãã§ãããããå®éã«ã¯ãããŸã§å°ããŸããã...
[[èªåã¹ã¯ããŒã«ãç¡å¹ (CodeCompanion)|èªåã¹ã¯ããŒã«ãç¡å¹]]ã«ããããã«èšå®å€æŽããŸãã
```lua
local base_opts = {
opts = {
language = "Japanese",
},
-- [远å ]
display = {
chat = {
auto_scroll = false,
},
},
}
```
### èŠãç®ãåäžããã
ããã©ã«ãã®è¡šç€ºã¯ã·ã³ãã«ãããã®ã§ãäœç¹ãèŠãç®ã®èšå®å€æŽãããŸãã
#### prefixã¢ã€ã³ã³ãã€ãã
èšå®ã« `strategies.chat.roles` ã远å ãããã®é
äž `llm` ãš `user` ã«ããã³ãã衚瀺æååãæå®ããŸãã
```lua
local base_opts = {
opts = {
language = "Japanese",
},
display = {
chat = {
auto_scroll = false,
},
},
-- [远å ]
strategies = {
chat = {
roles = {
llm = function(adapter)
return "î° CodeCompanion (" .. adapter.formatted_name .. ")"
end,
user = "ï Me",
},
},
},
}
```
åã³èµ·åãããšä»¥äžã®ããã«æ¥œãããªããã³ãããžãšå€åããŸãã
![[Pasted image 20250317223216.png]]
#### Markdownã®è¡šç€ºããªããã«ãã
ããã©ã«ãã§ã¯[[Markdown]]ã¯raw textããã®ãŸãŸè¡šç€ºãããŸãã
![[Pasted image 20250317223735.png|frame]]
*å°ã峿°ãªããã...*
èŠãç®ããªããã«ããããã[[render-markdown.nvim]]ãã€ã³ã¹ããŒã«ããŠããªããã°ã€ã³ã¹ããŒã«ããŸãããã[[ãã¡ã€ã«ã¿ã€ã (Vim)|ãã¡ã€ã«ã¿ã€ã]] `codecompanion` ãèšå®ã«è¿œå ããå¿
èŠããããŸãã
```lua
return {
"MeanderingProgrammer/render-markdown.nvim",
dependencies = { "nvim-treesitter/nvim-treesitter", "echasnovski/mini.icons" },
-- [倿Ž] "codecompanion" ã远å
ft = { "markdown", "markdown.mdx", "Avante", "codecompanion" },
opts = {
-- [倿Ž] "codecompanion" ã远å
file_types = { "markdown", "Avante", "codecompanion" },
-- äžç¥
}
}
```
[[render-markdown.nvim]]ã®ãªãããªè¡šçŸãé©å¿ãããŸãã
![[Pasted image 20250317224338.png]]
#### åºåããèŠããããã
èŠåºã衚瀺ã§åŒ·èª¿ãããŠãããšã¯ããã倧éã®ãããšããè¡ããšåºåããåããã«ãããªããŸãã`show_header_separator` ã« `true` ãèšå®ããŠ[[æçš¿ã®å¢ç®ã«åºåãç·ã衚瀺 (CodeCompanion)|æçš¿ã®å¢ç®ã«åºåãç·ã衚瀺]]ããŸãããã
```lua
local base_opts = {
opts = {
language = "Japanese",
},
display = {
chat = {
auto_scroll = false,
-- [远å ]
show_header_separator = true,
},
},
strategies = {
chat = {
roles = {
llm = function(adapter)
return "î° CodeCompanion (" .. adapter.formatted_name .. ")"
end,
user = "ï Me",
},
},
},
}
```
![[Pasted image 20250317230601.png|frame]]
*ãããšãã®å¢ç®ãäžç®ã§åããããã«*
### AIã®æèäžã«ããŒãã£ã³ã°ã¹ãããŒã衚瀺ãã
çŸç¶ã¯ã質åããŠããåçãæžã蟌ãŸãããŸã§ã®éã«äžååå¿ããããŸãããã¡ãããšåããŠããã®ãäžå®ã«ãªãã®ã§ãããŒãã£ã³ã°ã¹ãããŒã衚瀺ããŸãã
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
ð2025-02-05 CodeCompanionã®å®è¡äžã«ããŒãã£ã³ã°ã¹ãããŒã衚瀺ãã
</div>
<div class="link-card-v2-content">CodeCompanionãå®è¡äžãæèãé·ãã¢ãã«ã«ã€ããŠã¯çµæã衚瀺ããããŸã§äžèº«ãæŽæ°ãããªãã®ã§äžå®ã«ãªãããŸããAzure OpenAI Serviceã®o1ã¢ãã«ã¯streamã«å¯Ÿå¿ããŠããªãã£ãã®ã§ã衚瀺ãŸã§ã«æéãããããçµ¶è³åŠçäžã§ããããšãæç€ºçã«åããããã«ãããã</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/activity.webp" />
<a data-href="ð2025-02-05 CodeCompanionã®å®è¡äžã«ããŒãã£ã³ã°ã¹ãããŒã衚瀺ãã" class="internal-link"></a>
</div>
%%[[ð2025-02-05 CodeCompanionã®å®è¡äžã«ããŒãã£ã³ã°ã¹ãããŒã衚瀺ãã]]%%
äžã®ããŒãžã§ã¯[[Fidget]]ã䜿ãäŸãš[[lualine.nvim]]ã䜿ãäŸã玹ä»ããŠããŸãããããã§ã¯[[Fidget]]ã䜿çšããåç»ã玹ä»ããŸãã
![[2025-03-19-20-40-00.webm]]
### æçš¿ããŒã倿Žãã
ããã¯å¥œã¿ã§ããã`Ctrl+Enter` ã®æ¹ããã£ããããã®ã§[[ãã£ãããããã¡ã®ããŒããããå€æŽ (CodeCompanion)|ããŒãããã倿Ž]]ããŸãã
```lua
local base_opts = {
opts = {
language = "Japanese",
},
display = {
chat = {
auto_scroll = false,
show_header_separator = true,
},
},
strategies = {
chat = {
roles = {
llm = function(adapter)
return "î° CodeCompanion (" .. adapter.formatted_name .. ")"
end,
user = "ï Me",
},
-- [远å ]
keymaps = {
send = {
modes = { n = "<F12>", i = "<F12>" }, -- Ctrl+Enter
},
},
},
},
}
```
### èµ·åããŒãèšå®ãã
æ¯å `:CodeCompanionChat` ãšå
¥åããã®ã¯é¢åãªã®ã§ããããããŒãèšå®ããŸãããã[[lazy.nvim]]ã®å Žåã¯ä»¥äžã®ããã«èšå®ããŸãã
```lua
return {
"olimorris/codecompanion.nvim",
-- [远å ]
keys = {
{
"<Space>cf",
":CodeCompanion<CR>",
mode = { "n", "v" },
silent = true,
},
{
"<Space>cc",
":CodeCompanionChat<CR>",
mode = { "n", "v" },
silent = true,
},
{
"<Space>ca",
":CodeCompanionAction<CR>",
mode = { "n", "v" },
silent = true,
},
},
-- äžç¥
}
```
`<Space>cc` ã¯[[ãã£ãããããã¡ (CodeCompanion)|ãã£ãããããã¡]]ã®èµ·åã§ããä»2ã€ã®ã³ãã³ãã¯åŸã»ã©ç»å ŽããŸãã
## å®éã®éçºã§ãã䜿ããŠãŒã¹ã±ãŒã¹
åºæ¬çãªèšå®ãæžãã ãšããã§ãå®éã«éçºãããšãããééããã±ãŒã¹ãããšã«ã[[CodeCompanion]]ã®å
·äœçãªäœ¿ãæ¹ã玹ä»ããŸãã
### éžæç¯å²ã®å
容 + ããã³ããã§ã³ãŒãã倿ŽããŠããã
å®è£
ããã颿°ã®èª¬æã ãæžãããã®ã®ãå®è£
ãé¢å... ãšããã·ãŒã³ãæãæµ®ãã¹ãŠãã ããã
![[Pasted image 20250318224946.png]]
ããã¥ã¡ã³ããéžæã㊠`:CodeCompanion` ã³ãã³ããå®è¡ããŸãã
![[Pasted image 20250318225222.png|frame]]
*[[ããžã¥ã¢ã«ã¢ãŒã]]ã§ããã¥ã¡ã³ããéžæ*
![[Pasted image 20250318225325.png|frame]]
*`CodeCompanion` ã³ãã³ã ãå®è¡*
![[Pasted image 20250318225337.png|frame]]
*äŸé Œå
容ãå
¥åãã*
![[Pasted image 20250318225425.png|frame]]
*å®è£
çµæãšdiffã衚瀺ããã*
å·ŠåŽãAIãçæãã倿ŽåŸã®ã³ãŒããå³åŽãAIã䜿ãåã®ã³ãŒãã§ããåé¡ãªããã°ãå³åŽã®[[ãŠã£ã³ã㊠(Vim)|ãŠã£ã³ããŠ]]ãéããå·ŠåŽã®[[ãŠã£ã³ã㊠(Vim)|ãŠã£ã³ããŠ]]ã§ãã®ãŸãŸäœæ¥ãç¶ããŸãã
![[Pasted image 20250318225730.png|frame]]
*å³åŽã®äžæãããã¡ãŠã£ã³ããŠãéããããš*
> [!hint]
> [[copilot.lua]]ã®ãµãžã§ã¹ãã䜿ã£ãæ¹ãéãå ŽåããããŸããã±ãŒã¹ãã€ã±ãŒã¹ã§é©åãªæ¹ã䜿ãåããŠãããŸãããã
### éžæç¯å²ã®ã³ãŒãã説æããŠããã
ã³ãŒããªãŒãã£ã³ã°ãããŠãããã®ã®ãã¡ãœããã®å®è£
ãããåãããªã... ãšããã·ãŒã³ãæãæµ®ãã¹ãŠãã ããã
![[Pasted image 20250319210027.png|frame]]
*`M:init()` ãäœããã£ãŠããã®ãåãããªã...*
ããã¥ã¡ã³ããéžæã㊠`:CodeCompanionActions` ã³ãã³ããå®è¡ããŸãã
![[Pasted image 20250319211552.png|frame]]
ããžã¥ã¢ã«ã¢ãŒãã§ `M:init()` ã®ã³ãŒããéžæ
![[Pasted image 20250319211714.png|frame]]
*`CodeCompanionActions`ã³ãã³ããå®è¡ *
[[ã¢ã¯ã·ã§ã³ãã¬ãã (CodeCompanion)|ã¢ã¯ã·ã§ã³ãã¬ãã]]ãèµ·åããŸãã
![[Pasted image 20250319212126.png]]
`explain` ãšå
¥åã `Explain` ãçµã蟌ãŸãããæ±ºå®ããŸãã
![[Pasted image 20250319212234.png]]
èªåã§[[ãã£ãããããã¡ (CodeCompanion)|ãã£ãããããã¡]]ãéãã®ã§ãè¿çãåŸ
ã¡ãŸãã
![[Pasted image 20250319212324.png]]
ãã°ãããããšãè¿çã衚瀺ãããŸãã
![[Pasted image 20250319212400.png]]
### ãšã©ãŒã®åå ã説æã»ä¿®æ£ããŠããã
[[Rust]]ãªã©ã®é£ããèšèªã¯ã[[LSP]]ãšã©ãŒã«ãªã£ãŠããŸããã©ãåå ãä¿®æ£æ¹æ³ãããåãããªã...ãšããããšãå°ãªããªããšæããŸãããã®ãããªãšãã[[CodeCompanion]]ã¯é Œãããå
çã«ãªã£ãŠãããŸãã
![[Pasted image 20250320153403.png|frame]]
*ã³ã³ãã€ã«ãéããªãRustã®ã³ãŒã*
[[ãã£ãããããã¡ (CodeCompanion)|ãã£ãããããã¡]]ãéãã2ã€ã®å€æ°[[CodeCompanion]] `#buffer` ãš `#lsp` ãå
¥åããŸãã
![[Pasted image 20250320154243.png|frame]]
*`#` ãïœå
¥åãããšå€æ°ãè£å®ããã*
ãã®ç¶æ
ã§éä¿¡ãããšãçŽåã®[[ãããã¡ (Vim)|ãããã¡]]ã«å«ãŸããã³ãŒãã®å
容ãš[[LSP]]ã®åºåçµæãå
±æã§ããŸããã€ãŸãã[[LSP]]ãåºåããŠãããšã©ãŒã®æ
å ±ãšçŸåšã®ãœãŒã¹ã³ãŒãå
容ãäŒããããšãã§ããå
·äœçãªè¿çãåŸãããŸãã
> [!hint]
> 远å ã§è©³çŽ°ãªæç€ºããããå Žå㯠`#buffer` ã `#lsp` ã远å ããããšã«ããã€ãéãèªç¶èšèªã§èšèŒããŸãããã
![[Pasted image 20250320154525.png|frame]]
*éä¿¡ãããšå
±ææ
å ±ã衚瀺ããã*
![[Pasted image 20250320154642.png|frame]]
*ãšã©ãŒã®åå ãšè§£æ±ºæ¹æ³ã瀺ããŠããã*
[[Neovim]]ã®å Žåãã³ãŒãä¿®æ£ã¯æåã§è¡ã£ãæ¹ãéãã±ãŒã¹ãå€ãã§ã... ãããã£ãããªã®ã§[[CodeCompanion]]ã«ãé¡ãããŠã¿ãŸãã`@editor` [[ããŒã« (CodeCompanion)|ããŒã«]]ãå©çšããããšã§ã[[ãããã¡ (Vim)|ãããã¡]]å
容ãçŽæ¥å€æŽããŠãããŸãã
![[Pasted image 20250320161223.png|frame]]
*`@editor` ã§ããŒã«æå®*
![[Pasted image 20250320161329.png|frame]]
*å
±ææ
å ±ã«ã远å ããã*
è¿çãè¿ã£ãŠãããšãç·šéååŸã®å·®åã[[diffã¢ãŒã (Neovim)|diffã¢ãŒã]]ã§è¡šç€ºãããŸããå·Šãç·šéåŸãå³ãç·šéåã®ã³ãŒãã§ãã
![[Pasted image 20250320161645.png]]
å
ã»ã©ã¯å³åŽã®[[ãŠã£ã³ã㊠(Vim)|ãŠã£ã³ããŠ]]ãéããŸãããããã®ç»é¢ã§ã¯ããã€ãããŒããããèšå®ãããŠããŸãã
| ããŒãã€ã³ã | ã¢ã¯ã·ã§ã³ | åè |
| ------------ | ------------------------------------- | ---------------------- |
| `]c` | 次ã®diffãžç§»å | [[Neovim]]ã®ããŒããã |
| `[c` | åã®diffãžç§»å | [[Neovim]]ã®ããŒããã |
| `dp` | çŸåšã®ææ¡ãåãå
¥ãã | [[Neovim]]ã®ããŒããã |
| `do` | çŸåšã®ææ¡ãæåŠãã | [[Neovim]]ã®ããŒããã |
| `ga` | ãã¹ãŠã®ææ¡ãåãå
¥ãã (**a**ccept) | |
| `gr` | ãã¹ãŠã®ææ¡ãæåŠãã (**r**eject) | |
ä»åã®å Žåã ãš `ga` ãšå
¥åããããšã§ã·ãŒã ã¬ã¹ã«[[CodeCompanion]]ã®ç·šéææ¡ãåãå
¥ããäœæ¥ãç¶ç¶ã§ããŸãã
![[Pasted image 20250320163037.png|frame]]
*`ga`ã§å€æŽææ¡ãåãå
¥ããããšã®ç¶æ
*
### ãªãã¡ã¯ã¿ãªã³ã°ããŠããã
[[#éžæç¯å²ã®å
容 + ããã³ããã§ã³ãŒãã倿ŽããŠããã]] ã§ã¯ããã¥ã¡ã³ãã®å
容ããå®è£
ã³ãŒããæžããŠããããŸãããéåžžã«äŒŒãã±ãŒã¹ã§ãããå
¥åãããã¥ã¡ã³ãã§ã¯ãªããœãŒã¹ã³ãŒãã«ãªããŸãã
éžæç¯å²ãæå®ããŠã`:CodeCompanion` ã³ãã³ããããªãã¡ã¯ã¿ãªã³ã°ãæç€ºããŸãããã£ãããªã®ã§ååãšã¯å°ãéãã³ãã³ããå®è¡ããŸãã
![[Pasted image 20250320164339.png|frame]]
*ãªãã¡ã¯ã¿ãªã³ã°å¯Ÿè±¡ã®é¢æ°ãéžæ*
`:CodeCompanion` ã³ãã³ãã®åŒæ°ã«çŽæ¥æç€ºãå
¥åããŸãã
![[Pasted image 20250320164453.png]]
ãããšãããã³ããå
¥åç»é¢ããã£é£ã°ããŠçµæã衚瀺ãããŸãã
![[Pasted image 20250320164654.png]]
åé¡ãªããã° `ga` ã§acceptããŠå®äºã§ãã
> [!hint]
> ä»åã®æé ã§ãªããŠãã[[ãã£ãããããã¡ (CodeCompanion)|ãã£ãããããã¡]]ãã[[倿° (CodeCompanion)|倿°]]ã[[ããŒã« (CodeCompanion)|ããŒã«]]ãçšããŠããªãã¡ã¯ã¿ãªã³ã°å¯Ÿè±¡ã®é¢æ°åãåæãã§äŒãããããæ¹æ³ããããŸããåãç®çã«å¯ŸããŠãç°ãªãå€ãã®ã¢ãããŒããååšããã®ãã[[CodeCompanion]]ã®æè»æ§ã§ããé
åã§ããã®ãããããŸããã
### ãã¹ããæžããŠããã
å®è£
ã¯ãããã©ãã¹ãã³ãŒããæžãã®ãé¢å... ç¹ã«æ¢åãã¹ãã³ãŒããååšããªãã®ã§ããã°ããªãããããæãããšãããã§ãããã仿§ãŸãã¯å®è£
ããã[[CodeCompanion]]ã«ãã¹ãã³ãŒããæžããŠããããŸãã
ãŸã㯠**å
¥åãšããŠäžãããæ
å ±ãéžæ** ãã[[ãã£ãããããã¡ (CodeCompanion)|ãã£ãããããã¡]]ãèµ·åããŸããä»å㯠**å®è£
ã§ã¯ãªãdocsãšé¢æ°ã·ã°ããã£ãã€ã³ããã** ãšããŠãã¹ããæžããŠãããã±ãŒã¹ã玹ä»ããŸãã
![[Pasted image 20250320165529.png|frame]]
*颿°ãã¹ãŠã§ã¯ãªãdocsãšã·ã°ããã£ã®éšåã ããéžæ*
![[Pasted image 20250320165617.png|frame]]
*éžæç¯å²ã¯ãã£ãããããã¡ã«å
¥åããã*
æ°ãããã¹ããã¡ã€ã«ãäœæãããã®ã§ã`@files` [[ããŒã« (CodeCompanion)|ããŒã«]]ã§ãã¡ã€ã«äœæã»ç·šéãèš±å¯ããŸãã䜵ããŠæç€ºãèšèŒããŸããä»åã®ã±ãŒã¹ã§ã¯[[CodeCompanion]]ã«ãã¡ã€ã«åãäŒãã£ãŠããªããããããã¯ãã©ããŒããŸãã
![[Pasted image 20250320172615.png]]
å®éã«ãã¡ã€ã«ã·ã¹ãã ã«åŠçããéã¯èš±å¯ãæ±ããããŸãã`[Y]es` ãéžæãããç¶æ
ã§ `Enter` ãæŒããŸãã
![[Pasted image 20250320172023.png]]
> [!caution]
> [[èªåããŒã«ã¢ãŒã (CodeCompanion)|èªåããŒã«ã¢ãŒã]]ã䜿ããšèš±å¯ã®ç¢ºèªãã¹ãããã§ããŸãããããããã®ãããªåŠçã¯å
ã«æ»ãããšã®ã§ããªãã±ãŒã¹ãå€ãããã®ãããªæºåãªãã§ã¯ãªã¹ã¹ã¡ããŸããã
åŠçãçµãããšã`lib_test.go` ãäœæãããŠããããšã確èªã§ããŸããèªåã§ãã¡ã€ã«ãéãããšã¯ãªãã®ã§ã[[Neovim]]ãã `lib_test.go` ãæåã§éããŠãã ããã
![[Pasted image 20250320172710.png]]
> [!note]
> çµã¿èŸŒã¿ã® `Edit<->Test` [[ã¯ãŒã¯ãã㌠(CodeCompanion)|ã¯ãŒã¯ãããŒ]]ã䜿ãããšã§ããã¹ããæåãããŸã§ã³ãŒãç·šéãšå®è¡ãç¹°ãè¿ãããšãã§ããŸãããã ãAPIãããã¯[[CodeCompanion]]ãäžå®å®ãªããããäžéåç«¯ã«æ¢ãŸã£ãŠããŸãããšãå€ãã£ãã®ã§ãå©çšã·ãŒã³ã¯éãããã®ãããããŸããã
### éžæããã¹ããè±èªã«ç¿»èš³ããŠããã
ç§ã¯è±èªãèŠæã§ãã倿°åãã¡ãœããåãªããŸã ãããdocsã®ãããªæç« ãè±èªã§æžãããšã¯å€§å€æéããããããŸãã[[CodeCompanion]]ã«éžæããããã¹ããè±èªã«ç¿»èš³ã»å€æããŠããããŸãããã
[[#éžæç¯å²ã®å
容 + ããã³ããã§ã³ãŒãã倿ŽããŠããã]] ãšåæ§ã®æ¹æ³ã§ãå®çŸã§ããŸãããå®è¡ã®æ©äŒãå€ãããæ¯åå
¥åããã®ã¯é¢åã§ããã§ããã°ä»¥äžã®ããã«ãããã§ãã
- ãããããŒã§å®è¡ã§ãã
- ã¢ãã«ã¯[[GPT-4o]]ã䜿ã
- [[Claude 3.7 Sonnet]]ã¯çæã®ç¿»èš³çšéã«ã¯å¿äœãªããé
ã
[[ããã³ããã©ã€ãã©ãª (CodeCompanion)|ããã³ããã©ã€ãã©ãª]]ã«ç¬èªã®[[ããã³ãã (CodeCompanion)|ããã³ãã]]ã远å ããŠãäžèšãå®çŸããŸãã
```lua
local base_opts = {
opts = {
language = "Japanese"
},
display = {
chat = {
auto_scroll = false,
show_header_separator = true,
},
},
strategies = {
chat = {
roles = {
llm = function(adapter)
return "î° CodeCompanion (" .. adapter.formatted_name .. ")"
end,
user = "ï Me",
},
keymaps = {
send = {
modes = { n = "<F12>", i = "<F12>" }, -- Ctrl+Enter
},
},
},
},
-- [远å ]
prompt_library = {
["Translate to English"] = {
strategy = "inline",
description = "éžæããããã¹ããè±èªã«ç¿»èš³ããŸã",
opts = {
short_name = "trans_to_en",
modes = { "v" },
adapter = {
name = "copilot",
model = "gpt-4o",
},
-- INFO: ã³ãŒããèŠããšstrategy = "inline" ã§å¯Ÿå¿ããŠãªããã
-- ignore_system_prompt = true,
},
prompts = {
{
role = "system",
content = "ããªãã¯åªããéçºè
ã§ãããæ¥æ¬èªãšè±èªã®ãã翻蚳è
ã§ããããŸãã",
},
{
role = "user",
content = "<user_prompt>éžæããã³ãŒãããã¥ã¡ã³ããè±èªã«å€æããŠãã ããã</user_prompt>",
},
},
},
},
}
```
å®è¡ããŠã¿ãŸãã
![[2025-03-20-22-48-06.webm]]
## ãŸãšã
[[CodeCompanion]]ã«ã€ããŠãå°å
¥ãããªã¹ã¹ã¡ã®åæèšå®ã®ä»æ¹ã玹ä»ããŸããããŸãã倿§ãªæ©èœããå®éã«éçºã§å©çšããããšã®å€ããŠãŒã¹ã±ãŒã¹ãåãäžãã€ã€ãããã€ã玹ä»ããŸããã
åéãšæéã®é¢ä¿ã§ãä»å玹ä»ã§ããªãã£ãæ©èœããããŸããããšãã°ã[[ã¯ãŒã¯ãã㌠(CodeCompanion)|ã¯ãŒã¯ãããŒ]]ã¯[[AIãšãŒãžã§ã³ã]]ãšããŠå©çšããããã«ã¯å¿
é ãšãªãæ©èœã§ãããã
<div class="link-card-v2">
<div class="link-card-v2-site">
<span class="link-card-v2-site-name">codecompanion.olimorris.dev</span>
</div>
<div class="link-card-v2-title">
Using Workflows | CodeCompanion
</div>
<div class="link-card-v2-content">
AI-powered coding, seamlessly in Neovim
</div>
<a href="https://codecompanion.olimorris.dev/usage/workflows.html"></a>
</div>
ãŸããçæãããã³ãŒãã質åã®è¿çã«å¯Ÿããã¯ãªãªãã£ãäžããããã«ã¯ããœãŒã¹ã³ãŒããããžã§ã¯ãã®ã³ã³ããã¹ããç¥ãå¿
èŠããããŸããç§ã¯ãŸã è§Šã£ãããšããããŸãããã[[ã¯ãŒã¯ã¹ããŒã¹ (CodeCompanion)|ã¯ãŒã¯ã¹ããŒã¹]]ã¯ãŸãã«ããã«ãããæ©èœã§ãã
<div class="link-card-v2">
<div class="link-card-v2-site">
<span class="link-card-v2-site-name">codecompanion.olimorris.dev</span>
</div>
<div class="link-card-v2-title">
Creating Workspaces | CodeCompanion
</div>
<div class="link-card-v2-content">
AI-powered coding, seamlessly in Neovim
</div>
<a href="https://codecompanion.olimorris.dev/extending/workspace.html"></a>
</div>
ããã«ãæè¿æµè¡ãã®[[MCPãµãŒããŒ]]ãšã®é£æºãå®çŸãå§ããŠããŸãã
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://github.githubassets.com/favicons/favicon.svg" />
<span class="link-card-v2-site-name">GitHub</span>
</div>
<div class="link-card-v2-title">
ð CodeCompanion + MCP Servers · olimorris/codecompanion.nvim · Discussion #1058
</div>
<div class="link-card-v2-content">
ð CodeCompanion + MCP Servers Hey folks! I wanted to share a Neovim plugin I've been working on called mcphub.n ...
</div>
<img class="link-card-v2-image" src="https://opengraph.githubassets.com/498cfcd7da85f85fa58bd6a68ec39abb0f6ce4bcb2a118a855ca7a3c01bb3c69/olimorris/codecompanion.nvim/discussions/1058" />
<a href="https://github.com/olimorris/codecompanion.nvim/discussions/1058"></a>
</div>
[[VSCode]]ã«æ¯ã¹ãã°ãç¹ã«UIé¢ã§å€§ããªãã³ãã®ãã[[Neovim]]ã§ãããåšèŸºã®ãšã³ã·ã¹ãã ãæçããŠããã°ããŸãèŠæš©ã«è¿ãå²ãæ¥ãé ããªãã®ããªãšæããŸããããã®ãšãã®ããã«ã[[VSCode]] x [[GitHub Copilot]] ã ãã§ãªãã[[CodeCompanion]]ããŠã©ãããç¶ããŠãããããšæ¹ããŠæããŸããã
## ãšãããŒã°
ã«ã€ãžããã«è€ããŠããããŸãã ð
![[Pasted image 20250320225613.png]]