読者です 読者をやめる 読者になる 読者になる

production.log

ピクスタ株式会社でエンジニアのマネージャーをやっている星直史のブログです。

Serverless Framework 1.10.2でAWS IAM変数(${cognito-identity.amazonaws.com:sub})を使用する場合の設定

概要

標題の通りですが、Serverless Framework 1.10.2において、serverless.ymlにAWS IAM変数(${cognito-identity.amazonaws.com:sub}など)を使用する場合、
フレームワークの挙動として${文字列}の値を設定した変数に置き換えようとする動きをするので、その挙動を変更し、IAM変数を使えるようにする方法を書きます。
※今回はcognito-identity.amazonaws.com:subに限定して書きますので、汎用的ではありません。

元のコード

provider:
  name: aws 
  runtime: nodejs6.10
  stage: dev 
  region: us-west-2
  iamRoleStatements:
    - Effect: "Allow"
      Action:
        - "s3:PutObject"
      Resource: "arn:aws:s3:::mybucket/${self:provider.stage}/${cognito-identity.amazonaws.com:sub}/*"

このような感じで、自分のcognito identityに紐づいたs3 bucketしか触らせないようにするIAM Roleを記述し、 sls deploy -vした場合、

  Serverless Error ---------------------------------------
 
     Invalid variable reference syntax for variable cognito-identity.amazonaws.com.
     You can only reference env vars, options, & files. You
     can check our docs for more info.

こんな感じで怒られます。 そんな変数ねーよって感じですね。

そこで、ここの処理をどうしているのか追っていったところ
variableSyntaxという名の、それっぽものがありました。

さらに調べると、providerブロックの直下にvariableSyntaxを記述すると、記述した値でオーバーライドされとのことでした。 正直正規表現で全てのパターンを網羅するの気合いがなかったので、cognitoに限定した正規表現を作りました。

修正前: variableSyntax: '\\${([ :a-zA-Z0-9._,\\-\\/\\(\\)]+?)}'
修正後: variableSyntax: "\\${([^cognito*+][ :a-zA-Z0-9._,\\-\\/\\(\\)]+?)}"

単純ですね。cognito*+だった場合は対象から除外しているだけです。

修正後のコード

provider:
  name: aws 
  variableSyntax: "\\${([^cognito*+][ :a-zA-Z0-9._,\\-\\/\\(\\)]+?)}"
  runtime: nodejs6.10
  stage: dev 
  region: us-west-2
  iamRoleStatements:
    - Effect: "Allow"
      Action:
        - "s3:PutObject"
      Resource: "arn:aws:s3:::mybucket/${self:provider.stage}/${cognito-identity.amazonaws.com:sub}/*"

これで、deployし、AWS マネジメントコンソールのIAM > Roles > Review Policyで確認しましょう。

f:id:watasihasitujidesu:20170412113554p:plain

意図した通りの挙動になっていますね。

羽田空港で一人開発合宿をしてきました

概要

最近新たにWebサービスを作ろうとしているのですが、ここ一ヶ月、毎週末自宅で缶詰になって開発を続けてきました。
一ヶ月も同じ環境で作業をしていると、どうしても気分転換がしたくなるので、どこか違う環境で集中して作業したいと思い、
羽田空港で開発合宿をすることにしました。

この記事では、一泊二日羽田空港で合宿しての感想を書いていきます。

他に候補はあったか?

もちろん他に候補はありました。レギュレーションは下記の通りです。

  • 一人で活動できるか
  • すぐに充電が確保できるか
  • すぐにご飯を調達できるか
  • ネットワークが安定していて、かつ十分に早いか
  • 一泊二日を想定した場合、宿泊料は十分安いか(10,000円以下)
  • 作業時間を確保できるか(遠すぎないか?)
  • 楽しそうか

ざっと考えた候補と結果をまとめると

作業場所 検討結果
開発合宿プランがある宿 そもそも一人だと予約できない。
温泉宿 料金が高い。もう少し安く済ませたい><
ビジネスホテル / デイリーユース アクティビティ的なことがない。絶対額では高くないが、割高に感じる。デイリユースの場合は作業時間を確保できなそう。
シェアオフィス 会社で作業するのと変わらなさそう。楽しめなさそう。非日常感がない。

