はむはむエンジニアぶろぐ

365日エンジニアリング

雑兵MeetUp #5に参加してきた

雑兵MeetUp #5 タナボタの七夕LT大会 〜もしも願いがかなうなら引退したい〜 に参加してきました。 前回参加したのは、第3回だった。雑兵MeetUp #3に参加してきた & LTした 東京にいる雑兵の皆さん、発表の練習の場として良いので是非、参加して発表してく…

Atlassian - GuildWorks 現場トーク #2 に参加してきた

Atlassian - GuildWorks 現場トーク #2 に参加してきました。 会社の現場改善であったり技術の発展であったり文化を変えていきたいので、いい話を持ち帰るために参加した。 自分たちの現場と他の現場とのDiffを知ることが大事。 自分たちのやり方・ツールの…

.gitignoreをエイリアスコマンド一つで簡単に作れるようにした

.gitignoreの生成をアシストしてくれるツールとしてgibo というものがあります。 giboを使えば、言語やフレームワークに合わせて.gitignoreを標準出力してくれます。 なんて便利なんでしょう。 でも、2つ不満がります。 コマンド名を忘れる 標準出力するだ…

コード改善 meetup #1に行ってきた@最高だった

先日、 コード改善 meetup という新しい勉強会が開催されたので行ってきた。 概要から漂う神イベントの臭い。 本勉強会は、チームでコードの改善を進めていくにあたって工夫している点をテーマに LT発表者によるお題のもと、参加者同士で対話を行う勉強会で…

【JavaScript】テストデータの作成が簡単になるライブラリ rosie

JavaScriptでテストデータの作成が簡単になるライブラリを試してみた。 rosiejs/rosie factory for building JavaScript objects, mostly useful for setting up test data. Inspired by factory_girl Rubyのfactory_girlというライブラリに影響を受けて作ら…

【MySQL】外部キー制約のついたテーブルに対してのテスト

外部キー制約がついたテーブルを使用してテストをしたい場合、外部キー制約が邪魔をしてデータを削除できない事があります。 じゃあ、テストしづらいから制約を外す? もちろん、これは間違いです。 外部キー制約がついたテーブルに対してのアプローチは、以…

curlのよく使うオプションまとめ

curlコマンドはよく使うコマンドの一つだと思います。 よく使うのだけれども、オプションの使い方は覚えていない。 curl --help を毎回確認してしまうし、使い方これでよかったっけってググる。 自分の備忘録としてよく使うオプションをまとめておく。

Comporserのバージョン指定にdev-masterしてるけど大丈夫なの?

Comporserでライブラリをインストールをする際にバージョンを指定できます。 というより、今後も安定して使いたいのであればバージョンを指定してインストールしたほうが良いと思います。 なんでもかんでも、最新版がいいと思い込んでいる人はバージョン指定…

最強のビルドツール Makefile

