radioc@?

レディオキャットハテナ

【勉強会メモ】FRONTEND CONFERENCE 2018

2018.kfug.jp

毎年恒例のフロントエンド製作者向けイベントに行ってきました。近年、Webブラウザの進化に伴いフロントエンド技術のカバーする範囲はどんどん拡大しています。PWAやWASMのような他の技術領域にも踏み込んだ技術の話、大規模スクラムの事例などからもその状況をうかがい知ることができ、フロントエンド技術の拡大を改めて実感することができました。最後のセッションで後藤さんが次のように仰っていました。

バックエンド経験の上にフロントを積むのではなく、ニューゲーム感覚で、新しい気持ちで挑めば

分業を前提としたフロントエンドとバックエンドというコンテキストはもはや手法の1つでしかなく、Webに携わる者としてはより良い技術選択をしていくための手法として向き合うべきだと感じました。

WebMusicで何ができるか

okunokentaroさん

speakerdeck.com

※途中から参加しました。

WebAudioDesigner | g200kg

  • グラフィカルに確認してコードに落とし込む

Web MIDI APIとWeb Audio API

  • MIDIならブラウザを超えて連携できる

CSSで扱う音声の概念

  • createMediaElementSource() を使うことで <audio> と連携
  • Selectors Level 4 擬似クラス
    • Resource State Pseudos
      • :playing , :paused
    • Time-dimensional Pseudo-classes
      • :current , :past , :future

Web Musicのこれから

  • Web Audio APIによるゲームやWebXRにおけるBGMや効果音の表現WebRTCでの音声通信
  • WebMIDI APIによる多彩な機器制御、遠隔操作、演奏の同期
  • 関連サービスやサードパーティAPIでさらにおもしろくなる

Chrome Dev Summit Recap

宇都宮佑亮さん

Performance

  • 今年のセッションの全体的なテーマ
  • 去年はPWAが多かった

Perf Budgets

addyosmani.com

  • Webサイトは重い
  • Image,JSのロードに時間がかかっている
  • 各環境に応じたBudgetを用意することを推奨

Split your bundle

  • JSで何ができるかというとCode-Splitting
  • 各ページで使えるものだけをロードさせる
  • RollupやWebpackではDynamic ImportされるモジュールをCodeSplitしてくれる
  • linkで rel="preload" すれば先行取得

ユニクロカナダのモバイル版サイトの事例

  • 必要なものだけをbundleに入れる
  • Preact(React.jsの軽量版)を使って成果を出している

Perf Budgetやスピードに関するツール

  • PSIが新しくなりLighthouseが組み込まれた

web.dev BETA

  • Web開発のベストプラクティスやAuditモニタリングを網羅的に行う

LighthouseがCIに組み込みやすくなった

www.npmjs.com

bundlesize

github.com

画像・動画に関しても様々なベストプラクティス

  • Imagemin
  • Lazy Load Images
  • AV1

Native Lazy Loading

calibreapp.com

宣言的にLazyloadする・しないなどが選択可能

coliss.com

実際問題やるべきことはたくさん

  • 最近のマルチコア環境でシングルスレッドでは恩恵を受けられない
  • Workerをどのように活用できるかを考える

CSS Paint API

developers.google.com

  • Paint Workletを利用したOff main Thread

WebAssembly Threads

  • WASMも複数Workerで効率的にメモリを共有するThreadsのOriginTrialを開始

Workbox

  • Service WorkerはWorkbox

developers.google.com

  • workbox streamsを利用することでそれぞれを同時並行でストリーミング

squoosh.app

squoosh.app

  • 画像をWebで使ううえでのベストプラクティスをプロダクト

未来の話

  • アーリーステージの機能

Feature Policy

  • Webサイトにポリシーをつける
  • レポーティングのみに切り替えることも可能

Layered API

  • ハイレベルなAPI
  • スクロールでもNativeではスクロールAPIが用意されている
  • WebはFWがライブラリやコンポーネントを提供しているがそのぶん重くなる
  • ブラウザが標準でハイレベルなAPIを提供する
  • <virtual-scroll>

Web Packaging

  • Webのリソースを文字通りパッケージングする
  • Signed Exchange
    • 署名
  • Bundled Exchage
    • 集合
  • AMPのドキュメント
    • 署名済のドキュメントは取得元に関係なく署名もとのオリジンのものとして表示

asnokaze.hatenablog.com

Portal

  • Webで画面遷移が遅い
  • Portalを使うと早くなる

www.youtube.com

Chrome Dev Summitの参考情報

coliss.com

blog.asial.co.jp

10名超えのスクラムでフロントエンド開発する現場の声

上原晃人さん

speakerdeck.com

10名以上の場合はコミュニケーションコストが増えるためチームを分割する

3社合同チーム

  • PO:2
  • SM:1
  • サーバサイド:6 -フロント:12
  • デザイナー:4
  • テストエンジニア:4〜

開発しているものは 2つのECサイト

開発の流れ

  • 案件発生
    • POからの依頼
    • 主担当を決める
  • 仕様検討
    • デザイナー
      • 画面遷移、UI、文言
    • フロントエンドエンジニア
      • データの取得方法やUIの実現性検討
    • 相互に相談して実現性を検討する
  • デザインレビュー
    • メインデザイナーが検討したデザインをチーム全員でレビュー
    • チームのメンバーが共通認識を持てる
  • 実装・テスト設計
    • 細かい単位でタスクを作ってエンジニアが分担して進める
    • GitlabのMRでレビュー
    • テスト設計
      • テストエンジニアから各エンジニアに質問して設計
  • テスト実行
  • デバッグ・保留検討
    • 開発してみたがリリースを保留することもある
  • リリース

プロジェクトの流れ

  • 実際は複数の案件が並行で走る
  • タイムボックスにわけて管理
  • 案件別にチームがフレキシブルに生まれる
  • 管理に使うツール
    • Jira,Confluence,Sketch

スクラムイベント

  • ふりかえり
    • KPTでふりかえり、改善実施

課題

  • 意味が広すぎるタスク
    • 何をしたらいいかよくわからない
    • タスクには明確な完了条件を設定
  • 開発完了済機能の確認
    • 実装を確認する際に確認が難しい画面がある
    • デバッグ機能を用意
  • デイリースクラムの長期化
    • 人数が増えるにあたり時間が長くなる
    • 案件別の報告

