こんにちは、テクマトリックスの長久保です。
2024年3月22日にコンテナ、Git、CI/CDを活用したソフトウェア開発のメリットとは?というウェビナーを実施しました。

今回はセッション内で回答できなかった質問や、アンケートで「有益だった情報、もっと知りたかった情報などお聞かせください。」の欄に記載いただいた中から抜粋して回答させていただきます。

質問1:C/C++testを用いてのCI環境構築は可能でしょうか?

C言語を用いた組み込み開発でCI/CD環境の構築を考えています。
具体的に言いますと、GItと連携してマージしたら自動でCI/CDが動作する仕組みを理想として考えています。
その場合、C/C++Testでも可能でしょうか。
また、GitHub Actionsも候補の一つとしてありますが、
GitHub ActionsはどちらかというとWeb開発で使われることが多くC言語の開発には向かないのかな、
C/C++Testのほうが良いのかなと感じています。
そこらへんの知識がまだ乏しいので、もしよろしければご教授ください。

GItと連携してマージしたら自動でCI/CDが動作する仕組みを理想として考えています。
その場合、C/C++Testでも可能でしょうか。

回答:問題なく実施可能です。
ソフトウェア開発基盤構築ソリューション
こちらのページの「Starter Packageの構築イメージ」のテストの箇所がC/C++testになるイメージとなります。

GitHub ActionsはどちらかというとWeb開発で使われることが多くC言語の開発には向かないのかな、
C/C++Testのほうが良いのかなと感じています。

回答:GitHub ActionsはCI/CD環境を構築するための仕組みであり、これらのツールにテストを実行する機能はございません。特定のイベント(例えば、プッシュやプルリクエスト)が発生した際に自動的にワークフロー(ビルド、テスト、通知等)を実行することができます。

テストツールであるC/C++testをGitHub Actionsから実行することで、自動的にテストを行うことができます。C/C++testをご購入いただいたお客様には、GitHub Actionsと連携するための簡単なサンプルも提供させて頂いております。
また、簡単なデモ動画もご用意させて頂いております。
ご興味がございましたら、以下ページよりデモ動画視聴をお申し込み下さい。
「組み込みソフトウェア開発のモダン開発ワークフローとは?」資料ダウンロード、デモ動画視聴の申し込み

質問2:変更差分やベースライン(Gitのコミットやタグなど)からの差分に対してのみ静的解析を行うことはできるでしょうか?

ローカルリポジトリでの変更差分のみ、あるいは設定したベースライン(Gitのコミットやタグなど)からの差分に対してのみ、静的解析を行うことはできるでしょうか?

回答:弊社取り扱いツールであるC/C++testに対しての質問として回答いたします。
ローカルリポジトリでの変更のみを解析することは可能です。
他にも、ブランチ間で変更されたファイルをフィルタリングする機能、タイムスタンプを元に設定日以降で変更されているファイルをフィルタリングする機能などがございます。
コミットやタグを起点に差分をフィルタリングする機能はございませんが、上記のようなフィルターをご活用いただくことで、ご要望に近いフィルタリングをすることは可能かと存じます。

質問3:DockerはWindows環境下でも作成可能でしょうか?

DockerはWindows環境下でも作成可能でしょうか。

回答:はい、DockerはWindows環境下でも使うことが可能です。

DockerをWindowsで使用するには、一般的にDocker Desktopを利用します。
稼働要件については以下を参照ください。
Install Docker Desktop on Windows

質問4:マイコンに依存したコードの扱いについて、Dockerでの実現は可能でしょうか?

マイコンなどに依存したコード(GPIOなど)が含まれる場合は、スタブなどのコードを作成すれば実現可能でしょうか。

回答:マイコンに依存したコードについては、そのままではDocker上で動作しない可能性が高いです。
GPIOなどのハードウェアに直接依存する部分は、ハードウェアにアクセスする部分を関数にし、その関数のスタブを作成することにより仮想的に動作を再現することが一般的です。
ただし、これには限界があり、完全に同じ動作をエミュレートすることは難しい場合もあります。
具体的な実装方法は、使用している言語やフレームワーク、依存しているハードウェアの種類によりますので、詳細はそれぞれの状況に応じて調査する必要があるかと思います。

