君は心理学者なのか?

大学時代に心理学を専攻しなぜかプログラマになった、サイコ(心理学)プログラマかろてんの雑記。

Qiitadon忘年会まとめ

日曜日なのにQiitadonが早い

qiitadon.com

qiitadon.com

qiitadon.com

今日はQiitadonの非公式忘年会だから

qiitadon.com

ホテルニュー淡路

qiitadon.com

qiitadon.com

qiitadon.com

はやすぎるひとたち(集合は16:00)

qiitadon.com

qiitadon.com

駅集合なのに早く着きすぎて、ファミレスで開かれる0次会

qiitadon.com

qiitadon.com

痛む、なのやつの古傷

qiitadon.com

足りないまな板

qiitadon.com

qiitadon.com

qiitadon.com

qiitadon.com

かろてん宅到着。直後のっとられたアカウント

qiitadon.com

LTL読み上げライブ開始

qiitadon.com

買い出し

qiitadon.com

カーテンがない

qiitadon.com

qiitadon.com

qiitadon.com

qiitadon.com

ボウルがない

qiitadon.com

いろいろない

qiitadon.com

qiitadon.com

でもオーブンレンジはある

qiitadon.com

さっき買ってもらった

qiitadon.com

qiitadon.com

qiitadon.com

でもカーテンがない

qiitadon.com

qiitadon.com

ウォーターサーバーはある

qiitadon.com

qiitadon.com

qiitadon.com

qiitadon.com

でもカーテンがない

qiitadon.com

qiitadon.com

突然始まる工事

qiitadon.com

qiitadon.com

qiitadon.com

qiitadon.com

なのやつのかつやく

qiitadon.com

qiitadon.com

かりてきたねこ

qiitadon.com

なべ(おいしい)

qiitadon.com

qiitadon.com

qiitadon.com

全ての話の落とし所に使われるカーテン

qiitadon.com

qiitadon.com

qiitadon.com

qiitadon.com

https://qiitadon.com/web/statuses/101284899848528333 qiitadon.com

ふかまるなのやつ氏

qiitadon.com

qiitadon.com

qiitadon.com

qiitadon.com

qiitadon.com

全部俺アプリ

qiitadon.com

qiitadon.com

qiitadon.com

qiitadon.com

qiitadon.com

qiitadon.com

qiitadon.com

qiitadon.com

qiitadon.com

おわらない忘年会

qiitadon.com

qiitadon.com

qiitadon.com

たのしかったようでなによりです

qiitadon.com

qiitadon.com

qiitadon.com

qiitadon.com

qiitadon.com

つづく

qiitadon.com

後遺症

qiitadon.com

babelで現在のnodeJsのバージョンに合わせてトランスパイルする

** あとで少し追記する

babelのinstall

yarn init -y
yarn add @babel/cli --dev
yarn add @babel/core --dev

コンパイルするソース

class Hoge {
  constructor() {
  }
}
const hoge = new Hoge();

コンパイル

何も入れず、そのままコンパイルしてみる

yarn run babel index.js
class Hoge {
  constructor() {
  }
}
const hoge = new Hoge();

そのままでてきた。

@babel/preset-envを入れてみる

今まではbabel-preset-es2015など、 トランスパイルするときに参照する仕様をパッケージに追加する必要があった。

しかし、@babel/preset-envを用いれば、 実行環境に合わせて勝手にパッケージを追加してくれる。

また、ブラウザを指定した変換ができたりする。

今回はnode上で動くようにトランスパイルするので、 .babelrcを以下のように指定。

yarn add @babel/preset-env --dev
{
  "presets": [
    [
      "@babel/preset-env",
      {
        "useBuiltIns": "entry",
        "targets": {
          "node": "current"
        }
      }
    ]
  ]
}

dockerのコンテナを削除する〜サブシェルについて〜

いきさつ

とまっているDockerコンテナを全部削除したい。

と思って方法を調べたら「サブシェル」という技術を知った。

方法

$ docker rm $(docker ps -aq)

解説

( )

( )でくくった処理はサブシェル内で実行する。

親シェルの環境変数を汚したくないときに使う。

$( )

$( )内の標準出力を値として得ることができる。

$ echo $(ls)
Applications Desktop Documents Downloads Dropbox Library Movies Music Pictures Public

これを引数として渡すことができるのか。

releaseブランチを導入するメリットについて考える

f:id:karoten512:20181211132007p:plain

背景

masterブランチとdevelopブランチ、

それとfeatureブランチで開発しているケースを考える。

developからfeatureブランチを生やして、featureの開発が終わったらdevelopにマージ。

developにマージしたものをリリースのタイミングでmasterにマージ。

それを本番環境にリリース。

問題

リリースに伴い、コードの細かい修正を行うことがある(リリース作業と呼ぶことにする)。

それらのリリース作業と開発作業が並行して行われるとき困る。

リリース作業内容も開発作業内容もdevelopにマージされるので、

それをmasterにマージしてリリースすると、開発途中のものまでmasterにマージされてしまう。

まだリリースしたくない機能があるのにリリースされてしまったりするよ。

解決策

開発用のブランチとリリース用のブランチを分ける。

リリース作業に入った時、developブランチからreleaseブランチを切って、

それに対してリリース作業のコミットをする。

リリース作業が終了すればmasterにマージする。

(さらにdevelopにもリリース作業の内容を反映させるため、マージする)

メリット

