ユアマイスター株式会社エンジニアブログ

ユアマイスター株式会社のエンジニアが日々徒然。

cakephpクエリービルダー where,andWhere,orWhereの使い方

クエリービルダーとは

クエリービルダーは言葉通りクエリーを組み立てるもの(クラス)。

では、queryとは
簡単に言えば「条件」のこと。
クエリパラメーターも条件を指定して、リクエスト送ります。 テーブルのqueryでは、
例えばbooksテーブルからデータを取って来たい時にbooks classがある。
queryも同じようにquery objectを取得するために query classがcakePhpの中にあります。

f:id:yourmystar_engineer:20170714213002p:plain

where, orWhere, andWhere

where、orWhere、andWhereでは複数な条件を指定して、値を取得することができます。

public function findByUserIdsAndAreaGroupId(Query $query, $option) {
    $query    
        -> where(['user_id' => 1 ])
        // useridが1のもの
        ->orWhere(['user_id => 2 '])
        //もしくはuseridが2のものを取得
        ->andwhere(['area_group' => $option['area_group']]);
        //引数で渡って来たarea_groupがDBのarea_groupと一致しているもの
    return $query;

わかりづらいのはwhereメソッドとandWhereメソッド。
何が違うのか..?と思いますが、動作は、条件を置き換えるのでなく追加するという点を除いて、where() とほとんど同じです。

Mac用日本語メカニカルキーボードを使ってみた [Matias FK302-JP]

エンジニアの石川です。

「弘法筆を選ばず」なんていう言葉もありますが、いい道具を使うと仕事が捗ることもよくあります。

Matias Tactile Pro keyboard JP for Mac [Matias FK302-JP]

f:id:yourmystar_engineer:20170713101731j:plain

DIATEC|ダイヤテック株式会社 製品情報

買ってしまいました。

お値段は13,450円でした。(amazonで買いましたが結構値段が動いているようです。)

購入時の基準としては

  • メカニカルキーボードであること
    • 打鍵感がいいことに加えて、反発が強いほうがタイピングスピードが上がる
  • 日本語配列であること
    • USじゃないと馬鹿にされる風潮が有りますが、どこに行ったって大体おいてあるのは日本語です。なら遭遇率が高いほうに合わせるほうが学習コストが減ると考えています。
  • フルサイズ(テンキー付き)であること
    • 昔事務仕事をしていた関係もあり、数字を打つときはもっぱらテンキー

の3つを重視しました。

購入して使ってみた感想としては

good

  • 打鍵感は青軸より強く、はっきりしている
    • カチカチ感はかなり強く、打っていて気持ちいいです
  • 早いタイピングにも反応してくれる
    • ミスタイプはかなり減りました。底まで押し込まなくても反応してくれるので意外と力はいりません。
  • テンキーやfunctionキーも違和感のない配置
    • ほぼMac純正と同じでした
  • Macで使う場合特に設定等はいらない
    • USBで接続してすぐに使用できました。キーマップの変更等も必要ありません。
  • 適度に曲面になっている
    • 横から見るとわかりますが、少しカーブしていて非常に打ちやすいです

f:id:yourmystar_engineer:20170713104059j:plain

bad

  • うるさい
    • とにかくうるさいです。
    • ルパンのタイプライターみたいって言われました…
    • 部屋の中で自分がキーボードを打っているかどうかはっきりと分かるレベル
    • 仕事をサボっていると一発でバレます
  • 重い
    • 結構重量があるので持ち運びには適しません
  • Caps Lockキーのランプが暗い
    • 緑色のランプが付くんですが、明るい部屋ではついているかどうかわからないほど仄かな緑色が点灯します
  • 有線のみ
    • 自分はiMacで開発しているので気になりませんが、USB接続のみになります
  • うるさい
  • うるさい
  • うるさい

総評

買ってよかったんですが、メタクソうるさいです。

静かなオフィスで使えば注目の的になること間違いなしです。もちろん悪い意味で。

エンターキーを「ッターン」って打つのが好きな人は皆さん気に入る打ち心地だと思います。

ユアマイスターのエンジニアは自分を含めて2名のみです。

www.wantedly.com (CTOの星さん)

星さんからは内心ではきっと暴言を吐きながら快く使用を許可していただいています。

f:id:yourmystar_engineer:20170713105231j:plain

Macのメカニカルほしい!

けど日本語配列が良い!

って言う方は検討してみてはいかがでしょうか。

きっと普通の会社では使うのを憚られます。

メカニカルキーボードの使用を許してくれる優しいCTOの元でバリバリ働きたい方、お待ちしております。

www.wantedly.com

CakePHP での composer install と composer update の運用方法

こんにちは、ユアマイスターの星です。

f:id:yourmystar_engineer:20170707220707p:plain

composer install の意味

composer.jsonに指定したパッケージが指定したバージョンでvendorディレクトリ内にインストールされます。

例えば、"cakephp/cakephp": "~3.2"と書いていたら「3.2.0以上、4.0.0未満」の最新版がインストールされます。 バージョン指定方法の詳細は本家サイトをご確認ください。

ただし、composer.lockが存在する場合は、そのバージョンぴったりでインストールされます。(composer.lockの更新はありません)

composer update の意味

composer.jsonをもとに各ファイルを最新版にアップデートする。同時にcomposer.lockも更新されます。 主に開発環境でやることになるかと思います。

実際の運用方法

  1. ローカルで composer update -> composer.lockが更新されるのでGitにコミット&プッシュ
  2. STG環境で composer install -> composer.lockは更新されず、1.で更新したバージョンになる
  3. 本番で composer install -> composer.lockは更新されず、1.で更新したバージョンになる
  4. みんなのローカルで composer install -> composer.lockは更新されず、1.で更新したバージョンになる

だいたいこんな使い方が多いのではないかと思います。

yourmystar-engineer.hatenablog.jp

地味にCakePHP界隈で盛り上がったCakePHP 3.4.7 にバージョンアップする時にもこの方法でやりました! 検証をしながら、チームメンバーの環境も最新に保ち続けるよう、きっちりやっていきたいと思います!

以上です!

偏差値40の大学に通う私がインターンを通して学んだ簡単なスケジュールの立て方

こんにちは! エンジニアインターンの島田です! 今回は、僕がインターンを通じて学んだスケジュールの立て方についてお話ししたいと思います。  

スケジュールを立てる意味

  スケジュールをしっかりと立てると、今何をやるべきかがとても明確になります。

私は今までスケジュールを立てるのをめんどくさがっていました。

しかし、そうすると、何をやったらいいかが漠然としかわからなくて、やることの方向性が定まらなくなってしまいます。 その結果として作業効率が悪くなってしまいます。

目標を目に見えるようにしておくことで、モチベーションも上がります。

そして、何よりも遅れを取っていることに気づけなくなります!

気付いた時には手遅れということにも、、、

 

スケジュールの立て方

1.タスクの期限を決める。

当たり前の話ですが、期限を決めないと始まらないですよね。

仕事だけでなく、本を読むときや学校の課題などすべてにおいて当てはまります。  

2.必要な要素の洗い出しをする。

次に、そのタスクを達成するのに必要な要素をできるだけ細かく洗い出します。

僕はここに結構苦戦していました。

例えば、ブログで記事を二つ書くというタスクがあったとします。

最初私は、「一つ目の記事を書く」、「二つ目の記事を書く」というくらい大雑把な要素しか出せていませんでした。

ここで、何について書くか、誰に向けて書くか、タイトル、目次、各項目の内容が必要になってくると思います。

ここでそれぞれの要素に期限をつけます。

3.実行する

あとはただ実行するのみです!

4.反省する

最初はなかなか計画通りにいかないと思います。

なので、何が原因で目標を達成できなかったかを考えて、次に活かします。

 

最後に

頭ではわかっていると思いますが、なかなか行動に移せないということがあると思います。

ということで、最初は「いつまでに計画を立てるか」という計画を立ててみてはいかがでしょうか?

最後までお読みになっていただきありがとうございました!

ペルソナ

こんにちは。ユアマイスター開発インターンの小磯です。

先日新たなプロジェクトでページの改善を担当することになりまして、該当ページに訪れるユーザーをより明確にイメージするためにペルソナを選定しました。

ですので、今回はペルソナについて学んだことお伝えします!

ペルソナとは

ペルソナとはラテン語で人格を意味する単語ですが、現代のマーケティングでは違った意味で用いられています。一文で表現するとペルソナは、

サービスや製品の提供の対象となる具体的・象徴的な一人の人物像

のことです。

つまりは、会社が提供する製品を消費するであろう象徴的なユーザーを、年齢、性別、経歴、家族構成など明確にイメージすることでユーザーを一人だけ作り出すということです。

ペルソナをする意味

当然ですが製品やサービスの消費は、それぞれの製品やサービスの種類によって消費者のカテゴリーが違ってきます。

例えば、食品やキッチン用品であれば主婦として働く女性の消費が多く、カー用品では車に興味のある男性の消費が多くなると想像がつきます。

しかしこれらのイメージで得られる情報は、食品やキッチン用品に関しては"主婦"と"女性"、カー用品に関しては"車に興味がある"と"男性"しかありません。

これらをより、具体的に製品やサービスを消費する一人の人物像にすることによって、お客様の需要をより明確に捉えことができそれに準じた製品やサービスを企業が提供できるようになります。

それを可能にするのがペルソナです。

最後に

まだまだ、ペルソナを選定する方法など至らぬところがあると思いますが、参考にしていただければ幸いです。

開発インンターンの小磯でした、これにて失礼いたします。

AWS の EC2 を使ってたら CPU steal で処理がさばききれなくなった

こんばんは!ユアマイスターの星です! 本日は最近出会ったAWSに関する困難のお話です!

とある日、

Mackerelからアラートが飛んできて、どうやら処理速度が遅くなっている様子。

cpuを見ていると、

f:id:yourmystar_engineer:20170624194312p:plain

ん?なんだ??この茶色??

す、スチール。鉄?w

再起動や、プロセス数のチューニングを何度か試すも、効果なし。

そこで、色々調べて見たら、AWSのt2インスタンスでは、ある程度CPU高い状態が持続すると、

AWSの方で自動的にリソース制限をかけますよという仕様の模様。

CPU クレジットとは何ですか。

1 個の CPU クレジットは、1 台の vCPU を使用率 100% で 1 分間実行することに相当します。たとえば、1 台の vCPU を使用率 50% で 2 分間実行したり、2 台の vCPU を使用率 25% で 2 分間実行したりなど、他の vCPU、使用率、時間の組み合わせでも、1 個の CPU クレジットに相当します。

docs.aws.amazon.com

それだ!

ということで、今回はm4インスタンスへの格上げを行い、無事処理速度が遅くなっている状態を解消しました。

AWSは知らずに使っている仕様が他にもたくさんありそうなので、要研究です。。。

参考

http://blog.a4works.co.jp/archives/937

https://teratail.com/questions/29076

APIの実装ででたエラー

APIの実装後、このようなエラーが出ました。

2017-06-10 18:39:47 Warning: Headers already sent in....

エラーの原因としては、header関数によってheaderを指定しているところより前で、echoやprintなどにより標準出力されている場合に発生する様です。
header() 関数は、 通常の HTML タグまたは PHP からの出力にかかわらず、すべての実際の 出力の前にコールする必要があるそう。

PHP: header - Manual

解決するために追加しました

  1. JSON_UNESCAPED_UNICODE 日本語をunicode変換しないでjson_encodeする qiita.com

  2. ob_start(); ob_start();は標準出力自体を取得するための準備であるため、これを呼んでおくと標準出力が内部のバッファに保存されて、headerと干渉しなくなる。 qiita.com