ContinueでVScodeのA.I補完

VScodeでcopilotというは安定してるけど、無償だと限度があるから補完的にLocal LLMを使ってみる

<環境>

M4 MacBook Pro/32GB

<手順>

deepseek-coder-v2:latestがそこそこらしいからollamaに追加する

% ollama list
NAME                         ID              SIZE      MODIFIED
deepseek-coder-v2:latest     63fb193b3a9b    8.9 GB    5 hours ago

動かすとメモリは30GB程度消費するからyellow markレベルだけど動作はできる

・ブラウザからの使用

Docker経由が環境を汚染しないからそのやり方で、8080はDcoker内部のportで外部にはport 3000で公開される

% docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main

Dockerでの見え方

・VScodeからの使用

① 拡張機能 Continueをインストールする

② Continueのための設定ファイルを作る

% mkdir -p ~/.continue
code ~/.continue/config.json

VScodeのエディタが起動するので、以下を入力

{
  "models": [
    {
      "title": "DeepSeek Local",
      "provider": "ollama",
      "model": "deepseek-coder-v2:latest"
    }
  ],
  "defaultModel": "DeepSeek Local"
}

設定を保存してVScodeを再起動すると、codeの選択 -> 右クリックでContinueのchat/edit起動ができる、Continue自体のwindowsは左側に開く

感覚、まあまあ使えるかなと思う、Rustの組み込みとかはまだ学習レベルが低い感じはあるけどね

 

admin

 

A.Iアシストでコーディング

最近はコード自体はほぼ生成A.Iで作成されることが多いと思うけど、ローカルでLLM動かして使えるかどうかやってみた

・参考サイト

https://zenn.dev/mkj/articles/cf8536923d9cd7#discuss

・環境:M4 MacBook Pro 32GBメモリ、ollama、VScode + Cline

・モデルの選択(Alibabaのモデルが限定されらリソースではコーディング目的には一番向いているらしいから)

% ollama pull qwen2.5-coder:7b-instruct

コンソールから動かしてみた感じではなかなかいけてる感じ、Rustは知らないと言われるけどC言語、Python、Golangは扱える

・設定:ollamaを選択、

・動かしてみたとこ、

ソースファイルが見つからないと言われるから設定が必要かもしれない

・リソース消費状況

メモリもかなりキツいし、途中でファンも回り出すから、高負荷ではあるからAirでは32GBでもきついかもしれない

ローカルLLMでどこまで使い物になるかやってみる

P.S.

結構タイムアウトするケースが多くて、いまいちollamaとの相性がよくなさそうに思える、コンソールからollama経由でモデル使う方が遥かに安定している

 

admin

VScodeでのフォーマッター(Prettier)

TypeScript用にはgofmtのような特別のフォーマッターというのは用意されていないように思うので、VScode用のフォーマッターをVScodeの拡張機能でインストールして使ってみました。当然TypeScriptに限らずあらゆるソースコードで使えるようになるのかと思いましたが、VScodeの拡張機能の説明を見ると、

フロントエンド用の言語が対象のようです。

Prettierをインストールしただけでは有効にならずに設定が必要ですが、以下のリンクにやり方が細かく記載されています。ソースコードのセーブ時にPrettierが実行されます。

https://ralacode.com/blog/post/vscode-prettier/

 

admin

VScodeでのTS(TypeScriptフォーマット)

Mac osだと、

Shift + Option + Fキー

で整形してくれました。

デフォルトでformatterがインストールされているようです。Golangだと、

% go fmt hoge.go

のようにコマンドを入れても良いですが、実は”Shift + Option + F”で同じように整形されました。ショートカットキーで扱える方が便利ですね。

 

admin

VScodeのPlatfromIOでライブラリ組み込むとエラーになる?

以下のレーザー距離センサーのM5stack用の開発環境準備のために調べてみた結果です。

https://www.switch-science.com/products/8183

① Arduino IDEではライブラリを選択して、Arduino用のデモプログラムを持って来ればコンパイル完了

https://learn.adafruit.com/adafruit-vl53l4cx-time-of-flight-distance-sensor/arduino

もちろんArduino IDEでM5stackを使えるような準備は必要です

 

② PlatformIOではライブラリ無いからソース持ってきてコンパイルしようとしてもエラー

ライブラリのソースは上記のリンク先のGitHubから、

https://github.com/stm32duino/VL53L4CX

デモプロはArduino IDEの時と同じくArduino用をそのまま、

試行錯誤の結果、PlatformIOでM5stackライブラリを組み込むとダメ、ライブラリ使わないようにすればコンパイルはうまくいく、ただしM5stackの機能を使うために、

#include<M5Stack.h>
を追加するとM5stackライブラリ無しでは当然コンパイルできないし、include文を追加すればコンパイルエラーも出ない。従ってArduino専用のサンプルプログラムの時(M5stackライブラリ不要時)にはM5stackライブラリをPlatformIOに組み込んではいけないということになります。おそらくArduino.hとM5Stack.hでコンフリクトしている(多分中身はかなり共通)んじゃないか想像できます。M5stackではArduino.hは不要だからArduino.hを削除してM5Stack.hだけ残しても問題なくコンパイルできるから。

 

