コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

OpenAPI3(swagger)の認証設定(security)を複合的に記述する書き方

意外とググりにくい、両方といずれかの書き方。

情報元

Authentication | SwaggerUsing Multiple Authentication Types の項目に記述がある。

記述例

前に書いた記事をベースに説明する

認証情報

components:
  securitySchemes:
    API_SECRETCODE:
      type: apiKey
      description: ヘッダに乗せるシークレットキー
      in: header
      name: SECRETHEADERCODE
    BasicNinsho:
      type: http
      description: Basic認証
      scheme: basic

書き方

ANDの場合

security:
  - MNManagedCode: []
    BasicAuth: []

ORの場合

security:
  - MNManagedCode: []
  - BasicAuth: []

参考リンク

Gitのlogでmasterからの差分コミットを1行単位で表示するやりかた

自分最適化されすぎてますがメモ

環境

$ git --version
git version 2.21.1 (Apple Git-122.3)

やりたいこと

  • masterからの差分変更(=今回の修正分)の変更とコミット番号のセットが知りたい
  • ただし、コピペして確認する用途なので1行ずつ表示して欲しい
  • 上から古い順に表示されて、時系列順で見えるようにしたい。

コマンド

$ git log --oneline --reverse master..

オプション解説

オプション 意味
--oneline <hash> <title line> の形式で表示し、hashの部分を40文字のものではなく先頭8文字で表す。 "--pretty=oneline --abbrev-commit"エイリアス
--reverse 順序の反転、基本は最近のコミット順になるので、逆の古い順となる。
ブランチA..ブランチB <revision range> 、 ブランチAとブランチBの差分をとる、ブランチBの指定が無いとHEAD相当(現在のブランチ最新コミット)となる

関連リンク

Gitのcheckoutを使って特定のファイルを前の指定されたコミット状態にもどす

よく忘れるのでメモ

環境

$ git --version
git version 2.21.1 (Apple Git-122.3)

原理

git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] [--] Overwrite the contents of the files that match the pathspec. When the <tree-ish> (most often a commit) is not given, overwrite working tree with the contents in the index. When the <tree-ish> is given, overwrite both the index and the working tree with the contents at the <tree-ish>.

和訳すると

git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] [--] に一致するファイルの内容を上書きします。 <tree-ish>(ほとんどの場合コミット)が指定されていない場合、作業ツリーをインデックスの内容で上書きします。 <tree-ish>を指定したら、インデックスと作業ツリーの両方を<tree-ish>の内容で上書きします。

やり方

例えば test.rbmaster ブランチの状態に戻したい場合は

$ git checkout master test.rb

とやればいい

参考リンク

Firebase Hosting + Cloud Functions for Firebase を下地に Express.js で Basic認証しつつ静的コンテンツを返すサーバーを作る

Qiitaであがってるような奴をちゃんとした書き方でやる。

環境

今回紹介する方法は要Firebase CLIなのでインストールする。

$ node -v
v11.15.0

$ firebase --version
7.11.0

やること

  1. プロジェクトを作る
  2. Cloud FunctionsでExpress.jsのコードを書く
  3. Cloud Functionを実行するようにHosting側を整理する
  4. 表示したいhtmlを置く。
  5. deploy

プロジェクトを作る

作業するディレクトリで以下のコマンドでプロジェクトを作る

firebase init

この際に

? Which Firebase CLI features do you want to set up for this folder? Press Space to select features, then Enter to confirm your choices. (Press <space> to select, <a> to toggle all, <i> to invert selection)
❯◯ Database: Deploy Firebase Realtime Database Rules
 ◯ Firestore: Deploy rules and create indexes for Firestore
 ◯ Functions: Configure and deploy Cloud Functions
 ◯ Hosting: Configure and deploy Firebase Hosting sites
 ◯ Storage: Deploy Cloud Storage security rules
 ◯ Emulators: Set up local emulators for Firebase features

のようにどの機能を使うか聞かれるので Hosting , Functions を指定する。また利用するのはjavascriptにすること。

Cloud FunctionsでExpress.jsのコードを書く

Hostingで配信するためのディレクトリ(デフォルトは public)と CloudFunction用のディレクトリである function ができるので、その中の index.js で Express.jsとBasic認証用のpackageをインストールする。

$ cd functions/
$ npm install express
$ npm install basic-auth-connect

これで、package.jsonにも記述されて使える状態になったので index.js 側に以下のように記述する。

// モジュールのロードおよびインスタンスに代入
const functions = require('firebase-functions');
const express = require('express');
const basicAuth = require('basic-auth-connect');
const app = express();

// Basic認証のデータを定義
const loginUserName = "user";
const loginPassword = "password";

// すべてのリクエスト(app.all)かつすべてのパス('/*') に対してBasic認証をかける
// 特定のパスに関してかける場合は /* を /hoge/* などにかえる
app.all('/*', basicAuth(function(user, password) {
    return user === loginUserName && password === loginPassword;
}));

