〒518-0418 三重県名張市富貴ヶ丘5番町96番地
こんにちは、タクミ先生です。ヒロ君、将来プログラマーを目指すなら、IT業界の用語について知っておくと役立ちますよ。今回は「相対アドレス指定」についてお話ししましょう。これは、プログラム内のアドレスを現在地からの位置関係で指定する方法です。つまり、自分がいる場所を基準にして、別の場所までの相対距離を指定することで、アドレスを特定することができるんです。例えば、データが格納されているアドレスから、次のデータが何バイト後にあるかを指定することができます。理解するのに少し時間がかかるかもしれませんが、プログラムを書きながら実際に使ってみると理解できるようになるはずです。頑張ってくださいね。
当ブログは全てAIが執筆しています。どうか優しい気持ちでお読みください。

Table of Contents

相対アドレス指定とは何ですか?

ヒロ:タクミ先生、相対アドレス指定って何ですか?
タクミ: 相対アドレス指定とは、HTML文書でリンクを作成する際に、自分自身が現在表示されているページを基準にしてリンク先を指定する方法のことです。
ヒロ: 自分自身が現在表示されているページを基準にするってどういうことですか?
タクミ: 例えば、AページとBページにそれぞれリンクを貼りたい場合、相対アドレス指定では、Aページから見たBページの位置関係を書くことでリンクを作成します。つまり、自分が現在表示されているページを起点にして、相対的な位置を指定するわけです。
ヒロ: なるほど、相対的な位置を指定するんですね。でも、絶対アドレス指定との違いは何ですか?
タクミ: 絶対アドレス指定とは、自分自身が現在表示されているページとは無関係に、完全なURLを指定してリンクする方法です。つまり、どのページからでも同じURLにリンクすることができるというわけです。
ヒロ: なるほど、そういうことなんですね。相対アドレス指定の方がシンプルで使いやすそうです。ありがとうございました、タクミ先生!

相対アドレス指定の基本的な使い方を教えてください。

ヒロ:タクミ先生、相対アドレス指定ってどういうことですか?
タクミ:うん、相対アドレス指定は、HTMLやCSSでファイルや画像などを読み込む場合に使う指定方法ですよ。相対アドレスとは、現在のファイルから見た他のファイルの場所を示す方法で、絶対アドレスとは違ってURLをフルで書かなくて良いんです。
ヒロ:あ、なるほど。でも、どういう書き方をするんですか?
タクミ:例えば、現在のファイルから見て、同じ階層にある画像を読み込む場合は、「./」と書きます。「./」は現在のファイルを起点として、同じ階層を意味します。他にも「../」は1つ上の階層、「../../」は2つ上の階層を示します。
ヒロ:なるほど、相対アドレスって階層が深くなっても使えるんですね。
タクミ:そうだね。でも、注意点としては、同じ階層に複数のファイルがある場合、ファイル名もちゃんと指定しなければならないということです。また、相対アドレスで指定するファイルは必ず存在するファイルである必要があるよ。

相対アドレス指定と同様の機能を持つものには何がありますか?

ヒロ:先生、相対アドレス指定の他に同じような機能のものはありますか?
タクミ:そうですね、例えば相対的な位置を指定する「相対パス」や、絶対的な位置を指定する「絶対パス」などがありますよ。相対パスはカレントディレクトリ(現在の作業場所)を起点にして指定する方法で、絶対パスはコンピュータ全体のルートを起点にして指定する方法です。イメージにすると、相対パスは家を出発点にして、目的地までの距離を歩いて足算で計算する感じでしょうか。一方、絶対パスは自宅を出発点にして、目的地までの距離を地図で調べて計算する感じですね。

相対アドレス指定が必要な理由を教えてください。

ヒロ:タクミ先生、相対アドレス指定って何ですか?
タクミ:大事な質問だね。相対アドレス指定は、ファイルの中にある別のファイルを呼び出す際に必要な指定方法だよ。例えば、あるファイルから別のファイルを呼び出すとき、そのファイルがどのディレクトリにあるかによって、正しいパスを指定する必要があるんだ。
ヒロ:それは何故ですか?
タクミ:ファイルの場所が変わってしまった場合、正しいパスを指定できていないと、正しいファイルを呼び出せなくなってしまうんだ。それを防ぐために、相対アドレス指定を使うわけさ。相対アドレス指定を使えば、ファイルの場所にかかわらず、正しくファイルを呼び出せるようになるんだ。
ヒロ:なるほど、相対アドレス指定って便利なんですね。では、どのように使うのですか?
タクミ:相対アドレス指定では、呼び出したいファイルと自分自身がどのディレクトリにあるかによって、パスを指定するんだ。例えば、あるディレクトリAにあるファイルから、別のディレクトリBにあるファイルを呼び出す場合は、「../B/ファイル名」というように指定するんだ。これで、呼び出したいファイルを正しく呼び出せるようになるんだよ。

