[レポート]YAPC::Asia TOKYO 2015 Day 2@五十嵐

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

五十嵐です。今回も私が聴講したYAPC::Asia Tokyo 2015 Day 2のトークの様子をお届けします!また、最後にこの3日間で私が聴講した全てのトークの中から、よく登場したキーワードをランキング化してみました。

それではどうそ!

Mackerel開発におけるScalaとGo、そしてPerl

P1080434

株式会社はてなよりSongmu氏のトークです。

Mackerelとは

  • はてなの社内ツールから始まったモニタリング監視ツールで現在はSaasとして提供
  • 監視対象サーバから送信されるメトリクスを集計し、アラートやグラフ表示やモニタリングが可能
  • 3分で利用開始できる
  • アラートはメールやSlackに通知できる
  • 外形監視(URLクローリング)も対応

Mackerel開発における言語多様性について

Mackerelの開発には適材適所でいくつかのプログラム言語を採用しているということで、それぞれの言語の向き不向きや使い所についての知見を紹介されました

Scala

  • 使っているところ
  • サーバサイドをPlay Frameworkで実装
  • 採用理由
  • ミッションクリティカルなサービスなのでかっちりした言語を使いたかった
  • 静的型付けがる
  • Javaのライブラリが使える
  • 事例が豊富など
  • 記述の柔軟性が高い
  • 社内で関数型を書きたい人がいた
  • 実際にどうだったか
  • 良い点
  • 関数型が楽しく書ける
  • LL的な自由さがある
  • Optionが便利
  • 型に守られているのでリファクタリングしやすい
  • バグの混入数も少なかった
  • 悪い点
  • コンパイルやテストに時間がかかる
  • テストについては型が強いのであまり細かすぎる試験はせずに、少し大きめの単位でシナリオを意識したテストを書くと良い

Go

  • 使っているところ
  • Mackerelのエージェント(常駐プロセス)
  • Mackerelのコマンドラインツール
  • 外形監視のプロセス
  • 採用理由
  • マルチプラットフォームに対応している
  • フットプリントが小さいので常駐プロセスに向いている
  • 実際にどうだったか
  • 良い点
  • 型がありつつコンパイルが速い
  • 高速なバイナリができる
  • 並列・並行処理が言語組み込みである
  • 悪い点
  • クロスコンパイルが大変
  • 結局はプラットフォームごとにコードを分けなければいけない部分がある
  • 特にWindowsは大変だった

Perl

  • 使っているところ
  • デプロイの自動化ツール
  • 採用理由
  • だいたいどこでもはいっている
  • 1枚のスクリプトにテストを同梱できる
  • テストがない自動化機構は負債になりやすい

Mackerelエージェントのデプロイ自動化機構

P1080438

  • GitHubでコードがマージされるとTravisでテストが実行されます
  • テストが通ると、TravisがリポジトリにTagをつけます
  • Tagができると、GitHubはそのバージョンのモジュールを作成するようにTravisとAppVeyor(Windows用)に指示を出します

ここでTravisがGitHubにpushをしていますが、このときtokenを使うと、tokenはアカウントに紐づくため他のリポジトリを操作できたりしてしまいます。それを防ぐためにtokenではなくDeploy Keysというものを使います。これはアカウントではなくリポジトリに紐づくため、権限を限定できるのだそうです。

Ruby

  • 使っているところ
  • fluentdとの連携にfluent-plugin-mackerel
  • chef
  • capistrano
  • 採用理由
  • 便利なエコシステムがあるので、それに乗っかる

サーバーサイドエンジニア(特にPerl)のためのiOSアプリ開発入門

P1080439

typester氏によるトーク

2015年のiOSアプリ開発環境

  • Swift2.0
  • Obj-Cとはさよなら
  • 2.0からは仕様も固まってきていて始めるにはちょうどいい
  • Xcode7
  • AppleIDさえ持っていれば実機で動かせるようになった