それぞれに得意領域を持つフロントエンドエンジニア

  • クリエイティブ寄り
    • デザインの糸を理解してHTML/CSS/JSで組み上げられる
  • エンジニアリング寄り
    • アプリケーションとして最適に構築

社内の推奨技術・ツール

  • Vue
  • React
  • Angular
  • RIOT-Riotx
  • jQuery
    • プロトタイプなどをさっと作るときに便利

どんな人がフロントエンドエンジニア?

  • 様々なバックボーン
  • 3つの気質
    • 楽したい
    • 便利にしたい
      • 社内環境もフロントエンド技術で便利にする
    • すぐ試してみたい
      • 新しいものが出てきたらとりあえず試してみる

この気質で社内の業務効率化を解消するためにスマートシェアボードのプロトタイプを作った

業務システムでこそ使えるPWA

中津川篤司さん

speakerdeck.com

Web業務システム用のHTML5フレームワーク

www.htmlhifive.com

  • MVC
  • jQuery/EJS
  • IE8など古いブラウザサポート
  • 慎重なアップデート(エンプラ系なので)

PWAで必須ではない

  • アプリ化
  • プッシュ通知
  • Chache API使用

必要なこと

  • 導入しやすいものから徐々に
  • 最良なものから取り入れる
  • ユーザー体験向上

技術的なアプローチ

  • レスポンシブWebデザイン/HTTPS
  • ストレージ
  • WebAuthn
  • Service Worker
  • マニュフェスト

ダイアログ・ヘル

  • マニュフェストは必須ではない
  • スマホにあふれるダイアログ・バナー
  • 無意識に無視・拒否
  • 現在はアドレスバーにアプリを知らせるアイコンが出る案を試している
    • 気づきにくい
  • ボタンを押してアプリをインストールしてもらうのは最優先ではない

速度改善

  • 旅行中500M/日
    • 切れると速度制限
    • jQueryの読み込みでエラー
    • よく使うファイルだけでもキャッシュすれば高速化できる
  • いきなり100%ではなく10%改善から始める

B2B Web App

  • 黎明期
    • iPad登場以降タブレット版業務アプリ増
    • プッシュ通知、位置情報、オフライン利用がメイン
  • 利用技術
    • Cordovaの利用
    • アプリ化することで審査が発生
    • JavaScript部分では落ちないがプラグイン(ネイティブコード)部分で落ちることがある
    • 速度が…(最近は改善)
  • メリット
    • 生産現場
    • ネットワークがあればどこでもアクセス
  • デメリット
    • OSの進化に追従できない
    • 審査で落ちる
    • アプリの更新が反映されない(アップデートしてくれない)

PWAの登場

  • 審査なし
  • 配布の手間なし
  • アップデートの自動適用
  • HTML5 APIで大抵の目的が果たせるようになってきた
  • JavaScriptが高速化し実用化レベルになった
  • メモリが大きくなってWebブラウザが落ちなくなった
    • 遅くなっても落ちないので業務アプリにとって最適

業務システムのPWAメリット

  • 利用者が限定される
  • 定常的な利用が期待できる
  • 高度なUIは求められない
  • Webブラウザ上で確実に動作する
  • オフライン化、表示の高速化
    • 生産性向上
  • 標準技術の採用による普遍性
    • 5〜10年以上の保守・運用
  • Web技術の採用

Technology

ServiceWorker

  • ワーカースレットで動作するのでバックグラウンド処理ができる

CACHE API

  • SW内で動作するキャッシュシステム
  • キャシュパターン workbox

Webプッシュ通知

  • VAPID
    • FCM不要
  • 独自
  • ブラウザごとに対応状況が違う

IndexedDB

  • Cookie
  • localStorage
  • IndexedDB

WebAssembly

  • コードの暗号化
  • キーの隠蔽化
  • Webアプリケーションの高速化
  • RustもいいけどGoがオススメ

WebAuthn

  • ハードウェアキーを使った認証
  • Krypton

マニュフェストファイル

  • manifest.jsonでアプリ名やアイコンを設定

Tips

  • キャッシュは注意
    • 有効期限なし
    • 強力なキャッシュ
    • 消えなくなる
  • Chrome for Androidでの設定
  • Lighthouseの利用
  • オフラインを再現
  • デスクトップでも使う
    • デスクトップアプリのように使える
  • ネットワーク対応
    • navigator.onLineで判定
    • window.addEventListener 'online' 'offline'でイベント発火

PWAハンズオン資料

github.com

Rust+WebAssemblyで広がるWebの世界

尾上洋介さん

speakerdeck.com

フリーランチの終焉

  • フロントエンド開発への要求は高まる
  • ハードウェア、JSエンジンの性能向上の恩恵を知らないうちに受けていた時代は終わるかも?
  • フロントエンドエンジニアがJSプログラムの速度に負う責任が増す
  • asm.jsを効果的につかえばこれまでWebでできなかった種類のアプリケーションが実現できる
  • WebAssemblyによる進化に期待
  • RustでWebの部品を作れる未来はそう遠くないかもしれない

WebAssembly

  • 1.0 has shipped in 4 majer browser engines
  • バイナリーフォーマット言語
  • 他言語からコンパイルして生成するのが一般的
    • C/C++,Rust,Go,AssemblyScript
    • 30以上の言語が取り組んでいる
  • ネイティブ処理とWebのギャップを埋める

Emscripten

  • C/C++からWASMへのコンパイラ
  • Mozillaが中心で開発
  • 実装例「
    • Cで関数を作る
    • emccコマンドでcのファイルを生成
    • requireでロード
    • wasm().then で受け取る

C/C++

  • メリット
    • 高速
    • 低レイヤーの操作
    • 過去の資産活用
  • デメリット
    • 安全性
    • 周辺ツールの不在
      • 言語と一体化した周辺ツールが少ない

Rust

  • 型安全
    • TypeScriptよりも強力な型システム
    • デフォルトで値が書き換えられない
  • メタプログラミング
  • パフォーマンス
  • WebAssemblyをオフィシャルにサポート

