余白

https://blog.lacolaco.net/ に移転しました

Angular Elementsの野望と、Angularに静的サイト用フレームワークがない理由

「Angularって静的なWebサイトを吐き出せる技術とかないんですか」という質問を受けることがたびたびあります。 例えばGatsbyやGridsome、Next.js、Nuxt.jsなどのようなものですね。 サーバーサイドレンダリングの仕組みは自体はすでにAngular Universalがありますし技術的に難しいことではないので、コミュニティのなかでAngularベースで静的サイトを作るための新しいフレームワークが生まれてくることはあるかもしれません。 しかし僕の個人的な見解では、少なくともAngularチームが公式に提供することはないと思っています。

ではなぜAngularチームはそこにフォーカスしないのかということについて、今Angularが向かっている方向と一緒に理解してみましょう。

いまあるWebに溶け込んでいく

2017年の後半あたりから、Angularチームの主眼は静的なWebとの融合になってきました。 これまでAngularはSingle Page Applicationの開発を堅牢でスケーラブルにおこなうための一貫したフレームワークを提供してきました。 その文脈では一定の完成度に達し、開発者からも支持されるようになりましたが、Webの世界は広大で、その大半はいわゆるドキュメントとしてのWebサイト、Webページです。 WordPressをはじめとするCMSによるコンテンツがWebの大部分を構成しています。

そうしたWebのなかでAngularにできることを考えた結果が、Angular Elementsです。 Angularはアプリケーションではなくコンポーネントを開発するための基盤としての側面を持つようになりました。 Angular ElementsによってAngularコンポーネントからCustom Elementsを生成し、そのタグを静的コンテンツのなかに組み込んでいくことができます。 いまあるWebをそのままに、AngularとCustom Elementsがその体験を拡張していきます。

実例として、Angularの公式ドキュメンテーションサイト angular.io では、Markdownで管理されているドキュメンテーションのなかに書かれた独自タグが、Custom Elementsとして起動してリッチなコンテンツを提供しています。 <code-example> タグはAngular Elementsで作られたCustom Elementsとして存在しています。

## heroes コンポーネントを作成する

Angular CLIを使用して、`heroes`という名前の新しいコンポーネントを生成します。

<code-example language="sh" class="code-shell">
  ng generate component heroes
</code-example>

f:id:lacolaco:20190113000151p:plain
code-example 要素はAngular Elementsで作られたCustom Element

技術的な課題

Angular Elementsのアプローチの概念実証として angular.io が作られましたが、バンドルサイズの課題がありました。 現状の実装では、Angular Elementsが依存するAngularコアランタイムが大きく、複数のAngular ElementsをWebサイトから読み込むのにパフォーマンスへの悪影響がありました。

これを解決するのがIvyで、Ivyが導入されればAngular Elementsが依存するAngularコアランタイムを最小限にとどめ、バンドルサイズを数KBに抑えることができるようになります。

まとめ

今後もAngularで静的サイトを作るためのフレームワークが生まれることは、少なくとも公式にはないでしょう。 Angularチームは、いまあるWebをAngular Elementsで拡張していくことを目指しています。 Custom Elementsはフレームワークに依存しないので、Angular Elementsで作成したタグをGatsbyやNuxt.jsなどで作られたサイトで利用することもできます。 タグを使う側からすれば、そのタグがAngularで作られていることは知る必要のないことです。

Angular Elements + Ivyによって、Angular Elementsの開発体験とユーザ体験を高めることが2019年の主要なテーマのひとつです。 Angularは単なるSPA開発フレームワークではなく、あらゆるWebのユースケースに対応できる開発プラットフォームとしてこれから進化していくことでしょう。

[追記] Nuxt.jsは静的サイトジェネレータ以外の用途もあるという指摘で、冒頭の部分で誤解を生みそうな点を教えてもらったので、修正しました。

ゆく年くる年 2018

2018年の振り返り

イベント

主観的には多くもなく少なくもない感じです

大規模

  • 3月 MANABIYA (登壇)
  • 6月 ng-japan (主催・登壇)
  • 9月 GDG DevFest Tokyo 2018 (登壇)
  • 11月 Chrome Dev Summit (参加)
  • 12月 Frontend Conference Fukuoka (登壇)

小規模

  • ng-sake #11
  • Web Components Cafe #2
  • HTML5とか勉強会 #69
  • Infragistics Distinct
  • Angular MokuMoku Night #1
  • Angular MokuMoku Night #2
  • ng-sake #12
  • Angular MokuMoku Night #3
  • ng-sake #13
  • bitbank LT Night #3
  • Frontend de KANPAI! #5

