シンボリックリンクの圧縮


私が構築しているArduinoのUIAPduinoボード用のパッケージは,自分で作ったコードと外部のコードを組合わせて作っているが,外部のコードはできるだけ分離しておきたいと考えている. しかし,ボードをインストールする際のjsonの構造を調べたところ,圧縮されたファイルは,hardwareまたはtoolsの中の別々のフォルダとして展開される. 分離したファイルを,hardwareの中の特定のフォルダの中に展開するということは出来ないので,少し工夫が必要になる. 思いついた方法は,私の作っているArduino環境に組み込んでいるArduinoCore-APIをtoolsの中のフォルダに置いて,そのファイルをhardwareの下にあるメインのコードから呼び出せるようにして,コードを分離するという手法である.

相対pathでapiへのシンボリックリンクを作れば,toolsに入れたArduinoCore-APIも参照することができるのでは無いかと思って試してみたら,ローカルのArduino環境ではうまく動くことを確認した. ボードマネージャからインストールした時にもこれを再現するためには,hardwareの下のファイルを圧縮して展開したときに,シンボリックリンクが有効でなければならない. zipでシンボリックリンクのまま圧縮するには,-ryオプション付きで実行すると良いという情報を見てやってみたが,展開したらリンクの名前の普通のファイルになってしまった. 一方,以下のようにtar.gzで圧縮したら,展開してもシンボリックリンクとして働いた.

tar -zcvf filename.tar.gz folder/

このようにして,少なくともLinuxにおいては,コードを分離した状態で,自分の作ったボード環境をインストールできるようになった.

Windowsでも,tar.gz圧縮したシンボリックリンクが働くという情報もあったので,試してみた. Arduinoを通常の権限で立ち上げて,インストールしようとしたら,シンボリックリンクを作る権限が無いというエラーが出た. そこで,Arduinoを管理者として実行して,インストールしたところ,シンボリックリンクも有効になって,無事に動かすことに成功した. Windowsで確かめるべきことはこれで終わりだと思うので,そろそろWindowsを消しても良いかな. もう少し待った方が良いかな.

自分で作ったArduino環境を,ボードマネージャからインストールできるようになったと思う. LinuxとWindowsではざっとチェックしたけど,Macは持っていないので,動作チェックができない. どうしようかな.