学んだことリスト

* わからないことは調べてノートにメモり適度に見返すことを2020年5月にエンジニアになってから続けています。
* 1年で3冊になりました。
* ノートに書くと下記の良い点があります。
    * きれいに書きたい気持ちが出るので、ちゃんと理解&整理しようとする
    * 手を動かすので記憶に残りやすい
    * 図を描きやすい

が、過去の学びを検索したりリンクを残したい気もしてきたので試しにこちらに書いてみます。

* ジャンル分けはせず、とにかく時系列で書いていくだけです。
* 自分が分かっていなかったことだけを書くので、参考にしないでください。

1. =========最新が一番上==========
* Q: Active JobとSidekiqのリトライの仕組み https://tech.smarthr.jp/entry/2021/09/16/151318
* Q: build_関連名
* Q: accepts_nested_attributes_for
* Q: validates_associated
* Q: has_manyな関連のデフォルトでは、関連先は関連元が新規レコードの時だけ保存される。
    * user has_many posts
    * user.posts = Postのインスタンス達を入れて
    * user.save すると、userもpostsも保存される。
    * が、userが元々保存済みの場合には、postsは保存されない
* Q: has_manyとautosave: true にすると、関連元を更新した場合でも関連先も保存される。
* Q: JSのprocess
    * node.jsの実行環境に対しての情報の取得と操作を行うAPI
* Q: JS pushとconcatの違い
    * Unlike the array push() method you might be more familiar with the concat() method doesn’t mutate the original array, so we prefer it.
* Q: Array.prototype.fill()
    * changes all elements in an array to a static value.
    * [1,1,1,1,1,1]みたいな配列を作る
* Q: factory bot initialize_with
    * new以外のクラスメソッドでインスタンスを生成したい時、
    * newするときに何か処理を挟みたい時などに使う
* Q: JS factory functionとは
    * A factory function is any function which is not a class or constructor that returns a (presumably new) object. In JavaScript, any function can return an object. When it does so without the new keyword, it’s a factory function.
* Q: ffi
    * foreign function interface
    * rubyからCやC++を呼び出す場合に使用する
* Q: stub_const
    * `stub_const("MyClass", Class.new) # => Replaces (or defines) MyClass with a new class object.`
    * `stub_const("SomeModel::PER_PAGE", 5) # => Sets SomeModel::PER_PAGE to 5.`
* Q: Railsクエリreorder
    * Replaces any existing order defined on the relation with the specified order.
    * `User.order('email DESC').reorder('id ASC') # generated SQL has 'ORDER BY id ASC'`
* Q: Railsでカラムを安全に削除する方法
    * ignore_column
    * remove_column
    * ignore_columnを消す
    * https://docs.gitlab.com/ee/development/avoiding_downtime_in_migrations.html
* Q: rails パラメーターで配列のみ受け取る
    * params.permit(images: [])
    * You may declare that the parameter should be an array of permitted scalars by mapping it to an empty array
    * https://api.rubyonrails.org/classes/ActionController/Parameters.html#method-i-permit
* Q: プロセスとは
    * OSが実行しているプログラムのインスタンス。
    * プロセスは互いにメモリ領域を共有しない。あるプロセスの処理は、他のプロセスに影響を与えない
    * プロセスはスレッドをいくつも持つ。
* Q: スレッドとは
    * CPUから見たプログラムの実行単位。
    * CPUの1コアで同時に1つの処理しか実行することはできない
    * スレッドはプロセスに含まれる
    * シングルスレッドのプロセス => 1つしかスレッドを持たないプロセス
    * マルチスレッドのプロセス　=> 複数スレッドを持つプロセス
    * スレッドはプロセス内のメモリを共有する。
    * スレッドAが書いたものをスレッドBが上書きしてバグが起きたりする。バグらないように適切にメモリ管理して設計することをスレッドセーフな設計と呼ぶ
* Q: SidekiqのConcurrency
    * Sidekiqのスレッドのこと。それぞれで並列処理をする
    * 各スレッドがActiveRecordを使ってコネクションを確立するのであれば、DBのプール数はConcurrencyと同じかそれ以上でないといけない。