アウトプット

スライド

前半まで Slides.com を課金して使ってましたが、課金で嬉しいのが非公開状態で保存できることだけだったので、Googleスライドに切り替えました。 自分用のマスタースライド作ってコピーしながら使ってます。

slides.com

slides.com

slides.com

slides.com

docs.google.com

docs.google.com

docs.google.com

電子書籍

GitBookですが1冊、少しずつ書いてる途中です。

Angular After Tutorial - Angular After Tutorial

技術ブログ記事

年初は全部Mediumに書いていくつもりでしたが、日本語ははてなブログ、英語はMediumに切り分けました。

medium.com

medium.com

medium.com

medium.com

lacolaco.hatenablog.com

lacolaco.hatenablog.com

lacolaco.hatenablog.com

lacolaco.hatenablog.com

lacolaco.hatenablog.com

lacolaco.hatenablog.com

lacolaco.hatenablog.com

lacolaco.hatenablog.com

lacolaco.hatenablog.com

lacolaco.hatenablog.com

lacolaco.hatenablog.com

lacolaco.hatenablog.com

lacolaco.hatenablog.com

lacolaco.hatenablog.com

lacolaco.hatenablog.com

lacolaco.hatenablog.com

lacolaco.hatenablog.com

medium.com

lacolaco.hatenablog.com

medium.com

lacolaco.hatenablog.com

lacolaco.hatenablog.com

lacolaco.hatenablog.com

lacolaco.hatenablog.com

lacolaco.hatenablog.com

lacolaco.hatenablog.com

lacolaco.hatenablog.com

lacolaco.hatenablog.com

blog.angularindepth.com

medium.com

medium.com

lacolaco.hatenablog.com

出来事

プライベート

lacolaco.hatenablog.com

パブリック

lacolaco.hatenablog.com


2019年の目標

イベント

主催を少し減らしていきたい。 Angular日本ユーザー会の理想としては、僕がたくさんイベントを立ち上げるよりも、コミュニティの中で自発的に勉強会やイベントを主催してくれる形を目指したい。 ユーザー会は陰ながらアドバイスや支援、主催者とスピーカーのネットワークとして支えて、コミュニティの質と量を上げていきたい。 そうして広がったコミュニティの集会として、年に一度のng-japanは単に学ぶというよりも、楽しいものにしたいですね。 どうしたら自発的に勉強会やイベントを主催したくなるか、そうしたところを今考えている最中です。

登壇のほうでは、東京以外での登壇を増やしたいと思ってます。各地のGDGなど、チャンスがあればぜひ全国行きたいですね。お声がけしてもらえると喜びます。 東京ばかりで登壇していると、毎回来る人にそれほど差がなくて、自然と毎回違う話題にしないといけない気分になるんですよね。再演しにくい。 違う場所で、マイナーアップデートで少しずつ改良を続けながら同じテーマで発表するというのが、エコかなあと考えてます。スライドをゼロから毎回作るの大変なんですよ。

あと、もしCFPが通れば海外での登壇もやりたいですね。5月のng-confにCFP出してますが、他にも積極的に出していきたい。

アウトプット

もうちょっとブログは頻度を上げたいですね。 英語記事を先に書いて、その日本語版を出す流れにしようとおもってるんだけど、英語記事書いたところで力尽きてまだ2本ほど日本語版を書けてない。 同じ内容を両方に書く意味あるのかなというのもあるので、まだ試行錯誤中。 英語で書くのは結構先鋭的な内容になりがちで、日本語のコンテンツとして求められてるのはもう少し中級者向けくらいのベストプラクティス感ある話かなと思ってるので、 引き続き Angular After Tutorialは拡充していきます。

もしよかったらPatreonで支援もらえるとモチベーションが上がります!

www.patreon.com

その他

2018年は年初の目標通りけっこう読書をしたので、2019年も引き続き読書を続けていきたいです。 現在の興味は、司法や行政、立法から生まれる法力の中で社会や経済が駆動しているそのメカニズム、力学について。あとは地方経済や地方都市の活性化について。 分野的には行政学行動経済学とか行動心理学が近そう。

きっかけはこの本です。かなり面白かったのでおすすめです。

行政学講義 (ちくま新書)

行政学講義 (ちくま新書)