質問5:CI に GitLab-CI/CD や GitHub Actions でなく、Jenkinsを使うメリットは、どのあたりにあるのでしょうか?

CI に GitLab-CI/CD や GitHub Actions でなく、Jenkinsを使うメリットは、どのあたりにあるのでしょうか? 例えば、結果の表示などの連携機能が充実していたりするところでしょうか。

回答:まず前提として、挙げていただいたツールはいずれもCI環境を構築するうえで必要な機能は揃っています。そのうえで、私が思うメリット、デメリットを記載します。

【メリット】

  • 連携できるツールが豊富
    1900を超えるプラグインがあり、「他のツールは連携できるのにJenkinsは連携できない」という事は少ないです。プラグインについては以下を参照ください。
    Jenkins Plugins Index
    構成管理の連携についても様々なツールと連携できるので、ベンダーロックインの予防にもつながります。例えば構成管理にGitHubとGitLabとSubversionを同時に運用しているといった場合でも、問題なく連携が可能です。
  • 安定稼働している・変化が少ない
    積極的に新機能が追加されることは少ないですが、変化が少ないという事は安定稼働が求められるCIツールとしては大きなメリットかと思います。
  • 過去の情報資産が使える
    ツール自体の歴史が長いので、トラブルシュートなど過去の情報資産を利用することが可能です。また、変化が少ないという事についても関連しますが、刻々とアップデートされているツールだと過去の資産が使えないという事もあります。そういった心配がJenkinsでは比較的少ないです。
  • 細かい設定ができる
    利用するプラグインの管理ログの設定起動時のJVMオプションなど、様々な設定が可能です。例えばSaaSのツールは構築面で有利ですが、こういった細かい設定が出来ないことがある場合が多いです。
  • セキュリティに対しての開発は活発に対応されている
    変化が少ないと記載しましたが、セキュリティに対しては直ちに対応されます。公式ページにも専用ページがあり、メーリングリストやRSS フィードでも通知を受け取ることができます。また、2021年に起きたLog4jの様な大きな問題時にはブログでの報告・対応方法の周知といったことも迅速に行われています。

【デメリット】

  • SaaSが無い
    通常Jenkinsを利用する場合、SaaSとしてではなく、インストールをしてサーバーを構築して利用します。また、GitHub ActionsのGitHubでホストされているランナーの様なものも存在しないため、エージェントマシンも用意する必要があります。
  • 古いイメージがある・目新しさが無い
    新しいものをスマートに使いたい開発者にとってはJenkinsは魅力的に映らないと思います。GitHub Actionsのようにどんどんと機能が追加されていくCI/CDツールと比較すると見劣りするかもしれません。

【補足】
昨年度の弊社主催のJenkinsに関するイベント、Jenkins Day Japan2022にて、
Jenkinsはもう古い?様々な角度から見たJenkinsの現状の紹介」というセッションで近年のJenkinsについて紹介しております。
オンデマンド視聴も可能ですので、こちらも参考いただければと思います。

Jenkins Day Japan 2022 オンデマンド配信

質問6:Windowsの開発環境をコンテナとして構築する方法はありますか?

コンテナイメージにWindowsの開発環境を構築する方法。

回答:MicrosoftがWindowsのコンテナを公開しております。
コンテナーの基本イメージ
こちらの基本イメージをそのまま用いて利用することも、Dockerfileを用いてイメージをカスタマイズすることも可能です。

質問7:ノードロックライセンスの開発環境でもコンテナイメージを作成できますか?

ノードロックライセンスの開発環境でもコンテナイメージを作成できるのか?

回答:ノードロックライセンスは通常、特定のハードウェアに結びつけられ、そのハードウェア上でのみソフトウェアが実行できるように制限されています。
そのためコンテナ技術といった仮想化技術を用いて複数の環境で実行できる場合、サポートしていない場合が多いです。利用するツールに依存しますので、ライセンスを提供するソフトウェアベンダーに確認することをお勧めします。

