コンストラクタ

PHP

コンストラクタ __constructという名前のメソッドは、インスタンス作成時に自動的に呼び出される。 コンストラクタに引数を渡す newで引数を与えると、その値がコンストラクタに渡される。

メソッド

PHP

メソッドの定義と呼び出し クラス定義内でメソッドを定義する。 public function メソッド名 そのクラスのインスタンスに対してメソッドを呼び出す。 $インスタンス->メソッド() hello(); ?> メソッド内でインスタンスのプロパティにアクセスする メソッド…

クラスとインスタンス

PHP

クラスとプロパティの定義 インスタンスの生成 プロパティへのアクセス $インスタンス->プロパティ ※プロパティに$は不要 name = 'CURRY'; // nameプロパティを参照 echo $curry->name; ?>

【Ruby】puts, print, p

メソッド 出力後の改行 配列の表示 戻り値 呼び出すメソッド puts あり 要素ごとに改行 nil to_s print なし 改行しない nil to_s p あり 改行しない 引数のオブジェクト inspect

【SQL】副問い合わせ

SQL

副問い合わせ(サブクエリ) 複数の問い合わせを一度に行うときは、IN内にサブクエリを記述する。 SELECT MOVIE_TITLE_JP, SERIES_CD FROM movies WHERE SERIES_CD IN ( SELECT SERIES_CD FROM movies WHERE MOVIE_TITLE_JP = 'アベンジャーズ'); タイトルが…

【SQL】グループ化して表示

SQL

GROUP BY SELECTで取得したレコードを、指定されたカラムの値ごとにグループ化して表示する。 SELECT COMIC, COUNT(COMIC) FROM movies GROUP BY COMIC ORDER BY COUNT(COMIC) DESC; moviesテーブルのCOMICごとの件数をカウントし、件数の多い順に表示する。…

【SQL】テーブルの結合

SQL

2つのテーブルのうち、結合キーの値が一致する行同士を結合して新たなテーブルを生成する。 内部結合(INNER JOIN) 結合元のテーブルから、結合先と関連付いている行のみを抽出する。それぞれ結合先・結合元と関連づいていないレコードは検索結果から除外され…

【SQL】基本的な命令

SQL

SELECT 全列全行を取得する SELECT * FROM actors; 指定した列の全行を取得する SELECT ACTOR_CD, ACTOR_NAME FROM actors; WHERE 条件に該当するデータを取得する SELECT ACTOR_CD, ACTOR_NAME FROM actors WHERE ACTOR_CD IN ('AC002', 'AC031'); ORDER BY…

webpackerで扱うエントリーポイント

webpackerで扱うエントリーポイント app/javascript配下のファイルをビルドし、public/packs/jsにビルド結果が出力される。 (sprocketsではapp/assets/javascripts) たとえばapplication.jsをビルドした成果物はapplication-xxx.js エントリーポイントの読…

credentials ~秘匿情報の管理~