WebAssemblyの出力

  • wasm32-unknown-emscripten
  • wasm32-unknown-unknown
    • ランタイムなし

Setup

  • rustupの導入
  • rustup target add wasm32-unkonwn-unknown

ビルド

  • cargo newでプロジェクト作成
  • Cargo.tomlに設定ファイル
    • create-type=["cdylib"] でC言語から呼び出せる種類
  • cargo build

WebAssembly JS API

  • .wasmフアイルを読み込んでWebAssembly.instantiateにわたす
  • ArrayBufferを通じた低レイヤーな操作
    • Number、TypedArrayを扱う関数のみ

wasm-bindgen

  • RustオブジェクトとJSオブジェクトの相互変換レイヤーを定義して自動生成
  • js-sys,web-sysによるJS、ブラウザAPIの操作
  • webpackで予感時に読み込み可能

Introduction - The `wasm-bindgen` Guide

JSクラスの生成

  • Rustの構造体、traitからJSクラスを生成

wasm-pack

  • cargoへのtarget追加、ビルドの実行、npmパッケージの生成、配布までを自動化

Egraph Examples

Drawing Mandelbrot Set with Rust and WebAssembly

WwebAssemblyの今後

  • Post MVP Features
  • ツールのサポートの充実

www.youtube.com

Webのパフォーマンスを追求する意味

  • コンピューターの性能向上&理論の発展
  • よりパフォーマンス要求のきついものがWASM
  • パフォーマンス追求がWebの可能性を広げる

フロントエンドで作る理由

後藤知宏さん

speakerdeck.com

フロントできない理由

  • バックエンド脳
  • SPA案件がない
  • まだ時期じゃない

まだ時期じゃない?

  • フロントエンドはどんどん簡単になっている
  • バックエンドでもできるから…は言い訳にならない

Vue.js

  • HTML/JSベースでシンプルに導入可能
  • とっつきやすさ、学びやすさは最高レベル
  • 極論、JSできなくてもVue.jsできる

Nuxt.js

  • SPA構築がここまで簡単になった
  • Vue.jsの使いやすさはそのまま

vue-cli

  • コマンドで簡単にプロジェクトの初期セットアップが可能
  • 複雑なWebpack設定を自動で構築

Hosting

  • 静的ファイル構成のメリットの1つに高速なホスティングが利用できる
  • Firebase Hosting
  • NetlifyならGithub連携での自動デプロイも可能

SPAはより身近に簡単に

  • 数年前と比べるとフロント制作の地盤は大きく安定

技術選定の基準

  • 実務で使える(安定性)
  • みんなが使える(学習コスト)
  • 効率化できる(メリット)

わかりやすさは正義

  • 安定性と学習コストをクリアしたうえでどういうメリットを考えるかが重要

Why SPA?

SPA制作 - フロント設計

  • ページ遷移が容易になる
  • 適切なナビゲーションを添えてシンプルな画面デザインに
  • E2Eは最初から無理に頑張らなくていい
  • SPAにはSPAの作り方、慣れの問題

SPA制作 - API設計

  • 無理に抽象化的なAPIを作成する必要はない
  • APIの受け入れテストは簡単につくれる
  • バックエンドをAPI化することで品質を担保
  • 守りたいデータ資産の安全性がフロントと分離
  • より挑戦的なフロント改善を促進

変わる制作プロセス

  • SPAにはSPAの作り方がある

これまでの制作フロー

  • 大きな複数機能を一度に進めるのはとても大変

SPA時代の制作フロー

  • 機能を分割してスケジュール化する
  • 1機能ごとにリリース
  • リリース=外部リリースとは限らない

SPAの案件は「作る」

  • よりよい制作のためにSPA

怖くないフロントエンド

  • バックエンドでもできるの概念を捨ててフロントでつくるとどうなる?への挑戦
  • 作り方の変化を制作フロー全体に反映させていく

強くてニューゲーム

  • バックエンド経験の上にフロントエンドを積み上げるのではない
  • ニューゲーム感覚で新しい気持ちで挑む
  • フロントに親しむ
  • フロントを当たり前に

※参考情報

twitter.com

www.youtube.com

【読書メモ】エンジニアのためのマネジメントキャリアパス

エンジニアのためのマネジメントキャリアパス ―テックリードからCTOまでマネジメントスキル向上ガイド

エンジニアのためのマネジメントキャリアパス ―テックリードからCTOまでマネジメントスキル向上ガイド

巷でも話題になっていますが個人的にもちょうどこういう本を読みたかったタイミングでもあったため、久々に新刊を読みました(いつもはある程度時間を置いて周りの反応を見てから読むことが多い)。全体の感想として、エンジニア組織に属する人みんなに読んでほしい本です。特に、マネジメントを目指さないエンジニアや、コードを書かずにエンジニア組織のマネジメントに就く人にも読んでほしいと思いました。その理由も含めて、まずは個人的に印象に残っているポイントついて書いておきます。

オススメのポイント

エンジニア視点で書かれたマネジメント論

マネジメントの良書は世の中にたくさんあります。これらの本は広く一般的に支持されており、実際にマネジメントを目指す際には読むべきなんでしょうが、古典的な本が多いので日進月歩で進化する我々の業界に置き換えてイメージしながら読み進めるのはなかなか骨が折れる作業です。また、これらの本で書かれている例え話はたいてい企画や営業目線で語られているので、エンジニア視点でいったん自分の仕事に置き換えてイメージし直すという作業が発生します。これもまた読むハードルを上げている要因と言えるかもしれません。

エンジニア視点で書かれていることで我々の仕事と関連づけたイメージがしやすく、スムーズに読み進めることができるます。まえがきで及川さんが「エンジニアリングマネジメントはソフトウェア開発と似たところがあります」と書いていますが、この点についても他のマネジメントの本を読むよりもこの本のほうがイメージしやすいと思います。

もちろん、本格的にマネジメントを目指すと決めたならその次はドラッカー本なども読み進めるべきと思いますが、そこに向かうまでのハードルを下げてくれる本とも言えます。

マネジメント[エッセンシャル版] - 基本と原則

マネジメント[エッセンシャル版] - 基本と原則

マネジメントではなくマネジメントキャリアパスが主題

