ぜんぜん日々更新ではない日記です

まぁ、ぼちぼちやっていきます。
このページは最新7日分で、逆順(最新が上)で並んでいます。
過去のものはヘッダ部分のリンクから選べます。

目次

2025-07-02 akamai の CDN
2025-06-29 uniqlo のシャツ
2025-06-24 wix velo
2025-06-18 続・町内会ホームページ
2025-06-09 【訃報】ビル・アトキンソン
2025-06-07 マリオカートワールド
2025-06-06 Switch2
 今月の日記
akamai の CDN  2025-07-02 18:11:48  コンピュータ

▲目次へ ⇒この記事のURL

先日、uniqlo のシャツの話題で「akamai」という企業を取り上げた。


話の腰が折れるので、この企業が提供しているサービスについては割愛した。

しかし、面白い技術なので知ってほしい、と思って説明しているページを探してみたものの、的確に書かれたものが見当たらない。


CDN という仕組みを提供している、ということと、その技術について非常に「ふわっと」書かれたページは多い。

ふわっと、というのは書いている人も理解していない、ということだ。


こんなに面白い技術、是非知ってほしいのだけど、書かれたページがないのか…

となれば、自分で書くしかあるまい。




最初に断っておくが、僕自身は akamai の中の人でも何でもないし、ページ提供者側として利用したこともない。

以前にどこかで聞いて技術概要は知っているが、細かな部分は間違っているかもしれない。


また、以前の Akamai は「CDNの企業」だったのだが、現在はセキュリティなども含めたサーバ運用全般を扱っているようだ。

それに伴い、CDN もどんどん新技術が導入されているようだが、僕はそうした細かなことは知らない。


これから書く話は「基本的な」ものに過ぎない。

現状を正しく表しているものではない、という反面、まだ単純だからわかりやすくもあると思う。




まず、CDN について。Content Delivery Network の略で、コンテンツを届けるネットワーク、という意味になる。


コンテンツという概念はまた微妙なものなのだが、この文脈の中では「WEB ページで提供されるデータ」だと思ってもらってよい。

通常は通信して取得するもので、わざわざ「届けて」もらう必要はないものだ。


ところで、インターネットは世界中と通信できる。

たとえば、海外旅行に行きたくてアフリカの観光サイトを見たとしよう。


もちろん通信できる。でも、ページが表示されるまでに時間がかかる。遅い。

理由は、遠いからだ。世界中と通信できると言っても、遠ければ時間はかかる。


通信は電気で行われていて、光の速さ…とよくいわれるが、途中で何度も中継が入る。

中継点ではコンピューターが処理していて、処理速度は光の速度よりずっと遅い。


距離に応じて中継点も増えるので、遠くへの通信は遅くなるのだ。



CDN は、こうした状況を改善する手段だ。


遠くへ通信するから遅いのだ。

ならば、世界中にサーバーを用意し、キャッシュ(データのコピー)を置いておけばよい。


アフリカのサイトを見ようと思った時に、実際にアフリカに接続するのではなく、日本国内から同じデータを取り寄せられる。

つまり、データが世界中にあらかじめ届けられているわけだ。これが CDN 。


…と、akamai や CDN で検索すると、ここまでの話を書いてあるだけのページが非常に多い。


ただ、そのアイディアが簡単に実現できるほど世の中は甘くない。

キャッシュを行おうとすれば、世界中にそのためのサーバが必要だ。誰がそのサーバの設置・維持料金を払うんだ?


すぐにページが取得できる、というのは、ネット利用者にとってはありがたいけど、それだけでは足りないのだ。




ここで、コンテンツ提供側の立場で考えてみよう。


コンテンツ提供者は、サーバを世界に向けて公開する。

公開する意図があってそうしているのだから、できるだけ多くの人に見てもらいたい。


しかし、ここにいくつかの問題がある。


まず、本当に世界中の人からアクセスが来ると、サーバの処理能力が問題となるのだ。

サーバを、強力な処理能力を持つものに交換しなくてはならない。

実際にはそんなに強力なサーバはないので、「負荷分散」という技術を使って、複数台のサーバで処理することになる。


通信速度の問題も付きまとう。

先にアフリカと通信する例を挙げたが、世界中に配信したとしても、遠くから見てもらうのは遅いのだ。


多くの人に見てもらいたいが、大抵の人はページを開いて、3秒待っても表示されなければ見るのを諦めてしまう。

サーバの処理能力をいくら上げたとしても、距離の問題はいかんともしがたい。


もう一つ、通信料金の問題がある。

個人でネットプロバイダと契約していると、定額制ということが多いのだが、インターネットというのは通信の量によってコストが決まるのだ。(従量制)


つまり、コンテンツ提供側には以下の問題がある


・サーバ増強コストの問題

・「距離」による通信速度の問題

・通信量に応じたコストの問題


このうち、特に距離の問題なんて解決するのが難しくて、世界中にホストを設置しなくてはならない。

これは同時に回線契約の数も増やさないといけないわけで、かかるコストは簡単には見通せない。青天井と言ってよいだろう。


CDN はこれを解決できる。

先に書いたが、世界の各所にキャッシュサーバを置いて、誰かがデータを必要とした際に、近いところからデータを得ようというものだからだ。

自分で設置しようと思えばコストは青天井でも、誰かの設置したものを借りるのであれば、現実的な金額に収まる。


つまり、少なくともコンテンツ提供側は、 akamai と契約してお金を払うだけの価値があるのだ。




ネットには、コンテンツ提供者がいて、それを見たい閲覧者がいる。

しかし、akamai を理解するには、もう一人の登場人物が必要だ。一番重要な役割を担っている。


それが、接続事業者、ネットプロバイダだ。

我々は、ネットに接続するときにネットプロバイダのサービスを使う。


勘違いされやすいのだけど、「回線業者」とは違う。回線業者は NTT など物理的な回線を提供する会社だ。

ネットプロバイダは、この回線を利用して、インターネットに接続するサービスを提供する。


ケーブルテレビのインターネットサービスなど、回線とプロバイダ事業を一体化して提供している場合もある。

携帯電話なども、docomo は回線業者であり、ネットプロバイダでもある。

でも、docomo 回線を借りてネットプロバイダ事業を行う、MVNO 業者のようなところもある。


ともかく、ネットプロバイダはインターネットへの接続サービスを行うのだが、ここで「ネットプロバイダ内」にもネットワークがある。

同じネットプロバイダを利用する顧客は、まずネットプロバイダの小さなネットワークに入り、そこからインターネットに接続しているのだ。


こうした、小さなネットワークが相互接続したもの、というのが「インターネット」のそもそもの語源だ。


さて、ネットプロバイダは通常月額料金を徴収して顧客にネット接続を提供している。

しかし、プロバイダのネットワークの外側にある「インターネット」への接続は、月額固定などではない。

データ通信量に応じて決まる、従量制だ。


つまり、ネットプロバイダにとっては、「社内の」ネットワークへのアクセスで完結してくれればありがたい。

インターネットへの接続コストが減るからだ。

でも、顧客はインターネットに接続したいからこそ、ネットプロバイダと契約している。


ここで akamai の登場だ。


akamai は、ネットプロバイダの「社内ネットワークに」キャッシュサーバを設置する。

すると、世界のどこかにあるはずのコンテンツが、社内にあることになるのだ。

外部へのアクセスが生じないので、ネットプロバイダのコストは減る。


これには副次的な効果もある。

ネットワークは、通信するデータ量が増えれば、より「太い」線が必要になる。

そして、太い線は月額の「基本料」が高い。先ほど従量課金と書いたが、基本料はそれとは別に必ず発生するものだ。


顧客が増え、通信量が増えれば、より太い線が必要になる。