という感じで最初から決まってました感は否めないですが、羽田空港に決めました。

どこが良かったか?

ワクワク感

f:id:watasihasitujidesu:20170408093348j:plain

朝早く出たわけですが、電車を待ってる間のワクワク感

f:id:watasihasitujidesu:20170408095939j:plain f:id:watasihasitujidesu:20170408100138j:plain

国内線ターミナル駅についたときのワクワク感

f:id:watasihasitujidesu:20170408100544j:plain

飛行機の時刻表のワクワク感

異常なまでワクワク感でした! うちの会社でも開発合宿を定期的に開催していますが、(自分が思う)必須項目として、非日常感は重要だと思います。 もう、この時点で満足感高い…。

ご飯がうまい!すぐに調達できる!

f:id:watasihasitujidesu:20170408102735j:plain f:id:watasihasitujidesu:20170408101516j:plain

1日目の朝食。 THE 日本の朝食。

f:id:watasihasitujidesu:20170408185647j:plain

1日目の夕食。 信州の蕎麦 + 蕎麦屋のカツ丼 + わさび漬け。 わさび漬け食べながら、「この状況で飲まないとかありえなく無いですか?」と思った。

f:id:watasihasitujidesu:20170409074215j:plain f:id:watasihasitujidesu:20170409074540j:plain

2日目の朝食。 ベンツとコラボしたエッグセレントという名の卵系料理がうまい店。 1日目は和食だったけど、2日目は洋食で決めたぜ!

f:id:watasihasitujidesu:20170409123949j:plain

2日目の昼食。 ロールキャベツ + メンチカツ + カニクリームコロッケ。 ロールキャベツが浸かってるクリームソース的なものがおいしかった。 すごく美味しかったんだけど、このとき、「色々な調味料使ってるんだから美味しいのって当たり前じゃね?その点、寿司ってやばくね?」と思いながら食べてた。

f:id:watasihasitujidesu:20170409181645j:plain

2日目の夕食。 ナポリタン。一緒についてきた味噌汁はしじみの味噌汁。和なのか洋なのかはっきりしろ!!うまいぞ!

という感じで、レストラン街があるので、食べることに困ることはありません。 また、大体の飲食店が食べログ3.4以上なので、食べログ厨のオレ歓喜。 あと、今回はおやつ制限をしていた故、完食はできなかったんですが、
空港内に、お土産フロアがあるんですが、バラ売りをしてるところも多く、いつもと違ったおやつを格安で手に入れることもできると思います。

食に関しては最高だと思った。

電源ある!ネット早い!椅子が良い感じ!

f:id:watasihasitujidesu:20170408151547j:plain f:id:watasihasitujidesu:20170408151534j:plain f:id:watasihasitujidesu:20170409111027j:plain f:id:watasihasitujidesu:20170409125745j:plain

結構良い感じの椅子と場所が至るところにあります! また、基本、空港にいる人は飛行機待ちの人が多いはずなので、 椅子の取り合いになることはありません。

場所によっては、飛行機の発着が見れる場所があったりします。 ただし、ここは人気スポットっぽいので席は取り合いです。 たぶん、客層も観光のために来た人が多いからですね。

f:id:watasihasitujidesu:20170409055816j:plain f:id:watasihasitujidesu:20170408152228j:plain f:id:watasihasitujidesu:20170409111647j:plain f:id:watasihasitujidesu:20170409112145j:plain

※靴下はだれかの忘れ物

電源も至る所にあります。 感覚的には、100mに一箇所、パソコンブースなるものがあり、無料で電源が使えます。 また、基本的に空港内のカフェには電源があります。 旅行者がメイン客だからあたりまえっちゃあたりまえだけど、開発合宿をしに来てる身としてはありがたい。

ネットワークについては、Free Wi-fiが空港全体で使えます。 そして、まぁまぁ早いです。 「まぁまぁ」としているのは、出発ロビーや、おみやげフロアなど、人が混雑しているところは繋がりにくくなります。(おそらく電波が干渉しているから?) ただ、それ以外の場所ではサクサク動いてました。youtubeとかニコニコで音楽聴きながら作業できるので、合格だと思います。

