配列とオブジェクト

Date2026/06/10 Last Modified2026/06/10

概要

非常に今さらながら、配列とオブジェクトの違いについて調べる機会があったので、そのメモを取っておく。

不思議だと思っていたAPI仕様書

以前API連携の開発を行っていたとき、次のようなリクエストの形式を要求するデータがあった。

[
  {
    id: 1,
    name: 'Taro',
    email: 'taro@example.com',
    info: [],
  },
  {
    id: 2,
    name: 'Hanako',
    email: 'hanako@example.com',
    info: [
        {
            phone: '090-1234-5678',
            address: 'Tokyo'
        },
        {
            phone: '080-1234-5678',
            address: 'Osaka'
        }
    ]
  },
]

これに対してリクエストするとき、[]と{}を間違えるとエラーとして返されたので、なんや面倒な仕様だな……と思っていた。
実際にプロパティを全部正しく指定しないといけないのは、たしかに面倒な仕様であるのだが、正直なところ括弧を分ける意味を理解していなかったので、目検の作業になって苦労したのを覚えている。

しかし今振り返ってみると、実は理にかなっていたということが分かった。

配列とオブジェクトの違い

PHPとJSをそこそこの生業にしている身として大変恥ずかしいのだが、配列=PHPっぽい、オブジェクト=JSっぽい、という認識だった。
どっちも使えるのは使えるけど、それっぽさで選んでいた。あと連想配列はPHPにしかないから、PHPって便利だよなぁ……くらいの理解度。

実は両者には、明確な定義があったということを知った。
配列は順番を表す
オブジェクトは名前付き情報を表す
ということ。

つまるところ、配列はインデックスでアクセスする前提のものであり、オブジェクトはキーでアクセスする前提のものである。
それを意識して、先述したJSONの要求する形式を見てみると、たしかにちゃんと意味が分かれている。

そもそも、この意識が薄くなっていたのは一見便利に見えた連想配列が原因だった。
PHPでは配列とオブジェクトをあまりしなくても、いい感じでデータを取得できてしまう。
内部構造を気にしなくても、とりあえず連想配列にしておけば間違いないというノリがあった。

これは歴史的な背景だったりPHPの思想によるもので、WEBで大雑把に素早く開発させたいというニーズにこたえるものだった。
私はその恩恵にあずかることによって、今まで配列とオブジェクトの区別を知らずに生きてこられたのだった……。

おわりに

最近はTypeScriptを勉強中で、重箱の隅を突っつくように色んなことを調べていたらたまたま流れついた。
これは流石に、一般常識レベルで知っておくべきことだったとは思うのだけれども、皆さんはどういうタイミングでこれに気付くのだろうか……。
ちょこちょこ技術書を読んだり、AIにコードレビューをさせたりしながら、ほぼ自分のパワーで勉強してきた人間にとって、自分が見落としている常識ってまだまだたくさんあるのではないかと思っている。
「先輩にコードレビューをしてもらった」みたいな機会があんまりないので、こういう小さなことを教えてくれる人がいたら嬉しかったなと思ったり。

でも今日から知ったのでヨシ!