ホーム

JavaScriptで始めるアルゴリズム

アルゴリズムとデータ構造

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

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

Unixコマンドメモ

OS

概要 Unixコマンドのメモ。 jq JSON形式のデータを加工するコマンド。 JSONのPretty Print echo '[{"name": "Tom", "age": 20}}]' | jq . Pretty Print以外にもオブジェクトからプロパティを指定してデータを取り出したり、オブジェクトの長さを取得...

unixコマンド jq tee

プロセスとスレッドの違い

OS

概要 プロセスとスレッドの違いについてまとめる プロセスとは プログラムの実行単位 CPU上で実行される リソースの共有はできない 専用のメモリ領域を使用 仮想アドレス空間を保持している プロセスの切り替えには仮想アドレスと物理アドレスのマッピング必要 プロセスの保持するデータ構造 プロセスがメモリに保持しているデータ構造は2つのセグメントに分かれている。 テキストセグメント プログラム...

os スレッド プロセス スタック ヒープ

GraphQLとは

アプリケーション

GraphQLとは Facebookが開発 APIのためのクエリ言語 APIのリクエストのデータ形式とレスポンスのデータ形式が似ているため、ユーザーフレンドリー RESTはアーキテクチャ(設計)であり、GraphQLは言語(DSL)である REST APIとGraphQLの比較REST APIのAPI形式エンドポイントに対して、HTTP動詞でリクエストを投げる curl https://ap...

API HTTP REST GraphQL

Atom×TidalCycles×SuperColliderでライブコーディングをはじめる

アプリケーション

概要プログラミングで音楽をつくってみたいと思い、音響プログラミングに手を出してみた。 準備 Mac Atom Git Homebrew Haskell Tidalcycles SuperCollider Mac、Git、Atom、Homebrewは既に用意されている前提で話を進める。 HomebrewでHaskellとTidalCyclesをインストールするbrew install ghc br...

Atom Git Haskell homebrew tidalcycles

さくらVPSでDocker環境を構築する

インフラストラクチャ

概要さくらVPS上にDocker環境を構築する。サーバーの初期設定等は割愛。 構築手順操作はすべてsudo権限を持った一般ユーザーで行うものとする。 Dockerには無償のCE版と商用版のEE版があるが、今回はCE版を使用する。 リポジトリをセットアップインストールsudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm...

Docker さくらのVPS

SPAを構築したときにハマったこと

アプリケーション

概要以前、LaravelにSPAを組み込む時に考えたディレクトリ構成とnginxのconfファイルというタイトルの記事を書いたが、そこで記載したnginxのconfが不十分だったため、改めて問題点を整理、解決した。 前提 History API nginx SPAを構築したときにハマったことnginxの設定リロードしても常にindex.htmlを返すように設定する必要がある。こんな感じでtry...

Nginx SPA

DIとサービスロケーター

アプリケーション

概要DIとService Locatorの違いについてまとめる DIとは デザインパターンの一種 依存性注入 オブジェクト間の依存性を分離 オブジェクトの実行時に必要なオブジェクトが注入されるようにする テストしやすくなる DIパターンの実装DIパターン(コンストラクタインジェクション)を実装してみる。なお、DIパターンには、コンストラクタインジェクション、セッターインジェクション、メソッド...

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

シンボリックリンクとハードリンクの違い

OS

概要 シンボリックリンクとハードリンクの違いについてまとめる 前提 inode データ構造 ファイルシステム上の属性情報(作成者、グループ、作成日時など)をデータとして持つ ls -i1 /またはstat /でinode番号を確認できる シンボリックリンクとは 元のファイルまたはディレクトリのパスを参照するディレクトリエントリを追加 実験 touch a.md ln -s a.md a_s...

シンボリックリンク ハードリンク

開発環境を見直してvimライクにした

ツール

概要 開発の効率化を図り、vimを取り入れ、開発環境諸々を刷新したのでまとめておく。 各ツールの細かい設定や導入しているプラグイン詳細などは省く。  エディタ Atom 開発で使うメインエディタ vimのキーバインドを使えるようにプラグインを導入 vim-mode-plus-ex-mode vim-mode-plus 画面分割やペイン移動などもvimっぽくできるようにキーバインドを少しいじった...

tmux vim Atom iTerm

tmuxコトハジメ

ツール