* Q: [Pumaのworkerとは](https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server#workers)
    * 同時に複数のリクエストを処理するためのプロセス。
    * プロセスであるため、OSに管理され、ワーカー同士はメモリ領域を共有しない。
    * もちろん各ワーカーがスレッドを持つため、ワーカー間でスレッドセーフな設計をする必要はない
    * 設定の目安はCPUコア数の1.5倍程度。
    * WEB_CONCURRENCYで設定する
    * それぞれのワーカーがRailsを読みメモリに保存するため、増やせばメモリを消費する
    * DBConnectionプールはワーカーごとに保持する。各ワーカー内のスレッド達がDBコネクションを行うため、pool数とRAILS_MAX_THREADSを同じにしておけば良い。
* Q: [Pumaのスレッドとは](https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server#threads)
    * 1つのワーカー内で複数のスレッドを持ち、それぞれがリクエストを処理する
    * スレッド数のMINとMAXを設定する。MAXのデフォルトは16だが、普通はRAILS_MAX_THREADSで5とかに調整される。
    * 増やせばCPUを消費するため、CPU Utilizationが70%くらいになるように調節すると良い
* Q: SidekiqのConcurrencyとは
    * 並列実行するためのスレッド数。
    * 各スレッドで処理によってはDBコネクションを必要とする。そのため、DBコネクションプール数はConcurrencyと同じかそれ以上でないといけない
* Q: JavaScriptのタスクキュー
    * コールスタックで処理されるために順番待ちをしている非同期処理たちのこと。
    * コールスタックとは、コンテキスト(実行環境)と関数が積み重なったもの。
    * 例えば、windowコンテキストを読み込み、その中のオブジェクトを読み込み、その中の関数や変数を読み実行する。実行されると最後に読み込まれた関数や変数をコールスタックから外し、オブジェクトを関数から外し最後にwindowコンテキストを外すという感じで積んでは外すという感じで実行している。
    * コールスタックは1つの糸のように、その処理が実行されるまで後の処理は実行されない。この挙動はスレッドと呼ばれる。
    * setTimeoutやPromiseなどの非同期処理はいきなりコールスタックに積まれず、まずはタスクキューに入りFIFOで順番待ちをする。
    * そして、**コールスタックが完全に空になったタイミングで**タスクキューからコールスタックに移動され処理される。
    * イベントループというコールスタックが空かどうか確認し続ける担当がおり、空になったら移動される
    * イメージ、コードの最後の行に処理を追記するような感じ。まずはwindowコンテキスト上の全ての処理を実行するまではタスクキューの処理はされない
* Q: docker-compose run --service-ports web
    * runした時には、ポートがホストマシンに公開されない！！`--service-ports`をつけないといけない
* Q: Vuex Actions
    * mutationsも実行できるし(commit), stateも直接変更できるし、さらに別のactionも実行できる(dispatch)
    * アクションは、`this.$store.dispatch('action名')`で実行する
    * アクションを通してしか、mutationをいじらないというルールにするパターンもある
    * アクション内には非同期処理を書く目的で使われることが多い
* Q: Vuex Mutations
    * stateの状態を変化させるメソッド。
    * これを通してしかstateの状態を変更しないようにする
    * 実行するときは、`this.$store.commit('mutation名', 引数)`
    * mapMutationsをmethodsの中で...で取り込むこともできる
    * 必ず同期的な処理のみをする
* Q: MapGetters
    * Vuexのプロパティをまとめて配列的に取得することができる便利ヘルパー
    * `computed: { ...mapGetters(["property1", "property2"])}`
* Q: Vuex getters
    * Vuesの算出プロパティ
    * computedと同じく関数で必ず何かreturnする必要
    * 第一引数にstateを取れる
* Q: image_pack_tagとimage_pack_urlの違い
    * pack_tagは相対パスかつ、<img>タグを生成する
    * pack_urlは絶対パスのURLをそのまま返す。metaタグの中に画像パスを入れる場合などは、ドメイン付きのURLを返す必要がある
* Q: rspecのconfig.infer_spec_type_from_file_location!とは
    * specのファイルが置かれているパスから、specのタイプを推論する。
    * spec/requests/**.rbなら自動で`:type => :request`が入る
    * これがなければ、毎回` :type => :request`入れないといけない
* Q: Vue Composition APIのprops
    * setupの引数にとるだけ。
    * `setup(props)`
* Q: Vue Composition APIのwatchとwatchEffect
    * watch
        * 直感的。
        * 第一引数に指定したオブジェクトが変化するたびにコールバック関数が実行される
        * `watch(watchしたいrefオブジェクト。.valueしない, () => { コールバック関数 })`
        * 初回は実行されない
    * watchEffect
        * 第一引数は取らずに、コールバック関数内で参照されている値が変化すれば実行される。
        * `watchEffect(() => { ここで参照しているrefオブジェクトに変化があれば実行される })`
        * computedみたいにおそらく内部でProxyを使ってgetされたことを記録しておいて、それが変化した時に実行している。たぶん。
        * 初回レンダリング時に実行される
    * これらの関数を変数に入れ実行するとwatchを止めることができる
    * `const stopWatch = watch(.....)`
    * `stopWatch()` するとwatchしなくなる
* Q: Vue Composition APIのcomputed
    * `const matchingNames = computed(() => { return [なんとか] } )`
    * return { matchingNames }
* Q: Vue Composition APIのreactive
    * 基本的にはrefで同じことができるのでrefを使うと思っておいていい
    * `const reactiveObj = reactive({ name: 'aaa' })`と定義しreturnする
    * **文字列などプリミティブな値をリアクティブにすることはできない**
    * テンプレート内ではrefと同じく、そのまま`reactiveObj`で取得できる
    * それ以外でも`.value`は不要で直接アクセスできる
    * 外部に公開されたときのリアクティビティの面からもrefが良いらしい
* Q: Vue Composition APIのRefオブジェクト
    * valueプロパティに引数で与えた値を保持するだけの、RefImplというクラスのインスタンス。
    * ラッパーオブジェクトと呼ばれたりしている
    * リアクティブになる
    * `const age = ref(20)`と定義し、
    * `return { age }`でtemplate内で使えるようになる。
    * template内ではVueが理解し、`age.value`とせず`age`だけでもageをレンダリングしてくれる。
    * ただsetup()内では`.value`が必要
    * It　retains reactivity when it's exposed by external functions
    * DOM要素をrefオブジェクトのvalueに保持し操作することもできる。があまり↓の使い方はしないらしい

          ```js
        setup()内
        const refObj = ref(null)
        return { refObj }
        
         テンプレ内
         <p ref="refObj">aaa</p>
         こうするとrefObjを通してp要素を操作することもできる
         p.value.textContent = 'updated!!'
* Q: Vue Composition APIの**メソッド**
    * `const handleClick = () => { console.log('clicked!') }`
    * `return { handleClick }`
    * `@click="handleClick"`
* Q: VueのComposition APIのsetup()の基礎
    * どのライフサイクルフックよりも先に呼ばれる。created()より先
    * ということは、Vueインスタンスはまだ存在しないのでthisは使えない
    * returnした**オブジェクト**をテンプレート内で使うことができる。
    * `return { name, age }`みたいに書くのはkeyとvalueが同じだから
* Q: CSS display flexのおさらい
    * 親要素(`flex-container`と呼ぶ)内の子要素(`flex-item`と呼ぶ)を`inline-block`化し、かつ揃えたり間の空間を調整したり設定できるCSSプロパティ
    * 親要素そのものもblockにするのかinline-blockにするのかも設定可能
* [block要素のおさらい](https://www.w3schools.com/css/css_display_visibility.asp)
  * width 100%とる。新しい行で始まり、改行で終わる
  * divに`width: 40%`指定したとしても改行されるため横には並ばない。
  * chromeでみると残り80%のスペースはマージンとして埋まっている
  ![スクリーンショット 2021-07-23 21.49.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481058/847cf6dc-e218-7926-6177-6c08b8ce228b.png)
* [`inline-block`のおさらい](https://www.w3schools.com/css/css_inline-block.asp)
    * インライン要素に、width、height、margin、paddingを取れるようにしたもの
    * それ以外はインライン要素の特徴をとる。改行されず横に並ぶ
    *![スクリーンショット 2021-07-23 21.51.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481058/368deae9-f08e-44d8-738d-ae8fa8bc1d52.png)
* Q: TS typeofで**値**の型を取得する
    * `type PersonType = typeof person(普通のオブジェクトや変数)`
    * lookUp型は、`interface`のプロパティの一部の型を取得する方法
    * `interfacePerson["user"]["name"]` stringとかを取得する
* Q: TS インターセクション型
    * A & B
    * 両方の型を満たしたものでないと受け付けない型
* Q: TS `as const`
    * 変えられない定数になる
    * 配列やオブジェクトにreadonlyがつく
* Q: TS Nullish Coalescing
    * `data.user ?? 'no-user'`
    * 左側がundefinedかnullだったら、右側を代入する。
    * 左側が存在すれば、左側を返す。
    * Rubyの||= と同じ。
    * `data.user || 'no-user'`だと、空文字や0の時も左側を返してしまう。
* Q: TS Optional Chaining
    * Rubyのぼっち演算子。
    * undefinedかもしれないものに対して、? をつけることで、無かったらundefinedを返し、あれば次のメソッドを実行する。
    * `data.user?.name?.first_name` みたいな感じ。チェーンもできる
* Q: TS 関数のオーバーロード
    * 関数の戻り値の型を正しく伝える方法
    * 引数がstringだったらstringを返し、numberだったらnumberを返すものがある場合に、引数にstringを入れたとしても、TypeScriptは `string | number`型と認識してしまう。
    * そのような時に、引数と戻り値の法則を実際の関数の上に列挙していくことで戻り値の型を認識させることができる。
    * 実際の関数の引数は、`string | number`としておかないと、関数内で正しく型を認識できないのでそれはそのまま書く必要がある
    * 上から順番に検証される

          ```js
function numOrStr(x: string): string
function numOrStr(x: number): number
function numOrStr(x: string | number): string | number
* Q: TS type guardとは
    * `if('method' in Obj){}`こんな感じで型を絞り込むこと
    * インスタンスであれば、`if(pet instanceof Bird){}`として`instanceof`で絞り込める。
* Q: interfaceの継承方法
    * extendsを使う
* Q: TS implements
    * interfaceで定義した方を、クラスで使いたい時に使う。
    * Human interfaceで定義したプロパティを、クラスが必ず持つ必要がある
    * 複数のinterfaceも指定できる
    * `class Developer implements Human`
* Q: CSSのinheritキーワード
    * 親要素のスタイルが子要素にも引き継がれることをCSSの継承と呼ぶ
    * 文字色とかは継承されるが、継承されない要素もある。
    * パディング、マージン、ボーダー、背景色などは継承されない。
    * が、`padding: inherit`とすると強制的に継承させられる
* Q: 擬似クラスとは
    * 英語で pseudo element
    * 要素がある状態になった時に指定することができるクラス
    * `a:link`そのリンクが未訪問の状態の時にスタイルを適用する
    * `a:visited` そのリンクが未訪問の時にスタイルを適用する
    * `a:hover`ホバー時にスタイルを適用する
    * `a:active`要素がアクティブの状態の時にスタイルを適用する(aタグだとクリックしてから話すまで)
    * `a:nth-child(n)`子要素内のn番めの要素にスタイルを適用する
    * `a:nth-of-type(n)`親要素内のn番めのaタグにスタイルを適用する
    * `div :not(p)` divタグ内のpではない要素にスタイルを適用する
* Q: CSSの擬似要素とは
    * 対象の要素の一部を指定して装飾を適用する、もしくは要素を追加するセレクタのこと
    * `::first-letter` 要素の一文字目にスタイルを適用する
    * `::first-line` 要素の1行目にスタイルを適用する
* Q: 擬似要素のBefore/After
    * `.example`クラスがついたPタグの直前にコンテンツを追加

          ```js
    p.example::before {
            content: "要素の直前にコンテンツを追加";
            color: #ff0000;
       }
       p.example::after {}
           ```
    * contentは必須
* Q: TS interfaceとtypeエイリアスの違い
    * 両方型だけを定義する。
    * interface
        * オブジェクトにしか使えない
    * type
        * オブジェクト含む全てに使える。
        * `type myType = {}` こんな代入する形で使う
* Q: Vue BeforeRouteEnter
    * 別のコンポーネントをレンダリングすると決まった時点で呼ばれる。
    * 次のコンポーネントは生成されていないので、まだ`this`は存在しない。
    * `next(vm => {})` nextに、Vueコンポーネントを引数に取るコールバック関数を与えることで、コンポーネントにアクセスすることができる。
* Q: Vue beforeRouteUpdate
    * 
* Q: TS abscract class
    * 継承されるためだけのクラス
    * インスタンスが生成されない
    * 継承先で実装される予定の中身が空のメソッドを、`abstract method(){}`で作成できる
* Q: JSのstatic
    * クラスメソッド!!
* Q: TSのゲッター、セッター
    * `get method名`
        * 必ずreturnで何か返さないといけない
    * `set method名`
        * 必ず引数を1つだけとる。
        * getterと同じ名前でもいい。
        * 型はgetterの型が推論される
* Q: TS `private`とは
    * そのクラス内からのみアクセスできるプロパティ
    * 継承先からはアクセスできない
* Q: TS `protected`とは
    * 継承先でもアクセスできる。rubyのprivateに似てる
* Q: TS`readonly`とは。
    * クラス内、クラス外でも読み出しだけにする。
    * コンストラクタ関数内だけ変更できる。
    * `constructor(public readonly name: string, private readonly age: number)`
    * 初期化以降は変更されたくない時につける。
    * interfaceにも使える
* Q: コールバック関数を受け取る時の型注釈
  * 下のように、引数はnumで、戻り値はnumberである関数を、引数として受ることを定義する

          ```js
          function double(callback: (num: number) => number): void {}
* Q: 関数を代入するときの型注釈
    * 2パターンある。
    * 代入先の変数に型注釈をつける
    * 戻り値は => の後に書く
        * `const fn: (arg: number) => number = function(無名関数。ここは型注釈を省略できる)`
    * 関数に型注釈をつける
    * 戻り値は `(引数):` の後に書く
        * `const fn = function (arg: number): number { }`
* Q: タプル型とは？
    * arrayより厳しい配列の型
    * `const book: [string, number] = ['manga', 500]`
    * 要素が3つあったり、型と順番が一致していなかったりするとエラーになる
* Q: Railsのページキャッシュとは？
    * nginxなどのwebサーバーにキャッシュし、Railsに到達せずに返してしまうキャッシュ。
    * 認証やbefore_action不要で返してしまえるページに有効
* Q: Railsのアクションキャッシュとは?
    * Railsに到達し、before_actionを実行してからキャッシュを返す
* Q: JS `JSON.stringify(obj, replacer)`
    * `function replacer(property, value)` この関数を、JSON.stringifyの第二引数に入れることで、出力する値をフィルターしたり調整したりすることができる。
    * replacerが`undefined`を返すと省かれ、`value`を返すと、それがJSONの値になる
* Q: JSのfor in ループの挙動
    * オブジェクトのプロパティのキーでイテレートする。
    * プロパティのdiscripterのenumerableがtrueのプロパティのみイテレートされる
    * Arrayも実はオブジェクトで、プロパティのキーが"0"、"1"みたいになっている。enumerableがtrueだからfor inできる
* Q: JSのループとブロックスコープとは？
    * この中のスコープはループの度に全く異なるメモリ空間に参照を保持している。毎回新しい。
    * `for(iとか){ブロックスコープ}`
* Q: bin/rspec aaaa_spec.rb --backtrace
    * gem内のバックトレースも出力する
* Q: JSのin
    * prototypeチェーンを遡り、そのプロパティまたはメソッドが存在するかを`boolean`で返す
    * `respond_to?`みたいな感じ
* Q: hasOwnProperty 
    * そのオブジェクト自身にそのプロパティまたはメソッドが存在するかどうかをbooleanで返す
    * `bonInstance.hasOwnProperty('hello')`
* Q: JSのprototypeチェーンとは
    * メソッド探索チェーン。
    * 自分自身のプロパティ(ownProperty)
    * そのオブジェクトの__proto__。なければ最終的にObjectの__proto__を探す。なければundefined
* Q: JSのPrototypeとは
    * オブジェクトにメソッドを追加する際に使う特別なプロパティ
    * prototypeの参照が`__proto__`に格納される。メソッドへの参照が保持されるだけ。
    * もし、下の例で`this.hello = function(){}`とすると、インスタンスごとに`function`自体がコピーされメモリ効率が良くない。インスタンスごとに変えたいわけでもないし。

          ```js
 // コンストラクタ関数。実態は普通の関数と一緒。関数は実行できるオブジェクトである
function Person(name, age){
    this.name = name;
    this.age = age;
}
//Personオブジェクトのprototypeプロパティにhelloという無名関数を代入
Person.prototype.hello = function(){
   console.log('hello' + this.name)
}
const bob = new Person('Bob', 18)
// プロトタイプを省略して呼び出す。どのインスタンスも、prototyeへの参照__proto__を持っている
bob.hello();
* Q: アロー関数とは
    * 無名関数を記述しやすくした省略記法
    * 無名関数の`function`を削除し、`()`と`{}`の間に`=>`を入れる
    * 引数が1つの場合は、`()`も省略できる。引数が複数の場合、もしくは引数がない場合は省略できない。
    * 実行行が1行の場合には`{}`と`return`も削除できる。{}があれば、returnは省略できない
    * アロー関数では、
        * thisは使えない。外のレキシカルスコープにthisを探しにいく。
        * 定義された時にthisが決まる。普通の関数はインスタンス生成後など呼ばれた時にthisが決まる
        * argumentsも使えない
* Q: 無名関数とは
    * 名前のない`function`のこと。
    * 関数式として変数に代入されるか、
    * オブジェクトのプロパティとして代入されるか
    * コールバック関数としてメソッドに渡されるか、
    * 即時関数として即時に実行される
    * 無名関数をプロパティに代入する場合は、functionを省略できる。

          ```js
             const person = {
                hello: function(){
                   処理
                },
                bye(){
                   処理
　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　}
　　　　　　　　　　　　　　　　　　　　　　}  
          ```
* Q: JSの関数式とは
    * 関数を変数に代入する式のこと
    * `const fn = function(引数) {}` これは、`function fn(引数){}`と同じ
    * 後ろの部分は無名関数

        ```js
        const getArea = function(width, height) {
          return width * height;
        };
        ```
* Q: JSの即時関数とは
    * 定義と同時に実行する関数
    * 無名の関数を即時実行する関数

        ```js
        (function () {
            //処理
        }());
        ```
* Q: TypeScriptのUnion Types
    * [With a union, you can declare that a type could be one of many types. ](https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html#unions)
    * `type WindowStates = "open" | "closed" | "minimized";`
* Q: ECMAScriptのimportとexport
    * ブラウザで実行される用。node.jsだとrequire/exportsが使われる
    * `export default`　で出力したものは、`import <好きな名前> from 'path'` でインポートする
    * デフォルトではないものは、`import { Function, Component } from 'path'` でインポートする
    * その場合も、`import { Function as fn } from 'path'`と asで好きな名前を設定できる
    * デフォルト以外の全てをインポートしたい時、`import * as moduleA from 'path'`とすると、moduleAの中にimportしたものが全て入る。デフォルトでexportしたものは、`moduleA.default`でアクセスできる
* Q: exit code 0
    * everything worked ok
* Q: [TypeScriptとJavaScriptのSyntaxとTypeの関係](https://www.typescriptlang.org/docs/handbook/typescript-from-scratch.html#types)
    * TypeScript is a language that is a superset of JavaScript: JS syntax is therefore legal
        * JSのシンタックスはTypeScriptでも有効であるし、動く
    * TypeScript is a typed superset
        * がしかし、Syntaxはエラーにならなくても、Typeエラーになる
* Q: html mainタグ
    * The HTML <main> element represents the dominant content of the <body> of a document. 
    * The main content area consists of content that is directly related to or expands upon the central topic of a document, or the central functionality of an application.
    * A document mustn't have more than one <main>
* Q: webpackerのextract_css: true
    * 開発環境ではfalse
        * stylesheetもJSと一緒にバンドルされる
        * npmライブラリとしてstylesheetをインポートしている場合(bootstrap)など、スタイルとJSが依存し合っていて、一緒にバンドルしたほうが効率が良いらしい。sass-loaderとかwebpackでバンドルするからそのためか。
    * 本番環境ではtrue
        * CSSは別ファイルで書き出される
        * stylesheet_pack_tagが必要!!
        * [ブラウザにCSSは別で読み込んでもらうことで適用が速くなる。もしJSにバンドルされたままだとJSの読み込みが終了するまでスタイルが崩れる](https://stackoverflow.com/a/43424122)
* Q: Kernel#format  or sprintf
    * 特殊なformat_stringのルールに従った文字列を返す
    * 右詰めにするとか、数値を変換するとか
    * `%[flags][width][.precision]type`この規則に従う。
    * typeが、どのように変換したり文字を扱うかを指定する。英字一文字。b, B, i,o とか
    * flagsで最後にスペースつけるとか 
* Q: yarn: how to install specific version
    * yarn add vue@3.1.12
* Q: yarn: how to list available versions
    * yarn info vue versions
* Q: RoutingのカスタムURLヘルパー
    * directを使う。実際のルーティングに存在しない`yaaa_url`とかで、特定のURLやモデルのURLを返すメソッドを定義できる
    * https://guides.rubyonrails.org/routing.html#direct-routes
* Q: ショルダーハックとは?
    * 人がパスワードなどを入力している様子を後ろから盗み見て情報を得ること
* Q: View Component
    * Git Hubが開発している、RubyのComponentクラス。
    * MyComponent.new(title: 'yeah') をerbで書くと、そのHTMLがレンダリングされる仕組み。
    * どういうHTMLを書き出すかはそのクラスに実装できる
* Q: rux gem
    * https://github.com/camertron/rux
* Q: Sessionとは? Railsの実装方法4つ
    * [ユーザーの情報をリクエストを跨いで保存&取得する仕組み。](https://guides.rubyonrails.org/action_controller_overview.html#session)
    * Railsの方法としては4つある。
    * 1 [CookieStore](https://api.rubyonrails.org/v6.1.3.2/classes/ActionDispatch/Session/CookieStore.html)
        * Cookieのkeyにconfingで設定した`Rails.application.config.session_store :cookie_store, key: '_your_app_session'`
        * Valueに`secret_key_base`で暗号化(署名)した文字列をセットする。
        * リクエストのたびに復号し、取り出す。
        * 取り出した値もkey/valueになっていて、ハッシュみたいに取り出せる
        * Session IDというハッシュ的な値も、使わないけど一応存在する
    * 2 [CacheStore](https://api.rubyonrails.org/v6.1.3.2/classes/ActionDispatch/Session/CacheStore.html)
        * Cookieに`secret_key_base`で暗号化(署名)したSession IDというハッシュ的な文字列をセットする
        * Railsのキャッシュの設定で指定された方法を使って、Session IDと保持したい値をペアで保存する
        * リクエストのたびにSession IDで検索して取得する。
        * キャッシュなので、消えることもある
    * 3 ActiveRecordStore
        * CacheStoreと同じような方法だが、RDBにSessionIDと保持したい値を入れる
        * 遅い
        * 不要なSessionが大量に残り続けてしまう問題もあるみたい
    * [流れの解説記事](https://www.justinweiss.com/articles/how-rails-sessions-work/)
* Q: local storageの特徴
    * JavaScriptで自由にアクセスできる
    * 主要なブラウザでMAX5Mまで
    * Stringのみ
    * 同期的。local storageへの操作は同時に1つのみ
* Q: Web workers
    * ブラウザで、バックグラウンドで処理を実行できるスレッド
* Q:[Set CookieレスポンスヘッダのSameSite属性](https://laboradian.com/same-site-cookies/)とは
    * クロスオリジンリクエストの際に、リクエストヘッダでCookieを送信するかどうか。
    * サイトAでログイン後、サイトBにあるサイトAのリンクをクリックした場合、サイトAのCookieを送るかどうか。
    * Lax(ゆるい)
        * Chromeではデフォルト。
        * GETリクエストで、かつそのリンク先に遷移しようとしている場合(画像のロードのようなGETではなく)にはCookieを送る
        * GET以外のリクエスト、もしくは画像のロードのような、遷移なしのURLが変化しないリクエストでは送らない
    * Strict
        * クロスオリジンリクエストであればCookieは送らない
    * None
        * 常にCookieを送る
* Q:Set CookieレスポンスヘッダのSecure属性とは
    * Https通信でないと送らない
* Q: Set CookieレスポンスヘッダののHttpOnly属性とは
    * JSから参照できなくなる
* Q: protect_from_forgeryのwithオプションとは？
    * [CSRFトークンが一致しなかった時の挙動を指定](https://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection/ClassMethods.html#method-i-protect_from_forgery)
    * `null_session` セッションを空にする。がリセットはしない。デフォルト
    * `reset_session `セッションをリセット
    * `exception` `ActionController::InvalidAuthenticityToken`例外をraise
* Q: 1remは?
    * = fontsize
* Q: view_context
    * An instance of a view class. The default view class is ActionView::Base.
    * View#render(option)メソッドを持っている。レンダリングされたテンプレートをstringで返す
* Q: devise_for ルーティングのskip
    * `devise_for :users, skip: [:registrations]`
    * 指定したルーティングを塞ぐことができる
* Q: devise_for ルーティングのpath_names
    * `devise_for :users, path: '', path_names: { sign_in: 'login', sign_out: 'logout'}`
    * [こういうふうに書くと、`users/sign_in`ではなく、`/login`が新規登録パスになる](https://github.com/heartcombo/devise/wiki/How-To:-Change-the-default-sign_in-and-sign_out-routes#another-simple-way-to-do-the-same-thing)
* Q: Omniauth
    * FacebookやTwitterなどの外部サービスのアカウント情報を使用して認証機能を提供するgem。規格ではなくgem
    * 使用する１つの外部サービスに対しての認証処理のことをstrategyと呼ぶ。サービスごとにstragetyも異なるため、omniauth-facebookのようにgemも分かれている。
    * 「外部サービスのアカウント情報を使用した認証」自体はOauth2の認証フローに従う
    * Rackミドルウェア
* Q: Railsの関連の belongs_to optional: true で何が変わる？
    * presenceのバリデーションをしなくなる。逆にoptionalが無ければバリデーションする
* Q: CookieはJavaScriptでアクセスできる？
    * できない
    * [localStorageはできる。JWTを保存するとセキュリティリスクがある](https://pragmaticstudio.com/tutorials/rails-session-cookies-for-api-authentication)
    * セッション情報をCookieに保存する方法はブラウザでしか使えない
* Q: inherently
    * 本質的に、生得的に
* Q: off-the-cuff
    * 準備なしの、即席の 
* Q: protect_from_forgery
    * GET以外のリクエストヘッダにX-CSRF-Token='トークン'を入れ、Railsがそれを検証できた場合にのみ受け付ける
    * これがないとサイト内で悪意のあるスクリプトによりPOSTされてしまう
    * サイト内で起きると、セッション情報をcookieで送るため認証は通ってしまう
* Q: imperative
    * しとけーなこと
    * 必須な。ぜひともしなければなら
* Q: DeviseのTimeoutableとRememberable
    * Timeoutable
        * セッションベース。
        * 強制ログアウトが目的
        * 分で指定。デフォルトは30分
        * その時間が切れると自動ログアウト。
        * 例えば金融サービスとかすぐにログアウトさせられるやつ。
    * Rememberable
        * Cookieベース
        * 利便性のためにログイン状態を保持しておくことが目的
        * 'Remember me'　チェックボックスを用意できたりする
        * デフォルトは2週間。
        * Timeoutableと同時に使われ、かつ'Remember me'にチェックした状態だと、Remeberableで設定した2週間ログイン状態になる
* Q: [Vue router.push(location, onComplete?, onAbort?)](https://router.vuejs.org/guide/essentials/navigation.html#router-push-location-oncomplete-onabort)
    * Programmatic Navigation
    * クエリやパラメータも指定できる
    * onComplete?コールバックで遷移が完了した時の処理ができる
    * onAbort?で遷移が失敗した時の処理
* Q: Vue router.go(int)とは?
    * history stackを指定した数行ったり来たりできる
* Q: CFP とは? 2106
    * A "Call for Proposal" (or "CFP") is an open invitation for speakers to apply to a conference
* Q: [インターフェース型とゲートウェイ型の違い](https://dev.classmethod.jp/articles/private-link-for-s3/)
    * ゲートウェイ型
        * エンドポイントへの名前解決はグローバルIP。ルートテーブルをVPCエンドポイントに向ける
        * 無料
        * オンプレミス側からアクセスできない
        * 別リージョンからアクセスできない
    * インターフェース型
        * PrivateLink
        * エンドポイントへの名前解決はプライベートIP
        * 有料
        * オンプレミス側からのアクセスも可能
        * 別リージョンからもアクセス可能
* Q: ゲートウェイ型のエンドポイント2つ2106
    * S3 インターフェース型も追加された！AWSで唯一両方のVPCエンドポイントを持つ
    * DynamoDB
* Q: S3でレプリケーションをする際に必須となる設定は？ 2106
    * バージョニング
    * 双方のバケットで有効にする必要がある
* Q: Network ACLで設定する5項目は？ Cloud Formationで 2106
    * ruleNuber 低い順
    * protocol  
    * ruleAction allow/deny
    * egress　boolean
    * cidrBlock  アドレスではない
* Q: Glacier迅速取り出しできるオブジェクトのサイズ上限は？ 2106
    * 250MB
* Q: Auto Scalingの起動設定を変更するには？ 2106
    * 既存のアタッチ済みの起動設定に修正を加えることはできない。
    * 新しい起動設定を作成し、交換すれば良い。
    * すでに立ち上がったインスタンスは影響を受けない。終了させるか、徐々に入れ替わるようなtermination policyに設定する
* Q: マルチAZ構成を取れないRDSの種類は？ 2106
    * SQL Server
        * 代わりにこういうSQLサーバー独自の仕組みを使うらしい
        * SQL Server Database Mirroring (DBM)
        * Always On Availability Groups (AGs)
* Q: ALBを使う際のEC2のセキュリティ上良い配置方法は？ 2106
    * EC2をプライベートサブネットに設置
    * ALBは指定されたAZの指定されたサブネットにのみトラフィックをルーティングする。
    * ↑の指定をEC2があるサブネットに指定する
![スクリーンショット 2021-06-06 19.57.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481058/d87b5d01-6949-9eac-5e4f-7d16a02eb650.png)
* Q: CloudFrontのオリジンサーバーの種類4つ 2106
    * S3バケット
    * S3の静的ホスティング
    * カスタムオリジン
        * パブリックWebサーバー
        * プライベートWebサーバー
        * Cloud Front => オリジンに対してのリクエストにカスタムヘッダーをつけることができる。オリジンに、そのヘッダを持つリクエストだけ応答させることができる 2106
* Q: DynamoDBの読み取り/書き込みキャパシティモード2つは？
    * オンデマンド
    * プロビジョンド(無料枠にもある)
    * Read/Write Capacity Unitはそれぞれで計算
* Q: 暗号化されていないEBSから暗号化されたEBSを作成する方法 2106
    * EBSのスナップショットを作成
    * スナップショットを暗号化してコピーする。(コピーの際に--encryptedオプションを渡す)
    * 暗号化されたスナップショットからEBSを復元する
* Q: Cloud Watch Subscriptionsとは 2106
    * ログをリアルタイムでKinesis StreamかLambdaに送るサービス
    * 送るログをフィルタリングすることもできる
    * Lambdaの場合は、ログが来るたびにLambda関数をexecuteする。
* Q: SNS topicをサブスクライブ可能なエンドポイント7つは？ 2106
    * http/https
    * email
    * sms(電話番号)
    * SQS(SQSキューへのメッセージ)
    * lambda(lambda関数を呼ぶ)
    * firehose(Firehose delivery streamへのJSONメッセージ)
    * application(モバイルApp/デバイス)
* Q: ELBのヘルスチェックとAuto Scalingのヘルスチェックの挙動 2106
    * ELBのヘルスチェック
        * ELBが登録済みのターゲットに対して定期的にリクエストを送ることで状態をチェックするテストのこと
        * 起動後、最初のヘルスチェックに合格するまではInitial状態、合格後はHealthyになる
        * `HealthCheckIntervalSeconds`秒に1回ヘルスチェックを行い、`UnhealthyThresholdCount`回以上連続でunhealthyだった場合は、ロードバランシング対象から外す。
        * その後、さらに`HealthyThresholdCount`以上連続でhealthyだった場合は復活する
    * Auto Scalingのヘルスチェック
        * EC2ステータスヘルスチェックとELBヘルスチェックがある。
        * デフォルトではEC2ヘルスチェックのみ有効
        * Unhealthyになったらそのインスタンスを終了させ、新しいインスタンスを起動する
        * Healthy状態から始まり、Unhealthyであることを受け取るまでは、ずっとHealthy状態
        * EC2ヘルスチェックの方法
            * running以外は全てunhealthy
        * ELBヘルスチェックの方法
            * ELBからhealthyだよって返ればhealthy
        * Health Check Grace period(猶予期間)が存在する。起動してからヘルスチェックが始まるまでの時間
        * デフォルトは300秒
* Q: SQSで遅れる最大メッセージ容量は？ 2106
    * 256kb
    * Java用Amazon SQS拡張クライアントライブラリを使えば2Gまで。S3に保存しそのURLを伝える形式になる
* Q: EBS multi attachの最大アタッチ可能なEC2数 2106
    * 16
    * 同じAZ内のみ
* Q: ハイパーバイザーとは？ 2106
    * 仮想マシン(OS)を制御するプログラムのこと
    * ハイパーバイザーがゲストOSを複数管理したりする
    * AWSの責任範囲では、ハイパーバイザーの管理やパッチ適用はAWSの責任。
* Q: AutoScalingクールダウン時間のデフォルト秒数は？
    * 300秒
* Q: リソースあたりのタグ最大数は？ 2106
    * 50
* Q: AWS Data pipleでRDSからS3へデータ移行はできるか？ 2106
    * できる
    * CSVで、タイムスタンプ付きで保存される
* Q: Auto Scalingのデフォルトの 2106
* Q: 冗長構成についてEBSとEFSの違い 2106
    * EBS
        * AZ内で冗長構成
    * EFS
        * 複数のAZで冗長構成(One Zoneでなければ)
* Q: リージョンあたりのサブネットの上限数は？ 2106
    * 200
* Q: 1アカウントで作成可能なElastic IPの数は？ 2106
    * 5
* Q: scarceの意味 2105
    * 希少。少ない
* Q: 作成可能なIAMグループの数の上限は？ 2106
    * 3,000
* Q: IAMユーザー/ロールにアタッチできるポリシーの数の上限は？ 2105
    * 10
* Q: 1リージョンあたり作成可能なVPC数は? 2106
    * 5
    * 専用フォームで依頼すれば100個まで使えるようになるらしい
* Q: Elastic IP が課金されない条件とは？ 2106
    * 起動中のEC2にアタッチされていること
    * 停止中だと課金される
* Q: Resilient の意味は？ 2106
    * able to withstand or recover quickly from difficult conditions
    * バネが曲げられた後に元の状態に戻れること。弾力性。
* Q: [AWS グローバルサービス群は？](https://jayendrapatil.com/aws-global-vs-regional-vs-az-resources/) 2106
    * IAM
    * S3(サービスはグローバルで、データはリージョナル)
    * Route53
    * WAF
    * Cloud Front
* Q: AWS リージョナルサービス群は？ 2106
    * VPC
    * Security Group
    * AMI
    * Auto Scaling
    * ELB
    * DynamoDB
    * Storage Gateway
* Q: AZ サービス群は？ 2106
    * RDS
    * Subnet
    * EC2 Instance
    * EBS
    * クラスタープレイスメントグループ
* Q: Redshiftのセキュリティグループは？ 2106
    * クラスターセキュリティグループと呼ばれる
    * クラスターに対してセキュリティグループをアタッチする
    * 既存のセキュリティグループももちろんアタッチできる
* Q: Well-Archtected Frameworkの5つの柱は？ 2106
    * 優れた運用効率
    * セキュリティ
    * 信頼性
    * パフォーマンス
    * コストの最適あｋ
* Q: S3 ACLで設定可能な被付与者4パターンは? 2106
    * オブジェクト所有者
    * 全員(パブリックアクセス)
    * Authenticated Usersグループ(AWSアカウントを持つ全てのユーザー)
    * 他のAWSアカウント
* Q: S３ ACLについてドキュメントで紹介されている制限事項 2106
    * AWS アカウントに対して許可はできるが、アカウント内の個々のユーザーに対しては付与できない
    * 条件付きの許可はできない
    * このアカウントは拒否　みたいな拒否の個別指定はできない 
* Q: SCPでブラックリスト形式の制御をしていく方法 2106
    * FullAWSAccessを設定した状態のまま、拒否するSCPを加えていく
* Q: AWS仮想デスクトップサービスは？
    * AWS WorkSpaces
* Q: IAM アクセスアナライザーとは? 2106
    * 外部からアクセス可能な状態になっているリソースをリストアップできる
    * S3のパブリックアクセスが許可されている場合など
    * S3のコンソールには、S3 アクセスアナライザーとして、パブリックアクセス可能なバケットと、他のAWSアカウントからアクセス可能なバケットをリストしてくれる
    ![スクリーンショット 2021-06-05 17.22.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481058/f1039e6f-c31b-b9fa-cebd-f798ab01690f.png)
* Q: Route 53のトラフィックフローでしか設定できないルーティングポリシーは？
    * 地理的近接性ルーティング
* Q: Global Accelerator を利用したサイト間VPNは？
    * Accelerated サイト間VPN
* Q: EFSのストレージクラス4つ 2106
    * Standard
    * Standard IA
    * One Zone (AZ１つ)
    * One Zone IA (AZ１つ)
* Q: AWS QuickSightで使用可能なデータソースは？
    * Redshift、S3、Athena、Aurora、RDS
    * DynamoDBは使えない！！！
* Q: DNSレコードおさらい　２１０６
    * Aレコード
        * ドメイン => IPv4アドレス
    * CNAMEレコード
        * ドメイン => ドメイン
    * エイリアスレコード
        * ドメイン => AWSリソース
    * AAAAレコード
        * ドメイン => IPv6アドレス
    * MXレコード
        * ドメイン　＝> メール配送先ホスト名
    * NSレコード
        * ドメイン => 別のDNSサーバー。管理を委託している。
* Q: AWS BackUpとは 2106
    * 各DBのバックアップタスクを集中管理/一般化できるサービス
    * 対象
        * EBS、RDS, EC2、DynamoDB、EFS、Amazon FSx、 Storage Gateway
    * それぞれのサービスでバックアップの方法を持っているが、個々に設定していくのは面倒だから、AWS BackUpで管理する
    * 実際のバックアップ方法は、各サービスでのバックアップ方法に従う
    * 追加機能として、[低コストのストレージ階層へのライフサイクルバックアップ、ソースデータから独立したバックアップストレージとバックアップの暗号化、バックアップアクセスポリシーなどがあるらしい](https://aws.amazon.com/jp/backup/faqs/)
* Q: EFSのパフォーマンスモード2つは？ 2106
    * 汎用モード
        * latency sensitiveで、ほとんどの場合これでOK
    * MAX IOモード
        * もし書き込み読み出し処理量が膨大で、`PercentIOLimit`が100%近いのであればMAX IOモードを考える
        * レイテンシーは汎用モードの方が低い。
        * もしlatency sensitiveかつ、IOリミットに近いのであれば、汎用モードのEFSを複数個立てて分散させる方法が望ましい
* Q: EFSのスループットのモード2つは？ 2106
    * バーストスループットモード
        * 要求したときに勝手にスループットを上げてくれる
        * burst credit を消費していき、無くなったら一定期間経つまでスループットは上がらない
    * プロビジョンドスループットモード
        * 常に高いスループットを提供するモード
        * バーストスループットモードでバーストした時よりも高いスループットか、ずっと高いスループットが要求される時に選択する
* Q: config.hosts = の設定は何？ 2106
    * 開発環境用で悪意のあるJavaScriptが実行されないようにするために、Rails6からconfig.hostsに入っているドメインのみ許可するようになっている
    * デバッグ中の赤い画面に対して攻撃されることがあったらしい
* Q: lvh.me とは？ 2106
    * ループバックアドレス。これにどんなサブドメインを加えても、127.0.0.1に返る
    * adminとかにサブドメイン変えた時の挙動を試すときに便利
* Q: --force-with-lease とは 2106
    *  is a safer option that will not overwrite any work on the remote branch if more commits were added to the remote branch (by another team-member or coworker or what have you). It ensures you do not overwrite someone elses work by force pushing.
    *  基本これ使え
* Q: Rubyのトリプルドット記法 2106
    * ...で受け取った引数をそのまま渡すときに使える
    * https://techracho.bpsinc.jp/hachi8833/2021_05_31/108172
* Q: エクサバイト規模のデータをAWSに移行する方法は？ 2106
    * aws snowmobileを使う
    * トラックで運ぶやつ
    * 1台あたり100ペタバイト運べる。
* Q: ALBの特徴 2106
    * L７のみに対応
    * URLのパスに基いてルーティングが可能なパスベースルーティングが可能
    * WebSocketとHTTP/2のリクエストが利用可能
    * 1インスタンスに複数ポートを登録可能
    * EC2インスタンスをターゲットグループに割り当てる際、複数ポートを個別のターゲットとして登録することが可能なため、ポートを利用するコンテナをロードバランシング可能
    * ターゲットグループでのヘルスチェックが可能
    * アクセスログが取得できる
    * EC2と同様に削除保護が可能
    * ALB自体が自動的にキャパシティを増減する
* Q: S3の1つのオブジェクトの最大サイズ 2106
    * 5TB
* Q: AWS DataSyncとは? 2105
    * オンプレのストレージをEFS, S3, FsXなどにコピーするサービス
    * Storage Gatewayのようにバックアップし続けたりせず、コピーしたい時に実行して利用する
* Q: Amazon Polly 2105
    * 文字を読み上げてくれるやつ
* Q: Amazon Lexとは? 2105
    * チャットボット作れるやつ
* Q: RIのconvertibleで変更できて、standardでは変更できないものは？ 2105
    * インスタンスファミリー
    * OS
    * テナンシー
    * 支払いオプション
    * 両方変更できるもの
        * AZ
        * サイズ
        * ネットワークタイプ
* Q: AutoScalingのデフォルトのターミネーションポリシーは？ 2105
    * OldestLaunchConfiguration
* Q: エニーキャストアドレス 2105
    * 複数の機器が1つのIPアドレスを持ててしまう仕組み
    * ユーザーから一番近い機器にルーティングされる
* Q: AWS Globel Accelerator 2105
    * エニーキャストアドレスを、46 か国 84 都市で受付け、ALBやEC2, EIPなどAWSリソースやエンドポイントにルーティングする
    * グローバルに、ユーザーに近い場所でリクエストを受付け、その後はAmazonのグローバルネットワークを通して通信するため、レイテンシ、ジッタ、スループットが向上する
* Q: AWS ADSとは 2105
    * Application Discovery Service
    * オンプレのホストにソフトをインストールすることで、オンプレのデータセンターの使用状況を収集できるサービス
    * サーバーの仕様、パフォーマンス、実行プロセス、ネットワークなどなど
    * オンプレからAWSの移行前に分析をして、コスト見積もりや移行計画を立てるのが目的
* Q: Network ACLが評価されるのは何順？ 2105
    * 低い順!!!
* Q: Cloud Front Origin Fail Overとは？ 2105
    * Originを2つ登録する
    * 1つをPrimary,もう1つをSecondaryに登録する
    * S3のオブジェクトを使用した場合も、オブジェクトが存在しなかったりした場合にはSecondaryから取りに行く
    * 下記のどれかが発生した時にSecondaryに取得しに行く
        * The primary origin returns an HTTP status code that you’ve configured for failover
        * CloudFront fails to connect to the primary origin
        * The response from the primary origin takes too long (times out)
    * [Optimizing high availability with CloudFront origin failover](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/high_availability_origin_failover.html)
* Q: Ddos攻撃とは？ 2105
    * 悪意を持って大量のデータを送りつけたりリクエストしたりすること
* Q: Redshiftで優先順位を調整する機能は？ 2105
    * WLM Work Load Management
    * クエリの順番待ちをするグループを作り、優先順位をつける
    * 新しくクエリを作るときは、それらのグループに入れていき優先順位を調整する
    * ユーザーグループ
        * どのアカウントから投げられたグループかによってグループに入れる
    * クエリグループ
        * `set query_group to 'batch'`みたいな感じでクエリ時にグループを指定する
* Q: SQSキューの保持期間デフォルトと最短~最長は？ 2105
    * デフォルト4日間
    * 1分~14日間
* Q: Cloud Formation の変更セットとは 2105
    * Cloud Formationに変更を加える前に作成し、AWSリソースにどのような影響があるか一度レビューし、execute(適用)するもの
* Q: Cloud Formation のドリフトとは 2105
    * 実際のリソースとCloudFormationテンプレートの内容に乖離がある状態のこと
* Q: Lambda Layerとは? 2105
    * ライブラリを取り込むことができる機能
    * zipファイルで取り込む
* Q: S3 eventのイベント通知&トリガー先3つは? 2105
    * SQS
    * SNS
    * Lambda
* Q: EBS は異なるAZのインスタンスにもアタッチできる？ 2105
    * できない
    * EC2インスタンスとは分離はされてるけどAZ内で分離されてるだけ
* Q: pintor.s3-website-ap-northeast-1.amazonaws.com 2105
    * 静的webホスティングをすると、バケット名.s3-website-ap-northeast-1 というサブドメインがつく
* Q: step functionsとSWF 利用が推奨されているのは？ 2105
    * Step functions(サーバレス)
    * SWFはサーバがいる。EC2でデサイダーが次のタスクを選定したりする
* Q: S3静的ウェブサイトホスティングに必要な設定3つ 2105
    * バケットレベルの設定で、静的ウェブサイトホスティングを有効化する。デフォルトのページをindex.htmlとか指定する。(バケットのエンドポイントをウェブアドレスとして使用する)
    * パブリックアクセスブロックの無効化
    * バケットポリシーでs3:GetObject を設定する
* Q: Active Directory Connectorとは？ 2105
    * オンプレのADの資格情報を使用してAWSにログインできる
    * Active Directoryのサーバーはあくまでオンプレで動いていて、そこに対してログイン時のリクエストをリダイレクトする
    * AWS Managed Microsoft ADはAWS上にADのサーバーがあることが異なるポイント。対象人数が5,000以下ならsimple AD 推奨。
    * [Active Directory Connector](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_ad_connector.html)
* Q: ユーザー側が持つセキュリティ責任 2105
    * AMI
    * OS
    * アプリケーション
    * **輸送中のデータ** (暗号化)
    * **保管時のデータ** (暗号化)
    * データストア
    * 資格情報
    * ポリシーと設定
* Q: AWS側の責任範囲 2105
    * 設備
    * ハードウェアの物理的セキュリティ
    * ネットワークインフラ
    * 仮想化インフラストラクチャ
* Q: Storage Gatewayの暗号化方式は？ 2105
    * デフォルトではSSE-S3
    * オプションでSSE-KMSにもできる
    * [Data encryption using AWS KMS](https://docs.aws.amazon.com/storagegateway/latest/userguide/encryption.html)
* Q: Amazon MQとは? 2105
    * Apache ActiveMQをAWSで実行するやつ
* Q: 同じアカウントのIAMユーザーに本番/開発環境別にEC2削除権限を分けるには? 2105
    * EC2にタグをつけ、開発環境用のタグがついたインスタンスしか削除できないポリシーを作成する
    * OR VPCを分けて、開発環境用のVPC内のインスタンスのみ削除可能にする
* Q: Health Check grace Periodとは？ 2105
    * インスタンスが立ち上がってから、ヘルスチェックが始まるまでのウォームアップ時間
* Q: EC2オートスケーリングのヘルスチェックの種類は？ 2105
    * ELBタイプ  
        * pingかリクエストを送り、レスポンスで判定する
        * デフォルトではオフ
    * EC2タイプ
        * ハード/ソフトの面で異常がある、もしくはrunning以外のステータスであればunhealthy
* Q: IPフローティングとは? 2105
    * Elastic IPアドレスを、フェイルオーバーするときに別のインスタンスにアタッチすること
    * 仕組みとしてはなく、自分でコード書いて実装する必要があるっぽい
* Q: AWS AppSyncとは? 2105
    * GraphQLエンドポイントを提供するサービス。イメージFirebaseみたい?
    * GraphQLのスキーマを定義する
    * DynamoDB,Aurora, ElasticSearchなどに対してクエリできる
    * Lambdaを挟んで、AppSyncからのリクエストをLambdaが各DBから取得することもできる
    * フロントエンド開発時にデータ取得する方法を提供し、開発を高速化するイメージ
    * サーバレス
* Q: テナンシー 2105
    * Dedicated Host: 物理的にサーバーを占有する
    * Dedicated Instance: 他のAWSアカウントとは分離し↑と同じだが、同じアカウントの他のユーザーとは共有する可能性がある
* Q: EBSのDeleteOnTermination設定とは 2105
    * EC2を終了したときにEBSを削除するかどうか
    * デフォルトではtrueで削除されるようになっている
* Q: シンプルルーティングポリシーとマルチバリュールーティングポリシーの違い 2105
    * シンプルルーティングは同じ名前とタイプのレコードを複数登録することはできない
    * ただ、1つのレコードに対して複数のIPアドレスを設定することができる。その場合、IPアドレスがランダムに選ばれる
    * イメージこんな。![スクリーンショット 2021-05-29 23.51.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481058/5c6cbc97-7f42-9412-19e1-054d4059c67f.png)
    * [シンプルルーティングポリシーにヘルスチェックをアタッチすることはできません。](https://aws.amazon.com/jp/premiumsupport/knowledge-center/multivalue-versus-simple-policies/)レコードを1つしか設定できないから、そのIPアドレスがunhealthyになったとしてもそれを返し続ける
    * マルチバリュールーティングは同じ名前のAレコードを複数持つことができる
    * シンプルルーティングみたいに、1つのレコードに複数の値を登録しようとするとエラーになる。レコードを分けれと言われる
    * こんな感じ![スクリーンショット 2021-05-29 23.56.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481058/c5ba666b-8746-1e9f-6844-a780fc8e881d.png)
    * ヘルスチェックをアタッチでき、healthyなレコードの値のみを返す。
    * 最大8つのレコードを登録できる
    * ランダムで選ばれる
* Q: Active Passive フェールオーバーができるルーティングポリシーは？ 2105
    * フェールオーバールーティングのみ
    * Active-Activeを、フェールオーバールーティングで設定するみたいなことはできない
    * Active-Activeはフェールオーバーとシンプルルーティング以外のルーティングポリシー全てで設定することができる
    * [AWS Active-active and active-passive failover](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover-types.html)
* Q:　connection Draining とは? 2105
    * Classic Load Balancerの機能
    * インスタンスがde-registringかunhealthy状態になった場合に、すぐに全てのconnectionを断ち切るのではなく、既存の継続中のconnectionは閉じるまで待つ仕組みのこと
    * 待つ最大時間を1秒~6分の間で指定する
    * デフォルトは300秒
* Q: マルチサイト(ホットスタンバイ)とは？ 2105
    * スペックも構成も同じものを常時起動しておく
    * 災害時には切り替えるだけ
* Q: ウォームスタンバイとは？ 2105
    * **スペックの低い同構成で常時起動しておく**
    * 災害時にスケールアップする
* Q: パイロットライトとは？ 2105
    * アプリの最小バージョンを準備しておくこと
    * EC2などは停止しておき、障害時に起動させる
* Q: ELBクロスゾーンロードバランシングとは？ 2105
    * 有効化すれば登録されたインスタンスに、AZを跨いで分散させる
    * オフであれば、ELBが存在するAZ内のインスタンスにのみ分散させる
    * デフォルトではオフ。いつでも有効化できる
* Q: S3 ストレージクラス分析とは？ 2105
    * アクセスパターンを分析して、IAとかに移すべきオブジェクトを教えてくれる
    * CSVで書き出せる
    * Dailyで更新
    * バケット単位で作成
    * S3アクセスアナライザーと混同しないように注意
* Q: インスタンスタイプのアルファベットの意味と覚え方は? 2105
    * 汎用
        * T turbo?
        * M multi purpose
        * A Arm
        * Mac
    * CPU Optimized
        * C computing
    * Memory Optipized
        * R Random I/O?
        * X Extra Memory?
    * 高速コンピューティング
        * P Performance?
        * F FPGA フィールドプログラマブルゲートアレイ
        * Inf Inferentia チップ
        * G GPU
    * ストレージ最適
        * I3 i3.metal(ベアメタルインスタンス) SSD!!
            * ベアメタルではない、ハイパフォーマンスSSDストレージタイプもある。ただのI3
        * D HDD
        * H1 HDD ビッグデータワークロード向け、コスト効率に優れたHDD
* Q: [EBSのスループット比較](https://aws.amazon.com/jp/ebs/features/) 2105
    * 汎用SSD gp2: 250Mib/s
    * コールドHDD: 250Mib/s
    * スループット最適HDD: 500Mib/s
    * 汎用SSD gp3: 1000Mib/s
    * プロビジョンド io1,io2: 1000Mib/s
    * プロビジョンドIOPS: Block Express 4000Mib/s
    * 汎用のいいやつとプロビジョンドの悪いやつは同じ
* Q: Trusted Advisorとは？ 2105
    * いろーんな角度から評価するサービス
    * コスト、パフォーマンス、セキュリティ、フォールトトレランスとかをチェックする
    * チェックリストに合致しているか確認
* Q: Amazon Inspectorとは？ 2105
    * セキュリティ評価サービス
    * 露出、脆弱性、ベストプラクティスからの逸脱がないかチェックする
* Q: Railsで元いたページにリダイレクトさせるには? 2105
    * `redirect_back fallback_location: posts_url`
    * Referer ヘッダに値があればそこにリダイレクトさせる
    * なければ`fall_back_location`にリダイレクト
    * [ActionController::Redirecting](https://api.rubyonrails.org/v6.1.3.2/classes/ActionController/Redirecting.html#method-i-redirect_back)
* Q: factory_botの`attributes_for`とは? 2105
    * [Returns a hash of attributes that can be used to build a User instance](https://github.com/thoughtbot/factory_bot/blob/master/GETTING_STARTED.md#build-strategies)

        ```ruby
            attrs = attributes_for(:user)
            # Returns an object with all defined attributes stubbed out
            create(:user) do |user|
              user.posts.create(attributes_for(:post))
            end
        ```
* Q: 二重レンダリングエラーを避けるには？ 2105
    * [`render hogehoge and return`という書き方もある](https://railsguides.jp/layouts_and_rendering.html#%E4%BA%8C%E9%87%8D%E3%83%AC%E3%83%B3%E3%83%80%E3%83%AA%E3%83%B3%E3%82%B0%E3%82%A8%E3%83%A9%E3%83%BC%E3%82%92%E9%81%BF%E3%81%91%E3%82%8B)
    * いつもreturnから先に書いてたけどどうなんだろう。好みか
* Q: S3のサーバーアクセスログとは?　2105
    * [バケットのアクセスログを保存する機能](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ServerLogs.html)
    * auditやセキュリティ上役立つ
    * ログ用の同じリージョンのバケットを指定する(対象バケットと同じでもいいがログとそれ以外を一緒に保存するのは非推奨)
    * [中身](https://docs.aws.amazon.com/AmazonS3/latest/userguide/LogFormat.html) ：バケット、時間、リクエスト者、リモートIP、Httpステータス、処理時間
    * サーバーサイド暗号化を有効化してたらこのログも暗号化される
* Q: AWS CognitoでMFA使える?　2105
    * 使える！
* Q: AWS Cognitoで使える外部認証の種類は?
    * Google, Facebookなどのソーシャル認証(おそらくOpenId connect)
    * Active Directory (SAML)
* Q: API Gatewayのキャッシュとは?  2105
    * [レスポンスをキャッシュする](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-caching.html)
    * 再度エンドポイントにアクセスするまでの秒数をTTLで指定する
    * レスポンスの最大キャッシュサイズは1MB
* Q:VPCフローログを使用して、Redshiftクラスターへのトラフィックを監視するには?  2105
    * Redshiftに拡張VPCルーティングを有効にするだけ
    * RedshiftにVPCフローログを適用するとかはない
* Q:RDSのスレッド、PU、メモリをモニタリングするために必要なのは?  2105
    * RDSの拡張モニタリング
    * CloudWatch Logsにログを送れる
    * デフォルトで30にち保存
    * CloudWatch AgentはEC2インスタンスの話
    * [RDS 拡張モニタリングの有効化](https://qiita.com/Inon/items/80d21379e496bc0d63ec)
* Q:オンプレのActive Directoryの資格情報を使用して、AWSにアクセスする方法は?  2105
  * AWS Single Sign-Onを使う
  * SAML規格
* Q: IAM認証でRDSに接続できる?
  * [IAM認証でいける](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.Connecting.AWSCLI.html)
  * 有効期間は15分だけ
  * `aws rds generate-db-auth-token`でAPI叩いて生成する
  * IAMロールが必要
  * PostgresとMySQLのみ対応
* Q: White labal softwareとは?  2105
  * [White-label software is software that is purchased by a company from a service provider and branded as its own.](https://www.profitwell.com/recur/all/saas-white-label)
  * A社で開発したものを、B,C,D社に使ってもらうが、実際に売ったりサービスとしてリリースする際は、B,C,D社のブランドで行うこと
* Q: EC2インスタンス上にホストされたDBの書き込みパフォーマンスを向上させるには?  2105
    * EC2インスタンスのサイズを大きくする
    * もしくはRAID 0構成にする。
    * までもRDS使えって感じ