ウェブの秘密言語:JSON徹底解説
6分54秒 | WEBJSON
基本情報技術者試験の頻出テーマを解説した動画コンテンツです。
トランスクリプト(字幕テキスト)
Webの世界は、ある秘密の言語で動いています。今回はその JSON という言語の謎を、皆さんと一緒に解き明かしていきましょう。 僕らが毎日何気なく使っているアプリは、裏側でものすごい勢いで情報をやり取りしています。全く違う会社が作ったサービス同士が、なぜこんなにスムーズに会話できるのでしょうか? その答えはシンプルです。彼らが、みんなが分かる共通の言葉を話しているからです。まさに 世界共通語 のようなものですね。 その言語の正体こそが、今回の主役 JSON なんです。一見シンプルですが、非常にパワフルで、今のインターネットを根底から支えています。 さて、ここから詳しく見ていきましょう。まず、そもそも JSON がどんな問題を解決するために生まれてきたのか、そこからお話しします。 昔は、左側にある XML が主流でした。データがいちいちタグで囲まれていて、少しごちゃごちゃして見えませんか?ところが右側の JSON は、どうでしょう。すごくすっきりしていて、一目で何が書いてあるか分かりやすいですよね。 そう、まさにこのシンプルさ。これが JSON がインターネットの 世界共通語、言うなれば 万能翻訳機 のようなポジションを獲得した最大の理由なんです。 では、その JSON とは一体何者なのでしょうか。元々は JavaScript という言語の書き方から生まれましたが、 今や Python、Java、Ruby など、ほとんどの プログラミング言語 で使える 超便利なデータ交換フォーマット、それが JSON なんです。 では、なぜそんなに多くの人が JSON を使うのでしょうか?理由は大きく3つあります。まず、とにかく軽くてシンプル なので通信が速い。 次に、人間が読んでも分かりやすい ため、一目で構造が分かります。そして何より、様々な言語と高い互換性 があることです。これが開発者が JSON を愛する理由です。 さて、ここからは JSON の中身、その文法を一緒に解読していきましょう。データがどのように組み立てられているのか、その秘密に迫ります。 JSON の構造は驚くほどシンプルで、全てがこの キーと値のペア という基本ルールでできています。左側の キー がデータの名前、そして右側の 値 がその中身です。 そして、この間にあるコロン。これは記号で言うとイコールと全く同じ役割を果たしていると考えると、とても分かりやすいでしょう。 この 値 の部分は非常に柔軟です。例えば「Hello World」のような普通の 文字列 も扱えますし、「30」のような 数値 もOKです。 もちろん、TrueかFalseかの 真偽値 も扱えます。さらに、Python や JavaScript のように複数のものをリストにする 配列 や、別の箱を入れる オブジェクト、そして何も入っていないことを示す null も扱えるんです。 そしてここからが JSON の真骨頂であり、一番面白いところです。JSON の構造はよくロシアの マトリョーシカ人形 に例えられます。どういうことかというと、データの中にさらにデータが入れ子になっている のです。 例えば、これが一番外側の大きな マトリョーシカ人形 だとします。ユーザーの情報を表していますね。 この人形をパカッと開けてみると、どうでしょう。アドレス という キー の 値 の部分が、ただのデータではなく、まだ別の小さな箱、つまり新しい人形になっているのが分かりますか? そして、その アドレス という名前の小さな人形をさらに開いてみます。すると中から「東京」という都市名や郵便番号のような、もっと細かいデータが出てくるわけです。 このようにデータをどんどん入れ子にして 階層を作れる。これこそが JSON が複雑な情報もすっきりきれいに表現できる 最大の強み なんです。 では、こんな便利な仕組みは一体どこで使われているのでしょうか?答えは、私たちの身の回りのあらゆる場所です。 私たちがアプリを使う時は、このような流れになっています。まず アプリ が サーバー に「この情報ちょうだい」と リクエスト を送ります。これが API ですね。 そして サーバー は頼まれた情報を見つけてきて、それを JSON という小包に詰めて送り返してくれます。最後に私たちの アプリ がその小包を開けて、中身の情報をきれいに表示してくれる、と。 スマートフォン や PC で動いているサービスのまさに心臓部が、このやり取りなんです。 API でのデータのやり取りだけでなく、他にも ソフトウェア の設定情報を書くファイルだったり、何か問題が起きた時の記録、いわゆる ログデータ を保存したりするのにも、もはや JSON は欠かせない存在になっています。 しかし、これだけ聞くと良いことずくめのように思えますが、この JSON の シンプルさ が時として、非常に危険な セキュリティ問題 を引き起こす諸刃の剣にもなり得るのです。 これは JSON の公式ルールブックにもはっきり書かれている警告なのですが、オブジェクト の中の名前がユニーク、つまり1つだけではない場合、それを受け取った ソフトウェア がどう動くかは 予測できません と言っているのです。 少しこの JSON も見てみてください。何か気づきませんか?そう、「count」という名前の キー が2つありますよね。システムによっては、これがエラーにならずに処理されてしまうことがあります。しかし、これがとんでもない問題の始まりなんです。 想像してみてください。あるユーザーが何かを買おうとしています。では、本当の注文数ってどちらだと思いますか?1個でしょうか?それとも100個でしょうか? ここが怖いところです。答えは、データを読み取る システム 次第なんです。例えば 支払いシステム は最初に出てきた「count: 1」を読み取って、「では1個分の代金をいただきますね」と処理するかもしれません。 しかし 受注システム は最後に出てきた「count: 100」を見て、「よし、100個発送準備だ」と動いてしまうかもしれません。 たった1つの リクエスト なのに解釈がバラバラ。こういうのを 相互運用性の脆弱性 と言うのですが、まさに悲劇ですよね。 たったこれだけの小さな曖昧さが、データの食い違いを生み、ビジネス全体に非常に大きな混乱を引き起こす可能性があります。 結局のところ、JSON の シンプルさ というのは、最高の強み でありながら 最大の弱点 でもあるわけです。 私たちはこの明快さと、それをしっかりコントロールすることのバランスをどう取っていけば良いのでしょうか?この問いは JSON を扱う全ての人にとって、非常に重要なテーマなんです。
このコンテンツは Web society で視聴・学習できます。