タグ

ブックマーク / havelog.aho.mu (28)

  • コード設計編: context による縦軸分類とレイヤードアーキテクチャ(新規開発のメモ書きシリーズ3)

    流行りの monorepo 風味と DDD 風味? 今回はコードの設計について書き残します。主に JavaScript 界の話です。Web アプリケーション全体の設計は次回で、今回はコード面の設計に限定して書き留めています。プロダクト全体のアーキテクチャは次の記事で述べる予定ですが大雑把には、メディアっぽいサービスでありつつも SPA + SSR が許容される程度には要件定義の時点でコードの行数がかさむことが約束されたプロダクトです。 今回は大きく分けて下記について述べています ディレクトリ構造 オブジェクトの種類と責務 Flux 的なデータフロー あくまで風味なので今回、専門用語の意味ズレなどは優しくお願いします... このシリーズの他の記事はこちら。 技術要素編: web アプリが新陳代謝を続けるための依存関係の厳選 ビルド設定編: UA に応じた最適な JS バンドルの配信と web

    コード設計編: context による縦軸分類とレイヤードアーキテクチャ(新規開発のメモ書きシリーズ3)
  • アーキテクチャ編: SSR と CDN ( Fastly ) とユーザー依存情報の分離(新規開発のメモ書きシリーズ4)

    新規開発のメモ書きのラスト シリーズだったはずなのに、色々あって前回のエントリから1ヶ月あきました。_:(´ཀ`」 ∠): 今回の話の中心は結果的に「Server Side Rendering との折り合いの付け方」と「Fastly を利用した動的コンテンツのキャッシュ戦略」です。 このシリーズの他の記事はこちら。 技術要素編: web アプリが新陳代謝を続けるための依存関係の厳選 ビルド設定編: UA に応じた最適な JS バンドルの配信と webpack との距離感 コード設計編: context による縦軸分類とレイヤードアーキテクチャ まずは全体的なアーキテクチャ像 次の図はアーキテクチャの全体像です。クライアントサイド寄りの範囲を中心に書いているため、バックエンドな Microservice 群以降がおざなりな図ではありますがご容赦ください。 主要リソースは Fastly を通じ

    アーキテクチャ編: SSR と CDN ( Fastly ) とユーザー依存情報の分離(新規開発のメモ書きシリーズ4)
  • ビルド設定編: UA に応じた最適な JS バンドルの配信と webpack との距離感(新規開発のメモ書きシリーズ2)

    たくさんある道具をどのように組み合わせるか 今回はコード設計編のつもりでしたが、ビルド周りを先にまとめることにしました。主にパフォーマンス上の都合ですが、心がけたポイントは次の点です。 画一的なバンドルではなく、適切なバンドルを選択的に配信できるようにする 適当な粒度で Code Splitting できるようにする ひとつのツールに何でもかんでもやらせない( webpack、お前のことだよ!) ビルドのパイプラインを短く、シンプルに済ませる(できることを全てやろうとしない) タスクランナーは前回述べた通り make を利用しています。同僚が使っているのを見てパクりましたが Self-Documented Makefile の手法が、タスク名忘れに優しくてよかったです。 npm run したら npm scripts が一覧で出てくるのと似たようなやつです。 このシリーズの他の記事はこちら

    ビルド設定編: UA に応じた最適な JS バンドルの配信と webpack との距離感(新規開発のメモ書きシリーズ2)
  • Web クライアントサイドのパフォーマンスメトリクス — Speed Index、Paint Timing、TTI etc...

    色々なパフォーマンス指標のこと 何かを評価するときには何らかの指標(メトリクス)を定めますが、何を指標として設定してどのように測るかというのは重要です。 いわゆる KPI もそうですが、扱っている商材やビジネスのステージ(フェーズ)によっても適切な指標は変わるかもしれません。色々な指標をよく理解して引き出しを広げておくことは、状況に合わせて適切な指標を選んで改善していく過程で役立ちます。 これまでのパフォーマンス指標 過去の Web パフォーマンス界隈はバックエンドから HTML ドキュメントを返却する際の所要時間や、Web ページロード時の各イベントの発火時間を計測する方法が多く見られました。 Backend Time Browser Event Based DOMContentLoaded Page load ( onload ) 近年は特に後者の、既定のイベント発火に依存していたクラ

    Web クライアントサイドのパフォーマンスメトリクス — Speed Index、Paint Timing、TTI etc...
  • SPA + サーバーサイドレンダリング、そのダルさに関する私見

    いわゆる SPA + サーバーサイドレンダリングがダルい 唐突ですがおさらいです。 なぜサーバーサイドレンダリング(SSR)が嬉しいかと言えば 初期表示の Critical Rendering Path を短縮できる SEO における保守信仰にやさしい() 古いブラウザ・低性能マシンにやさしい yahoo/fluxible による SPA + Server Rendering の概観 ::ハブろぐ であり、特に SPA + SSR の文脈においては Universal Architecture による SPA + SSR は、技術的には過渡期の歪なキメラっぽさが拭いきれませんが、昨今の Web フロントエンドにしては珍しくビジネス的な説得力があります。 SSR なのでSNSや検索からの流入による初期表示が速い SPA なので回遊時のページ遷移も速い SSR なので古いブラウザでも CSS

    SPA + サーバーサイドレンダリング、そのダルさに関する私見
  • React v0.14.x から v15.2.x へのアップデート録

    react v15.2.x アップデートに関連した記録 FRESH! by AbemaTV と AbemaTV の React を v0.14.x から v15.2.x にアップデートしたので、遭遇した WARN などについてメモ。 基的には React v15.0 | React を読めばマイグレーションガイドがありますが、今回の作業で実際に遭遇したものだけ対応を記録します。 不明な prop を渡すなエラー … Unknown props foo, bar... on <***> tag. Remove these props from the element. <div {...props} /> のように、下位コンポーネントに対する props の雑な継承で WARN が発生します。DOMAttribute として正しくない prop が要素に渡ると警告の対象です。詳細は Unk

    React v0.14.x から v15.2.x へのアップデート録
  • ブラウザベンダによる Flash 包囲網の現状メモ ( 2016年12月20日アップデート )

    Flash の息の根がいよいよ止まりそう ※ ( 2016年7月21日 ) Firefox について動きがあったので追記しました ※ ( 2016年10月10日 ) Chrome について 8/9 付けの動きを追記しました ※ ( 2016年10月10日 ) Safari 10 の挙動について追記しました ※ ( 2016年12月20日 ) Chrome のについて 12/9 付けの動きを追記しました ※ ( 2016年12月20日 ) Edge について 12/14 付けの動きを追記しました 脱 Flash、祝 HTML5 という機運が高まったのはだいぶ前の話ですが、実際には Flash コンテンツは今もなお数多くが生き続けています。たとえばニコニコ動画のプレイヤーであったり、アメーバピグや艦これのような人気ゲームにも Flash で作られているものがあります。 各ブラウザの状況 まだま

  • nodeJSでつかえるMySQL ORMのSequelizeを触ってみる

    SequelizeはnodeJSで使えるORM npm install sequelizeでサラッとインストールできます.MySQL体さえ入っていれば,すぐに使えます. 初期化 Sequelize自体は,requireして,必要な情報を与えてnewすれば簡単に初期化できます. var Sequelize = require('sequelize').Sequelize; var Seq = new Sequelize('データベース名', 'ユーザー', 'パスワード'); /* hostとかportを指定するときはこう var Seq = new Sequelize('データベース名', 'ユーザー', 'パスワード', { 'localhost', 3306 }); */ モデルをつくる 最低限のモデルの定義.ここではUserモデルに対して,文字列型のユーザー名を定義しました. va

    nodeJSでつかえるMySQL ORMのSequelizeを触ってみる
  • yahoo/fluxible による SPA + Server Rendering の概観

    Single Page Application + Server Rendering yahoo/fluxible を使って、Single Page Application と Server Rendering の良いとこ取りのアーキテクチャを目指す。ある程度の複雑性と引き換えに、双方の利点で双方の欠点を打ち消し合うことができるため、全体的には良好なユーザーインタラクションを期待できる構成。 なぜ Single Page Application なのか 画面遷移時するたびにJavaScript/CSS のパースと評価をしなくて良くなる 画面遷移時のトランジションを柔軟に適用できる 画面遷移をまたがった実装が可能になる(あくまで可能になるだけ) なぜ Server Rendering するのか 初期表示の Critical Rendering Path を短縮できる SEO における保守信仰

    yahoo/fluxible による SPA + Server Rendering の概観
  • ECMAScript 6 ほか - WEB+DB PRESS Vol.85の宣伝

    Webフロントエンド最前線 連載第5回 技術評論社さんで @1000ch と連載させていただいているWebフロントエンド最前線の第5回「ECMAScript 6 と JavaScriptの未来」が、2月24日発売のWEB+DB PRESS Vol.85 に載りました。 ECMAScript 6 の現状確認と周辺ツールなど ちょっと前に もうES6 (ES2015) でいいんじゃないか という記事を書きまして、各種の反応をいただいたのですがともあれES6に対する関心の低くなさ(マジョリティ的には決して高くないと思われる)がありました。 その中でこのような言及もいただいたりして、ES6に対する今からとれる姿勢の多様さを感じるのでありました。 標準化に対する早期のキャッチアップとしての ES6 ローコスト・ローリターンな AltJS としての ES6 のような論点が浮かび上がってくる共に 標準化

    ECMAScript 6 ほか - WEB+DB PRESS Vol.85の宣伝
    kitokitoki
    kitokitoki 2015/06/10
    標準化に対する早期のキャッチアップとしての ES6/ローコスト・ローリターンな AltJS としての ES6
  • nginxにLion付属のab(ApacheBench)を実行したら失敗するときの解決ログ

    nginxにab(ApacheBench)を実行すると失敗してた うちのサーバは、さくらのVPSにてnginxがフロントにいて、そこから内側のapacheとかRackとかNodeに回しています。 そんなこのサーバにLion付属のabを実行すると失敗していましたが、自力でhttpdから httpd-2.4.1.tar.bz2を取得してmake。abだけ新しいのに差し替えましたら解決しました。 問題の確認から解決まで まずは問題の発生している状態から。 apr_socket_recv: Connection reset by peer (54) うーん? ただのgif画像とかでも同じように切られるのでapacheとかは無罪と判定。(静的ファイルの配信はnginxがしてるから) % ab -n 100 -c 2 http://havelog.ayumusato.com/ This is Apac

    nginxにLion付属のab(ApacheBench)を実行したら失敗するときの解決ログ
  • いぇーい yield と co と koa

    express の後継だけあって期待が高まってる Koa ですが、あの珍妙な yield による同期処理っぽい記述がどのようにして支えられているかメモってみます。 年末年始を経てヤル気が高まってきたので、久々にnodeの話。 visionmedia/co さて題。 早速ですが、koa の middleware における、あの特徴的な yield 天国は、koa ではなく co というモジュールによるものです。サンプルを見るのが早いです。 件は yield を使うので、現時点では node v0.11.x を --harmony オプション付き実行が必要なことに注意してください 下記は co を単品で利用した場合のサンプルです。 /** * GETリクエストを非同期処理するモジュールを想定 * @example get('http://example.com')(function() {

    いぇーい yield と co と koa
  • Reactive Programming in JavaScript - Frontrend Final Conference 資料

    Reactive Programming in JavaScript ( 今回のスライド: HTML版 ) このスライド自体が Bacon.js で書かれた ahomu/Talkie で作られています。Rx系のライブラリに興味を持たれた方は、ぜひコードのほうもご覧いただければ。 アジェンダ What is Reactive Programming ? Reactive in Frontend JavaScript FRP with Reactive Extensions Reactive Programming について紹介しました。今回も懲りずに新ネタでしゃべった次第。Reactive も Functional も若干こわいひとたちが生息しているイメージ(個人の感想です)があるので、遅延評価で飛んでくる斧だけがこわい :P ノイズ避け 率直な感想として、RP/FRP を学ぼうとすると情報

    Reactive Programming in JavaScript - Frontrend Final Conference 資料
  • npm とフロントエンドのパッケージ管理の未来

    JavaScript 系パッケージマネージャの重複問題 npm は言わずもがな Node.js のパッケージマネージャだが、フロントエンド開発においては Bower も利用するのが一般的になっている。この現状の問題点は、package.jon と bower.json という似たような管理ファイルを二重で管理しなければならないということだ。 現状の使い分けをおさらいをしておくと、次のような感じになる。 タスクランナー(Grunt/gulp)・モジュールシステム(browserify/webpack)・テストスイート(karma/testem)などの開発環境系の管理が npm の主なお仕事。インストールされたパッケージは node_modules 内に展開されて、CommonJS スタイルのモジュール管理から利用する。 題につながる話としては、ブラウザで動くライブラリの一部は npm にも

    npm とフロントエンドのパッケージ管理の未来
  • Componentによるフロントエンドのパッケージ管理

    直近で、新規案件に関わることになりそうなので、ライブラリ選定やタスクランナー、そして今回の依存管理のようにベーシックな話が続いてます。次第に、具体的な実装やコード設計のポストが多くなる・・・はず。 今回はVue.jsでも触れましたが、改めてcomponent - modular javascript frameworkについて。 概要 Componentはパッケージマネージャー兼、依存解決込みのビルドツールです。クライアントサイドについて、JSのパッケージマネージャーやビルダーは既にありますが、Componentは HTML/CSS/JSをセットにして扱うことができます。 npmでいうpackage.jsonと同様に、component.jsonという定義ファイルによって、パッケージの依存関係やリポジトリなどの各種情報を示します。 component/component コア部分のリポジト

    Componentによるフロントエンドのパッケージ管理
  • Angularそっちのけで、Vue.jsについて所感

    Vue.js 軽量でパワフルなデータバインディングMVVM, vue.jsで遊んでみた - mizchi's blog を読んで触発されたので、自分も外見的に良いなと思ったポイントだけ書き留めてみます。さすがに実戦投入できていないので、そのあたりの精度は悪しからず。 サンプルコードの雰囲気 サンプルコードとか自分でちょっと触ってみたときの感触からは、以下のポイントが気に入りました。data-bidingsとかは前提として便利です。はい。 覚え切れそうな分量のAPI Class: Vue - vue.js 脳みそちっちゃいので助かります。それに尽きる。 プロパティによる宣言っぽさ Angularだとイベントハンドラ類を書くにも、$scopeに都度ハンドラを仕込んでいくのがあまり好きでないです。工夫で回避できそうですが、与えられたスタートが下記のような状態であることには変わりません。 angu

    Angularそっちのけで、Vue.jsについて所感
  • 俺流BackboneラーメンとPhalanxのはなし

    前置き この記事は Frontrend Advent Calendar 2013 の7日目です。 意見表明を避けてたジャンルだけど、俺流Backbone.jsとの付き合い方と、それを反映したライブラリについて書いてみる。大半が夏前に書かれていたけど、イマイチで放置してた系を掘り起こした! 職場近くに俺流塩らーめんというお店があって、そこの熟成塩ラーメン(¥680)が、スガキヤのラーメン(¥280)に近い味してる気がする。¥400余分に払っても価値がある。 巷ではdata bindingsだとかMV*の在り方に関心が集まっている昨今、マイペースにAOP風(記述言語がないので実装はmixin...)とか、Viewの領域管理の表現に腐心していた。 今の時点ではこれがベストとは思っておらず、つまるところ Marionette.js あたりを上手に使うことに注力すれば良さそうというのが結論だ。そこに

    俺流BackboneラーメンとPhalanxのはなし
    kitokitoki
    kitokitoki 2013/12/19
    「JSがHTMLのclassをセレクタ探索するのではなく、HTMLがJS側で用意された識別子を下記のように呼び出すスタイルを積極的に採用している。処理的には同じなのだが、HTMLとJSの主従ニュアンスが異なる。」
  • WCAN 2013 Summer で「ハイパフォーマンスWebフロントエンド」を話してきました

    スライド 振り返り 50分という限られた時間の中で、Network・Render・Computeという3柱についてご紹介するという構成に挑ませていただきました。 恐らくフロントエンドが専門でない方も多くいらした中で、どこまでニュアンスだけでも届けられるように、という面の調整が多かったです。 結果的には目に見えるRenderについて多めに盛り込んで着地しています。 WebKit依存の内容が多めの所から、Canaryに載っている開発者ツールの使い方を通して、パフォーマンス問題の検証と対策について肉付けしている構成です。 参考にした資料のURLリスト 導入のあたり 開発者のための WebKit (“WebKit for Developers” 日語訳) Performance Checklist for the Mobile Web - YouTube Strangeloop - Impac

    WCAN 2013 Summer で「ハイパフォーマンスWebフロントエンド」を話してきました
  • SubView的なモノのより良い管理方法 (Backbone Advent Calendar 2012 24th day)

    前段 Backbone.js (Sub)View Rendering Trick | Joe Zim's JavaScript Blog Rendering Views in Backbone.js Isn't Always Simple by Ian Storm Taylor Break Apart Your Backbone.js Render Methods by Ian Storm Taylor 海外のイケメンたちが書いた記事からくみ取ったパターンを、ひっじょーに薄めて紹介します。SubViewの中身までは及ばず、単純にMainViewが所有する要素の中で、SubViewをrenderするときの簡単な定義について。 MainViewの中にSubViewを設ける MainView(ページ全体を司るView)の中に、SubView(部分的なView)を埋め込むときのパターンについて。よ

    SubView的なモノのより良い管理方法 (Backbone Advent Calendar 2012 24th day)
  • Frontrend Vol.4 おつかれさまでした(jQuery to Backbone フォローアップ)

    当日のスライドでございます。 先月のはじめごろにイベント告知 Frontrend Vol.4で宣伝させていただいたイベントが先々週末に無事おわりました。席数に対して、非常に多数の(300/200人!!)お申し込みをいただきありがたい限りです。 Frontrend Vol.4 powered by CyberAgent, Inc. セッション概要・スライド・デモなどは、↑のサイトにまとまっています。t32k++ 60分そこそこのプレゼンだけで、正確な情報が伝わる/伝えられるとはあんまり思っていないので、ワークショップ系でもない限り「興味の喚起と独学の助け」をモットーにやっております。そのようなご託を含め、今回は先月のCSS Nite LP26でStylus推ししたときとは、また趣の違うふっかけ気味な構成でございました。 動画とデモファイル jQuery to Backbone from Fr

    Frontrend Vol.4 おつかれさまでした(jQuery to Backbone フォローアップ)