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

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

Circle CI で PHPUnit 動かしたいと思ったら SQLSTATE[HY000] [2002] No such file or directory

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

弊社では、CIツールとして Circle CIを使っています。

導入時にうまくいかなかったポイントとその解決方法を書いておきたいと思います。

背景

Circle CIではcircle.ymlという設定ファイルで、

初期条件や実行コマンドなど様々な設定が可能になっています。

Collecting test metadata - CircleCI

テストコード環境としてCakePHPプロジェクトの中で、PHPUnitを使っているわけですが、

Circle CI でも標準サポートしており、よくあるテスト通過→デプロイの流れを作ろうとしてました。

そんな中で色々設定を進めていくと、migration実行のくだりで必ずエラーが発生した。

Exception: There was a problem connecting to the database: SQLSTATE[HY000] [2002] No such file or directory in [/home/ .....

ローカルでテスト通ってるのにそんなわけアルカイ!と思いながらDB設定情報を確認する。

DB名・・・あってる。

DBユーザー名・・・あってる。

ホスト名・・・あってる。

パスワード・・・あってる。

Circle CIの機能の Debug via SSH も使いながらMySQLへのアクセスを確認するが、普通にログインができる。

そして色々Google検索したところ、名前解決の問題っぽいと推測できました。

解決策

www.drupal.org

localhost127.0.0.1 に書き換えることでうまいこと migration も通すことができました。

ちなみに元の設定ファイルを書き換えて、実際のSTG環境に影響を与えるのが嫌だったので、

Circle CI で実行の度に書き換える形にしています。

dependencies:
    override:
        - grep -l 'localhost' config/hogehoge.php | xargs sed -i.bak -e 's/localhost/127.0.0.1/g'

気になること

Circle CI のインスタンスの中で hostsファイルを見てみても、ちゃんとlocalhost から 127.0.0.1へ名前を引けるようになっているのに、なんでCircle CI のプロセスだとうまくいかないんだろうか・・・

mixpanelライブラリの読み込み完了イベントを感知するには

こんばんは、エンジニア兼マーケッターの日高です。

mixpanelを使っていて、掲題のことについて困ったことはありませんか?

例えば、mixpanelの読み込みが完了してからPageViewイベントを発行したり、 流入元別に異なるメッセージを表示したいなどの場面に遭遇することがあるかもしれません。

この時、ライブラリの読み込みが完了していないのにも関わらず、 mixpanelイベントを発行したりすると、mixpanelとはなんぞや?と怒られてしまいます。

そういう時に、ライブラリの読み込み完了イベントを感知したくなるわけですね。

どうやって感知するのか。

mixpanelの公式リファレンスをよく読むと、初期化処理の mixpanel.init の第2引数には、読み込み完了イベントをセットすることができます。

使い方

使い方はこうです。

mixpanel.init("MY API TOKEN", { loaded : function() { alert("mixpanel load complete."); });

これでまた1歩、mixpanelマスターへ近づきましたね!

ではでは今日はこの辺で!

.bashrcとalias(エイリアス)を使って便利にスピーディーに

こんにちは!エンジニアインターンの土屋です!yourmystarで開発を始めてこんなにスピーディーに便利にできるのかと思わされる機能に出会ったり、教えてもらったりで、今日は「alias(エイリアス)」と「.bashrc」について、教えてもらった事と、調べた事をてらし合わせながら書きたいと思います。

.alias(エイリアス)とは。。。

長いコマンド名を短い名前に置き換えたり,指定するオプションをあらかじめ設定したりできます。 例えば…..

$ alias 別名='本来のコマンド'


alias cdy='cd ~/vagrant/data/yxxxx'
alias cdc='cd ~/vagrant/data/cxxxx'
alias cda='cd ~/vagrant/data/axxxx'
alias cdp='cd ~/vagrant/data/pxxxx'

このようにcdyとコマンドを打ち込んだらいちいち cd ~ と1回1回ディレクトリを移動しなくてもそこに移ってくれる便利なショートカットキーを設定できます。

alias設定の流れ

ここで「.bashrc」というものが出てきます。

そもそも.bachrcとは…..??

(ログインした後に画面上から)bashを起動したときに読み込まれる設定ファイル。 .bash_profile 内で読み込むように設定されているとログイン時にも読み込まる。
この.bashrcというファイルにaliasの設定を記述して行きます。

.bash_profile 内での .bachrc の設定
# .bash_profile
 
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

homeディレクトリに .bashrc があったら読み込むと設定しています。
.bash_profileは ターミナルが起動すると読み込まれる ものなので、そのタイミングで .bashrc も呼んでもらいます。

このような感じで設定を進めて行き、実際の開発で利用しています!
もっともっと効率よくスピーディーな開発となるよう私自身も勉強していきたいと思います。
以上、土屋でした!

CakePHPで深いAssociateを持った階層の値をDBから取得する

こんばんは!エンジニアインターンの竹本です! 今回はControllerと直接繋がっているテーブルの「ひ孫要素テーブル」という深い階層のデータをとってくる時に気にしなければいけないことについて書いていきたいと思います。

そもそもCakePHPでDBから値を持ってくるときの手順って?

以前僕がmvcフレームワークはModel→Controller→Viewの手順で画面に表示させることを説明しましたが、そもそもCakePHPのModel = データベースから値を持ってくるときの手順を知りたいですよね。今回は元々データの入ってるtableを使っていきましょう。

実際の手順

  • Table①でなんの値をとってくるかなどのメソッドを定義

  • ControllerでTable①のメソッドを呼び出す変数を定義

  • Viewで変数を呼び出し、値を表示させる

これがシンプルなデータの取り方です。ですが、今回話すのはTable①にひも付いてひも付いたTable④の値をとってくる時のポイントです。進めていきましょう。

テーブル①とテーブル②の繋げ方

ControllerでTable①と紐づけている状態で子Table②のデータをとってきたいとき、Table同士でassociateしなければいけません。

associateとはもである同士の関係を示すものでこれがないとTable②やTable③のなどのControllerとつながっていないDBからデータをとって来ることができません。

この作業をTable②とTable③&Table③とTable④で各々の関係をしめさないといけません。

associateについては以下のURLから確認ください。

アソシエーション - モデル同士を繋ぐ

Modelの中のメソッドで親子関係を定義

テーブル同士でassociateしてTable①のメソッド内でもどの手順でTable④までの到達過程を記述しなければいけません。

Table①内で

public function findXxxxxxx{
       return $query->contain([
            'table②' => [
                'Table③'=>[
                    'Table④'
                ],
    ]
    ]);
}

このようにメソッド内でTableの関係を示さなければなりません。

このメソッドをControllerでloadModelでデータベースと紐づけて、変数定義で呼び出してあげると値がとってくることができます。

あとはそれをViewで表示することで大丈夫だと思います。

まだ見ぬ君へ。

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

なんのきなしに、Googleで「エンジニア憲章」を検索してみたら、10位になってました。

競合が少ないページだと一気に上まで行けるんですね。

yourmystar-engineer.hatenablog.jp

さて、本来であれば技術的なことを書きたいところですが、それは各エンジニアに任せることにして僕はもっと柔らかい話を書いておこうと思います。

インターンで働く意味

ユアマイスターではインターとして25名以上の在籍があります。

もちろん本業となる学校や部活動などと両立をしないといけないのでフルタイムでのコミットはなかなか難しいのですが、その状況下でも大切な学生時代をユアマイスターでの経験にかけてくれている人は大勢います。

僕自身も新卒で入社した楽天には大学三年生のときに短期インターンを経験して会社のことを理解した上で就職を決めたので、やりたいことに近いかどうかの確認には役立ったと思っています。

※当時、楽天では1週間でプロデューサー業務(開発の企画、要件定義に近い)を「体験」するというものでした。

しかし、僕のやったインターンと、ユアマイスターのインターンでは違いが多くあると感じていますのでそこを少し深堀してみます。

最初の問いかけ

インターンの面談が入ると開発経験やこれまでどんな人生を過ごしてきたかという質問をして、数十分も話せばだいたいのひととなりは把握することができます。

その上で僕が必ず聞いておきたいと思っている質問としては、

「将来の夢はなんですか?」

ということです。

とはいえ学生時代に夢が固まっている人なんて実際ほとんどいないと思いますし、それが絶対条件というわけではありません。

ここで必ずしも夢を聞きたいというのが目的ではなくて、夢が見つかっていないということを自覚していてそれを見つけたいと思っているか、それに対してアクションを自発的に行っているかというのが聞きたいところです。

ある意味真っ白なキャンパスの状態である学生時代に人に言われずとも、自分の状態に課題を感じ、何かしらアクションをとるという決断ができること。

それはすばらしい素養だと考えているからです。

会社にはいると最初は言われたことを忠実に最速でこなせることが第一段階となり、少しずつ大きな責任の重い仕事が任されるようになります。

そのときに、自分から課題を見つけアクションをとる、そして最速で改善する。そのサイクルを自然に始めようとしている段階でインターンとして是非一緒に働いてみたいと感じるわけです。

インターンと振り返り面談

そんな面談を経てユアマイスターにジョインしてもらったインターンには、各チームのリーダーと定期的に振り返り面談というのを行います。

規定のフォーマットに、頑張ったこと、頑張れなかったこと、応援した人、応援された人、など振り返りを記入してもらい、最後に次タームの目標をせっていするというものです。

メンバーも増えていくなかで、各メンバーの感じている課題や成長のためのサポートをリーダーと話し合い、認識を擦り合わせるためのものではありますが

担当領域の仕事に関する個別具体的な相談から、就職活動についての相談、プライベートな悩み相談まで話題は多岐にわたります。

そのなかで印象的だったのはユアマイスターのインターンは総じて矢印が自分に向かっているということです。

なにか上手くいかなくなったときに、他人や環境のせいにして投げやりになる人はたくさんいます。

しかし、ユアマイスターのインターンは、

「どうやったら上手くいくのか」

「どうやったら成長できるのか」

「どうやったら結果が出せるのか」

にフォーカスするとき、必ず自分から変えるものという意識が働いてるといろんな人と話すなかで感じました。

そのときに僕は過去の経験から、

・なにが制約事項なのか ・タスクの洗い出しをしてあるのか ・優先順位が決まっているのか ・デッドラインはどこなのか

など一般的なプロジェクトマネージメントに沿ったアドバイスをするようにしています。

インターンと社員で違うとすれば、その経験値や効率的な進め方の部分だと思うので、少しでもインターンのみなさんの成長に繋がればと思いこっちも必死なわけです。

一連の会話をしていると不思議と「なぜユアマイスターでインターンをしているのか」に対しては課題を感じることはなく、その先の「どうやって」と「何を」という相談が多いので、マインドセットが揃った状態でインターンをしていることが実感できました。

必ずしも最短経路だけを選べるわけではない毎日ですが、ユアマイスターには創業メンバーにいろんな経験を経てきている社員がいるので、成長へのコンパスはしっかり持っている自信があります。

自分でもそのコンパスを手にいれたいと一歩踏み出したインターンが集まっているので、結果的に自分がどう変わるのかを日々考え戦う仲間がユアマイスターにはたくさんいます。

まだ見ぬ君へ。

ユアマイスターではインターンを積極的に募集しています。

ユアマイスターに少しでも興味が湧いたら是非遊びに来てください。

ここに書かれたことが本当かどうか確かめに来てください。

30分で実感してもらえる自信があります。

01intern.com

番外編*プレスリリースの投稿

初めまして、安岡と申します! 普段はマーケティングをしています。レアキャラなので今日見れた方ラッキーですね。はい。

今日は、プレスリリースという広告の一種の運用方法について、ちょこっとお話します。

プレスリリースとは

プレスリリースというのは、自社のプロモーションに使える画期的なサービスです。

無料で広告出稿できるものもたくさんあります。

どういうものかというと、プレスリリースを行っているサイトに対して、広告の原本を送り、

プレスリリース各社の記者に編集してもらった上で出稿、掲載してもらうというものです。

ローコストでウェブマーケティングをされたい方は必見のサービスとなっています。

とは言っても広告の出稿の方法やポイントがわからないですよね、

本日はいくつかポイントを整理したので、お話したいと思います。

【プレスリリース】出稿のポイント

配信先:掲載している広告の種類、コンテンツ数をみて決める

☞POINT

  1. マッチしないリリースを送り続けると記者に心のフィルターをかけられる。

  2. 自社に合った配信先を見つければ、コンスタントに出稿可能。

構成:【要約】【アピールポイント】【自社詳細情報】

☞POINT

  1. できるだけ多くの会社を見て、記者の慣れているものにする。

  2. リリース原稿は、多くても少なくてもダメ。2~3枚が適量。

タイトル:50~60 wordsで簡易的に表現!

☞POINT

  1. 目新しいものを意識!

  2. タイトルには伝えたいものだけを組み込む。限られたスペースを有効活用。

  3. 時数オーバーの場合はサブタイトルを活用して調整。

URLのポジション:上部に貼り付ける。

☞POINT

  1. URLは1つに絞る

    欲張ってはダメです!できるだけ集客率(CVR)を伸ばすために目立つ位置にURLを貼る必要性があります。

画像:3枚以上を意識。多ければ多いほどいいですよね!

☞POINT

  1. 記事の内容に深みや幅が生まれる。

  2. 言葉で伝えるには難しいような内容も画像なら一発で理解してもらうことが可能。

動画:存在するなら掲載!

☞POINT

  1. 記事のボリューム感や質の向上に直結。

信憑性:専門家の意見や統計、斬新なデータは信頼度を高めます。

無料という落とし穴:信頼度を落とす可能性あり?

☞POINT

  1. 無料だからといって軽い気持ちでテキトーな広告提出は厳禁。

  2. テキトーな文章が送られてきたら、自社の信頼度は下落する。

  3. しっかりとした文章を!

スマートフォン対応スマートフォンビュアーのために、PCだけの環境依存文字や異常なスペース、改行を避ける。

出稿日時:ユーザーが見そうな時間に設定

☞POINT

  1. 誰も起きていない深夜に送るのではなく、PV数の稼げそうな日中がねらい目!

  2. 各社によって出稿のペースが違うので、探りながら依頼をすると効果的!

  3. 以外にも平日はPV高め

設定:プレスリリース各社独自の設定があるのでチェックしてみましょう。

まとめ

出稿する側は、プレスリリース会社に対して敬意をもって出稿しましょう。

テキトーな文章が送られてきたら、記者の方も嫌気がさします。

プレスリリース成功のコツとしては、苦労を惜しまずしっかりしたコンテンツを送ること。

考え無しではなく、しっかりと自社のポイントをまとめること。

~最後に~

まだまだポイントはたくさんありますが、今日はこの辺でおいとまします。

皆さんもプレスリリースというユニークなサービスをご利用ください!

bootstrap3と4の違い

bootstrap4を使っている方はまだ少ないと思いますが、気になっている方は多いと思います。 私も気になっているので、軽く調べてみました。

主な変更点の中で気になったのは、以下の3つ。 1. グリッドの種類が4つ(xs, sm, md, lg)から、5つ(xs, sm, md, lg, xl)に増えたこと。 2. カードデザイン? 3. カスタムフォーム?

まず1、増えたxlとは一体何者なのか?公式ホームページによると、 Extra large devices (large desktops) つまり幅1200ピクセル以上のでかい画面用とのこと。 あ、これ以前のlgと変わらんやんけと気づきました。どうやら、xsより小さい方にグリッドが増えたようです。 要は、さらに小さめのスマホに対応したようです。

次に2、カードデザイン。googleのリッチカードのようなデザインが簡単に作れるようですね。 ただ、これはbootstrap3にもあったような…

最後に3、これはいいかも。svgを使って、selectやcheckboxなどのデザインを変更できるよう。 来年くらいには、オシャンティなフォームであふれているかもしれませんね。

というところで、ざっと調べたところあんまり変わらないようです。 IE8以下を切り捨てるっていうのはちょっと大きいかもしれませんが、 そんなに思ったほど変わってはいないようで、焦っていこうする必要は今のところなさそうです。