GitHubでArduino IDEのプログラムをバージョン管理する
はじめに
今回はArduino IDEで書いたプログラムを、GitHubでバージョン管理してみました。以前から、プログラムのピンを変えたりセンサーを追加したりしている内に、いつの間にかコンパイルエラーが出るようになってデバッグ作業に追われることがありました。それをなんとかしたいという訳です。
Arduino IDEはVS codeのように見やすいわけではないので、どんどん長くなっていくと読むのが難しくなっていきます。実際すごいことになりました。
▼すごいことになっているプログラム
▼これを動作させるためのプログラムです。Spresenseをメインとしたもので、モジュールが満載です。



現状は基本的にメインとなる .inoファイルに記述していますが、.cppや.hのファイルに分けたらもっと読みやすくなると思います。ファイルの分割の仕方が分かっていないので、追々やっていくつもりです。
今回GitHubを利用するのは、チームでの開発にも使っていきたいからです。導入に関しては最近記事を書きました。この記事でもGitHub Desktopを使います。最近のWindowsユーザーにとっては、コマンド操作で使うGit Bashよりもよっぽど使いやすいかと思います。
▼GitHubの導入に関する記事
▼GitHubのイメージ

GitHub Desktopでの操作
ローカルリポジトリにフォルダ・ファイルを追加する
▼今回はこちらのリポジトリを参考に説明します
https://github.com/404background/Brain-Pod
あらかじめGitHubで作成したリポジトリの、緑色の Code からGitHub DesktopにCloneします。

▼GitHub Desktopを開くとこんな感じ。

右側の「Show in Explorer」から、フォルダを開くことができます。ここにArduinoのプログラムを追加します。
「Open inVisual Studio Code」から、VS codeで編集することもできます。
▼フォルダを開くとこんな感じ。ここにBrain_podフォルダを追加します。

▼フォルダを追加するとこんな感じ。変更が反映されています。

今回はコミットをする前にブランチを切ってみます。
ブランチを切る
Gitではブランチを切ることで、作業を分岐させることができます。例えばセンサーを追加するためのブランチを切って、動作検証をして、問題が無ければ分岐元のブランチに統合するといった流れで使います。ちゃんと動くプログラムを、必ずどこかに残しておきたいんですよね。
最終的にはmainブランチに統合(merge)していくことになります。その際に、競合する箇所がある場合は調整する必要があります。mainが動作するプログラムとして、チームのメンバーはそれぞれのブランチで作業するという感じです。
ちなみに、2020年10月からデフォルトブランチの名前がmasterからmainに変わったようです。少し前の書籍を読むとmasterになっています。
▼ブランチのイメージ

実際にブランチを切ってみましょう。
▼GitHub Desktopの「Current branch」から新しくブランチを切ることができます。

▼今回はdevelopという名前のブランチを作成します。

ブランチを切り替える
ブランチを切り替えるときは、そこまでの変更履歴を一旦保存(Stash)します。その時に、
- 切り替え前のブランチに変更箇所を残すか
- 切り替え後のブランチに変更箇所を引き継ぐか
を選択することができます。
▼ブランチを切り替えるときの選択肢。

▼変更箇所を切り替え前のブランチに残した場合、Stashした変更箇所を確認できるようになります。

▼Stashした部分を保存(Restore)するか、破棄(Discard)するかを選択できます。

▼Restoreを選ぶと、元通り作業を再開できます。

コミットする
コミットすることで、途中までの変更履歴を保存することができます。コメントや説明を書いて、コミットした時点での変更箇所を説明しておくと分かりやすいです。コンパイルできるタイミングでこまめにコミットするのが良いと思います。
▼GitHub Desktopの左下からCommitできます。

コミットをすると、「Pubilish branch」を選択できるようになります。これでリモートに変更が反映されます。
▼コミット後の画面。左下のUndoで取り消すことができます。

GitHubでの操作
プルリクエストを出す
コミットをして、パブリッシュ後にGitHub Desktopを開くと、プルリクエストを出せます。チームだとプルリクエストの内容をレビューして、問題が無ければこのあとマージします。
▼これもコミットのときのように、コメントや説明を書いてプルリクエストを出せます。

ブランチをマージする
プルリクエスト後に問題が無ければ、「Merge pull request」でマージできます。
▼今回は特に問題なくマージできます

▼マージ後の様子。mainブランチに反映されています。

最後に
ここまでGitHubを使ったバージョン管理について説明しました。一度やってみると、大体の流れが分かると思います。リポジトリからCloneしたフォルダに、管理したいフォルダを入れて作業するという感じですね。
実際に使っていると、例えばコンパイルエラーが出たときに、それまでにどういった変更があったのかが非常に見やすいです。一からすべて点検しなくていいので、作業がしやすくなります。
まだまだ使い始めたばかりなので、運用面で慣れてきたらまた記事を書こうと思っています。