相対アドレス指定の利点は何ですか?

ヒロ:先生、相対アドレス指定とは、どういうことですか?
タクミ:相対アドレス指定とは、現在の場所から相対的に指定する方法です。例えば、地図を見て目的地にたどり着くために、自分が今いる場所から目的地までの距離や方向を調べ、進む方向を決めるような感じですね。絶対アドレス指定とは、場所を指定する際に絶対的な位置を指定する方法なので、地図で言えば緯度経度のようなものです。
ヒロ:そういうことなんですね。相対アドレス指定の利点は何ですか?
タクミ:相対アドレス指定の利点は、絶対アドレス指定に比べて直感的で柔軟性がある点です。たとえば、Webページでの画像表示時に、画像ファイルがHTMLファイルと同じディレクトリ内にある場合、相対アドレス指定を使えばより簡単に画像を表示することができます。また、フォルダ構成を変更する場合にも、相対アドレス指定を使えば参照元のHTMLファイルと画像ファイルの配置関係が変わっても、HTMLファイル内のリンク先を手動で修正する必要がなくなります。

相対アドレス指定の欠点は何ですか?

ヒロ:タクミ先生、相対アドレス指定っていうものを聞きました。どんなものなんですか?
タクミ: 相対アドレス指定というのは、ファイルやフォルダの場所を、現在の位置から相対的に指定する方法です。たとえば、自分のコンピュータ内のフォルダ「Documents」内にある「report.txt」というファイルを指定する場合、相対アドレス指定だと「Documents/report.txt」と指定します。つまり、現在位置が「Documents」内であることが前提となります。
ヒロ: 「現在の位置」というのは、どういうことですか?
タクミ: たとえば、あなたが現在開いているフォルダが「Desktop」で、その中にある「work」というフォルダ内にある「readme.txt」というファイルを指定したい場合、相対アドレスだと「work/readme.txt」と指定します。つまり、現在の位置が「Desktop」であることが前提となります。ただし、この方法だと他の場所からアクセスした場合にはファイルを正しく認識できなくなるという欠点があります。
ヒロ: そうだったんですね。でも、それって大丈夫な場合もあるんですか?
タクミ: はい、確かに、作業中のプログラム内で相対的な場所を利用することで、ディレクトリの構造を一つ一つ指定しなくてもすむという利点もあります。ただし、構造が複雑になると、誤った場所を指定してしまう恐れもあるので、適切に注意しなければなりません。また、Webページ内では、相対アドレス指定を用いることで、画像やCSSファイルなどにアクセスすることができます。しかし、Webページの構造が変更された場合には、正しく表示されなくなるという問題もあるので、注意が必要です。

相対アドレス指定の種類には何がありますか?

ヒロ:タクミ先生、相対アドレス指定の種類には何がありますか?
タクミ:よく聞いたね、ヒロくん。相対アドレス指定には、ベースレジスタ相対、インデックスレジスタ相対、ベースレジスタ+インデックスレジスタ相対、プログラムカウンタ相対、スタックポインタ相対、ディスプレースメント相対の6種類がありますよ。
ヒロ:それぞれどんな違いがあるんですか?
タクミ:たとえば、ベースレジスタ相対は、あるレジスタに格納されている値をベースに、一定のオフセット値を足すことでアドレス指定をする方法です。一方、インデックスレジスタ相対は、あるレジスタに格納されている値と、別のレジスタに格納されている値を足すことでアドレス指定をする方法ですね。それぞれの方法で、アドレス指定の方法が違います。
ヒロ:なるほど、それぞれの方法でアドレス指定が違うんですね。ありがとうございます、タクミ先生。
タクミ:いい質問だったね、ヒロくん。相対アドレス指定は、プログラミングの基本中の基本なので、しっかり覚えておくととても役に立つよ。

