# IoTローコードプログラミングツール要件定義書 ## 1. 概要 本プロジェクトの目的は、非エンジニア層をメインターゲットとした、直感的な操作が可能なIoTアプリ開発ツールを開発すること。エンドユーザーはノードベースのインターフェースを使用して、簡単にアプリケーションを設計・開発できる。 ## 2. ターゲットユーザー - 非エンジニア層(主婦、子供など) - プログラミングに慣れていない初心者 - エンジニアリングに興味があるが、技術的なハードルが高いと感じているユーザー ## 3. 主要機能 ### 3.1 アプリ開発機能 - **スクラッチのようにGUIでプログラミングできる機能 (ソフトウェアレベル)** -- イメージとしてはDify(以前紹介したAIツール)や、スクラッチプログラミングなどのレンジをハードまで広げたもの 1. * 具体的な機能 1. * ユーザーが開発できるようなプラットフォーム(Web上?) 2. * 各種APIの設計 3. * **LLMを載せれるようにしたいです(TinyLlamaとか……)**[参考記事(Raspberry Pi 5上で軽量LLM、TinyLlamaを動かしてみる)](https://qiita.com/kazuhitoyokoi/items/66e8c9e1b447a2850ba7) 2. * LLMがIoTデバイスに載せれると嬉しいところ 1. * 言葉で操作できるようになる 2. * 作れるというだけで魅力になる? 3. * 4. 3. * スマホより優れている点 1. * - **センサ類などをレゴブロックのように簡単に部品を組み換えることができる機能 (ハードウェアレベル)** 1. * (片岩)~~イメージとしては、例えば温度、気圧感知器などのデバイスをソフトウェア上で一つのノードのように扱えたら楽しそう~~ (諸岡)通常ラズパイなどに追加モジュールを搭載するときにははんだ付けなどが必要だが、それをしなくてもモジュールを搭載できるようにする。 - **イメージ画像** ![image](https://hackmd.io/_uploads/BkBzYzKGC.png) ## 4. 技術スタック - **プログラミング言語**: - **ハードウェア**: - **フレームワーク**: ## 5. ユーザーインターフェース - **デザイン**: 初心者にも扱いやすい直感的なグラフィカルインターフェース。 - **カスタマイズ性**: エンジニア向けに高度なカスタマイズが可能なインターフェースを提供。 ## 6. 開発フェーズ - 未定 ## 7. 予算や時間などのリソース - 未定 # memo ### User ・どういう形でエンドユーザに届くか考える ・要件定義にデバイスや言語などの詳細な技術仕様書を含めない 以下、要件 ・iOTを自在に組み替えて、ブロックライクorノードベースのローコードプログラミングツールを開発したい ・ハードウェアも組み替えと、それを統合支配するソフトウェアのどちらもレゴブロック(あるいはスクラッチ)のような形で自由に作れるようにしたい ### ChatGPT UXや、具体的なシナリオは? このシステムで使用する予定のハードウェアコンポーネントについてもう少し詳細を教えていただけますか?例えば、センサーの種類、アクチュエーター、通信モジュールなど、具体的なハードウェアの要素が必要です。 ### User エンドユーザーに対するユーザーエクスペリエンスとして、「自由な想像を実現する創造」を提供したいです 既存のシナリオでは、プログラミングが必要不可欠なシーンが多々あり、すべてのエンドユーザーがそれにペイできる時間が限られています。なので、これを解決したいです。 具体的なシナリオとして、プログラミングに慣れていない子供が直感的にアプリケーション開発ができる。また、主婦の人でも気軽に便利グッズを発明できるということを考えています。言い換えれば、一種のDDD開発を期待します。 ユーザー層は非エンジニア層がメインです。しかし、場合によってはエンジニアたちはさらにミドルユーザーとして、拡張機能の自由な開発に参入可能な構造にしたいです。 ハードに関しては、ラズペリーパイや、M5stackなどをご想像ください。 音声、ガス検知、簡易通信などはマルチモーダルな要素として、重要になると考えています。 ### ChatGPT このプロジェクトにおける非エンジニア層をメインターゲットにするために、直感的で学習曲線が低いユーザーインターフェース(UI)のデザインが重要です。以下の点について考えることをお勧めします: UI/UXデザイン: 子供や非技術者でも直感的に理解できるUIはどのような特徴を持つべきか、またユーザーが直面するであろう課題をどのようにして解決するか。例えば、ドラッグ&ドロップ式のインターフェースやビジュアルプログラミング言語(VPL)を採用することが効果的かもしれません。 カスタマイズと拡張性: エンジニアが独自の拡張機能やカスタムモジュールを開発できるような開放的なAPI設計をどのように組み込むか。これにより、システムはノンエンジニアからミドルユーザー、さらにはアドバンスドユーザーまで幅広く対応できるようになります。 ハードウェアの統合: ラズベリーパイやM5stackといった既存のハードウェアを利用する場合、どのようにしてこれらのデバイスを統合し、さまざまなセンサーや通信モジュールをサポートするか。これには、ハードウェアアブストラクションレイヤ(HAL)の開発が効果的です。 マルチモーダルインタラクション: 音声認識やガス検知などのマルチモーダルな要素をどのように組み込むか。これらは特に家庭内でのアプリケーションにおいて重要な機能になります。ここで、音声認識のためのライブラリ選定や、センサーからデータを集めるための統一されたインターフェースが必要です。 これらの要素を考慮した上で、プロジェクトのスコープと目標をどのように設定するか、さらなる議論が必要かもしれません。どの部分を最初に開発するか、また、プロトタイプからフルプロダクトに至るまでのロードマップはどのように計画していますか? ### User プロトタイプからフルプロダクトに至るまでのロードマップはまだ検討しません。 あくまで、アイデアの精緻化に協力して欲しいです。 スコープとして、プログラミング学習と、アプリ開発という二つのスコープを提示したので混乱させてしまいました。アプリ開発というのがメインで、それに付随するのがプログラミング学習です。 UIイメージとしては、ブロックプログラミングもしくは、ノードプログラミングです。ここは、是非があるので、案として持っておきたいです。