この後、PerlとSwiftの比較がありデモに移りました。デモはfoursquareのAPIを叩いて、ビッグサイトにチェックインするだけというシンプルなアプリを作ることを目指しました。HTTP周りの操作はAlamofireというライブラリがイケてるそうです。ただし現時点ではmasterブランチとswift2.0対応ブランチが分かれているので注意とのことです。会場からの質問で、Swiftに対応していないObj-Cのライブラリが多いのではという質問に対しては、ブリッジ(Swift/iOSを連携させる機能)を使えばそれほど困ったことはないということでした。

3分でサービスのOSを入れ替える技術

P1080440

GMOペパボ株式会社よりshibata氏のトーク

手作業の指示書で構築していたインフラを、Blue-Greenデプロイにより3分でインフラをリリースできるようにしたまでのお話です。コツは、いきなり壮大な自動化構成を目指さずに目先のできることから始めること、sshやrunコマンドなど、なんでもできるやり方は封印してレイヤーごとに適したツールを使用することだということです。

やったこと

  • サーバの構築にはPuppetを使用(ChefとかAnsibleとかなんでも良い)
  • OSの初期化にはCloud-initを使用
  • ホスト名やIPアドレスなどはIaasが提供する値を使用
  • capistrano2 -> 3へのバージョンアップ
  • アプリケーションはS3上にあるRailsアプリをpullするようにCloud-initに設定
  • 監視はconsul + consul-alertを使用
  • モニタリングにはMackerelを使用
  • ログ収集にはfluentdを使用
  • インフラを操作するコマンドはthorで作成
  • Packerでインスタンスイメージを作成
  • DroneCIとserverspecでインフラCI

ここまでで通常のインフラ自動化はできました。ここからさらに高速化を目指し、Blue-Greenデプロイをど導入することによって、すべてのサーバ(アプリ系)を3分で入れ替えることができるようになったということです。

注目のワードランキング

最後に、私が聴講した全てのトークの中でよく出てきたワードをKKD(感と経験と度胸)でランキングしてみました。なお、「Perl」は全てのトークに登場しましたが当たり前すぎるのでランキングには入れませんでした。悪しからず。

5位: Go

スクリーンショット 2015-08-23 1.18.14

第5位はGoです。Mackerelエージェントを始め、意外と多くの場所で使われている印象を受けました。マルチコア・マルチプラットフォーム時代の今、必要とされている言語の1つなのかもしれません。

4位: Scala(関数型言語)

スクリーンショット 2015-08-23 1.19.00

第4位はScalaを始めとする関数型言語です。関数型言語の注目の高さと、Scalaの堅牢性が相まってよく使われている印象を受けました。また、関数型はやっぱり楽しいということを何度も聞き、私も試してみたくなりました。

3位: Chef,Capistrano,Fluentd

第3位は同率でChef,Capistrano,Fluentdです。目新しいものではないですがシステム構成には大体これらが含まれていました。Webをやる人にとってはデファクトスタンダードという位置付けと言ってもいいのかもしれません。

2位: Consul

スクリーンショット 2015-08-23 17.40.21

第2位はConsulです。インフラの自動化や大規模化に伴い、それに対応できる監視ツール・デプロイツールとしてConsulが注目を浴びているようです。Consulを取り上げたトークについては弊社ブログでも詳しく紹介しておりますので是非ご覧ください。

[レポート]YAPC::Asia TOKYO 2015 Consul/Strecherで大規模なPULL型デプロイを実現する #yapcasia | Developers.IO

1位: Mackerel

スクリーンショット 2015-08-23 17.41.09

第1位はMackerelです。はてなの人が多めだったこともあるかもしれませんが(笑)とにかくよく出てきました。よく出てくる一つの理由としては、外部ツールとの連携のしやすさがあるのではないでしょうか。私もMackerelをはじめいろいろなツールを組み合わせてイケてるシステムを作ってみたいです。


いかがだったでしょうか。YAPC::Asiaは多様性のあるカンファレンスなので、業界全体のトレンドが見えてきて面白いなと私は思いました。YAPC::Asiaは今年で最後ということですが、今後も是非「エンジニアの祭典」が行われることを願ってやみません。