読者です 読者をやめる 読者になる 読者になる

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

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

妙技 .つなぎ(cakephp)

みなさんこんにちは!エンジニアインターン奮闘中の竹本です。 今日はみなさんに大切なお知らせがあります。なんと私タケモトは五月でユアマイスター株式会社をやめることになりました。寿退社です照 というのは嘘でございまして、自分の将来の為に海外で修行してこようと思い退社することとなりました。 このブログ担当も残り3回となりました(6月1日は更新予定)。では本日も行きましょう!竹本のエンジニアブログ!

前回の続き

みなさん、前回の竹本ブログの内容を覚えていらっしゃいますかね?ー覚えてるわけないですよね。。 ざっと復習するとcakePHPで親・子・孫テーブルが混在する状況で親テーブルに保存して、アソシエイトすることで孫テーブルまで保存する方法を紹介しました。詳しくは下記のブログをご覧ください。

http://yourmystar-engineer.hatenablog.jp/entry/2017/05/07/234055

結局僕は親テーブルを保存した後で、もう一度子テーブルで保存するという作業をコードとして記述するという結論に至ったのですが。。。

.つなぎ

ドットつなぎです! これはどう行いますかというとnewEntityでデータを保存する場合

$parent ->$this->ParentsTable->newEntity([
    第一引数,
    [
        'associated' =>[
            'ChilidTable',
            'ChildTable.GrandChildTable'
                                  ] 
    ]
]);

この後、孫テーブル独自でレコードを記録する処理を行う

$grandChild -> $this->Child->GrandChild->newEntity([
    'type' => $otherChild->otherGrandChild->type
]);

.つなぎをすれば確実にいけます

ちなみに今回とても参考にさせてもらったサイトがありますので、是非皆さんもご覧ださい!

qiita.com

以上、今週の竹本ブログでした!

smoochに代わるチャット接客ツールを求めて(with slack)

こんばんは、マーケターの日高です。

弊社サービスサイトでは、smoochというサービスを使って、 お客様からのお問い合わせにチャットで対応しています。

このsmooch、ある程度は無料で使えるんですが、 一定量を越えると有料プランに切り替えないと使えなくなってしまいます。

無料でもっと使えるツールはないかと探していたところ、 Smallchatなるものを発見したので試しに使ってみます。

導入

1. まずはSmallchatの公式サイトに飛び、AddToSlackをクリックします。

(ここでは、Slackを導入済み前提とします。) small.chat

f:id:yourmystar_engineer:20170509212222j:plain

2. Channelを作る

赤枠にチャネル名(適当)を入力し、Create Channelをクリックします。 f:id:yourmystar_engineer:20170509212402j:plain

3. スクリプトタグを取得

チャネルを作成すると、スクリプトタグが発行されるので、 これをコピーします。 f:id:yourmystar_engineer:20170509212616j:plain

4. HTML作成

先ほどコピーしたスクリプトタグをHTMLに貼り付けます。 f:id:yourmystar_engineer:20170509212720j:plain

5. 見てみる

出来上がったHTMLをサーバーにアップしてみました。 もう使えそうです。試しにメッセージを打ち込んでみました。

f:id:yourmystar_engineer:20170509212935j:plain

するとslack上に通知が来ます。 f:id:yourmystar_engineer:20170509213033j:plain

英語表記などを変えられれば、弊社サービスサイトで利用できそうです。 その辺りの細かい設定はもっと調べてみる必要がありそうです。

感想

slack連携周りの細かい画面は省きましたが、急げば5分でできるくらいの内容でした。 これだけ簡単にできたのにはびっくり。 smoochはとてもじゃないが5分じゃできませんでした。

どこまで無料でいけるのか?日本語化できるのか?など課題はまだまだありますが、 それはまた次回!お楽しみに。

ではでは。

GitHubのPull RequestのMergeボタンの権限管理設定をしたい

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

GitHubを使う中で、痒いところに手が届くなあという思いをしたので、ブログにしておきます。

弊社の開発フロー

yourmystar-engineer.hatenablog.jp

以前のブログ記事で紹介したように、弊社では検証環境用のブランチと本番環境用のブランチに対しては、

必ずPull Request経由でのマージをルール化しています。

各エンジニアが開発を終えたものを、個別ブランチからdevelopブランチへPull Requestを作って、

Mergeすることでフローを進めていくのですが、誰でもMergeボタンが押せてしまうと、

developブランチへ間違ったコミットも紛れ込んでしまうという事件が頻発しました。

個人の意識や手順で防ぐというのは完全ではないため、しっかり権限管理をしようと思い立ったわけです。

