PlatformIO-自作ライブラリの管理と引用

PlatformIOで利用するための自作ライブラリの管理方法とそれをプロジェクトに適用するための手順、運用方法についてのまとめ。

初めに

PlatformIOではライブラリを作成し、それを公開(pio package publish)することでPlatformIO Registryに登録され、PlatformIOのLibraries-Registryで参照できるようになっている。

これはこれで便利なのだが、公開したくないものはどうするのか、という部分についてちょっとまとめてみた。

ライブラリの作成

後のプロジェクトで引用が楽になる様に、専用のフォルダ/プロジェクトを作成するのが良い。
作成は、PlatformIOのNew Projectで問題ない。

プロジェクト作成後、Platformio.iniに以下の行を追加する。

lib_extra_dirs=lib

これにより、PlatformIOのLibraries-Installedに開発中のライブラリを見ることができるようになる。

ここで注意しなければいけないのは、gitでライブラリ用プロジェクトを管理する前に右下Uninstallを押さないこと。
ここに表示されているフォルダが削除されてしまう。

上記作業完了後、libの下にフォルダを作成しそこにライブラリを構築していく。

フォルダ構成はライブラリフォルダの下のREADMEを参考にし、ライブラリ構築自体はhttps://docs.platformio.org/en/latest/librarymanager/creating.htmlに準拠するのが良い。
なお、ホームページ側のフォルダ構成とREADME側のフォルダ構成に違いがあるが、README側の方が管理しやすいのではないかと思う。

ライブラリ作成後テスト用に作成したメインソースは、expamlesフォルダに移動しサンプルプログラムとするのが良いと思う。

今回、Readlineをライブラリ化してみた。その時のフォルダ構成がこんな感じになる。

最後に、library.jsonを書く上でversion番号はきちんと管理しておくこと。
この情報が自分のプロジェクトで引用するところで必要になる。

プロジェクト側での引用

PlatformIO HomeのLibraries-Installedを開く。

ライブラリ用プロジェクトにあるライブラリ群が表示されるので、必要とするライブラリを開き、Installationタブを開く。

この中に記述されている、「lib_deps=~」の記述を参考に現在のプロジェクトのplatformio.iniに追記する。
ただ記述するのは、ライブラリがあるパスになるので注意。
すでにlib_depsの記述がある場合は、改行コードをはさみ、追記する。


こんな感じ。

これにより、PlatformIO側で現在のプロジェクトの下の.pio\libdepsに自動的にローディングしてくれる。

  • 注意点
    「file://」形式も記述方法として許されているらしいが、Windowsで記述するとビルド時にライブラリ管理の処理が失敗する。
    httpsでgithubを指定することも可能だが、Privateなものだとやはりこれもエラーになる。探索プログラム内で自分のログインアカウントでgithubにログインできないからだと思われる。

一応、これで完了。

設定後、もしくはビルド時に記述されているソース元からライブラリがローディングされる。
ローディング後、PlatformIOのLibraries-Installedを開くとこんな感じになる。

上がライブラリ用のプロジェクトにあるオリジナル。下が参照側プロジェクトにあるコピーもの。

ローカルライブラリ更新時の対応方法

プロジェクトにローディングされたライブラリソース類は、Libraries-InstalledでUninstallするまでは基本的にそのまま。

もしライブラリ側のソースを更新しても、プロジェクト側にはそのままでは反映されない。

Registryに登録されているものは、Libraries-Updatesで更新状態が確認できるようなのだが、それ以外のライブラリは対象外のようだった。

そのため、ライブラリを更新した際には、手動で更新処理をする必要がある。


プロジェクト内のライブラリをUninstallで削除してからビルドを行うことで、lib_depsに記載がされているソース元から最新を取得し、ビルドを開始されるようになっている。

どのライブラリを更新するかは、自分で判断をすることになるのだが、目安としてlibrary.jsonに記載されているバージョン情報。
バージョンが高いものがある場合、プロジェクト内のものを削除し最新にするのが良いかと思われる。

コメント

タイトルとURLをコピーしました