6時だョ!!全員集合!!

Rails・JavaScrictを中心にアウトプットします。

2022年3月12日 [番外編]技術的な雑談でリテラシーを高めた

API・ソフトウェアについて

Application Programming Interfaceの略です。

  • ソフトウェアの機能を共有できる仕組みのこと。
  • ソフトウェアとは1・・・コンピュータのうち蹴っ飛ばせない部分
  • ソフトウェアとは2・・・ソフトやファイルなど人間様の手では触れない部分
    参照

よく使われているものだとGoogle Mapが有名です。 フォームなどで郵便番号を入れると自動で入力されるなんてことができるのは大体APIから取得しています。

APIは通常Webに公開されていて、誰でも無料で使うことが可能。「WebAPI」と呼ばれたりもします。 一般的にJSONという形式で結果を返します。 RailsAPIを実装する場合、RailsAPIモードを使用します。JSONを返すAPI機能を作成し、フロントとやり取りを行います。

SaaSとは

みんな大好き勝又○太さんの「Web系エンジニアになろう」には以下のように書かれていました。

利用者のパソコンやサーバに直接ソフトウェアをインストールするのではなく、インターネット経由でソフトウェアの機能を提供するサービスです。 GithubGmail等もSaaSに含まれます

つまり、インターネット経由でソフトウェアの機能を提供するサービスのことをSaaSと言います。

以下に、Saasの代表的な例を紹介します。

技術質問の記事から曖昧な箇所を学習しました

PHPRubyの違い

結論

  • 言語の違いがある。したがって構文が全く異なる。どちらも動的型付け言語のサーバーサイドのプログラミング言語である。
  • 目的の違いがある。PHPWordPressなどでWeb制作にもよく用いられ、ホームページ制作を最適化する。Rubyはストレスなくプログラミングを楽しむため。
  • 当然だがフレームワークの違いがある。PHPは「CakePHP」、「Phalcon」、「Laravel」があり、Rubyは基本的には「Ruby on Rails」が使われる事が多いです。

Railsが支持される理由

他の言語のフレームワークは設定ファイルに事細かにアプリケーションの定義を記載していくものが多いのに対し Railsが画期的だったのは「同じことを繰り返さない」「設定より規約」といった思想のもとに開発されたフレームワークという点。 保守性や開発効率を考えると、影響範囲の特定などにコストをとられずに済む。 予め決めておいた規約のとおりに、コーディングすることで設定する項目を劇的に減らすことに成功した。

クラス継承とプロトタイプ継承の違い

プロトタイプ継承を行う方法

  • クラスを継承してプロトタイプすべてを継承する
  • protoでプロトタイプのプロパティを指定して継承する

クラスを継承してプロトタイプ継承をする方法

子クラスのインスタンスから親クラスのプロトタイプメソッドもプロトタイプチェーンの仕組みによって呼び出せます。

extendsによって継承した場合、子クラスのプロトタイプオブジェクトのPrototype内部プロパティには親クラスのプロトタイプオブジェクトが設定されます。 このコードでは、Child.prototypeオブジェクトのPrototype内部プロパティにはParent.prototypeが設定されます。

class Parent {
    method() {
        console.log("Parent#method");
    }
}

// `Parent`を継承した`Child`を定義
class Child extends Parent {
    // methodの定義はない
}

const instance = new Child();
instance.method(); // "Parent#method"
  • extendsを使ってプロトタイプを継承しているからChildにメソッドの定義はなくてもParentのメソッドが使用できています。

protoを使ってプロトタイプ継承をする

変数の中で継承しているパターン

let yano = {
    meshi: "kimuti"
};

let yui = {
    __proto__: yano
};

console.log(yui.meshi);

変数の外で定義しているパターン

let yui = {};

let yano = {
  meshi: "kimuti"
};

let yuno = {
  meshi: "Tom yum goong",
  skill: "React"
};

yui.__proto__ = yano;

yano.__proto__ = yuno;

console.log(yui.meshi); // => kimuti
console.log(yui.skill); // => React
  • __proto__を使用してプロトタイプ継承をしています。
  • プロトタイプチェーンの仕組みが働いているのでyuiにないプロパティをyanoに探しに行くという挙動が生まれています。

検証ツールで変数yuiの中身を見てみました。

Prototype内部プロパティに継承されたオブジェクトがあるのがわかります。

RubyとJSで同じclassという単語を使用していますが、概念の面では、以下のような違いがあります。

Ruby

  • Rubyではクラスベースオブジェクト指向が使われていますが、JavaScriptではプロトタイプベースオブジェクト指向を使用しています。
  • Rubyの世界でクラスとは、クラスという金型を利用して、鯛焼きというインスタンスを量産できるオブジェクトのことです。ベースとなるクラスの属性を持ったインスタンスを量産できるので便利です。最初から鯛焼きの形を作るところから始める必要がなくなります。
  • Rubyの世界では全てのものをオブジェクトとして、扱います。それはクラスも然りです。
  • Rubyのクラス(自作のクラスも含む)は実はClassクラスのインスタンスです。
  • オブジェクトの階層は、上に上に行くほど深い階層になっているイメージです。これは、JavaScriptと逆の方向になります。

JavaScript

  • クラスを使わず、同じ機能や性質を持ったオブジェクトを量産するためにJavaScriptではプロトタイプを採用しています。
  • JavaScriptでは、自分が持っていない特性を別のオブジェクトにお願いするイメージです。そのお願いをする別のオブジェクトをプロトタイプと言います。
  • オブジェクトの階層は、下に下に深掘りしていくイメージです。下に穴を掘るほどオブジェクトの元のオブジェクトに繋がっていきます。

参考

SaaSとは――同じクラウドサービスでもPaaS、IaaSとは何が違うのか.

最強オブジェクト指向言語 JavaScript 再入門!