やりたいこと

  • feature1ブランチ→ feature2ブランチへのPull RequestのMergeは各エンジニアで自由にやりたい
  • feature1ブランチ→ developブランチへのPull RequestのMergeは特定のエンジニアだけができるようにしたい
  • developブランチへのForce Pushは防ぎたい

これ、簡単にできちゃいました。そう、GitHubならね。

設定の仕方

1. 設定画面を開く

https://github.com/{Organization name}/{Repository Name}/settings/branches

2. Force Pushできないようにするのと、Mergeできる人を選んで設定する

f:id:yourmystar_engineer:20170508112105p:plain

それでは、今日はこの辺で!

sequel proにssh接続できない

こんにちは!エンジニアインターンの土屋です。
実際に開発を行っていてデータベースの中身を確認したい
データベースを確認する上でsequel proを起動!!!
しかしこんなエラーが出ました。。

Used command:  /usr/bin/ssh -v -N -S none -o ControlMaster=no -o ExitOnForwardFailure=yes -o ConnectTimeout=10 -o NumberOfPasswordPrompts=3 -o TCPKeepAlive=no -o ServerAliveInterval=60 -o ServerAliveCountMax=1 -p 2222 vagrant@127.0.0.1 -L 60637:127.0.0.1:3306 -L 60638:127.0.0.1:3306
OpenSSH_7.3p1, LibreSSL 2.4.1
debug1: Reading configuration data /Users/hitomi/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 20: Applying options for *
debug1: Control socket " none" does not exist
debug1: Connecting to 127.0.0.1 [127.0.0.1] port 2222.
debug1: fd 3 clearing O_NONBLOCK
debug1: Connection established.
debug1: identity file /Users/hitomi/.ssh/id_rsa type 1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/hitomi/.ssh/id_rsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/hitomi/.ssh/id_dsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/hitomi/.ssh/id_dsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/hitomi/.ssh/id_ecdsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/hitomi/.ssh/id_ecdsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/hitomi/.ssh/id_ed25519 type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/hitomi/.ssh/id_ed25519-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.3
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH_5* compat 0x0c000000
debug1: Authenticating to 127.0.0.1:2222 as 'vagrant'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: diffie-hellman-group-exchange-sha256
debug1: kex: host key algorithm: ssh-rsa
debug1: kex: server->client cipher: aes128-ctr MAC: umac-64@openssh.com compression: none
debug1: kex: client->server cipher: aes128-ctr MAC: umac-64@openssh.com compression: none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(2048<3072<8192) sent
debug1: got SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: got SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Server host key: ssh-rsa SHA256:+eim1bbdg8jyWWvJBTjqwWQqLQoKbQliAcIrEdgjCEo
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
SHA256:+eim1bbdg8jyWWvJBTjqwWQqLQoKbQliAcIrEdgjCEo.
Please contact your system administrator.
Add correct host key in /Users/hitomi/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /Users/hitomi/.ssh/known_hosts:2
RSA host key for [127.0.0.1]:2222 has changed and you have requested strict checking.
Host key verification failed.

SSH接続時には、以前保存したこの情報と、いままさに接続しようとしているサーバの情報が一致しているかを確認する。それによりユーザが知らない間に、別のサーバへ接続してしまうことを防ぐ。

原因として、今回まさにssh接続しようとした情報が一致しなかったためにおきました。

qiita.com

vi ~/.ssh/known_hostsknown_hosts を開き

エラーとなったサーバ名(またはIPアドレス)から始まる行を削除して上げることで解消できました!

孫テーブルに保存できない......

どうもエンジニアインターン生の竹本です!みなさんGWはどこかに出かけられましたでしょうか?今年はほんとお天気が良くて、どこか出かけるにはうってつけの連休でしたね! そんな中僕は一日だけ帰省して、それ以外はインターンをするくらい弊社が好きです。 最近ではエンジニアインターン生だけのプロジェクトもスタートしてますます今後の展開が気になりますね! では今週も行きましょう!竹本のエンジニアブログ〜

最近の問題

今僕が取り掛かっている課題はあるデータをAというテーブルのレコードに入れて保存するというものなんですが、、エラーは吐き出さないし次の画面に進めるんだけどAの中にデータが入ってくれない。。 そこにはいくつかの条件がありまして * 親テーブル、子テーブル、孫テーブルが存在 * Aテーブルは孫に相当 * データをsaveするときは親テーブルの変数を使って保存

これがなにやらデータが入ってくれない原因みたいです。。

竹本の戦記

僕が行ったのが 1. とりあえずnewEntityで入れてみた =>データが入らず。。。 2. リレーションがしっかりできていない? =>newEntityでデータを入れる際にassociateをしてみた

