技術向上

プログラミングの学び、気になるテクノロジーやビジネストレンドを発信

2019-01-01から1ヶ月間の記事一覧

Workflows【CircleCI】

workflowsを用いると、jobsの実行順を制御することができます。また、workflows内のjobの実行が失敗すれば直ちに通知されるため、無駄に待つ必要がありません。 versionとworkflow名を指定し、workflow内に、jobs内に指定したjob名を連ねます。 version: 2 j…

Image【CircleCI】

Imageとは、ファイルやディレクトリなどプログラムを実行する上での環境を保存したものですが、CircleCIではjobごとに、Imageを使って環境を構築するexecutorを、Docker、Machine、macOSの中から選択する必要があります。 最初に、CircleCIが管理している、…

Steps【CircleCI】

概略 CircleCIの.ymlファイルに記述されるコードには、jobsという、どんな命令を実行させたいかを羅列するブロックがあります。jobsに記載される一つひとつのjobは、どのような処理をどの順番で処理させたいかをstepsに定義します。 version: 2 jobs: build:…

イメージ【Docker】

イメージレイヤ Dockerにおけるイメージとは、動作に必要なファイルとアプリケーション、ミドルウェア、実行時パラメータから構成される、Dockerコンテナのファイルシステムです。イメージは読み込み専用であるレイヤのセットで、実現したい環境に必要なレイ…

Hello World!【CircleCI】

アカウント作成 Sign-upページにアクセスし、GithubかBitbucketを通してアカウントを作成します。 Sign Up and Try CircleCI - CircleCI Hello World CircleCIを導入するリポジトリのルートディレクトリで、.circleciディレクトリを作成します(コマンド) .…

データベースの監視

データベースを監視することで、障害の発生を回避したり、リスクを低減させるよう事前に策を打つことができるでしょう。 異常を知るためには、正常を知る・正常を定義する必要があります。 そのために「ベースライン情報」を収集します。UNIX系OSであれば、…

データベースの障害復旧の基礎

データベースの障害は、下記の状況で発生する可能性があります。 サーバー障害によるメモリ上のデータ損失 ネットワーク障害によるトランザクションの異常終了 ユーザーの誤操作によるデータ損失 自然災害などによる物理的破壊 データベースの障害が発生し、…

CI(継続的インテグレーション)

CIとは ソフトウェア開発プロセスの自動化により、チーム開発のスピード向上と品質の安定化を試みる手法のことです。 チーム内で共有するリポジトリにコミットされることをトリガーに、予め定めたビルドとテストが自動実行されます。 なお、ステージング環境…

SQLのデータアクセス

OracleDBやMySQLなどのRDBMSは、どのようにデータにアクセス(SQLをどのように処理するか)するか、いくつか選択肢を持っています。 その中で代表的なのが「全表スキャン」と「索引スキャン」です。 全表スキャンは、SQLで指定された表のすべてのデータにア…

データベース構築とData Oriented Architecture

データベースの設計に焦点を当てます。 データベース構築 データベースを実際に作成してデータを投入する前に、データモデルを作成します。 データモデルの作成には、「ERモデル」を利用することが多いかもしれません。 ERモデルでは、「Entity(実体)」、…

RDBの構成要素

リレーショナルデータベース(RDB)は大きく次の3つから構成されます。 データベース プロセス 共有メモリ データベース データベースは、ディスク領域のOSファイルによって構成されています。 つまり、アクセスするたびにディスクI/Oによるコストがかかりま…

明示的なメソッド群によるパラメータの置き換え【リファクタリング】

状況 パラメータの値によって、異なる処理を実行するメソッドがある 対処 異なるメソッドに分割する ただし、設計後にパラメータの値が変更される可能性が高いのであれば、このリファクタリングが適用されるべきではありません。 メリット メソッドの責務が…

ヌルオブジェクトの導入【リファクタリング】

状況 null値のチェックが繰り返されている 対処 ヌルオブジェクトを作り、null値チェックと置き換える メリット コードがシンプルになり、どこをポリモーフィックにすべきかがわかりやすくなる ヌルオブジェクトは、「特殊ケース」とも捉えることができ、こ…

v-forで要素数に変化があるときはkeyにindexを用いない【Vue.js】

備忘です。 v-forで要素数が変化(後で追加、削除を行う)する場合には、 keyにindexを用いてはいけないようです。 keyは要素の変更を、どのデータに対して行うべきか判別するために使われます。 v-forで生成されるindexをkeyに使った場合、要素の追加や削除…

連想配列のvalue更新をリアクティブにする方法【Vue.js】

次のように連想配列が定義されているとします。 data () { return { showEdit: {}, } }, 上記に対して、次のような処理を行っても変更結果がリアクティブになりません。 this.showEdit[id] = false; 次のように記述する必要があります。 this.showEdit = Obj…