credentials Railsでアプリケーションを作成すると、credentials.yml.encとmaster.keyが作成される。 config/credentials.yml.enc 暗号化された設定ファイル。秘匿情報を記述する。 asl;kdjf;woiejfw@iwqjf[qw@jo...... 中身 # aws: # access_key_id: 123 # …

variantsによるテンプレートの切り替え

接続してきた端末によってテンプレートを切り替える UserAgentなどを参照してrequest.variantの値を設定する request.variantの値によってテンプレートが選択される def show request.vatiant = :mobile if request.user_agent =~ /iPhone/ ... end このとき…

Railsの思想

CoC 〜設定より規約〜 Employeeモデルがあるとすると、Railsでの規約は以下の通りになる。 データベースのテーブル名はモデル名の複数形(employeesテーブル) /employeesは社員の一覧を、/employees/1はID:1の社員を表す 規約に従うことで設定ファイルを書…

webpacker

webpack CSSやJavaScript、画像などWebコンテンツを構成するあらゆるファイル(アセット)を「モジュール」という単位で取り扱い、依存関係を解析して「バンドル」という1つのファイルに最適な形で変換するためのツール。 Webpackコマンドを使ってビルドする…

クロスサイトスクリプティング(XSS)

ユーザー環境で不正なスクリプトを実行させる。 標的サイトに悪意のあるスクリプトが埋め込まれるようなリンクを踏ませる or 標的サイトにフォームなどから直接悪意のあるスクリプトを埋め込む 標的サイトにユーザーがアクセスしたとき、特定のタイミングで…

SQLインジェクション

パラメータを操作して不正なデータベースクエリを発行させる。 Railsでの対策 railsではパラメータの文字列が自動でエスケープされる。 ただしwhereなど(条件フラグメント)については手動でエスケープする必要がある。 Model.where("login = ? AND passwor…

クロスサイトリクエストフォージェリ(CSRF)

攻撃対象のwebアプリケーションに意図しないリクエストを送信させる。 攻撃手法 攻撃用のwebページや掲示板やメールに、標的のユーザーがログイン中の標的アプリに無意識にリクエストを送らせるコードやリンクを仕込む。 ブラウザはリクエストのたびにcookie…

CookieStoreセッションに対する攻撃

CookieStoreによるセッション管理 RailsはデフォルトのセッションストレージとしてCookieStoreを用いる。 CookieStoreはセッション情報をsecret_key_baseで暗号化し、クライアント側のcookieに保存する。 再生攻撃 最初にブラウザに保存されていたcookieをコ…

セッションハイジャック

ユーザーのセッションIDが盗まれると、攻撃者がそのユーザーをかたってアプリケーションを利用できてしまう。 Railsでの対策 SSL接続を強制する。 Rails.application.configure do config.force_ssl = true end

$listeners ~孫→子→親の2連続$emitの代わりに~

ParentComponent <ChildComponent @parentMethod="updateMessage"></ChildComponent> ChildComponent <GrandChildComponent @childMethod="$listeners['parentMethod']" ></GrandChildComponent> GrandChildComponent methods: { this.$emit('childMethod', this.message) }

【Rails+Vue】jwtによるトークン認証

認証におけるjwtのメリット CORSなどの制約がない 異なるドメイン間の通信を拒否する制約にかからない スケーラブルである cookie認証の場合はセッションを保持する別のサーバーやDBが必要になる。jwt認証の場合はアプリケーションサーバーのみで認証ができ…

【Rails+Vue】Rails⇔Vue間のデータの送受信

Vue→Rails 以下のようなストロングパラメータが設定されているとき、params[:user][:name]などといった二重ハッシュである必要がある。 def user_params params.require(:user).permit(:name, :email) end このとき、axiosの引数は以下のような構造にすればO…

【Rails+Vue】プロジェクト作成

プロジェクト作成 初めからプロジェクトを作る場合 % rails new todo_sample --webpack=vue Railsアプリに途中からVueを導入する場合 % bin/rails webpacker:install % bin/rails webpacker:install:vue 開発環境サーバーの設定 foremanでrails serverとwebp…

axios ~サーバーにHTTP通信をする~

インストール $ yarn add axios 基本的な使い方 postリクエスト axios.postの第一引数にエンドポイントURL、第二引数に送信するオブジェクトを渡す。 getリクエスト axios.getの引数にエンドポイントURLを渡す。thenでレスポンスを取得する。 // axiosをイン…

【Vuex】mapGetters, mapMutations, mapActions

コンポーネント側での記述を簡略化できる。 mapGetters import { mapGetters } from 'vuex'; export default { computed: { ...mapGetters(['doneTodosCount','anotherGetter' ]) // doneTodosCount() { return this.$store.getters.doneTodosCount; }, // a…

【Vuex】機能ごとに切り出しモジュールにする

モジュール化 ユーザーと掲示板をストアする機能をそれぞれ別のモジュールとして切り出すみたいなこと。モジュールにするときは記述の仕方が異なる。 Vuexのモジュールが複数ある時、gettersやmutationsなどをそれぞれのモジュールの名前空間に入れなければ…

【Vuex】フォームの入力値をストアする2つの方法

(1)valueと@inputを使う <input :value="message" @input="updateMessage"> computed: { message() { return this.$store.getters.message; }, methods: { updateMessage(e) { this.$store.dispatch('updateMessage', e.target.value); } // 入力→methods→actions→mutationsの順に入力値(e.target.value…

【Vuex】基本的な使い方

Vuexで状態管理を行う。 インストール % yarn add vuex Vuexを設定 Vuexの内容 - state: $storeで参照できるグローバル変数のようなもの - getters: storeの算出プロパティのようなもの - mutations: stateの値を変更する関数 - actions: mutationsの処理を…

【VueRouter】名前付きルート

nameでルーティングの名前を指定する。以下ではusers/1/profileの名前を設定している。 routes: [ { path: "/users/:id", component: Users, childeren: [{ path: "profile", component: UsersProfile, name: "users-id-profile" // ここ }] } ] router-link…

【VueRouter】ネストされたルーティング

childrenでネストするルーティングを指定する。 以下の記述により、/users/1/postsなどが定義される。 routes: [ { path: "/", component: Home }, { path: "/users/:id", component: Users, props: true, children: [ // ここ { path: "posts", component: …

【VueRouter】URLの動的な値を使用する

template内で$route.paramsからURL内の動的な値を参照できる。 <template> <h1>User No. {{ $route.params.id }}</h1> $route ナビゲーションの情報を得るときに使う $router ナビゲーションするときに使う ルート(route)コンポーネントの再利用性を損なわないためのpropsオプ</template>…