概要端末多重化ソフトウェアであるtmuxのコトハジメ キーバインドtmux起動tmux or tmux new-session セッション中での新規セッション作成prefix+:new セッション一覧tmux ls セッションのデタッチ(tmuxから抜ける)prefix+d セッションのアタッチtmux attach(a) 任意のセッションにアタッチtmux attach(a) -t 0(name...

tmux

UNIXという考え方

OS

UNIXという考え方を読んだ。 UNIXについての思想と哲学を150ページという短いページにまとめてある本。 この本ではコーディングに通じる考え方も学ぶことができる。 何かの設計を考えるときに普遍的に活かせるであろう思想が書いてあるので、設計に立ち向かうときに振り返りたい内容である。 ...

UNIX

N+1問題とは

データベース

概要N+1問題の説明と対応についてまとめる。 N+1問題とは 全てのレコードの取得に1個+レコード文だけのN個のSQLを発行してしまう問題 N+1というより1+Nと解釈したほうがわかりやすい 例 一覧表示用のデータを取得するケース 一覧用の全データを取得するSELECTを1回発行(Nレコード返ってくる) Nレコードの関連データ取得のためにSELECTをN回発行 対応 join SELECT...

N+1

OSメモ

OS

概要 OS周りの勉強をしている時に調べたこと。 swap メモリが足りない時にメモリの中身をハードディスクに移す機能のこと ページキャッシュとは CPUはストレージからデータを直接読み込みができない データは一旦メモリに読み込む必要がある メモリに読み込まれたデータはページキャッシュとして再利用できる ファイル単位でアクセスする時に使用されるキャッシュ バッファキャッシュ ブロックデバイスを...

os

ダック・タイピングとは

アプリケーション

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

ダック・タイピング

ソフトウェア開発の法則

アプリケーション

概要ポステルの法則 Jon Postel 送信するものに関しては厳密に、受信するものに関しては寛容に ポステルがTCPを規定したRFC793にて記載された1節が一般化されたもの インターネットの通信における原則 パーキンソンの法則 Cyril Northcote Parkinson 第1法則  仕事の量は、完成のために与えられた時間をすべて満たすまで膨張する 第2法則 支出の額は、収入の額に...

ソフトウェア開発

ポリモーフィズムとは

アプリケーション

概要ポリモーフィズムについてまとめる ポリモーフィズムとは Poly(複数の)Morphism(形状) 複数の異なる型に対し、共有のインターフェースを提供すること 引数を受け取ったインスタンスがクラスによって違う振る舞いをすること ポリモーフィズムの種類 アドホック多相 関数が異なる型の引数に対してそれぞれ異なる実装を持つ 多重定義、関数のオーバーロードによって実現 パラメータ多相 型指定の...

ポリモーフィズム

はじめて学ぶソフトウェアのテスト技法

アプリケーション

[はじめて学ぶソフトウェアのテスト技法](https://amzn.to/3UM7CJ9を読んだ。 テストの方法について書かれている本で、ソフトウェアテストの基本パターンを学ぶことができる。 テストコードを書いたことなければ最初に読みたい一冊。 ...

テスト

Road to Vimmer

ツール

概要Vimmerになるために覚えていったコマンドを書き連ねていく。 動機 GUIエディタのショートカットには慣れたもののテキスト編集の速度が頭打ちになった気がする 脱GUIエディタ依存(GUIエディタに依存したショートカットキーを覚えることと枯れたエディタであるVIMのショートカットキーを覚えることのどちらがコスパが良いか。viはあらゆるOSの標準エディタとして搭載されている) ショートカットや矢...

vim エディタ

O(オーダー)記法とアルゴリズムの計算量の求め方

アルゴリズムとデータ構造

概要アルゴリズムの演算性能をざっくりと計算するO記法と計算量の求め方についての前提知識をまとめる。 計算量(オーダー)とは アルゴリズムの演算性能をデータ量の増加に対し、実行時間がどれくらい増加するかの割合で表した指標。 時間計算量 処理時間 空間計算量 メモリ使用量 Big O/Big θ/Big Ωそれぞれ計算時間を記述するものだが、学術的な意味の違いについてまとめる。 Big...

O記法

HTTPとSSL/TLS

ネットワーク

HTTPSとは HTTP(Hyper Transfer Protocol) over TLS(Transport Layer Security) TCPハンドシェイクの後にTLSハンドシェイクを行う 完了後、暗号通信のままHTTPリクエストとレスポンスを交換 TLSの機能TLSというプロトコルが提供する機能 機密性 ネットワーク経路上でデータの中身が見れない 完全性 通信データの改ざん...

HTTP HTTPS SSL TLS

ステートレスとステートフル

ネットワーク

前提 セッション HTTPは状態を持たないプロトコル リクエストが同一のクライアントからの通信かどうか判断しない 接続確立から切断までの一連の通信 ステートフル サーバーがクライアントのセッション状態を保持している システムが状態やデータを保持している プロトコルの例 FTP, TCP, BGP, OSPF, EIGRP, SMTP, SSH ステートレス サーバーがクライアントの...

ステートフル ステートレス セッション

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

アプリケーション

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

Laravel Vagrant VirtualBox composer homestead

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

アプリケーション

概要テストケースの基本的な種類と洗い出し方についてのざっくりまとめ。 テストの目的 バグを発見する 品質保証 品質改善(リファクタリング) テストの種類 ユニットテスト メソッドの仕様を確認するテスト ドメイン層のpublicメソッドが対象とする インテグレーションテスト ユースケース(一連の処理)に基づいたテスト ビジネス的に重要なケースを優先的に対象とする テストケースの洗い出...

テスト

Golangの開発環境を構築

アプリケーション

概要Goの環境を構築します。 Goの環境構築Goをインストールするインストール手段は省略します。私はanyenvというツールでインストールしています。 GOPATHを指定する.bashrcまたは.bash_profileにGOPATHを指定します。 export GOPATH=$HOME/localdev/project/go_dev // 好きなように設定してください PATH=$PATH:$G...

Golang

Dockerとは

インフラストラクチャ

Dockerとは Docker社が開発している、コンテナ型の仮想環境を作成、配布、実行するためのプラットフォーム Linuxのコンテナ技術を使用 コンテナは、ホストマシンのカーネルを利用し、プロセスやユーザーなどを隔離する 軽量・高速 ミドルウェアや各種環境設定をコード化して管理できる(=Infrastructure as Code) ローカル・本番環境問わず 誰でも同じ環境が作れ...

Docker 仮想環境

Golangの勉強で参考にした資料

アプリケーション

概要 golangの勉強をする時に参考にした本とリンクのまとめ。 本 プログラミング言語Go 教典 スターティングGo言語 読みやすい。わかりやすい。プログラミングの素養が高い人には平易すぎる内容かもしれない。 Go言語によるWebアプリケーション開発 Goプログラミング実践入門 標準ライブラリでゼロからWebアプリを作る リンク golang.jp A Tour of Go ast...

Golang リンク集

モダンなJSの話──Proxy

アプリケーション

※この記事はInnovator Japan Engineers’ Blogで掲載されている記事を転載したものです。 ProxyとはProxyはECMAScript 2015から追加されたオブジェクトで、オブジェクトが持つ機能をラップすることにより、オブジェクトの機能をカスタマイズすることができます。 Proxyの関連用語Proxyを知る上で必要な用語です。 handler・・・トラップを入れるため...

ES5 ES6 JavaScript

モダンなJSの話──async function

アプリケーション

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

ES5 ES6 JavaScript

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

アプリケーション

概要準備まずはHistory APIを理解しておきます。GO TO MDN。 MDN - History MDN - ブラウザの履歴を操作する 忙しい人はpushStateとwindow.popstateだけ理解しておけばなんとかなるはず。 仕様このrouterでは、以下のようなURLに対応します。 /post /post/:id /post/:id/:title クエリパラメータには対応...

ES6 JavaScript React history-api router

モダンな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...

ES5 ES6 JavaScript

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

アプリケーション

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

ES5 ES6 JavaScript React

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

アプリケーション

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

ES5 ES6 JavaScript

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

アプリケーション

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

ES5 ES6 JavaScript

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

アプリケーション

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

ES5 ES6 JavaScript

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

アプリケーション

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

ES5 ES6 JavaScript

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

アプリケーション

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

ES5 ES6 JavaScript

bmfと今年買ってよかったモノ

ポエム

※はてぶで公開していた記事を移管しました この記事は、bmfカレンダー Advent Calendar 2017 - Adventarの19日目の記事です。 2017年購入してよかったなぁというモノを振り返ってみます。 個人的にQOLが向上したなぁと思うものをピックアップしました。 Bluetooth対応イヤホンMpow Bluetooth イヤホン Bluetoothに対応したイヤホンです。 お...

Being Geek ギークであり続けるためのキャリア戦略

ビジネス

Being Geek ギークであり続けるためのキャリア戦略を読んだ。 ギークが書いている本で、タイトルもギークを含んでいるが、ギークでなくともエンジニアであれば学びを得られる本。 エンジニアとしての姿勢、考え方など語り口に少しクセはあるが、参考になる。 私がこの本が結構好きで、手元に置いておきたい1冊だったりする。 ...

キャリア

PHPカンファレンス2017で、「3年目エンジニアOSSをはじめる」というテーマでLT登壇してきました

ポエム

初登壇!2017年10月8日、PHPカンファレンス2017にて、LT初登壇してきました。 初めてのLTでPHPカンファレンスという舞台に立てて、自分としてはとても良い経験になりました。 スライドSpeaker Deck - 3年目エンジニアOSSをはじめる by bmf_san 「3年目エンジニアOSSをはじめる」というテーマで、自分のOSSプロダクトを紹介しつつ、OSSに取り組んだ背景や学び得た...

OSS PHP LT PHPカンファレンス

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

アプリケーション

概要リレーショナルなデータベースは継承をサポートをしていないので、オブジェクトの継承関係をデータベースにどのように表現するのか考慮する必要があります。それを表現する3つのパターン、単一テーブル継承・クラステーブル継承・具象クラス継承とはについて説明します。  ※各パターンの実装におけるメリット・デメリット等には触れません。 前提今回想定する登場するクラスは4つです。 Party PeopleがR...

PofEAA

さくらVPS+CentOS7.3+Ansible

インフラストラクチャ

概要AnsibleでさくらVPSの初期セットアップを自動化します。 環境 さくらVPS CentOS7.3 Ansible2.2.1.0 前提知識 さくらVPSをの初期設定の流れを理解していること。 さくらVPSの初期設定 さくらVPSにCentOS7をインストールさくらVPSのコンソール画面からOSインストール>カスタムOSインストールを選択してCentOS7をインストールしておき...

Ansible CentOS さくらのVPS Iaas

Vagrant上のMySQLで"MySQL Daemon failed to start

インフラストラクチャ

LaravelでマイグレーションやSQLファイルのインポートを繰り返したり、中断したりと無茶をやっていたらMySQLがおかしくなりました。 対応 MySQLの設定ファイルにログサイズを設定したら直りました。 innodb_log_file_size=5M 所感 無茶はやめよう! 参考 "Plugin 'InnoDB' registration as a STORAGE ...

MySQL Vagrant Tips

Vagrantを1.7.4から1.9.1に一気にアップデートしたら「Bringing up interface eth2: Device eth2 does not seem to be present, delaying initialization.」

アプリケーション

Vagrantのバージョンが1.7.4というちょっと古いバージョンだったのでアップデートしてみたらネットワーク周りでエラーがでてハマった話です。 エラー詳細 "/etc/udev/rules.d/70-persistent-net.rules" is not a file ==> default: Configuring and enabling network inte...

apache Vagrant VirtualBox Tips

VagrantでVirtualHostを使う

アプリケーション

VagrantBoxを作りっぱなしでほったらかしな仮想環境を維持してきたのですが、今更ながらVirtualHostの設定をしました。 やること vagrant-hostupdaterのインストールとVagrantfileの設定 Apacheのconfファイルの設定(VirtualHostの設定) やらないこと vagrantのインストール symbolic linkの設定とか面倒なこと 環境 ...

Vagrant

VagrantでCentOS6.7の開発環境を構築する

インフラストラクチャ

概要最近、Boxを再構築した際に、「Vagrant開発環境のワークフローをちゃんとまとめておきたい」と思ったのでまとめてみました。レポジトリにほぼ同じワークフローメモがあります。 github - bmf-san/vagrant-development-workflow 前提以下のアプリケーションがホストマシン(Mac)にインストールされていること Vagrant VirtualBox 環境ホ...

apache CentOS Vagrant

Vagrant+CentOS7.3+Ansible

インフラストラクチャ

概要AnsibleでVagrantの環境構築をする最初の一歩です。プロビジョニングができる環境を整えます。 環境 Vagrant1.9.1 CentOS7.3 Ansible2.2.1.0 CentOS7.3のVagrnat Boxを用意する任意のディレクトリ(例として今回はcentos7.3)にてVagrant環境を構築します。 vagrant box add https://atlas.ha...

Ansible CentOS Vagrant

Slack+hubot+cron(node-cron)+shell+logwatchでサーバーログを定時報告

インフラストラクチャ

以前、slackとhubotでShellScriptをSlackから実行しようという記事を書きました。さくらvps+hubot+Slackでslack botをつくる 今回は対話形式のコマンド実行ではなく、cronで定期的にShellScriptを実行、Slackに出力結果を報告しようという試みです。 意外とこの類いのコピペでパクれるリスペクトできる参考ソースが調べても出てこなかったので、途中で挫...

cron CentOS Slack さくらのVPS CoffeScript hubot logwatch shell

redux-formのサーバーサイドバリデーションでpromissをいじってたら「Uncaught (in promise) error」

アプリケーション

概要 redux-formでサーバーサイドのバリデーションを実装している時に、promissをいじってredux-formのSubmissionErrorを投げていたらUncaught (in promise) errorと怒られた話です。 解決策 returnがなかっただけでした。 修正前 class Categories extends Component { onSubmit(props...

React Redux redux-form Tips

ReactとReduxでSPAを構築するために参考にした記事

アプリケーション

雑メモです。ReactとReduxでSPAで作ろうとした時に参考にしたリポジトリや記事です。 Reduxというアーキテクチャの概念を理解するには、日本語情報がそこそこ充実していました。実際につくりたいモノの参考になりそうなソースを探すには少し手間がかかりました。js仕様の違い、コンパイラやタスクランナーなどビルド環境の違い、Reactそのもののバージョンの違い、関連パッケージのバージョンの違いなど...

React Redux SPA

Reactで複数のinputを扱うフォームを実装する

アプリケーション

Reactでフォームを実装するのはちょっと癖があります。 まずReactのフォームにはcontrolled formとuncontrolled formという2つのパターンがあることを先に理解しておくと良いかもしれません。参考:React ドキュメント 私はまだ理解が及んでいないところも多々ありますが、Reactの実装例が少ないので少しでも刺激になればという感じで記事を公開したいと思います。(もっ...

React

Reactでフォローボタンをつくってみる

アプリケーション

つくるものツ◯ッターのフォローボタンをパクったリスペクトしたものをつくります。仕様はだいたい同じだと思いますが、仕組みは異なります。クリックでフォロー/フォロー中とテキストが切り替わる、フォロー中の時にホバーした場合は解除というテキストを出す。これだけです。やや装飾にこだわって全体に無駄なCSSが設定されていますが、その辺は適宜スタイルシートを調整してください。 必要な知識 Reactの導入方法...

React

React+react-redux+react-router+ES6+webpackで作るSPAボイラープレート

アプリケーション

概要Reactで作るSPAの簡易的なボイラープレートをつくりました。最近のフロントエンドには何とかついていくだけで精一杯なため、ソースに自信はありませんが、一応形にはなっていると思いますと言い訳だけしておきます(_) 環境モジュール axios lodash react react-dom react-router react-redux redux redux-promise ビルド周り ba...

boilerplate ES6 React react-router Redux webpack

React+Reduxのディレクトリ構成検討

アプリケーション

React+Reduxをアプリケーションに導入しようとするときに、そのディレクトリ構成について悩んでいたのですが、良さ気な記事を見かけたのでまとめてみました。 A Better File Structure For React/Redux Applications Reduxの構成に従うパターンシンプルかつベタなパターンです。SPA開発ならこれが定番でしょうか。 actions/ Comm...

ES6 React Redux

React+marked+highlight

アプリケーション

wysiwygエディタではなく、マークダウンエディタをReactでつくってみました。 ソースコードの大部分はReact入門を参考にさせていただきました。 雑なgifサンプルはこちら(:3」∠) 環境 React marked(github)・・・マークダウンパーサー highlight.js(highlightjs.org)・・・シンタックスハイライト bower・・・上記全てのパッケージ管理に使...

ES6 React highlightjs markdown marked

React Tag Autocompleteを使ってサジェスト付きタグ機能を実装する

アプリケーション

タグ機能をフルスクラッチで開発しようと思っていたのですが、便利なReact Componentが沢山見つかったのでそちらを利用してみました。 環境 React Babel Browserify React Tag Autocomplete npm 導入npmでReact Tag Autocompleteを導入します。 npm install --save react-tag-autocomple...

React

PHPで学ぶデザインパターン - オブジェクト指向の基礎

アプリケーション

概要今は絶版になっているPHPによるデザインパターン入門を教科書にして、PHPでデザインパターンを学びます。(※Amazonで中古がありますが、定価の倍以上の値段が付いているようです。) 本連載で扱うコードはgithubにまとめていきます。 本来であれば、OOPの先駆けである言語でデザインパターンを学びたいところでしたが、PHP以外の言語の素養がなかったことと、PHPでデザインパターンを解説してい...

デザインパターン PHP OOP

PHPで学ぶデザインパターン - Template Method ~処理の穴埋め~

アプリケーション

Template Method パターンとは?似たような処理を枠組み(型)としてスーパークラスで定義し、より具体的な処理内容をサブクラスで実装するというパターンです。単なる継承ではなく、具体的な処理内容を抽象メソッドとして定義することで、スーパークラスのメソッドの実装を保証し、クラスの振る舞いをサブクラスによって定義させる継承を利用したパターンです。 構造AbstractClass処理の枠組みを定...

デザインパターン PHP テンプレートメソッドパターン

PHPで学ぶデザインパターン - Singleton ~いくつ作るかを制限~

アプリケーション

Singleton パターンとは?インスタンス生成のコストを制御するために、インスタンスが1つしかないことを保証するパターンです。 構造SingletonClasspriavateのコンストラクタとインスタンスを1つだけ返すstaticメソッドと自分自身のインスタンスを保持するためのstatic変数を用意するだけです。 メリットインスタンスへのアクセスを制御できるSingletonパターンが保持す...

デザインパターン PHP シングルトンパターン

PHPで学ぶデザインパターン - Adapter ~APIを変更する~

アプリケーション

Adapter パターンとは?API(互換性のないインターフェース)同士を適合させるためのパターンです。既存のコードの変更をせずに、再利用することで新しい機能を提供するというものです。再利用するコードには変更を加えないというのが特徴です。主にコードを再利用するためという後天的理由から成り立っているパターンです。(設計段階でラッパーを用意するパターンはBridgeパターンです。) 構造##Targe...

PHP アダプターパターン デザインパターン

php7をインストールした時にmysqlドライバーがなかった

インフラストラクチャ

php7をインストールした時にmysqlドライバーがなかった()php7のインストールについてはこちらを参照にしました。 CentOS6/CentOS7にPHP5.6/PHP7をyumでインストール ちなみに私の環境は・・・ さくらVPS CentOS6.7 ドライバーがないならインストールすればいいじゃないyum install yum install --enablerepo=remi...

CentOS MySQL PHP PHP7 さくらのVPS yum

Nginxをリバースプロキシとして設定する

インフラストラクチャ

Apacheで運用していたさくらVPSにNginxをリバースプロキシとして設定したのでメモします。 随分前に設定したのでうろ覚えのところもあるかもしれませんがご了承ください。 環境 さくらVPS CentOS6系 Apache2.2.15 Nginx1.8.1 あると良い(いやあったほうが良い)前提知識 Apacheのバーチャルホストの仕組み及び設定方法 おおまかに仕組みをいうと、Nginxで...

CentOS Nginx apache さくらのVPS

macにanyenvをインストールする

インフラストラクチャ

Macにanyenvをインストールする手順です。若干ハマったところがあったのでメモ。 インストール私の環境では、/usr/local/bin/に色々置いてあるので、そこにanyenvをインストールすることにします。 cd /usr/local/bingit clone https://github.com/riywo/anyenv Pathを通すexport PATH="/usr/loc...

shellscript anyenv

Letsencryptの証明書自動更新スクリプト

インフラストラクチャ

概要letsencryptの証明書を自動更新するスクリプトの紹介です。以前から作ってはいたのですが、色々と問題があったり、サーバー環境が変わったりで完全版を残せていなかったので改めてまとめました。 環境 nginx v1.12.0 ※letsencryptのインストールやshell scriptの実行方法等には触れません。 スクリプト月に一回証明書の有効期限を問わず更新し(--force-ren...

cron Let's Encrypt shellscript Slack

letsencryptの証明書自動更新(cron)とちょっとだけSlack連携

インフラストラクチャ

letsencryptの証明書自動更新(cron)とちょっとだけSlack連携 やることletsencryptの証明書を自動更新させるのを長らく忘れていたのでshellとcronで設定します。 やらないこと letsencryptのインストール・・・pythonエラーがちょっと面倒だった記憶が。。。 letsencryptのオブションの説明・・・色々あるので。。。 環境 さくらvps CentO...

cron Let's Encrypt shellscript Slack

Let'sEncryptの証明書自動更新に失敗し続けていたけど何とかした話

インフラストラクチャ

letsencryptの証明書自動更新(cron)とちょっとだけSlack連携 でかいたスクリプトは、手動で実行する場合は更新成功するのですが、cronで実行すると何故か毎回失敗するという問題作でした。 そこでスクリプトを見直し、何とか正しく動作するように改良してみました。 筆者はnginx+apacheのサーバー構成です。基本的には--webrootオプションを使って証明書発行や更新を行っていま...

cron Let's Encrypt Slack shellscript

Laravelの多対多のリレーションでテーブル名を規則から外す時

アプリケーション

多対多のリレーションを設計するときに、ドキュメント通りやっていたと思ったらちょっとした勘違いをした話です。 ここに3つのテーブルがあるじゃろ?今回のテーブル events event_tags event_tag_event←pivotテーブル 通常のテーブルは events tags tag_event って感じでデフォルトの規則通りリレーションを貼ればいいのですが、ちょっと癖のある名前...

Laravel

Laravelのフォームリクエストでバリデーションされる値をカスタマイズする

アプリケーション

概要Laravelのフォームリクエストで、バリデーションされる値をカスタマイズする方法です。APIのエンドポイントが/post/:id/deleteの時に、ルートパラメーターにフォームリクエストのバリデーションをかけたい・・なんて時に有効かもしれません。 validationDataメソッドをいじるLaravel APIにあるvalidationDataをいじります。 ルートパラメーターのidにバ...

Laravel

Laravelのデプロイツール Laravel Envoy を使ってみる

インフラストラクチャ

Capistrano, Fabric, Rocketeer, Deployer... など様々なデプロイツールがありますが、使いこなすのが結構大変。。。 もしあなたがLaravelユーザーならシンプルでカンタンに使えるデプロイツールがあります。 Laravel Envoy 一般的なデプロイツールと比較して、細々としたことはできなさそうですが、必要最低限のデプロイタスクは行えるかと思います。 導入ド...

Laravel デプロイ

Laravelのredirect('hoge')とredirect()->to('hoge')の違い

アプリケーション

些細な事ですが、気になったので調べてみました。 public function getIndex() { return redirect()->to('hoge'); } 今まで何となくこっちを使っていましたが、 public function getIndex() { return redirect('hoge'); } こっちでも問題なく動作するのでredirectヘルパーの...

Laravel

LaravelにSPAを組み込む時に考えたディレクトリ構成とnginxのconfファイル

インフラストラクチャ

概要Laravelで作っているアプリケーションに管理画面だけSPAを実装しようとした時、Laravelのディレクトリ構成とnginxのconfファイルをちょっとだけいじった話です。初めての試みだったのでメモがてらまとめました。 Laravelのディレクトリ構成バックエンドで完結するアプリをbackend-app、フロントエンドで完結するアプリをfrontend-appとし、ディレクトリを大きく分け...

Laravel React Nginx

LaravelにbowerでReactを導入してみる

アプリケーション

先日、Laravel5.3ではフロントエンドフレームワークとしてVue.jsをデフォルトとして採用するのが決定したようです。 普段、フロントエンドはjQueryで開発しているのですが、最近の流行りに乗じてReactを使ってみることにしました。LaravelならVue.jsにしとくのが無難かなと考えたのですが、Reactが今一番伸びがある(らしい)のでReactにしました。AngularJSとで迷っ...

Laravel React

Laravelでエラーメッセージを共通のテンプレートで対応する方法

アプリケーション

概要Laravelのエラーページを共通のテンプレートで対応する方法について説明します。 エラーハンドリングをカスタマイズapp/Exceptions/Handler.phpでrenderHttpExceptionメソッドをオーバーライドします。 Laravel API - Handler.php <?php namespace App\Exceptions; use Exceptio...

Laravel

LaravelでRestAPIをつくる

アプリケーション

LaravelでReactをフロントエンドのフレームワークとして採用しているのですが、APIを設計する必要がでてきたのでやってみました。 やること ResourceControllerをつくってデータを出力するだけのAPIをつくる API公開を見越した認証用ミドルウェアを実装する やらないこと Restの説明 APIデータの更新や削除 Ajaxでのデータの取得と出力 環境 Laravel5.2...

API Laravel React REST

LaravelでEventを使う

アプリケーション

ユーザー登録時や退会時など特定のイベントの時に発火させたいメソッドを管理したい時はイベントリスナーを使うと便利です。 今回は基本的なイベントとリスナーの定義の仕方についてはすっ飛ばし、一つのリスナークラスで複数のイベントを設定できるイベント購読について扱います。 環境 laravel5.2 ディレクトリ app\Events・・・イベント名=クラス名としたクラスを置く(厳密な命名規則はないです)...

Laravel

LaravelでCORS対応

アプリケーション

概要LaravelでCORS(Cross-Origin Resource Sharing)に対応する方法をまとめました。クライアントサイドはReact, axiosを使用します。前提知識としては、CORSのリクエスト形態、シンプルなリクエスト方法と、preflightを使用するリクエスト方法の違いを抑えておけば良いかと思います。RESTfulAPIの場合は基本的にはpreflightを使用するリク...

Laravel CORS

Laravelでajaxの際にCsrfTokenに引っかかった話

アプリケーション

Laravel+React+SuperagentでAjaxを実装していたら、500エラーがでて、「いやいやまさかTokenじゃないっしょ〜 そんなの知ってるもん〜」と捻くれていたら、CsrfTokenが原因でした。 解決方法ヘッダにTokenを含める方法もありますが、ハードコーディング感があるので、VerifyCsrfToken.phpで該当URLを除外する方法がスマートだと思うのでそちらを記載し...

AJAX Laravel React superagent

Laravel5.3で自作artisanコマンド.md

アプリケーション

今携わっているプロジェクトでRepositoryパターンを導入しているのですが、Repository関連のファイルを自動で生成するコマンドがあったら便利だなと思い、作ってみました。 コマンドを生成php artisan make:command Repository /CommandsにRespository.phpというコマンド用のファイルが生成されます。 コマンドファイルを編集Reposito...

Laravel リポジトリーパターン artisan

Laravel5.2にNotificationでNotificationを使う

アプリケーション

Laravel5.3がリリースされましたが、あえてLaravel5.2でNotificationを使う話です。 環境 Laravel5.2(または5.1) NotificationをインストールNotificationとはナンゾヤ? Laravel.com - NotificaionsLaravel Notification Channel Laravel5.3以前では通知の管理などはEvent...

Laravel

Laravel+React+Superagentでフォームを実装

アプリケーション

表題の通りです。Laravel+React+SuperagentでAjaxなフォームを実装します。 AjaxライブラリとしてSuperagentを採用しているのは、jQueryから脱却したいのと、jQueryのAjaxよりも分かりやすかったからです。プロミスとかいう難しい概念があるらしいですが、それは横に置いておいてもとりあえずは使えそうです。 Web標準の観点からするとFetchAPIがイケてる...

Laravel React AJAX superagent

Laravel+React+ES6+Browserify

アプリケーション

ちょっと前の記事で、bowerでReactの環境をセットアップするという話をしたのですが、npmでReactのパッケージ管理をしたほうがスマートだし、ES6かけるようになっといた方がこの先お得よねということで環境を再構築しました。 ES5からES6で書き方が色々変わるのでその辺の改修がちょっと面倒でしたが、さほど難しいことはないので気負いしなくとも良さそうです。 環境 Laravel5.2・・・5...

React JavaScript npm webpack ES6 browerify ES5

Laravel リポジトリパターンの実装

アプリケーション

DB操作に関連するスマートな実装パターンであるリポジトリパターンについてかいてみようかと思います。 リポジトリパターンとはデータの操作に関連するロジックをビジネスロジックから切り離し、抽象化したレイヤに任せることで保守や拡張性を高めるパターンです。(必ずしもDB操作のロジックのみを留めるパターンというわけではないそうです。) Laravelにリポジトリパターンを取り入れることで、 テストがしやす...

Laravel リポジトリーパターン

Google ExtenstionのPluginをつくってみた

アプリケーション

英語版のGoogleで検索したい時には、ブックマークを利用してアクセスしていたのですが、プラグインで便利にできないかなーと思い、作ってみました。 デフォルトのブックマークが非表示で、Bookolio(ブクマを見やすくするやつ)とかいうプラグインを使っているニッチな人だと多少便利なプラグインかもしれません←自分 環境 Google Chrome Javascript 仕様プラグインの種類は色々あり...

JavaScript google chrome extension

gitコマンドを楽にするシェルスクリプトをかいた

アプリケーション

概要.bashrcにgitのショートカットコマンドをつくったでgitのエイリアスコマンドをつくったのですが、中途半端だったので改良しました。 前回のエイリアスでもそこそこにgitコマンドが快適になりましたが、gitコマンドを叩く度にブランチ名をタイプしないといけない仕様は改善すべき点だと思ったので、selectを使って解決しました。 ソースgit branchの値をselectで回せばいいと思って...

Git shellscript

FormRequestのrulesメソッド内でバリデーションルールを振り分ける

アプリケーション

複数のフォームがある状況で、「フォームリクエストのクラスは一つに絞って、rulesメソッド内で分岐したい」なんて思う日があるかもしれません。(私はRest APIつくっているときにありました。) 案外同じことを考えている人がいたようで、リファレンス漁るよりも先に結果が出ました。 Multiple Forms, Multiple Requests? FormRequestのrulesメソッド内でゴニ...

Laravel

ES6のExportとImportについて

アプリケーション

ES6のexportとimportについて把握しきれていないところがあったので調べてみました。 exportの使い方 export 文は、指定したファイル (またはモジュール) から関数、オブジェクト、プリミティブをエクスポートするために使用 引用元:MDN - Export ここでいうエクスポートとは、何かを定義するという意味合いに近いかと思います。 エクスポートには2種類の方法があります。 ...

JavaScript ES6

dotEnvの環境変数をクライアントサイドでも使えるようにする - dotenv-webpack

アプリケーション

dotenv-webpackは.envファイルに用意された環境変数をクライアントサイドでも利用したい時に便利なライブラリです。 導入npm install dotenv-webpack --save-dev webpack.config.jsにpluginとして設定します。 const Dotenv = require('dotenv-webpack'); module.expo...

JavaScript npm webpack

CentOS6.7で[Errno 14] PYCURL ERROR 22 - \"The requested URL returned error: 404 Not Found\"とかいうエラーがでた

インフラストラクチャ

CentOS6.7で[Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 404 Not Found"とかいうエラーがでた zabbixを導入しようと色々試行錯誤していたら以下のようなエラーがでてyumが使えなくなりました。 http://mirror.centos.org/centos/6/SCL/x8...

CentOS os zabbix Tips

cdコマンドでディレクトリをタイピングするのが面倒くさくなってきたのでシェルスクリプトで楽をする

アプリケーション

概要cd hogehogeとかパスやらディレクトリやらタイプするのが面倒になるという怠惰っぷりを発揮してきたので、シェルスクリプトを使って少し楽できるようにしました。 ソース#!/bin/sh # cd by selecting numbers function cdSelect() { dirs=`ls -a` PS3="Select directory &g...

bash shellscript

bitflyerのprivate apiを使ってビットコイン資産状況をslackに通知する

アプリケーション

背景bitflyerが用意しているAPIをちょっと使ってみたかったので資産状況を返すAPIをたたいてみました。 ソースnodejsでAPIをたたきます。レスポンスデータは恥ずかしいので見せません。//// なおソースコードの大部分はドキュメントの例を参考にしています() var request = require('request'); var crypto = require('crypto')...

API bitcoin Node.js bitflyer

bitflyerのprivate apiを使ってビットコイン資産状況をslackに通知する Part2

アプリケーション

前回、bitflyerのAPIを叩くだけ叩いてポイーしてたので、今回はレスポンスデータを整形して資産情報データとしてslackに投げれるようにします。 とりあえずasyncで非同期処理APIを複数叩く必要があったのでasyncを使いました。エラー拾っているところは参考サイト(失念しました)を真似ています。なんだか見通しの悪いコードになってしまいました・・・ var request = requir...

bitflyer API async bitcoin Node.js

AWS(Elasticbeanstalk)のレイテンシーがやたら高いと思ったら・・・

インフラストラクチャ

AWS側の問題でした。 AWS(Elasticbeanstalk)で立ち上げたインスタンス(m4)のモニタリングをしていたら、レイテンシーがやたら高く、1分に一回くらいの頻度でタイムアウトしているユーザーがいるような状況でした。(アベレージは5秒くらいだった・・かな) アプリケーション側にネックがあるのかなぁと思ったのですが、以前テストで立ち上げたインスタンスの環境(ほぼほぼ同じ環境)よりも明らか...

Amazon Web Service Elastic Beanstalk

AnsibleでVagrant開発環境(CentOS7.3)を構築する

インフラストラクチャ

概要VagrantのCentOS7.3に開発環境をAnsibleで構築します。 環境 PHP7 Ruby Python Nginx MySQL5.7 Redis Mailcatcher 構築ベストプラクティスをある程度模倣した形のディレクトリです。 ansible/ ├── group_vars │ └── vagrant.yml ├── host ├── roles │ ├── com...

Ansible CentOS Vagrant