あと、お金の話。去年こんな記事を書いた。

lacolaco.hatenablog.com

今年は何かとお金がかかるイベントが多かったので資産運用の進捗はあんまりよくないんだけど、いろいろバラけるよりも今はFOLIOに集約している最中。 来年は毎月積み立てていく感じの投資を再開するつもり。 最近始まったおすすめ投資では国内だけじゃなくて海外株式や金とかもポートフォリオに入るので、今はちょっと市場荒れてるけど来年の成長に期待したい。

それでは良いお年を。

2019年のAngularを考える

この記事は Angular アドベントカレンダー 2018 25日目の投稿です。

qiita.com


こんにちは、lacoです。2018年ももうすぐ終わりますね。 この記事では2019年のAngularの進路について、今わかる範囲で予想をしていきます。 当たる保証はありませんが、心の準備はできるかもしれません。しばしお付き合いください。

ちなみに余談ですが、先日Angular GDEになりましたが持っている情報は以前とそれほど変わっていません。 結局オープンソースだしGitHubTwitterをひたすら追うのが一番確実なアンテナですよ。

Ivyの安定版リリースはv9か?

長らく期待されていますIvyですが、コアチームによればリリース可能になるまでにはまだあと数ヶ月かかる見込みです。 現在はGoogle社内でドッグフーディングしながら、後方互換性が失われていないことをバリデーション中です。 3月、4月に予定されているv8.0では、安定版リリースができるかどうか多少の不安があります。

以前コアチームのIgor氏は、Ivyは影響の大きいアップデートなので破壊的変更が起きないとしてもメジャーアップデートに合わせると言っていました。 v8に間に合わなければ、次のチャンスはv9です。まだあまり期待せず、少し気にする程度にかまえておきましょう。

Bazelはもうすぐ到来

BazelがAngular CLIにやってきます。1月にリリース予定のAngular CLI v7.2から、ng newコマンドが Bazelを利用したプロジェクトを作成できるようになります。 すでに7.2.0のRCバージョンに含まれているので、興味のある方はぜひ試してみてください。

blog.mgechev.com

Bazelは今までの開発タスクのなかでも高速で安定した差分ビルドを提供してくれますが、 その真価は リモートキャッシュリモートビルド実行 を利用したときに発揮されます。 リモートキャッシュは、Bazelによってビルドした結果をアップロードして保存しておく仕組みです。 2回目以降のビルドは、そのキャッシュを使って差分だけを処理することで巨大なアプリケーションでも高速にビルドできます。 リモートキャッシュはチーム内で共有することができる点が強力です。同じビルドをチーム内で繰り返す必要がありません。 リモートビルド実行はこれをさらに進めます。 Bazelのビルド環境自体をクラウド上に持つことで、巨大なアプリケーションのファイルも、Google Cloudのようなスケーラブルな環境で並列にビルドし、成果だけを得ることができます。

Bazelのリモートキャッシュ、リモートビルド実行はGoogle社内の数百のTypeScriptアプリケーションですでに導入されています。 AngularコアチームはそのノウハウをAngular CLIを通じて広く一般の開発者にも使えるようにしようとしています。

いまはまだオプトインですが、これまでのCLIの進化と同じように、Angular CLIを使っていればいつの間にか基盤がBazelに切り替わる日が来るでしょう。 そういうものもあるんだなあと、少しだけアンテナを張っておくとよいかもしれません。

NgRxの拡大

Angular向けの状態管理ライブラリ NgRx は、公式ドキュメンテーションサイトも完成し、いよいよ流行の兆しを見せています。 Google社内でも多くのプロジェクトで導入されているらしく、コアチームによるドッグフーディングがより進み、今後もさらに洗練されていくことが予想されます。

状態管理に悩みそうなら、とりあえずNgRxを入れておくとよいのではないでしょうか。 NGXSAkitaなど、面白いサードパーティライブラリも登場していますが、NgRxに関しては半公式というくらいコアチームが関わっているので、 それぞれ比較して選定するモチベーションがなければまずNgRxを試してみてから考えてもよいでしょう。

「AngularにはReduxないの?」「NgRxっていうのがあってね」

2019年は多分これでOKでしょう。

Angular ElementsによるWeb進出、そして脱NgModuleの流れは来るか

v6でリリースされたAngular Elementsは、WebエコシステムでのWeb Componentsの普及の波にのり、着実に存在感を高めています。 Angular Elementsの発達によって、Angularはようやくオープンな Web エコシステムへの進出ができるのではないかと期待しています。

