とんかつ時々あんどーなつ

〜たとえ低空でも飛行していられるように〜

CircleCI から GitHub Actions への移行

Angular で作っているアプリの CI を CircleCI から GitHub Actions に移行したのでそのメモ。

CircleCI でやっていたこと

  • npm パッケージのインストール
    • インストール後の node_moduels をキャッシュ
  • build
  • unit test
    • テスト結果は Artifacts に保存

GitHub Actions の導入

事前準備

  • リポジトリの Actions タブから新規でセットアップする
    Get started with GitHub Actions
    Get started with GitHub Actions
  • 選択するのは Node.js
    • Set up this workflow を押す

Node.js
Node.js

  • .github/workflows/nodejs.yml の Edit ページが出るのでファイル名だけ .github/workflows/ci.yml に変えてコミットする
name: Node CI
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [8.x, 10.x, 12.x]
    steps:
      - uses: actions/checkout@v1
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v1
        with:
          node-version: ${{ matrix.node-version }}
      - name: npm install, build, and test
        run: |
          npm ci
          npm run build --if-present
          npm test
        env:
          CI: true

今回やった設定

  • node-version は 12.x 系だけでいいので node-version: [12.x] に変更
  • パッケージマネージャーを npm から Yarn に変更
         uses: actions/setup-node@v1
         with:
           node-version: ${{ matrix.node-version }}
-      - name: npm install, build, and test
+      - name: yarn install, build, and test
         run: |
-          npm ci
-          npm run build --if-present
-          npm test
+          yarn
+          yarn build
+          yarn test
         env:
           CI: true
  • node_modules/ を cache に保存
         uses: actions/setup-node@v1
         with:
           node-version: ${{ matrix.node-version }}
+      - name: Cache node modules
+        uses: actions/cache@v1
+        with:
+          path: node_modules
+          key: ${{ runner.OS }}-yarn-${{ hashFiles('**/yarn.lock') }}
+          restore-keys: |
+            ${{ runner.OS }}-yarn-
       - name: yarn install, build, and test
         run: |
           yarn
           yarn test:ci
         env:
           CI: true
+      - name: Archive code coverage results
+        uses: actions/upload-artifact@v1
+        with:
+          name: code-coverage-report
+          path: coverage/Portfolio

感想

  • 設定は簡単でわかりやすい
  • おおよそのことは CircleCI と同じことができる
  • Artifact の upload は見れるが CircleCI みたいにブラウザで見れないのが難点…

2019 年振り返り & 2020 年の抱負

平成 → 令和
平成 → 令和

目標の振り返り

  • 2019 年の抱負は これ
  • Angular を使ったアプリケーションを個人で作る
  • 月 1 くらいで Qiita か Medium に記事を書く
    • Qiita は Advent Calendar の追い込み入れても 4 件、Medium は 7 件書いたところで Medium 使うのをやめてしまった
    • Medium やめてからははてなブログに戻って 4 件書いたので全部で 15 記事書いたことになる
  • 筋トレする
    • してない
  • 定期的に振り返る
    • 定期的に振り返っていないので筋トレをしていない…

あったこと色々

  • 会社主催の Classi Angular Night を 4 回やることで 4 回の発表機会があった
    • 発表資料 もそれなりに見てもらっていてよかった
  • 初めてライブビューイングを見たけど直接現地に行かなくてもイベントを楽しめるので、なるほどこれは画期的だなと思った
  • EM 系のポッドキャストを聞いたり勉強会に行ったりと少し興味を持った
  • lacolaco さんがアドバイザーになってつよつよエンジニアと働く機会を得た
  • Angular 日本ユーザー会のスタッフ を始めた
    • ng-japan みたいな大きなイベントがどうやって開催されていくのかを知れたり純粋に人のつながりができたりしてとてもよかった
  • ng-japan と builderscon の CFP を出してみた
    • どっちも採択はされなかったけど、実際に CFP を考えてみたりネタを考えてみたりしたので経験にはなった
  • ちょっとだが OSS にコントリビュートした
    • いつも自分が使っている OSS に少しでも貢献できるのがとても嬉しいことだと知ったしもっと続けていきたい
  • スタバのロースタリーにハマった
  • ユーザー会のつながりでハンズオンのチューターをやった