相対アドレス指定で使用する書き方には何がありますか?

ヒロ:タクミ先生、相対アドレス指定で使える書き方って何があるんですか?
タクミ:相対アドレス指定には、「..」と「.」があります。例えば、「../img/image.jpg」と書くことで、現在のページから1つ上のフォルダーにある「img」フォルダーの「image.jpg」を指定することができます。
ヒロ:「..」と「.」、なるほど。でも、それぞれどういう意味なんですか?
タクミ:「..」は、現在のフォルダーの親フォルダーを指し示します。つまり、1つ上のフォルダーを示します。「.」は、現在のフォルダーを指し示します。
ヒロ:なるほど、親フォルダーは「..」、現在のフォルダーは「.」、ということですね。わかりやすい説明、ありがとうございます!

相対アドレス指定のURLパスとは何ですか?

ヒロ: タクミ先生、相対アドレス指定のURLパスって何ですか?
タクミ: まず、URLとはウェブサイトの住所のようなものだよ。その住所の中には、サイトのファイルや画像が置かれている場所を示す「パス」があるんだ。パスには、2種類あって、一つが相対パス、もう一つが絶対パスだよ。相対パスは、現在いるページからの位置関係でパスを指定する方法なんだ。例えば、自分がいる場所から左側に2つ上がった場所にある画像を指定したい場合、^/../^/../というように記述することで、その位置を示すことができるんだ。理解できたかい?

相対アドレス指定の相対性とは何ですか?

ヒロ:タクミ先生、相対アドレス指定の相対性って何ですか?
タクミ:よく聞いてくれたね、ヒロさん。相対アドレス指定とは、特定の場所からの距離を使って、他の場所を指し示す方法のことだよ。
ヒロ:なるほど、それで、相対性って何ですか?
タクミ:ほら、相対性って言うと、物事がどのように見えるかっていうことを、他の物事との関係から考えることだよ。例えば、相対的な速度っていうのは、ある物体がどのくらい速く動いているかを、他の物体との関係から考えることだね。
ヒロ:なるほど、相対アドレス指定の相対性って、他の場所との距離から指し示す方法で、物事の見え方を他の物事との関係から考える方法ってことですね。
タクミ:その通りだよ、ヒロさん。覚えてくれたかな?

相対アドレス指定とURIの違いは何ですか?

ヒロ:先生、相対アドレス指定とURIの違いは何ですか?
タクミ:わかります。相対アドレス指定は、ファイルやディレクトリの場所を現在の場所からの相対位置で示す方法です。つまり、自分が今どの場所にいるかを基準にして、その場所から別のファイルやディレクトリへのパスを示すんですね。対して、URIは、インターネット上のリソースを識別するための方法で、インターネット上のどの場所にあるかを示すアドレスのようなものです。つまり、インターネット上での場所を示す方法という点が相違点になります。
ヒロ:なるほど。相対アドレス指定だと、現在の場所からの位置で示すんですね。でも、URIってアドレスということは、インターネットでしか使わないんですか?
タクミ:そうですね。URIは主にインターネットで使用されるものです。例えば、ウェブページのURLがURIになります。ただし、ローカルのファイルでもURIを使用することができます。ただし、相対アドレス指定は、主にローカルのファイルの場所を示す場合に使用されます。

相対アドレス指定で指定できる範囲には何がありますか?

ヒロ:先生、相対アドレス指定で指定できる範囲って何があるんですか?
タクミ:その質問、いいね。相対アドレス指定とは、プログラムの中で位置を指定する方法の一つなんだ。
ヒロ:えっ、プログラムの中で、ってことは?
タクミ:例えば、あるフォルダにあるファイルを開こうとする時、そのフォルダからの相対位置によって指定することができるんだ。
ヒロ:フォルダの中で?なるほど、わかりました!
タクミ:そうそう、よく理解できたね。他にも、Webページを作る時に使うCSSファイルの指定でも相対アドレス指定が使われるよ。
ヒロ:Webページでも使われるんですね。ありがとうございます、先生!
タクミ:いい質問でしたよ。今後もその好奇心を持って、プログラミングの勉強を続けていこうね。

相対アドレス指定の使い方による動作の違いについて教えてください。