しかし、キャッシュサーバの設置で外部への通信が行われないなら、太い線の契約をしないでも済む。



最初に、akamai のサーバの設置・維持費用は誰が出すのか? と問いかけた。


この答えがここにある。

ネットプロバイダは、社内にサーバを設置することに意味があるので、設置場所を提供し、お金を払ってでも設置を依頼する。


先に書いたように、お金はコンテンツ提供側からももらっているので、設置費用は「設置しない場合の回線利用コスト」よりも安い程度に設定できる。




利用者、コンテンツ提供者、ネットプロバイダ。

ここで、3者の思惑が一致し、キャッシュサーバーを設置すればだれもが幸せになれる状態が出来上がる。


しかし、まだ問題はあるのだ。これを「どうやって」技術的に実現するのだろう?



いちばん簡単な方法は、「すべての」 URL に対するアクセスを受け取るサーバーを作ることだ。


ネットプロバイダ内部からのアクセスを、すべて一旦キャッシュサーバーが受け取る。

キャッシュがあればそれを返し、なければ実際のコンテンツを取りに行く。取得した内容はキャッシュする。


じつは、これは「キャッシュプロクシ」と呼ばれる手法で、akamai 以前から実際に存在した。

そして、特定の目的では非常に有用だったが、一般的に使うには問題の多い方法でもあった。


まず、「プロクシ」について説明しよう。

キャッシュプロクシは、プロクシにキャッシュの機能を後付けしたものだからだ。


そもそもは proxy とは「代理人」の意味だ。


会社など、セキュリティを守る目的で外部のネットワークに直接接続したくない場合に、基本的には全員インターネットへのアクセスを禁止する。

そのうえで、「特定のサーバ」にだけアクセス可能な権限を与え、外部にアクセスしたい場合はそのサーバを経由するようにする。

つまり、外部へのアクセスは、すべて「代理人」に依頼するわけだ。


この特定サーバの事を、「プロクシサーバ」と呼ぶ。


これはもともとアクセスを制限するためのものだ。

全ての通信はプロクシを経由する。だから、ここにキャッシュを入れたり、様々な便利機能を入れることもできる。


その反面、プロクシを使用するといろいろと制限がある。

たとえば、動画を見ることはできないかもしれない。ネットゲームは遊べないかもしれない。


というより、もともとプロクシは前提として「ネット利用禁止」の時に使うのだ。それでも使いたい機能だけを提供する。

会社ならそうした制限はむしろ有用かもしれないが、ネットアクセスを提供することが仕事の「ネットプロバイダ」としては、この手段を使うわけには行かない。


ところで、ネットではプロクシの事を「串」という隠語で呼ぶことがある。

隠語を使う、というのは、悪いことに使う人も多いためだ。


プロクシは「代理人」なので、相手に自分の正体を明かさないでアクセスすることができる…場合がある。プロクシの設定にもよるけど。

何かの理由があって、存在を隠したい人にはとても良い仕組みだ。だから隠語になってしまうのだが。


そういう、何らかの事情がある人には、あえて制限は受け入れたうえで、メリットを得る必要があるのだ。


つまりはメリットとデメリットを秤にかけて、利用者が使うかどうかを選ばないといけない。

決して「自動で使われる」ものであってはならない。


一応、Windows の Chrome や Edge 等でもプロクシの利用は可能だ。

でも、いったいどれだけの人が設定方法を知っているだろう? 普通は使わないで良いものなのだ。


キャッシュサーバーを使うと便利だ、という環境を作りだせたとして、じゃぁ利用するのにはプロクシの設定をお願いね、というのではダメなのだ。

そんな状況では誰も利用しない。


そこで、akamai は巧妙な方法を編み出した。DNS を利用するのだ。




インターネット上のサーバには、IP アドレスが割り振られている。インターネット上の住所、と言われることが多い。

通信を行うときは、「必ず」相手の IP アドレスが必要となる。


でも、URL には IP アドレスは含まれていない。

どうなっているのかというと、「ドメイン名」を元に IP アドレスを調べる方法があるのだ。

その仕組みが DNS だ。


たとえば当ページは www.wizforest.com というドメイン名を使用している。

今ここをアクセスしている人は、DNS を使用してこのドメイン名を IP アドレスに変換し、アクセスしているのだ。


ところで、この DNS というデータベースが、データの登録方法に面白いやりかたを取っている。

話をするうえで必要なので、長くなるが説明しよう。


データベースというのは、普通はデータを1カ所に集約したものだ。

このページの例でいえば、www.wizforest.com 、というドメインに対しての IP アドレスを、どこかに登録しておけばよい。

そうすれば、すぐにドメインから IP アドレスを知ることができる。


実際、ドメインから IP アドレスへの変換は、初期のころは1つのデータベースで行われていたのだ。

たった1つのファイルにすべてのデータを入れ、ネットワークに接続するコンピューターは、そのファイルを取得して使用していた。