1つだけ注意なのは、ネットーワーク300分に1度切れるので再接続しなければなりません。 とはいえ、再接続すると、再度300分使えるようになります。 めんどくさいので一言で言うと、ずっと無料で使えます

宿泊施設も安いし快適

f:id:watasihasitujidesu:20170410103802j:plain

First Cabinというカプセルホテルに宿泊しました。 第一ターミナルの到着ロビー内にあるので、めちゃくちゃ近いです。3分歩いたらつきました。

普通のプランと、+ 1000円でちょっと広くなるプランがあるのですが、 写真はちょっと広くなるプランです。6,600円くらいです。 カプセルホテル初心者の自分としては、結構快適で、おっ、これならホテルよりえぇやんけと思いました。

とはいえ、普通のプランは、本当にシングルベットが1つあって荷物置き場も20cm * 100cmくらいのスペースしかないので、いわゆるカプセルホテルって感じです。

1,000円プラスしてもカプセルホテルなのには変わりないので、 他の宿泊客のいびき、物音、行動音は普通に聞こえます。耳栓は必須です。ないと死ぬと思います。

First Cabinは歯ブラシ、タオル、館内着は無料です。 大浴場にはシャンプー、コンディショナー、ボディソープ、フェイスウォッシュもあるのと、ドライヤー、化粧水とかもあります。 要は、出張で来た人が困らないような最低限のものはある感じです。

開発合宿で来た自分は何も困りませんでした。 逆に、それらを持って来てしまったので、荷物が多くなってしまいました。

いちゃもんつけるとしたら、 大浴場にサウナがありません。水風呂もありません。 オレの自律神経をどうしてくれるんだと思いましたが、これは自分しか思わないだろうと思います。

あとはFirst Cabin内は羽田空港のWi-fiが使えず、専用ネットワークになるのですが、 これがクソ重いです。使い物になりません。ポケットWi-fiを持参するか、ギリギリまで空港内で活動するか、すぐ寝るかの選択になると思います。

用意した方が良いもの / しなくても良いもの。

結構重装備できましたが、必要なもの不要なものの紹介です。

用意した方が良いもの

空港内のネットワークは割と安定してますが、一部繋がらない箇所もあります。カプセルホテルとか、人が混雑するところとか。 自分は念のためポケットWi-fiを持って来たので、そこらへん不自由なく過ごせました。
なくてもいけるっちゃいけるけど、あると便利なので、挙げました。

カプセルホテルに泊まるなら耳栓は必須でしょう。無いと騒音で寝れないと思います。
また、日中作業するときも、基本は人が往来するところで作業するので、音が気になる人は使用をおすすめします。

用意しなくても良かったもの

First Cabinで用意してくれたものは全て不要だと思います。

  • 歯ブラシ
  • タオル
  • パジャマ
  • 石鹸
  • 化粧水

持ってくるものは、PC、電源、着替え、スマホ、耳栓、ポケットWi-fiくらい?

未確認なこと

二日間、羽田空港内で過ごしたわけですが、確認できなかったこと、試してみたいことがいくつかあります。

ラウンジの使用

空港内には6つくらいラウンジがあります。 そのうち4つは保安所を通過した後にあります。つまり、開発合宿で使えるのは2箇所だけです。 その二箇所は提携カード + 航空券があると無料になります。 逆に、なければ、1,000円くらい払うことになります。

今回はラウンジで作業することができなかったので、次回は使ってみたいです。

宿泊施設を温泉施設にしてみる

羽田空港近隣には温泉施設が点在するのですが、その施設から羽田空港へ無料シャトルバスが出ているようです。

例えば

  • お台場・大江戸温泉物語
  • 天然温泉平和島

などなど。

雑魚寝になるので、質はだいぶ悪くなるのと、シャトルバスに乗って移動するのが若干だるいですが、 3,500円程度で済むので、検討はしたいです。

国際線ターミナル

今回は2日間、国内線ターミナルで過ごしました。

  • 1日目: 国内線第1ターミナル
  • 2日目: 国内線第2ターミナル

残るは国際線ターミナルなのですが、ここには全く行けてません。 次回はそこで作業してみたいです。

