さわらブログ

さわら(@xhiroga)の技術ブログ

20日間fish体験記

macOSのデフォルトのログインシェルがbashからzshになるってことで、せっかくなら予めzsh慣れておこう → いや、zshでなくてもいいよね?
ということでfishにしてみましたが...。

ちなみにこんな設定でやってます。
github.com

感想

メリット

・fishにしたことで、生産性意識の高い人の情報が自然と流れてくるようになった。
(例えばghq, peco, z, etc...) ・シンタックスハイライトが賢い!
・promptが関数でできてる思い切りが分かりやすくて好き。

デメリット

bash文法非互換なので、仕事用のシェルを検証するときにいちいちbashに切り替えが必要
・たまにVSCodeのコンソールの表示がバグる(超ダサフォントになる)
・nvmの設定がbashで書かれているので使えない...こういうの他にもありそう。 ・環境変数の設定をbashと共有するのがしんどい

使いこなせていないと感じるところ

・コマンド履歴が賢い、というかおせっかいに感じる。もっと慣れれば違いそう... ・POSIX互換の文法よりはスッキリしている...らしいけど、シェルってそんな毎日書くものでもないし多少文法おかしくてもいいじゃん...?

今後について

bash非互換はつらいので、互換性のある拡張をいれつつ、もしかしたらzshに移るかもしれません。
うーん。

自分的Dockerのユースケースをまとめてみた

ふだん雰囲気でDocker使っているのですが、もっと自由にDockerを使えるようになりたい!
ということで、自分的なDockerのユースケースを振り返ってまとめてみました。

1. リポジトリごとの開発環境の構築

リポジトリごとに開発で利用するPythonの環境を、Dockerを使って構築しています。

コマンド