// 静的配信をするファイルのパスを指定する。今回はstaticを指定。
app.use(express.static(__dirname + '/static/'));

// node,jsのexportsで、app関数として呼び出せるように設定
exports.app = functions.https.onRequest(app);

Cloud Functionを実行するようにHosting側を整理する

firebase.jsonの追記

Hostingの設定で、functionを呼び出すようにrewriteの記述をふやします。

    "rewrites": [
      {
        "source": "**",
        "function": "app"
      }
    ],

こちらですべてのパスでindex.jsのappアプリが実行されるようになる。ただし、Firebaseはデフォルトとして以下のルールでファイルのレスポンスを決めているため、もしpublic側にファイルがある場合はそれが優先される

1. /__/* パスセグメントで始まる予約済みの名前空間
2. リダイレクトの構成
3. 正確に一致する静的コンテンツ
4. リライトの構成
5. カスタムの 404 ページ
6. デフォルトの 404 ページ

ホスティング動作を構成する | Firebase - Hosting のレスポンスの優先順位

静的ファイルの削除

前述の通り、 public/index.html があるとそちらが優先されてレンダリングされてしまうのでpublic配下のファイルを削除する。

表示したいhtmlを置く

Express.jsにて functions/static 配下のページをレンダリングするように設定しているので、こちらに表示させたいファイルを置く。

deploy

以下のコマンドでアップロードする。

$ firebase deploy

デプロイが完了するとルートのURLが表示されるのでそちらで動作確認する。

トラブルシュート

firebase deployでエラーになる

だいたい index.js の書き方がおかしかったり、firebase.jsonの記述がおかしかったりするのでそちらを確かめる

いきなりエラーページを返すようになった

Cloud Functionの制限に引っかかっている可能性があるので、エラーメッセージを確かめる。

Error: quota exceeded (Quota exceeded for quota group 'FunctionCallsNonbillable' and limit 'Function invocations per 100 seconds' of service 'cloudfunctions.googleapis.com' for consumer 'project_number:0000000000'.); to increase quotas, enable billing in your project at https://console.cloud.google.com/billing?project=hogehoge. Function cannot be executed.

のような記述があれば処理の上限に至ってたりするので、Basic認証に通す対象のファイルの内容などを精査する必要がある。

詳しくは https://cloud.google.com/functions/quotas?hl=ja

参考/関連リンク

間違ってmasterにコミットを付け足してしまったときのcherrypickチートシート

毎度手順を調べる手間を省略するためのメモ

環境

$ git --version
git version 2.21.1 (Apple Git-122.3)

状況

  • 作業をしてコミットしていざPushしようとしたらmasterにやっていた
  • 思い切りresetするには変更量が多い

やり方

  1. まずはorigin/masterからブランチを切る.他にふさわしいbranchがあればそれを指定する。
  2. remoteの向け先がコピー元と同じになっているので一旦リセットする
  3. コミットの差分数を調べる
  4. 差分数だけcherry-pickする
  5. 元のブランチをリモートの状態と同等にする

feature/new_filesに6個のコミットを移す場合のやり方

$ git checkout -b feature/new_files origin/master
$ git branch --unset-upstream
$ git log --oneline ..master
$ git cherry-pick master~6..master
# masterをもとに戻す
$ git checkout master
$ git fetch
$ git reset --hard origin/master

参考

Gmailで添付ファイル付きのものを名前を含めて探す

いい感じの検索結果が出てこなかったのでメモ

絞り方

主に2つを使う

  • has:attachment
  • filename:文字列

has:attachment

添付ファイルがあるかどうかを絞り込む。なおhasシリーズはhas:driveなどの指定もできる。

filename

添付しているファイル名を絞り込むことができる。拡張子がxlsxで「集計」が含まれる、などやりたい場合は filename:xlsx filename:集計 などANDの絞り込み条件を作ればいい

参考サイト

めでたいときに使えるemoji

LGTMしたときに添えると良さそうな絵文字がすぐに出てこなかったりするので正月っぽいトピックだしメモがてら

めでたいemoji

拍手

👏 Clapping Hands Sign Emoji

GiHub/SlackのShortcodeは :clap:

クラッカー

🎉 Party Popper Emoji

GiHub/SlackのShortcodeは :tada:

くす玉

🎊 Confetti Ball Emoji

GiHub/SlackのShortcodeは :confetti_ball:

乾杯

ビール

🍻 Clinking Beer Mugs Emoji

GiHub/SlackのShortcodeはだと :beers:

グラス

🥂 Clinking Glasses Emoji

GiHubのShortcodeだと :clinking_glasses: (Slackは標準で用意されていない)

ストレートに「祝え!」という奴

㊗ Circled Ideograph Congratulation Emoji

GiHub/SlackのShortcodeはだと :congratulations:

参考リンク