Post

プログラミング

2019-02-11 12:42:49

Laravelでの機能テストの始め方雑メモ

概要Laravelでの機能テストの始め方と簡単な使い方について紹介する。入門レベルに限るのでより実践的な内容については触れない。※LTの元ネタ程度でメモくらいの内容。 対象テストを書いたことがない人向け。 テストを書いたことがなくても機能テストであればアプリケーションの仕様さえわかっていれば比較的に誰にでも楽に何を書くのかわかりやすいと思う。 特にLaravelは機能テストで使える便利なAPIやツールが充実しているので、テストに慣れていなくともテストに取り組みやすいはず。 環境 Docker Laravel5.7 MySQL 準備雑に環境を用意しておいた。 github - bmf-san/...

プログラミング

laravel 機能テスト

2019-02-07 12:47:37

Goでmysqldumpツールをつくる

概要このブログのDBバックアップを原始人のごとく手動でやっていたのでコマンド一発でバックアップをリモートからローカルにバックアップを取れるツールをgoでつくってみた。 パッケージ "net" ネットワークI/O、TCP/IP、UDP、ドメイン名前解決、Unixドメインソケットなどのインターフェースを提供してくれるやつ "time" 時間の計算や表示のための機能を提供してくれるやつ "io/ioutil" ファイル周りのI/Oユーティリティを提供してくれるやつ "golang.org/x/crypto/ssh&qu...

プログラミング

golang mysql ssh mysqldump

2019-02-01 00:52:07

PHPで学ぶデザインパターン - Bridgeパターン

