君は心理学者なのか?

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

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

【告知】1本5分のpodcast、ナノキャスはじめます。

f:id:karoten512:20181028002244j:plain

この間ポッドキャストに初めて出た。とても楽しかった。

monorazi.hateblo.jp

だから自分でもやろうと決めた。

自分で言うのもなんですが、かなり特殊なポッドキャストになる予定。

現時点での構成はこんな感じ。

  • 1本5分きり
  • 僕が喋りっぱなし
  • 内容はフィクションとノンフィクションの間
  • 全7回構成(7回目がいわゆる「最終回」)

とても楽しみ。

ものラジパーソナリティのお二人、

今回は出演の機会をくださりありがとうございました。

それではお楽しみにね。

標高3000メートルから先は、異世界だった。そして僕らはそこにいた。

絶対、絶対にこれ以上、登りたくない。もう散々だ。
午後8時、雨嵐吹き荒れる山荘、標高3000m近くで僕はそう思った。

 

話は入山1日目に巻き戻る。

 

入山1日目。

 

僕は登山を完全に舐めていた。

ハイキングみたいなものだと完全に勘違いしていた。楽しく森林浴しながらお散歩。
お花畑の頭の中で僕がスキップしていた。

冷静に考えれば、
山専用のカッパを買ったりゴツい山靴を買ったりしている時点で、
疑問に思うべきだったと思う。

 

入山2日目。

 

入山前に買ったものが全部必要なものだとわかったのは、
最初ハイキングコースだった道が徐々に岩だらけになったり、
雨が降って来て予想以上に山が寒いと知ってからだった。

そこからは先は酷かった。

雨で視界が悪い。

今自分がどれくらいの高さにいるのかわからない。

わからないのに、
切り立つ崖のような壁(僕にはそう見える)を登らなくてはならない。
手を離したら確実に死ぬ鎖(僕にはそう見える)を掴んでさらに高度を上げなくてはならない。

眼鏡が雨で曇って何も見えず、
見えるものは目の前の岩、
信じられるのも目の前の岩しかなくて、
いつこの崖が終わるかもわからない、
いつここから落ちて死ぬかもわからない、
死ぬ死ぬ死ぬ、
そう思いながら必死に登ってようやく小屋の屋根が見えた。

 

僕はものすごく安堵した。
そこが穂高山荘だった。
助かった、とも思った。


全然助かってなどいなかった。


雨で視界が悪い中、山荘の向こうに薄っすらと見えたのは岩。岩。岩。
岩が積み重なって塊を作っていた。
それはただの絶壁だった。
3000m近くにある山荘よりも標高が上だった。
上の方はぼんやりしていて全然見えなかった。

そう。山荘のすぐ近くには「奥穂高岳」があった。
そして明日は、
あの絶壁を登って、
3190mの奥穂高の山頂に登らなければならなかった。

 

入山3日目。

 

本来なら今日、奥穂高山頂に登る予定だったが天候のため先延ばしになった。

その日1日、穂高山荘は嵐に巻き込まれたのだ。

風と雨。

標高が高くなると、風は気まぐれを通り越してやけくそのようにその風向きを変える。

風向きが変わると雨の向きも変わる。

雨が窓を打つ。
その一瞬後に屋根を打つ。
今度は反対側の窓を打ってすぐまた屋根を打つ。

山頂付近の自然の変化はしりとりじゃない。
一つ前の状態が全く違う状態に変わるのだ。

 
雲。

3メートル先は何も見えない。昼間なのに。
視界がほぼ白なので本当に昼間なのかも分からない。
これは霧?
これは霧なんかじゃない。
雲だ。
穂高山荘は雲に完全に包まれてしまっていた。
そしてその中で嵐が吹き荒れている。

まるで竜の巣が晴れる前のラピュタのようだった。

山荘の中から外を見る。
僕が覗いている窓から3m離れたところを雲が駆け抜けていく。
雲がすぐそばを駆け抜ける。

見たことない、恐ろしい光景だった。


