アプリの中のデータの形

記事
IT・テクノロジー

アプリの中のデータの形

アプリの中で扱うデータの形は同じデータでも目的や利用するプログラミング言語で変わってきます。この記事では、プログラムの中で扱うデータの形の例について紹介します。



ネットリストのデータの形

先日紹介した、回路図の接続情報であるネットリストを読み込んだ時のデータは、Python の「Dictionary」というデータの形を使いました。 Python で処理する場合には、扱い易いデータの形ですが、実際には、同じネットリストのデータでもデータの持ち方には別のデータの形にしても扱う事が可能です。

例えば同じ Python を利用する場合でも、「Dictionary」以外だと、例えば「Net」というクラスを作る方法もあります。 Python はオブジェクト指向の記述方法もサポートしているので、少し複雑な回路設計支援のアプリを書く場合、クラスにして、Net のデータを扱うメソッド(method)を一緒に実装するとプログラム全体の見通しが良くなりますし、モジュールの再利用もやりやすくなります。

先日の例で「Dictionary」を採用した理由は、例としてできるだけシンプルに実装した方がわかり易いと思ったので Python の Dictionary を利用して、他の処理は関数で実装するという方法を採用しました。

他の言語で実装したらどうなる?

次に、Python 以外の言語で実装する場合を考えてみます。 例えば、Python ではなくて、Javascript で実装する場合には、どうなるでしょうか?

一つの方法は、上で紹介したように Javascript もオブジェクト指向の記述が可能なのでクラスを作成して、その中でデータの形と、メソッド(method)を実装する方法が考えられます。 シンプルに実装したい場合には、JSON で Python の Dictionary と同じ様な実装も可能です。基本的に、Python の Dictionary と Javascript の JSON は、一般的には連想配列(associative array)と呼ばれるデータ型になるので同じ様なコンセプトで実装できます。

Java や C++などで書く場合には、クラスが便利ですし、C 言語で書くならば構造体(struct)で表すと扱いやすくなります。

いずれにしても、「Pin(部品のピン)」と「Net(接続)」という概念を何らかの方法で表現できれば良いという点ではどの方法も同じです。 こうした、アプリケーション特有のデータの形が決まると、あとは、プログラミング言語のどのデータの型を使ってその形を実現できるかを考えれば良いことになります。

データベースでデータを保持する場合は?

今回のケースでは、特にデータベースを利用する必要はありませんが、設計データの履歴を残しておきたい場合には、データベースを利用するのも一つの考え方になります。 よく利用されるリレーショナル型のデータベースを利用する場合には、少しデータの作り方が変わってきます。

リレーショナル型のデータベースの表を作成する場合、データベースの正規化(normalization)を考えた方が効率よくデータを扱えるためです。 今回のネットリストのようなデータの場合は、「Net」と「Pin」で別のテーブルを作成した方が扱い易い構成になります。

Net: { "id", "name"}
Pin: { "id", "ref", "number", "label", "net_id" }
のような二つのテーブルを作成した方が扱いやすくなります。SQL などのクエリで、特定のネットに接続されるピンのみを抽出することもできるので、通常は、このようなテーブル構成にします。 先日の、Python の例では、Net の Dictionary の中に、そのネットに接続されている Pin の配列を含めていましたがこれを分割して、Net と Pin に分けるという点でプログラム内のデータも変わってきます。プログラムでネットの情報をデータベースから読み込んだ後は同じ様な形にした方が扱い易いですが、データベースに書き込む際は、別々のデータの方が都合が良くなります。

Firebase のデータベースだと事情が変わります
ところが、同じデータベースでも、Firebase の Firestore の様なデータベースを利用する場合は事情が違ってきます。理由は簡単で、Firebase の Firestore の場合、「JSON」をそのまま保存するイメージなので、先日の例のような Dictionary 形式のデータをそのまま保存してしまった方が都合が良い場合が多くなります。

もちろん、ピンだけのデータの処理を考えた場合は、データを再構成する必要がありますが、先日のシングルポイント接続をチェックするような場合は、先日の例の様なネット毎の構成の方が便利です。

まとめ
この記事では、同じデータでもデータの扱い方やアプリの目的によってプログラムの中のデータの持ち方が変わってくる例を紹介しました。

最近のプログラミング言語は、連想配列(associative array)をサポートしている言語が多いので、これを利用すると大抵のカスタムのデータの形は簡単に作れます。また、オブジェクト指向の考え方を導入してクラスで扱うと、モジュールの再利用もしやすく、見通しの良いプログラムにする事が可能になります。

一方で、リレーショナル型のデータベースにデータを入れることを考えた場合、データベースに入れる際のデータの作り方は、データベースのテーブルをどのように設計するかで変わってきます。データベースからデータを取り込んで処理に使う場合には、通常は、連想配列やクラス形式にした方が処理がスムーズにいく場合が多くなります。

このように、データの形はプログラミング言語やデータの利用目的で変わってきます。プログラミング学習の際は、一つのデータの持ち方だけではなくて、幾つか別のアプローチを試してみると、目的による使い分けができるようになります!
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す