まえがきに書かれているように「エンジニアはマネジメントに関わることを毛嫌いする傾向」があります。せっかく技術スキルを磨いてもマネジメント職に就いたらその経験はあまり活かせないという事例もよく聞きます。しかし、組織においてエンジニアリングとマネジメントは両輪がうまく廻らなければ企業が継続的に事業を発展させることは難しいと私は考えています。継続的に事業を発展させられなければエンジニアの活躍の場も減っていくでしょう。組織の中でエンジニアがマネジメントに関わっていくことが健全に認知されないと、このような負のスパイラルに陥ってしまうと思うのです。そのためにはこれからキャリアを積み上げていくエンジニアにとって、この本のようにマネジメントキャリアパスが明示されていることは非常に価値の高いことだと思いました。

「複数チームの管理」の章に以下のような記述があります。

最低でも1種類のプログラミング言語を自在に使いこなせるようになっていないと、コード書きの作業からすっかり「足を洗ってしまう」ことの危険ははるかに大きくなります

これはこのポジションに就くまでに逆算して取り組むべき技術スキル習得のヒントにもなります。マネジメントキャリアパスを主題として読み進めることで、エンジニアリングとマネジメントを両立させてキャリアパスを歩むためのヒントが得られると思います。

マネジメントを目指さない人のキャリアパスの参考にもなる

一方で、一般的にはマネジメントから距離を置いたエンジニアのキャリアパスも明確に定義されていないケースが多いため、エンジニアがマネジメントから距離を取るとキャリアパスの迷子のになってしまう事例が起こりがちです。ある程度の規模以上の企業に所属しているなら、いかに技術スキルの高いエンジニアでもそれなりに意義のあるポジションに就いていなければ仕事を任される機会は得られません。私がマネジメントを目指さないエンジニアにも読んでほしいと思ったのはこの部分で、マネジメントを任されるにしても任されないにしても、組織の中で価値ある仕事の機会を得ようとするならマネジメントサイドと折り合いをつけながら仕事をするのは必須だと思うからです。マネジメントに関わらないにしても他人のキャリアパスを妨害するようなエンジニアが組織の中で価値ある仕事の機会を得られるとは考えにくいため、マネジメントキャリアパスを知っておいて損はないというわけです。マネジメントキャリアパスとは違う自分なりのエンジニアキャリアパスを模索するならマネジメントキャリアパスを知っておくことは無意味ではないと思います。

テックリードの章の「決断の時──技術職を貫くか、管理職への道を選 ぶか」の節に以下の項があります。

  • 私の想像していた 「(部下をもたない)シニアエンジニアとしての日々」
  • 現実の 「(部下をもたない)シニアエンジニアとしての日々」
  • 私の想像していた 「管理職としての日々」
  • 現実の 「管理職としての日々」

わりと生々しい現実を突きつけられる記述もありますが、マネジメントから距離を置いたキャリアパスをイメージするうえでのヒントにもなると感じました。

ボス・マネジメントの参考になる

ボス・マネジメントはマネジメントキャリアパスを歩むうえで必須ともいえるスキルです。リーダーシップの古典的名著であるジョン・P・コッターの「リーダーシップ論」でも「上司をマネジメントする」という章で述べられています。

第2版 リーダーシップ論

第2版 リーダーシップ論

自分の職位だけでなくさらに上位の職位まで読み進めることで、自分の上司やその先の経営幹部に至るまでの職位の人がどのような課題を抱えて行動しているかをエンジニアの視点で知ることができます。自分に馴染みのない職位について書かれている章もそのような視点で読み進めればボス・マネジメントのスキルを磨くヒントにもなるでしょう。

読み進めるための補足情報

「まえがき」で及川さんが少し補足されていますが、日本では馴染みの薄い言葉がいくつか出てきます。これらは事前に意味を理解してから読み進めたほうが理解が深まると思います。

ジョブディスクリプション

「職務記述書」のことです。

具体的な職務内容や職務の目的、目標、責任、権限の範囲のほかに、そのポジションとかかわりをもつ社内外の関係先、必要とされる知識や技術、資格、経験、学歴など

採用時だけでなく社員の評価や昇進時にも基準として使われるようです。

「ジョブ・ディスクリプション」とは? - 『日本の人事部』

キャリアラダー

ラダーとは「はしご」のことです。日本語だと「出世の階段」と言う言葉もありますが、少しニュアンスは違っていてもう少しきっちり体系化されたしくみを指します。

仕事を難易度や賃金に応じて複数の職階に細分化。それぞれの職務内容や必要なスキルを明確にし、下位職から上位職へ、はしごを昇るように着実に移行できるキャリア向上の道筋と、そのための能力開発の機会を提供するしくみ

「キャリアラダー」とは? - 『日本の人事部』

キャリアパスの概要

読むべきポイントは前述の通りですが、それぞれのポジションで求められる役割やその意義について、概要をまとめておきます。具体的なマネジメントの事例やコツが知りたい場合は、本書を読み進めるのが良いでしょう。

マネジメントの基本

「上司に何を求めるか」と「管理のされ方」について。

『できる上司』に何を期待しますか?」と訊かれたら、答えられますか。

マネジメントの基本はマネジメントされる立場でマネジメントを認識する事から始まるという主旨。

メンタリング

メンティーとメンターの双方にとっての好機

双方にとって意義があるのは大まかに次の3つ

  • 相手を通して会社や組織、人間関係を知る
  • コミュニケーション能力を高める機会
  • 未来への人脈づくり

テックリード

専門スキルとリーダーシップとが共に求められる役割

テックリードの主な役割は次の3つ

人の管理

人の管理で求められる主な仕事は次の4つ

  • 直属の部下との関係の構築
  • 定期的な1対1のミーティング
  • キャリアアップや作業の進捗状況、改善領域、功績の推奨などのフィードバック
  • 各メンバーの研鑽を要する領域の見極めと、その領域の能力強化

チームの管理

作者によれば「チーム全体の責任を負う管理者」は「エンジニアリングリード」である。

人的管理以外に焦点を当てるべき側面

  • ITスキルの維持
  • 機能不全に陥ったチームの「デバッグ
  • チームの面々の「盾」になる
  • チームの意思決定を主導する