僕が今知っている世界は山荘の中と外。
外はただただ乳白色と灰色の中間の色に満たされていて、
何一つ物が存在しないように見える。


この山荘は本当に地面に接しているのだろうか?
いつのまにか風に飛ばされて空を舞っているのではないだろうか?


それくらい、何も見えなかった。
ただただ怖かった。


明日は山頂まで登らなければならない。あの絶壁を登って。

 

僕は完全に死刑執行前の囚人だった。

なんでこんなに辛いのに、人は山に登るのか。
わからなくなって、その日は山荘にあった本「山の天気」を読んでいた。


その日の夜は眠れなかった。

 

絶対、絶対にこれ以上、登りたくない。もう散々だ。
午後8時、雨嵐吹き荒れる山荘、標高3000m近くで僕はそう思った。

 

「明日は登頂だ。3時には起きるぞ」
その言葉が僕には死刑宣告に聞こえた。


そして入山4日目。

 

今日、僕は死ぬかもしれない。


明日山頂にたどり着かず、僕だけ死ぬんだ。
3000メートル転がって、その途中で死ぬんだ。

そんな未来しか見えなかった。


終わり来る未来を想像し尽くし、ただひたすらに憂う。
眠れなかった。そのままついに3時が来た。

一緒に山を登っている友人を起こす。
彼はすぐ起きた。


起きてすぐ、彼は言った。

 

「星が」

 

目線は窓。僕はつられて窓を見た。

 

そこには星座が見えた。

違う。そこに星座が「居た」。


オリオン座。それがオリオン座であることが一瞬でわかった。
星は本当に何万光年も離れていたのだろうか。
ゼロ距離のような、圧倒的な存在感を放つその星座がそこに「居た」。
星々をつなぐ線が見えた、気がした。

夏の夜明け前だった。
上半身を起こしてすぐ覗けるくらい近い窓から、オリオン座は僕らを見ていた。
僕らが起きるずっと前から、オリオン座は僕らを見ていたのだ。



僕は思わず身を乗り出した。
そして呟いた。

 

「天の河?」

本当に、天の河だった。


天頂に、薄いミルクを夜空にこぼしたような跡。 
目を凝らすとそれがいくつもの星で構成されていることが分かった。
教科書でしか見たことがない天の河が本当に、本当にあった。
嘘のようだった。本当に嘘かもしれなかった。

 

でも。

「僕は今、初めて銀河を見ている」


そう思った。

 
昨日、一歩先も見えないような嵐があった。
そして今日、そのあと気味が悪いくらい晴れた。
今にも落ちて来そうな近くに星があって、銀河まで見えて。

 

もう、この世の終わりかもしれない。そう僕は思った。

僕らはそのまま、無言で支度した。

 

みな、何を天秤にかけているのだろう。

登頂と命だろうか。
僕は登頂したことがないから比べるものがない。
僕にとって登頂は質量ゼロだ。


だから「命じゃない側」に天秤が傾くことなんてありえない。
みんな頭がおかしい。

なぜ、人は山に登るのか。
まだ僕にはわからなかった。


――でも、登ったらその答えがもしかしたら分かるかもしれなかった。
星空を見て、そう思った。 

 


すべての支度が整い、外に出る。
僕は一番近くの岩に、軍手をつけた手をかけた。

そこから先のことはあまり覚えていない。

岩。
つかんで体を上げる。

ありえないくらいの高度に自分がいることがわかった。
でも下をみない。

岩。
つかんで体を上げる。


岩。
岩。
鎖。
はしご。

永遠とも続くような「登る」という作業。

岩。
手をかける。
体を上げる。

 

そして、

 

僕は

 

それを

 

見た。

 

 

f:id:karoten512:20180820010640j:plain

 

金色に輝く雲海が目の前に広がっていた。
足元から雲が湧き上がって来ていた。
360度の大展望だった。
地平線がどこまでも広がり、円く見えた。
地球の一部をコンパスで切り取ったらこんな感じなのだろうと思った。

 

これらの言葉が

 

圧倒的に

 