まとめ

それなりに低価格で一泊二日の開発合宿ができることがわかりました。

今回は宿泊費と同じくらい食費にかけてしまったので、結果的に温泉宿に行くのと変わらないくらい費用になりましたが、 期間中6回の食事が全て違う内容の食事かつ、食べログ3.5以上の店だったので、個人的には満足しています。

また、開発に必要な電源やネットワークは余裕で確保できるのは驚きました。 念のためポケットWi-fiがあると安心といったところです。 今回の開発合宿は2日間で20時間くらい開発に充てることができました。時間だけみると、何気に家のときよりも多くの時間を使えているのにも驚きでした。

羽田空港に行くことで、非日常感を味わえましたし、十分開発を楽しめたので目的は達成できました。 我ながら変なことやってるなぁ〜と思いましたが、気分を替えたい人にはおすすめです!

次は成田空港かなぁ〜〜〜

シリコンバレー式 自分を変える 最強の食事のランニングコストを極限まで落とす方法 コーヒー編の更新

概要

以前の記事(シリコンバレー式 自分を変える 最強の食事のランニングコストを極限まで落とす方法)で全体的にコストを下げる方法を書きましたが、今回はコーヒー編でアップデートがあるので、その紹介をします。

前回紹介したスペシャリティーコーヒー

前回紹介した記事では1kg 3,126円 => 一杯15gあたり45円前後となります。

今回見つけたコーヒー

今回見つけたコーヒーはこちらです。

もちろんスペシャリティーコーヒーです。 品質管理を厳格にしているスペシャリティコーヒーでなければならないのは変わりません。

価格も1.3kg 2,268円です。量が多くなっている上に価格まで安い(!) 一杯15gあたり26円前後になります。

まとめ

これまで紹介した小川珈琲, パオコーヒー, 澤井珈琲を比較してみます。

名前 一杯あたりの価格
小川珈琲 75円
パオコーヒー 45円
澤井珈琲 26円

今回したコーヒーは小川珈琲と比較すると、66%も安くなります。

自分が実践しているタスク管理の方法を紹介

背景

会社のメンバーが、タイムマネジメント(個人のタスクの管理とか優先度付け)の方法について困っていたので、自分がどうしているのかまとめてみようと思った。

オレ流タイムマネジメントの概要

自分の脳内メモリは有限であり

  • シングルスレッドで動きたい(作業中は他のことを考えたくない)
  • 作業中のタスク以外のことは、なるべく自分の頭から隔離させたい(他に任せられるならブン投げたい)
  • 新たなタスクがきた場合のルールが明確である
  • タスクスイッチする時のルールが明確である

という思想の基、辿り着いたやりかた。

用意するもの

Trello 個人レベルならこれで十分やろ!

実際の手法

0. Trelloに下記Listを作成する

  • あとでやる
  • 次にやること
  • 急いでやるべきこと
  • 誰かにお願いしている / 待っているもの
  • 特定の日付にやるもの

1. タスクが降ってきたら迷わずTrelloに突っ込む。

  • その際、どのListにいれるべきかを考えてる。
  • Listの中にすでに存在する場合は、線形探索で優先度を決める。

2. 実際タスクの実行の優先度

2-1. 各リスト(横軸)の優先順位

特定の日付にやるもの >= 急いでやるべきこと >>>>>>>>>>>>>>>>>> 次にやること >>>> あとでやること

といった感じ。

特定の日付にやるもののうち、その特定の日付が開始日であって、締め切りまで期間があるのであれば、急いでやるべきことや、次にやることに移し替えている。 また、誰かにお願いしている / 待っているもの についても同様。自分にボールが移ったら優先度を決定する。

あとでやることに関しては、自己研鑽系のものが多い。

  • 個人プロジェクトを進める
  • 読書
  • ブログ書く
  • 英語学習

などなど。 また、あとでやることを意識して実行しないと、目の前のタスクをただこなすマンになってしまい、思い描いた成長につながらない可能性があるので、気をつける。

2-1-1. 誰かにお願いしている / 待っているもの について補足

