包丁一本さらしに巻いて

カンムを支える技術

入社して4ヶ月くらいたったので一旦まとめておきます。 フォーマットはどこかで見たことがある形ですが、その通りです。 完全に参考にさせて頂いてます。

仕事

クレジットカード会社様と協力し、オンラインカード明細にクーポンを出してます。

サービスの詳細は以下から。

Kanmu Card Linked Offer

組織

  • 社長
  • デザイナー
  • 営業
  • 総務
  • エンジニアA
  • エンジニアB

計6名

achikuはエンジニアBです。エンジニア絶賛募集中です!

https://kanmu.co.jp/jobs/engineer

言語

Python

カンムが提供するプロダクト全てに利用されています。特に強制しているわけではないのですが、今のところ全てPythonでまかなえているため、 今後もPythonで行けるところまで行く予定です。3.xへは利用しているWeb Application Frameworkが対応するタイミングで移行を考えています。(Django 1.7から)

エンジニア3人(社長含む)は全員Python好きです。

CoffeeScript

フロント側はCoffeeScriptで書かれています。JavaScriptで書かれていた部分も最近置き換えました。正直自分はまだしっかりCoffeeScriptを把握できてないので今後じっとり触っていきたいです。

Sass

フロント側のマークアップは全てSassに移行しました。デザイナーが主に利用してます。バックエンドの人でも学習コストそんなに高くなく利用できて重宝してます。 CoffeeScriptと合わせてgruntを使ってコンパイルするスタンダードな使い方。最近はカンム独自CSSフレームワークを作成中で近日公開予定です。

HiveQL

ログはAmazon EMR上にHadoop + Hiveを立ち上げて集計し、S3に格納後、DBに入れる方式をとっています。現在絶賛リファクタ中で、ログ集計基盤の設計方針ベストプラクティスを研究中。

Scheme

SICPの勉強用に利用。

reStructuredText

主にプロジェクトのドキュメント用に利用しています。GitHubの自動レンダリングにお任せしており、Sphinxは現在利用していません。お客さん用のマニュアルの類が必要になった際は使う予定。

Markdown

GitHubとTrello使う時は大抵Markdownにお世話になってます。

環境

OS

Ubuntuの最新版をメインで利用しています。

Packer

ローカルで使うBoxファイル生成に利用しています。時雨堂さんのPacker Templateを利用中。 shiguredo/packer-templates

Vagrant

VirtualBoxと組み合わせて、ローカルに環境を作成する際に利用しています。VMWareは使ってみたいですが、まだ未検証のステータスです。

VirtualBox

Vagrantで仮想環境を作るために利用。

Fabric

まだ管理すべきサーバ台数 x 種類が小さい為、プロビジョニングもデプロイもFabricを利用しています。fabtoolsと併用することで、スタンダードなインストール/設定は非常に簡潔に書けて気に入っています。また、トランザクションが多い部分はAWS Elastic Beanstalkを利用しており、デプロイの度にAMIからサーバを作りなおしているので冪等性があんまり関係ないってのもあります。

ただし、今後サービスが拡大し、管理するサーバの種類と台数が増えた際には、インストールするパッケージの種類やサーバの役割等を細かくモジュール化して管理していく為の別の選択肢作っておきたいため、Ansibleを少しずつ触り始めています。

サービス

Google Apps

  • Gmail
  • Google Calendar
  • Google Drive

Trello

今年に入ったくらいから導入し、まだ運用方法に関しては試行錯誤中の部分もありますが、だいぶ軌道に乗ってきました。UserVoiceという会社の使い方の中から、“Current Development Board"の部分を抜粋して利用してます。3人で約2週間に一度機能追加、デザインA/Bテストをリリースし続けている現在の開発スタイルにはマッチしてますが、今後もずっとこのスタイルを続けるかどうかは引き続き検討中です。

How we use Trello & Google Docs to make UserVoice better every day

Trelloを採用した際の要件抜粋

  • 人軸で何をやっているのか、タスク総量がどれくらいなのかがすぐわかる(メンバーをアサインしてフィルタ)
  • 次のリリースまでに何が完了していないといけないのかすぐわかる(NextUpボード参照)
  • 今何が終わってて何が終わってないのかがすぐわかる(In Progress, QAボード参照)
  • バグ、新機能、リファクタのタスクがすぐわかる(ラベルを使って対応)
  • 安い(今はお金があんまり無い)

タスクの進捗だけではなく、機能追加時のディスカッションや、各リリース毎の振り返り(KPT)にも利用できて重宝してます。コードに直接関係しない部分は、後述するGitHub Issueよりもこちらで議論する事が多いです。

Scrum for Trello

ChromeのエクステンションとしてScrum for Trelloを入れています。これを入れるとTrelloの各カードに対して予定と実績が入力できるようになります。予実の差分を毎週チェックし、クオリティーとスピードのバランスがとれたリリースができるようにチーム内で話し合ってます。

HipChat

非常に重宝しているチャットサービス。営業からエンジニア勢への相談事項、お知らせ、エンジニア間のコミュニケーションは込み入ったものでなければ全てこの中で完結させています。また、後述のdrone.ioからビルドの通知を、GitHubからはPush時/コメント時/PR作成時にノーティフィケーションを流すようにしています。

原則ココさえ見ておけばエンジニアは生活できるように、あらゆるサービスのノーティフィケーションを流すようにしてく予定です。

drone.io

CIサーバとして利用しています。非常にシンプルに設定を記述できる、且つ廉価なのでセットアップは楽なのですが、いかんせんノーティフィケーションの方法がメールだけなのが痛い。一応ビルド成功時にHipChat側に通知を送るように仕込んでいるのですが、知りたいのはむしろビルド失敗時だったりして、そうするとHipChatのAPIを叩けなかったりと色々難儀です。

現在乗り換えを検討中。

GitHub

ほぼ全てのリポジトリはGitHub上においてあります。技術的な相談、指摘、質問は全てプルリクエスト内で実施。新機能追加時には、設計の内容認識合わせをした後にWIP(work in progress)のPRを作成して、そこでの議論をベースに改善していく形をとっています。また、ChromeのMISAWA:MDを利用させて頂いており、殺伐とした議論にイラつきと若干の和みを同時に投入する習慣がついています。

GitHub Issueはアサインされている人軸で絞り込めず、誰が何をやっているのかの把握とタスク分配がやりにくいので、バグ、機能追加の仕様等は全てTrelloに集約しています。

Amazon Web Services

大変お世話になってます。

  • VPC
  • EC2
  • S3
  • Elastic Beanstalk
  • Elastic MapReduce

Sentry

現在試験的に利用中。

New Relic

現在試験的に利用中。 すごいいいんですけどお高いんですよね。ちなみにこの前アメリカのNew Relicから電話かかってきてmoquada氏がテンパッてました。