サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Pixel 9
teppeis.hatenablog.com
追記: 2019/05/01 最近の@typescript-eslint/eslint-plugin, Prettierのアップデートによって、正式にTypeScript 3.4対応されました。一通り普通に動いてる感じ。 これまで自分で使っていて問題になったのがパフォーマンス。ESLint単体やTSLintに比べて、プロジェクトによるだろうけど2倍以上遅い。体感で結構辛い。 Poor performance on some projects · Issue #389 · typescript-eslint/typescript-eslint これはTypeScriptのパーサーを通す部分の構造上の問題が原因なので、簡単には直せなそうな気配。 とりあえず、個人的には型を必要とするルールにそこまでの価値を感じていないので、該当ルールを無効にしてparserOptions > projectを削
追記: 2019/04/24 本日リリースされたNode v12でESM周りの仕様が大幅に変更されました。 この記事の内容は既に古くなっているため、最新の情報は以下の公式ブログを参考にしてください。 Announcing a new — experimental-modules – Node.js Foundation – Medium 追記終了 この話を今日のNode学園で話すので、ご興味あればどうぞ。 nodejs.connpass.com (今日いくつか加筆修正しました) ECMAScript 2015で待望のES Modules(ESM)の仕様が策定されたものの実装がなかなか進まない、という話を1年前に発表した。 その後、ブラウザでのES Modules仕様が策定完了し、フラグ付きながら全主要モダンブラウザで初期実装が揃った (caniuse)。(dynamitterさん、kijt
先週、こういうツイートを見て、 OSSを使っているなら、GitHubのリポジトリにそっとスターをつけると開発者のキャリアにわりと直接的に貢献できるのでお薦めです。少額の寄付より効果があるかも— Taro L. Saito (@taroleo) 2017年8月15日 共感したのでサクッと作った。 github.com package.jsonと同じディレクトリで実行するだけで、depsとdevDepsのパッケージのGitHubリポジトリにスターできる。 事前にパーソナルトークンをホームディレクトリに保存しておく必要があるけど、その辺はREADMEを読んでくれ。 依存に入れて使っているということは、それなりに恩恵を受けているということなので、問答無用でスターを送ってしまって良いと思う。 孫依存のパッケージにも送るか迷ったけど、npm的にそこ含めると一気に数が膨れてしまうのでやめた。 これでみん
CircleCI 2.0 GA が無事リリースされたので、betaが取れるのを待ってた方は是非どうぞ。 今の所は爆速だったbeta時代と遜色ない速度で動いてる。 circleci.com 1.0やTravis CIと比較してのCircleCI 2.0のメリットは前回記事に書いたのでご参照ください。 CircleCI 2.0 でNode.jsのマルチバージョンビルド - teppeis blog Workflows 前回の記事でcurlを使った無理やりなマルチビルド並列実行を紹介したけど、当時クローズドアルファだったWorkflowsといういわゆるビルドパイプラインのようなものを組める機能が無事搭載された。 Orchestrating Workflows - CircleCI これを使うとNode.jsのマルチバージョンビルドはこんな感じで書ける。 workflows: version: 2
追記 2017/07/11 CircleCI 2.0 GAがリリースされたので、curlではなく標準機能Workflowsを使ったバージョンを紹介する記事を書いたので、こちらをご参照ください。 CircleCI 2.0 GAリリース: 続Node.jsマルチバージョンビルド - teppeis blog 追記終わり。 CircleCI 2.0が高速でカスタマイズできて最高だという話と、Node.jsのマルチバージョンテストのやり方、キャッシュ戦略などを紹介する。 前提として、以下はnpmパッケージのようなユニットテストでほぼ完結するシンプルなライブラリのCIを想定している。 サービスやアプリ開発のCIは要求が違ってくるのでまた別。 先に結論としてサンプルプロジェクトを貼っておく。急ぎの方は.circleci/config.ymlをコピペして “How to use” だけ読んで設定したらO
先日アナウンスされた脆弱性とその周辺について、とりとめなく。 The npm Blog — Package install scripts vulnerability Vulnerability Note VU#319816 脆弱性の概要 VU#319816 によれば、今回問題になっているのはnpmの以下の性質を利用するとnpmパッケージでワーム(自己増殖力のあるマルウェア)を作れるというもの。 依存パッケージのバージョンをロックせず、semverにより範囲指定することが多い CLIで一度npmへloginすると、明示的にnpm logoutするまで認証が永続化される npm registry が中央集権型サーバーである 具体的な手法として、Chris Contoliniが PoC として pizza-party というリポジトリを公開している*1。以下のように動作する。 ワームが仕込まれ
今年6月に公開予定の ECMAScript 2016 (ES7) で追加される機能が以下の2つに決定した。 Array.prototype.includes Exponentiation Operator 今後は3月1日にスペックのスナップショットが切られ、6月の公開に向けた作業が始まる。 あれ、ES7ってそれだけなの?と思った方は、ぜひ ECMAScript の新しい策定プロセスを確認されたし。 標準化には2つの実装が要求される 昨年公開されたES6以降、ECMAScript の仕様策定プロセスは機能ベースで毎年リリースするスタイルになった。 細かいプロセスは 『ECMAScriptの仕様策定に関するカンニングペーパー | Web Scratch』 を参照してもらうとして、重要なポイントは、提案機能が標準化される(Stage 4になる)ためには2つ以上の実装が必要ということ。 今回のES
JavaScript Advent Calendar 2015の2日目。小ネタです。 npm initするときにauthorとかlicenseとか毎回同じこと入力するの面倒だったりしません?実はいくつかの項目は初期値を設定できるのだけど、ググってもあまり日本語情報が無いようなので共有。 設定方法は.npmrcで以下のように指定すればOK。 init-author-name=Teppei Sato init-author-email=teppeis@gmail.com .npmrcの場所は以下の順で優先される。(詳細は公式を参照) per-project config file (/path/to/my/project/.npmrc) per-user config file (~/.npmrc) global config file ($PREFIX/etc/npmrc) npm buil
カレー Advent Calendar 2015(あと3人募集中!)の1日目です。 2013年は家の近所のカレー屋を紹介したのですが、今年は会社の近くの行きつけである『よもだそば』を紹介します。 『よもだそば』は私の勤務先が7月に日本橋に移転してすぐに行きつけになったカレー屋。本当はそば屋なんですけど、カレー屋と思ってよいです。 店構えも一見して普通の立ち食いそば屋ながら、看板の「インドカレーの店」が期待を煽ります。 出てくるカレーはこちらの「よもだカレー」490円。 そば屋らしからぬ本格的なインド風チキンカレーです。トマトと玉ねぎをベースに煮込んだ濃厚なルーは、パンチの効いた辛さと、そばつゆを隠し味にしているせいか独特のうま味があります。ほろほろに柔らかく煮こまれた骨付きチキンが1本+α 入っていて、ごはんも多めでボリュームも十分。 普通立ち食いそばのカレーというと、ザ・日本カレーという
タイトルで言い切った感のある小ネタ。 最新のnpm v3は基本素晴らしいのだけど、主にnode_modulesがフラットになったなどのbreaking changesによって一部のパッケージがまだ非対応だったり、自分のプロジェクトで固めたshrinkwrap.jsonからは対応前の古いパッケージを参照していたりすることが稀によくある。 そういうケースではnpm v2系を使い続けたいのだけど、インストール時に $ npm i -g npm@2 でインストールするとv2系の正式リリース版ではなく、プレリリース版が入ってしまう。 npmプロジェクトではリリースをdist-tagsで管理していて、まずRC版をnextタグとしてプレリリースをして、問題なければ次のリリースでlatestとして正式リリースするプロセスになっている。 v3系がリリースされたので上記のタグはv3系が使ってしまっているが、v
唐突にJavaの話。Spring Bootで変更を動的に反映する場合(いわゆるhot swappingとかhot deploy)はSpring Loadedを使えって出てくるのだけど、なんか動いたり動かなかったりしてなんでなんだろうと小一時間調べたメモ。Spring Boot + Maven + IntelliJ IDEA 15 on Mac 前提。 Spring Boot 1.2 with Spring Loaded 現行バージョンのSpring Boot 1.2では、Spring Loaded使えということになっている。 公式マニュアル通りにpom.xmlでsrping-boot-maven-pluginにSpring Loadedへの依存を書くだけで CLIからmvnを叩いた場合 は普通に使える。 <plugin> <groupId>org.springframework.boot<
イベントの趣旨はconnpassを見てもらうとして、自分は11:10から js_next というセッションでオーナーをやります。 メンツは@t_wadaさん、@constellationさん、@vvakameさんという盤石の布陣。 このセッションでは、JavaScriptの未来はどうなっていくのか、ブラウザで動くプログラミング言語はどうなっていくのか、というテーマを扱います。 キーワードはこのあたり? ES2015(ES6), ES2016, ES2017... Babel AST/CST, Estree, pipeline/ecosystem... static typing, TypeScript, Flowtype, Closure Compiler... altjs, CoffeeScript, Dart... WebAssembly, Emscripten... V8, Spid
8/21-22に開催されたYAPC::Asia Tokyo 2015で "Effective ES6" というタイトルで発表した。 今回、自分にとっては最初で最後のYAPCだったけど、YAPCの面白さは特定分野に留まらないWeb系エンジニアが一堂に会するところだと感じた。 例えばHTTP/2ってWeb全般に影響がある今後キーになる技術要素だと思うけど、HTTP/2単体のイベントにわざわざ参加したり自分で勉強したりする人は限られる。YAPCで様々なレイヤーのエンジニアがHTTP/2のセッションを聞いてそれについて議論することで、日本のWebエンジニアにおけるHTTP/2のベースラインが上がったような気がする。 ベストトーク3本のうち2本がHTTP/2だったのもそういった要因があるのではと感じた(そしてどちらの発表もその期待以上に素晴らしい内容だった!)。 自分の発表も、Web開発に大きく影響
Node学園 16時限目 ES2015発行記念でES6について話しました。 Run through ES6 (ES6総ざらい) Everything is Iterator (IteratorについてのLT) 本編の充実度もさることながら、無法地帯と化した懇親会でFilip Pizloの業績を烈火のごとく語るConstさんと、それに合わせて的確なサイトをブラウザで瞬時に表示し続けるazuさんというコンビ芸が見られて、心底感動しました。 会場と🍣を提供していただいたDeNAさん、ありがとうございました! 引き続き、WEB+DB PRESS Vol.87最新号のES6特集をよろしくおねがいします。 また、YAPCでのES6トークも採択していただきましたので、YAPCまではES6芸人として生きていこうと思います。
3行でまとめ 今週中にもES6が正式公開される予定 => 6/17に公開されました! 6/24発売のWEB+DB PRESS Vol.87にES6特集を書いたので読んでください! YAPCにEffective ES6というトークを応募したので、はてブ&Tweetお願いします! いよいよES6正式公開 今週というか今日6/17〜18にスイスのモントレーで開かれるEcma general assembly meetingを経てECMAScript 6*1がEcma標準として公開される予定!祝! => 6/17に無事正式公開されました! WEB+DB PRESSにES6特集書いた ES6正式公開に合わせて、今月6/24発売のWEB+DB PRESS Vol.87の第1特集でES6特集を書かせてもらった。 内容はこんな感じ。 第1章:ECMAScript 6とは何か: JavaScriptの新たな
HTTP2 時代のサーバサイドアーキテクチャフィードバック - Togetterまとめ のあたりで話していたことのまとめ。 補足 タイトルで「ES6 Modulesってconcatしないと動かないの?」と一部に誤解を与えてしまったようなので補足。ES6 Modulesがブラウザにネイティブ実装されたら、当然concatしなくても動きます。 ここで書きたかったテーマは「ES6 Modules + HTTP/2 + concat無し は ES6 Modules + HTTP/1 + concat と同等の速度で動作するのか」です。 追追記 (2016/01) kazuhoさんはh2oで Cache Aware Server Push という解決策を提案しています。 Jxckによる日本語解説記事: HTTP/2 Push を Service Worker + Cache Aware Server
いまさら感もあるのだけど、あまり知られていないようなのでTravis CIの高速化+αなtipsを書いておく。 先にNode.js向けの完成形の.travis.ymlはこちら。 language: node_js node_js: - "0.12" - "4" - "6" sudo: false cache: directories: - node_modules Tipsは3つ。 テスト対象のNode.jsバージョンを指定する sudo: false: コンテナベースの環境を使う cache: 依存パッケージをキャッシュする テスト対象のNode.js/io.jsのバージョンを指定する 最近はカジュアルにio.jsを使う人/プロジェクトが増えてきている(要出典)ので、特に政治的な理由でもなければnpmパッケージのテストはNode.jsとio.jsの両方で流しておくのが良いと思う。.tra
ちょっと前にBabelに末尾再帰最適化が入って話題になったけど、同じくTraceurにもv0.0.85で最適化が入ったので試してみた。 末尾再帰最適化って何? 厳密な話はそちらの筋に任せるとして、ざっくりしたストーリーはこんな感じ。 再帰って深くなるとstack overflowになっちゃう 再帰をシンプルなループ(スタックを使わないジャンプ)に変換できればstack overflowを避けられる 一般に末尾再帰であれば再帰をループに変換できる方法が知られている(これが末尾再帰最適化) 末尾再帰とは、関数の最後のステップだけで再帰呼び出しを行うこと 末尾再帰ではない再帰関数でも、CPS変換を使うことで末尾再帰関数に変換が可能 CPS変換とは、関数を結果の値を受け渡すスタイルから継続渡しスタイルに書き換えること つまり、普通の再帰関数 -> CPS変換で末尾再帰化 -> 末尾再帰最適化を適用
2015/03/29 10:30 フォークについて末尾に追記 gruntタスクのファイルリストを分割して並列実行するgruntプラグイン、grunt-parallelizeを前に作った。 そこそこ使われてるっぽいのだけど、 ファイルリストが長大な場合にエラーになることがある ファイルリストにdestがあるタスクに対応していない という2点についてissueや問い合わせがよくあってどうしたもんかなと思いつつ放置していたところ、ちょうど良いプルリクをもらったので重い腰を上げて取り込みつつもろもろ修正してv1.1.0をリリースした。 さて、最近こんな記事を読んで、「プラグイン開発者として」あたりのところをまさに感じていた。 若気の至りで、おっさんも昔はよくGruntプラグインを作ったのです。実際に自分のプロジェクトでGruntを使い、必要だったので、プラグイン開発に対する情熱もあったわけですけど
GitHub上のソースコードでrequire('morgan')とか書いてあって、このパッケージってなんだっけ?って "npm + morgan" でググってnpmのサイトかGitHubリポジトリを探すことってよくある。 ありすぎるので、自動リンク化するChrome拡張書こうかなと思って先行実装が無いかググったら、見事にあった。日本語でほとんど紹介されてなかったので紹介するのでNoderは今すぐインストールすべし。 GitHub Linker - Chrome ウェブストア これをインストールすると、GitHub上のファイル(.js, .jsx, .coffee, .md)内のパッケージ名部分が該当パッケージのGitHubリポジトリへのリンクになる*1。 対応しているパッケージシステムは以下。 npm bower Duo Node.js標準ライブラリ (https://iojs.org/a
東京Node学園 15時限目に参加したときにふと思った疑問について。 Node.jsと非互換なAPI使ったとき、npmにあげていいの?package.jsonのengineとかで書けるのか #tng15— teppeis (@teppeis) 2015, 2月 10 Node.jsの場合 例えばNode.js v0.12系にしか存在しないAPIを使ったパッケージの場合、package.jsonのenginesフィールドにこう書くことで、 { "engines" : { "node" : ">=0.12" } } 適合しないNode.js v0.10でnpm installしたときに警告を出すことができた。逆に削除されたAPIを使っている場合はバージョンの上限も指定できる。また非推奨ながらengineStrictフィールドを使うと警告ではなくエラーにできる。 io.jsでの議論は では、io
ES6 compat tableのTypeScriptコードのビルド時間を300秒から2秒に短縮した話と、最近のCompiler APIの動きの紹介。 先日TypeScriptの文字列を簡単にコンパイルするtypescript-simpleというライブラリを書いた。 typescript-simpleを作った動機の1つは、ES6 compat tableのTypeScript用テストを高速化することだった。 元は300件以上あるテスト項目を、テストごとにNode.js v0.11のchild_process.execSyncでプロセスを立ち上げてTypeScriptコンパイラ (tsc) でチェックしていたので、全部テストするのに300秒ぐらいかかっていた。これをtypescript-simpleで全テストをワンプロセス内で実行したら超速化するはず!と思ったけど、300秒が200秒になるぐ
TypeScript 1.4が出てCompiler Service APIのドキュメントが出てきた。 Using the Compiler API · Microsoft/TypeScript Wiki · GitHub よーし触ってみようと思ったのだけど、APIがファイルを前提にしていて、ちょっとしたTypeScriptコード片を文字列で渡して変換結果を取り出す、みたいなことをするだけなのに50行ぐらい必要。 まあTypeScriptの性質上、外部ファイルを参照していたら型解決のために読み取る必要があるわけなのでファイルを前提にするのはしょうがない。ただもう少し簡単なAPIが欲しいので、typescript-simpleというモジュールを作った。 使い方はこれだけ。シンプル。 var tss = require('typescript-simple'); var js = tss('va
JavaScript Advent Calendar 2014 11日目。 いきなり要約: Promiseや非同期テストのアサーションを簡単確実に書けるようになるesplanというライブラリのPoCを作った話。 Promiseや非同期のテストは難しい 詳しくはJavaScript Promiseの本: Chapter.3 Promiseのテストをご覧いただきたいのだが、Promiseのテストを正確に書くのはそんなに簡単ではない。 例えばmochaだと、 // 間違ったテスト1: // mayBeResolveWithOne() が1以外でresolveしたときタイムアウトエラーになる it("mayBeResolveWithOne()は1でresolveする", function(done) { mayBeResolveWithOne().then(function(value) { as
TypeScript Advent Calendarの4日目。 TypeScriptのロードマップを見てもES6対応以外は "Investigate top-rated feature requests" とか書いてあるぐらいで、GitHub Issuesのコメントのやりとりを見ていても割りと流動的に良い提案があったら取り入れる感じで開発を進めている印象。 ということで、GitHub Issuesからおもしろそうなものをいくつか拾って紹介してみる。 個人的な希望として、TypeScriptにはES6 + 型付けというコンセプトを突き進めて欲しいと思っていて(詳細はこの辺のスライドを参照)、言語機能追加系よりも型関連の強化に期待しているので、そっちがメインで。 TypeScript 1.4のおさらい とはいえ1.4で型関連の重要な機能追加がいくつか入ったのでまずはおさらい(MSDN Blog
V8にES6テンプレートリテラルが入ったらしいということで、 テンプレートリテラルが実装された - JS.next 先に入っているFirefox 34(現beta)で遊んでみた。 埋め込み変数は即時評価 埋め込み変数は即時評価なので、テンプレートリテラルが評価される時点で定義されない変数を埋め込みに使うとエラーになってしまう。 var name = 'Taro'; console.log(`Hello, ${name}.`); // 'Hello, Taro.' console.log(`Hello, ${hoge}.`); // ReferenceError: hoge is not defined' そうすると、Viewクラスのプロパティにテンプレートを持っていて任意のタイミングで呼ぶみたいなことができず、同じテンプレートでも使うところで毎回リテラルを書く必要がある*1。 // Vie
tl;dr CSP Lv.2のnonceを使うと意外と簡単にCSPの恩恵を受けれるよ Firefoxはunsafe-inlineとの挙動がおかしいので注意 サンプル実装としてExpressで簡単にnonce対応できるconnectプラグインを書いた(デモあり) Violation Reportもブラウザによって細かい挙動の差異があるよ CSP Lv.2 nonceの登場と背景 CSPの特にunsafe-inlineはXSSに対して最終防衛線的に強力な効果がある。 しかし特にサーバーからの値の受け渡し部分などでどうしてもinline scriptを使いたくなるところがあり、unsafe-inlineを禁止するとDOM data等を使わざるを得ず、つらい感じだった。 @kazuho ですね。かといってDOM dataかー、、という感じではあるんですが、CSPでinline script禁止しち
というか3分ぐらいの情報しかまだ出てきてないんだけど。 先月の@Scale 2014で発表されたFacebookのFlowについて、おそらく唯一のオフィシャルな情報であるこの発表動画を見て分かったことを紹介(ざっと見ただけなので間違ってたらごめんなさい)。 JavaScript Testing and Static Type Systems at Scale - @Scale 2014 - Web 静的な型チェックができるトランスパイラ シンタックスはTypeScript互換 なのでnew languageとかaltjsとか言ってない Code Intelligent Server: コンパイラはサーバー型 モジュール毎にインクリメンタルに型解析をアップデートする 高度に並列化していて高速 クライアントツールは、コンパイラサーバーに型情報のクエリを投げる ES6の各種シンタックスをサポート
Unicodeではバックスラッシュ*1と定義されているU+005Cだが、歴史的な背景によりMS系日本語フォントでは円記号が割り当てられているのはよく知られた話。 ところがMac/iOSに載っているヒラギノ角ゴシック等ではU+005Cはバックスラッシュとして表示されるし、キーボードの右上の円記号キーを打つとU+005CではなくU+00A5 Yen Signが入力される*2。 それぞれのシステム内で閉じてれば一貫性が保たれるのだけど、Windowsで円記号を意図して入力したU+005Cが、Mac/iOSではバックスラッシュとして表示されてしまう。企業で使われるWebシステムの場合、Windows PCとiPhone/iPadってメジャーな組み合わせだし、円記号が化けるってのは日本企業ではわりと見過ごせない問題だったりする。 実はSafariではこのバックスラッシュ円記号問題への特別対応コードが
次のページ
このページを最初にブックマークしてみませんか?
『teppeis blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く