複数チームの管理

この職位は大抵「技術部長」

  • 直属のテックリードが少なくとも3,4人いる
  • テックリードの支援を同時並行で進める
  • コードをあまり書いていない

このレベルの職位で必要な側面

  • 時間の管理
  • 意思決定の委任
  • 開発チームの健全性を見極める

複数管理者の管理

期待される職務内容は、「複数のチーム を率いる管理者」の場合と大して変わらないが、以下の点が異なる。

各チームの専門分野が拡がる上に、プロジェクトの件数も部下の人数も自分独りでは到底管理不可能なレベルにまで増える

部署全体を管理するうえで外せないコツ

  • スキップレベルミーティング
  • 新任管理者、ベテラン管理者の管理
  • 管理者の採用
  • 直属の管理者に責任を課する
  • 機能不全に陥った組織の「デバッグ
  • 技術戦略の調整

経営幹部

経営幹部の日々の職務内容は会社によって大きく異なる。

エンジニアである我々はテクノロジーの専門家ならではの責任 -- 絶えず変化を続けるテクノロジーの世界でキャリアを積んできた者ならではの責任を-- 担っているのです。

CTO、VP、技術本部長、統括者など呼び方は様々だが、とにかく技術部門の頂点に立ったらこの4種類の職務を果たしていく。

幹部の役割の一部

  • 研究開発
  • 技術戦略・ビジョナリー
  • 組織化
  • 執行
  • 技術部門の対外的な「顔」
  • 社内の技術インフラとその運用
  • 事業化

トゥルー・ノース⇒管理者が職務を果たす上で外してはならない勘所

このような指導者になりたい人は、自信をもって迅速な意思決定を行えるよう、ぜひともキャリアの初期の段階から意識的に時間を割いて「技術者の勘」 を磨く努力を重ねなければなりません

文化の構築

文化の構築は技術系の経営幹部になると担う職責のひとつ。

文化は、拠り所となる重要なインフラの場合と同様に、チームが成長、発展していく過程で配慮を欠いてはならない要素

次の4つを判断基準にして自分の役割を見極める

  • 社員の数
  • 創業からの年数
  • 既存のITインフラの規模
  • リスク許容度

参考ブログ

他の人の感想を読むことで新たな気づきを得ることができるので合わせて読むと良さそうです。

「エンジニアのためのマネジメントキャリアパス」から学んだことをまとめてみた。 – iida – Medium

マネジメントに興味がなくても騙されたと思って『エンジニアのためのマネジメントキャリアパス』を読んでくれ - dskst's diary

「エンジニアのためのマネジメントキャリアパス ―テックリードからCTOまでマネジメントスキル向上ガイド」を読んだ - A1 Blog

【勉強会メモ】Mobile Act OSAKA #7

mobileact.connpass.com

今回もXamarinから仮想通貨、CI/CDまで様々な題材でモバイルアプリに関する知見を得ることができる場だったと思います。そら案内のバックエンドも含めた全体構成の貴重な事例も参考になります(10周年おめでとうございます)。クリーンアーキテクチャは10分間で全て理解するのは難しいですが本を読むモチベーションになる内容でした。懇親会ではいつものように美味しいビールを頂きました。

usami-k「Xamarin を使った iOS アプリ開発の現場から」

speakerdeck.com

  • 複数プラットフォームに対応
  • C#で書く
  • 使用実績:NHK紅白

IDE & storyboard

  • VS for MacXcode併用
    • VS for Macでひととおりできる
    • 他のIDEデバッグやstoryboard編集が難
    • Viewの配置やレイアウト調整はXcode

C#

  • 現在も進化
  • event
  • async / await
    • 実装例:アラートのボタン押下待ち
  • reactive extensions
    • いわゆるRx
    • ライブラリを入れなくても標準で対応している強み

shohei「仮想通貨アプリを作ったけどAppleReviwerに弾かれた話」

歩いたら仮想通貨をもらってお店でポイントとして使えるアプリをAppleで申請

  • リジェクト12回
  • 国際電話4回

App Store Reviewガイドラインにおける暗号通貨について

  • 組織として登録しているデベロッパに限り許可
    • 最近追加になった
    • 法人アカウントが必要

法人のかたにお願いする

  • Opening Lineに支援を依頼

仮想通貨アプリを法人アカウントでリリースする際の注意点

  • 事前情報が必要
  • そのまま申請すると仮想通貨の情報を教えろと言われる
    • 仮想通貨の市場がどれくらいか
    • 種類(NEM
    • どこで使えるか?
    • いつリリースされたか?
    • 歴史

Reviewに出す前にメモ欄に書くとすぐReviewが通りリリースできる

itok「そら案内の作り方」

speakerdeck.com

そら案内

  • 11/17で10周年

気象データ

  • 公開されている予報API
  • 契約に基づく予報データ
  • XMLJSONに変換
  • 画像⇒主にそのまま
  • 独自フォーマット⇒サーバorクライアントで処理

サーバ

  • push通知のために別系統
    • Parse独自構成
    • Firebase使用
  • AWS
    • EC2/DynamoDB/SQS/S3
  • さくらVPS
    • 配信用
    • 制限がない
  • ほぼ Node.js(Typescript書き換え中)
  • 独自フォーマットのサーバ処理は自作コマンド
  • 市町村2,000地点、アメダス1,300地点の一時ファイル
    • i-nodeを使い切ってしまう
  • 合併で地点コードが更新される
    • 事前準備大変

クライアントアプリ

  • 用途に応じたアプリ構成
    • そら気温などの単機能アプリもあり
  • 以下略

アプリリニューアル予定

Takanori Hirobe「Swift Package Managerについて」

近年のモバイルアプリ

  • 複雑で多機能
  • 自前で実装していたら途方もない時間
  • ライブラリ化して公開
  • 例)LINE
    • 100個以上

⇒便利なライブラリを自分のアプリで使いたい

ライブラリの管理

  • 依存管理
  • バージョン管理

iOS開発のためのライブラリマネージャ

SwiftPackageManager

  • Swift本体に組み込まれたパッケージマネージャ
  • ほとんど使わrてていない
  • iOSアプリを公式サポートしていない
  • 将来の対応を約束している