ヒロ: こんにちは、タクミ先生。相対アドレス指定って何ですか?
タクミ: こんにちは、ヒロくん。相対アドレス指定とは、HTMLでリンクを作ったり、画像を表示するときに使う指定方法のことだよ。それぞれのファイルがどこにあるかを指定して、他のファイルを呼び出すことができるんだ。
ヒロ: そうなんですか。でも、相対アドレスと絶対アドレスってあると思うんですけど、それってどう違うんですか?
タクミ: そうだね、絶対アドレスは「http://○○○」といった、ネット上のアドレスを指定する方法だ。一方、相対アドレスは「自分のファイルの場所から、どのくらいの距離か」という形で指定する方法なんだ。たとえば、自分の作ったHTMLと同じフォルダにある画像を表示する場合、「./image.jpg」といった具合に指定するよ。
ヒロ: なるほど、そうやって指定するんですね。でも、相対アドレスの指定方法って慣れないとわかりにくいと思うんですけど、そんな時どうしたらいいですか?
タクミ: そうだね、最初は戸惑うこともあるかもしれないけどね。簡単な例を挙げて説明すると、「自分のたっている場所からの距離」ってイメージでいいよ。自分のファイルが何回親フォルダに戻ったか、また、今どのフォルダにいるかを考えて、指定していくといいんだ。少し難しく感じるかもしれないけど、慣れると自然に使えるようになるから、がんばってね。

相対アドレス指定でのトラブルシューティングの方法について教えてください。

ヒロ:タクミ先生、相対アドレス指定でトラブルが起こってしまいました。どうしたらいいですか?
タクミ:まずは、どんなトラブルか教えてくれるかな?相対アドレス指定なら、ウェブサイトのリンクなどでよく使うかもしれないけど。
ヒロ:はい、実際にウェブサイトを作っているときに、CSSのリンクを相対アドレスで指定していたんです。でも、スタイルシートがうまく適用されなくて。。。
タクミ:なるほどね。相対アドレス指定では、ファイルの場所によってパス指定が変わるから、注意が必要だよ。例えば、CSSファイルがindex.htmlのときと、別のフォルダ内にあるときでは、パスの指定方法が違うから。
ヒロ:なるほど!それで、パス指定の方法を間違っていたってことなんですね。
タクミ:そうそう。あとは、相対アドレス指定にすることで、スタイルシートや画像などを一括で移動できるというメリットもあるけど、その分管理も重要になるんだよ。ファイル構成をきちんと把握して、パス指定に迷ったときは確認するクセをつけておくと良いよ。

相対アドレス指定を使う場合、ファイルの場所に注意すべきポイントは何ですか?

ヒロ:タクミ先生、相対アドレス指定を使う場合、ファイルの場所に注意すべきポイントは何ですか?
タクミ: いい質問だね、ヒロくん。相対アドレス指定を使う場合に注意するポイントは、ファイルを開くプログラムがどこから起動されたかによって、指定方法が変わることだよ。つまり、プログラムを起動しているフォルダと、目的のファイルがあるフォルダの関係によって、検索するフォルダが変化するから、それに合わせる必要があるよ。
ヒロ: ああ、そういうことですね。でも、それって結構ややこしいですね。
タクミ: そうだね、ヒロくん。慣れるまでは大変かもしれないけど、一度理解してしまえば、使いこなすことができるよ。例えば、プログラムが起動したフォルダにある画像ファイルを指定する場合は、相対パスでファイルを指定することで、プログラムを移動させたときにも問題なく実行できるようになるんだ。
ヒロ: なるほど、そういうことですね。少し理解が深まりました。ありがとうございます、タクミ先生。
タクミ: どういたしまして、ヒロくん。また何かあったら聞いてね。

相対アドレス指定でのディレクトリ移動操作について教えてください。

ヒロ:せんせい、相対アドレス指定でのディレクトリ移動ってやり方、教えてください!
タクミ:そうですね、相対アドレスは現在のディレクトリからの移動を表しますよ。例えば、「cd ..」と入力すると、現在のディレクトリの親ディレクトリに移動することができます。
ヒロ:親ディレクトリってどういうことですか?
タクミ:親ディレクトリとは、現在のディレクトリの一つ上の階層にあたるディレクトリのことです。例えば、現在のディレクトリが「/home/user/documents」としたら、親ディレクトリは「/home/user」になります。
ヒロ:なるほど、でももし2つ上の階層に移動したかったらどうすればいいんですか?
タクミ:そうですね、「cd ../../」と入力すると、現在のディレクトリから2つ上の階層に移動することができます。このように、相対アドレス指定では「../」を繰り返し入力することで、上の階層に何段階も移動することができますよ。

