radioc@?

レディオキャットハテナ

【勉強会メモ】関西Node学園 梅田キャンパス 2時限目

nodejs.connpass.com

Swagger - OAS 3.0

@_mikakane さん

Swagger

APIドキュメントの生成

  • API仕様の重要性
    • 責任境界線
  • API設計はバックエンドの仕事?
    • 誰でも書けるAPI定義を

OAS a.k.a Swagger

  • API Bulueprintにくらべればかなり書きやすいし読みやすい
  • Yaml/JSONなのでとっつきやすい
    • YamlAPI仕様が書ける
    • 全体的にスッキリ
  • v3.0とv2.0の両規格がある

OpenAPI 3.0

swagger.io

Swaggerの運用

  • Yamlとかでエントリポイントごとに書いてマージ
    • json-refs
    • 複数に分割されたYamlをマージ
  • バックエンドで書くなら最終的にJSONさえホストしてもらえればOK
  • 通化・自動化できるところは頑張る
    • Componentsを利用してスキーマ定義は再利用可能

API仕様書を作る

  • swagger-ui-distで簡単にSwagger仕様書を配信できる
  • ドキュメントを作る→ドキュメントを使う

Swaggerの諸問題

  • 読み物としてのドキュメントは陳腐化する
    • DB定義書と同じ問題
  • 読むドキュメントから使うドキュメントへ
    • 実装との乖離をすばやく気づけるように

Swagger-client

  • SwaggerのJSONを食わせてAPIクライアントを自動生成
  • APIの受け入れテストをSwaggerベースで記述
  • JSON Schemeが正しく記述できていればバリデーションも楽

Swagger-ui

https://editor.swagger.io/

まとめ

  • フロント開発にAPIの管理はとても重要
  • Swaggerでより効率な開発サイクルを

AWS Lambda上のnodejsの単体テストした

@papettoTV さん

speakerdeck.com

案件概要

  • AWSを使ったIoTシステム構築
    • センサーデータが常時アップロード
    • データ保存加工
    • 保存データの検索

テスト方針

qiita.com

  • バレージ目標
    • 品質要件によってかわる
    • 今回は80%

テスト対象アプリ

  • Lambda上で動作
  • Node.js 6.10(開発当時)
  • Promise
  • 他のLambdaやS3,DymnamoDBなどにリクエストを投げる

主なファイル構成

  • index.js …Lambda関数上の実行対象
  • test/index.test.js …テスト用ファイル

Tips

  • exportsで関数定義
    • 定義する関数はexports.xxの形で宣言
      • × const functionA = function(){}
      • exports.functionA = functionA
    • 外部(テスト用ファイル)から呼び出せる
  • exit0
    • nyc --reporter=html --reporter=text mocha || exit0
    • 多分バットノウハウ
  • callback内で評価
    • return callback();
    • lambda側で期待する終了処理ではない
  • timeout error
    • nyc --reporter=html --timeout 5000
    • →解決せず

レポーティング

スプレッド構文いろいろ

@mochiya98 さん

発表資料: スプレッド構文いろいろ - Google スライド

スプレッド構文

developer.mozilla.org

実際にどういうところで使うのか

r=[...a]

  • 配列の浅いコピーを作る
  • Array.prototype.slice.call(a) と似た結果が得られる
  • 厳密にはIteratableでなければいけない
    • 内部の処理が違う
    • for(x of hoge) みたいなのが ...hoge

r=[...a, ...b]

  • a.concat(b) と似た効果

r={...a, ...b}

  • aとbを統合する(同一プロパティはbで上書き)
  • 浅いコピーを作りながらプロパティを追加/上書きする

r=[..."msg"]

  • "String".split("") と同じではない

r=[...undefined], r=[...null]

  • エラーになる

r={...undefined}, r={...njll}

  • エラーにならない

※参考

qiita.com

私の OSS 道について

@leichtgewicht さん

  • 2010〜日本に
  • OSSの開発にたずさわる

OSSしない理由

  • 恥ずかしさの恐れ
  • 時間の問題
  • 英語
  • 非友好的なコミュニティ
  • 財政的に防御できない

OSSする理由

  • 勉強する
  • 社長が言ったから
  • OSSせず悪い経験(社内で作っているコードはすれられた)*
  • 会社をやめれるように*
  • 破産の場合に継続する方法
  • より大きな利益のために*
  • 他人のエンパワーメント
  • 感謝の気持ち
  • セフルプロモーション
  • コードを将来にも使えるように*
  • OSSのライブラリのクォリティが悪いから
  • OSSしない理由がないから
  • イデアのフィードバックがほしいから

(*個人的に重要なもの)

おすすめ記事

medium.com

Node.jsとOSS

  • Node.jsはLINUX Foundationの1つのプロジェクト

Node.js向けUNIX哲学の3つのこと

  • プログラムが1つのことをうまくやるように
  • 効率よりも移植しやすさを選べ
  • 効率と移植性を高めるためのシェルスクリプトを利用せよ

3つのプロジェクト方法

  • Monolith/Cathedral-style:stdlib,jQuery
  • Bazaar-style:Node.js
  • Cathedral-core,Bazzaar-community:reactなど

私のOSS道について

  • 小モジュールが好き
  • できれば生JS必要であればTypeScript
  • モジュールができるならすぐ公開

好きなツールより、すでにあるツールが良い

コミュニケーションを簡単にする

  • Code of Conduct
  • Issue Templates
  • PRなレビュー必要

私のOSS

  • Issue + PRはお客さんではありません。興味があるなら直します
  • ユーザーにコントリビューターになってもらうように頑張っています
  • つまらないときにビジネスを考えています
  • いつでも改善できます
  • 進捗をコミュニティーとシェアします

まとめ

  • OSSは経済的にも価値がある
  • 世界とのコミュニケーションスキルアップ
  • 立場のバランスを気をつけて(仕事、お金、心)