サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
iPhone 16
engineering.otobank.co.jp
こちらは Symfony Advent Calendar 2021 の11日目の記事です。 昨日は @ttskch さんの [Symfony] Securityアノテーションを使って複雑な権限チェックを行う | blog.ttskch でした。 どーも @kalibora です。今回は 「エンジニアじゃなくたって現在時刻を自由自在に操ってテストがしたいよ〜〜(CV: マヂカルラブリー野田) with Symfony」 と題した記事です。 どういう話かといいますと、例えばお正月の1月1日からお正月キャンペーンのようなものをやるとして、画面が1/1の0時から切り替わるけど、それを前もってQAやPdMなどエンジニア以外の人がどうやって簡単にテストするか?みたいな話です。 前半は Symfony に関係ない一般的な話、後半はそれを Symfony でどう実装したか?という2段構えで書かせていただき
前回の記事 レイヤー間の依存関係の静的解析 - PHP deptrac ~ 導入編 からの続きです。 「ユニットテストとは事情が違うし、そうそう違反は起きないよ」と思った方がいらっしゃるかも知れません。いえ、レイヤーの依存関係違反は割と発生します。 起こりうる違反例 前回のコードを少し変更して、Userエンティテイにおいて getType() メソッドで属性を取得できるようにしてみましょう。 <?php namespace Foo\Entity; class User { public function getType() : string { // 何かしらのロジック return \Foo\Repository\UserRepository::TYPE_ADMIN; } } <?php namespace Foo\Repository; use Foo\Entity\User; cla
はじめに 今日のPHPでのウェブアプリケーションでは、MVCなどのレイヤー分割を気を付けて構造の開発を行われているかと思います。はたして気を付けてるだけでよいのでしょうか? ・・・ということで、"アーキテクチャテスト" とも称されるレイヤーへの静的解析による検証について記事をお送りします。 PHPプロジェクトにおけるソフトウェブレイヤー間の依存関係の静的解析ツールである deptrac のセットアップまでを行う本エントリー「導入編」と、実際に弊社でのバックエンドプロジェクトにCIに導入している現状を踏まえた上での「実践編」とに分けてお送りしたいと思います。 なぜ、レイヤー間の依存関係のチェックをツールで行えるようにするのか 上述した通り、気を付けるだけでは気づかぬうちに違反が起きていく可能性があります。また、レビューで担保しようとするとそのチェックのためのコストがかかり、チェック項目として
composer での require と require-dev キー PHPで広く使われている依存性マネージャの composer には、昨今の他の言語で用いられているツール同様に、依存性を設定するキーとして require と require-dev が存在します。 このキー欄にはそれぞれプロジェクトが依存する、PHPのバージョン・個々のPHP拡張・ベンダーパッケージとそのバージョン が指定できます。 普段PHPを利用する開発者のみなさんは、以下の通り依存性の追加コマンドを追加されてるかと思います。 composer require monolog/monolog # ロガーとしてmonologが必要 composer require --dev phpunit/phpunit # 開発時にテイスティングツールとしてPHPUnitが必要 require-dev の特徴として、 com
暑い日が続きますね。こんにちは @kalibora です。 よその会社であったとしても、セキュリティ関連の事故を見聞きするたびにプログラマーとしては胃が痛くなるのではないでしょうか。 はたして自分のところは大丈夫だろうかと。完璧なんてありえないし、どこかでうっかりミスをして大事故を起こさないだろうかと。 さて、最近では noteでのIPアドレス漏れ のようなことがありましたし、過去には 狙われた7pay「外部ID連携」の脆弱性の全貌。急遽“遮断”した理由 | Business Insider Japan のような問題もありました。 どちらも詳細な原因は外部の私からは知ることはできませんが、APIから不必要なレスポンスを返してしまうことによって起きるセキュリティ関連の事故というのは、わりとよくあるケースなのかもしれません。 私の担当するシステムとしてもこのようなことが起きないか、なにか今以上
今週は仕事のメインリポジトリの phpstanならびにphpstan-doctrineをやっと^0.12に上げたので気が強い— sasezaki (@sasezaki) March 27, 2020 はじめに 弊社のサーバーサイド でのメインプロジェクトでは、過去のブログエントリにもあるように、PHP ならびにORMとしてDoctrine を導入しています。 PHPStan で Doctrine Criteria で使ってるフィールドを検証できるようにした - OTOBANK Engineering Blog https://engineering.otobank.co.jp/entry/2019/02/25/143224 そして PHPStan をQAでの主な静的解析として利用しており、コードレビュー時の負担を減らすため機械が指摘できることは極力機械で行えるように随時設定の見直し・チェッ
こんにちは!@riaf です。 オトバンクでは、サービスの各種データの可視化に Metabase を利用しています。 また、主に Google Cloud を利用しているので、GCP で運用したく、現在は Google App Engine 上で Metabase を運用しています。 設定ファイルを書いておくだけでメンテナンスが非常に楽、というかほぼ必要ないのでとても良いのでオススメです。 (と書いてますが、挙動がおかしい時の調査とかは多少めんどくさい面もあります) ちなみに、Metabase を GAE で動かそうとしている人たちは一応いるみたいで、検索するとそのような GitHub リポジトリが出てくるっちゃ出てくるんですが、最新のバージョンではそれだけで動かないものしか見つけられませんでした。 使用するのは Google App Engine Flexible Environment
この記事には @koriym さんによるフォローアップ記事: Re: BEAR.Sundayをコードリーディングしたのでメモ程度にアウトプットする - BEAR Blog があります。併せてご覧ください。 お久しぶりです。 @kalibora です。 題名が若干のルー大柴感ありますが、以前から気にはなっていたものの手を出していなかった BEAR.Sunday を最近触りまして、 理解を深めるためにもコードを多少読んだので、ここにそのメモを藪からスティックに垂れ流したいと思います。 誰かのお役に立てれば幸いです。 (多分に間違えている可能性があるので、その際はマサカリを投げてください。) 前提条件 以下のバージョンのコードを読みました。 $ composer show | grep 'bear/\(app-meta\|package\|resource\|sunday\)' bear/app
こんにちは。@mrtry_です。 最近、低温調理機を自作しまして、毎週ハナマサで肉塊を買って、調理する週末を過ごしています。 さて、今回から2回ほどService Containerについて紹介したいと思います。 初回のこの記事では、Service Containerの仕組みの元となるデザインパターンDependency injection(DI)について紹介したいと思います。 以下、今回の記事の目次になります。 Dependency injection(DI)とは 実際のコード例 DIすると嬉しいこと SymfonyでDIを行うにはSymfonyでDIを行うには Dependency injection(DI)とは Dependency injection(DI)とは、デザインパターンの一種です。 よく「依存性の注入」とよく言われています。 和訳だけ見てもどんなものなのか想像しにくいです
こんにちわ。@mrtryです。 今月の頭に、地元に帰る用事があり、先月のブログで書いたまつりやという回転寿司にいってきました。 いっぱい食べました。めっちゃ美味しかったです…! さて今回は、先日社内LT(Teck Talk)で発表した内容を記事にしてみました。 音声認識を利用して、取材で録音した音声を自動的に文字起こしすることはできるのかというテーマで発表しました。 この話の背景 ある日、弊社の新刊JPの記者さんと飲んでいた時のことです。 記者さんが、「取材をするとき、基本ICレコーダーで録音しておいて、あとで聞きながら文字に起こしたりするんだけど、結構面倒だし、外注したりもするんだよね。プログラムでいい感じにならないですか?」と言われました。 その話を聞いて、「音声認識でイケそうな気がしますね〜。やってみますね〜。」と答えたので、ちょっと試してみました。 音声認識とは そもそも、音声認識
こんちは! @riaf です! 昨日は PHP カンファレンス でしたね!みなさん、餃子食べましたか!?!? 僕はここのところあまりお手伝いできていなくて申し訳ない気持ち! 今回はお昼過ぎからちょこっとだけ遊びに行った (w/ 息子) んですが、すごい規模のイベントになりましたね。 ううむ、やっぱりコミュニティ活動は魅力的だなあ。 子連れだったので、ほぼ発表を見ることができず、(僕が欲しくて) 資料を簡単にまとめてみました。 (そして、社内の人たちにも見てもらおう!という魂胆です) トラック1 トラック 2 トラック 3 トラック 4 トラック 5 トラック 6 トラック 7 PHP の今とこれから 2016 Composer プラグインを作ってみよう Chef と nginx で作る PHP アプリケーションの Reliable Blue Green Deployment php アプリ
2回めましてこんばんわ。 @kalibora です。 焼き鳥のカシラは塩、シロはタレ派です。 さてさて、みなさまはプログラム中でログを吐くときのログレベルをどのように使い分けておりますでしょうか。 error 一択? error info debug くらい? そうだとして、それってどう使い分けていますか? そしてそれをどのように気づき、どう対処していますか? ログレベルの種類 まず、ログレベルはどのようなものが定義されているのか確認したいと思います。 PHP のデファクトスタンダートである PSR-3 で定義されているログレベルは下記の通りです。 ログレベル 説明 例 emergency System is unusable. システムが使用不可能な状態 - alert Action must be taken immediately. 直ちになんらかの対処の必要がある Entire w
どうも、はじめまして!新卒エンジニアの@mrtry です! 株式会社7/20(水)にGMOペパボさんで開催されたPHP BLT #5に参加してきました! 私事ですが、北海道から引っ越してきて、初の都会での勉強会だったのですが、 勉強会は人もいっぱいだし、オフィスも大きくてキレイで、 「都会はすごいなあ...。」と終始田舎丸出しでした...。笑 今回は、まとめブログ書く枠で参加してきたので、イベントレポをしたいと思います! 会場のようす 今回は、GMOペパボさんで開催されました。 会場の提供、ありがとうございました! とても広く、きれいでした! その後ろでは、軽食と飲み物が提供されていました。 BLTサンドもありましたよ! LTのようす 軽食と飲み物をとって、乾杯があった後、LTが始まりました! 今回は13名の方がLTしていました。 hanhan1978 さん 生産性の指標として、ポモドーロ
はじめまして。4月からオトバンクで働き始めました @kalibora と申します。よろしくお願いします。 さて、オトバンクでは Symfony2 を使っており、ORマッパーにはデフォルトの Doctrine2 を使用しているのですが、 そんな中で私が得た知見をいくつか紹介したいと思います。 Fetch mode の話 Doctrine2 には fetch mode という概念があります。 Annotations Reference - Doctrine Object Relational Mapper (ORM) を見ますと Doctrine2には下記の fetch mode があるようです。 fetch mode 定義できる場所 EAGER @ManyToOne @ManyToMany @OneToOne @OneToMany LAZY @ManyToOne @ManyToMany @O
こんちは!@riaf です。 最近、 php5.x と php7.0 向けの開発を並行してやっているので、OSX 上で複数の PHP をインストールして開発しています。 ついうっかり composer update なんてものを実行してしまったので、その待ち時間でどういう構成にしているか、という記事でも書いてみようかと思いました。 こういった場面では、よく phpenv を使う方法が紹介されますが、内部的に rbenv を使っていたり、そもそも言語ごとに *env 用意すんのかよ..とか、ちょっと気に食わないところがあって、これまでは Vagrant を使ってアプリ毎に異なる環境を用意したりしていました。 しかし去年の秋頃から、MacBook (12インチのやつ) を使うようになったので、Vagrant で VM 立てて、環境切り替えて、、というのが若干ヘビーで、バッテリーで戦いたい時には
こんにちは、毎度おなじみ @riaf です。ここのところ、私しかブログ記事を書いていませんが、社員が居ないわけではありません。きっとそのうち書いてくれると信じています (まじ、誰かホントに書いてくれよ...)。 今日はタイトル通り、PHP7+PHPUnit4.8 から PHPDBG でのカバレッジ出力がサポートされているので、これまで CI でのカバレッジ出力に時間かかってしまって辛かった部分を解消したいと思います。 準備するものはこちら! PHP7 CircleCI (当ブログおなじみ!や、別に CircleCI である必要はないですよもちろん) つまり、circle.yml で machine: php: version: 7.0.4 と書き、 test: override: - phpdbg -qrr vendor/bin/phpunit --coverage-html $CIRCL
おはこんばんちは!! 尾藤 a.k.a. BTO です。 Unixライクシステムで環境設定に使われる dotfiles。 みなさんはどのように管理しているでしょうか。 dotfiles は単に $HOME に置けば終わりではなくて、外部からとってくるツール類のセットアップもしないといけません。 やり方はいろいろあるかと思いますが、個人的には dotfiles の設定はほとんど自動化しています。 今回は dotfiles 関連のタスクを、どのように自動化しているのか紹介したいと思います。 リポジトリ リポジトリは、こちらで公開しています。 https://github.com/bto/dotfiles 初期化 dotfiles の初期化は git clone して、make を実行するだけです。 それで dotfiles の設定と、必要なソフトウェアのインストールを行います。 % git c
@riafです! 先週の木曜日ですが、株式会社メルカリで開催されたPHP BLT #4にまとめブログ枠で参加してきました。 何かネタを作って LT 申し込もうとしてたんですが、ちょうど枠が埋まっていたの(と、エンジニアブログのネタを探していたの)で、初めてのまとめ枠でした。 ブログを書くより、5分のネタ作る方が簡単だなって..思います...。 さあ、気を取り直して早速まとめていきますよ! 会場はメルカリ メルカリは六本木ヒルズにあります。広くて素敵なオフィスです。余ってる場所ほしい。 会場後ろ側のワゴンでビールと軽食が提供されています おしゃれ。 開始時刻に! と思ったらトップバッターの人が不在 (遅刻)。 というより、開始時刻になっても集まっているのは 20 人程度で、ゆるーくスタート。 suzukiさん トップバッター不在のため、2番手の suzuki さんからスタートです。 PHP
もう 3 月も終わりそうですが、本当に終われるのでしょうか... @riaf です。 突然ですが、ちょっとした静的なページを用意したいなっていうこと、わりとありますよね。 いつもはだいたい GitHub Pages (+Jekyll) とか使ったりすることも多いんですが、今回は簡単にテーマを編集したりしたかった (り、ブログのネタが欲しかったりした) ので、シンプルな作りで爆速な Hugo を使ってみることにしました。 最終的には、以下のような構成で動かそうという目論見です。 Github リポジトリに push CircleCI が Hugo でジェネレート IDCF クラウドのオブジェクトストレージ (S3 っぽいやつ) でホスティング CircleCI で Hugo を使うためにはまずインストールする必要があります。が、ここで go get とかしちゃうと負けた気持ちになるので、もっ
さてたまには PHP のことも書いてみようと思います。一応 PHP をメインにしている会社ですからね! あ、申し遅れました @riaf です。 ところで、みなさん PSR はご存知かと思いますが、最近どうなってるか知っていますか? (もう今更 PSR とは?みたいな話はしないぞ!!) あー、はいはい。PSR ね。あの autoload とかのやつでしょ。 とかいう認識だとちょー置いていかれる感満載の状態です。 軽くまとめてみましょう。(2016/02/29現在) STATUS NUM TITLE DEPRECATED 0 Autoloading Standard ACCEPTED 1 Basic Coding Standard ACCEPTED 2 Coding Style Guide ACCEPTED 3 Logger Interface ACCEPTED 4 Autoloading S
おはこんばんちは!! 尾藤 a.k.a. BTO です。 システムの開発をしていると、いろんな言語を使いますよね。 Webシステムなら、PHPとかHTMLとか。 CSSも立派な言語です。 このように我々エンジニア(デザイナーにとっても)身近な言語は、いったいどのように処理されているのでしょうか。 今回は、我々が普段使っている形式言語の解析が、どのように行われているのかを書きたいと思います。 言語 では、まず言語というのはいったい何でしょうか? かなりざっくりとした質問で、答えはいろいろ出てきそうですが、ここでは自然言語と形式言語の2種類にカテゴライズします。 自然言語 自然言語というのは、人が会話したり、文章を書いたりする時に使われる言語です。 日本語や英語、他にも何百種類という言語が存在すると思います。 何と言っても自然言語で一番厄介なのは、曖昧さです。 明確な文法が存在せず、助詞や接続
おはこんばんちは!! 尾藤 a.k.a. BTO です。 みなさん、Unixデーモンよく使ってますよね。 Webエンジニアなら、Webサーバ、メールサーバ、DBサーバ、cronなどがよく使われるのではないでしょうか。 24時間365日黙々と働き続けるUnixデーモン達。 身近な存在だと思いますが、実はどういう仕組みで動いているのかご存じない方も多いのではないでしょうか。 先日、オトバンクでUnixデーモンの仕組みについて勉強会をやったので、その内容をまとめます。 デーモンとは では、デーモンとはいったい何なのでしょうか。 Unixライクシステムにおいて、バックグランドで動作して様々な処理を実行してくれるプロセスがデーモンです。 デーモンには明確な定義はありませんが、だいたい次のような条件を満たすプロセスがデーモンと呼ばれます。 バックグランドで動作している 制御端末を持たない 他のプロセス
こんにちは。麦芽系エンジニアasmzです。麦芽は東北産を使用しています。そろそろビアガーデンとか行きたいです。誰か誘って下さい。よろしくお願いします。 さて、私はこれまで engineering.otobank.co.jp engineering.otobank.co.jp とかでちょいちょい弊社Hubot(otobot君)に機能追加してきて、「この人Hubotばっかりやってるけど、実はオトバンクのHubot開発担当の人なのかしら?何なのかしら?窓際社員なのかしら?」と思われがちです。違います。何ですかHubot開発担当って。 まぁ主に仕事に疲れた時の気晴らしとかに、一人で勝手に作ってます。何故か深夜にプルリク出ることが多いやつです。 otobot君も最初はそんなに社内で活用されてたわけでも無いのですが、otobot image me でおもしろ画像表示して遊ばれたり(専用のSlackチャ
あけましておめでとうございます。 @riaf です。 先週の土曜日に札幌で LOCAL Students MeetUp 2016 というイベントがありまして、そこに先輩枠として呼んでもらえたので、ちょこっとだけお話をしてきました。 このイベントは LOCAL 学生部に所属する人たちが中心となって運営されていて、その名の通り、大学や高専などの学生が中心となって活動しているんですが、僕が学生時代にこの立ち上げにちょっと絡んでいたのもあって、応援の気持ちも込めつつ、札幌で美味いものを食べにいくついでに参加することにしたのでした。 そもそも LOCAL というのは、英単語としての local 〖名詞の前で〗地元の; その地方(特有)の; 当地の; 現地の, (ある特定の)地域の (!日本語の「ローカルな」の表す「田舎の」の意味はない; ではなくて、一般社団法人LOCAL という組織 北海道における
この記事はモバイルDevOps Advent Calendar 2015の9日目の記事です。 どうも、酔っ払った勢いでAdvent Calendarに登録してしまったasmzです。ちなみに翌日は二日酔いで終日具合悪かったです。 ここ最近会社ブログに書いてたエントリがiOSアプリのCI/CD関係で、割とこのAdvent Calendarの趣旨に近いかなと思ったので、とりあえず書いてみます。(会社ブログ的には似たようなエントリばかり増えてしまってアレですが :p buddybuildとは? www.buddybuild.com どうやらサービス開始が今年の9月くらい?らしく(未確認)、ググっても日本の解説記事とか見当たらないのでご存じない方が多いかと思うのですが(自分もこないだまで知らなかった)、buddybuildとはモバイルに特化したCIサービスです。 CIサービスとしてはCircleCI
しわっす!@riaf です! タイトルどおりなんですが、最近どうやら Google Feed API が Deprecated になり、ちょっとしたところに活用してた人たちが悲鳴をあげてるのを目にしたので、リリースされたばかりの Symfony 3.0 のテストも兼ねて、似たようなサービスを作ってみようと思いました。 ついでに、開発中だった otobank/facebook-bundle も一緒に使ってしまおう。と、無意味に Facebook ログインが必須になっとりますが、ユーザー情報の保存とか、面倒で実装してないので、コネクトしたと言っても特に悪さしたりしませんので、安心してください(それでいいのか) 作ったのはこちらです。 https://feedjson.otolabo.jp サービスの使い方とかに関してはもうちょっとちゃんと作った後にでも紹介しますね。 Symfony 3.0 を
どうも。麦芽系エンジニアasmzです。今年もあっという間に年の瀬になってまいりましたが、こないだコストコでのどごし生を大量補給したので、年内は何とかやっていけると思います! CircleCIでのiOSビルドが有料化!? これまでCircleCIでiOSアプリのビルドをされていた方はご存知かと思いますが、これまで「ベータ機能」として無料で利用できていたiOSビルド機能は、11月末でベータ提供終了とのお知らせが先日CircleCIから届きました。 で、12月から新しいプランになりますよ!って出てきたプランを見ると、無料プランというものは見当たらず、最安でも$99/月(ベータ機能利用者は今申し込めば限定価格でご提供)という噂…。(※) ※この辺はまだ公式サイトにアナウンス掲載されていないので、今後変更される可能性はあります。(もし違っても石投げないでやってください…) 少々お高いですなぁ… その
こんにちは!@riaf です。 今日は PHP BLT #1 ですね! (LTネタの仕込みもせずにこんな記事を書いていて良いのでしょうか) 弊社では、サービスの CI / デプロイ等に CircleCI を利用しています。 最近の PHP 開発では、Composer を使うことが多いと思うのですが、Symfony Components とかを使い始めると、依存するパッケージが多くなってしまって、CI 時の composer install に思いの外時間がかかってしまうこと、ありますよね。 特に、頻繁にテストが行われるようになると、Composer が GitHub の API リミットに引っかかってしまい、アーカイブではなくソースコードを clone してリミットを回避するので、より時間がかかるようになってしまいます。 「どうにかしたいですよねー」という声が上がってきたので、「よーし、い
度々の登場になります、麦芽系エンジニアのasmzです。何でしょうね、何か意識高まってるのか割と短いスパンでもう1エントリ書きましたので公開してみます。 というのも、前回のエントリでfastlaneの紹介をしたんですが、その中で出てきた「Crashlytics」について、「うわー、fastlaneのことばっか書きすぎてもう全然書くスペース取れないわー」ってなりまして。。。(ちょっと意識高まりすぎた) というわけで、Crashlytics自体も結構高機能なので、今回はこのツール自体のざっくりとした紹介と、使ってみての感想、注意点なんかを書いてみます。 まぁ「fastlane」「Crashlytics」それぞれのツールがやってることは結構異なるので、前後編という感じでは無いのですが、前のエントリと関連付けて呼んでいただけると、話が繋がりやすいかな、とは思います。 engineering.otob
次のページ
このページを最初にブックマークしてみませんか?
『OTOBANK Engineering Blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く