オススメ資料

developer.apple.com

minomata「モバイルアプリ開発に使える設計の話」

speakerdeck.com

設計実装でよくある悩み

  • FatViewControllerをなんとかしない
    • MVC/MVVM/MVPなど
    • 乱立するMVなんとか

MVVM+クリーンアーキテクチャ

クリーンアーキテクチャ(The Clean Architecture翻訳) | blog.tai2.net

基本原則

  • クリーンな設計にするためのルール
  • 依存関係を一方向にする
    • 内側は外側を知らないように依存関係を逆転させる
  • 層をまたぐ参照はインターフェイスを経由する
  • MV〜のような特定のクラス構成に縛るものではない
  • 原則を守れば MVC,MVP,MVVMなど任意のアーキテクチャと組み合わせてよい

基本4層

冗長だけど何が嬉しいのか

クリーンアーキテクチャのキモ:制御の反転

※参考

Clean Architecture 達人に学ぶソフトウェアの構造と設計 (アスキードワンゴ)

qiita.com

qiita.com

Hiron「4000のワーニングと戦え!これは警告だ!」

speakerdeck.com

マネーフォワードの事例で警告除去にとりかかる

moneyforward.com

  • 警告除去だけの時間は確保できないので合間で作業
  • チームメンバー間の温度差

警告除去を盛り上げていこう!

  • Slackにチャンネル作成
  • 警告数の遷移を可視化

警告を消すってどういうこと?

  • 警告⇒文法的には間違っていないがプログラムミスの可能性のある部分の指摘
  • 警告を消す⇒問題があれば修正、なければ問題がないことを意思表示

Xcode9.3へのアップデート

  • 4,000超え
  • Implicit retain of 'self' within blocks
    • UIスレッドで同期的に実行するユーティリティメソッドを作っていた(swiftなら@namescape)

どう解決するか

  • A案:人海戦術
    • 規模的な解決
  • B案:警告をNoにする
    • 警告は捨てる
  • C案:従来のコードには目をつむる

AとC採用

  • 確認する意思のある人は確認して手動追加
  • それ以外は機械的に追加

警告を増やさないために

  • エラー扱いにする⇒デバッグ時に煩わしい
  • CIのビルド時に警告をエラー扱いに

KatsukiNakatani「個人でもできる簡単CI/CD(Android)」

Androidの開発からリリースまでの作業

  • 少しずつめんどくさく感じる
  • 毎回apkやaabをアップロードして変更履歴
  • リリースビルドしてadbコマンド
  • ビルドに時間がかかる

Cricle CIでビルド環境を改善

  • 無料でプライベートリポジトリにアクセスができる
  • 1コンテナ1ジョブまでは無料
  • developブランチは無視でmasterはビルド

出来た結果のapkを配信したい

  • 実機端末にケーブルレスで配信したい
  • 内部テストとして必要なメンバーだけ配信
  • ストアに掲載する情報もできればリポジトリで管理したい

Deploy Gate

Google Playの内部テスト版トラック

  • リリース前レポートが実行されず即座に配信される
  • aabも使える

Gradle Play Publisherを使う

  • リリースするトラック情報の編集
  • build.gradleに書く
  • バージョン挙げ忘れなどもチェック

※参考

support.google.com

Kenta Nakai「Asset Catalog再入門」

speakerdeck.com

画像の管理

  • ベクターイメージを使える(PDF)
  • 1x,2x,3xと用意しなくても良い
  • Xcode 6から
  • Preserve Vector Data

Preserve Vector Data

  • Xcode9/iOS11~
  • PDFのベクターデータをバイナリに含めるように
  • 実行時に自動的に拡大・縮小

色の管理

  • 定義した色はコードでもInterface Builderでも使えて便利
    • UIColer(name: "xxxx")

その他データ管理

  • テキストデータ、オーディオなど
  • プロジェクトの中に入れるよりは一括管理しやすい

アセットが大量になったら?

  • Namespaces
    • アセットに名前空間を提供
    • Asset Catalog内のフォルダごとにnamespaceを設定
  • Asset Catalogごとに分ける
    • フォルダごとにはできない
    • Bundleを分けてBundleの中で作れば分けられる

【勉強会メモ】関西Node学園 4時限目

nodejs.connpass.com

気づけば4時限目を迎えた関西Node学園。Nodeに限らず広くJavaScriptに関する知見共有の場ということで最近はReactやVueの話題が多いですが、そのあたりから流行をうかがい知ることができます。直接関係ないですが、Node.jsのアドベントカレンダーも参加を募集しているようです。

qiita.com

React/js小ネタ集

YukimasaFunaokaさん @mochiya98

遅れて参加して聞き逃してしまったので資料のみ紹介します。

JS/React小ネタ集 - Google スライド

Firebase Cloud Functionsを使って頑張って歩いた人へ仮想通貨NEMを無料で贈る仕組みを作った話

shoheiさん @hobbydevelop

歩いたらブロックチェーントークンをプレゼントするアプリを作りました

NEM

  • 2015年最初のブロックが生成されたブロックチェーン
  • 単位はXEM
  • NEMの機能をWeb APIとして提供されている
  • NEMを管理するためにはウォレットが必要
    • 送金先アドレス:お金を受け取る
    • 公開鍵
    • 秘密鍵:バレると送金とかされてしまう

i-yusuke.com

Firebase

  • Cloud Firestore
    • NoSQLデータベース
    • 高速
    • 様々な言語で利用可能
  • Cloud Functions
    • バックエンド処理
    • Node.js
    • イベント駆動

アプリの流れ

  1. 歩いたら歩数をFirestoreに登録
  2. Firestoreの登録をFunctionへ通知
  3. Functionから送金

nem Library

nemlibrary.com

アプリ

FiFiC

FiFiC

  • Opening Line, Inc.
  • Health & Fitness
  • Free

歩くことでトークンを発行できる

  • Q) 歩数はどうやってカウント?
    • iOSAndroidは標準で取得できる
    • そのデータをサーバへ送る
  • Q) お金を受け取る?
    • 仮想通貨ではなくトークンを受け取る

Our Favorite DependencyUpdates Has Been Deprived

ttさん @tatsushitoji