データの保存

=>結果はデータ入らず。。。。 3. 親テーブルで保存したあとに子テーブルの変数として再保存処理を行う =>データが入った!イエイ!

cake…..

結果、上司に助けられながらもデータを保存することはできました。cakeの機能的に保存のactionは「親テーブル」までしかリレーションができないみたいですね。親での保存が終わった後に、子テーブルとリレーションをしっかりと繋げて保存しましょう

Macで文字化けに立ち向かう

、ウ、ヒ、チ、マ。「・讌「・゙・、・ケ・ソ。シ・ィ・ク・ヒ・「、ヌ、ケ。」
GWコヌスェニヌ、ケ、ャ、、、ォ、ャ、ェイ皃エ、キ、ヌ、キ、遉ヲ、ォ。」

あ、すみません、これ文字エンコード違いましたね。

スタバでフラペチーノ買って優雅にMacで仕事をしているとこういうことがよくあります。

上司「前回の議事録をtxtファイルにしてメールで送っておいたから、確認しておいて〜」

自分「agreeです」

なになに…メールを見ると添付ファイルがついてる。

finderからダブルクリックして開こう。

f:id:yourmystar_engineer:20170507093426p:plain

自分「は?」

Windowsユーザの上司や取引先とのやり取りで往々にしてこういう問題が起きるわけです。

そんな時の解決策は3つ!

  1. 「すいませぇ〜ん!なんか読めないんですけどぉ〜!!」と上司に報告
  2. 「はい!確認しました!」と読んだことにしておく
  3. 華麗に文字エンコードを変換して読む

1と2を選んだあなたはきっとこれからも仕事で苦労をすることでしょう。がんばってください。

3を選んだあなたのために以下の秘技を授けます。

0. Homebrewをインストール

詳しくは割愛 qiita.com

1.viで読む!

最初にTerminalを起動して、対象のファイルの在処までなんとかたどり着きます。

「Terminal 起動方法」でググってください。

きっとエンジニアブログを読む人は使いこなしていると思いますが。

その後、viで対象ファイルを開きます

$vi test.txt

f:id:yourmystar_engineer:20170507094758p:plain

出たな!文字化けめ!

では、vi上で文字コードを変換してみましょう。

MacではデフォルトエンコードUTFー8となっているので :e ++enc=sjis と打ってエンターしてみると…

f:id:yourmystar_engineer:20170507095003p:plain

また化けた…

:e ++enc=sjis で「現在の文字エンコード設定をSJISに切り替える」という意味なんですが、どうにもだめっぽいです。

今度は:e ++enc=euc-jpと打ってエンターしてみましょう!

f:id:yourmystar_engineer:20170507095320p:plain

読めた!!!

これで無事に添付ファイルの内容が確認できましたね!

2. NKFで変換する

NKFをかまさないで普通にcatすると…

f:id:yourmystar_engineer:20170507095724p:plain

悲しくなります。

まずはHomebrewでNKFをインストールしましょう。

brew install nkfでインストールできます。

NKFは文字エンコードを変換してくれるパッケージです。

インストールしたら対象のファイルのあるディレクトリで

$cat test.txt | nkf -wと入力してエンターすると…

f:id:yourmystar_engineer:20170507095839p:plain

出ました!ちゃんと読めてますね!

cat test.txtでファイルの内容をTerminal上に出力し、|(パイプ)でそれをNKFに渡しています。

nkf -wで渡された入力をUTF-8に変換して出力しています。

$cat test.txt | nkf -w > ~/Desktop/test_encoded.txtとやればDesktop上に変換後のファイルを出力することもできますよ!

みなさんもMacを使いこなして優雅なビジネスライフを送りましょう!

私はフラペチーノは嫌いです!

mixpanelでLTVを測ろう

こんにちは、マーケターの日高です。 弊社でも利用しているmixpanelに、LTVの測定機能がついているのはご存知ですか?

私は今まで、その存在自体は知っていたものの、利用したことはありませんでした。 今回、弊社サービスにおいて利用することになったので、その測定方法をメモしておきたいと思います。

必要なコード

必要なコードそのものは、以下のtrack_chargeなんですが、

mixpanel.track_charge(金額);

気をつけることが2つあります。

1つ目

track_charge前に、identify()を呼ぶこと。

2つ目

track_charge()に渡した引数(数値)がドルで記録されること。 track_charge(1)なら1ドル購入といった具合です。 通貨はドル固定で、日本円は指定できません。

というところで、サンプルコードは以下の通り

mixpanel.identify(user_id);
mixpanel.people.track_charge(100);

以上です。 ではまた次の機会に!