べにやまぶろぐ

技術寄りの話を書くつもり

JTF2014「フロントエンドで普及が進むビルドツールたち — Grunt、gulp ほか」の聴講メモ #techfesta

Swift のセッションに並んでこちらもフロント寄りのお話ということで、最近 Grunt あんまり活かせていないもやもやが解消するかなと思って こちらのセッション に参加してきました。そしたら時代は今や Gulp ですよという話に…

個人的に響いたこと
  • Grunt から今や時代は Gulp に傾きつつある (Google も Gulp を担いだらしい、Yeoman はどうなった??)
  • デザイナーさんがタスクランナー活用して開発する時代
    • 古典的アプローチでマルチデバイスのレスポンシブ対応とか無理
    • WF だと手戻り多すぎてクリエイターも CI する時代
  • フロント開発に node というか npm 必須になりつつあってそれはそれで悩ましい感じ
  • 相変わらずフロントのトレンド(やツールが)すぐ変わってこれも辛い
聴講メモ
  • 下北沢 オープンソース Cafe では毎週日曜日に小中学生向けにプログラミングを教える道場をやっている
  • フロントエンドで普及が進むビルドツール達
    • browser-sync : 複数のブラウザ間で同期をとる
      • デザイナは各種ブラウザの表示を見てリアルタイムにテストしながら開発ができる
      • クリックイベントやページ遷移などすべて同期される
      • 変更もリアルタイムに反映される (画像への変更も伝播して icon font を再編集(約 300 msec)して css の再生成(約 50 msec)まで行ってくれる)
      • gulp は処理を非同期で並行して行えるので速い
    • gulp-watch
  • grunt (グラント)
    • フロントエンド製作で必要になったあれやこれの自動化をするためのタスクランナー、あるいはビルドツール
    • gulp でやるとコード記述量が少なくてすむ
      • grunt はコマンド間の連携ができない、一方 gulp はパイプメソッドでシンプルに記述できる
      • grunt は非同期実行もできないので時間がかかる
      • Web fundamentals by google
        • マルチデバイス対応のスターターキット、タスクランナーに gulp を使用
        • これから始めるなら gulp で (jQuery などの大御所老舗は grunt 使っている)
  • gulp (ガルプ)
    • こちらも npm、gulpfile を書く
    • 出力先一つ + 監視、出力先複数、変更箇所を見てビルド(gulp-remember というプラグインなど様々なフローを定義できる
    • serial_join をするとファイルの読み込み順序を考慮して処理することができる。(node の stream queue を使用)
  • どんなタスクがあるか
    • LESS/Sass/Stylus などのコンパイル、CSS の最適化(ベンダープレフィックス、ミニファイ、軽量化)
    • gulp-uncss は使用されていない箇所を削除してくれる
    • CoffeeScript/TypeScript などのコンパイル
    • Browserify, RequireJS, UglifyJS
    • スタイルガイド(スタイルの仕様書)
    • 画像の最適化
    • フォントの自動生成
  • 楽するため2度と同じ作業をしない(デザイナーの作業現場へのプログラマ文化の導入)
    • コンパイル、自動生成
    • テスト、ソースコードの検証
    • リアルタイム化(LiveReload, BrowserSync)
    • 5秒でできると5分でできるは全く別物
  • ビルドツールの変遷
    • ビルドツールの石器時代
      • シェルスクリプト/AppleScript/Adobe JavaScript
    • 中世
      • Make/Rake/Jake/Fabric/Ant
      • Watchman: Facebook 謹製のファイル監視ツールを使うと Make もまだ使える
    • 近代
      • Guard : ファイルの更新監視
      • Watcher: 同じだけど discon
    • 現代
      • Gulp/Grunt/Brunch/Broccoli
    • 平行世界
      • CodeKit/Prepros/Hammer/Cactus
      • ワークフローが限定的になってしまうのでやや使いづらい
  • サーバサイド vs クライアント
    • デザインの現場はコーディング以上に WF だった
    • が、レスポンシブになって WF が効かなくなった。手戻り多すぎになってきたのでデザイナ業界も CI やらないといけない。
  • PC 上の単純な反復タスクを人がやってはいけない
  • 自動化コードのチューニング
    • Node.js が共通ツールになってしまった
    • フロントエンド開発が盛んになってプログラマが参加して手元の作業環境の自動化が熱くなってきた

JTF2014「Serfでシステム監視と運用を楽しくする話」の聴講メモ #techfesta

Docker や Vagrant とか Chef とか Ansible とかは割と使っているとは思うのですが、いわゆるオーケストレーションツールや運用における監視といったところはまだ届いておらず、Serf 名前だけ知ってます状態だったので こちらのセッション に参加してきました。

個人的に響いたこと
  • Vagrant でおなじみ Mitchell Hashimoto 氏率いる HashiCorp から最近出てきたのは Serf だけでなく Consul というのもある。
  • ノードの死活監視をメインにする Serf に対して Consul はサービス単位での監視を行うことができる。
    • マルチ DC なんてサービスもあるし、Web API でクラスタの状態抜けたり自前で KVS もってるからいろいろ使えそう
  • ゴシッププロトコルと聞いて真っ先に思い浮かべるのは Cassandra。
  • 今いち棲み分けというかベストプラクティスがわからないのでこの辺は要体験
講演メモ
  • ご注文は監視自動化ですか?
    • Serf や Consul は計量シンプルでありながら様々なシーンに利用できる。
    • また他の類似ツールを使うより敷居が低く煩雑な業務から解放されることができる
    • Serf と Consul は Immutable Infrastructure の文脈で登場
  • Serf : 軽量単純なツール
    • 軽量なオーケストレーションツール
    • 全ノードで秒単位のイベント同期
    • メンバ一覧とイベントの発生を管理
    • 障害検知、フェイルオーバー機能
    • ロールとタグ機能を持つ
    • 3つの特徴
      • メンバ管理
        • クラスタをゴシッププロトコルで構成
        • マスタサーバがない(全て並列)
        • クラスタ参加・離脱を監視
          • イベントハンドラを使うと任意のコマンドをクラスタ全体のノードに実行できる
          • どのノードに話しかけても join できる
          • ランダムに相互監視する
      • 障害検知
        • ノードが死んでも復活しないかしばらく(デフォルト24時間)定期的に確認する
      • 同期イベント
        • メンバーシップ : member-join/member-leave/member-fall/member-leap
        • カスタム : event/query
    • 基本的な使い方 : serf agent で起動
  • Consul : Serf を作った後に出た
    • サービス検出 : Serf だとノードが存在するかどうかしかわからないが、Consul であれば内部のサービス単位でチェックできる
    • HTTP の API / DNS を提供しているので如何様にでもアクセスできる
      • consul の中で DNS レコードを管理するのでドメイン名で見に行って内部 IP をチェックすることができる
    • 障害検知 : サービスやノードのヘルスチェック
    • マルチデータセンタ
    • キーバリューストレージ : Restful に操作可能で、Consul が内部的に使っているものだけでなくユーザーが自分のために使うこともできる
  • Consul による監視
    • Web UI を提供(http://demo.consul.io/ui/)
      • 過去の状態は記録しないで今の状態しか知らない、immutable infrastructure の思想?
      • nagios / munin をそのまま使うこともできる
    • HTTP API
    • DNS interface
    • Blocking query
    • envconsul
  • 特徴
    • 非中央集権型
    • リアルタイムに動作
      • 従来のツールはサーバが異常検知するまでにタイムラグがある
      • envconsul と連携することで障害発生後のアクションを行える
    • 今を知る(時系列は保存しない)
  • Consul: サービス単位とノード単位の監視、サービスに近いレイヤ、Serf: マシンや OS - ミドルまでを対象
  • Consul の情報同期は Anti entropy
    • クライアントが主体
    • エージェントがサーバに push することで状態の更新が行われる。クライアントがサーバーの状況を書き換える
    • 監視用サーバーの IP 変更なども一斉に行うことができる
  • 学習のコストが低い、既存の仕組みを変更しない