圧倒的に

 

無意味だった。

 

ただただ目の前には世界があった。
そして、それを表現することができる言葉は、この世界になかった。

それほどの光景が目の前に広がっていた。知らずに口が開いていた。


雲海は比喩なんかじゃない。

 

本当に雲の海があって、山という島が点々とあって。
海だって風で波がおきる、だから雲海だって風で波がおきるのだ。
雲は波のように刻一刻と姿を変えていく、
それに呼応して山は見え隠れしその姿を変える。

 

信じられなかった。

 

こんな場所が、まだ世界にあったなんて。

 

なぜ山に登るのか。
命と何を天秤にかけたのか。

 

その瞬間、それらの答えがありえない質量となって腑に落ちた。

僕はこれを見に来たのか。
皆これを見に来ていたのか。

 

この感情を、一生忘れたくないと、僕は思った。

死神が予備校にいた。彼はりんごばかり食べていた。

f:id:karoten512:20180809003222p:plain

予備校にいた、死神の話。

僕が通っていた予備校には死神がいた。

その死神は毎日りんごばかり食べていた。

みんな知ってると思うけど、死神はりんごしか食べないんだ。

死神は昼休みになると、予備校の地下にあるリフレッシュルームに降りてくる。

そしてハンカチから一つのりんごを取り出し、両手で大事そうにもって、まるかじりする。

死神が、毎日昼休みにりんごをまるかじりしている

僕はそれをいつも、不思議そうに見ていた。

なんでりんごなんだろう。

ずっと不思議だった。

でもりんごをまるかじりする彼は、死神のくせになんだか神々しく見えて、

少し離れたところからそっと見るくらいしかできなかった。

神々しく見えるのには理由があった。実は彼にはもう一つ名があったのだ。

ザビエル。

それは明らかに彼の髪型に由来していた。

彼は御年50歳。

予備校には再受験組が割りといたので珍しいことではない。しかし、

ザビエルという死神が、毎日昼休みにりんごをまるかじりしている

こうなってくると一気に珍しくなってくる。

時がたってセンター試験前。

そんな彼は、みながそろそろセンター試験に向けてエンジンに火を入れ始める9月、

予備校からいなくなった。

ここで僕はようやくわかった。

そうか。本当は、彼は人間だったんだ。

知恵の実りんご)を食べてしまったせいで、

楽園(予備校)を追い出されてしまったんだね。

いつも人間は、禁忌を犯して追放される。

僕もいつか、大学に合格するという禁忌を犯して予備校を追放されるのだろう。

そんなことを思って、僕は禁忌を犯すべくセンター試験の勉強に没頭した。

ザビエルという死神が、毎日昼休みにりんごを食べていたが、センター試験を目前にして消えた

これで話は終わったはずだった。

でも真相は全然違った。

後ほど僕は友人から聞いた。

死神は、りんごを食べたから楽園追放されたわけではなかった。

別の禁忌を犯したのだ。

死神は婚活をしていた。

後から聞いた話だ。死神は受験のために予備校にきていたのではなかった。

予備校で婚活をしていたらしい。

予備校で婚活。新しい。

彼はめぼしい女性がいると突然近づき、こう言った。

「友達からどうですか?」

どうですか?、と言われましても。

こんなことを繰り返しているうちに、いろんな生徒から被害届がだされ、

ついには楽園を追放されてしまったらしい。

うちの予備校は3つ目の楽園だった。

彼は他の予備校でも同じことを繰り返していた。

そのたびに楽園を追い出され、予備校を転々として、

うちの予備校にたどり着いたようだった。うちは3つ目の楽園だった。

結局、この楽園には見切りをつけ、次の楽園を目指したのだろう。

「ザビエルという死神が、

 毎日昼休みにりんごをまるかじりしていたけど実は婚活もしていて、

 ついには追い出されてしまったけど、次の楽園に移動しただけだった」

盛り沢山すぎやしないか。

きっと

今でも彼は、生涯の伴侶をもとめて次の楽園を目指している。

