最近、採用目的(YAPCで流れまくってた動画)の技術者向けアピールに積極的な印象のある、GMOペパボの第3回ペパボテックカンファレンスに参加してきました。第1回は4/19に東京開催、第2回は7/4に福岡開催。そして今日8/29が第3回。2ヶ月に1回ペースで、クオリティの高い発表を揃えた会を開催できるパワーはすごいですね。
全体的にクオリティの高い発表続きでしたが、個人的にはカラーミーショップのデザイナー @shikakun さんの講演と、YAPC::Asia Tokyo開催スタッフ @uzulla さんによる3回もの(!)のLTが特に良かったです。
@uzullaさんの3件目のLT「YAPC::Asia Tokyoでベストトークを取る方法」は、エンジニアがいかに自分を売り込んでいくか、という話として非常に考えさせられました。僕自身、1月に転職して以来、自分の売りをどうやって作っていくべきか迷走しているところなので……。
上記のおすすめ発表2件は、まだスライドが公開されてないのですが、YouTube(第3回ペパボテックカンファレンス #pbtech)で動画を見られるみたいです。
- 動画の2:46:00頃〜:今夜、インターネットの片隅で。 〜ウェブサービス開発ちょっといい話〜 (@shikakun)
- 動画の4:40:00頃〜:LT YAPC::Asia Tokyoでベストトークを取る方法 (@uzulla)
以下、僕が特に興味のある分野の、運用自動化や開発技法に関する講演中心のメモです。
10年動き続けているブログサービスのエンドツーエンドを書いた記録 (@kenchan)
自己紹介
- プロダクトオーナーシップの社内勉強会
- 論理削除 Casual Talks
テストを書くに至った理由
- Nyah(プライベートクラウド)の、JUGEM移設のPO的なポジションで活動している
- JGセット(WebサーバとDBサーバのセット)が39セット → 移設のボトルネック
- 新規構築のリリース前に使用するチェックリスト:手動・目視確認用の350項目 → 手作業は無理
テストに使ったライブラリ
- Turnip, Capybara, Poltergeist (PhantomJS1系)
- Turnip -> Cucumberより軽い書き方ができる
前提
- ステージング環境、もしくは本番環境に対してエンドツーエンドテストを実行
- だからDBを直接触らない
Tips
- デバッグ用のstepを定義(スクリーンショット取る、など)→既存アプリにテストを足すときは便利
- 「◯◯の中にある××」という表現でサブステップを定義
- 副作用のある作業はタグを付けて、必要な時しか実行しない
- WYSIWYGエディタのテスト → JavaScriptを直接叩いてテスト
PhantomJS vs capybara-webkit
- どっちもどっち。両方試して、そのときに安定している方を使うと良い。
現状
- 100/350 の自動化完了。無料ユーザ向け機能から順に移設中。
Q: Turnipのような抽象化されたツールでテストを書くと、テストを書ける人が限定されないか?
- A: プログラミング言語で書くとなんでもできてしまう。日本語で書くと、あまり変な書き方はできない。まずはテストの外側を、他の人でも読めるようにしたかった。
MogileFSをバックエンドとしたPrivate S3の作り方 (黒田 良, @lamanotrama + 伊藤 洋也, @hiboma)
30days Album
- perl製のMogileFSを使用
- 750TB, 22億オブジェクト
- 7年間でデータロストは1回(4個) ← 不幸なレア条件が重なったため。改善中
vs OpenStack Swift
- S3互換APIを備えているのはメリット
- 十分安定しているMogileFSから移行するほどのメリットではない
vs AWS S3
- コスト面で、オンプレミスのほうが有利
オブジェクトストレージ: Bayt
- 30daysのMogileFSに、Baytのコンポーネントを追加
- gateway: Nginx + ngx_mruby
- api: Rails + Unicorn
- Munin, Kibana, BigQueryでメトリクス可視化
問題
- mogilefsdがスケールしない(子プロセスが700を越えたあたりでスループットが大幅低下)
- nice値を調整して解決
- mogilefsdがスケールしない(子プロセスが700を越えたあたりでスループットが大幅低下)
ngx_mrubyでreproxy処理を実行
- APIがX-Accel-RedirectとX-Reproxy-URLというヘッダを返す
- X-Reproxy-URLに含まれるURLのうち、片方へのアクセスが失敗したら、もう片方に取りに行く
- オーバヘッドは問題にならない程度
データ移行
- S3互換のため、S3クライアントで移行できた
- 3TB、1億オブジェクトを移行済み
- 今後:全サービスのデータの移行、マルチロケーション化、動的画像リサイズ機能の追加
後半:API編
S3互換API
- S3互換APIを作る ≠ S3を作る
- OSSクライアントを利用可能なように作る
- SDKは仕様が大幅に変わることがあった(Rubyのv1 -> v2)ので、SDKをいじって開発するのは難しい
- 最初はさくらの「オブジェクストレージAPIリファレンス」(これもS3互換)を読んで参考にした
APIサーバの実装
- mogilefs-client: RubyのMogileFSクライアント。Unicornの作者製。読みやすい
- MogileFS側がボトルネックになっており、APIサーバをRailsで実装しても問題無いと判断
- rails-api でダイエット
- XMLパーサはoxが速い
- New Relicで性能測定
Q: ngx_luaではなくngx_mrubyを採用した理由は?
- A: 自社に開発者がいること、Rubyで書きやすいこと
LT H2OとPHPの話 (@uzulla)
- H20は、try_files (Nginxの設定)的なものを簡単に書ける
- Nginxのtry_filesは大変
- include fastcgi_params; のなかに設定がたくさん書いてあって、読んでみると闇があるのがわかる。
- Mozillaの提供する、SSL設定を作成するサイト: Generate Mozilla Security Recommended Web Server Configuration Files
歴史あるwebサービスに携わって2年半の間に起きた事やった事 (Masataka Kono, @mapyo)
自己紹介
- カラーミーショップのエンジニア。アダ名は「ぼいらー」
- カラーミーショップは10年以上の歴史があるサービス
- 2年半前に入社。今回の発表は、入社してからいままでのサービス改善の内容
GitHub Enterprise導入
- PHP-CS-Fixer使ったり不要なコメントを消して、プルリク、レビュー、マージ
- 本来のコード修正はそのあとで実施
- 順番に毎日交代でレビュー当番
テストの導入
- RSpec + Capybara
- E2Eテストの正常系だけでも作るのおすすめ
- PHPUnit
- RSpec + Capybara
Composer導入
- 第1段階: Composer導入
- 第2段階: vendorディレクトリをバージョン管理から外す
- 社内用のComposerライブラリ作成
- composerに対応したgithubリポジトリの作成 - Qiita
Wheneverでcronの変更を自動化
MySQLバージョンアップ → Eloquent ORMの導入
- LaravelについてくるORM
尋常じゃない速度でドッグフードを食べる方法 (Yuta Kurotaki, @kurotaky)
自己紹介
- heteml
- 最近はPEPABO WiMAX (Sqale)というチームで開発
- Yokohama.rb, Rails Girls coach, るびまの編集手伝い
- 最近はWeb決済に興味ある
Sqale
自分で作ったWebアプリをSqaleで動かしてみる
- 個人開発のアプリを動かす。新機能が出たらすぐ試せる → 報告
- 新規事業で使う。新規事業の開発を進める中で、Sqaleの機能も修正
サポート
- 毎日お問い合わせ対応中
- GitHubでもSqaleのIssue受付
まとめ:自社製品を使い倒して、製品を改善していこう
ドックフーディング実績シートを作った
- エンジニア実績シートを参考に
- 「エンジニア実績システム」を導入した - delirious thoughts
今夜、インターネットの片隅で。 〜ウェブサービス開発ちょっといい話〜 (@shikakun)
(※スライド未公開)
自己紹介
- カラーミーショップのデザイナー
- 新卒4年目
「ショッピングカート」の画面を作りなおすプロジェクト
- 去年の9月から開始
- 「最高のショッピングカートを作って」
動画を作った
- 動画を作ってデモしたことで、実現方法などの議論が深まった(Angular.js使おうとか)
- 動画を作った後でprottやinvisionがあることを知った。これを使えばよかったかも
詩を書いた
- 後輩が提唱している「哲学駆動開発」
- エモすぎたとか、自分の思いだけで書いたとかで、チーム内でのジャッジには使えなかった
- チームメンバで詩集を作ってはどうか
CSSの改善
- 2万行に至るCSSファイルになっていた
- Hologram でスタイルシートを書き直した
- スタイルガイドを自動生成した → 開発者が自分でCSSをいじれるようになった
ユーザーテスト
- コレじゃない感があった
- 動画を撮影
- 半年かけて開発したのに、買えない人が出てきた
- 開発チームみんなで見た → 改善点をリストアップ
- 改善後のものを以下のURLで公開中(実サービスにはまだ載っていない)
ポエムも一種のプロトタイプ
LT やぷしぃおもしろきかく! 銅鑼パーソン総選挙 (@uzulla)
- 銅鑼パーソン総選挙の投票サイト
- Conoha(VPS)の一番安いプラン
- devブランチのPHP7
- 最大1200万投票/日
- 投票自動化するゲームと化した → SNS認証が必要なので犯人は割れている → 1to1対応
OS X アプリケーション 開発普及活動 (@nakajijapan)
自己紹介
- iOSエンジニア、以前はWebエンジニア
- minne
- 今日はOS Xデベロッパとして話す
CocoaでのOS Xアプリ開発について
Teitenというアプリを開発した
- Macのカメラを使って、ずっと写真を取り続けるアプリ。最終的に動画にする
Cocoaの機能説明色々
- (※自分に知見がない分野なので、さっぱり頭に入ってきませんでした……)
YAPCで発表されていたElectronをこれから試してみる
仮想通貨自動トレード記 Part1 〜 国内Bitcoin取引所で裁定取引したら儲かるの? 〜 (yuma300)
仮想通貨自動トレード記 Part1 ~ 国内Bitcoin取引所で裁定取引したら儲かるの? ~ | Stobo
自己紹介
- 脇本佑磨(わっかむ)
- JUGEMの開発
hubotで裁定取引するボットを開発
- hubotの開発はcloud9がすごく便利
rippleにも注目
LT YAPC::Asia Tokyoでベストトークを取る方法 (@uzulla)
スピリチュアルトーク枠
トークの内容に必要なもの
- 前振り(お題、コンテキスト共有)
- 対象者の想定
- 実際に話すトピック
- 予習できるなにか → おもてなし
- 意気込み
ブランドについて
- その日いきなりは無理
- ちまちまとブログや発表、1年くらいあればいける(?)
- 「無駄な時間にはならないかな?」程度に「信用」されよう
- 自分をどういうブランドに見せるかは考えたほうがよい
自分が面白いと感じるトークをとりあえず真似てみる
トーク以外も、エンジニア人生もこういう感じなのでは?
皆さん「面白い事」をやって、周りから「面白い事やってるな!」って思われてます?面白い人はやっぱり強いですよ!