SQL Server初期設定メモ

SQL Serverは時々しか使わないので毎回設定につまずいてしまう...orz

インストール

SQL Server ダウンロード | マイクロソフトからダウンロードする。 * SQL Server * SQL Server Management Studio

初期設定

Windows認証にSQL認証を追加する

saのプロパティ修正

TCP/IP接続できるようにする

DB作成

リンク

Vuexアプリでfirestoreアクセス

vuexで作成したWebアプリでFirestoreにアクセスする方法。

まとめ

中途半端にライブラリ使うより自前で実装した方が良さそう。

VuexFireを使う

以下の記事が参考になる。

VuexFireでNuxt.jsアプリに一瞬でFirestoreを導入する - Qiita

変数名が変わるようです。要注意! * Any example using with Nuxt.js · Issue #124 · posva/vuexfire * vuefire/CHANGELOG.md at master · vuejs/vuefire

ライブラリは使わない(お勧め)

以下の記事が参考になる。 アプリの説明を除くと結構シンプルな処理でFirestoreアクセスが可能になると思う。

vuejsのVS Code によるデバッグ

Vus.jsでWebアプリケーション開発を始めるにあたりデバッグ方法を調べました。  Vue > Visual Studio Code デバッグ - Qiitaに沿って進めるとうまくいきました。

ポイントは、2点。 vue.config.jsを作成する。

// vue.config.js
module.exports = {
  configureWebpack: {
    devtool: 'source-map'
  }
}

launch.jsを修正

      "webRoot": "${workspaceFolder}/src",
      "breakOnLoad": true,
      "sourceMapPathOverrides": {
        "webpack:///src/*": "${webRoot}/*"
$ vue create hello-world

はリンクの通りにBPで止めることができました。 私が開発しているWebアプリケーションはtypescriptを使っているせいか、debugger文を追加しないと止めることができませんでした。

不具合修正できてめでたしめでたし。

f:id:unokun3:20190404083737p:plain

リンク

ginでCORS対応

go(gin)で作成したWeb APIを別ドメイン(ローカルに作成したindex.html)からアクセスした場合、CORSでエラーが発生しました。

対策としては、ginで作成したハンドラでヘッダ(Access-Control-Allow-Origin)を追加すればOK。

func XXXX(ctx *gin.Context) {
    ctx.Header("Access-Control-Allow-Origin", "*")
    ctx.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE")
    ctx.Header("Access-Control-Max-Age", "86400")
    ctx.Header("Access-Control-Allow-Headers", "Access-Control-Allow-Headers, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization")
        ...

CORSについてもあまり良く理解していなかったので復習。 Cross-Origin Resource Sharing (CORS)は、別ドメインからアクセスした場合サーバー側で許可していないとブラウザがチェックしてエラーに してくれる。 公開されているAPIサーバーはすべてのドメインからのアクセスを許可するかわりにトークンでチェックしているのでここまで気が回っていませんでした。 実際にいろいろ試してみないと覚えることができないことを改めて痛感。

リンク

GORMでdistinct

GORMはGo言語でよく使われているORMの一つです。

GORM ガイド | GORM - The fantastic ORM library for Golang, aims to be developer friendly. ても便利なのですが、distinct(レコードの重複をまとめる)は未実装でした。

したがって、distinctを実現するためには生SQLを実行する必要があります。

以下の記事を参照。

Advanced Usage · GORM Guide

type Result struct {
    Name string
    Age  int
}

var result Result
db.Raw("SELECT name, age FROM users WHERE name = ?", 3).Scan(&result)

覚えておいて損はなさそう。

DynamicFeaturesInSwift

swift 4.2の新しい機能「Dynamic Member Lookup」について学ぶために以下の記事を写経しました。

Dynamic Features in Swift | raywenderlich.com

Dynamic Member Lookupを理解した後で、以下の記事を読むとよりわかりやすいと思います。 今、僕が一番注目している Swift の新機能について、 iOSDC Japan 2018 で話します - koherent.org

チュートリアル

DocCatcherページのJSONDocCatcherの例が分かりやすいです。

プロパティアクセスとして記述できるようになる仕組みなんですね。

適用後

let ownerName: String = catcher.owner?.name?.value() ?? ""

適用前

let messyName: String = catcher["owner"]?["name"]?.value() ?? ""

写経後のソースは ここ にあります。

SSH経由でサーバーのファイルをVS Codeで編集する

拡張機能(SSH FS)をインストールするとサーバーのファイルを編集することができます。 VS Code拡張機能が使えるのでとても便利です。

リンクの記事を参考に設定しました。 公開鍵認証で、サーバーのauthorized_keysに公開鍵を登録しておくとpassphraseの入力は不要になります。

    "passphrase": false

リンク

Visual Studio CodeでSSHごしにファイルを編集する - Qiita