speakerdeck.com

npmどうやってアップデート?

renovatebot.com

  • 2018.3月 renovateリリース
  • Automated Dependency Update

対応サービス

動作環境

良い点

  • 自動でPRを作成
  • config ファイルで柔軟にカスタマイズ
  • OSS
  • Auto merge

これまで

  1. ブランチを作ってPush
  2. PR作成
  3. WebhookでCI実行
  4. CIが通ったら手動マージ

renovateなら 2 以降自動化できる

  • Onboading PRを作ってくれる

configファイル(renovate.json

  • メジャーアップデートはAuto merge
  • タイトルを編集するとrebaseしてくれる

※参考

user-first.ikyu.co.jp

js vs gs 〜JavaScriptとは違うGoogleAppsScriptの勘所&オープンデータ生成のGAS活用事例〜

xinsuzukiさん @xinsuzuki

speakerdeck.com

GAS

  • alertなどの関数が使えない
  • ES2015非対応
  • コード補完できない
  • Github管理できない

解決できるスクリプト

  • js->gs変換ライブラリやgas-clasp-starter

github.com

独学でVueを勉強した勢いで自社アプリをリプレイスした話

いずみんさん @is_ryo

www.slideshare.net

なぜVueなのか

  • jQueryとかでアプリを作るの飽きてきた

自社アプリをリプレイス

IoT.kyoto VIS

iot.kyoto

  • IoTデバイスデータの可視化アプリ

リプレイスした結果

  • jQueryから卒業
    • DOM操作って複雑になりがち
    • めんどくさいDOM操作をVueが解決
    • DOM操作のストレスから開放
  • アプリがServerlessになった

最近のvue界隈

  • VueにもCLIがある
  • 生でJS書きたくないからTSで
    • 初期のビルドでTypeScriptを用意できる
  • Pug/Sass/TypeScriptでVueを書いている
  • Vue UIがいい感じ
    • beta版
  • vuesax

Evan You来日記念オンライン質問コーナー

www.youtube.com

TypeORMを素振りした話

ゆずさん @yuzu_441

発表資料

TypeORMを素振りした

Node.jsでいい感じのORM知りませんか?

TypeORMとは

  • TypeScriptのORM
  • Node.js/Browser/ReactNative対応
  • MySQL/MariaDB/Postgresなどに対応

github.com

ormconfig.json

  • DBの設定
  • Entityのパス

できること

  • save でinsert
  • findOne などで検索
  • JOINもできる
  • Transactionも書ける
  • @BeforeInsert みたいなフックもある
  • Loggerの設定もある
  • RubyActiveRecord風にも書ける

type safeに書けるのか?⇒今のところ書けない

プライベートでReactとTypescriptでアプリを作ったので知見を共有ししつつ、有識者にマサカリでズタズタにされたい

Nokogiriさん @nkgrnkgr

speakerdeck.com

React/TypeScriptでハマったことなど

作ったもの⇒expenses-automation

コンポーネントとデータ構造はほぼ同じ構成

  • サーバからは月単位のデータをfetchしStateにそのまま突っ込む

モジュールのディレクトリ構成

ネストの深いStateの更新

  • Reactの setState はStateが持つ第一階層のオブジェクトしか更新できない
  • 駅名を変更する場合でも月ごとのStateの更新が必要

Imuutable.js

  • 普遍データ構造を扱うFacebook製ライブラリ

CSSはなるべく書きたくない

bulma.io

TypeScriptの導入

  • 開発規模が小さいと方安全の恩恵は感じない
  • Interface定義によるVSCodeの入力補完の恩恵はすごい
  • TypeScriptを使うと引数がどんな戻り値を期待しているかが一目瞭然

パフォーマンス・チューニング

github.com

Redux

  • 今回は導入なし
    • バケツリレーは苦にならないと判断
  • 小さくてもバケツリレーになるので入れておけばよかった

FunctionalComponent

  • Stateがないものだけ使用

VSCode拡張

  • Debugger

code.visualstudio.com


PR告知

自社の宣伝で恐縮ですが、弊社でもNodeやVueを使っているチームがあって今回の勉強会にも参加していました(偶然会場で会った)。そんなチームのメンバー(今回の勉強会の参加者とは別の人ですが)も登壇する大阪オフィス初のMeetupが11/27に開催されますのでよろしければご参加ください。

rakus.connpass.com

【勉強会メモ】ScrapboxやGyazoを生み出しているNOTAの開発の現場

devlove-kansai.doorkeeper.jp

  • 日時:2018-10-29(月)19:30 - 21:30
  • 場所:株式会社リアズ

京都でScrapboxGyazoというサービスを開発しているNOTAという会社の開発の現場の話を聞いてきました。Scrapboxというサービスは個人で使ってみたことはあるのですが、それ以前に何かで知っていたはずだけど何だったかな?と思い出せずにいたのですが、答えはセションの中で紹介されていたWEB+DB PRESS vol.102の記事でした。この記事の中でも書かれていたドッグフーティングの取り組みが今回のセッションでも話題になっていました。

gihyo.jp

たしかにScrapboxGyazoのようなサービスではドッグフーティングがとても大事だというのは話を聞いていてよくわかりました。思ったとおりに使えないと自分たちが困るくらいにドッグフーティングを徹底するというのは緊張感があってとてもよい環境だと思いました。

スクラムの部分はやや変則的なスタイルだと感じましたが、リモート前提でのアジャイルなスタイルを模索して取り組んでいるのがよくわかりました。ドッグフーティングと同様にリモートワークを中心に据える文化にこだわっている点は、自分たちがプロダクトにコミットし続けるために重要なことなのだろうと思いました。

アジャイル開発チームのための、ナレッジ共有入門

洛西 一周さん @rakusai

※遅刻して前半少し聞き逃しました。。

  • 競争より創造
  • ITの革命は常にユーザー向けの機能から
  • Notaは創造のお手伝いができるツール群を開発
  • プロジェクト管理を通じて、クリエイティブな組織にどうやって切り替えていくか

RemoteOnly.org

リモートワークキングの重鎮による宣言文

f:id:radiocat:20181029235243p:plain:w500

Notaは日本の企業として始めてRemoteOnly.orgに掲載

リモートワークの失敗

  • 実際に人が会って、会話をしないと、知的なことは進められない
  • Gyazo&Scrapboxを使おう
  • オフィスをバーチャルに再現しようという考えを全部捨ててみる
    • 「タスク管理」はどこまで行ってもサマリーの管理

バーチャル->リアル現象

  • ミーティングの議題だけ書いておくと勝手に議題が進む

f:id:radiocat:20181029235746p:plain:w500

モダンなナレッジ共有に至る原則

f:id:radiocat:20181029235907p:plain:w500

暗黙知集合知化して闘う

f:id:radiocat:20181030000008p:plain:w500

ドッグフーティング

  • 自分たちがリモートワークして毎日Gyazo,Scboを作っている

Notaのスクラムとマネジメント

秋山 博紀さん @akiroom

speakerdeck.com

CTOとVPoE

  • CTO:技術系の役員
    • 新しい技術課題への挑戦、考察、実験
    • 長期スパン
  • VPoE:管理職
  • 組織構築、採用、育成、マネジメント
  • 中短期スパンで考える

スクラム導入後にVPoEに就任

スクラムの導入経緯

  • 導入前:自由にタスクを決めて動く
    • 人が増えてマネージャが全体を見られなくなった
    • 当時の赤字を解消するためタスクの確実な実行が必要

以下2点を解決するためにスクラムを導入

  • 会社で何が起きているか
  • 必達のタスクを確実に遂行する

Nota式スクラムを支える技術

Sprint ,KPT

  • 2週間1 Sprintタイムボックス
  • Sprint初日にSprint中にやる内容を決める
  • 毎日共有
  • 最終日にふりかえり、KPT

Sprint 0〜

  • スクラムの解説ページを作った
  • タスクを集約して俯瞰できるようにする
    • 体制の構築に時間をかける余裕がない
    • 慣れてきた人が増えたらルールを追加
  • 体制
    • エンジニアとデザイナーDev
    • PO⇒CEO
  • Start MTG
    • 具体的な施策の説明
    • メンバーが現在のタスクを出していく

Sprint100週間で起きた変化

  • Sprint 53(現在)

scrapbox.io

Sprintのメリット・デメリット

  • メリット
    • 実際にやってみて会社が取り組んでいるタスクが明瞭に
    • お互いに困っていつところをさ助け合えている
  • デメリット
    • 今のところ無い
    • 人数が増えた時にどうなるか

Kanban

  • ZenHub利用
  • 大事なタスクの進捗を厳密に管理
  • レビュー待ちが一目瞭然

Scrapbox式プロジェクト管理

  • Scrapboxにタスクを列挙
  • 議論の粒度を柔軟に制御
  • テキスト派も会議派も満足

Nota式スクラムのコツ

  • 変化をよしとする
  • 革命をしない・改善をする
  • 多次元管理する
    • Github Issue
    • Scrapboxを活用=多次元=プロジェクト+日報+ほか

Gyazoの開発の進め方

Pasta-Kさん @pastak

speakerdeck.com

Gyazo Browser Extension

Gyazoの開発環境

  • アプリ
  • コミュニケーション

基本的に全員がリモートワーク可能

Chat Ops /w Github Bot and CI

  • PR⇒commitごとにstaging環境自動生成・更新⇒deployment APIで通知
  • ninja: release 〜 とチャットに打つとrelease用のPRと確認用の環境が構築される
  • PRがmergeされるとdeply開始

ずっと変わっていないこと

  • どこでも働ける
  • Gyazoがあらゆるコミュニケーションの中心

Gyazoとドッグフーティング

Gyazoの新機能の生まれ方

  • ビジネス的な要望
  • VPoEとかから頼まれてSprintのタスクに組み込まれる
  • ドッグフーティング

Move Fast and Beak Things

  • 元はFacebookのモットー
  • すばやく行動し破壊せよ
  • とにかくデモファースト
    • デモを大事にする
    • 結局作ってみないとわからない
    • 勝手におもしろ機能

誰でもGyazoに関わる全てのコードを変更できる

  • 日々の文句があればPRで闘う

A/Bテスト

  • 今はやっていない
  • どんどんdeployしたりrollbackできるのでどんどん出して改善するスタイル

スタッフ向け機能

  • リプレイスの影響が大きいものは作りながらスタッフ環境で日々ドッグフーティング

Scrapboxのドッグフーティング開発

daiizさん @daizplus

scrapbox.io

ドッグフーティング

Scrapboxの開発にScrapboxを使う

  • いろいろな用途で使う事が大事
    • 日頃の開発コミュニケーション
    • 個人のブログ
    • 複数人での勉強会
  • 気合が入る
    • 自分が使うものが壊れていると困る
    • 面白い機能や使い方を見つけることができる

やりたいことを全て書く

  • とにかく書く⇒アイデアをリンクでつなげる
    • ページを切り出す機能を使って細かく考えていく
    • イデアの例
      • キーワードを指定したGoogle Maps埋め込み
        • 建物を入力して地図
        • イデアはボツになったが地図を埋め込む機能で使われた
  • 要望やバグを書く
  • 作る機能について書く
  • 調べたこと、試したことを書く
  • 小さく作ってPRを出す

Q&Aセッションのメモ

  • あまり書くのが得意ではない人もいるが、Scrapboxの使いかたは箇条書きが多く、長い文章は書かない
  • 書ける人がフォローする

リモートワークの勤怠や評価の観点

  • GitHubでエンジニアの仕事が可視化されてマネージャと話をすればだいたいわかる
  • 時間では評価せず中身で評価

カルチャーの作り方やチームビルディング

  • あとから来た人が何を聞いても大丈夫なようにテキスト化
  • 絵文字を多くしてみる
  • 知識をフラットにすると組織もフラットになる
  • 開発合宿をやる

2週間スプリント

  • 中間チェックポイントがあって進捗のカバーなどを相談する

ふりかえり

  • 議論は前回スプリントから継続テーマをScrapbox上でやりとり
  • スプリントの終わりではなく各々が思いついた時に書く
  • Scrapbox上で議論が落ち着いてきたら最後はマネージャが議論をまとめる
  • 結論が出たテーマはふりかえりテーマから除外