改めて振り返ってもめちゃくちゃ色々あった一年だった。

2020 年の抱負

  • 来年も引き続き社外で発表をする
    • 今年が 4 回だったので 5 回以上を目指す
    • CFP も出す
  • 英語の勉強をする
    • どこかで TOEIC を受ける
  • うっかり体重が増えてしまったのでまたランニングをする
  • 日々インプット / アウトプットを意識する
    • 月に 1 冊は技術書を読む
    • 月に 1 回はブログを書く(年 12 回じゃなくて月 1 回を目指す)

Angular アプリケーションを Firebase に一瞬でデプロイする

Angular CLI v8.3.0 で導入された ng deploy コマンドで Firebase への deploy を試したメモ。 automatic-deployment-with-the-cli を参考にした。 ng deploy コマンドは 3rd party library を使って様々な Hosting サービスにデプロイができる。今回は @angular/fire を使って Firebase hosting へのデプロイを試す。

事前準備

  • Firebase hosting を使うので Firebase console からプロジェクトを追加する
  • npm package の firebase-tools をグローバルインストールする
  • firebase loginfirebase init して初期化をする
  • firebase list コマンドで Firebase console で作ったプロジェクトが見えるか確認する

アプリケーション側のセットアップ

  • パッケージインストール
    • @angular/fireng add コマンドでインストールできる
$ yarn ng add @angular/fire
  • パッケージインストールが終わった直後にデプロイ対象のプロジェクト選択が求められるので先程 Firebase console で作成したものを選ぶ

  • インストールに成功すると angular.json の architect の中に deploy が追加されるのでこれで ng deploy コマンドが使えるようになる

デプロイ

  • デプロイコマンドを実行するだけで production build から deploy までが実行される
$ yarn ng deploy

感想

  • Firebase 側の準備ができていればアプリケーション側は Angular CLI で new をしてから @angular/fireng add するだけで使えるようになるお手軽さ!

Angular 9.0.0-next.10 で Ivy のデバッグ機能を試す

AngularConnect の Keynote に Ivy のデバッグ機能の紹介があったので試す (Keynote の 38 分くらいから)

準備

  • @angular/cli@next で新規アプリケーションを作成
    • routing の設定と stylesheet format はなんでもよい
$ npx @angular/cli@next new sample-app
  • 作られたアプリケーションを起動
$ cd sample-app
$ yarn start --open

試すこと

  • Devtools 上から AppComponent の title を変更する
    • sample-app app is running!Debug app is running! に変更

変更前 f:id:kasaharu:20191014103258p:plain

変更後 f:id:kasaharu:20191014103225p:plain

手順(以下 Devtools で実施)

  • AppComponent の element を取得
element = document.querySelector('app-root');
  • element から component を取得
component = ng.getComponent(element);
  • 取得した component の title を変更
component.title = "Debug";
  • component を marking して変更検知が必要であることを伝える
ng.markDirty(component);

f:id:kasaharu:20191014105213p:plain

メモ

builderscon 2019 - 2 日目に参加してきた話

昨日 に引き続き参加してきた。2 日間通してとてもいいカンファレンスだったし、来年も参加したいと思った。

Predictive Prefetching for the Web

memo

  • Web においてパフォーマンスが求められる場合 prefetching が有効
  • しかし prefetching はデータ消費量(通信量) があがるという欠点もある
  • 必要になるであろうファイルだけ prefetching できると嬉しいので Guess.js と Google Analytics を使って navigation graph を作りページ遷移を予測して prefetching する

感想

  • Google Angular Team の Minko Gechev さんの発表ということで聞きに行った、が英語の発表だったのでちゃんと理解できていないかも…
  • prefetching は前からモバイルだとデータ通信量気になっちゃうよなーと思っていたのでとても納得感のある発表だった

フロントエンドのつくりかた - シンプルなコードを達成するためのセオリー

発表資料

memo