誰かにお願いする系のタスクは、なるべく早く、相手に渡すことを意識する。 なぜなら、クリティカル・パスを短くすることに努めるべきだからだ。 自分の場合、相手が待っているタスクのボールを持っている場合、高確率で優先度高にして、処理をしている。

2-2. リスト内(縦軸)の優先順位

必ず上から順番にタスクを実行する。
これをしないと、どっからやろう….って考えてしまうので、タスクをスイッチするときに無駄な判断をしてしまうからだ。

3. その他

上司から依頼されたタスクについては、期待値のすり合わせをする。 ここでいう期待は、納期の話。いつまでに欲しいかを確認する。 そうすることで

上司「これよろしく〜(今日中に終わんだろ)」
自分「わかったやで〜(ヌルゲーだし、明日でええやろ)」

== 定時を迎えたころ ==
上司「終わった?」
自分「えっ」
上司「えっ」

みたいな事がなくなるからだ。

あと、上司からの依頼はなるべく、こまめに進捗の速報を伝える。

マネージャーを経験したことがある人ならわかると思うけど、相手に納期付きのタスクを任せた場合、何日経っても音沙汰がないと、とても不安になるからだ。
※特に、新人、アルバイトさん、一緒に仕事をしてから間もない相手などなど…

自分がタスクをお願いされたときも必ずこれを意識している。

まとめ

やりかたはこれだけ。
考え方としては、タスクがふってきたら、外部(Trello)に流し、無駄なことを考えないようにする。
そのために、カテゴリと優先度を決まったフレームワークで処理することによって、脳内メモリ消費を抑える。
あとは、仕事でも私生活でも同じツールとかやりかたを使うと早く身につくし、効率的に動くことができる。

ファイル内の改行を置換するコマンド

2ファイル間で重複する / しない 行を出力する方法
こちらの操作をするときに、セットで、ファイル内の改行を置換するコマンドを調べることがあるので、
メモ程度に残しておく。

$ cat hogehoge.text
1
2
3
4
5

上記のファイルを1,2,3,4,5と出力したい場合のコマンド

cat hogehoge.text | sed -e :loop -e 'N; $!b loop' -e 's/\n/ /g'

2ファイル間で重複する / しない 行を出力する方法

タイトルの通り、何気に結構使う処理だけど都度調べているからメモとして残す。

a.text と b.textが以下の内容の時、1と 2,3,4,5を出力したい場合

$ cat a.text
1
2
3
4
5

$ cat b.text
2
3
4
5

$ sort {a,b}.text | uniq -u # ユニークな行を出力
$ sort {a,b}.text | uniq -d # 重複行を出力

Fitbit Charge HR™を購入して一年経過したので使用感をまとめてみる

概要

Fitbit Charge HR™を購入して一年経過したので使用感などをまとめてみようと思います。

Fitbit Charge HR™とは

ワイヤレス心拍計 + 活動量計リストバンド ChargeHRで生活のリズムを感じよう。手首に巻くだけで継続的・自動的に心拍数とアクティビティをトラッキング。心拍数は1日中記録。トレーニング中のより正確な消費カロリーを知り、目標トレーニング強度の達成をサポート。トレーニング時間を最大限に活用できる。歩数・距離・消費カロリー・アクティブな時間・階段を使って上った階数を記録。OLEDディスプレイで目標への進捗状況や同期中のスマートフォンへの着信をリアルタイムで確認。一日の終わりには睡眠中の動きを自動で計測。朝にはサイレントアラーム(バイブレーション)でやさしく起こしてくれる。ワイヤレスでスマートフォンやパソコンと同期して、目標達成へのモチベーションをアップ。健康な体は心から。

ごっそり引用してきましたが、Fitbitをつけると下記のことがトラッキングされます。

  • 時間
  • ストップウォッチ
  • 脈拍
  • 消費カロリー
  • 歩数
  • 歩行距離
  • 登った階段の段数
  • 睡眠傾向

またダッシュボードでは下記の項目などを可視化してくれます。

  • 摂取カロリー
  • 睡眠の傾向
  • 運動量推移
  • 摂取水分量

ここは良かった事

1年使用して良かったところを紹介していきます。

電池の持ちが良い