連想配列のkey指定に変数を用いる方法【Javascript】

連想配列のkeyを指定してvalueにアクセスする際、 itemList.hoge = "hoge" というように「.」を使うことが一般的ではありますが、 変数を使う場合には次のようにします。 var key1 = "hoge" itemList[key1] = "hoge"

axiosでresponseデータのフィールドにアクセスする方法【Go】

クライアントとサーバーの通信を、クライアントではaxiosを用いる例です。 ユーザーに関する情報をサーバーでデータベースに保存しておき、 ログイン後のページで、そのデータを利用して表示を変えることを想定します。 例えば次のコードを見てみます。 goフ…

axiosでformの値を送受信する方法【Vue.js】【Go】

POSTまたはPUTのformデータをサーバーサイドに送信する際、 axiosでは、デフォルトでJSON形式にしてrequest payloadに乗せて送られます。 HTTP.Requestは次のようになっています。 POST /some-path HTTP/1.1 Content-Type: application/json { "username" : …

mixinでグローバル定義【Vue.js】

mixinを使うことで、どのコンポーネントでも「this.~」の形で、関数や変数computedなどを利用することができます。 下記のようにmixinsフォルダを作成し、その下にjsファイルを作成した方が管理しやすいでしょう。 build config src ... mixins globalValiab…

https接続【Vue.js】

Vue-CLIを使ったhttps接続です。 build/webpack.dev.conf.jsを編集します。 見やすさのために一部を抜粋し、追加する2行についてコメントを記載しています。 'use strict' const utils = require('./utils') ... const fs = require("fs") // 追加。ファイル…

Cross-Originを許容してCookieを送受信する【Go】

フロントをVue (port :8081)で、サーバーをGo (port :8080)で実行した時、Safariは「開発」メニューから一時的にCross-Originの制限を無効にすることができますが、Chromeにはそれらしきものが見当たらず、Headerにセットすることにしました。備忘として残し…

TLS【Go】

TLSを使ったHTTPS通信を紹介します。 2015年にはGoogleがHTTPS通信を行うサイトを、検索結果において優遇すると宣言したように、どのサイトでもTLSを用いたHTTPS通信が要求される時代です。 証明書、秘密鍵の生成 TLSを使用するには、その方式で使われる証明…

case: 長すぎるパラメータリスト【リファクタリング】

パラメータが多すぎる状態は、記述するのが面倒なだけでなく、それぞれのパラメータの役割をわかりづらくします。 一番の問題は、変更に対応するための作業が煩わしくなることです。パラメータを一つ追加すると呼び出し側の修正が必要になります。 パラメー…

Cookieに使える、base64エンコード【Go】

Go

CookieにJSONの内容を格納する際などは、base64を用いて事前にエンコードし、Cookieから取り出した後にデコードします。 Cookieには許容されない文字を使うと、Cookieにそもそも登録できない、または異なるValueの値が登録されてしまうからです。 func main(…

MySQL - invalid memory address or nil pointer dereference【Go】

複数の関数で、DBコネクションを使い回す場合には、注意が必要です。 dbだけでなく、sql.Open()の返り値に含まれるerrもpackageグローバルに定義して、 sql.Open()の返り値のアサインは「:=」ではなく、「=」を使用します。 var db *sql.DB var err error //…

MySQL【Go】

インストール sql-Driverごとにpackageをインストールする必要があります。 $ go get -u github.com/go-sql-driver/mysql import database/sqlは、コード中で使用するものの、mysqlについてはプログラムの起動処理には使われますが、コード中では使用しない…

Linuxコマンド

著者が初めて使用する度に書き加えていくもので、網羅しているわけではありません。 ファイル 作成 $ touch mymemo.txt 編集 $ nano mymemo.txt // nanoはviより使いやすい 削除 $ rm mymemo.txt 移動 $ mv mymemo.txt Memos // ファイル名を変更しない場合 …

コマンド【Go】

著者が初めて使用する度に書き加えていくもので、網羅しているわけではありません。 単一ファイルの実行 $ go run main.go package mainが複数ファイルに分かれている場合の実行 $ go build $ ./<exe-name > // デフォルトのexe名は、project名 もしくは $ go build -o </exe-name>…

nano(使いやすいCUIエディタ)

nanoは、CUI(Character User Interface、コマンドラインなど。↔︎ GUI)環境における、使いやすいエディタです。 標準搭載のvi等に比べ、覚えるキー操作も少なく、簡単に扱うことができます。 ファイルの作成 $ nano または $ nano mymemo.txt // mymemo.txt…

Sessionの期限更新と清掃【Go】

Go

処理を実行するごとにsessionの有効期限を更新し、ログアウト時に、他のユーザーに関するsession情報も含めて、 一定時間を超えたsessionを削除する機能を用意します。 過去の記事を基にしています。 Session【Go】 - 技術向上 bcryptでパスワードをhash化【…