アウトプットの部屋

エンジニアになるためのアウトプット

RSpecの設定

①Gemfileにgem 'rspec-rails'を追加。

spring-commands-rspecはテストスイートの起動時間を速くしてくれるgem。一緒に入れておく。

gorup :development, test do
  gem 'rspec-rails', '~> 3.6.0'
  gem 'spring-commands-rspec'
end

②specフォルダを作成

$ bin/rails generate rspec:install

もしtest用のdbが作成されてないなら、database.ymlを編集してdb:create:allでdbを作る。

RSpecの出力をデフォルト形式からドキュメント形式に変更

ドキュメント形式の方が読みやすいため、.rspecファイルを以下のように編集する

--require spec_helper
--format documentation

④binstubを使ってテストスイートの起動時間を速くする

gem 'spring-commands-rspec'が入っていることを確認。入っていれば、以下のコマンドでbinstubをインストール

$ bundle exec spring binstub rspec

RSpecを起動

$ bin/rspec

これで起動できたらOK

rails gコマンドの時のrspecの設定 config/application.rbに以下を追加

module Projects
  class Application < Rails::Application
    config.load_defaults 5.1

    config.generators do |g|
      g.test_framework  :rspec,
        fixtures:  false,
        view_specs:  false,
        helper_specs:  false,
        routing_specs:  false
    end
  end
end

fixtures: falseはテストDBにレコードを作成するファイルの作成をスキップする。(FactoryBotを使う時はtrueにする)

view_specs: falseはビュースペックを作成しないこと。(その代わりfeatureスペックでUIをテストする)

helper_specs: falseはヘルパー用のスペックを作成しないこと(余裕があればtrueにして作成してもよい)

routing_specs: falseはルート用のスペックファイルを作成しないこと。(アプリケーションが大きくなりルートが複雑になったら作成するのもあり)

Rspec①

describe 何について仕様を記述しようとしているのか
 before 事前準備

   context  状況や状態 〜の場合
 
 it 期待する動作

テストケースを分類する・・・describe,context

テストを実行する・・・before,it

binstubを使うとアプリケーションの起動時間を素早くするSpringの恩恵が受けられる。

FactoryBotを使うとテストデータを簡単に作成できる。

シーケンスを使えば、ユニークなデータを作成できる。

sequence(:email){|n| "test#{n}@example.com"

FactoryBotの重複を回避するには、継承とtraitの2つの方法がある。

コールバックとはオブジェクトをcreate前後で何かしらのアクションをするFactryBotの機能の1つ。(buildやstubでも使える。)

linux

/bin ・・・FHSが定めたどのユーザーでも使えるコマンドだけが入るフォルダ。ここにコマンドを追加することはあまりない。

FHSとはLinuxディレクトリ構造規格のこと。

/var・・・システムログなどの動的に変化するファイル

/sbin・・・システム管理用コマンド

/usr・・・プログラムやカーネルソース

/etc・・・設定ファイル

localstorage

localstorageとは・・・web storageの一種。サーバではなく、クライアント(ブラウザ)にデータを保存する機能。このような機能が出るようになったのは、HTTPがステートレスなプロトコルが関係している。「ユーザーごとにデータを保存したいが、ログイン機能をつけるほどのことじゃない時」などに重宝する。

localstorageは半永久的にデータを保存し、5MBまで保存可能。 sessionstorageはタブを閉じるとデータは消える。 cookieは保存の期限があり、4MBまで保存可能。

localstorageは保存、取得、削除、初期化などができる。

データを保存するにはJSON形式に変換しなくてはいけない。

JSON・・・データフォーマットの一つ。rubyでいうとハッシュでキーと値で書く。

オブジェクト=>JSON保存 (stringifyメソッド) JSON =>オブジェクト(parseメソッド)

コンピュータ・サイエンス⑦

OSは昔、プログラムロードと実行する機能だけを備えるモニター・プログラムが開発された。 その後基本的な入出力を行う部分的なプログラムが追加され、結果として今のようなOSが開発された。 つまりOSとは複数のプログラムの集合体である。

OSが存在する以上、ハードウェアを直接制御するプログラムを記述することはない。しかし、プログラマーにはハードウェアの知識は必要。 なぜならOSを介して、間接的にハードウェアを制御しているから。メモリー領域の確保や関数の実行結果は、OSに対して作用する。アプリケーションから命令を受けたOSがその命令を解釈してハードウェアを制御する。

システム・コール・・・アプリケーションがOSの機能を呼び出すこと。

高水準言語・・・人間に近い形で書かれた言語。C,JAVACOBOLなど。C言語などは特定のOSに依存しない。コンパイルをして機械語に変換する。JAVAはどのOSでも動くように、一回バイトコードに変換してその後機械語に変換する。

低水準言語・・・機械語ないし機会語に近い形で書かれた言語。アセンブリ言語など。

インタープリタ言語・・・実行時に1行ずつ機械語に変換する言語。ruby,PHP,Perlなど。コンパイラ言語より実行速度は遅い。

高水準言語の中には、直接システム・コールを呼び出せる言語もあるが、移植性の悪いアプリケーションになってしまう。

コンピュータ・サイエンス⑥

アルゴリズム ・・常に有限の一連の演算で完結するメソッド(やり方)

良いアルゴリズムとは、問題の規模が大きくなっても対応できること。

O記法・・成長の程度を表す表記法。

よく使う値が、2n > n2 > nlogn > n

2nは指数関数で、nが大きくなると急激に成長するため、アルゴリズム的に良くない。(というか不可能)

抽象表現・・複雑すぎる物事の機能性を簡単に享受するインターフェイス

例)html <- fetch_source(http://........) これでURLを取得できるが、このコードの裏では複雑な処理が隠されている。

抽象データ型(ADT)とは ・自身で定義した型 ・状態を持たない ・値の集合とそれらに関係する操作の集合, それぞれ別々に保持しているもの. (別々というところが Object の違い) ・データの読み書きを直接メモリーにしてはいけない(外部のデータ取り扱いモジュールを使う)

ADTはよくわからなかったけど、こういうのもあるんだって感じで覚えとこう。

コンピュータ・サイエンス⑤

CPU

プログラムの動作環境・・・OS + ハードウェア

macのCPUは「Intel Core」というものを使っている。 windowsIntelのCoreシリーズを使っているが、中にはPentiumインテル社)のCPUを使っているものもある。

CPUにはコアと呼ばれるCPUの中心的な部分があり、今までは一つのCPUに一つのコアしか入れられなかった。 しかし、2006年あたりから一つのCPUに2つのコアを入れることが可能になり、今では6つや8つのコアが入っているCPUも登場している。

CPUはマシン語しか理解できない。マシン語になっているプログラムをネイティブ・コードと呼び、プログラマーが書くようなコードはソースコードと呼ぶ。 ソースコードコンパイルすることでネイティブ・コードを作成している。

PCのスイッチをON => BIOSがハードウェアの正常動作を確認 => 問題なければブート・ストラップ・ローダーを起動 

ブート・ストラップ・ローダーはハードディスクなどに記録されたOSを、メモリーにロードして実行する役。