感想

  • 昨今の色々あるフレームワークに縛られないフロントエンド開発に関する話という感じで発表はとてもよかった
  • ただ個人的には Discover Something New という感じではなかった
    • と、同時にいつも会社でいろんなことを学ばせてもらってるなーと改めて実感

Oxygen Not Included: Making a Game That Inspires Science

memo

  • ONI は科学について学ぶことを目的としたゲーム
  • 5 年(?)くらいかけて作ったらしい
  • 多くの人に学んでもらうためには多くの人に遊んでもらわないといけない
  • SimCity とかも参考にしているとか

感想

  • 同時通訳とても助かる
    • 実際に同時通訳聞いてて、このスキルは真似できないと思った
  • Oxygen Not Included やってみたくなった
  • いろんなトライアンドエラーができそうで「こんなことをしたらどうなるか?」など探究学習に向いてそう

その他

スーパーカミオカンデの発表を聞き逃したことが唯一の心残り…動画上がったら見よう。今回は懇親会系を何も申し込んでなかったので来年はそのあたりもちゃんと申し込もうと思った。

お昼

今日は SAKARA internet さんのランチ券をゲットしたので食べてきた。ごちそうさまです。 f:id:kasaharu:20190831193536j:plain

見本市

自作ガジェットを見せてもらったりして、普段ソフトウェアとしか向き合わないから新鮮だった。

おわり

builderscon 2019 - 1 日目に参加してきた話

builderscon 2019 に参加してきた。ブログを書くまでが builderscon って言ってたのでブログを書いておく。

builderscon は「知らなかった、を聞く」をテーマとしているのであえて普段仕事や趣味でまったく触れない分野もいくつか選んで聞いた。 聞いたセッションのメモと感想。

ブロックチェーン時代の認証

発表資料

memo

  • ブロックチェーンを仕事で使っている人は部屋に 2 人くらいしかいなかった
  • そもそもブロックチェーンとは
    • 分散型取引台帳とも呼ばれている
  • Gartner のハイプ・サイクルでは幻滅期に入っている
  • ブロックチェーンには「パブリックチェーン」と「プライベートチェーン」の 2 種類がある
  • ブロックチェーンを使うことでデジタルアセットという形で「資産」を持つことができるらしい
    • 資産だから所有や譲渡ができる → 未来感ある
  • 分散型だから誰か一人の意思で改善するのは不可能
  • 分散アプリケーションのプラットフォームとして有名なのは Ethereum
  • Ethereum Wallet に対応している Browser もあるらしい(Opera とか)

感想

  • 朝イチから事前知識ゼロの発表を聞いてきた
  • ところどころ単語は知っているものの意味はまったくわかってなかったので少しわかるようになったかも
  • 知らない単語もいっぱい出てきてなんだろうってなってる
    • Web 3?
  • デジタルアセットと聞いて頭に浮かんだのは電子書籍。かなり普及してきているけど、提供元がサービス停止したら終わりだし所有感ないなーと感じていたけど、こういうことか?と感じた
  • 肝心の認証の話まで理解が追いつかなかった…
  • とりあえず Ethereum Wallet に対応している Opera インストールしてみた、なるほど f:id:kasaharu:20190830210215p:plain

コンパイラをつくってみよう

発表資料

memo

感想

  • こちらも普段なら聞かないようなカテゴリ(会社の先輩オススメ)
  • かなりでかい会場でライブコーディングすごい
  • コンパイラ書いてみたいと思ったことある人ー?」の質問に手を上げた人が多くてびっくりした
  • switch - case の連続で泥臭い感じがしたw
  • ライブコーディング中に間違えたところを指摘できるオーディエンス強すぎでは?と素直に驚いた
  • 今日聞いた中で一番一体感あってよかった

Web Componentsを利用した段階的AngularJS脱出作戦

発表資料

memo

  • Web Components in 2019
    • Polyfill を使えば Web Components はどのブラウザでも試せる
    • Polyfill を使わなくても Safari, Firefox, Chrome は使える
  • Custom Elements はその中に小さな世界がある

