ラクスルのエンジニアって何をしているの?

昨年の10月にラクスルに入社し、3月よりCTOに就任した新米エンジニアの泉です。

最近スタートアップ界隈のビジネスパーソン、飲食を経営されている方など、何気なく出会った人に「あ!ラクスルさんなんですね!実は私も(チラシ|名刺)刷ってます!」と突然「お客様」に遭遇してヘコヘコしてしまうことがありますw。嬉しい限りです。

CMなどもガッツリ力をいれているのもあって、ようやくエンジニアの方でも最近「CMで見ました」「名前は聞いたことはあります」と言っていただくことはあるのですが、さすがに個人でチラシを100部印刷したいといったニーズはなかなか訪れず、比較的サービスに触れる機会は少ないためか、よく「え?ラクスルってそんなに技術に力入れてるんですか?」とか「ラクスルのシステム部って何開発してるの?」と聞かれます。

というわけで、そもそも「ラクスルのエンジニアが何をやっているのか」というお題で少しご紹介したいと思います。

ラクスルのサービス

raksul.comを見ていただければ大体お分かりいただけるかと思いますが、ラクスルはネット印刷通販を行っております。あまりピンと来ないかもしれませんが、世の中周りを見れば、名刺、封筒、ポスター、冊子、中吊り広告、財布の中のカード類、雑誌、おやつや製品のラッピングから、街頭で配っているチラシまで、印刷物で埋まっています。印刷の市場規模は6兆円と言われていますがさほど意外でもないくらい世の中は印刷物であふれています。さすがに雑誌や、おやつのラッピングまでは取り扱っていませんが、ラクスルでは名刺、チラシ、パンフレット、冊子、めずらしいものではうちわや箸袋など約20品目の印刷物を扱っています。利用者の方は、品目と仕様(例えば、大きさ、紙の種類や厚さ)・納期・部数等を選択し、印刷データを入稿し、支払いを済ませると、数日後に印刷物が届く。簡単にいうとそんなサービスになっています。

利用者の方にしてみると、ラクスルで注文するとラクスルから届く、という風に見えるのですが、ラクスルでは自社で機械は持たない、いわゆる「ファブレス」でビジネスをしているので、印刷はパートナーの印刷会社にお願いしています。基本的に印刷会社の非稼働時間を活用して印刷しているので、利用者の方には高品質な印刷をより安く提供し、印刷会社の方にとってみれば非稼働時間を有効活用していただくと、まさにWin-Win-Win。

昨年の12月からは、ハコベル(hacobell.com)も立ち上げドライバーの非稼働時間を利用したネット配達のサービスも立ち上げております。前回のブログは主にハコベルの話だったので今回はネット印刷のラクスルの話を中心にご紹介したいと思います。

ラクスルの技術的なチャレンジ

では、ラクスルのエンジニアは何をしているのかというと、当然raksul.comのECサイトを作るのもありますが、様々な技術的なチャレンジに取り組んでいます。

例えば商品マスター。冒頭で約20品目と上げましたが、利用者が注文をするときは、品目の選択(例えばチラシなのか冊子なのか)だけでなく、チラシの場合だと紙のサイズ、紙種、厚さ、特殊加工(折加工・PP加工・ラミネート)等、これらの要素が一つでも変わると、当然値段も変わります。つまり一意の価格を決定するまでに、1品目に対して十数万のプライステーブルが必要となり、さらに納期と部数でも単価が変わってくるので、価格のレコードは数百万に及びます。商品価格を管理するチームがこれらを効率良く管理したり、原価を割って粗利を毀損しないための工夫等、様々な要件に応える必要があります。

発注のメカニズムも非常に複雑です。単純にチラシは印刷会社A、名刺は印刷会社B、と品目が決まれば印刷会社が決まる、という簡単なロジックであれば良いのですが、 品目だけでなく例えば折り方を含めた細かい商品仕様まで見ないと本当に印刷会社が対応できるのかがわからないため、ロジックの複雑性は増します。さらに商品仕様さえ見れば全て判定できるか、といえばそれも違い、生産側の稼働スケジュールも関係しますし、最近だと「◯◯地方向けの注文は別の会社へ発注」と、注文の届け先の判定も必要になったり、これらを臨機応変にビジネスユーザーが設定するだけで動かせるように、ルールエンジンの導入の検討をはじめたりしています。

「印刷」という一見地味に聞こえるドメインでも、様々な技術的な課題解決が必要とされています。特に注文数・売上が拡大する中、ちょっとしたミスでも大きな事故につながるので、ラクスルのビジョンでもある「仕組み化」は極めて重要です。

ラクスル流、技術負債との向き合い方

もちろん、ラクスルのエンジニアが向き合うのは、興味深い技術課題だけはありません。