僕は、彼が幸せになってくれたらいいなと思っている。

予備校は牢獄だった〜浪人時代予備校にいた「7浪さん」の話〜

f:id:karoten512:20180805163207j:plain

僕は大学に入るまで、3年かかった

3年。長かった。

受験勉強を始めたのが高3の夏。

それなりに勉強をしたのだが結局志望校には入れなかった。

結局僕が入ったのは予備校。そこで1年、そして2年といた。

よく「浪人時代は本当に苦しかった」と言っている人がいて、

「1浪でもつらい、2浪なんて頭がおかしくなる」なんて感想をくれたりするが、

僕は予備校生活が楽しかった。

そう。予備校には本当に色んな人がいた。アメリカもびっくりの人種のサラダボウルだ。

聞こえが良いが、悪くいうとただの魔窟だった。

七浪さん

僕が通っていた予備校には「リフレッシュルーム」と呼ばれているところがあり、

自販機があって、4人座れるでかい丸テーブルがいくつもあって、謎のカウンターがあった。

そこは予備校生が唯一くつろげるオアシス的場所だった。

毎日、大量の英単語・数式・いつ使うかわからない物理法則・その他諸々を詰め込みまくって、

脳が消化不良を起こしてゲロを吐いている、そんな生活を送っているのだ。

死刑囚だって最後はタバコを吸わせてもらえる、

だから予備校生だってリフレッシュしたっていいはずだ。

そんなリフレッシュルームの雰囲気を完全に破壊していたのが

「七浪さん」だった。

七浪さんとその取り巻き

坊主。目にはサングラス。壁を蹴ったら突き刺さりそうなほど先が尖っている靴。

手首には高そうな時計。そして意外に低い身長。

彼はいつも肩を怒らせて歩いているので謎にデカく見えた。

彼の朝は遅い。少し日が傾き始めた15時頃、リフレッシュルームに現れる。

七浪「う〜〜〜〜〜〜〜〜〜〜〜〜〜す

取り巻き達「お勤めご苦労さまッス!!

ここは獄中か?

獄中ヒエラルキー

脱獄モノ映画でみたことある。

長くいるやつほど偉いという獄中ヒエラルキーが、そこに存在していた。

僕は気づいてしまった。

予備校は入学ではない。投獄なのだ。

彼はもう7年も勤めている。懲役何年かしらないがきっともうシャバには戻れないだろう。

3浪や4浪はまだ社会復帰できる可能性が残っている。

僕みたいな1浪はお話にならない。まだ社会に片足を突っ込んでいるただの軽犯罪者だ。

もちろん、素行が悪ければ刑期はもっと伸びる可能性がある。ここではそういうルールなのだ。

彼は勝ち組だった

そんな彼は、リフレッシュルームでいつもポーカーをやっていた。

また彼は既婚だった。子供もいた。

そしてレクサスに乗ってた。

資金はどこから出てるんだと思ったが、親が金持ちらしい。

…酒、女、ギャンブル。

これらすべてが満ち満ちた医学部受験生が、確かに僕の身近に存在していた。

彼はいわゆる「勝ち組」だった。

七浪さんは消えた

七浪さんはセンター試験に近づくに連れ見かけなくなった。

きっと、レクサスを乗り回しているのだろう。

そして時が流れた

センター試験を命からがらこえて、二次試験で頭が真っ白になり、

3点の差で入学を逃した僕はめでたく2浪目に突入した。

授業が終わり、僕はリフレッシュルームにいった。

新入りはどんな面構えをしているのか見るために

長い予備校生活で、僕も完全な「投獄ヒエラルキー」の一員になってしまっていたのだ。

フレッシュな面構えを見ながら、

「生きの良いのが入ってきた…俺達のシゴキにどれだけ耐えられるか見ものだな」

なんてうそぶいていると、全然フレッシュじゃないやつがいた。

そいつは、もちろん坊主だった

命名変更

八浪さんだった。

……こうして彼の名前はincrementされていく。

今もどこかで、静かにincrementされているのかもしれない。