購入時に色々なウェアラブルバイスと悩んだのですが、電池の持ちが良いのはかなり大きいと思います。 公式ではフル充電から5日間使用可能とありますが、だいたいあっています。 これは1年経過した後もバッテリーの劣化などは感じられず、気になったら充電というレベルです。

また、5日間はお風呂以外の時間は寝ている時間も含めて装着できるので、めんどくさがりには最適だと感じました。

ストップウォッチが結構便利

Fitbitについているボタンを長押しするとストップウォッチになるのですが、この機能を使うシーンが結構ありました。 スポーツをしている時はもちろんですが、 たとえば、ミーティング時に「3分考える時間をとります」というシーンでも使えるので、結構便利でした。

1万歩歩くと謎の達成感がある

1万歩歩くと、バイブレーション機能が作動し、ブルブル震えて"Congratulations"と表示されます。 ただそれだけの機能ですが、結構嬉しかったりしますw
ちなみに、1年間で1日の最高歩数は3万歩でした。

ここは使ってるうちにやらなくなった事

購入当初はやっていたのですが、次第に使わなくなった機能などを紹介します。

摂取カロリーの入力

ダッシュボードで食べたものを入力すると摂取カロリーがわかるので、消費カロリーと合わせて、カロリー収支を教えてくれる機能があるのですが、 食べたものを入力するのが物凄くめんどくさくてやめてしまいました。

食品データベースや、入力補助機能自体は結構優秀なのですが、 さすがに1日に食べる食品数が多すぎて途中で入力を諦めてしまいました。

同様に、水分量の入力もめんどくさくてやめてしまいました。

Fitbit装着による運動のモチベーションが上がらない

最初はモチベーションがあがってました。 運動開始時にストップウォッチスタートして、心拍数とか計りながらランニングする...とか。

が、数ヶ月もすると、電気毛布にくるまりながら、ポテチ食べてネットをする毎日になってしまいました。

購入時の運動系機能に対する動機が興味でしかなかったので、今はぶっちゃけ時計の機能しか使っていません。 次に腕時計を買うなら機械式とかのアナログ時計を買います。

ここは悪かった

1年間使っていれば、悪い面も見えてきたのでそれも紹介します。

壊れた

購入から11ヶ月目にいきなり壊れました。 5分に1回再起動し、時間が同期されず、1時間に7分もズレが生じる有様でした。

ただ、サポートに連絡したところ1時間後に新品を送ってくれる旨の連絡がきました。 今手元にあるやつはそのままで良いとのこと! しかも、最新バージョンを送ってくれるとのこと!

サポートは神対応でした!

外装が剥がれてくる

ウェアラブルバイスだと思いますが、基盤を隠蔽するためのシリコン素材が剥がれてきます。 単純に経年劣化だと思いますが、知り合いのFitbitも同様の問題があったので、1年でこれは結構チープな作りなのだなぁと思いました。

瞬間接着剤を使えば元通り問題なく使えるのですが...。

睡眠のトラッキングがあてにならない

自分は寝返りをよくうつタイプなのかわからないのですが、 実際は7時間寝ていても毎晩3時間程度しか眠れてないようなトラッキングになってしまいます。

こればかりはよくわからないのですが、「よく眠れていますか?」とFitbitから聞かれると、余計な御世話だ!!と思ってしまいます。

装着してなくても消費するカロリー

Fitbitは消費カロリーもトラッキングしてくれます。 購入当初は、脈拍、歩数、階段、移動距離から消費カロリーを算出してくれているのだと心底感動していたのですが、 ある日、装着を忘れて1日を過ごし、帰ってきてから同期をしたら、装着していないのにもかかわらず、1,800kcal消費したことになっていました。 基礎代謝の分かもしれませんが、これにはがっかりしました。

まとめ

振り返ってみると、ネガティブな印象の方が多いなぁといった感じです。 運動系のトラッキング機能について、興味本位で買ったのですが、あっという間に飽きてしまいました。 おそらく、どのウェアラブルバイスを使ったとしても、すぐ飽きるのではないかと思います。

ただ、トラッキングの精度があまり良くないと感じたのと、作りがチープで購入1年以内に壊れているので、 長くは使えない事を念頭に置いた方が良いかと思います。