`docker-compose run --rm python /bin/bash

version: '3'
services:
  python:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - ./src:/root/work

2. 開発用のデータベースの構築

command

(開発用のサーバーの起動前などに) docker-compose up -d dynamo

docker-compose.yml

version: '3'

services:
  dynamo:
    image: amazon/dynamodb-local:1.11.477
    ports:
      - "8001:8000"

3. ミドルウェアの実行

技術書典で出品するPDFファイルのビルドのために利用しています。 (Thanks for カウプラン機関極東支部 さん!)

コマンド

docker-compose run --rm review

docker-compose.yml

version: "3"
services:
  review:
    image:
      kauplan/review2.5
    volumes:
      - $PWD:/work
    entrypoint:
      /bin/bash -c "cd /work; rake pdf"

4. cliツールのバイナリを直接インストールする代わりにする

例えば jq のバイナリを直接ローカルに置かない。
alias jq="docker run -i --rm mbentley/jq"

jq以外にも、例えばβ版のcliツールを利用する場合なんかは安心して使えますね。

参考
hub.docker.com

反省

ブログを書くに当たり、改めてDockerについて学びがありました。

  • 基本的に docker-composeを利用すること。

  • docker-compose up には --build オプション、 docker-compose run には --rm オプションをつけること。
    ...しかし、どうして docker-compose run には --build オプションがないんだろう。一貫性が足りないよね。

github.com

  • Dockerの仕様として、ADD, COPYで取得したファイルのハッシュが代わっていたら、それ以降のRUNのキャッシュは利用されないこと(つまり、 package.json が変更されていれば npm install は再実行される)

個人のメールアドレスに届くGitHub・CircleCIの通知を会社のアドレスに転送する

justInCaseでは、リポジトリをBitBucketからGitHubに移行する計画があります。

そこで個人のGitHubアカウントを使って開発をしていますが、一つ問題が。
仕事のPRやビルドの失敗のメールが、個人のアドレスに流れてしまうのです。

GMailのメールの転送設定で解決できそうなので、やり方をメモしておきます。

1. 転送先のメールアドレスを設定

公式のガイドに従って特に躓かずに設定できました。

support.google.com

2. フィルタの作成

こちらも公式のガイドどおりに。
support.google.com

こんな感じのフィルタになりました。 f:id:hiroga_cc:20190727110931p:plain

以上、特別難しい手順はありませんが、誰かのお役に立てば幸いです。

ググって出てきたCognito UserPoolのベストプラクティスを雑にまとめる

(このブログは、 #技術書典7 で出展する「Cognito屋さん/ Cognito ユーザー移行入門(仮)」の下調べのために書いてます.)

タイトル通り、ググって出てきたCognito UserPoolのベストプラクティスを雑にまとめていきます。

Security / Best Practice for poolData (UserPoolId, ClientId) in a browser JS app

github.com

UserPoolIDとClientIDは、JSのコード内で公開していいの?という質問。
スレッドにある通り、これらの値は unauthenticated APIs のリクエストにしか使われないので大丈夫。

Cognito user pools, in my experience, are terrible to work with

www.reddit.com

ベストプラクティスじゃないけど...Cognito使うのしんどいよね、って話。
いっそ新しいサービス出したらいいんじゃない?って指摘には私も同意。
Cognito is a flawed product that should become redundant. AWS should either build a new service with a new name or build a backwards incompatible Cognito 2.0.

[レポート] サーバーレスアーキテクチャデザインパターンとベストプラクティス! #reinvent #ARC305

dev.classmethod.jp

たしかに、Cognito使いたい人ってAPI Gatewayを認証付きで提供したい人だよね。
1.一時的なAWS認証 or 2.UserPoolのトークン or 3.Lambdaオーソライザー。特に 1.と2. は混同しやすいのでは?

HOW TO USE NEW ADVANCED SECURITY FEATURES FOR AMAZON COGNITO USER POOLS

noise.getoto.net

せっかくだしMFAもちょっと触ってから本を書いたほうがいい気がしてきた

SaaS Identity and Isolation with Amazon Cognito on the AWS Cloud

https://aws-quickstart.s3.amazonaws.com/saas-identity-cognito/doc/saas-identity-and-isolation-with-cognito-on-the-aws-cloud.pdf

弊社(justInCase)のアーキテクチャじゃんこれ!!!知らずしてここにたどり着いたんだなあ...
CloudMapを使ってるとこだけが違う。

Are email addresses supposed to be case-sensitive?

https://forums.aws.amazon.com/forum.jspa?forumID=173&start=0

そうそう、メアドが大文字小文字違いで登録できちゃうんだよね。

「あとで読む」を読む - 2019-06-23

f:id:hiroga_cc:20190529163402p:plain

難民をテック人材へ、3団体協働のもと日本初「難民プログラミング道場」が今秋スタート | LoveTechMedia - ラブテックメディア - Part 2

ドイツに「ReDI School」という同じスタイルのプログラミングスクールがあるらしい。
素敵な取り組みだな、と思ってたらWELgeeってASACで名前見たことあるな。
プログラミング教室もパソコンの貸与も、他の団体と協力してやってる、ってのが素敵だなって思った。

speakerdeck.com WebAuthnについて概略をつかめた。
OAuthがクライアントから認可を分離したように、WebAuthnは認可サーバーから認証を分離した、って表現は正しいかな...? ちょっと思ったのは、もし人間の脳みそが超ハイスペックに拡張されていたら、サービスごとの秘密鍵を暗記&署名を暗算できるようになり、結果この仕組もいらないのかな?

aws.amazon.com

自分で考えて、責任を持って、実施までできる、という立場がスタートアップ。 良い表現...。

blog.cybozu.io カスタムリソースを考慮したことがなかったけどかなり便利かも。なんならCloudWatch LogsのSubscriptionをLambdaに後から追加する、とかもCDKじゃなくてこっちでOKでは?

その他

  • Googleのコード検索ツールの記事良かった。なるほど、自分の参考リポジトリにindex貼っておくのは賢いかも。あれ、ということは、自分のお気に入りの技術ドキュメントだけにindexを貼る、とかもやれば余裕なのか。
  • dockle試した。よかった。

「あとで読む」を読む5選@2019-06-13

f:id:hiroga_cc:20190529163402p:plain

note.mu DeNAめっちゃええ会社やん...

rfushimi.hatenablog.jp 「マネジメントになるのは昇進ではない」ほんとそれ。
一方で、経営者から評価されやすいのはやっぱりマネージャーじゃないの?対面にいるんだもの。そしたらお給料も自然と高くなってしまわない?

aws.amazon.comAPI Gatewayの認証タイプや統合タイプについて一番わかり易い資料
・WebSocketのAPIを一度作ってみたいので、これを使ってなにか作るかもしれない ・AWSサービスのAPI化って実はやったことない。ミニマムにサービスを作るときに便利そう

www.haconiwa-mag.com たしかにグレーのビニール傘はオシャレで使いたくなる。

devmart.jp 売れてるのかな?と思って過去の出品を見たらたしかに売れているものもある。
これは面白いな...!

「あとで読む」を読む @ 2019-06-03

f:id:hiroga_cc:20190529163402p:plain

フォトグラメトリで小笠原

スマホの複数の写真とWindowsの専用ソフトでできるらしい。

React Nativeのテストライブラリ選定

tech.kitchhike.com * グレーボックステストって初めて聞いたけど、要はブラックボックステストを、内部仕様に基づいて改良したものだと思えば良さそうだ。
* avaって初めて聞いた!いつもmochaばっかり使ってるから、次は使ってみようかしら。

Lambda LayersをCIでキャッシュした取り組み

dev.classmethod.jp * そもそもLamdba Layersについてようやくキャッチアップ。要するに、Lambdaの特定のパスに展開するオブジェクトを別途指定できるようだ。

微妙エンジニア

tkot.hatenablog.com "最新のサービスを使うことしか頭にない" サーセン!!!!!コスパもっと意識していこう

コンテナ運用のおすすめの方法

cloud.google.com * 便利なエンドポイントをどんどん生やそう!(メトリクスとかヘルスチェックとか)
* WebPageを作るときにも、本番ページにテスト用のページを追加しておいて、デバッグ時はそこにアクセスしてもらう、とか聞いたことがある。APIサーバーでも同じことか。

あなたの知らない詐欺グラフの世界

note.mu * 棒グラフとはその面積で意味をもたせるグラフです

SAMを通してCodeDeploy

dev.classmethod.jp 本格的なCIの構築ができる!というより、SAMだけでパッとCIまで構築できる!というのが強みと見た。

任意聴取の隠し撮り音声

* 2019年から取り調べの可視化が義務付けられるのをそもそも知らなかった * その対象が重大事件のみ、かつ強制捜査?に限られるのも知らなかった * 全部録音しろよ...

Web系エンジニア

ogihara-ryo.github.io 私の身の回りは、働き方の自由さより、将来起業する上でエンジニア通っておこう、って人が多い気がする。