このエントリーをはてなブックマークに追加

2023年10月8日開催の「PHPConferenceJapan2023」にブロンズスポンサーとして参加しました!

遅くなりましたが、今回もカンファレンスに参加して印象に残ったセッションをいくつか紹介していきます。

目次

データベース/SQL超入門!完全初心者向けに世界一分かりやすく解説します

Twitter:@ttskch

初学者向けの内容になっており、SQLの基本的な使い方やデータベースの基本的な使い方を学べるセッションでした。

データの抽出に最低限必要なSQLの知識を学べるのでとてもわかりやすく、SQLの入口に立つ人におすすめしたいセッションでした! 早速、社内マーケ部門のデータベース初学者に紹介しました!

25分で理解する!Symfonyの魅力とその実践的活用法 {#25分で理解するSymfonyの魅力とその実践的活用法}

Twitter:@ippey_s

Symfonyの良さが詰まっていてSymfonyを使ったことのない人に概要を伝えるにはもってこいのセッションでした!

Symfonyの特徴として「必要な時に必要なだけ」というワードが出てきましたが、Symfonyを業務で使っていて最低限必要なコンポーネントとその役割を把握できていればSymfonyの使いやすさをさらに実感できるんだろうなと感じています。

まだまだSymfonyについて知らないことが多く、とても勉強になりました!

commitを積むとは「物語を書く」ことである

Twitter:@asumikam

テストコードを後で追加して「テスト追加」など雑なcomiitになりがちだったので初心に戻ろうと思えるセッションでした。

エンジニア歴1年弱くらいの時に参加したPHPerKaigi2023のセッションで、あずみんさんのComposerを「なんとなく使う」から「理解して使う」になるがとてもわかりやすく印象に残っていたので楽しみなセッションの一つでした!

PhpStormのInteractiveRebase使っていきたいです!

PHP略語クイズ!!

Twitter:@YKanoh65

PHPにまつわる略語をクイズ形式で出題してくれるセッションでした。 馴染みのある略語でも意外に知らないことが多く、楽しく学べました!

このセッションで会場がすごい盛り上がっていたので、加納さんが実行委員長を務められるPHPカンファレンス関西2024もとても楽しみです!

最後に

去年に続きPHPConferenceJapanへの参加は2回目でしたが、知識と刺激を得られる場でとても楽しかったです!

セッションを見るだけでなく、登壇する側になれるようにプロポーザルをとりあえず出してみることを最近心がけていますが、コミュニティーに何かを提供できるようになれればいいなと思いました!

素敵な学びの場を与えてくださった実行委員会の方々、ありがとうございました!

カルテット開発部について

カルテットでは、交通費含むイベント参加の費用を会社が負担する勉強会補助があります。その他にも書籍購入補助など、エンジニア・デザイナーの成長を後押ししています。

PHPが好きなバックエンドエンジニア絶賛募集中です!興味を持っていただいた方はぜひ募集要項をごらんください。


このエントリーをはてなブックマークに追加

2023/11/19開催のJSConf JPに遊びに行ってきました。 ここ数年はコロナ禍でイベント自粛が続き、数年ぶりの数百人規模のオフラインイベント参加となりました。

https://jsconf.jp/2023/

参加費¥3,000とリーズナブルなお値段でしたが、チケットと引き換えにロゴ入りトートバッグとTシャツという豪華なノベルティがあり「えっ、いいの!?」と早くもセッション参加前からテンションが急上昇しました。

いろいろ巡った中で、印象に残ったセッションをひとつ紹介します。

ゲーム「WEBページ崩し」の仕組み〜あなたの知らないDOMスクリプティングの世界〜

@canalun/かなるん さんのセッションです。

「WEBページ崩し」は、多くの人が1回は遊んだであろう、あの有名なゲームをWEBページ上で再現したものです。 この開発における知見、主にDOMとの闘いが内容に盛り込まれていました。

フレームワークやライブラリなど便利なものを使っていても、フロントエンド開発ではDOM操作を避けられない場面に遭遇します。自分の目には明らかに「なにか映っている」のに、支援技術やテストのバーチャルDOMからすると「なにもない」ことがあったり、人間とマシンの共通認識って難しいものだなと思います。

DOM標準にはjQueryの :visible 相当のセレクターがなぜないのかと思っていましたが、Chromeに Element.checkVisibility なんてAPIが存在するんですね。またGoogle Docsが canvas-based approach を採用していることもはじめて知りました。

セッションの中で、何度か「遊んでいる感」というキーワードを耳にしました。ボールがヒットしたDOMをremoveする、それが要件であっても、消えるタイミングが早すぎたり領域が大きすぎると、ユーザーは遊んでいる感覚が薄れるよねというものです。ユーザー体験を開発者が感じ取りながらすり合わせていく、これってフロントエンド開発の大事な感覚だなあと思いながら聞いていました。HTTP通信が早すぎた時でもスピナーが見えるよう0.5秒間待機させる、みたいな経験に似ています。

スライドには随所に短い音声が仕込まれていて、参加者の笑いをつかむポイントがありました。その場にいる人たちの「参加している感」をつかむインタラクションとして機能しているな、ほうほうなるほどと思いました。

もうひとつ、スライドのテキストはほとんどが英語だったのですが、これは冒頭で種明かしがありました。JSConf JPは海外からの参加者が多く、あちこちで英語の雑談が聞こえていました。日本語が聞き取れなくてもスライドを見ればわかるように英語で記載しています、ぜひスライドを見て楽しんでくださいねといった登壇者の挨拶があり、過去にもじわじわと感じていた「なんで日本語セッションなのに英語でスライド作るんだろう?」という謎が解けました。

フロントエンド開発は、システムとユーザーをつなぐ接点に位置します。言語や感覚、時にユーザーはマシンであったり、それぞれの個性を包括しながら同じ体験を届けるというアクセシビリティにも似たインクルーシブな世界が広がっています。「見えているのに存在しない」なんて現実には何とも形容しがたい苦しみがあり、存在させる手段の試行錯誤が頑張りどころです。要件にない要件を汲み取り体験を届ける、それが私達の仕事なのだなと改めて気づかされるセッションでした。


JSConf JPの各セッションはyoutubeで公開されています。 当記事で紹介したセッションは Track C(4:59:39〜)に収録されています。

https://www.youtube.com/watch?v=pdgB0Y5ZQGk

イベント参加に関して

登壇者はじめ、イベント運営に関わったスタッフのみなさま、ありがとうございました。 時間の都合で早々に会場を後にしましたが、新幹線の中でポストを見てなぜ懇親会に行かなかったのだろうとちょっと後悔しました。

カルテット開発部について

カルテットでは、交通費含むイベント参加の費用を会社が負担する勉強会補助があります。その他にも書籍購入補助など、エンジニア・デザイナーの成長を後押ししています。

PHPが好きなバックエンドエンジニア絶賛募集中です!興味を持っていただいた方はぜひ募集要項をごらんください。


このエントリーをはてなブックマークに追加

🤘 Angularの新しいロゴとベータ版ドキュメント が公開されました!

Angular v17では Control FlowDeferred Loading という新機能がリリースされます。

記事執筆時点(2023/11)のステータスはRFC(Request For Comments)で、v17でもDevelopers Previewとしてのリリースが予測されます。今後シンタックスが変更になる可能性があるため、当記事内のサンプルコードはざっくり概要を掴むものとして捉えていただければと思います。

どんな機能?

*ngIf*ngFor などの構造化ディレクティブの代替となるテンプレートの新しいシンタックスです。

この記事と同日公開のangular.devにて、 Built-in control flow セクションで詳しく説明されています。またRFCのサマリが [Summary] Control Flow & Deferred Loading に記載されています。

2023/11/07 12:15 angular.devのURLを教えていただいたので追記しました。

Control Flow@if @for @switch を提供します。

<!-- 構造化ディレクティブ -->
<div *ngIf="flag; else empty">
  ...
</div>

<ng-template #empty>
  Nothing to see here...
</ng-template>
<!-- Control Flow -->
@if (flag) {
  ...
} @else {
  Nothing to see here...
}

Deferred Loading は遅延ロードのための @defer を提供します。

@defer (on viewport) {
  ...
} @placeholder {
  ...
} @loading {
  Now loading...
}

Control Flow、Deferred Loadingともに @ をプレフィクスとしたブロック構文を採用しています。{# も候補に上がっていましたが、コミュニティのサーベイの結果 @ に人気が集まったということでした。

Meet Angular’s New Control Flow | Angular Blog

メールアドレスなど既存のテンプレートに @ が存在する場合は ng update によってエスケープされるそうです。

以降は @angular/core 17.0.0-rc.1 で動かしたサンプルコードを紹介します。

@if

@if (isSignIn) {
  ...
} @else {
  ...
  <button (click)="signIn()">Sign In</button>
}
export class LoginComponent {
  isSignIn = false;

  signIn() {
    this.isSignIn = true;
  }
}

GitHubで全文を見る

@if をはじめとしてブロック構文は独立した行に記述します。構造化ディレクティブ *ngIf はDOMのAttributeが多くなるにつれ見通しが悪くなるため、個人的にとても嬉しい記述方法です。

@for

@for (post of posts; track $index) {
  <li>
    <span>{{ post.title }}</span>
  </li>
} @empty {
  ...
}
export class BlogComponent {
  posts: Post[] = [
    { title: "A" },
    { title: "B" },
    { title: "C" },
  ];
}

GitHubで全文を見る

@empty が記述できるのが嬉しいですね。*ngFortrackBy 相当の track は必須指定となるようです。

@switch

@switch (flag) {
  @case ('A') {
    <p></p>
  }
  @case ('B') {
    <p></p>
  }
  @case ('C') {
    <p></p>
  }
  @default { ... }
}

GitHubで全文を見る

こちらも *ngSwitch に比べてテンプレートがだいぶすっきりしそうです。

@defer

@defer (when loaded) {
  C
} @loading {
  B
} @placeholder {
  A
}

GitHubで全文を見る

@defer は遅延ロードの状態変化によりコンテンツを出し分けます。それぞれのブロックは以下のタイミングで評価され、画面にはA、B、Cの順でコンテンツがレンダリングされます。

  • @placeholder 最初のレンダリング
  • @loading 依存解決の間
  • @defer 条件にマッチした時

@defer に続くかっこの部分は (on {トリガ}) (when {変数}) のような条件式が入ります。

たとえば次のコードは、ボタン「start」をクリックした時にコンテンツを表示します。

<button #start></button>

@defer (on interaction(start)) {
  ...
}

次のコードは変数「loaded」が真と評価された時にコンテンツを表示します。

@defer (when loaded) {
  ...
}

組み合わせると、初期値「A」、ボタンをクリックすると「B」、loadedが真になると「C」のようにレンダリングされます。

@defer (on interaction(start)) {
  @defer (when loaded) {
    C
  } @placeholder {
    B
  }
} @placeholder {
  A
}

DOMに対する変更

ブロック構文は評価のタイミングでDOM要素を再構築します。この挙動は構造化ディレクティブと変わりません。

考察

Angularでは、Signalsに続きControl Flow & Deferred Loadingの導入と、DOM再構築をシンプル化しパフォーマンスを向上させる機能リリースが続いています。

今までネストした *ngIf が見づらく専用フラグを用意することもありましたが、独立した行のブロック構文の見やすさとともに徐々に減っていくのではないかと思います。これは単に「見やすい」だけでなく、テンプレートのことはテンプレートに任せるという関心の分離にも貢献します。

また、パフォーマンス改善はビルドやデプロイした成果物の実行スピードを上げるだけでなく、開発者体験も向上させます。思えばAngular v2がリリースされた頃は、コンポーネントを追加するたびにビルドがおかしくなるので ng serve をやり直していました。v17リリースを見据えた今ではファイルシステムの変更検知とHMRがしっかり連携しています。コードの変更による再レンダリングのタイムラグが短くなるほど、開発者体験は良いものになると実感しています。

安定版リリースのしかるべきタイミングでAngular wayに乗っかっていくことで、私達の開発者体験はさらにアップするのではないでしょうか。

カルテット開発部について

カルテット開発部は、インターネット広告専門の広告代理店内の開発部門です。
少人数の部署ですが、広告運用を効率化する Lisket とウェブサイト運営に欠かせないGoogleAnalyticsのレポートをエクセル形式で出力できる 無限GAレポートメーカー という2つのWebサービスを開発〜運営まで行っています。既存システムの保守だけでなく社内システムや新規事業などの新規プロダクトの開発も進行中で、新規プロダクトではスクラム開発をしています。

バックエンドエンジニア絶賛募集中です!少しでも興味を持っていただいた方はぜひ募集要項をごらんください。