ブックマーク / engineering.mercari.com (81)

  • プログラマーの三大美徳 その2

    みなさんはプログラマーの三大美徳ってご存知ですか? プログラミング言語Perlの作者である Larry Wall が http://www.perl.com/pub/1998/08/show/onion.html で述べたのが最初とされています。 三大美徳として 怠惰(laziness) 短気(impatience) 傲慢(hubris) があげられています。 怠惰(laziness)については、以前にこちらの記事でお話しました。 tech.mercari.com 今回は 短気(impatience) についてです。 短気(impatience) 優秀なプログラマーが持っている怠惰という美徳は素晴らしいのですが、その反面というか怠惰さゆえに腰が重いときがあります。 そこで短気な面をうまく刺激することでプロジェクトを円滑に進めることが可能です。 メルカリでの例 みなさんもCIにてテストを動か

    プログラマーの三大美徳 その2
    daiki_17
    daiki_17 2017/03/30
  • AMP Conf 2017へ行ってきました #AMPConf | メルカリエンジニアリング

    こんにちは、Software Engineerの @yui_tang です。 3月7-8日にニューヨークにて開催されたAMP Conf 2017に参加してきましたので、そのレポートを書きたいと思います。 メルカリでのAMPの取り組み まずは、現在までのメルカリにおけるAMP(Accelerated Mobile Pages)の取り組みについて簡単にお話します。 2016年7月にメルカリのWebサイトの一部に導入を開始し、現在AMPページには数万PV/日のアクセスがあります。 メルカリ内の商品毎のページが全てAMP対応しているため、そのページ数は相当数に上ります。 流入経路ですが、現在元ページにlink rel="amphtml"を設定しているのみで、メルカリのサービス内にAMPページへのリンクは露出していません。 よって全てが検索流入となっており、事実上ランディング用のページとして機能して

    AMP Conf 2017へ行ってきました #AMPConf | メルカリエンジニアリング
    daiki_17
    daiki_17 2017/03/16
  • QAのためのChatOps!テストデータを作成するSlackコマンドを作ってみた | メルカリエンジニアリング

    こんにちは。メルカリのテスト自動化エンジニアとして、スマホアプリのテスト自動化をぶりぶりしている@daipresentsです。 ChatOpsが運用の効率化として誕生したのであれば、それはソフトウェア開発に関連するどんな手作業にでも適用できそう。そう思いついたので、Slackから簡単にテストデータを作れるSlack Commandを作ってみました。QAエンジニア、テストエンジニアにモテそう。 なぜChatOpsなのか 僕は今、スマホアプリのテスト自動化のお仕事をしていて、テストエンジニアと働いています。彼らは僕のユーザーでもあります。 そのなかで、どのあたりから自動化していくとハッピーかをヒアリングしたところ、一番人気がリグレッションテスト。まぁ、そりゃそうだ。それ以外だと「日々のテストデータ作成」という意見が多く出てきました。 たしかに、ユニットテストレベルであれば、プログラムで簡単に実

    QAのためのChatOps!テストデータを作成するSlackコマンドを作ってみた | メルカリエンジニアリング
    daiki_17
    daiki_17 2017/03/13
  • Our Image Classification Experiment with Deep Learning | Mercari Engineering

    Introduction Hi, my name is Takuma. I am a software and machine learning engineer at Mercari. Artificial Intelligence (AI) is a buzzword nowadays. We also often see terms, such as ‘Deep Learning‘ and ‘Deep Neural Networks‘ that are subsets of AI and machine learning. I would like to share our experiment on image classification using deep learning. Neural Networks Winter Deep learning is a variatio

    daiki_17
    daiki_17 2017/01/18
  • GoでとあるAPIサーバを実装し直した話 | メルカリエンジニアリング

    サーバサイドエンジニアの @b4b4r07 です。この記事は Go Advent Calendar 2016 の 19 日目です。今回は Go (Revel フレームワーク) で書かれていた API サーバをフルスクラッチで書き直したお話をします。 Revel とは A high productivity, full-stack web framework for the Go language 公式の説明にあるように、Revel は高機能でフルスタックな Web フレームワークです。 複雑なルーティングや、パラメータのパーシング、テンプレート機能など、Web アプリケーションを作ろうとなったときに必要な手段はたいてい兼ね揃えているようです。公式ドキュメントに詳しく書かれています。 Revel 以外にも Go 製の Web フレームワークは多数あり、有名どころだと以下のようなものが挙げられ

    GoでとあるAPIサーバを実装し直した話 | メルカリエンジニアリング
    daiki_17
    daiki_17 2016/12/19
  • 監視だけじゃない!デプロイにMackerelを使う話 | メルカリエンジニアリング

    SREチームの @siroken3 です。 以前、メルカリでリリース手段としてChatOpsを採用していることをブログで紹介しました。今回は内部で使っている技術の一部を紹介したいと思います。 tech.mercari.com tl;dr メルカリではデプロイにAnsible使ってる 毎日デプロイしつつサーバが増加/入れ替え激しいと心が削れる MackerelAPIとAnsibleを組み合わせたらハッピーになった Insideデプロイ メルカリではデプロイ用のサーバでSlack Botが働いており、デプロイの事前要件を満たしているか確認した後、大まかには以下の処理を実行しています。 GitHubからデプロイ対象ソースの取得 composer install / gulp などのビルド処理 対象サーバにrsyncでデプロイ これらの処理は構成管理ツールであるAnsibleを使用しています。

    監視だけじゃない!デプロイにMackerelを使う話 | メルカリエンジニアリング
    daiki_17
    daiki_17 2016/11/15
  • WEB+DB PRESS Vol.94にてメルカリSREチームによる連載第3回が掲載されました | メルカリエンジニアリング

    SREチームの@siroken3です。WEB+DB PRESSの連載第3回が 日発売の Vol.94に掲載されました。 gihyo.jp 前回に引き続き @siroken3 が執筆いたしました。 今回はデータベースのバックアップと題して、メルカリの運用をベースにしてMySQLのバックアップについて執筆しました。バックアップの考え方から始まり、採用しているツールについて動作の仕組みも併せて詳細に解説させていただきました。またメルカリでのバックアップ事例に関しても紹介しています。 特にMySQLを使った大量のデータを扱うサービスにおいて、如何にシステムを稼働させつつ、データの整合性を担保してバックアップを実施するかについて力を入れて解説したつもりです。連載第3回もぜひご覧いただければ幸いです。

    WEB+DB PRESS Vol.94にてメルカリSREチームによる連載第3回が掲載されました | メルカリエンジニアリング
    daiki_17
    daiki_17 2016/08/24
  • nginxによるTCPロードバランサー | メルカリエンジニアリング

    SREチームの@cubicdaiyaです。今回はnginxによるTCPレイヤーでのロードバランスについて解説します。 ロードバランサーとしてのnginx nginxはHTTPやTCP、UDP等の複数のレイヤーでロードバランサーとして稼働させることができます。(TCPロードバランサーは1.9.0以降、UDPロードバランサーは1.9.13以降で利用可能です) また、ngx_http_ssl_module や ngx_stream_ssl_module を利用することでそれぞれのレイヤーでTLSを有効化することも可能です。 TCPロードバランサー用のモジュールを有効にする HTTPレイヤーでロードバランスするためのモジュールはデフォルトで組み込まれますが、TCP(とUDP)レイヤーでロードバランスするにはnginxのconfigureスクリプトに--with-stream(あるいは --with

    nginxによるTCPロードバランサー | メルカリエンジニアリング
    daiki_17
    daiki_17 2016/08/18
  • DockerとMakeを利用したRPMパッケージのビルド環境 | メルカリエンジニアリング

    SREチームの@cubicdaiyaです。今回はDockerとMakeを利用したメルカリの自作RPMパッケージのビルド環境について紹介します。 メルカリの自作RPMパッケージ事情とVagrant、そしてDocker メルカリの開発およびプロダクション環境では現在CentOS6と7を利用しており、随時CentOS7へ移行中です。そのため、自作RPMパッケージをビルドする際はCentOS6と7向けにそれぞれビルドしています。ビルドしたパッケージはyumリポジトリサーバにアップロードした後、必要に応じてyumでインストール、Ansibleのplaybook化を行います。 RPMパッケージの作成はSREチームのメンバーが行っており、各自のローカルマシン上において make {パッケージ名} を実行するだけでCentOS6と7向けのRPMパッケージをビルドできる環境をDockerで構築しています。

    DockerとMakeを利用したRPMパッケージのビルド環境 | メルカリエンジニアリング
    daiki_17
    daiki_17 2016/08/16
  • プログラマーの三大美徳 | メルカリエンジニアリング

    みなさんはプログラマーの三大美徳ってご存知ですか? プログラミング言語Perlの作者である Larry Wall が↓で述べたのが最初とされています。 http://www.perl.com/pub/1998/08/show/onion.html 三大美徳として 怠惰(laziness) 短気(impatience) 傲慢(hubris) があげられています。 今回はそのうち怠惰(laziness)についてお話します。 怠惰(laziness) 怠惰といえば怠け者。怠け者といえば怠け者メガネ。怠け者メガネを使えば誰でも簡単に美徳を手にいれることができます。 この怠け者メガネを使うと視線は前方に向けたまま下方を見ることができます。 来は寝転がってテレビを見るために開発されたようです。 この怠け者メガネを使ったプログラム開発について説明します。 レベル0 怠け者メガネを装着せずに作業します。

    プログラマーの三大美徳 | メルカリエンジニアリング
    daiki_17
    daiki_17 2016/07/01
  • 3つのnginxをうまく使い分けよう〜nginx、OpenResty、Tengine〜

    OpenRestyはnginxのほかにngx_luaをはじめとするCで書かれた各種サードパーティモジュールとngx_luaのAPIを利用したrestyモジュール、そしてLua/LuaJITで構成されています。 OpenRestyに含まれているnginx自体は家のnginxと基同じなので、別にOpenRestyを利用しなくても自分でngx_luaを組み込んだり、サーバ上にrestyモジュールを配布することで似たような環境を構築することは可能ですが、OpenRestyであれば主要なモジュールやライブラリが./configure、make、make installの一連の流れですべてゴソッとインストールされますし、OpenRestyのconfigureスクリプトはnginxのconfigureスクリプトを継承したものなのでnginxのconfigureオプションをほぼそのまま利用することもで

    3つのnginxをうまく使い分けよう〜nginx、OpenResty、Tengine〜
    daiki_17
    daiki_17 2016/05/25
  • インフラチーム改め Site Reliability Engineering (SRE) チームになりました

    インフラチーム改め Site Reliability Engineering (SRE) チームになりました Organization Author: kazeburo インフラチーム改めSite Reliability Engineering チームの @kazeburo です。この記事ではまだ馴染みの薄い Site Reliability Engineer とは何かについて紹介したいと思います。 SREとGoogleのSRE Site Reliability Engineerは日語にすると「サイト信頼性エンジニア」となりますが、あまりキャッチーではないので普段は略語の「SRE」を使用しています。SREという職種は日ではあまり聞く事はありませんが、FacebookやAirbnb、Dropboxなどの企業でSREが募集され、それぞれのサービスを支える重要な役割を担っていると思われます。

    インフラチーム改め Site Reliability Engineering (SRE) チームになりました
    daiki_17
    daiki_17 2015/12/16
  • fluent-agent-hydraで省エネログ転送 - Mercari Engineering Blog

    Site Reliability Engineering Teamの@cubicdaiyaです。 今回はGo製のログ転送エージェントであるfluent-agent-hydraとメルカリでの利用事例について紹介します。 メルカリとFluentd メルカリではAPIサーバのアクセスログやアプリケーション固有のログをはじめとする各サーバに散らばっているログデータを転送・集約するのにFluentdを活用しています。 具体的にはローカルに書き込まれるログファイルのin_tailやそれらを転送するための(out|in)_forward、ElasticsearchやBigQueryにログを放り込むためのプラグインを利用しているほか、いくつか特殊な用途のプラグインを独自に開発して運用してたりもします。 ログの流量とFluentdのパフォーマンス 多機能で柔軟なプラグイン機構を持つ便利なFluentdですが

    fluent-agent-hydraで省エネログ転送 - Mercari Engineering Blog
    daiki_17
    daiki_17 2015/12/15
  • 大人のスタートアップは大人のリリースができる。そう、ChatOpsならね。 | メルカリエンジニアリング

    このブログをご覧のみなさま初めまして。@siroken3です。メルカリではインフラチームに所属しており、リリースの仕組み構築を担当しています。 メルカリのリリースについて メルカリではカスタマーサポートから受け取る改善要望、プロダクトとしてまだやれてないことなど多くのタスクがあり現在も継続して開発とリリースが行われています。 Issue管理はRedmine、ソースコードのリポジトリはGitHub privateを使用しています。Pull Request(以下PR)でのコードレビューを実施、masterブランチへマージされたものをリリースするのが基的なフローです。 一方、1年前まではリリース頻度は週1回のリリース日を決めて実施していましたが、この1年で大きく変わりました。現在では日版とUS版を合わせて10回〜30回/日の頻度でリリースしています。この記事では大きく変わったメルカリのリリー

    大人のスタートアップは大人のリリースができる。そう、ChatOpsならね。 | メルカリエンジニアリング
    daiki_17
    daiki_17 2015/10/16
  • Gitのつくりかた | メルカリエンジニアリング

    はじめまして。サーバサイドエンジニアの @DQNEO です。 今日はGitのつくりかたをご紹介します。 C言語学習教材としてのGit Gitと同じものをゼロから作って何の意味があるのか?と思いますよね。 私がこの再発明をやり始めた動機は「C言語を書けるようになりたい」でした。 実際に途中までやってみたところ、 C言語がチョットデキるようになった Gitの内部構造に詳しくなった というメリットが得られました。 C言語を勉強する題材は、テトリスとかWebサーバとか他にいくらでもあるのですが、Gitを実装してみるのはかなりおすすめです。理由は下記の通りです。 内部構造が意外と単純 (ローカルで動かす分には)ネットワークの知識が不要 普段使っているツールで外部仕様がわかっているので、やるべきことが明確 余談ですが、家Gitのソースコードを参考にしようと思って読んでいたら、Linus Tovals

    Gitのつくりかた | メルカリエンジニアリング
    daiki_17
    daiki_17 2015/09/14
  • Pascal〜Puree + ngx_lua + Fluentd + BigQueryでつくるメルカリのログ分析基盤〜

    Pascal〜Puree + ngx_lua + Fluentd + BigQueryでつくるメルカリのログ分析基盤〜 Backend Author: cubicdaiya エンジニアではなくプログラマと呼ばれたい@cubicdaiyaです。今回はメルカリのログ分析基盤のお話です。 メルカリにおけるログデータ分析 メルカリでは初期の頃からログデータの分析をサービスの成長にとって重要なタスクとして位置づけ、そのための基盤作りに取り組んできました。ログの種類はいくつかありますが、中でも代表的なのがアプリケーションサーバで出力されるアクセスログやアプリケーション固有のログです。これらのログはサイズが大きいので効率良くログデータを転送するための工夫が必要になります。そこで活躍するのがFluentdです。 大雑把に説明するとアプリケーションサーバで出力されたログはFluentdから最終的にBigQu

    Pascal〜Puree + ngx_lua + Fluentd + BigQueryでつくるメルカリのログ分析基盤〜
    daiki_17
    daiki_17 2015/09/09
  • nginx-build〜nginxのビルドプロセスを自動化〜 | メルカリエンジニアリング

    インフラチームの@cubicdaiyaです。今回はnginxのビルドプロセスを自動化するツールであるnginx-buildについて紹介します。 メルカリとnginx メルカリでは多数のnginxを活用し、高速なレスポンスやサービスの安定稼働を実現するのに重要な役割を果たしています。実際の活用事例には、 リバースプロキシ、L7ロードバランサ TLSターミネーション、SPDYゲートウェイ 静的コンテンツの配信、キャッシュ ngx_dynamic_upstreamを用いたゼロダウンタイムデプロイメント ngx_lua(OpenResty)を用いたサービスコンポーネントの開発 などが挙げられます。そしてメルカリではこれら多数の用途のnginxnginx-buildでソースコードからビルドしています。(OpenResty以外は合わせてrpm化も行っています) 既存のビルド済みパッケージの利用とソー

    nginx-build〜nginxのビルドプロセスを自動化〜 | メルカリエンジニアリング
    daiki_17
    daiki_17 2015/08/26
  • WEB+DB PRESS Vol.88 にメルカリのデータベース設計の記事を書きました | メルカリエンジニアリング

    2015年8月22日発売のWEB+DB PRESS Vol.88 にメルカリのデータベース設計、運用に関する特集記事をインフラチームの@cubicdaiya、@siroken3、@kazeburoの3人で書かせて頂きました。 gihyo.jp 特集のタイトルは「実戦データベース設計 サービスの急拡大に耐えるスケール戦術」です。メルカリでは、これまでサービスの急激な成長に伴い、何度もデータベースのスケールアップ・スケールアウトを行ったり、NoSQLの導入をして増え続ける負荷とデータに対応してきました。 この特集では、まず、これまでの大規模なWebサービスが直面したデータベースのスケーラビリティの問題とその対応方法を4つの期に分けて紹介します。続く2章、3章ではメルカリでのテーブル設計の工夫や、実際の運用で起きていたデータ領域の不足問題にどのように対処していったのか説明します。4章では視点を変

    WEB+DB PRESS Vol.88 にメルカリのデータベース設計の記事を書きました | メルカリエンジニアリング
    daiki_17
    daiki_17 2015/08/20
  • YAPC::Asia Tokyo 2015 で会いましょう!! | メルカリエンジニアリング

    こんにちは! メルカリでインフラを担当しております @kazeburo です。 YAPC::Asia Tokyo 2015 の開催まで1週間とちょっととなりました。メルカリからは私も含め2名が登壇しますので、このエントリーでセッションの紹介をさせてください。 実践nginxモジュール開発〜CとLua〜 by @cubicdaiya nginxはOSSのHTTPサーバで、その高いパフォーマンスから大規模なWebサービスほどnginxの利用している割合が大きくなっています。メルカリではリバースプロキシやロードバランサとして多数のnginxを活用し、高速なレスポンスやサービスの安定稼働を実現する重要な役割を果たしています。 このセッションではnginxの機能を拡張するモジュールの開発ノウハウを、発表者がこれまで開発またはコントリビュートしてきたngx_small_light、ngx_dynami

    YAPC::Asia Tokyo 2015 で会いましょう!! | メルカリエンジニアリング
    daiki_17
    daiki_17 2015/08/13
  • nginxとGoでつくるメルカリのプッシュ通知システム | メルカリエンジニアリング

    原稿の締め切りを越えた先にあるもの、それは校正です。「俺達の戦いはこれからだ!」的な展開に胸が熱く・・・いえ、ちょっと胃のあたりがチクチクする@cubicdaiyaです。 今回はメルカリのプッシュ通知システムとその変遷について紹介します。 メルカリとプッシュ通知 メルカリではアプリ内でのさまざまなイベントの発生時に対象ユーザに対してプッシュ通知を行うようになっています。アプリ内で発生するイベントというのは例えば、 商品の購入 購入した商品の発送 商品に対するいいね!、コメント といったものです。通常アプリ内でイベントが発生した際はAPIサーバにHTTPSリクエストを発行し、MySQLデータベースへの参照・更新が行われた後ユーザにレスポンスを返します。そして必要であればプッシュ通知を行います。 メルカリのプッシュ通知システムの課題と変遷 メルカリのプッシュ通知システムはこの1年間で2度刷新さ

    nginxとGoでつくるメルカリのプッシュ通知システム | メルカリエンジニアリング
    daiki_17
    daiki_17 2015/08/11