ラクスルは、おかげ様で非常に幅広い利用者の方にお使い頂いておりますが、創業時代から7年も経つソースコードの上に成り立っているので、技術負債とうまく付き合っていかないといけません。「技術負債」なんてスタートアップあるあるですが、あまりにも規格外の技術負債のため、今年ラクスルに入社したエンジニアの山本にいわせると「味のあるコード」らしいですw。

Facebookのように「半年間サービス開発を止めて、リファクタを行う」というドラスティックなことをするサービスもありますが、ラクスルでは日々「部分的なリファクター」を重ねています。例えば、ある機能を開発している時に、これから変更をかけようとしているソースコードがリファクタした方が良いと判断したら、バックログの計画時に「リファクタのためのタスク」を立てて、その部分のリファクターが終わったら本開発に入る、ということを心がけています。

以前「ウチのコードはほんとヤバイくらい◯◯なんですよ・・・」と現役のGoogleのエンジニアに相談したら「大丈夫だよ。かつてYouTubeもこんなだったから」「えっtまじ!!!」そんな言葉に少し救われながらも、大切なことは「普段からこつこつ改善していく」こと。どの教科書に書いてある当たり前のことをいかに日々やっていくかが重要だと感じています。

  • マジックナンバーをconstに置き換える
  • コード規約を徹底する(一度ファイルを変更する前に自動でリフォーマットをかけてもいいし)
  • リピートしているコードをメソッドに置き換える
  • 大きいメソッドを分解する
  • 等など、、、

仮に、半年間リファクターをしても、その後継続出来なければまた「味のあるコード」に戻ってしまうので。

技術負債は「直す必要がある」からその存在を表すわけであって、停滞しているサービス、あるいは消えゆくサービスなら直す必要もないので「技術負債」なんて存在しない。急成長しているからこそ、あらゆるステークホルダーに求められているからこそ「技術負債」なのです。これはもう闘うしか無い!!

チーム構成、開発の流れ

事業戦略上、割りと流動的にチームは変わっていきますが、現時点ではラクスルには開発部隊が5チームあります。

  • raksul.com を開発する印刷ECチーム
  • デザインや配布のサービスを開発する集客支援チーム
  • raksul.comで受けた受注を生産とのつなぎ込む発注基盤チーム
  • hacobell.com を開発するハコベルチーム
  • サーバーインフラ・社内インフラを開発するインフラチーム

それ以外に、直接開発ではありませんが、アプリケーションサポートを行う「ヘルプデスクチーム」があり、エンジニアに対する様々な問い合わせを一手に引き受け、エンジニアの生産性を超絶支援してくれるチームもいます!

編成はチームごとに変わりますが、スタンダードな構成としては

  • プロダクトマネージャー
  • クリエイティブ
  • フロントエンドエンジニア
  • サーバーサイドエンジニア

という構成になっております。

最近テレビや、ソファー、カーペットが敷かれる「ラクスル工房」ではクリエイティブとエンジニア約20名が、チーム毎に固まって仕事をしています。

仕事の流れとしては、バックログを中心に、スクラム・ライクにレビュー・振返り・計画を2週に一度行い、それ以外の日はスチレンボードに貼ったタスクボードの周りを囲んで毎朝朝会を行っています。

因みに、朝会終了時の集客支援チームの掛け声はオーソドックスに「今日も頑張るぞ。オー!」


さて、色々書きましたが、ラクスルならではの技術チャレンジ、あるいは技術負債に対する姿勢、チームや働き方等、簡単に説明させて頂きましたが、今後もブログで様々な戦いの記録を発信していきたいと思いますので、少しでもラクスルに興味を持っていただければと思います!


新規サービス・ハコベルをPHP/CodeIgniterからRuby on Railsに移行しました

こんにちは、ハコベルの開発を担当している蟻塚です。

2015年12月ハコベル正式リリースの少し前に、PHP/CodeIgniterからRuby on RailsのWAFの移行を行ったのでその際の話を書かせていただきます。
個人的にこっそり調査1ヶ月、業務時間フルで1ヶ月、延べ2ヶ月程度でメイン部分を移行して、その後1ヶ月で残タスクを消化といったスケジュール感でした。

続きを読む


今更だけどPHP7使ってみた

待望のPHP 7.0.0がついに2015/12/03にリリースされました。
っというわけでサクッと検証してみました。

スペック

使ったサーバー: IDCF 500円サーバー x2台
OS: CentOS 7.1

PHP 7.0  インストール

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
yum install php70w php70w-opcache

 PHP7_0
PHP7
でたー。
続きを読む


| by

AWSのt2.nanoを使ってみた