先日ng-japan OnAirでも、Angular ElementsとWeb Componentsについての回を配信しました。

www.youtube.com

ここだけの話ですが、Ivyを前提としたAngular Elementsのアップデートが現在コアチーム内で設計されています。 堅牢でスケーラブルなWebアプリケーション開発のためのフレームワークという、これまでのAngular像を破壊するポテンシャルを大いに秘めています。 年明けには何かしらの情報が公開されるかもしれません。乞うご期待です。

IvyはAngular内部で革命的なアーキテクチャの変化をもたらします。 そして、Ivyによって、NgModuleの存在価値が今よりもさらに下がることが予想できます。

一般的なアプリケーションの開発においてはいまのNgModuleありきのアーキテクチャで特に問題はないですが、 Angular Elementsを主軸としたWeb Components開発や、コンポーネント数個程度の軽量なプロジェクトにおいては、いちいちNgModuleを作るのは面倒です。 Ivy後の世界では、NgModuleを作らずコンポーネントだけでAoTビルドできるようになります。

もしかすると、従来のいわゆるSPAの開発においても、2019年後半には脱NgModule化の波が起き始めるかも知れません。 しかしもしNgModuleが廃止されることになったとしても、最短でもv11くらいでしょうから、とりあえず慌てて何かをする必要はありませんよ。


まとめ

Ivyがまるでシンギュラリティのような扱いですが、Angularに限っていえばIvyはまさにそれくらいのインパクトがある大改革なのです。 早く来てほしいですが、中途半端にマイグレーションが必要な状態でリリースされると大変です。どっしり落ち着いて構えておきましょう。

それではまた来年もAngularを楽しんでいきましょう。良いお年を!

ng-sake #13 忘年会を開催しました!

こんにちは、lacoです。

12/13にng-sake #13 を開催しました。参加いただいたみなさんありがとうございました! 会場貸してしてくれてる株式会社トレタさんにもいつも感謝です。

ng-sake.connpass.com

f:id:lacolaco:20181214001632p:plain

開催直前のconnpass上の参加者は30人で、たぶん過去最多でした。はりきってお寿司をたくさん注文しました。喜んでもらえたみたいでよかったです。

f:id:lacolaco:20181214001657p:plain

今回もいつもと同じように、乾杯 => LT => ディスカッションの3本立てで進行しました。 LTをしてくれた Quramyさん、okunokentaroさん、kawakamiさん、kouさん、ありがとうございました!

f:id:lacolaco:20181214003449p:plain

数字

もしかしたら気になる人もいるかもしれないので、ng-sake #13の運営上の数字を公開しておきます。何かしらが誰かしらの参考になると幸いです。

参加者

最終的な参加者は connpass枠23人 + スタッフ(laco + トレタのteyoshさん)の25人でした

お金

集金は、スタッフ含めて一律でひとり2000円ですので、 2000 x 25 = 50000円です。

経費は、フードとお酒ぜんぶ込みで税込み56727円でした。ちょっと赤字ですが、これまでの開催時に微妙に数千円余ることもあったので、まあトントンということで許容範囲の個人負担です。 ギリギリまでconnpassに30人いたんですが直前で25人に減っちゃったのが誤算でした。

ちなみに、25人中Kyashで支払ってくれたのが13人、現金が12人でした。今年に入ってからng-sakeにKyashを導入しましたが、ついに過半数になってきて普及を感じます。 受付オペレーションが楽ですし、イベント後に大量の1000円札を持たなくていいので助かります。ご協力ありがとうございます!来年も引き続きKyash払いサポートしていきます。

まとめ

今回はどういう経路で知ってもらえたのか、ng-sake初参加の方も多く、普段はひとりいると珍しい女性の参加者も数名いらしていて、主催としては非常にうれしい回でした。 今年は3回しか開催できませんでいたが、来年はせめて四半期に一度ずつ、計4回はやりたいですね。 それではまた次回、ng-sakeでお会いしましょう!

日記 20181018

voluntasさんのツイートを見て、自分がここでいう優秀な若者だという自惚れではないんだけど、自分はどういう風に働きたいかなと振り返ったログ

死亡前死因分析 | Basic Werk

法が人を守るんじゃない 人が法を守るんです

秩序が組織を守るんじゃなくて、組織が秩序を守る、そうありたいなと思った20181018。ところで20181018ってなんかキレイだ。