Q. 最強のビルドツールは誰だ? A. Makefileです。(個人の勝手な見解です 私は、ビルドツールとしてMakefileを使っています。 ビルドだけでなくテストのラッパや便利コマンド集としても使います。 Makefileが最強だと思う理由は以下です。

HomebrewでDockerをインストールしてみた

タイトル通りです。 HomebrewでDockerをインストールしたので、まとめる。

【JavaScript】新しいプロパティの追加を禁止させる

どうも、JavaScript初心者です。 jsを書いていて、ちょっと困ったことがあったのでメモ。 宣言していないObjectのプロパティをレシーバ(使い手)側で新しく追加されるというもの。 レシーバ側が自由な使いかたをされると意図せぬバグを生むことになるので、そ…

雑兵MeetUp #3に参加してきた & LTした

雑兵MeetUp #3 に参加してLTしてきました! わいわい。 すごく良いコミュニティだと思います。 私もまだ2年目の雑兵なので、雑兵が活躍できる場が増えるといいですね。 主催のyodatomatoさん、参加者の皆さんありがとうございました。 せっかくなので私が発…

標準エラー出力を標準出力へ標準出力を標準エラー出力へ

タイトル通りですが、標準エラー出力を標準出力にしたい場合、どうしたらいいんだっけ? 標準出力を標準エラー出力にしたい場合は? ってな感じで、よくググるので自分のためにまとめておきます。

findやgrepの実行時に「許可がありません」や「Permission denied」を回避する方法

cdやlsに次いで、findやgrepは、よく使うコマンドだと思います。 そのよく使うfindやgrepの実行時に権限の問題で、「許可がありません」や「Permission denied」が大量に出力されてしまってうんざりしたことありませんか? 私は、うんざりしてたけど放置して…

DDD Alliance! ドメイン駆動設計のためのオブジェクト指向入門に参加してきた

2016年1月21日に開催されたドメイン駆動設計のためのオブジェクト指向入門に参加してきました。 その時のスライドがこちら ドメイン駆動設計のためのオブジェクト指向入門 from 増田 亨 www.slideshare.net

PHP BLT #2でLTしてきました & LT資料まとめ

PHP BLT #2というイベントに参加し、LTしてきました。 無料で会場をお貸しいただいた株式会社メルカリ様ありがとうございました。 第一回のPHP BLTに参加したかったけど、抽選に落ちたので第二回である今回に参加できて良かったです。

【SQLアンチパターン】アプリケーションのコードでSELECT * (ワイルドカード)はやめよう

アプリケーションのコードで SELECT * (ワイルドカード)としてカラム名を省略するのは、アンチパターンです。 SQLアンチパターンという名書でも紹介されています。 18章 インプリシットカラム(暗黙の列) SELECT * がダメなのは、あくまでアプリケーション側…

親クラスのフィールドへのアクセス場合は、getter/setterを使ったほうがいいと思う

他の言語は知らないけど、PHPではvisibilityが public 又は protected で宣言された親クラスのフィールドに $this でアクセスできてしまう。 public でフィールドを宣言することは、カプセル化を壊すことになるのでやらないと思うけど。 親クラスのフィール…

Whyについてコメントを書きHowについてコメントを書かない

ソースコード中のコメントは、我々を助けてくれることもあれば毒になることもある。 よかれと思ってコメントをかいたことが、後からメンテナンスする人を苦しめることにもなる。 例えばコメントの情報が誤っていたり、わかりにくい表現でコメントされている…

JavaScriptを動的に組み合わせるべきではない

例えば、このようにPHPをJavaScriptで、動的に組み立てられているコードには問題点が2つある。 <script type="text/javascript"> var hoge = '<?php echo $hoge ?>'; </script> セキュリティ面 メンテナンス面 である。

Travis CIでデバッグコードの混入を検知する

プロダクションのコードにデバッグコードを混ぜてはいけません。 コードの見通しが悪くなりますし、そのシステムを扱うユーザに見せては情報を見せてしまう可能性もあります。 それにより、システムユーザに悪用されてしまうかも知れません。 とはいえ、デバ…

Apacheの環境変数をアプリケーションから使う

Apacheで設定した環境変数を使いたいというのは、よくあると思います。 例えば、社内LANからのアクセスであればログを取得したりなど。 アプリケーション側で出来なくはない話ではありますが、アプリケーション側よりもインフラ側に寄せたほうが分離できてい…

バッチ処理について

バッチ処理について、色々調べたり経験したことをまとめておく。 オンライン処理とバッチ処理の性質の違い、 オンライン処理とバッチ処理の設計判断軸、 などを整理してみた。

メソッド名 deliverとsendの使い分け

とあるクラスのメソッド名で、何かを送るメソッド名を考えた時に、何個か候補が浮かぶと思います。 例えば、「 deliver 」とか「 send 」とかパッと思いつくと思います。 この両者の単語ですが、同じ送るという意味でも少しニュアンスが違います。 deliver …

iTerm2の起動が遅い場合の対策

この記事はzsh Advent Calendar 2015 - Qiita 21日目の記事です。 担当は@secret_hamuhamu です。 私のzshの起動が遅いので、zprofを使ったパフォーマンスチューニングのネタを投稿しようと思ってました。 しかし、プロファイリング結果、ボトルネックになっ…

【シェルスクリプト】if文をワンライナーで書く方法

シェルスクリプトで、環境構築スクリプトをかいたりしますよね? よくあるのが、dotfilesディレクトリが存在しなければ git clone する。 当然、if文使うんですけどシェルスクリプトならワンライナーで書けます。 そう、シェルスクリプトならね。

メソッド名 findByIdの「by」について

よくストレージに問い合わせるメソッド名として、findByなにがしというのが使われる。 意味はもちろん、なにがしを用いて対象データを見つけてくるというものだ。 私は、英語に疎いのだが、よくわからずにbyを使っていた。 しかし、byには こんな意味がある…

PHPUnitの便利な機能を紹介する

この記事はPHP Advent Calendar 2015 - Qiita 14日目の記事です。 担当は@secret_hamuhamu です。 みなさんは、PHPのテスティングツールに何をお使いでしょうか? Behat?PHPSpec?PHPUnit? 今日は、PHPUnitの便利な機能をいくつか紹介したいと思います。 …

2つの期間で重なる期間が存在するか判定するアルゴリズム

この記事はアルゴリズム Advent Calendar 2015 - Qiita 7日目の記事です。 担当は@secret_hamuhamu です。 私は、理系出身の人間ではなく数学もほとんどできないので、論理的に数学的に説明できていないと思います。 ですが、このような説明の仕方のほうが、…

シェルスクリプトでY又Nの入力のみ受け付ける機能を作る

コマンドを実行後に、実行しますか?[y/n] みたいなものってよく見ますよね? y又はn以外の文字を入力した場合、何度でも入力を促される。 自作シェルスクリプトを作成中にこのような機能が欲しくなりゴリゴリ書いていたら凄く汚くないコードが出来上がったw…

シェルスクリプトでC言語のfor文と同等のことをする

シェルスクリプトのfor文って他の言語にあるforeachのようなもので、回数による繰り返しではありません。 しかし、少し工夫をするとシェルスクリプトでもC言語のfor文と同等のことが出来ます。

リファクタリングコンテスト in Rubyに投稿してみた

ForkwellJobsで、リファクタリングコンテスト in Rubyというものが開催されています。 リファクタリングコンテスト in Ruby TOO あなたがリファクタリングしたコードの { Before → After } を投稿しよう! 今までにリファクタリングを行ったRubyのコードのBe…

頻出して使うテスト用のインスタンスの生成に関する話

この記事はオブジェクト指向 Advent Calendar 2015 - Qiita 1日目の記事です。 担当は@secret_hamuhamu です。 今回は、「Object Motherパターン」と「Test Data Builderパターン」についてまとめました。 これら、2つのパターンはテスト時に用いるパターン…

三項演算子を利用した代入処理のショートコードテクニック

三項演算子を活用することで、以下の様な分岐処理を含んだ代入処理を1行で書くことができます。 if (x == 0) { a = a + 2; } else { a = a + 3; }

Golangでフィボナッチ数列を実装してみた

最近、勉強会やAdvent Calendarでも大人気のGolangで、フィボナッチ数列を実装してみたので、サンプルコードを載せておく。 Golang楽しいですね。 新しいことを覚えるのは刺激になって良い。

【Git】サブコマンドを作ってみた!カレントブランチ名の変更が簡単に

Gitは、自作のサブコマンドを簡単に登録することができます。 実行パスが通っているディレクトリに git-サブコマンド名 のファイルを作成すれば、 git サブコマンド名 で呼び出すことができます。 サブコマンドのファイルに実行したい処理を記述すれば、自作…

PHPでStrategyパターンを実装してみた

GoFのデザインパターンの一つStrategyパターンをPHPで実装してみた。 Strategyとは「戦略」のことで、戦略とはアルゴリズムのことを指しています。 Strategyパターンは、アルゴリズム(振る舞い)をカプセル化し振る舞いの差替えや追加、削除をしやすくするも…

PHPのMatcherライブラリPHP Matcherを使ってみる

PHP MatcherというPHP用のマッチャーを見つけたので、使ってみた。 PHPUnitなどのテスティングツールと合わせて使うことができる。 マッチャーとは? テストの表現力を高めることができる アサーションの条件をより詳しくかける マッチャーを使うことで、複…

【PHPUnit】少し複雑な条件はassertThatを使う

PHPUnitや他のxUnit系に assertThat という少し複雑な条件を書くことができるアサーションがあります。 PHPUnitで、たまに使う assertThat を紹介してみようかなと思います。

カレントディレクトリ以下にあるファイルを対象にファイル内の文字列を置換するコマンド作ったった

カレントディレクトリ以下にあるファイルを対象に、ファイル内の文字列置換したいなんてことよくありますよね? 毎回ググって、コマンドをパイプしてごにょごにょするのも面倒くさいので、シェルスクリプトでコマンドを作りました。

【AOP】ProxyパターンとDIコンテナを使ったアスペクト指向プログラミング

ProxyパターンとDIコンテナを使うことで、アスペクト指向プログラミングを実現できます。 アスペクト指向は、オブジェクト指向で解決しにくい問題を解決しましょうというパラダイムです。 今回のアスペクト指向プログラミングの対象は、ロギングです。 言語…

PHP カンファレンス2015で、LT「PHPでDIする」を発表してきました

2000人を超えて、人たちが集まったPHPカンファレンス2015でLTをしてきました。 めちゃくちゃ楽しかったです!!スピーカーの方々、並びにスタッフの方々お疲れ様でした!! 私は、LT 兼 スッタフという立ち位置でした。 スタッフ参加したので、PHP7 Tシャツ…

PHP カンファレンスのレポートを書かせてもらいました!明日はLTするよ!【PHPカンファレンス2015前日編】

gihyo.jpさんで、PHPカンファレンス 2015のスタッフとしてレポートを書かせて頂きました。 こちらが、書いたレポート 明日開催!PHPカンファレンス2015 直前レポート 明日も、例年通り当日のセッションをレポートします!! 参加者が、現時点で2000名を超え…

Travis CI と Slackを連携させてみた

タイトル通りですが、Travis CI と Slackを連携させてみました。 連携させることで、何が嬉しいのかというとビルドの成功や失敗をレポーティングできます。 こんな感じに。 では何故、メールではなくSlackと連携するのかというとビルド失敗時に"早く気付ける…

Decoratorパターンで既存のクラスに機能追加をする

Decoratorパターンは、GoFのデザインパターンの一つです。 既存のオブジェクトに新しい機能や振る舞いを動的に追加することを可能にする。 Decoratorパターン - wikipedia 既存のクラスに対して、機能追加を行おうというものです。 ここで、重要なのが既存の…

git hookを使ってデバッグコードをコミットできないようにする

Git

Gitを使っていて、間違えてデバッグコードをコミットしてしまったことはありませんか? デバッグコードを取り除いてコミットし直すの面倒くさいですよね。 git log も汚れますし、デバッグコードがある状態にチェックアウトできてしまうという状態が健全では…

【PHP】メソッドチェーンで、記述できる バリデーションクラスChainValidatorを作った

メソッドチェーンで、記述できる記述できる バリデーションクラスChainValidatorを作ってみた。 作ったきっかけ 毎回、バリデーション書くのがめんどくさい 汎用的にバリデーションロジック部分のみ書き換えたい 自分にとって理想なバリデーション機構を目指…

PHPカンファレンス2015で、LTと当日スタッフやらせてもらいます

PHPカンファレンス2015で、LTと当日スタッフやらせてもらいます。 phpcon 2015 まだ、参加できるみたいなので、どうぞどうぞ〜。 ここまで大きいカンファレンスでLTやスタッフさせてもらうの初めてなので、楽しみです〜。 ちなみに、LTは「PHPでDIをする」っ…

.htaccessでAuth認証かけてみる

.htaccessは、Apacheの設定ファイルです。 Apacheの設定ファイルは、2種類あります。 httpd.conf (Apache全体の設定 .htaccess (ディレクトリ単位の設定 .htaccessを用いて、Auth認証をかけてみます。

【Apache】/usr/sbin/apachectl -k startでエラーが出る

Linux CentOS 7.1のApache 2.4.6を起動しようとしたところエラーが出た。 バージョン確認 $ cat /etc/redhat-release CentOS Linux release 7.1.1503 (Core) $ httpd -v Server version: Apache/2.4.6 (CentOS) Server built: Mar 12 2015 15:07:19 Apacheの…