さくらインターネット株式会社
Shuji Yamada (山田 修司)
@uzyexeJul 7, 2019
ここにハマった!
Dockerコンテナホスティング「Arukas」の裏側
1
さくらインターネット所属 シニアプロデューサー
「さくらのクラウド」運用担当などののち、
現在はコンテナホスティング「Arukas」の開発に着手
(山田 修司)
2
SHUJI YAMADA
つまり、「コンテナ馬鹿」
書籍執筆イベント開催Arukas
社名が変わりました
!3
社名が変わりました
大文字の「I」が、小文字の「i」に
!4
本日のハナシ
•Arukasのご紹介
•Arukasでハマったハナシ
•まとめ
!5
6
コンテナをもっと手軽に
Run
Dockerized Applications
100,000+
Dockerized Applications
Docker Hubにあるイメージをすぐに起動
EASY DEPLOY
7
登録ユーザー数

21K+
コンテナ起動回数 (累計)

320K+
稼働イメージ数 (タグ別) 

2K+
ユーザーの出身国 

84カ国以上
Something for everyone
(2019年7月時点)
8
コントロールパネル
CONTROL PANEL
!9
構成図
本番環境と同等の環境をローカルマシン上で再現。
• docker-sync-stack start で開発環境を起動
• git で作業ブランチを切って、コード編集
• ciecleci build でテストしてから、git push
• 定期的に古いファイルをクリーニング・・・

(docker system prune とか docker volume prune とか・・・)
コードを書ける人なら誰でも初日からコミットできる!
開発環境
!10
ローンチ当初、Railsエンジニアは1名だった・・・!
Arukasのサーバサイドエンジニアのお仕事
• Ruby on Rails によるAPIの設計&開発
• 大規模バッチ処理の設計&開発
• データベース論理設計
• Ember.js によるフロントエンドの設計&開発
!11
rake stats
!12
最近の開発事例
• 電話認証&SMS認証
• Alipay支払いに対応
• 排他制御
• 機微情報の暗号化
• OAuth認証を廃止
!13
Twilio を使って電話認証を実装
• ある日突然、中国との電話による通話ができなくなった。
• 平均3分未満の通話元からの通話が拒否される仕様に・・・。
• いやいやいやいや、電話認証できないじゃん・・・。
• SMS認証を急遽実装して回避した。
• 最初から実装しとけばよかった・・・。
電話認証
😱
!14
SMS 認証を実装したものの・・・
• 「SMSで登録完了できない」というお問い合わせがチラホラ
• 登録済みの番号からの新規認証は弾いているが・・・。
• SMS番号共有サイトに掲載された番号を使って試行されてる・・・
• 電話認証&SMS認証は重複排除しとかないとアテにできない。
SMS認証
🤔
!15
Alipay支払いに対応
💳
🙅
当初、決済手段はクレカ払いにしか対応してなかったが
• 中国ユーザーは大多数がクレカを持っていなかった・・・。
• Stripeは日本事業者向けには銀聯カード決済に非対応。
• 中国ユーザーのためだけに、Alipay 支払いを実装
• だが、中国本土の人しか実際の支払いが試せないらしい!
• リリースしたけど、本番環境でテストできなくてドキドキ・・・
!16
排他制御
!17
コンテナは、起動/停止を「めちゃくちゃ」繰り替えされる
• キューが変なタイミングで重複して飛んでくる。
• 課金の起動/停止を記録するテーブルで発生すると悲惨。
• 排他制御で潰していくのがベター。
• sidekiq-ent ならキューをユニーク制御できるが・・・。
• DBにUNIQUE制約を付与して回避することもできるが・・・。
• どこで発生しているかが掴めなくなる。
機微情報の暗号化
😡
😖
パスワードや連絡先情報は暗号化していたが
• コンテナの ENV、CMD も暗号化していく方針に。
• 実装後、コンテナにENVが展開されないというクレームが続発
• マルチバイト文字をデコードできてなかった・・・。
• 完全なケアレスミス(英語しか考えてなかった)
!18
GitHub連携してサインイン/サインアップできるようにしてた
• 「@開発者向け」アピールのつもりだったのだが、、
• 使ってくれるユーザーが予想以上に少なかった \(^o^)/
• 「メリット < メンテナンスコスト」になったので廃止・・・。
• パスワードログインとフローを分離していると、

メンテナンスコストが増加しやすい。
OAuth 廃止
!19
開発リソース不足 [人手が足りない]
コミュニケーション不足 [調整コストをケチりがち]
ヒューマンエラー [作業コストをケチりがち]
ハマった原因ってなんだろう?
予期せぬトラブル [回避しようがない]
!20
開発リソース不足 [初期段階に投資したほうがいい]
コミュニケーション不足 [議論から逃げないほうがいい]
ヒューマンエラー [試行錯誤した上での失敗は仕方ない]
改善するにはどうすればいいだろう?
予期せぬトラブル [迅速に対応できるようにする]
!21
恥はどんどん公開して、成仏させよう
!22
THANK YOU!
23
(C) Copyright SAKURA internet Inc.
24

ここにハマった!Dockerコンテナホスティング「Arukas」の裏側