(この頃の話は過去に書いている


しかし、ネット上のホストが増えるに従い、この方法は破綻した。

ホストが増えたり減ったりするたびにデータを変更しなくてはならないし、何よりも「世界中の」コンピューターに、最新情報を即座に届けないといけない。

それはもう無理だった。その状況を打開するために考えられたのが、DNS という「分散データベース」だ。


まず、データベースは組織ごとに準備する。

このページでいえば wizforest.com が「組織」であり、そこに www というコンピューターが公開されている、という形式になる。

他にも、メールサーバとか、DNS サーバとか、いろいろなコンピューターが組織内にある。


今、組織内のコンピューターとして「DNS サーバ」と書いた。

僕は自分の DNS サーバに、これら「組織内のサーバ」のデータを記入する。


そして、さらに上の組織… .com の DNS サーバに対して、wizfores.com の DNS サーバアドレスを通達しておく。


これで準備は完了。


誰かが www.wizforest.com にアクセスしたいと思ったら、まず、「その人の端末」に登録された DNS サーバに問い合わせを行う。

これは、その端末から一番近くにある DNS サーバのはずだ。


しかし、すぐ近くの DNS サーバが、世界中のコンピューター全てを知っていることなどまずないだろう。


でも、有名な .com の DNS サーバなら知っている。

そこに問い合わせると、www.wizforest.com は知らなくても、wizforest.com の DNS サーバなら知っている、と返答がある。


そして、wizforest.com の DNS サーバに問い合わせると、www.wizforest.com の IP アドレスが得られる。


DNS サーバはこうした分散管理により、非常に巨大なデータベースを作り上げている。



ところで、最初に問い合わせたサーバが「偶然知っている」こともあり得る。


僕のサイトなんかはともかく、google.com とか youtube.com の場合、問い合わせる人が非常に多い。

そうした問い合わせのたびにいちいち上のような長い手順は踏んでいられない。

DNS サーバは、一度問い合わせた内容はしばらく覚えておいて、次の問い合わせにはすぐ答えられる、という機能も持っている。




ところで、分散管理している、ということは、全体の整合性は誰も管理していない、ということでもある。

これは DNS の重大なセキュリティ―ホールだ。


上に、www.wizforest.com を問い合わせる際の、問い合わせのリレーを書いた。

最終的には、wizforest.com まで問い合わせが来て、正しい IP アドレスを得られる。


じゃぁ、最初に尋ねるネットプロバイダ内の DNS サーバが、聞かれたとたんに嘘の IP アドレスを教えたらどうなるだろう?


「問い合わせた内容は覚えておく」という機能があるので、すぐに IP アドレスを教えてもらえることはある。

だから、それが嘘かどうかなんて気にもせず、本当のアドレスだと信じてしまう。


これは「DNS ポイズニング」と呼ばれる、 DNS の仕組み自体が持つセキュリティホールだ。

(プログラムのバグなどによるセキュリティホールではなく、基本的な仕様自体に欠陥がある)


DNS サーバは「多数のサーバに問い合わせて」IP アドレスを調べるので、その経路のどこか1カ所でもハックされ、嘘を教えるようになっていたら、その問い合わせに関連したすべてのサーバは嘘を信じてしまうのだ。


誰かがどこかの DNS サーバをハッキングして、偽サイトにユーザーを誘導してクレジットカード番号を盗む…なんて犯罪が実際にある。


でも、この仕組みを使って、本物のサイトではなく「キャッシュサーバー」にアクセスさせてしまえば?


ここで、DNS ポイズニングのターゲットは、ネットプロバイダの利用者限定だ。

利用者が外部のサイトを見ようとしたときに、DNS がネットプロバイダ内に設置されたキャッシュサーバの IP アドレスを教える。

「偽のサイト」を教えているのだから DNS ポイズニングなのだが、そのサイトはキャッシュされたもので、寸分たがわず元のサイトと同じだ。


何の被害もないし、むしろメリットだらけなのだ。

セキュリティホールを使うのは褒められたことではないのだが、これは「良い使い方」だ。




akamai のシステム概要としては、以上のようなものだ。


まとめると、キャッシュにより、


・利用者は通信速度が上がる

・コンテンツ提供者は、サーバの負荷が下がる

・ネットプロバイダは回線利用料が下がる


特に、ネットプロバイダが回線利用料を下げるためには「自社にキャッシュサーバを置く」必要があるので、設置場所を提供してくれる。


また、この仕組みを維持するために、DNS という既存の仕組みを巧妙に利用している。

新しい技術ではないので、すぐに使い始めることができる。


誰もが得をする技術で、そのために誰もが喜んでお金を払う。

技術的にも経済的にもよくできている。


こんなシステムを設計したことが、すごいと思う。



おまけ


いい加減話が長いので終わりたいのだが、途中で DNS ポイズニングの話を書いたので、おまけ。

不安にさせたままじゃ申し訳ないからね。


フィッシング詐欺に注意、という呼びかけを見たことはあるだろうか?

メールなどのリンクで偽サイトに誘導されるので、そういうリンクを使わないことが対策とされる。

必要であれば、自分でサイトの URL をブックマークして置いたり、検索したりして入れば大丈夫、と…


でも、DNS ポイズニングは「正しい URL に対して」偽の IP アドレスを教える手法なので、上に書いた方法では対策できない。


DNS ポイズニングの対策はちゃんと用意されていて、誰でも簡単に利用できる。


DNS は普通自動設定されるが、手動で 8.8.8.8 と 8.8.4.4 という二つのアドレスを設定すると良い。

これは google が行っているサービスで、ややこしいので技術説明はしないが、DNS ポイズニングを防いでくれる。


google DNS が公開されて初期のころは、DNS ポイズニングを防いでしまうため、akamai の CDN が使えなくなる、という問題があった。

しかし、現在は akamai と google で協力しており、google DNS でも問題なく CDN が使用できるようになっている。



▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

コンピュータ

関連ページ

uniqlo のシャツ【日記 25/06/29】

別年同日の日記

03年 なかなか忙しくて

09年 夏風邪

14年 ダグラス・エンゲルバートの命日(2013)

17年 バーベキュー


申し訳ありませんが、現在意見投稿をできない状態にしています

uniqlo のシャツ  2025-06-29 19:36:21  コンピュータ 歯車

▲目次へ ⇒この記事のURL

uniqlo のシャツ

家族の買い物に付き合って Uniqlo に行ったら、イカレたデザインのシャツを売っていたので買ってきた。


Peace for All というキャンペーンで、このテーマでいろいろな人・企業にデザインしてもらったシャツを売っているようだ。


僕が買ってきたのは、Akamai という会社のコラボシャツ。店内ポスターではあいうえお順にデザインが並んでいたので、「アカマイ」は先頭だった。こんなイカレたデザインが先頭に描かれているとは。


Uniqlo も良く Akamai にコラボ依頼したな…と思ったら、後で調べたところこれは第2弾だそうだ。

しかし、第1弾は自分としては惹かれるデザインではなかったようなので、こちらでよい。




さて、この Akamai という会社、多くの人は知らないだろう。

そして、僕のようにネット関連の技術者であれば、知らなくてはならない会社だ。


Akamai は、ネットを裏で支える技術企業だ。

消費者にネット接続を提供するプロバイダも、コンテンツを提供する企業側も、そしてコンテンツを閲覧する利用者側も、全員が儲かって幸せになる仕組みを作り上げている。そしてもちろん、そのシステムを提供する Akamai も大儲けしている大企業だ。

これを、25年前の時点で、誰もがすぐに利用できる既存の仕組みの巧妙な組み合わせで作り上げた、ということが素晴らしい。


この仕組みが非常に面白いのだが…巧妙なので、説明すると非常に長くなる。一度書いてみたのだが、話の腰が折れすぎるので、今回は割愛することにした。

(いい説明があればリンクを…と思ったが、これまた技術的で巧妙なので、ちゃんと説明しているページを見つけられなかった。この話、面白いから機会があれば説明したい。)


後日追記

書きました。

akamai の CDN




さて、そんな技術会社の作ったシャツは、技術オタクが泣いて喜ぶようなデザインになっている。


写真を拡大すればわかるが、暗号のような訳の分からない文字列だ。

すでに解読した blog 等もたくさんあるが、暗号部分の解読どまりで、全体の構造を解説しているページは見つけられなかった。

ちょっと解説しておこう。


書かれている内容は以下のようになる。

(改行位置などは T シャツデザインと違うが「正しい」位置にいれてある。そのため、このままコピペすれば実行可能ファイルになる)


#!/bin/bash

eval "$(base64 -d <<< 'IyEvYmluL2Jhc2gKCiMgQ29uZ3JhdHVsYXRpb25zISBZb3UgZm91bmQgdGhlIGVhc3RlciBlZ2chIOKdpO+4jwojIOOBiuOCgeOBp+OBqOOBhuOBlOOBluOBhOOBvuOBme+8gemaoOOBleOCjOOBn+OCteODl+ODqeOCpOOCuuOCkuimi+OBpOOBkeOBvuOBl+OBn++8geKdpO+4jwoKIyBEZWZpbmUgdGhlIHRleHQgdG8gYW5pbWF0ZQp0ZXh0PSLimaVQRUFDReKZpUZPUuKZpUFMTOKZpVBFQUNF4pmlRk9S4pmlQUxM4pmlUEVBQ0XimaVGT1LimaVBTEzimaVQRUFDReKZpUZPUuKZpUFMTOKZpVBFQUNF4pmlRk9S4pmlQUxM4pmlIgoKIyBHZXQgdGVybWluYWwgZGltZW5zaW9ucwpjb2xzPSQodHB1dCBjb2xzKQpsaW5lcz0kKHRwdXQgbGluZXMpCgojIENhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIHRoZSB0ZXh0CnRleHRfbGVuZ3RoPSR7I3RleHR9CgojIEhpZGUgdGhlIGN1cnNvcgp0cHV0IGNpdmlzCgojIFRyYXAgQ1RSTCtDIHRvIHNob3cgdGhlIGN1cnNvciBiZWZvcmUgZXhpdGluZwp0cmFwICJ0cHV0IGNub3JtOyBleGl0IiBTSUdJTlQKCiMgU2V0IGZyZXF1ZW5jeSBzY2FsaW5nIGZhY3RvcgpmcmVxPTAuMgoKIyBJbmZpbml0ZSBsb29wIGZvciBjb250aW51b3VzIGFuaW1hdGlvbgpmb3IgKCggdD0wOyA7IHQrPTEgKSk7IGRvCiAgICAjIEV4dHJhY3Qgb25lIGNoYXJhY3RlciBhdCBhIHRpbWUKICAgIGNoYXI9IiR7dGV4dDp0ICUgdGV4dF9sZW5ndGg6MX0iCiAgICAKICAgICMgQ2FsY3VsYXRlIHRoZSBhbmdsZSBpbiByYWRpYW5zCiAgICBhbmdsZT0kKGVjaG8gIigkdCkgKiAkZnJlcSIgfCBiYyAtbCkKCiAgICAjIENhbGN1bGF0ZSB0aGUgc2luZSBvZiB0aGUgYW5nbGUKICAgIHNpbmVfdmFsdWU9JChlY2hvICJzKCRhbmdsZSkiIHwgYmMgLWwpCgogICAgIyBDYWxjdWxhdGUgeCBwb3NpdGlvbiB1c2luZyB0aGUgc2luZSB2YWx1ZQogICAgeD0kKGVjaG8gIigkY29scyAvIDIpICsgKCRjb2xzIC8gNCkgKiAkc2luZV92YWx1ZSIgfCBiYyAtbCkKICAgIHg9JChwcmludGYgIiUuMGYiICIkeCIpCgogICAgIyBFbnN1cmUgeCBpcyB3aXRoaW4gdGVybWluYWwgYm91bmRzCiAgICBpZiAoKCB4IDwgMCApKTsgdGhlbiB4PTA7IGZpCiAgICBpZiAoKCB4ID49IGNvbHMgKSk7IHRoZW4geD0kKChjb2xzIC0gMSkpOyBmaQoKICAgICMgQ2FsY3VsYXRlIGNvbG9yIGdyYWRpZW50IGJldHdlZW4gMTIgKGN5YW4pIGFuZCAyMDggKG9yYW5nZSkKICAgIGNvbG9yX3N0YXJ0PTEyCiAgICBjb2xvcl9lbmQ9MjA4CiAgICBjb2xvcl9yYW5nZT0kKChjb2xvcl9lbmQgLSBjb2xvcl9zdGFydCkpCiAgICBjb2xvcj0kKChjb2xvcl9zdGFydCArIChjb2xvcl9yYW5nZSAqIHQgLyBsaW5lcykgJSBjb2xvcl9yYW5nZSkpCgogICAgIyBQcmludCB0aGUgY2hhcmFjdGVyIHdpdGggMjU2LWNvbG9yIHN1cHBvcnQKICAgIGVjaG8gLW5lICJcMDMzWzM4OzU7JHtjb2xvcn1tIiQodHB1dCBjdXAgJHQgJHgpIiRjaGFyXDAzM1swbSIKCiAgICAjIExpbmUgZmVlZCB0byBtb3ZlIGRvd253YXJkCiAgICBlY2hvICIiCgpkb25lCgo= ')"

PEACE FOR ALL


これは UNIX のシェルスクリプトだ。

ファイルに chmod +x で実行属性を与えれば実行できる。


先頭行は、bash を使用して実行できる、という、OS に対する指示だ。

2行目が長いのだが、eval している。これは、bash でその次の文字列を評価せよ、という命令だ。

eval の対象となる部分は、 " " で括っている。


さて、「その次」だが、謎の文字列に見える。でも、評価するのはこの文字列ではない。


$( で始まっているが、これは「外部コマンドを実行して、その結果を返せ」という指示だ。

(2行目の最後付近に、対応する閉じ括弧がある)


評価対象は、この外部コマンドが返した結果である。


そして、外部コマンドが base64 -d だ。これは、base64 形式でエンコードされた文字列を、デコードせよ、という指示。

謎の文字列は、base64 エンコードされたもので、後で詳細を書く。


3行目の PEACE FOR ALL は、命令ではない。キャンペーンに合わせて書かれているメッセージ。

しかし、ここに命令ではないものが入っていても大丈夫なようになっている。こちらも詳細は後で。




さて、base64 部分をデコードしたもの。


#!/bin/bash


# Congratulations! You found the easter egg! ❤️

# おめでとうございます!隠されたサプライズを見つけました!❤️


# Define the text to animate

text="♥PEACE♥FOR♥ALL♥PEACE♥FOR♥ALL♥PEACE♥FOR♥ALL♥PEACE♥FOR♥ALL♥PEACE♥FOR♥ALL♥"


# Get terminal dimensions

cols=$(tput cols)

lines=$(tput lines)


# Calculate the length of the text

text_length=${#text}


# Hide the cursor

tput civis


# Trap CTRL+C to show the cursor before exiting

trap "tput cnorm; exit" SIGINT


# Set frequency scaling factor

freq=0.2


# Infinite loop for continuous animation

for (( t=0; ; t+=1 )); do

# Extract one character at a time

char="${text:t % text_length:1}"

# Calculate the angle in radians

angle=$(echo "($t) * $freq" | bc -l)


# Calculate the sine of the angle

sine_value=$(echo "s($angle)" | bc -l)


# Calculate x position using the sine value

x=$(echo "($cols / 2) + ($cols / 4) * $sine_value" | bc -l)

x=$(printf "%.0f" "$x")


# Ensure x is within terminal bounds

if (( x < 0 )); then x=0; fi

if (( x >= cols )); then x=$((cols - 1)); fi


# Calculate color gradient between 12 (cyan) and 208 (orange)

color_start=12

color_end=208

color_range=$((color_end - color_start))

color=$((color_start + (color_range * t / lines) % color_range))


# Print the character with 256-color support

echo -ne "\033[38;5;${color}m"$(tput cup $t $x)"$char\033[0m"


# Line feed to move downward

echo ""


done


また bash のシェルスクリプトだ。


つまりは、シェルスクリプトを、そうと判らなように巧妙に base64 で隠しているだけで、シャツに書かれた元のシェルスクリプトは、上記のスクリプトを動かすためのランチャーに過ぎない。


で、ここまで解読できてしまえば…あとは実行して、としか言いようがない。

このプログラム自体は、それほど面白い動作をするわけではなく、ただカラフルで面白おかしい形に PEACE FOR ALL の文字を書き続けるだけだ。


2行目で起動する上のプログラムは、for 文で「終了条件のない」ループを行っている。

終了条件がないので、終わることはない。CTRL + C で停止するまで止まらない。

そして、CTRL + C した時には、元の(base64 が書かれた)プログラムも停止してしまう。


つまり、元のプログラムの最後の行(3行目)は絶対に実行されない。


元プログラムの3行目には PEACE FOR ALL と書いてあり、これは命令ではないと先に書いた。

しかし、この仕組みにより、命令でないものが書かれていても、特にエラーにはならない。


▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

コンピュータ

歯車

関連ページ

akamai の CDN【日記 25/07/02】

別年同日の日記

06年 訃報

12年 続々々おたふく

13年 髪ゴム

14年 DAISY DAISY

18年 関東梅雨明け


申し訳ありませんが、現在意見投稿をできない状態にしています

wix velo  2025-06-24 09:57:01  コンピュータ

▲目次へ ⇒この記事のURL

先日来書いている町内会ホームページの話の続きだ。


wix.com というサービスで町内会のホームページを作っているのだが、これを選定したのは前任者。

この前任者も、隣の町内会が使っている、というお勧めで選んでいる。


隣の町内会の人も、会社で使っていたから選んだそうだ。

このサービス、基本的には「数ページの WEB サイトを、ワープロ感覚で作れる」といった感じのものだ。


PC とスマホを自動認識してコンテンツの出しわけもやってくれる。

コンテンツ内容は同じだが、2つのテンプレートを使い分けられる、という感じだな。

テンプレートも、PC 用を作ったらある程度自動変換してくれて、スマホ用に微調整すればよい。


あくまでも「テンプレート」が違うもので、CSS で見た目を変えるレスポンシブデザインではない。

ちょっと古いやり方なのだが、初心者にレスポンシブデザインの概念はわかりにくいので、これでよいのかもしれない。




前任者はここら辺まで作ってくれていたのだが、もともと「数ページのサイトを」作るようなもので、日々の更新がしにくい。


wix.com にはブログの作成機能があるので、僕がブログを追加した。

ブログ部分は、サイトデザインとは別の UI で文面だけを作ると、自動的にページが作られるような形だ。

つぎはぎしたような感じで少しわかりにくく、前任者はブログを使う発想にはなっていなかった。

しかし、記事の更新を考えるとブログ形式の方がやりやすい。


実は、町内会には非常に古いサイトがあり、ずっと昔の担当者が作ったものだった。

これが止まったままになっているのだが、perl CGI で作られた「会館予定予約表」の公開ページがあり、この機能が重要。


町内会長から、今のページに作れるかと聞かれていたのだが、wix.com では perl CGI は動かせない。

しかし、今の時代 Javascript がある。wix にも、ページ周囲に影響を与えないよう iFrame のサンドボックス内で Javascript を動かす機能があるので、これで何とか…と思っていた。


でも、wix には velo という仕組みがあり、もっと深い部分で Javascript を使えた…というのが前回まで書いた内容。




さて、velo を知ったのは、こちらのページで。


WixStudioでVeloを使う


WixStudio となっているが、これはホームページデザイン会社がお客さんの為に使用する wix の亜種。

中核部分は変えず、デザインのための UI を「多少馴れが必要だが、効率の良い」別の形式に変えたもののようだ。


wix でも同様に velo を使える。

velo では、wix の中にある DB 等も使用して、プログラムでページを自動生成できる。


この場合、wix で生成したページはテンプレートとして使われることになる。

テンプレートに対して velo で DB 内のコンテンツ内を抽出して流し込む、という感じだ。


velo は全体の仕組みに対して作られた名前で、言語としては Javascript だ。

ライブラリが整えられていて、jQuery に類似した方法でテンプレート内の埋め込み位置を特定したりする。



先にあげたページは、blog で書かれているが何回にも分かれている連載形式。

ある程度読み進むと、「今日は何の日、を表示する」というような内容があった。


僕のやりたいことは、日付ごとに会館の予約状況を表示したい。結構違うが、類似性があると言えばある。

町内会には様々な行事予定もあるし、「今後の行事予定」を表示する機能を作って実験してみよう。


…と思ったあたりで前回の日記を書いた。



「今日は何の日」の改造として表示をするのは、比較的すぐできた。

そこから、関連するページにリンクを張れるようにしたり、詳細を表示できるようにしたり改造して、町内会ページの一番最初、目につきやすいところに「今後の行事」を表示できるようにした。


今後、と言っても全部は書かない。今後3回分の予定だけ。

そして、開始時刻や場所など簡単な概略も、あれば表示する。

さらに細かな情報が書かれたページがあれば、データとして URL を入れておくと、自動的にリンクする。


町内会の行事、回覧板で回しても、1か月以上先の予定だから忘れちゃう人多いんだよね。

(回覧板が回るのに1か月近くかかる組もあり、さらに回覧板を回せるタイミングが月に1回なので、「来月の行事」を回覧するのが通常)




それほど複雑ではないプログラムだったが、これは「Hello, world」みたいなものだ。

DB を扱う仕組み、画面表示を作る仕組みは十分理解できた。


velo で使用できる関数ライブラリ(API)は、こちらのページ でマニュアルが読める。英語だけど。


しかし、言語の入出力作法が理解できて、関数マニュアルがあれば、十分な情報だろう。

もう、何でも作れそうな気がする。(言い過ぎ)


▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

コンピュータ

別年同日の日記

02年 DJB

13年 セミの幼虫

15年 若者の恋愛観

15年 結婚と経済

16年 【訃報】長谷川五郎さん

21年 温泉卵


申し訳ありませんが、現在意見投稿をできない状態にしています

続・町内会ホームページ  2025-06-18 14:30:43  コンピュータ

▲目次へ ⇒この記事のURL

以前町内会のホームページ作ってるという話を書いた。


ひとまずは、機能が揃っていないが公開していた。

だって、全部できてから、なんて言っていたらいつ公開できるかわからないもの。

ネットの世界はβ版で公開して、走りながら修正すればいいのだ。そういうものだ。


前回の記事の最後に書いたが、できていない機能というのは「町内会館の予約閲覧」だった。

いつの日に空きがあるか、月別のカレンダーで調べられる。

予約は電話してしないといけないのだけど、いつ空いているか調べられるだけでもありがたいのだ。


これ、以前のページでは CGI (サーバ側でプログラムを動かす仕組み)で動いていた。

でも、今時 CGI 設定できるサーバーなんて特殊だからね。特に、今回借りている wix.com は商用 CMS (コンテンツ・マネジメント・システム。HTML を知らないでも、ファイル単位で管理しなくても、 WEB ページが作れたりするプログラムの総称)だから、CGI なんて動かせない。


wix.com には、HTML 内に iFrame でサンドボックス化して Javascript コードを埋め込む機能がある。

これ使って同等機能をプログラムするしかないかな、と思っていた。


その場合、データを置く場所が問題になる。

Google spread sheetには、API でデータの読み書きをする機能があるので、それでデータ置き場の代用をするか…などと考えていた。




会長から「町内会館の予約閲覧は新ページに入れられないの?」と聞かれて、あれは機能的に無理なんですよ…と説明する。

そのまま持ってくることは無理だけど、何とかしたいとは思ってます。でも時間がかかります、と。


このやり取りをしてから、重い腰を上げて取り掛かろうとした。


この調査段階で、別の事に気づく。

wix.com に Javascript を仕込むのは、iFrame を使ったコード埋め込み以外に「velo」という別の仕組みがある、というのだ。


Javascript のプログラムを仕込む、なんていうのは、わからない人に見せれば混乱するだけ。

だから、この機能は丁重に隠されていた。知っている人しか使えない。


そして、この機能を使う場合には、wix.com 内で用意してある DB も使えるのだ。簡易的な機能に限定されるけど。




使ってみて分かった。


この仕組み、wix.com のベース部分の機能を、安全なようにオブラートに包んで公開したもののようだ。


理解するほど、wix.com 内の各種機能… blog やコメント機能、商品販売などが、じつは用意された DB と Javascript の組み合わせで作られているのだ、と分かる。


ざっくりと言えば、仕組みはこうだ。

DB は内部的に SQL DB を使用しているようだが、ユーザーにはそこまで見せない。文字列をプライマリーキーとして、key value store のように動作する。


ただし、特定カラムで検索することもできるし、ソートして出力もできる。ここら辺は key value store ではなく SQL 的。


そして、画面を書き換えるのは jQuery 的に行う。

jQuery がもう WEB ページ作成としては古臭いフレームワークだが、jQuery そのものではなく、wix で「類似品」を作ったもののようだ。


ともあれ、そうした環境は使える。これは、wix.com の通常機能で作成したページの中で、必要箇所にデータを埋め込んだりするのに使用するものだ。


DB 操作と HTML 操作には、用意された API を使用する。他にもいろいろな API があったが、詳細にあまり目を通していない。

あとは、普通の Javascript だ。


永続データの読み書きと、画面が自動で作成される CMS 内での、画面への割り込み方が示されたのだ。

あとは普通の Javascipt 、というのは、つまりは「なんでもできる」ということ。これほど心強いことがあるだろうか。


ひとまず、まだ練習がてらに「直近の町内イベント」を表示する機能を作ってみている。

これで、DB から絞り込んだデータを読み出して、画面に表示することはできるのだ。

これがうまく行けば、月ごとの利用予約表の読み書きだって、大して変わらない。




惜しむらくは、他に類似の悩みを持っている人がいても、プログラムをパッケージ化して渡せないことかな…


CMS が生成する画面に出力する手段として、CMS が定めた HTML エレメントの ID をプログラム内に使用する必要があるのだ。

画面構成が違う環境では、この ID も変わってしまう。プログラムだけ人に渡しても役立たない。


あとは… wix.com は、初心者向けによくできてはいるのだが、動作が遅いんだよね。

なんかもっさりしている。


あと、スマホか PC かを見極めて出力を変えているようだ。

同じ出力のまま、 CSS でレイアウトを調整するような、レスポンシブでない。


ここら辺が古臭い。

このやり方だと、キャッシュサーバー使えないんだよね。


古臭い、というのは「歴史がある」ことの裏返しでもあるのだけど、ひとまずはこの環境で続けることが大切なので、折り合い付けていきます。


▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

コンピュータ

別年同日の日記

02年 レタスその後

04年 やっぱ駄目でした

04年 検索機能

13年 鶏肉と夏野菜のトマト煮込み

14年 追悼:ダニエル・キース


申し訳ありませんが、現在意見投稿をできない状態にしています

【訃報】ビル・アトキンソン  2025-06-09 12:23:59  コンピュータ 歯車 今日は何の日

▲目次へ ⇒この記事のURL

ビル・アトキンソン氏が6月5日にすい臓がんで亡くなられたそうです。

まだ74歳。死ぬには早すぎます。


Apple 社のプログラマで、初期の Mac の環境に寄与した人です。

Mac の描画ライブラリである Quick Draw を一人で書いています。


Mac の元となる Lisa というマシンが、Alto というマシンを参考に作ったのは有名な話です。

ただ、Alto にはややこしい描画を支援するハードウェアがあった。


これを「全部ソフトでやっている」と勘違いしたビル・アトキンソンは、必要な機能がすべて揃った QuickDraw を作り出すのです。


ウィンドウを描画しようとしたときに、そのウィンドウが別のウィンドウに一部分隠されていたら、隠されている部分は描かないでそれ以外の部分を描きます。

これ、今では当たり前ですが、物凄く面倒な処理です。ウィンドウによる操作、というものを始めて市販マシンで実現しようとした Lisa では、この面倒な処理をどうにかする必要がありました。


それを解決するプログラムを作ったのが QuickDraw です。


他にも、ジョブズのこだわりで「長方形を描画するときに、角を丸くしたい」という要望に応えています。

元となった Alto は、ボタンなどはすべて長方形でした。でも、現実のボタンなどは角張ったものなどあまりない。角が優しい丸みを帯びているのが普通です。

そこで、「角丸矩形」(Round Rectangle)を描画する機能を作ったのです。


また、Quick Draw が非常に優れている点として、「数学的に正しい描画が行われる」点があります。

通常のグラフィックライブラリでは、画面のドットを指定して「どこからどこへ」線を引く、などと命令を出します。

しかし、Quick Draw では、仮想の空間に描画を行い、それをどのように画面に反映するかを別途指定します。


このため、拡大縮小なども自由ですし、画面とは違う解像度を持つ、プリンタなどへの出力も綺麗に行えます。


現在の iPhone にもこの概念は受け継がれており、気軽に画面を拡大・縮小できます。

ただ、現在の iPhone は Quick Draw ではなく、その後同じ概念で開発された PostScript になっています。




ビルは Quick Draw を作っただけでなく、それを使用した「Mac Paint」も作っています。

まだ Mac 以外にマウスオペレーションのコンピューターがなかった時代に、「マウスの使い方」を伝えるためのソフトでもありました。


もちろん、グラフィックソフトですから、QuickDraw の機能を存分に引き出しています。


さらに、伝説のソフトウェアともいえる、HyperCard を作成し、すべての Mac で使えるように無償提供しています。


これは、ひと悶着合ったらしいです。ビルは自分が作ったソフトを多くのユーザーに使ってほしくて無償を主張し、ジョブズは会社の製品なのだから、有償を主張する。

最終的に「無償提供しないなら会社を辞める」とビルが言ったため、ジョブズが折れています。



さて、この HyperCard の何が伝説かというと、体験していない人にはちょっと説明しずらいのです。


まず、HyperCard はカード型データベースです。

画面サイズの「カード」を作り、そこにありとあらゆるものを格納できます。文字に限らず、グラフィックでも貼り付けられます。

Mac の Copy & Paste 機能を駆使して、自由にデータを張り付けておけますし、他のソフトにコピペできます。


画像は無理ですが、文字列なら検索もできましたから、ちゃんとデータベースとして機能します。

これだけであれば、難しい前提知識なしに誰でも使えました。



そして、貼り付けてある「部品」にプログラムを書き込むことができました。

プログラムがあると、部品がクリックされたときにプログラムが実行されます。


これにより、クリックされると「次のページを表示する」とか、「隠されていた部品を表示する」とか、「音を再生する」とか…とにかくいろいろできたのです。


いろいろできると当然遊びたくなります。

実は、ここで書く「プログラム」は非常に単純なもので、誰でもすぐ覚えられるレベルなのですが、簡単なゲームを作るには十分でした。

実際、 HyperCard で書かれたゲーム、というのは Mac では非常に人気があったのです。


ちなみに、「HyperCard以前」のプログラム環境では、ボタンを押したら特定のプログラム実行、ということをするのに、何十行ものプログラムを書く必要がありました。

まず画面にボタンを描いて、そのボタンをクリックするための仕組みを作って、クリックされたら動くプログラムを作って、としないといけない。



データベースとして画像を扱い、その画像を「ボタン」と見立ててプログラムを与え、ボタンを押したら実行される、という考え方が大発明で、この考え方は現在他のプログラム言語にも取り入れられています。


また、ボタンを押したことがそのボタンが置かれているカードにも伝わり、カードの束(スタック)にも伝わり…

プログラムはボタン部品だけでなく、スタックなどにも書けました。

こうした「上位の部品に出来事が伝わる」という仕組みも、今のプログラム言語に取り入れられています。


現在、一番 HyperCard の概念を引き継いでいるのは、ブラウザ上で動く Javascript ではないかと思います。

当ページでも Javascript は使用していますし、Web 上の Javascript は多くの人がお世話になっているはずです。

HyperCard がなければ、こうした環境は作られなかったでしょう。


ただ、Javascript が同じような環境か、というとそれは違います。

Javascript は結構プログラム上級者向け。誰でも気軽に楽しめる、というものではありません。


HyperCard では、もっと簡単・気軽にプログラムを作れました。

そうした環境を作り出した、というのが、ビル・アトキンソンの突出した才能でした。




話が前後しますが、Mac 以前の Apple// のころに、Apple 版 Pascal を作ったのもビル・アトキンソンです。


当時は BASIC がプログラム言語として普及していましたが、次は Pascal 、と誰もが思っていました。


実際に普及したのは C 言語でしたが、Pascal とは兄弟のような関係にあります。

(どちらも Algol を手本に作られた言語)


ただ、Pascal の方が初心者でも扱いやすい仕組みがありました。

だから、BASIC の次は Pascal 、と考えられていたのです。


でも、コンピューターがホビーストだけのものではなくなり、広く普及すると、プログラムする人は激減します。


コンピューターが普及しておらず、市場が小さなときには、市販ソフトも多くはありませんでした。

欲しいものがあったら、プログラム言語を覚えて自分で作るしかなかった。


でも、普及したら市販ソフトが沢山作られるようになりました。

多くのユーザーは、ただその市販ソフトを使うだけでいいのです。プログラムを作る必要はありません。


そして、そうした「市販ソフト」を作る人の間では、Pascal よりも C の方が支持されます。

Pascal は、初心者の為に速度効率よりも扱いやすさを優先しているところがありますが、C は高速に動作します。

代償として「初心者向けではない」のですが、市販ソフトを作るような人には問題ありませんでした。



それはさておき、ビル・アトキンソンは、Apple // の Pascal の為にグラフィックライブラリも作りました。

Apple // は画素も荒く、色の扱いにも制限がありました。グラフィックライブラリでは、そうした制限を気にせずに絵を描き、内部で Apple// の制限にあった形に変換して描画する、というような仕組みがあったそうです。


これがのちの QuickDraw の原型になっています。


Mac の初期の内部 ROM が、Pascal を前提とした形で作られているのも有名な話です。




HyperCard の後、ビル・アトキンソンは Apple 社内で「Knowledge Navigator」の実現化プロジェクトに携わります。


1980年代末、Apple はウォズもジョブズも退社した後で、どちらに向かえばよいのか示せる人がいませんでした。

そこで、社長のスカリーがぶち上げたのが Knowledge Navigator という大構想。

自然言語で会話することでコンピューターに指示を与え、コンピューターは個人の専属秘書のようにふるまいます。


その当時の技術ではとてもできない、と分かっているのだけど、コンピューターがみんなの暮らしを豊かにするためには、こうした方向に向かわなくてはならない、という「意識の共有」を、社内のみならずコンピューター業界に対して行ったのです。


実際、その後長い時間をかけ、コンピューターはその方向に進んできました。

でも、Apple 社としてはそんな長期計画は儲からない。実現化プロジェクト1990年には中止になります。


そこでビル・アトキンソンが興したのが「General Magic」という会社。

Apple での研究の続きを行い、個人のための「秘書」となるコンピューターを作ろうとしました。


まだインターネットが普及する前の事ですが、必要ならネットワーク上で最新の情報を集め、ユーザーが「知りたいこと」に応えてくれる。


端末の OS は MagicCap と呼ばれ、ビルがほぼ一人で書き上げたそうです。

そして、この MagicCap は、先に書いたようにネットワークを前提としていました。端末内でもプログラムは動かせるが、必要に応じてネットワークにもプログラムの実行を依頼する。


UNIX 等の実験的なネットワークではそうした実行例はありましたが、市販する商品としては非常に先進的。

しかし、当時の多くの人は、こうした概念を知りません。製品としてわかりにくいのです。


そこでビル・アトキンソンが作った造語が「Cloud」。

雲、という意味ですが、ネットワークの向こうの、なんだかもやもやした部分に、見えないけどいろいろな情報がある。

そことやり取りすることで、必要なことを実現する、というのです。


今では当たり前に Cloud って使われてますね。ビル・アトキンソンによる造語です。


この OS は、協力各社から次々商品化されます。

日本でも Sony から MagicLink の名前で発売されています。


でも、時代が早すぎました。

通信はまだ電話回線に頼る時代。手元の端末と遠隔サーバの協調動作、というのは、通信速度がネックになります。


結局、発売はしたものの非常に遅くて使いづらく、しかも通信料金がかさむ、というなんとも使いにくいものだったのです。


しかも、商品的に失敗だったため、対応サーバは短期間の後に次々と閉鎖。

端末を購入した人も、サーバーがなくては使い続けることができません。



今では各社が同様のことを実現していますが、「技術的に実現可能」な時代になってからも、GeneralMagic 社の特許に抵触するため提供できない、ということもあったとか。

各種特許が切れたのが 2010年ごろ。その頃から Cloud 技術が急に普及してきたのも、そういう側面があったようです。


構想が早すぎて、時代が追いつくのに 20年かかってしまったのです。




ビル・アトキンソン。

当ページを書き始めたころの、僕の「ヒーロー」の一人でした。


ご冥福をお祈りします。


▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

コンピュータ

歯車

今日は何の日

別年同日の日記

02年 最終戦略

05年 spring has come

05年 3ヶ月点検

13年 WEB上でのドット絵の拡大

16年 8086 発表日(1978)

17年 計算機の同人誌

19年 新マシンセットアップ中

23年 大学時代の夢日記


申し訳ありませんが、現在意見投稿をできない状態にしています

マリオカートワールド  2025-06-07 10:01:13  コンピュータ 家族

▲目次へ ⇒この記事のURL

僕はまだ遊んでないのだけど、長男が遊んでいるのを後ろから見ていて思ったこと。

(長男は小学生のころに、すでに15年前のゲームだったダブルダッシュ!を遊んでからこのシリーズが好き。マリオカート8もやり込んでる)


今度のマリカー、AM1 研の影響受けてない?


…いや、そんなことあるわけないので与太話なのだけど、まぁ聞いてくれ。




今回のゲームの概要発表があった時に思った。

レースゲームなのにオープンワールドらしい。それってHarley-Davidson & L.A. Riders


知らない人の為にざっくり書くと、「オープンワールド」という概念は、セガの作った「シェンムー」が発祥、とされている。

小さな町ではあるが、丸ごと作り込んで、その中で時間で生活する人たちを作り、自分が操作する主人公は自由に行動できるようにしたのだ。


でも、同じセガの中で、もっと先にそういうことをやったゲームがあった。それが先に書いた Harley-Davidson & L.A. Riders だ。(長いので以下 L.A. Riders と表記)


このゲームでは、名前の通り L.A. …ロサンゼルスの街を丸ごと作り込んだ。

その中で、バイクを駆って自由に行動できる。


とはいえ、業務用だったので短時間で遊ばせる必要がある。

できるのは「ランダムに提示されるチェックポイントを回る」というレースゲームだった。


でも、これであるていど「大きな街を作り込む」技術にめどが立ったのだ。




今回のマリオカートはオープンワールドになっており、自由に走り回れる。

…とはいえ、普通のレースの場合は、オープンワールドの一部区画を区切ったり道を閉鎖したりして、レース用に整備している、という形になる。


それでも、今までのような「周回コース」ではなく、次々と景色が変わる長距離を走ったりできるのだけど。



本当に自由に走り回れるのは「フリーモード」だ。


家庭用ゲームなので時間制限なく走れるが、時々ミニゲームが始まるスイッチを見つける。

押すと、チェックポイントが示されて、制限時間内に回るミニゲームが始まったりする。


車でチェックポイントを回るのだから当然そうなるだろう、という感じなのだが、L.A. Riders を知っている身としては、そっくりに見える。




もう一つ、こちらは見てから思ったことだが、「クールライダーズ」も感じる。

一つのレース場を走るようなゲームではなく、世界各地を走り抜けていく大レース。

「マリオカートワールド」も、名前の通り世界各地をイメージしたステージを駆け抜けていく。



「ライダーズ」とついている通り、バイクで走るレースゲームだが、余り真面目なものではない。

バカバカしいと笑いながら遊ぶタイプ。パーティゲームだと思っていい。


小さな障害物に当たると、ポコポコと飛んでいく。

レースゲームだから障害物をよける方が良いのだが、当たっても大した問題にはならないのだ。


今度のマリオカートも、街の中の街頭やベンチ、ガードレールなど、当たると飛んでいくのだ。

ガードレールがそんなに簡単に飛んだら歩行者の安全守れないでしょ、と思うが、自由に走ることを優先しているのだろう。



そして、やたらとジャンプする。

車やバイクなのに、ちょっとした段差や壁を使って、すぐにジャンプできるのだ。これも、オープンワールドを自由に走るために必要なのだろうが、ジャンプの際に、いちいちポーズを決めてアピールできる。


…これもクールライダーズなんだよね。

クールライダーズ、レースゲームなのにやたらと跳ねまわり、ジャンプするとポーズを決めて「Cooool!!」とか表示された。




他にも WING WAR っぽさもある。

これも AM1 研のゲームで、飛行機の空中戦を行うゲームなのだけど、障害物にぶつかっても「転ぶ」だけなんだよね。


マリオカートワールドも、マリオカート8からの引継ぎで「空を飛べる」。

でも、何かにぶつかっても転んで落ちるだけ。事故にはならない。



…というわけで、話半分に聞いてもらっても構わないのだが、1990年代後半の セガ AM1 研のテイストを感じるのだ。

よく知っている人には納得してもらえると思うが、なにぶん古すぎる話だし、上記にあげたゲームを全部知っている人がどれだけいるかわからない。



別に真似したわけではなく、「似たようなゲームを作っていたら、同じ結論にたどり着いた」だけだとは思うのだけど、すごく懐かしさを感じたので主張したかったのでした。


▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

コンピュータ

家族

別年同日の日記

02年 カエル

16年 アラン・チューリング命日(1954)、ドナルド・デービス誕生日(1924)


申し訳ありませんが、現在意見投稿をできない状態にしています

Switch2  2025-06-06 11:30:33  コンピュータ 歯車 家族

▲目次へ ⇒この記事のURL

Switch2 届いた。


Switch 発売の際は、事前に「しばらく様子見」と思っていたら、発売後の人気爆発で入手困難だったからね。

今回は最初から予約していたのだ。


もちろん、予約時点で申し込み殺到で、抽選なのはわかっている。

僕は運よく当たった。自慢するつもりはなく、本当に運が良かっただけだ。


(任天堂の抽選は外れ続けている。

 取り下げてよいのだが、外れた人は次回に持ち越し、というシステムなので、取り下げることもできない。

 僕が当たったのは Amazon に申し込んだ分だ)




先に書いたが、昨日は仕事に加えて町内会の作業も忙しく、Switch2 の開封は夜。


ひとまず起動して一通り見るが、今まで使っていた Switch は子供たちも遊んでいるのでそのままで…というつもりだった。


でも、完全移行を促されるのね。完全移行しない、という選択肢はない。

いくつかのゲームは、セーブデータが Switch2 に移動し、Switch からは消えてしまう。

(もちろん、そうならないゲームもある)


この移行作業が、とにかく時間がかかる。届いてすぐに開封して始めとけばよかった。


移行作業が終わったら、今度はゲームの一斉ダウンロードが始まった。

移行したのはセーブデータだけで、ゲームはストアから再ダウンロードなのだ。


最初は様子を見ていたのだが、遊びたいのでダウンロードしながら操作。


NINTENDO SWITCH2 のひみつ展」を遊びたい。

ストアに入ると、同梱ソフトであるマリオカートをダウンロードできるよ、と言われるので、ダウンロード指示。

そしてすぐに「ひみつ展」を購入。マリカーのダウンロードはストップさせて、ひみつ展を優先させる。


Wii が発売されたときに「はじめての Wii」というソフトがあった。

モーションセンサーと、センサーバー、という全く新しい遊び方について、ミニゲームで使い方を体験させるためのソフトだった。


「ひみつ展」も同じようなものと聞いている。なので、マリカーのようなビッグタイトルもいいのだが、まずは新しい機械のすごいところを体験してみたいのだ。




それほど時間がなかったので少ししか遊んでいないが、よくできている。

ミニゲームはもちろんあるが、様々な「工夫」をゲームの形式で教えてくれるのだ。


ゲームを作るうえで、「技術」はやりたいことを支える裏方であり、そこを自慢してはいけない。

でも、自慢ではなく、工夫を開示することで、これでどんな遊びが出てくるのだろう、と素直に面白がれる。


マウスで遊ぶミニゲームが面白い、と事前に聞いていた。実際面白かった。


でも、もっと驚いたのは、「背面スタンド」をゲームにしてしまったことだ。


Switch は背面スタンドにいくつかのタイプがある(我が家のは初期型で、壊れやすかった。実際早々に壊れた。その後改良された)。

Switch2 では、これをかなり広い範囲で、自由な角度で固定できるようにしている。


そして、モーションセンサーが本体にも入ったようだ。以前はコントローラーにしか入っていなかった。


それで何をするかというと、「30度に立ててください」とか言われるのだ。30度と思うところで立ててしばらく待つと、モーションセンサーで重力の方向を調べて角度を割り出す。

そして、狙った角度との違いを示されるのだ。


こんなゲームが成立するのはミニゲーム集だから、なのだけど、遊びの幅が広がる気がしません?


他にも、様々な技術的な工夫を伝えてくれる。

さらには、実は任天堂は以前からその技術に取り組んでいた、という豆知識もある。


今回コントローラーがマウスになっていることが話題になっているが、そういえばスーファミ用のマウスってあったね…。言われるまで忘れてたよ。


120fps の体験とか、テレビに繋いでいると「本体をテーブルモードで」と言われてしまう。

いや、我が家のテレビが 120fps 対応ではないからだけど。


それで、簡単な動きを見せられて「20fps か 120fps か」の2択で答える。


さすがに 20 か 120 かはわかりやすいのだけど、60fps と 120fps だと見極めは難しい。

でも、慣れると明らかにわかるようになる。わかるようになると、120fps 対応のテレビが欲しくなる…



あ、そういえば「4K テレビに接続すると遊べます」というミニゲームもあったな。

「あえて」ファミコンのスーパーマリオの 1-1 を、4K テレビで遊ぶらしい。


これは見られていない。4K テレビも欲しいよね。




技術的な工夫を知ってほしい、それで広がる新しい遊びの可能性を伝えたい、というのはもちろんなのだけど、ここで「工夫」として取り上げるくらいなのだから、全部特許取っているのだろう。


これは、他社に対する牽制でもある。

ミニゲームの形とは言え、「背面スタンドの角度」で遊ぶゲームは、もう他社は作れないわけだ。


いや、そんなゲーム今後もあり得ないでしょ、と笑うことなかれ。今は背面スタンドだが、場合によっては「物理的に角度を作るゲーム」が作れなくなるかもしれない。


任天堂は DS の時にマリオ 64 を移植した。

アナログスティックがなかったので、タッチパネルでアナログスティック代わりにする操作法を作り出し、特許を取った。

当時は、タッチパネルを使うゲーム機なんて他になかったので、そんな特許任天堂以外には関係ないだろう、と誰もが思っていた。


しかし、スマホ時代になった時にすごく効いたからね。

スマホでゲーム作ろうとすると、ことごとくこの特許に引っかかるのだ。

(今は 20年たって特許が切れたので、問題なく作れる)


それが、ずっと後で時代が追いついたのだ。

背面スタンドで遊ぶ、だって、今後何が起きるかなんて予測できない。

思いついた遊び方は全部特許にして、世の中に公開してしまった方が良い。

「ひみつ展」には、そういう側面もあるのではないかと思う。




先に書いたように、まだ遊んでいる最中。


やっと「内部基板」に入ったところ。

外形的な特徴だけでなく、内部基板とかもゲーム上で見せてくれるのだ。

「本物を分解しないでね」って注釈付きで。


不思議で興味深いゲームである。


▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

コンピュータ

歯車

家族

別年同日の日記

02年 晴天の霹靂

02年 Home Brew

04年 そう来るとは思わなかった

04年 77の手習い

04年 怪我

11年 PC購入

13年 次女のぬいぐるみ

14年 フェルディナント・ブラウンの誕生日

16年 テトリス完成(1984)

17年 キャベツ料理

18年 凄腕プログラマ


申し訳ありませんが、現在意見投稿をできない状態にしています


戻る
トップページへ

-- share --

97000

-- follow --




- Reverse Link -