Post

プログラミング

2019-05-08 17:05:41

execコマンドによるリダイレクト

概要execコマンドは現在のプロセスを実行するコマンドで置き換えるコマンドだが、引数無しで使うとリダイレクトの動的変更ができる。 ちょうどmaster直プッシュの際にプロンプトで確認するようにするで #!/bin/sh exec < /dev/tty read ANSWER というコードが出てきてよくわからなかったので調べてみたのがきっかけ。 使い方#!/bin/sh echo "Output to stdout" // 標準入力 exec > redirect.txt // ファイルディスクリプタを変更 echo "Output to file" // ファイルに出力される...

プログラミング

bash shellscript exec

2019-05-08 17:04:11

master直プッシュの際にプロンプトで確認するようにする

概要gitでmasterブランチへの直pushを未然に防ぐためのセーフーティネットの作り方。github上でmasterブランチへのpushを禁止すれば良いのだが、DevOpsの都合上でgithubの設定では問題があったのでhooksを使う方向で設定した。 導入グローバルに設定したいので~/.git_template/hooks配下にpre-pushファイルを作成する。.git_templateディレクトリが存在しない場合は作成する。 なお、グローバルに設定しても既存のリポジトリには反映されないので、既存リポジトリに反映したい場合は既存リポジトリの./git/hooks配下にpre-pushを...

プログラミング

git shellscript

2019-04-21 00:05:50

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

概要PHPで学ぶデザインパターン Advent Calendar 2018で間に合わなかった記事。 Stateパターンとは状態をクラスで用意することで振る舞いを切り替えることができるようなパターン。 実装スイッチのオンオフの状態を切り替えるような例を想定した。シングルトンを使ったほうが良い気がする。 <?php class OnState { public function getState() { return 'ON'; } public function getNextState() { return ne...

プログラミング

GoF php デザインパターン State

2019-04-20 14:24:47

ゴリラで学ぶソフトウェアの法則10選

概要以前書いたソフトウェア開発の法則 の雑メモをベースにLTをしたのでスライド内容を補足する形でまとめる。 スライドは↓ゴリラで学ぶソフトウェアの法則10選 ゴリラで学ぶには無理があったのでスクリプトを書き残しておく。 ソフトウェア開発の法則ソフトウェアの文脈で語られる法則に縛らず、他分野での法則でもソフトウェアに当てはまるであろうものを”ソフトウェア開発の法則”としている。 経験則に基づくものが多いが、経営工学だったり心理学だったり、はたまたどこかの論文だったり引用元は様々である。 パーキンソンの法則(第1原則)「仕事の量は、完成のために与えられた時間を全て満たすまで増大する」 有名ど...

プログラミング

ソフトウェア開発

2019-04-11 15:09:57

Realizeを使ってgoでホットリロードを実現するメモ

概要github - oxequa/realizeを使ってみたメモ。 準備go get github.com/oxequa/realize 使い方./demo/ ├── .realize.yaml └── main.go .realize.yaml settings: legacy: force: false interval: 0s schema: - name: demo path: . commands: run: status: true watcher: extensions: - go paths:...

プログラミング

go realize

2019-03-24 21:58:28

URLルーティングをつくる エピソード3(完結編)

概要URLルーティングをつくる エピソード1 とURLルーティングをつくる エピソード2 でURLルーティングの自作について試行錯誤の過程を記してきたが、ようやく一段落させることができたので完結編という形で締括くりたい。 完結、といっても課題はいくらでもあるし突き詰めるとこればっかりに時間をかけることができるようなモノであるということは承知している。。。 前回までの話しエピソード1 では、ルーティングのデータ構造を考えたり、とりあえず手を動かして実装のイメージを掴もうとした。(動くところまで持っていけなかった。。。) エピソード2では、データ構造を見直したり、参考になりそうなリポジトリを漁って...

プログラミング

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

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