コンパイル結果ですが、メモリ少ないデバイスでは動かないよと言われるように、結構メモリを消費しています。

 

admin

 

 

includePathが見つからない(Intel Mac)他

久々にIntelMacとM1MacでVScode環境でc++コンパイルしようとしたらいくつかのエラー発生。IntelMacは問題が二箇所で、M1Macは一箇所だけでしたが

— Intel Mac —

<問題1:includePathが見つからない>

以下を参考にパスを追加

https://jpdebug.com/p/151056

% g++ -v -E -x c++ –

で検索されたパスをc_cpp_properties.jsonに追記してコンパイルはできるようになったけど波線(つまり見つからないエラー)は消えないので、以下を追加

c_cpp_properties.jsonの、

“compilerPath”: “/usr/bin/clang”,

“compilerPath”: “/usr/bin/g++”,

に変えたら解決したようだ、これは即ち

% where g++ 

/usr/bin/g++

で示されるパスですが

<問題2:無限にXcodeコマンドラインツールをインストールしろメッセージ>

Xcodeコマンドラインツールをインストールしろと怒られて、何回インストールしても直らない

https://qiita.com/arks22/items/bb1a70a4803881c4e4e1

が該当していて、エラーメッセージの中に確かに解決案が提示されてます

~~~~~

Please ensure Xcode packages are up-to-date — try running ‘xcodebuild -runFirstLaunch’.

~~~~~

で以下の実行で解決したようです

% xcodebuild -runFirstLaunch

どこかのOSのアップデート、恐らく至近、で問題が出るようになったんでしょう

 

— M1Mac —

MacBook Air(M1)ではg++の版数を再指定(古い版数でコンパイルされたので)しなければいけなかったし、これもアップデート影響なのか

感覚的にはかりそめの解決のような気もするけれども、元々開発環境とはそういうものだろう

 

admin

gitignoreで実行ファイル除外の設定方法

GitHubに実行ファイルをアップロードしてもそれはマシン固有ファイルなので無意味です。じゃどうやって拡張子のついてない実行ファイルを管理対象外とするのか?

これに答えてくれるのが、

https://qiita.com/padawan_e15/items/7ba90f09e3ecd559f95b

にありますが、

.gitignoreファイルに以下のように記述すれば、

〇 まず、全部のファイルを管理対象外として、(下の一行目)

① ただし、ディレクトリ配下のディレクトリ全ては除外、すなわち管理対象とする(二行目)

② ただし、ディレクトリ内の拡張子のあるファイル全ては除外、すなわち管理対象とする(三行目)

<.gitignore>

*
!*/
!*.*

とすることで、拡張子のないファイルだけ指定したことになるという理屈。

こうすることでVScodeのエクスプローラから実行ファイルが消えました。

 

admin

VScodeでソースを複数ファイルに分割時の留意点

IMUとservo機能を連携させようとしますが、ソースファイルを一個にするのは汚い管理なので、機能ごとに分割します。

この時にArduino IDEだとバックエンドで無意識に処理をしてくれますが、VScodeを使う時にはほぼcの作法に従う必要があります。つまり、

・他のソースを使う時には、xxx.hとしてインクルードする。

今回のケースではservo.cppからimu.hを呼び出しています。

しかし、imu.hの組み込みで”M5にIMUは見つからないよ”とコンパイルエラーになります。

で調べると、

トホホな疑問(31) M5Stack、IMUの種類と取り扱いに戸惑う

と、

https://github.com/m5stack/M5Stack/blob/master/src/M5Stack.h

にあるようにimu.hの先頭部分は、

#define M5STACK_MPU6886
#include <M5Stack.h>
ですが、ここで#defineの”M5STACK_MPU6886″がM5stack.h中で展開されてIMUオブジェクトが生成されるので、#include <M5Stack.h>文が後に来ないと機能しません。

従ってservo.cppからは、#include <M5Stack.h>を削除してimu.hの記述を使うようにするとうまくいきました。二重インクルードはこの場合にはエラーにならず、最初の#include <m5stack.h>が有効になるからでしょう。


== top of the servo.cpp ==
//#include <m5stack.h>    // M5stack needs this module
#include <imu.h>

== top of the imu.h ==
#define M5STACK_MPU6886
#include <m5stack.h>

ということなので、Arduino IDEと違ってVScodeは普通のc開発に近いよということでした。

 

admin

M5stackをVS codeで使う(2)

M5stackへの書き込みとシリアルモニターについての記事です。

コードをコンパイルしたらM5stackに書き込みますが、そのボタンは”→”になります。”✔︎”はコンパイルエラーの確認用。

またシリアルモニター使う時には、同じく”🔌:電源プラグマーク”を押すと、上の画像のようにターミナルにシリアル出力します。

このプログラムは、Wi-Fiのアクセスポイント情報のログを取るサンプルプログラムWiFiScan.inoです。

M5stackを手で覆うと20dbぐらいレベル減衰が確認できたから、人体はシールド材と同じ。

 

admin