リリース作業中でも、developブランチにプルリク&マージができるので、

作業が滞らずに進む。

リリース作業中の開発内容が本番環境にリリースされることがなく、安全。

AWSのCloudFrontの設定(OriginPath)を、aws-cliから変更する

f:id:karoten512:20181206221710p:plain

いきさつ

デプロイ自動化の一環で、

AWSのCloudFrontの設定をaws-cliから変更したくなった。

(今回変更したのはOriginPath)

前提

  • aws-cliが使用できる環境
  • jpが使用できる環境

出来上がったシェル

# Etagの抽出
RAW_ETAG=$(aws cloudfront get-distribution-config --id "xxxxxxxxx" | jq '.ETag')
ETAG=$(echo ${RAW_ETAG} | sed "s/\"//g")

# 今の設定をファイルとして抽出
aws cloudfront get-distribution-config --id "xxxxxxxxx" | jq '.["DistributionConfig"]' > old_dist.conf

# 抽出した設定ファイルの書き換え
cat old_dist.conf | jq '.["Origins"]["Items"][0]["OriginPath"] = "'/dir_name'"' > new_dist.conf

# 新しい設定の適用
aws cloudfront update-distribution --id "xxxxxxxxx" --distribution-config file://new_dist.conf --if-match ${ETAG}

解説

全体について

CloudFrontの設定を変えるには、

aws cloudfront update-distribution --id "xxxxxxxxx" --distribution-config file://new_dist.conf --if-match ${ETAG}

というコマンドを叩きます。このとき

  • 現在のCloudFront設定のバージョンを表す文字列「Etag」
  • 新しい設定ファイルである「new_dist.conf」

が必要になるので、準備が必要です。

Etagの抽出

RAW_ETAG=$(aws cloudfront get-distribution-config --id "xxxxxxxxx" | jq '.ETag')
ETAG=$(echo ${RAW_ETAG} | sed "s/\"//g")

普通に抽出するとダブルクォーテーションが着いてしまうので、 除去しておきます。

新しい設定ファイルである「new_dist.conf」を生成

# 今の構成ファイルの抽出
aws cloudfront get-distribution-config --id "xxxxxxxxx" | jq '.["DistributionConfig"]' > old_dist.conf

# 抽出した構成ファイルの書き換え
cat old_dist.conf | jq '.["Origins"]["Items"][0]["OriginPath"] = "'/dir_name'"' > new_dist.conf

まず今の構成ファイルを抽出し、

そのファイルの一部(今回でいうとOriginPath)を書き換え、

新しい設定ファイルを生成しておきます。

感想

これだけでもだいぶ便利になった。

CUIはやっぱりよい。

Go言語製のmigrationツール、sql-migateを使ってみた(postgresSQL編)

経緯

開発環境と本番環境のDB差異をできる限り無くすためにmigrationツールを導入する。

プロジェクトリポジトリと同じリポジトリマイグレーションファイルを管理することにより、

ソースコードとDBスキーマのバージョンを同期させることができる。

使用するmigrationツールは「sql-migrate(https://github.com/rubenv/sql-migrate)」

導入

goの実行環境を入れる

$ brew install go

~/.bash_profileに以下を記述して、パスを通す

export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin

~/.bash_profileを読み込む

source ~/.bash_profile

sql-migrateをinstall

$ go get -v github.com/rubenv/sql-migrate/...
$ sql-migrate -v #バージョンが表示されればinstall成功

DB設定をdbconfig.ymlで記述

development:
    dialect: postgres # 使用するRDBMS
    datasource: dbname=dbName host=hostName user=userName password=passWord port=5432 sslmode=disable
    dir: migrations/postgres # マイグレーションファイルのあるディレクトリ
    table: migrations # マイグレーション履歴を保存するテーブル名

使用方法

マイグレーションファイルの雛形を作成

sql-migrate new add-column-to-user-table
# Created migration migrations/postgres/20181206145950-add-column-to-user-table.sql と表示されます。これが雛形です。

マイグレーションファイルの雛形を編集

-- +migrate Up
create table users (
id serial PRIMARY KEY,
name text NOT NULL,
date timestamp NOT NULL);
 
-- +migrate Down
drop table users;

以上のようにup(行いたいスキーマ変更SQL)とdown(それを打ち消すSQL)の両方を記述する必要があります。

マイグレーションファイルの実行

sql-migrate up

これでupに記述したSQLが実行されます。 upに書いたSQLが間違っていたなどで、DBスキーマを元に戻したい場合は、

sql-migrate down

で元に戻してください。その後、upに書いたSQLを編集し、マイグレーションファイルを実行し直してください。

補足

どこまでマイグレーションが実行されているのかは、

$ sql-migrate status

で確認できます。 なおこの情報はmigrationsというテーブルでも確認できます。

AWS CLI S3にまつわるコマンドメモ〜一覧表示、ダウンロード、アップロード〜

f:id:karoten512:20181203131958j:plain

一覧表示系

s3内においてあるbucketをすべて表示する

aws S3 ls

S3内においてある特定のbucketの中身を表示する

aws s3 ls {bucketName}

ダウンロード系

S3上のファイルをlocal上のフォルダに落としてくる

aws s3 cp s3://{bucketName} {localFolderName} --recursive

アップロード系

local上のファイルをS3内においてある特定のbucketにアップロード

aws s3 cp {localFolderName} s3://{bucketName}  --recursive