Arduino IDE でESP32のコンパイル時間を短縮する方法

#はじめに

ESP32をArduinoIDEで開発していると妙にコンパイルが遅い気がします。AVRに比べれば機能が多いのでコンパイルに時間がかかるのはわかるのですが、１度ビルドし直すだけでも長いプログラムだと１分以上かかってしまい非常に非効率です。

原因はコンパイルするたびにフルビルドしてしまうため、少し変えただけでもフルビルドがかかってしまいます。そのような問題を解決するために**ccache**というC,C++用のコンパイル高速化ソフトがあります。

このソフトはコンパイル時に生成されたファイルをキャッシュしておくことで２回目以降のコンパイルを高速化するというものです。初回コンパイル時にはすべてのファイルをキャッシュするため時間がかかりますが、次からは使える部分をキャッシュから流用してコンパイルするのでフルビルドする必要がなくなるため結果的に高速でコンパイルできるようになります


#ccacheを利用するための設定

ArduinoIDEの仕様でスケッチをコンパイルする際はランダムな数字の名前で生成されるフォルダにオブジェクトファイルが作られ、そのフォルダに対してコマンドを実行するためこのままではccacheを利用しにくい仕様となっているため出力先を固定します

####1.ビルド先の固定
最初にビルド先のディレクトリを作成します
コマンドプロンプトを開いて以下のコマンドでTempフォルダに作成します

```cmd
cd %temp%
mkdir arduino_build
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1738478/c14c6ec4-40f2-4536-31af-85702c01e8d7.png)


Arduinoを起動しメニューのファイルから環境設定を開きます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1738478/5f4294b4-7be1-31b9-ba41-a0fe2e22d30a.png)

ここをクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1738478/95d3e32c-92c7-6003-2aa0-9aa2b5784ec8.png)

エクスプローラーが開かれるのでpreferemces.txtを任意のエディターで開きます
**開く前にArduinoIDEを必ず閉じてください**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1738478/2bbc162b-eb0c-cbe2-5394-f1b30a945256.png)

下のテキストを末尾に貼り付けます
※ユーザー名は適宜置き換えてください


```preference.txt
build.path=C:\Users\Owner\AppData\Local\Temp\arduino_build
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1738478/9cb4ebe2-2390-72e8-31d2-cf59e38c0630.png)

上書き保存したらビルドパスの固定は完了です
※権限の関係で上書き保存できない場合があるのでその際はデスクトップに保存してから移動させると権限問題を回避できます

####2.ccacheのインストール

https://ccache.dev/

ccache公式サイトから最新バージョンをダウンロードします。2022年3月28日現在、最新バージョンは4.6です。

適当な解凍ソフトでZIPファイルを任意の場所に解凍してください

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1738478/2f53ac39-bb3a-d34c-b4b7-c94e0b90b476.png)

4つのファイルのうちccache.exeのみをコピーします。
コピー先はArduinoがインストールされているフォルダとしておきます。
デフォルトのインストール場所を変えていない人はC:\Program Files (x86)\Arduinoになります。
管理者権限が必要なので警告が出ますがそのまま続行してOKです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1738478/d4138564-3619-d89b-a492-71a22f7adab1.png)

このようにarduino.exeと同じ階層に配置します

####3.パスを通す

ArduinoIDEがインストールされているフォルダにはパスが通っていないためパスを通します

スタートメニューを開いてpathと入力してシステム環境変数の編集を開きます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1738478/687f2714-8afd-4f12-62b6-a6c8477df61a.png)
環境変数をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1738478/189fcc47-43a8-4db8-5587-983d83d297c6.png)
今回はユーザーのpathのみ通すのでユーザー環境変数のpathを選択して編集をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1738478/9d921ca9-d4ac-cd79-6d92-6c4279e0bf2a.png)
新規作成してArduinoのインストールフォルダにpathを通します
※インストール場所を変えている人は適宜変更してください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1738478/94ef4602-4833-e58e-db36-651296055eef.png)

OKを何度かクリックして閉じれば完了です

念のためパスが通っているかコマンドプロンプト等で確認しておくと安心です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1738478/50fd0493-61a4-074a-30b5-9f3c0e179527.png)

####4.ArduinoIDEのビルドオプションの変更
ccacheをインストールしただけではビルド時に有効にならないのでArduinoIDEのビルド設定を変更してccacheを使うように設定する必要があります。

Arduino core for the ESP32を使って開発しいる場合は

C:\Users\Owner\Documents\Arduino\hardware\espressif\esp32

に設定ファイルがあります
（ユーザー名は適宜読み替えてください）

**[追記]**
2022年3月29日現在、platform.txtは”C:\Users\(ユーザー名)\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6”という場所にある可能性があります（要検証）

platform.txtという設定ファイルがあるので任意のエディターで開いてください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1738478/b6e5f98c-b2fd-666b-c26a-45d563fe970b.png)

**Compile c Files**と**Compile c++ Files**いう行があるのでそこにccacheを使うオプションを追記します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1738478/e4543b02-2e64-2df3-9d6e-ad583978e20f.png)

**recipe/c/o/pattern=**と**recipe/cpp/o/pattern=**の後ろに**ccache**と追記します
また、**ccache** と次の**”**の間にはスペースがいるので忘れずに入れてください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1738478/1d114a5f-61af-1aba-21d0-d940f3fc816b.png)

上書き保存したら設定は完了です。

#Arduino IDE でビルド
ビルドする際にccacheが有効になっているかを確認するために**環境設定**から**より詳細な情報を表示する**の**コンパイル**にチェックを入れてコンパイラの警告は**全て**にしておきます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1738478/30c0ef0e-4b56-2686-afa2-a98cae2822ec.png)

適当なコードをビルドしてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1738478/41de8dd7-ec57-e2e1-828d-11438c1dcaa4.png)
このように**スケッチをコンパイルしています...**の後にccacheが先頭の文字に入っていたら成功です。

初回ビルドはフルビルドなので遅いですが2回目以降のビルドはキャッシュが効いてくるので高速でコンパイルできます。

###結果

商用電源周波数監視装置のプログラムをビルドしてみました

| ccacheなし | ccache有効 | 倍率 |
|:----------:|:------------:|:------------:|
|58秒     |12秒      |4.83倍         |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1738478/f8e06394-c854-a471-b2a1-6f667f34b035.png)

特にライブラリを多用するプログラムだとそのあたりがキャッシュで高速化されるため大幅な速度向上が見込めます
（画像ではLovyanGFXのライブラリ部分が再利用されている）

#あとがき
ccacheをインストールするだけでコンパイルの速度が格段に向上するのでデバッグ作業がはかどります。（前は一つのパラメータ変更しただけでもとても時間がかかっていました）みなさんも今日からccacheを使って快適なESP32開発を楽しみましょう！！！