AWSがt2.microよりさらに小さいt2.nanoをリリースしました。
サービスの詳細に関しては EC2アップデートー T2.Nanoインスタンスが利用可能に
参照してください。スペック的には下記の通りです。

Instance Type CPU Memory 価格($/時) 価格($/月) 価格(¥/月)
t2.nano 1 0.5GB $0.01 $07.3 ¥0,891
t2.micro 1 1.0GB $0.02 $14.6 ¥1,781
t2.small 1 2.0GB $0.04 $29.2 ¥3,562
t2.medium 2 4.0GB $0.08 $58.4 ¥7,125

($1.00 = ¥122で計算 2015/12/18時点)

インスタンスを立ち上げる

続きを読む


| by

ブラウザとバーコードのいい関係

初めまして。入社して3ヶ月ちょっと、エンジニアの天野です。

さて、

はじめに

先日、運用中のWebシステムの一部に関して、ここはバーコードで楽にしたいねーという話が上がりました。
紙でやりとりが必要な作業があり、それに印刷されたバーコードをスキャンして、対応する情報をブラウザ上に表示するというものです。(それまでは人力で紙の情報とWeb上の情報の紐付けを行っていました)

バーコードリーダーという単語から、コンビニやスーパーのレジで使用されているあのゴツイやつを連想してしまった僕。
「それって組込み系言語でがっつりネイティブアプリ作んなきゃなんでしょ。うひょー」とか思っていたわけですが、実際はJavaScriptでさっくり実装できました…

ということで、今回はWebシステムとバーコードを連携させたお話です。
続きを読む


git stashで新規追加したCSSや画像も一時的に退避させる方法

はじめに

フロントエンド周りを担当している野口です。

昨年の8月に入社して、約9ヶ月が経過しようとしています。入社当時はバックエンドのエンジニア5名(インターン含む)、フロントエンドエンジニアは私ひとりで、デザイナーは不在でした。現在はというと、バックエンドのエンジニア10名(インターン含む )、変わらずフロントエンドはひとりで、デザイナー2名といったメンバー構成です。

作り手の人数が倍以上になり、プロジェクトも複数走り、GitHub のトピックブランチの数が入社当時と比べてえらい増えたな〜と。10名のバックエンドのエンジニアに囲まれ、複数プロジェクトやタスクを並行して作業しているので、ブランチを切り替えることが頻繁に発生します。急な修正もあったりしますし。

そんな時はおなじみの git stash で一時的に変更を退避させます。commit してしまい、あとで reset するとか他にも退避させる方法はありそうですが、さっと退避できるので git stash を使っています。

続きを読む


Yahoo!ジオコーダAPI を使ったアプリケーションの作り方

エンジニアの大嶋です。

先日、吉岡がブログでGoogle Mapsを使ったアプリケーションの作り方を紹介しましたが、

今回は同じAPI でも

Yhaoo GeoCoding API

についてご紹介したいと思います。

ラクスルのポスティングのシステムの裏側ではGoogle Maps APIだけではなく、
ケースによってはYhaoo APIを利用しています。
続きを読む


Google Maps を使ったアプリケーションの作り方

お久しぶりです。吉岡です。

ラクスルでは、折り込みポスティングのサービスを提供していますが、
これらのサービスで使われているのがGoogle Maps APIです。
googlemaps_09

入力された住所から地図を表示して、配布エリアのポリゴンを表示する、
などのことができるとっても便利なAPIです。

そんなラクスルのサービスには欠かすことができない、
Google Maps APIの使い方、およびアプリケーションの作り方について今回は書きたいと思います。

続きを読む


ラクスルの開発環境・開発体制 Early-2015

12月に入社した @okapon_pon です。

ラクスルには8人目の開発メンバーとしてジョインしました。(インターン生1人を含む)

現在ラクスルではサービスの機能拡充と合わせて、開発環境改善プロジェクトというものに着手しつつあります。

私が入社した当時の開発環境は、弊社大嶋が以前書いた「ラクスルの開発フローについて」 にある通りGithub、skype、redmineを利用しており、加えてmediawiki、Gyazo-client、cacooといったツールを利用しています。

これらのツールは今でも利用しているのですが、私が入社してからの3ヶ月ほどで開発環境・開発体制も変わってきましたので紹介したいと思います。
続きを読む


ノンエンジニアでもOK。TableauでSQLの代わりをしちゃおう

プロダクト開発部のやすいです。
この前の安井と同一人物ですが、基本的には平仮名のやすいの方が字面が好きなので、
そちらを使わせていただきます。

過去の記事で、ノンエンジニアでもSQLを使えるようになろう的なブログを書いていましたが、
やはり慣れなかったので、Tableauで出来る方法を考えました。