感想

  • Custom Elements 化のデモわかりやすかった
  • Stackblitz デモに良さそう

現代フロントエンドに欠かせないwebpackとBabelを理解しよう!

発表資料

memo

  • 現在の JS についておさらい : ちゃんと仕様あるよという話
  • Stage 2 Draft を使う人は割と挑戦者(笑)
  • Babel の変換の 3 つの段階
    • Parsing(AST) → Transformation → Code Generate
  • コードを変換するのは Babel Plugins
    • Plugins の集まりが Presets
  • webpack は 7 割(?) Plugin
  • 公式ドキュメント読むといいよ

感想

  • 「webpack の公式ドキュメント読んだことある人いますか?全部!」のパワーワード
  • とても楽しそうに発表しているのが伝わった

ウォレットアプリ「Kyash」の先 〜「Kyash Direct」のアーキテクチャ

発表資料

memo

  • Kyash ウォレットの次の Kyash Direct(to B) の話
  • Direct を開発するときに今のウォレットの拡張にせずにゼロから作った話をしていた
  • なぜゼロから作ったか
    • 無理が来ているウォレットの根本的なアーキテクチャ課題を解決するチャンス
    • 別系統のシステムを 2 つ抱えることになるが利点を選んだ
  • ウォレットは?
    • microservices で開発
    • エンジニアが足りず苦しかった
    • microservices とはいえ DB は中央に 1 つ

感想

  • 今日最後のセッションだったのでだいぶ疲れていてあんま頭に入らなかった
  • 理解に時間がかかるしところどころ置いてけぼりだったのでまだまだアーキテクチャの知識が不足していると感じた
  • memo も全然足りていないのでリンクの資料見たほうがいい

その他

builderscon 初めて来たけど楽しかった。ただ丸一日セッション聞くのがだいぶツライ…脳みその衰えを感じる。

お昼

ランチ券はゲットできなかったけど、普通にお弁当配られてた。よかった。 コーヒーもあったしお水もあったし、飲食には困らなかった。 食べる机がちょっと狭めだったかも。。 f:id:kasaharu:20190830215207j:plain

ノベルティ

サポーターだったからノベルティいっぱいあった。 あと名札かっこいい。 f:id:kasaharu:20190830215508j:plain

電源・Wi-Fi

電源は Niwa Hall にしかなかったが、聞きたいセッションが Niwa Hall であるときに充電することができたので困らなかった。 Wi-Fi は先着順でセッション前に並んでいたようにも見えたけど、1 つ聞き終わった後に見ると列もなく、余っていたので午後以降はありがたく使用した。

おわり

2018 年振り返り & 2019 年の抱負

目標の振り返り

  • 今年の抱負 はこれだった
    • 月 1 で Qiita にアウトプット
      • 7 件しか書けていない… 2 ヶ月に 1 回くらいが現実路線か…
    • 月 1 でブログ更新
    • 技術書を年間 5 冊読む
      • どれも中途半端になってしまったので、再度来年の目標にする
    • どこかで 1 回 LT する
      • これもできなかった。が、来年発表する予定はできた
    • GitHub の草生やす
      • サービスをオープンするまでは行かなかったが、毎日草はやしはした
    • 貯金を増やす
      • まぁまぁ増えた気はする

技術的な話

  • 結構 Angular に投資した一年だった
    • 今年の Qiita の記事のほとんどが Angular 関連
  • 会社のプロジェクトでしっかりテストコードを書く習慣をチームにつけた
  • Atomic Design 本とかも読んでコンポーネント設計とかも考えたりしている
  • Advent Calendar ネタに書いた記事が一瞬はてぶのホットエントリーに入ったりした

その他

  • PayPay チャレンジで Switch 買った(今更)
  • L’ArChristmas 行ってきたが、すごい盛り上がった
  • The Alley のタピオカにハマった

2019 年の抱負

  • Angular を使ったアプリケーションを個人で作る
    • 今年は GitHub に草生やすのが目的だったが 2019 年は作るのを目的にする
  • 月 1 くらいで Qiita か Medium に記事を書く
  • 筋トレする
  • 定期的に振り返る