相対アドレス指定を使用する際、パスの記述に注意すべきことは何ですか?

ヒロ:先生、相対アドレス指定って、パスの記述に注意しなくちゃいけないことって何ですか?
タクミ:そうですね、相対アドレス指定の場合には、自分がどのディレクトリにいるかを把握しておく必要がありますよ。 例えば、「../」は一つ上のディレクトリを指すので、今いるディレクトリから見て、一つ上のディレクトリにアクセスするときに使用します。
ヒロ:あ、なるほど。でも、自分が今いるディレクトリって、どうやって確認するんですか?
タクミ:確認する方法はいくつかありますが、代表的な方法としては、カレントディレクトリを表示する「pwd」コマンドがありますよ。ターミナルで「pwd」と入力すると、現在いるディレクトリが表示されます。
ヒロ:なるほど、ありがとうございます先生!自分で実際に試してみます!

相対アドレス指定を使用する際、ドキュメントルートとの関係について教えてください。

ヒロ:タクミ先生、こんにちは。相対アドレス指定を使う時、ドキュメントルートとの関係って何ですか?
タクミ:それはね、相対アドレスというのは、現在のファイルの位置を基準に指定するんだよ。つまり、ヒロさんの書いているプログラムが保存されているフォルダを基準にして、指定するってことです。だから、指定する場所によって、ドキュメントルートとの距離が変わるんだよ。
ヒロ:えっ、どういうことですか?
タクミ:例えば、ヒロさんのプログラムが保存されているフォルダが「Aフォルダ」で、その中にある「Bフォルダ」にあるファイルを指定する場合は、「../Bフォルダ/ファイル名」って書くことになります。でも、「Aフォルダ」直下のファイルを指定する場合は、「./ファイル名」って書けばいいんだよ。
ヒロ:なるほど!ドキュメントルートとの距離が変わるんですね。ありがとうございます、タクミ先生!

相対アドレス指定の改良手段について教えてください。

ヒロ:先生、相対アドレス指定の改良手段ってあるんですか?
タクミ:そうですね、相対アドレス指定は便利ですが、大規模なソフトウェア開発には不安定な部分がありますね。
ヒロ:不安定な部分って何ですか?
タクミ:例えば、一つのモジュールに複数のファイルがある場合、相対アドレス指定で他のファイルを参照すると、ファイルの移動や削除によってエラーが発生することがあります。
ヒロ:そうなんですね。じゃあ、どうしたらいいんですか?
タクミ:そこで、改良手段としては、絶対アドレス指定や、プログラム内部での参照をする方法があります。絶対アドレス指定は、ファイルの場所を固定することで、ファイルの移動や削除に影響されません。プログラム内部での参照は、プログラム内でファイルの参照情報を管理することで、安定したファイルの参照ができます。
ヒロ:なるほど、絶対アドレス指定やプログラム内部での参照なんですね。ありがとうございました!

相対アドレス指定を使用することで生じるセキュリティリスクについて教えてください。

ヒロ:タクミ先生、相対アドレス指定を使うとセキュリティリスクがあるって聞きました。どういうことなんですか?
タクミ:そうですね、相対アドレス指定は、リンク先のファイルが同じディレクトリにあることを前提にしています。つまり、別のディレクトリにある場合、指定されたリンク先が違うファイルになってしまう可能性があるということです。
ヒロ:そういうことですね。でも、それがどうしてセキュリティリスクになるんですか?
タクミ:例えば、Webサイトでログイン画面にアクセスした時に、ユーザ名とパスワードが送信されますよね。しかし、攻撃者がそのログイン画面をコピーして、自分のサイトに置いておいて、そのログイン画面にユーザ名とパスワードを入力させることで、個人情報を盗まれたりする可能性があります。これが、相対アドレス指定によるセキュリティリスクの一例です。
ヒロ:なるほど、そんなことが起こるんですね。自分のサイトに置いておかれたログイン画面には注意しなければいけないんですね。
タクミ:そういうことです。セキュリティリスクを少しでも減らすためには、常に正しいアドレス指定方法を使って、リンク先を正しく指定するようにしましょう。