質問8:CI/CDと実機のRanorexのテストを組み合わせることができますか?

CI/CDと実機のRanorexのテストを組み合わせられないかと漠然と考えております。

回答:CI/CDとRanorexを組み合わせてテストを自動化することは可能です。例えばRanorexで作成したテストをCI/CDパイプラインに組み込むことで、ビルドごとに自動的にテストを実行することができます。
ただし、コンテナなどの仮想環境や、テスト作成をおこなったマシンと別のマシンでテスト実行をおこなう場合は、フローティングライセンスが必要となりますので、ご留意ください。
Ranorex ライセンスの種類と価格

Ranorexのブログにて、Jenkinsとの統合方法を公開しておりますので、併せて確認いただければと思います。
Jenkins への自動化テストの統合

質問9:GitHub ActionsとJenkinsのそれぞれのメリット、デメリットは何でしょうか?

GitHub ActionsとJenkinsのそれぞれのメリット、デメリットがあれば教えてほしいです。

回答:それぞれ回答いたします。
質問5にて類似の質問に回答しておりますので、併せてご確認ください。

【GitHub Actionsのメリット】

  • GitHubプラットフォーム内に統合されているため、既存のGitHubワークフローに容易に組み込むことができます。
  • ワークフローの実行結果をリポジトリと連携して直接確認できます。Jenkinsでも連携はできますが、より密接な連携が可能です。
  • プライベートリポジトリでも一定の無料枠が提供されています。
  • 個別にサーバーを構築する必要がありません。

【GitHub Actionsのデメリット】

  • GitHubを利用していることが前提となります。
     例えばSubversionやGitLabとGitHub Actionsを直接連携することはできません。
  • Jenkinsと比較して、連携できるツールが少ない場合があります。
    GitHub Marketplace actions
  • プライベートリポジトリの場合、追加のコストがかかる場合があります。
    GitHub Actions の課金について

【Jenkinsのメリット】

  • 非常に成熟したオープンソースのCI/CDツールであり、豊富なプラグインと広範なコミュニティサポートが利用可能です。
    プラグインの数も公式で公開されているもので1900以上のプラグインがあります。
    Jenkins Plugins Index
  • 自分のサーバー上で動かすことができ、フルコントロールが可能です。

【Jenkinsのデメリット】

  • サーバーのメンテナンスとアップデートなど、Jenkins自体の管理が必要になります。
  • ユーザーインターフェースがやや古く、直感的でない場合があります(最近はずいぶん改善されてきています)。

まとめ

第1回に引き続き、【組み込みソフトウェア開発におけるモダン開発セミナー<実践編>】というテーマでセミナーを実施させていただきました。
第2回にあたる今回も多くの方に参加いただけましたので、今後も継続してセミナーを実施させていただければと思います。
コンテナ、Git、CI/CD等に興味がある方は、ぜひご参加ください。

また、定期的にウェビナーも実施しておりますので、こちらも併せてご参加いただければと思います。

宣伝

ソフトウェア開発基盤構築ソリューション

ビジネスにおけるソフトウェアの重要性が高まるにつれ、市場のニーズにいち早く対応したソフトウェアを継続的にリリースすることが競争力を保つカギとなっています。ソフトウェア開発の現場では、市場のニーズだけでなくビジネスサイドから寄せられる要求に応えるために、開発スピードを上げるだけでなく、品質を確保することが同時に強く求められています。

テクマトリックスは、長年にわたり多くの企業のソフトウェア開発現場に対し、テストツールやCIツールを用いた開発効率と品質の向上を支援してきました。お客様からこれまでに寄せられた多くの要望と、弊社が培ってきたノウハウを関連付け、ソフトウェアの「開発効率」と「品質向上」の両立を支援するソリューションを提供します。

By nagakubo

主にCI環境構築をメインで担当しています。 Certified CloudBees Jenkins Engineer (CCJE)