※当サイトの記事には、広告・プロモーションが含まれます。

Rubyでload、require、include、usingなど使い分けがよく分からんので調べてみた

www.itmedia.co.jp

 米Metaは9月25日(現地時間)、自社カンファレンス「Meta Connect 2024」にて、開発中のARグラス「Orion」を発表した。同社が10年の歳月を経て作り上げたARグラスで、広視野角ディスプレイや、EMG(筋電図)で操作できるニューラルインタフェースを搭載しながら、単体動作するメガネサイズのデバイスに仕上げた。さながら、アニメ作品「電脳コイル」に登場する「電脳メガネ」のようだ。

「電脳メガネ」ついに実現? Meta、真のARグラス「Orion」を披露 “筋肉の信号で操作”も可能に - ITmedia NEWS

 一方で「消費者向けの製品として出荷するにはまだやらないといけないことがある」(ザッカーバーグ氏)としており、ディスプレイのチューニングやデザインに改善の余地があるとしている。OrionはデモキットとしてソフトウェアやAR体験の発展に使い、将来的には「最初のコンシューマ向けのフルホログラフィックARグラスにしたい」と述べている。

「電脳メガネ」ついに実現? Meta、真のARグラス「Orion」を披露 “筋肉の信号で操作”も可能に - ITmedia NEWS

 そのため、現時点で販売の予定はなく「Orionはタイムマシンとしてみてほしい。エキサイティングな未来を見せるもの」(ザッカーバーグ氏)と語った。

「電脳メガネ」ついに実現? Meta、真のARグラス「Orion」を披露 “筋肉の信号で操作”も可能に - ITmedia NEWS

⇧ 販売はまだなのね...

 

Rubyは全てオブジェクトとは言うが、moduleとclassの区別は意識する必要がある気がする

Rubyの公式のドキュメントによると、

docs.ruby-lang.org

オブジェクトとは

Ruby で扱える全ての値はオブジェクトです。 Ruby のオブジェクトに対して可能な操作はメソッド呼び出しのみです。あるオブジェクトが反応できるメソッドは、そのオブジェクトが所属するクラスによって一意に決定します。所属するクラスはオブジェクト生成時に決まり、その後は特異クラスの導入以外、所属クラスが変わることはありません。またオブジェクトは、特定のクラスに対比して、その「インスタンス」とも呼ばれます。

https://docs.ruby-lang.org/ja/latest/doc/spec=2fobject.html

オブジェクトの生成は、一般には、別のオブジェクトのメソッドを呼び出すことによって行われます。

https://docs.ruby-lang.org/ja/latest/doc/spec=2fobject.html

⇧ とありますと。

  1. Ruby で扱える全ての値はオブジェクトである。
  2. Ruby のオブジェクトに対して可能な操作はメソッド呼び出しのみである。
  3. あるオブジェクトが反応できるメソッドは、そのオブジェクトが所属するクラスによって一意に決定する。

つまり、何だかんだで「クラス」に帰結しておりますと。

のはずなんですが、

⇧ ここで、「モジュール」という概念が出てくるのだけど、説明が雑過ぎて、よく分からんことになってきますと。

何となくだが、

  • module
  • class

の区別は意識しておいた方が良さそうな気がする、多分...

その割には、公式のドキュメントの「モジュール」の説明の適当さよ...

Rubyでload、require、include、usingなど使い分けがよく分からんので調べてみた

で、前に、

ts0818.hatenablog.com

Rubyのクラスについて、調べてみたものの、詳細がいまいち分かっておらず、その後、ネットの情報で、

  • load
  • require
  • include
  • using

などというキーワードが出てきて、わけ分からん、な感じなので、整理してみます。

ちなみに、Ruby初学者なので、情報が錯綜してることは、予めご了承ください。

で、こ奴らを考える上で、

  • module
  • class

を意識する必要が出てきますと。

と言うのも、ChatGPTに確認したところ、大きく分けると、

No 機能 所属 メソッド種類 Rubyバージョン
1 autoload module Kernel モジュール関数 1.9
2 load module Kernel モジュール関数 1.8
3 require module Kernel モジュール関数 1.8
4 require_relative module Kernel モジュール関数 1.9
5 ancestors class Module インスタンスメソッド 1.8
6 include class Module インスタンスメソッド 1.8
7 prepend class Module インスタンスメソッド 2.0
8 extended class Module privateメソッド 2.0
9 included class Module privateメソッド 2.0
10 prepended class Module privateメソッド 2.0
11 refine class Module privateメソッド 2.1
12 using class Module privateメソッド 2.0
13 extend class Object インスタンスメソッド 1.8

⇧ 上記の表のような感じで、

  • module Kernel
  • class Module
  • class Object

のように、「モジュール」か「クラス」のどちらかに分かれるっぽいので。

で、使い分けについては、Ruby初学者である私に分かるわけもないので、ChatGPTに確認したところ、

No 機能 目的
1 autoload 遅延読み込み。
2 load ファイルを毎回読み込む。
3 require 外部ファイルやライブラリの読み込み。
4 require_relative 相対パスでファイルを読み込む。
5 ancestors クラス、モジュールのスーパークラスとincludeしているモジュールを優先順位順に配列に格納して返す。
6 include モジュールのメソッドをインスタンスメソッドとして取り込む。
7 prepend モジュールのメソッドを優先してインスタンスメソッドとして取り込む。
8 extended モジュールがextendされた際の処理。extend実行時にコールバックされる。
9 included モジュールがincludeされた際の処理。include実行時にコールバックされる。
10 prepended モジュールがprependされた際の処理。prepend実行時にコールバックされる。
11 using モジュールの機能を特定のスコープで使用。
12 refine 特定のスコープ内でクラスやモジュールのメソッドを一時的に変更する。制約在りoverrideみたいなもの。usingされた範囲内でのみ効力を発揮する。
13 extend モジュールのメソッドをクラスメソッドとして取り込む。

⇧ というような回答が提供された。

うむ、分からん。

何やら、

www.techscore.com

⇧ 上記サイト様によりますと、

  • include
  • prepend

は使い分けする関係になるらしい。

何と言うか、Rubyの仕組み、いまいち、よく分からん...

Rubyのコーディングのお手本が欲しいところですな...

毎度モヤモヤ感が半端ない…

今回はこのへんで。