MySQL社内勉強会をノンエンジニア向けに実施してみた

Tableauを使ってSQLと同じことをやるということは誰でも出来るので、
パクッてもいいのよ。と思いまして書きたいと思います。

●下準備(データ接続)

とにかくデータに繋がないことには始まりません。
簡単データの繋ぎ方講座から。

タブの「データ」から「データを接続する」を選択。うちはMySQLなので、そこから基本情報を入力します。
各自、エンジニアにパスワードなどは聞いてね。ちなみに、MySQLに接続するにはODBCが要りますのでお気を付けを。
585948aeca0724dca152cab1c0557e54

データの繋ぎ方です。
SQLを書かなくてもデータを繋げます。
テーブルとテーブルを繋げるのはドラッグ&ドロップするだけ。簡単ですね。
ただ、それだけだと繋げたことにならないので、2つの間にある〇みたいなのをクリックすると
下の画像みたいなものが出てきます。
「内部」って言うのが、選んだ変数の中で共通にあるものを残すという意味で、
「左」って言うのが、選んだ変数の中で左にあるデータは全部残すという意味で、
「右」って言うのが、「左」の逆です。絵でなんとなく分かります。

これで、データの接続はOK簡単ですね。
もし、個人情報を持ちたくないなぁなんて場合は、タブにある「データ」の「カスタムSQLに変換」って言うのを押すと、以下の画像のような画面が出てきます。この中で、個人情報に該当する行を消せばOKです。
ラクスルの場合はメールアドレスですかね。
aaaaaaa

下準備はこれでOKです。
後は、ピボットの感覚でグラフがほいほい書けます。
気分はデータサイエンティスト!
df9ebe45810505143cf4faa6dd36c29f

●対象の一覧を出したい場合

例えば、「東京で売上げが1万円以上のお客さんを抜き出したい!」みたいな時ってありますよね。
そんな場合は、大体エンジニアに頼んでSQL叩いてもらうってのが定番だとは思いますが、エンジニアが忙しそうな時は超気まずい。
実は、Tableauで出来ちゃうんです。

1.フィルタに条件を入れ込みます。今回は「県名:東京」と「売上げ:10,000円以上」60f6d139af39c106444542d77b4e9d42

2.適当に見たいデータを行に入れます。今回は「ユーザー」と「性別」と「誕生日」を入れました。

a592b6830596a073323af4b958951ca7

3.後は「分析」タブの「データ表示」して、すべてエクスポートをするだけ。後は煮るなり焼くなりご自由に。

4f957da7bbd6ade0f795eed9843e4987

●エクセルみたいに集計した数値を出したい場合

Tableauにも関数がたくさん用意されています。
本当に多い上に、割と分かりやすくて簡単です。
よく使う関数ベスト3

~第1位~「COUNTD([あ])」

「あ」の数を被っているのを1個だけと数えてくれる関数です。
パラメータを指定する「メジャー」の中にある「カウント(個別)」と一緒です。
しかし、なんとも複合的に使うのが多いのがこのCOUNTD。だから、覚えておいて損は無いです。

COUNTD([ユーザー])

とシンプルですけど一番使います。次の2位にも使ってます 笑

~第2位~「CONTAINS([あ]、い)」

もし、「あ」の中に「い」が含まれていたら、trueにするって関数。
集計する時はくっつけちゃって、trueをカウントしちゃいますね。

COUNTD(CONTAINS([ユーザー],”やすい”))

的な感じで、やすいがユーザーの中でどのくらい含まれているのかを数えてくれます。
超便利。

~第3位~「IF あ THEN い ELSEIF う THEN え ELSE お END」

もし、「あ」だった時は「い」で、それ以外の「う」だった時は「え」で、それ以外は「お」というもの。
条件に合わせてフラグ立てする時とかに使えます。あいうえおの部分に数式も入るので便利。
条件式にCONTAINS()とか使うと、含まれている時などで使えます。
具体的には以下のように使います。

IF [ユーザー]=やすい THEN 1 ELSEIF [ユーザー]=とねがわ THEN 2 ELSE 0 END

もし、ユーザー名が「やすい」だったら、1で「とねがわ」だったら2でその他は0ってことですね。
集計とかに使いやすいです。

まとめ

意外と、エクセルで出来ることは大抵出来ちゃうTableau。
さらに、SQLが書けなくても、同じようなことが出来てしまいます。
データの抽出なんかをエンジニアにお願いする時代はもう終了。
みなさんもTableauを使って、快適データライフを送ってくださいね。
といいつつ、やすいも使いこなせているのか自信は無いですが・・・

PR

ラクスルでは現在WEBディレクター・WEBデザイナーを絶賛募集中です!
<ラクスル採用サイト>