Post

プログラミング

2017-07-17 16:44:38

単一テーブル継承・クラステーブル継承・具象クラス継承について

概要リレーショナルなデータベースは継承をサポートをしていないので、オブジェクトの継承関係をデータベースにどのように表現するのか考慮する必要があります。それを表現する3つのパターン、単一テーブル継承・クラステーブル継承・具象クラス継承とはについて説明します。  ※各パターンの実装におけるメリット・デメリット等には触れません。 前提今回想定する登場するクラスは4つです。 Party PeopleがRich Peopleを継承するという構造はちょっとわかりづらいかもしれませんが、イメージが伝われば良しとします。 People(人々)全クラスに共通する属性を持っています。 idは一意なキーです。...

プログラミング

PofEAA

2017-12-25 23:19:03

モダンなJSの話──アロー関数

※この記事はInnovator Japan Engineers’ Blogで掲載されている記事を転載したものです。 アロー関数ってなに?ざっとまとめると、 ES2015から追加された新しい構文 通常のfunction式よりも短くかける thisの値を語彙的に束縛することができる(=文脈からthisの値を把握しやすい) 常に匿名関数 アロー(=>)を使ってかく関数式で、"thisの値を語彙的に束縛することができる"という点が大きなポイントです。 アロー関数を使うと、今までこう書いていたものが・・・ const foo = function() { console...

プログラミング

es5 es6 javascript

2017-12-25 23:20:27

モダンなJSの話──var/let/const

※この記事はInnovator Japan Engineers’ Blogで掲載されている記事を転載したものです。 スコープとは本題に入る前に、スコープの定義について確認しておきましょう。 スコープとは、変数名や関数名が参照可能な範囲のことです。 スコープの種類は色々ありますが、ここでは主に3つのスコープについて表で説明します。 スコープ名 範囲 備考 グローバル 関数の外側 どこからでもアクセスできる。 ローカル(関数) 関数の内側 ローカルスコープ内からでしかアクセスできない。 ブロック ブロック({ })の内側 if, for, switchなど ブロックスコ...

プログラミング

es5 es6 javascript

2017-12-25 23:21:32

モダンなJSの話──クラス

※この記事はInnovator Japan Engineers’ Blogで掲載されている記事を転載したものです。 ECMAScript6からのクラス定義ECMAScript6以前ではnew演算子やprototypeプロパティを使ってクラスに近い機能を実現していましたが、ECMAScript6からはclassキーワードでクラスを定義できるようになりました。<br>classキーワードはこれまでのnew演算子やprototypeプロパティによるクラス定義のシンタックスシュガーです。 classキーワードを使ったクラス定義の方法には、クラス宣言とクラス式の2種類があります。 クラス宣言...

プログラミング

es5 es6 javascript

2017-12-25 23:22:37

モダンなJSの話──importとexport

※この記事はInnovator Japan Engineers’ Blogで掲載されている記事を転載したものです。 exportとはexportは、指定のファイルから関数、変数、オブジェクト、クラス(クラスはプロトタイプベース継承の糖衣構文であり、関数の一種。詳しくは モダンなJSの話──クラス)などを受け取り、任意のファイルでそれらを使えるようにするための文です。 exportには主に2種類の使い方があります。 Named exportsexportしたい要素の名前を付けてexportする方法です。 export { fooFunction }; export { fooFunction,...

プログラミング

es5 es6 javascript

2017-12-25 23:23:27

モダンなJSの話──Destructuring assignment(分割代入)

※この記事はInnovator Japan Engineers’ Blogで掲載されている記事を転載したものです。 分割代入とは分割代入とは、配列またはオブジェクトのデータをそれぞれ別個の変数に代入する式のことです。文章ではイメージがつきにくいかと思います。それぞれの例を見て確認してみましょう。 配列の分割代入let a, b, c; [a, b, c] = [1, 2, 3] console.log(a, b, c) // 1 2 3 let color = [1, 2, 3] const [red, green, yellow] = color console.log(red, gree...

プログラミング

es5 es6 javascript

2017-12-25 23:24:08

Reactでマークダウンエディタをシャッとつくる

※この記事はInnovator Japan Engineers’ Blogで掲載されている記事を転載したものです。 準備ビルド環境のセットアップが面倒なので、今回はFacebook公式のcreate-react-appというツールを使います。 npm install -g create-react-app md-editorというアプリ名で環境を用意することにします。 create-react-app md-editor 次に、今回使うライブラリのインストールをしておきます。 cd ./md-editor npm install --save marked npm install 最後にサーバ...

プログラミング

es5 es6 javascript react

2017-12-29 20:44:23

モダンなJSの話──Promise

※この記事はInnovator Japan Engineers’ Blogで掲載されている記事を転載したものです。 PromiseとはPromiseとは・・ The Promise object represents the eventual completion (or failure) of an asynchronous operation, and its resulting value. MDN - Promise だそうです。 ざっくりまとめると、Promiseとは、非同期処理やその結果をいい感じにしてくれるオブジェクトのことです Promiseを使うと主に以下のようなメリ...

プログラミング

es5 es6 javascript

2018-01-20 23:39:39

ReactとHistory APIを使ってrouterを自作する

概要準備まずはHistory APIを理解しておきます。GO TO MDN。 MDN - History MDN - ブラウザの履歴を操作する 忙しい人はpushStateとwindow.popstateだけ理解しておけばなんとかなるはず。 仕様このrouterでは、以下のようなURLに対応します。 /post /post/:id /post/:id/:title クエリパラメータには対応しません。 使用するパッケージReact周りは省略します。 React以外で使うパッケージは1つだけです。 pillarjs/path-to-regexp URL部分の正規表現を良しなにやってくれるパ...

プログラミング

es6 javascript react history-api router

2018-02-01 10:56:07

モダンなJSの話──async function

※この記事はInnovator Japan Engineers’ Blogで掲載されている記事を転載したものです。 async functionとはasync functionはAsync Functionオブジェクトを返す関数です。 asyncとawaitというキーワードを使って、Promiseよりも簡潔に非同期処理を書くことができます。 ES2017で仕様が定義されています。 使い方使い方はカンタンです。 async関数を関数定義の時に頭につけるだけです。 Promise以外の値を返すように定義した場合は、その値で解決された形でPromiseが返されます。 async function a...

プログラミング

es5 es6 javascript

2018-02-28 10:37:27

モダンなJSの話──Proxy

※この記事はInnovator Japan Engineers’ Blogで掲載されている記事を転載したものです。 ProxyとはProxyはECMAScript 2015から追加されたオブジェクトで、オブジェクトが持つ機能をラップすることにより、オブジェクトの機能をカスタマイズすることができます。 Proxyの関連用語Proxyを知る上で必要な用語です。 handler・・・トラップを入れるためのオブジェクトで、プレースホルダ的な扱いをされます。 trap・・・Proxyがプロパティへのアクセスを実装するためのメソッド。 target・・・プロキシするオブジェクト。 invariant・・・...

プログラミング

es5 es6 javascript

2018-07-01 19:37:24

Golangの開発環境を構築

概要Goの環境を構築します。 Goの環境構築Goをインストールするインストール手段は省略します。私はanyenvというツールでインストールしています。 GOPATHを指定する.bashrcまたは.bash_profileにGOPATHを指定します。 export GOPATH=$HOME/localdev/project/go_dev // 好きなように設定してください PATH=$PATH:$GOPATH/bin Goのディレクトリ構成を確認するローカル環境でのディレクトリ構成は公式ドキュメントに従う形で構成していきます。 go_dev/ ├── bin ├── pkg └── src g...

プログラミング

golang

2018-04-11 13:54:10

テストケースの種類と洗い出し

概要テストケースの基本的な種類と洗い出し方についてのざっくりまとめ。 テストの目的 バグを発見する 品質保証 品質改善(リファクタリング) テストの種類 ユニットテスト メソッドの仕様を確認するテスト ドメイン層のpublicメソッドが対象とする インテグレーションテスト ユースケース(一連の処理)に基づいたテスト ビジネス的に重要なケースを優先的に対象とする テストケースの洗い出し 正常系 想定しているインプットに対し、想定したアウトプットが行われているか 異常系 想定していないインプットに対し、対応ができるかどうか 同値分割 同値クラスに分ける・・・テスト結果をグル...

プログラミング

test

2018-04-11 22:15:48

Laravel Homesteadを使ったLaravelの環境構築

概要Homesteadを触る機会があったのでざっくりまとめる。 準備以下のツールは用意しておきましょう。 composer vagrant virtualbox ssh key 鍵つくっておいてください 手順Laravelをインストールlaravelのインストールとcomposer installを実行しましょう。 composer create-project "laravel/laravel=5.5.*" projectname cd appcomposer install HomeSteadを用意Vagrant boxを用意します。 vagrant box...

プログラミング

laravel vagrant virtualbox composer homestead

2018-04-21 11:05:19

Golangの勉強で参考にした本とリンク

概要golangの勉強をする時に参考にした本とリンクのまとめ。 本 プログラミング言語Go 教典 スターティングGo言語 読みやすい。わかりやすい。プログラミングの素養が高い人には平易すぎる内容かもしれない。 Go言語によるWebアプリケーション開発 Goプログラミング実践入門 標準ライブラリでゼロからWebアプリを作る リンク golang.jp A Tour of Go astaxie/build-web-application-with-golang 本を購入せずともこれを読んでおけばおおよそのキャッチアップができる気がする Go Data Structures goのデー...

プログラミング

golang

2018-05-04 18:02:48

ソフトウェアのテスト技法の基本まとめ

概要はじめて学ぶソフトウェアのテスト技法の第1章を要約します。参考ページをサブタイトル横にメモします。 テストのプロセステストとは何か?(p.12)「ソフトウェアの品質の測定・改善を目的とし、テストウェアの開発・利用・保守と平行しながら進めるライフサイクルプロセスのこと」 Bories Beizerはテストを成熟度別に5段階のレベルに分けている。 レベル 成熟度 0 デバッグとテストに違いはない 1 ソフトウェアが動作することを示す 2 ソフトウェアが動かないことを示す 3 プログラムが動作しないことによる危険性を許容範囲に抑える 4 精神的な規律 レベル4...

プログラミング

test

2018-05-13 16:00:43

ポリモーフィズムとは

概要ポリモーフィズムについてまとめる ポリモーフィズムとは Poly(複数の)Morphism(形状) 複数の異なる型に対し、共有のインターフェースを提供すること 引数を受け取ったインスタンスがクラスによって違う振る舞いをすること ポリモーフィズムの種類 アドホック多相 関数が異なる型の引数に対してそれぞれ異なる実装を持つ 多重定義、関数のオーバーロードによって実現 パラメータ多相 型指定のないコードが書かれ、それぞれの型に対して透過的に使用できる場合 型を引数として渡すことで様々な型に適用することができる ジェネリクスやテンプレートによって実現 部分型付け 共通の上位型を持つ複数の...

プログラミング

ポリモーフィズム

2018-05-11 11:52:09

ソフトウェア開発の法則

概要ポステルの法則 Jon Postel 送信するものに関しては厳密に、受信するものに関しては寛容に ポステルがTCPを規定したRFC793にて記載された1節が一般化されたもの インターネットの通信における原則 パーキンソンの法則 Cyril Northcote Parkinson 第1法則  仕事の量は、完成のために与えられた時間をすべて満たすまで膨張する 第2法則 支出の額は、収入の額に達するまで膨張する 「パーキンソンの法則:進歩の追求」にて提唱された法則 コンピューターへの応用 データ量は与えられた記憶装置のスペースを満たすまで膨張する パレートの法則 Virfredo...

プログラミング

ソフトウェア開発

2018-05-13 19:19:01

ダック・タイピングとは

概要ダック・タイピングについてまとめる ダック・タイピングとは 動的型付けオブジェクト指向プログラミング言語において、オブジェクトができることはオブジェクトそのものが決定する インターフェースの全てのメソッドを持つオブジェクトは、インターフェースを実装していなくともオブジェクトはインターフェースを実装しているとみなせる、ということ If it walks like a duck and quacks like a duck, it must be a duck. 参考  Wikipedia - ダック・タイピング

プログラミング

ダック・タイピング

2018-06-08 02:18:43

DIとサービスロケーター

概要DIとService Locatorの違いについてまとめる DIとは デザインパターンの一種 依存性注入 オブジェクト間の依存性を分離 オブジェクトの実行時に必要なオブジェクトが注入されるようにする テストしやすくなる DIパターンの実装DIパターン(コンストラクタインジェクション)を実装してみる。なお、DIパターンには、コンストラクタインジェクション、セッターインジェクション、メソッドインジェクションなどコンストラクタ以外からDIする方法もある。比較のためにDIではないパターンとDIのパターンの両方を実装する。 DIではないパターン<?php class SlackNotif...

プログラミング

DI サービスロケーター デザインパターン