信頼はずっと、挑戦はもっと。

お問い合わせ
TEL:03-3496-3888

BLOG コアテックの社員ブログ (毎週月曜~金曜更新中)

LIST OF ARTICLES

記事一覧

  • テクログ

    個人的に考えるWEBサービス作成で技術的に重要だと思う要素はURLの扱いです

    URLを管理する機能が最も重要かなと思っています。 たとえば、アプリケーションのURLを管理するクラスさえあれば、パンくず、ページネーション、SQL生成の前処理、View切り替え、SEO対策、などの処理が複雑にならずに済むと感じるからです。 ルーティングの機能に各URLセグメントに名前付けが可能であれば、何かしらのID、何かしらの日付、などをセグメントの順番に関係せずに取得できますので、新たに使用するWEBフレームワークにそういった機能が無いかのチェックはしたいところです。  FuelPHPでは、routes.phpにこう書きます。正規表現を利用して数値のみを許可しています。 Controller で取得するときはこんな感じです。 debug::dumpで出力した画面です。 このブログはPythonでDjangoを使用して作成されていますが、上記と同様にセグメントに名前指定をしています。もしかすると、一般的なWEBフレームワークには備わっている機能なのかもしれません。
  • テクログ

    ブラウザテストフレームワークの5月でした

    ブラウザテストフレームワーク、使ってますか!単体テストもいいけど、やっぱりユーザが使って実際ちゃんと動作してるの?ってのが気になりますよね。最近はjsでいろいろやることも多いし、関連するところが動かなくなったり。(jsの単体テストやれって話もありますが)で、有償無償問わず、いろいろと見てみました。結構網羅したり、試したりするだけでもそれなりにかかったので、なんとなく一覧的に。・いわゆるツールでの自動テスト系teststudioRanorexAutifyTestCompleteUnified Functional TestingROBOWAREuipathkatalon studioimacros・いわゆるブラウザテストフレームワーク(E2Eテスト用)Seleniumを直使用CodeceptionCodeceptJSNightwatch.jsWebdriverIOScrapywatirAppiumSelenideGebおよびSpockCapybaraSplinterCasperJSSST (selenium-simple-test)重要視した点としては、パッとつくれて、パッと動かせる。なんだこれ、どうやるんだ、みたいなのはなし。……ということで、有償の自動テストツール系について、可能なものは体験版を入れてちょっと動かしたりしました。「ちょっと」なのはあえてちょっとだけやって、それでもできないのならば簡単じゃない!ということでした。もちろんデモや動画をみてると、「なんかすごいことやってるし、なんでもできそう…」となりますし、実際理解すればなんでもできるのかもしれません。でも少しだけいじっただけでは全く思ったとおりに動かないんですよね。というわけでツール系はなくなり、ブラウザテストフレームワークの検証となりました。テストコード書かないといけない、というのは確かに手軽とはいえないですが、サンプルがあればあとはその改良をつづけていけばなんとかなる、という思惑です。現状のサポート具合、活発さ、書きやすさ…などからCodeceptionCodeceptJSが残り、mac,PCでのブラウザテストはクリア。実機もやりたい、ということでAppium連携をしたり…ということをやっていましたよ。実機動作は結構コツが必要だったり、iPhoneだとやりたいことがどうしてもできない部分があったり…となりましたが、それ以外は結構思ったとおりのテストができましたので、毎回確認しないといけない動作がある、とか、そういった場合には役に立つのではないでしょうか。一個小ネタでいえば、テストをAWS Lambdaに連携させて、外への影響を確認したりする、ということもやってみました。純粋なE2Eテストの範疇からは外れるかとは思いますが、やはりどうしても確認したい内容もありますので、そういうものもいかがでしょう。ちなみに最終的に残ったのはCodeceptJS+Appiumでした!(以下イメージ画像
  • テクログ

    Deployerでも動的にデプロイするホストを変更したい!

    ↑ってなりますよね?なるなるーホストが固定だと、deploy.phpにホストを書いて終わり、ってなるんですけど、AWSなどで今動いてるホストがコロコロ変わるとしたらdeploy.phpには固定で書けないですね。うーんこまったどうしよう。そんなときはこれ!hosts.yml〜くわしくはこちら!https://deployer.org/docs/hosts.htmlhosts.ymlにしたがってデプロイするよってしておけば、hosts.ymlを事前に生成すれば動的にできるんだ!(deploy.phpには inventory('hosts.yml');って書けば使われるよ。まあリンク先↑に書いてある。)なんだって!すごいね!はいソース の 例。pythonのほうが楽なんだけどいじりやすいようにphpにしましたですよ?雛形(SOURCE_hosts.yml)をつくっておいて、それのIPとインスタンスIDをリプレースしてるっす。わかるっすよね。雛形はじぶんでつくってね!(リンク先参照とかテストとかして)対象EC2はタグで絞り込んだりとかもしてます。これを使ってなにかあっても責任は全く取れませんなので十分に検証してね!hosts.yml生成するだけですけど。これをjenkinsに呼ばせるなら、失敗時はexit(1);とかすれば進まないのでは。ではいいかんじのDeployerライフを。<?php require 'aws_v3.phar'; use Aws\Ec2\Ec2Client as Ec2Client; use Aws\Exception\AwsException; echo 'generate_autoscale_yml START' . PHP_EOL . PHP_EOL; /**設定箇所 開始**/ //認証情報 $auth = [         "key"   => "ああああ",         "secret" => "いいいい",         "region" => "ap-northeast-1",         "version" => "2016-11-15", ]; //タグ、AutoScaleGroupの値 $AutoScaleGroup_value = 'もがもが'; //hosts.ymlの雛形となるものを読んでおく $source_hosts_yml_string = file_get_contents('./SOURCE_hosts.yml', FILE_USE_INCLUDE_PATH); //結果ファイル名 $hosts_yml_filename = './hosts.yml'; /**設定箇所 終了**/ //hosts.ymlに結果として書き出す文字列の殻 $hosts_yml_string = ''; try{     //動いている(running)、タグが該当のインスタンスを取得     $ec2client = Ec2Client::factory($auth);     $result = $ec2client->describeInstances([             'Filters' => [                     [                             'Name' => 'tag:AutoScaleGroup',                             'Values' => [$AutoScaleGroup_value],                     ],                     [                             'Name' => 'instance-state-name',                             'Values' => ['running'],                     ],             ],             'MaxResults' => 100,     ]);     //値の分解と使用     $reservations = $result['Reservations'];     foreach ($reservations as $reservation) {         $instances = $reservation['Instances'];         foreach ($instances as $instance) {             //もととなる文字のコピー             $mod_hosts_yml_string = $source_hosts_yml_string;             //置き換えに使う文字             $InstanceId = $instance['InstanceId'];             $publicip   = '';             foreach ($instance['NetworkInterfaces'] as $networkinterface) {                 $publicip = $networkinterface['Association']['PublicIp'];             }             //[INSTANCE_ID]と[PUBLIC_IP_ADDRESS]を置き換え             $mod_hosts_yml_string = str_replace('[INSTANCE_ID]', $InstanceId, $mod_hosts_yml_string);             $mod_hosts_yml_string = str_replace('[PUBLIC_IP_ADDRESS]', $publicip, $mod_hosts_yml_string);             $hosts_yml_string .= $mod_hosts_yml_string;         }     }     //書き込み     file_put_contents($hosts_yml_filename, $hosts_yml_string); } catch(AwsException $e){     var_dump($e->getMessage());     echo 'ERROR' . PHP_EOL . PHP_EOL; } echo 'generate_autoscale_yml END' . PHP_EOL . PHP_EOL;
  • テクログ

    FuelPHPならvar_dump()よりDebug::dump()のが便利ですよ!

     PHPでデバッグするとき標準のvar_dump関数を使う場合があるかと思います。しかしxdebugをインストールしなければ綺麗に表示されないのでちょっと不便です。例えば下のような変数があったとして、 これをxdebug無しでvar_dumpするとこんな感じになります。 FuelPHPに標準で備わっているDebugクラスのdumpメソッドを使うと綺麗に表示されて見やすいです。使用するときは「Debug::dump($hoge)」で使用します。 どのファイルで何行目かも表示されていて見やすいですね。以外と知らない人は多いのではないのでしょうか。自分も先輩社員が使っているのを見て初めて存在を知りました。そう考えると便利なものを使っている様子を周りに見せつけるのも大切なことなのかもしれませんね。
  • テクログ

    男心をくすぐる演算子

    ついこの間、以下のようなコードを見かけたのですが、$sample = $_GET['test'] ?? null;あれ、この書き方ってなんていうやつだったっけと思い聞いたところ、「Null合体演算子」ということがわかりました。そうそうそのなんかカッコいい名前のやつだと思い、公式サイトで見てみることに。(公式サイトより抜粋)なるほど、isset等で書くよりも簡略化できていいかも、!と思っていたところ、ふとページの下の方を見ると...う、宇宙船.....!!!なんですかその男心をくすぐるような名前は、!カッコいいじゃないですか!どれどれどんな働きをしてくれるんだと見てみると、(公式サイトより抜粋)あ、これ知ってました。けど名前までは知りませんでした(笑)この「<=>」って形が宇宙船っぽいからこう命名したんですかね。案外ふわっとしたイメージで名前が付けられているものが他にもあるのかも知れませんね。結構面白いなぁと思ったじゅんすでした!ではまたっ!
  • テクログ

    基本中の基本のif文で知らなかったこと

    はじめまして!今年4月入社のkaiです。入社してから早3ヶ月、といっても研修で2ヶ月いなかったのでまだまだ慣れないことがたくさんありますが、徐々にそれが出来ていくのが楽しくもありますよね。さて、今回は研修の主軸にあったPHPに関して最近気になって調べたことを書いていこうと思います。私は元々CやJavaでプログラムを書いていたのですが、新たにPHPの学習を進めていく中で、if文に微妙な違いがあることに気づきました。C言語などでif文を記載するときは、のように記述しますが、PHPでは、のように記述します。当初よく考えないでC言語の記述方法で記述していたのですが、動作上には何の問題もなく、ふと参考書を見返してこのことに気づきました。(危なかった…)どういうことだろうと調べてみると、PHPの`elseif`はPHP側で用意された式で`else if`と記述するのとは文法的な意味はやや異なるものの最終的な結果は同じになるようです。後者の`else if`は、if文やfor文で処理が一つのみの時に波括弧を省略できることを利用した記述方法でした。この`else if`を別の書き方をすると、のようになります。ちなみにC言語などもこの仕様だったようで驚きました!ただ、この`else if`は、PHPで利用できる波括弧を「:」で置き換える記述には利用できないので注意が必要です。いかがだったでしょうか。個人的にはPHPのみならずC言語にも`else if`という式が用意されていなかったということが衝撃でした!役に立つかと言われれば微妙な気もしますが、これからも色々と調べていきたいと思います!・参考リンクPHPマニュアル - elseif/else if