概要PHPで学ぶデザインパターン Advent Calendar 2018で間に合わなかった記事。 Bridgeパターンとは機能拡張のためのスーパークラスと実装拡張のためのサブクラスを用意し、機能の橋渡しをするようなパターン。 実装<?php interface Connector { public function __construct(Converter $converter); public function connect(); } class IphoneConnector implements Connector { private $conver...

プログラミング

GoF php デザインパターン Bridge

2019-02-01 01:57:44

PHPで学ぶデザインパターン - Adapterパターン

概要PHPで学ぶデザインパターン Advent Calendar 2018で間に合わなかった記事。 Adaperパターンとは元となるクラスに修正を加えることなくインターフェースを変更することができるパターン。 異なるインターフェース間の互換性を調整するようなAdapterクラスを用意することで実現する。 実装<?php interface Bird { public function fly(); } class SmallBird implements Bird { public function fly() { echo 'fly short...

プログラミング

adapter GoF php デザインパターン

2019-01-31 23:52:15

PHPで学ぶデザインパターン - Mediatorパターン

概要PHPで学ぶデザインパターン Advent Calendar 2018で間に合わなかった記事。 Mediatorパターンとは仲介者・調停者の意味。 オブジェクトの振る舞いに関するデザインパターンで、オブジェクト間のやりとり調整するためのパターン。 オブジェクト同士のやり取りが複雑化し、関係性が見えにくくなるような時に有用かもしれない。 実装<?php // Mediator class Receptionist { public function checkIn(User $user, $message) // 振る舞いの操作を任せたいオブジェクトを保持 {...

プログラミング

php デザインパターン Mediator GoF

2019-01-09 02:20:08

URLルーティングをつくる エピソード2

概要URLルーティングをつくる エピソード1の続き。 とりあえず動く形のものを仕上げてpackagist - ahi-routerという名前でパッケージ公開した。 エピソード1からの変更点エピソード1では、データ構造に木構造を採用してルーティングを作ろうというと試みた。 パフォーマンスが考慮されているライブラリでは、木構造を生成するロジックを用意して、最適化された探索アルゴリズムを実装するような形になっているようだが、木構造を生成するロジックをかくのはめん(ry 時間がかかりそうだったので、探索部分だけ頑張る方向性でやってみることにした。 前回はルーティング定義のデータ構造を、 <?ph...

プログラミング

HTTP URLルーティング アルゴリズム 木構造

2018-12-19 02:38:10

URLルーティングをつくる エピソード1

URLルーティングをつくる エピソード1概要以前、Reactで非常に軟弱なルーティング(cf. ReactとHistory APIを使ってrouterを自作する)を作ったが、改めてそこそこにちゃんとしたルーティングを自作したいと思い、挑戦することにした。きっかけは、最近触っているGolangだ。Golangでは標準ライブラリを駆使することでアプリーケーションをうすーく実装できるようだが、ルーティング周りは標準ライブラリがパワー不足なのものあって、外部のライブラリに依存するケースが多いらしい。そんなこともあってルーティングを自作できるようになるとGolangでもそれ以外でもルーティングを自前で用...

プログラミング

HTTP アルゴリズム URLルーティング 木構造

2018-12-09 10:25:43

PHPで学ぶデザインパターン - Strategy

概要この記事はPHPで学ぶデザインパターン Advent Calendar 2018の記事です。 今回はStrategyパターンについてかきます。 Strategyパターンとは?Strategyパターンは、アルゴリズムの切り替えを容易にするようなパターンです。異なる処理をそれぞれ別のクラスに定義するため、 処理を動的に選択できるだけでなく、条件分岐を減らすことも可能としてします。OCP(open/closed principle)に忠実なパターンの一つでもあります。 実装例単純な例でStrategyパターンの実装を見てみます。 <?php class Context { priv...

プログラミング

デザインパターン php GoF strategy

2018-12-08 17:37:17

PHPのインターフェースとタイプヒンティング

概要この記事はPHP Advent Calendar 2018の記事です。(ちょっと早めに投稿しています) インターフェースはメソッドの実装を保証する”契約”的意味合いの他、タイプヒンティングによって実装を抽象に依存させる(=実装の切り替えをしやすくする)こともできる。 インターフェースの定義・実装基本的なインターフェースの定義と実装。 <?php interface Action { public function say(); } class Superman implements Action { public function say() {...

プログラミング

php インターフェース タイプヒンティング

2018-12-04 21:49:55

anyenvでインストールしたrbenvでbundlerをinstallしたときにパスでハマった

概要 anyenvでインストールしたrbenvでbundlerをinstallしたときにパスでハマった話。 ハマったことanyenvでrbenvをインストールしてrubyを使っているのですが、bundlerをインストールする際に、 gem install bundler と何も考えずに打つと、bundlerが/usr/local/bin/以下に配置されてしまう。 意図したパスでないためgemでinstallしたchefとか使おうとするとコケる。 解決策rbenv exec gem install bundler rbenvで導入しているrubyのgemを実行するように指定する。 所感パスを冷静...

プログラミング

anyenv gem rbenv ruby

2018-12-01 23:15:50

PHPで学ぶデザインパターン - Factory・Factory Method・Abstract F...

この記事はPHPで学ぶデザインパターン Advent Calendar 2018の記事です。 概要Factory・Factory Method・Abstract Factoryについてかきます。 Factoryパターンについて知るまずはFactoryパターンについてざっくり説明します。 interface Robot { public function say(); } class BlueRobot implements Robot { private $color; public function __construct($color) {...

プログラミング

デザインパターン GoF php abstract factory factory factory method

2018-12-01 00:57:36

正規表現の基本

概要正規表現の基本。ERE(Extended regular expression)で扱える記法の中でよく使いそうなやつをまとめる。 文字クラス[文字列] 文字列の中の任意の一文字と一致 Ex: [きつね] きつねたぬきねこ き,つ,ね,き,ね [^文字列] 文字列の中にない任意の一文字と一致 Ex: [^きつね] きつねたぬきねこ た,ね,こ [文字列-文字列] 任意の文字範囲にある一文字と一致 Ex: [あ-ん] きつねたぬきcat き,つ,ね,た,ぬ,き \d 10進数数字と一致 Ex: \d りんごが10個 1, 0 \D 10進...

プログラミング

ERE 正規表現

2018-11-15 14:39:15

Golangのインターフェース概要

概要Golangのインターフェースについてまとめる。 Golangのインターフェースとは 特定のメソッドの型だけを列挙した型 インターフェースFooで宣言したメソッドが全て実装されている構造体は、型Fooとして扱うことができる。 インタフェースを使うとポリモーフィズムを実現することができる インターフェースの定義type <型名> interface { <メソッド名(<引数の型>, ...)(<戻り値の型>, ...) } // Ex. type Human interface { say() string } インターフェースの特徴イ...

プログラミング

golang

2018-11-13 21:13:03

Golangのポインタ概要

概要Golangのポインタの基本では参照渡しと値渡しの違いの観点からポインタについて書いたが、それ以前にポインタを扱っているうちに混乱してきたため、ポインタの概要をまとめる。 ポインタ型とは メモリー上のアドレスを記憶する変数の型のこと ポインタ型の定義 *を使って定義する var s *string // 変数sはstring型のポインタ。型は*string アドレス演算子と間接参照演算子アドレス演算子 & 任意の値からポインタ型を生成し、アドレスを得る 間接参照演算子 * ポインタ型変数から値を参照する(デリファレンス) ポインタ型変数package main impor...

プログラミング

golang

2018-11-13 15:43:42

Golangでの変数定義・宣言のパターンまとめ

概要Golangでの変数定義・宣言のパターンをまとめる 変数の定義・宣言における注意 1文字目が大文字の場合は、他のパッケージからも見える変数 1文字目が小文字の場合は、そのパッケージでしか見えない変数 変数の定義・宣言Variable declarationsvar i int fmt.Printf("%T", i) // int var a, b, c string fmt.Printf("%T", a) // string fmt.Printf("%T", b) // string fmt.Printf("%T", c) // string var s = "Hello World...

プログラミング

golang

2018-10-04 15:24:31

Golangの関数についてー関数値/コールバック関数/無名関数

概要Golangの関数において、以下3つについてまとめる。 関数値として扱う場合の関数 関数を引数として扱う関数 無名関数の定義 関数値 クロージャー 関数値として扱う場合の関数package main import ( "fmt" "testing" ) func sayHi() string { return "Hello" } func main() { greetA := sayHi() greetB := sayHi fmt.Println(greetA) fmt.Println(greetB()) } コールバック関数package m...

プログラミング

golang コールバック関数 関数 無名関数

2018-09-20 16:32:36

Jestで始めるJavaScriptのテスト

概要Jestを使ってJavaScriptのテストをかいてみる。 準備jestとESModulesを使いたいのでbabel-preset-2015をインストールしておく。(babel-jestはjestに用意されている。) npm install --save-dev jest babel-preset-2015 .babelrcの中身はこんな感じ。 { "presets": ["es2015"] } package.jsonはこんな感じ。 { "scripts": { "test": "j...

プログラミング

es5 javascript babel babel-jest ESModules jest

2018-09-03 12:48:54

Golangのポインタの基本

概要Golangのポインタ基礎についてまとめる。 前提 変数とメモリの関係についてイメージできる程度の知識 ポインタとは何かポインタは変数のアドレスを指す。変数のアドレスを通じて呼び出し元の変数の値を変更することができる。 GolangではC言語ライクなポインタは用意されている。Golangでのポインタでは、変数Tのポインタは*T型で、ゼロ値はnilとなる。 package main import "fmt" func main() { i := 10 // &(アドレス演算子)を使い、変数のアドレスにアクセスする // 変数pointerに変数iのアドレスを格納...

プログラミング

golang ポインタ 値渡し 参照

2018-08-15 12:36:20

CircleCI2.0でPHPUnitのコードカバレッジを出力する

概要CircleCi2.0でPHPUnitのコードカバレッジを出力する 環境 CircleCi2.0 docker docker-compose PHPUnit6系 PHP7.2系 手順phpunit.xmlの設定を調整するカバレッジの対象としたいソースを指定する。 <filter> <whitelist processUncoveredFilesFromWhitelist="true"> <directory suffix=".php">./app</directory>...

プログラミング

Docker circleci circleci2.0 phpunit

2018-07-17 01:05:15

JavaScriptで始めるアルゴリズム

概要JavaScriptでアルゴリズムを学ぶ。 サーチのアルゴリズムリニアサーチリストや配列のデータに対して、先頭から順番に比較を行っていくアルゴリズム。 配列の長さ分処理を繰り返し、目的のデータに到達したら処理を終了する。目的とするデータが後ろにあるほど処理が遅くなる。 const targetData = 5; const data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; (function () { for (let i = 0; i < data.length; i++) { if (targetData == data[i])...

プログラミング

アルゴリズム バイナリーサーチ リニアサーチ バブルソート セレクションソート