いけむランド

はてダからやってきました

「グロースハッカー」を読んだ

実は昨年の誕生日プレゼントでいただいてから、申し訳ないことに積ん読になってたのをようやく読むことができた。

グロースハッカー

グロースハッカー

従来のマーケティングとは違うんだよ!的な話かと思ったら、エンジニアからの手法全部がある意味グロースハックなんだよ!ってことになってて、なるほどなあと思った。

イケてる入力フォーム

もう、おっさんなのでいろいろつらい。
ということでカミさんが「イミダペプチドがいいらしいよ」という話から購入することになった。

んで、web でユーザ登録して購入するかと思ったら、入力フォームがイケてた。


www.imida.jp


ソースを読んでみると、通販システムの会社のものらしい。


リピート通販システムならたまごリピート(旧:たまごカート)定期購入専用ECネット通販システムASP、ショッピングカート、ステップメールシステム


このシステムを導入している他の会社のフォームも同じような感じだった。


https://rachelwine.com/account/my_page_loginrachelwine.com


こういうのをつくれるようになりたいですね。

xezat - complement of cygport

cygport や CYGWIN-PATCHES/README をいい感じに生成したり、パッケージに変なデータが残ってないかとか調べたりするやつを書いてみた。

gem も勉強がてらにつくってみた。

README.md が欲しいという奇特な issue が発行されていたため、書いたよと返事したら即効でハイテンションな返事とともに close されたのはワロタ。


ちなみに名前の意味は特になく、単に響きがかっこいいからという理由からです。

定義されているシェル変数をやさしく出力してみる

以前 qiita で公開していた記事を引っ越してきたものです。最終更新からかなり経っているため、情報の正確性は落ちている可能性があります。

bash で定義されているすべての shell variable を普通に declare で出力させると配列の場合の parse がかなり面倒であると感じたため、配列の場合は要素毎に別の変数のように表示させる declare を書いてみました。

gist.github.com

$ ./declare.sh
:
:
BASH=/bin/bash
BASH_COMMAND=echo $var=${!var}
BASH_LINENO[0]=0
BASH_SOURCE[0]=./declare.sh
BASH_SUBSHELL=0
BASH_VERSINFO[0]=3
BASH_VERSINFO[1]=2
BASH_VERSINFO[2]=53
BASH_VERSINFO[3]=1
BASH_VERSINFO[4]=release
BASH_VERSINFO[5]=x86_64-apple-darwin14
BASH_VERSION=3.2.53(1)-release
:
:

おそらく応用すれば yaml にしたりもできそうです。

2014 年まとめ

今年の頭に部署異動をして、本当に何もないところからひとつのサービスの開始〜運用を中心になって携わることができたのは本当に良い経験でした。

というわけで今年はある意味、つくることに没頭できた感はあるため、来年はそれを上手く他人に引き継いだり、他のメンバが開発を効率よく進められる環境づくりの方に注力していきたいかなと思います。

というのももうエンジニアとしては定年なので、一人じゃ無理だよなあと感じてて、そろそろ若い人に楽しい仕事をしてもらって、自分は後ろから支えてあげる方が求められるんだろうなと思ってきてるのもあったりします。


ボジョレーヌーボー的に言うと、Laravel や AWS などの新しい技術に触り、学ぶ機会もたくさん得られたり、マネジメントの機会もあったため「ここ数年で最高」と言えると思います。

来年も必死に生きてるいけむらさんをよろしくお願いいたします。

EB CLI 3.x を触ってみた

以前 qiita で公開していた記事を引っ越してきたものです。最終更新からかなり経っているため、情報の正確性は落ちている可能性があります。

はじめに

EB CLI の勉強をためにいろいろググってたら、いつの間にか EB CLI 3.x があることに気づいたので、ちょっと触ってみました。

日本語の資料がまだあんまりないっぽいためにさっくりと書いた mac での作業メモです。

ちなみに ubuntu でもだいたい一緒でした。

インストール

docs.aws.amazon.com

brewでインストールされるのは 2.x 系列のようです。

$ brew install aws-elasticbeanstalk

3.x 系列を入れるには pip を使うようです。

$ brew install python
$ pip install awsebcli
$ eb --version
EB CLI 3.0.10 (Python 2.7.9)

セットアップ

docs.aws.amazon.com

2.x と同じような感じです。

2.x との違い

あんまり 2.x を使いつくしてないため、それ違うんじゃね?というのもありそうですが、さっくり列挙。

config

2.x だと .elasticbeanstalk/config をいじって eb update していましたが、3.x だと eb config で EDITOR が起動して yaml をいじるようになったようです。

そして 3.x の方は .elasticbeanstalk/config に環境の情報が残らないっぽいように見えます。

deploy

2.x だと git aws.push していましたが、3.x だと eb deploy でするみたいです。

git aws.push は aws の git の end point に push 後にそちらで s3 に zip 化しておくみたいな挙動に見えましたが、eb deploygit archive するようなメッセージが出ていました。

おわりに

そもそも同一アプリ内の複数の環境の設定を全部 .elasticbeanstalk/config に置けないっぽくて、3.x 系列ならできるのかな?と思って調べてましたが、やっぱりできないようですね。

Connection を切り替えて Relation の loading をしたかった時の話

以前 qiita で公開していた記事を引っ越してきたものです。最終更新からかなり経っているため、情報の正確性は落ちている可能性があります。

はじめに

そろそろ laravel 歴 1 年になりそうながら、まだまだ使いこなせていない @fd0 です。

今回は database 周りのとある処理で 2~3 日悩んだ時のことを書いてみたいと思います。

コードを追いきれていないため、もしかしたら、もっと簡単に解決する方法 or そもそもやり方が良くないかもしれませんので、その場合はコメントなどでツッコミをいただければと思います。

やりたかったこと

やりたかったことは単純に「とあるアクション内で slave に繋ぎたかった」だけなのですが、どうも Eloquent 経由で思ったとおりにいってくれませんでした。

最初は以下のようなコードを Controller で書いていました。

// default は master
$model
  ->setConnection('slave')
  ->where('foo', $value)
  ->with(['bar' => function ($q) { $q->where('baz'); } ])
  ->get();

ところがこれですと $model は slave を参照しますが、bar は master を参照してしまいました。

¥Illuminate¥Database¥Eloquent¥Model あたりを読んでみても、Relation に $this を渡してるように見えるため、何故動いてくれないのかさっぱりでした。

with ではなくて load かなと思っていろいろ試行錯誤してみましたが、やはり slave を参照してくれません。var_dump すると connection は slave になっているため、既に作成されている master の connection を使っているのかなと思いましたが、よくわかりません。

Eloquent を諦めて DB::connection('slave') で解決しようかと思ったのですが、そうなると取得結果を Illuminate¥Database¥Eloquent¥Collection として処理している部分を書き換えないといけないため、それはそれで面倒だなあと思ってしまいました。

そうやって 2~3 日過ぎていった後にようやくできるようになりました。

やってみたこと

とあるアクションの route だけ database の設定を config で上書きすることでやりたいことを実現することができました。

// filter.php
Route::filter('db.slave', function()
{
  Config::set('database.default', 'slave');
});
// route.php
Route::group(['before' => 'db.slave'], function()
{
  Route::get('/', 'HogeController@actionGununu');
});

slave を参照しているかどうかは DB::connection('slave')->getQueryLog() で確認しました。

おわりに

同じことで困ってる人はいないのかとググッてみても全然見つからなかったので、まとめてみましたが、もしかしたら誰も困ってないのかもしれません...。(;^ω^)

あと、issues に関係ありそうな感じの Request がありましたが close されてました。

github.com