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

M5stackをVS codeで使う(1)

Arduino IDEはコンパイル遅いし、使い慣れたVS codeの方が良さそうに見えるので、VS codeで環境構築。コアとなる拡張機能はPlatformIOになります。

参考サイトは以下の通り、

https://haratta-tech-lab.com/m5stack-intro-arduino-vscode/#toc12

https://fabcross.jp/category/make/sorem5/20210112_cat_robot.html

ライブラリは画像中のワークスペースではなく、PlatformIO管理下に配置されるようです。この例ではM5Stack.hとSimpleBeep.hを組み込んでいますが、必要になればPlatformIOのライブラリ管理で必要なライブラリを追加すれば良さそうです。実はライブラリ管理は少々複雑のようですが、まずは必要なら都度追加で問題はないでしょう。

コンパイル速度はArduino IDEよりも明かに高速化しているように思う。

 

admin