CircleCI 2.0 をつかったら Rubyで invalid multibyte char (US-ASCII) が起きた

日本語文字列を読んだ瞬間↑のエラーで死んでつらい気持ちになった

使っていたのは circleci/ruby:2.3.4 のイメージ
(2.4.2じゃないんですか!?という突っ込みお待ちしています)

結論としてはデフォルトのままだと LANGのja_JP.UTF-8 が使えない状態だったから

version: 2

jobs:
  build:
    docker:
      - image: circleci/ruby:2.3.4
        environment:
          - LOCALE=ja
          - LANG=ja_JP.UTF-8

    steps:
      - checkout
      - run: sudo apt update
      - run: sudo apt install task-japanese
      - run: echo 'ja_JP.UTF-8 UTF-8' | sudo tee -a  /etc/locale.gen
      - run: sudo locale-gen
      - run: sudo update-locale LANG=ja_JP.UTF-8

こんな風にしたらうまく行った
CircleCIのイメージってUbuntuじゃなくてdebianベースなんですね

MySQLは主キー以外でもauto_incrementができる

create table tbl_name(
  `id` int(11) NOT NULL,
  `hoge` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`),
  KEY (`hoge`)
)

なるほどな
なおAUTO_INCREMENTするカラムはKEYになってないといけないので注意が必要

ridgepoleでこれをやろうとしたらできなくてむむむーんとツイートしたら速攻で対応していただけた。神かな?

ありがとうございます!!!

ISUCON7で人権を得ることに失敗した

isucon.net

同僚が会社のSlackで出ませんか?っと言っていたので手をあげる形で参戦してきて、結局今年も人権を得ることは叶わなかった。

終結果は↓こんな感じ

f:id:Chiastolite:20171023142152p:plain

主にやったこと

  • 画像周りの処理改善
  • /fetch のN+1解消
  • 入れておいたよさそうなインデックスを適当に追加
  • channel_listの取得周りをmemcachedでキャッシュ化

画像周り

今回のキモだったアイコン画像の配信周り

とりあえず画像をDBから配信するのつらすぎってことで画像へ吐き出しをしてnginxで配信できるようにした。 ためしに1台で動かしてスコアが結構出てわいわいしてたら、複数台をベンチ対象にするとあたりまえだけど機能しないことに気付いてわちゃわちゃしてた。

いろいろ考えたけど「この際画像だけは1台から配信すればいいんじゃね?」と考えて、メンバーにnginxの設定を丸投げした。無茶ぶりに答えてくれた同僚には感謝の念を禁じえない…

channel_listのキャッシュ化

チャンネル取得が内部で呼ばれることが多く値はユーザーに依存しない言われたので、DBサーバにmemcachedを入れて適当にキャッシュさせることにした。 これだけでスコアが2万ぐらい上がった記憶がある

反省

結局最後まで Cache-control: public に気付くことはなかったので勝ち目はなかった。 事前の打ち合わせで最近Web界隈で話題になったことを上げていってたりはしたんだけどCDNの話が抜けおちてた…

また計測がおざなりになっていてアプリコードから「ここはさすがに遅いだろうなー」っていうところを直すような対応をしてしまっていた。 上位チームは計測をしっかりしていて戦略的だったので、ここは次回の参考としたい。

最後に

運営のみなさん、2日間の開催と準備おつかれさまでした & ありがとうございました。 ベンチマークツールがすごい快適でした!

チームメンバーの@jacksmam0、@hachi-eiji にも感謝感謝です😇

Heaven's Feel を観に行く

14日の立川極爆です
FGOのチェックインも忘れないようにしないと

最近の成果

  • クエリを改善してAPIのレスポンスタイムを100msぐらい改善
  • Rubyのアップグレード
  • AMIの入れ替え

文字にすると地味だけどめっちゃ大変な作業だったんすよ……

Rubyistが知っておくべき広島のこと(直前版)

もうすでに宿も交通手段も飲みに行く店も決めたみなさんにこれ以上知るべきことがあるのか?ということですが

カープがマジック 1なんですよ

去年25年ぶりにセリーグを制した我らがカープですが、優勝を決定した場所は東京ドームでした(ちなみにRubyKaigi2016の最終日でした)
今回は地元での優勝決定か!?と街は大変盛り上がっているところです(多分)

せっかくだし試合みてみるか?と思うかもしれませんが、残念チケットはとっくに売り切れております・・・
一応 ただ見エリア があるので時間があったら眺めてみてもいいかもしれませんね

おそらく土日に優勝は決まると思いますが、その場合街が異様に盛り上がってると思いますし↓のように交通規制も入りますから気を付けてくださいね
カープのリーグ優勝決定時の交通規制について - 広島県ホームページ


なお、熱狂的カープファンである僕は諸般の事情により行けなくなってしまったのでマジでつらい・・・
みなさんRubyKaigiと広島を楽しんできてください

TokyuRuby会議11で広島について話しました

今年のRubyKaigiの会場は広島ということで、TokyuRuby会議11 にて「Rubyistなら知っておきたい広島のこと」というタイトルで話してきました。

こんなタイトルにしておいて何ですが、僕自身は生まれが広島というだけであんまり詳しくなかったりします😅
(そもそも生まれたのは広島市とはかなり離れた福山市)

発表では主に交通、食事の話をしました。
広島にどう行くか?という話をするときに前々職のサービスのスクショを使ったら、会場が「どのサービスですか?」と合いの手が入って、直後にサービス名のスライドを出すというきれいなコンボが決まったりしてました。

お好み焼きはとりあえず有名なところと僕がよく行くところとかを出しておきましたが、あんまり人が殺到すると困るので↓などを見て適当に分散して欲しいところ。

持ち時間ではここぐらいまでしか話せなかったのですが、後で2分話す時間をもらえたのでスライドの残りの部分、カープについて話せたので大満足です。
そういえばLT王に別途エントリが必要とわかってなくて1票ももらうことはできませんでした。それだけが残念…

なお、スライドは画像だったりの差し替えなどが必要な部分があるので、後日公開します。