botchy hack note

TypeScript、Ruby、Golang とか Macとかの備忘録です.間違いがあるとご指摘くださると嬉しいです.

VS Code の拡張機能がプロキシでインストールできないときの対処法

f:id:bokken31:20170613233337p:plain

こんにちは bokken (@_bokken) です。

今回は、プロキシに阻まれて VS Code の拡張機能がインストールできない問題への一時的な対処法をご紹介したと思います。

続きを読む

Go で簡単にターミナルから AWS コンソールにアクセスできるコマンドを作った

f:id:bokken31:20170510001805p:plain

こんにちは、TypeScript と VS Code、 AWS が好きな bokken (@_bokken) です。

今回はターミナルから AWS コンソールに楽にアクセスできる awsb (AWS browse) というコマンドを作ったので紹介します。

荒削りですがコマンドは Github で公開しています。

github.com

目次

背景

AWS を利用して開発をしているときに確認のためにブラウザを開いて AWS コンソールで確認する作業が手間になっていました。

サービスの選択が面倒なだけでなく開発先がデフォルトリージョンでない場合、リージョン変更の必要もあるためブラウザ遷移の時間がかかり非常に非効率です。

AWS コンソールの遷移は時間がかかりますし、遷移回数が多くなればなるほど開発効率が下がってしまいます。 (AWS のコンソールの遷移がやたら重い気がするのは気のせいでしょうか)

作ったもの

作ったコマンドではサービス名とリージョンを指定するとターミナルからすぐに対象のサービスのコンソール画面に移動できます

使用例は下記です。

$ awsb <service> [region (default: us-west-2)]

デモは下図です。

f:id:bokken31:20170510000950g:plain

インストー

Go を導入していただく必要があるのですが、導入していれば Windows, Linux, Mac 問わず下記コマンドで awsb をインストールできます。

go get -u github.com/negibokken/awsb

オプション

また、 筆者は移動対象のサービスの名称やリージョン名と地域の対応を忘れがちなので、$ awsb --service-list$ awsb --region-list で移動対象のサービスやリージョンの一覧を確認できます。

$ awsb --service-list

acm
apigateway
appstream
...
$ awsb --region-list

ap-northeast-1  Asia Pacific (Tokyo)
ap-northeast-2  Asia Pacific (Seoul)
ap-south-1      Asia Pacific (Mumbai)
...

メリット

このコマンドを利用すると

  1. ターミナルからブラウザの遷移の手間
  2. AWS コンソール上でのサービス変更の手間
  3. AWS コンソール上でのリージョン変更の手間

から解放されます。

まとめ

今回、ターミナルからAWSコンソールへ楽にアクセスするための awsb というコマンドを紹介しました。

本コマンドは随時アップデートしていく予定ですが、MR、Issues の登録は大歓迎です。

筆者自身 Go は習得途中であるため、ご指摘等もどしどしいただけると嬉しいです。

それでは、本コマンドが少しでも AWS を利用した開発の助けになれば幸いです。

良かったら TypeScript 関連や AWS 関連のつぶやきをしているので @_bokken をフォローしてみてください。

AWS Lambda のファンクションを TypeScript で作る! 実践編

f:id:bokken31:20170503123927p:plain

こんにちは、TypeScript と VS Code と AWS が好きな bokken (@_bokken) です。

以前、簡単に AWS Lambda のファンクションを TypeScript で作る方法を紹介しましたが、 今回は少し発展して、TypeScript でインターフェースをしっかりと定義しつつ、AWS については Amazon SNS と CloudFormation を使います。

実装する内容は前回と同様、WEB API 経由で天気の情報を取得するものです。ただし今回は毎朝 7:00 に天気を Amazon SNS を使ってメールで通知してくれる Lambda ファンクションを開発しましょう。

さらに CloudFormation を使って AWS Lambda や Amazon SNS などのリソースの設定を自動化するところまでが目標です。 (AWS CLI で Cloudformation を使う予定なので、前回の記事を参考に自分のアカウントに CloudFormation 実行権限を付けておいてください)

サンプルコードは Github に上げているので参照してみてください。

続きを読む

AWS IAM のポリシーをアカウントにアタッチする

f:id:bokken31:20170510000033p:plain

こんにちは、TypeScript と VS Code、 AWS が好きな bokken (@_bokken) です。

AWS CLI を使っているときに、下記のように AccessDenied エラーが出る事があります。

$ aws iam create-policy --policy-name test1 --policy-document file://policy.json

An error occurred (AccessDenied) when calling the CreatePolicy operation: User: arn:aws:iam::000000000000:user/bokken is not authorized to perform: iam:CreatePolicy on resource: policy test1

このエラーは自分のアカウントに権限が無いから起こっています。

AWS は権限周りの設定がやや手間になっているので、以降ではどうやって自分のアカウントに権限を付加するのかを紹介していきます。

続きを読む

Visual Studio Code で統合端末を毎回起動し直してしまう問題の解法

結論

早く解法を知りたい方のために、結論を最初に書くと、”新しい統合端末の作成” と ”統合端末の切り替え” のキーボードショートカットがバッティングしているのでキーボードショートカットを変更しましょう。

以下になんで起こってるのか、具体的にどうやってキーボードショートカットを変更するのか紹介していきます。

問題の内容

Mac 環境において、 Visual Studio Code で端末ペインを開こうと ⌘ + ` を押すたびに新しい端末を起動してしまいます。

下記の図にある統合ターミナルをショートカットキー*1で開くと、一度目は下図のようにデフォルト動作をして端末のペイン(下部のピンクの枠)を起動します。

f:id:bokken31:20170413234811p:plain

しかし、二度目に ⌘ + ` を押すとターミナルがもう一つ起動されてしまいます。(枠内の番号が2になりました)

f:id:bokken31:20170413235137p:plain

これでは、端末起動の時間がかかりますし、無駄なプロセスを起動してしまうことになります。

問題の解法

これは、⌘ + ⇧ + ` が ”新しい統合端末の作成” のショートカットキーだから起こっている問題です。

JIS キーボードは ` を入力するために シフト(⇧)を押す必要があって ⌘ + ` を入力しているつもりが、 ⌘ + ⇧ + ` が入力されていた。つまり、デフォルトでキーバインディングがバッティングしている状態だったということです。

US キーボード的にはバッティングしていないので、US キーボード使いの人たちには問題なく使えていたようです。

[US キーボード配列参考:http://blog.jnito.com/entry/2012/10/10/074739]

回避策

そのため、“新しい統合端末の作成” か ”統合端末の切り替え” のキーボードショートカットを変更すれば回避可能です。

Mac の場合だと、⌘ + K をおした後に ⌘ + S を押せば下図のようにキーボードショートカットの画面に遷移できるので、その後に"統合端末"で検索。 鉛筆のマークが出てくるので、そこからショートカットキーを設定しなおせば OK です。

f:id:bokken31:20170414000156p:plain

以降はもう ⌘ + ` を押しても新しい端末が起動しなくなっているはずです。

これでコーディングしつつ、キーボードショートカットで素早く端末へ移動することができますね。

それでは、良い Visual Studio Code ライフをお送りください!

*1:図ではメニューバーを出してますが

AWS Lambda のファンクションを TypeScript で作る! 入門編

f:id:bokken31:20170201224015p:plain

今回は TypeScript シリーズ第2弾。 AWS Lambda のファンクションを TypeScript 作成する方法について。

最近、サーバーレス化、Micro Services 化の流れで、AWS Lambda を使用する機会が増えてきてるように思います。

煩わしいサーバの管理から解放されてサービスのみに注力できるのはかなり魅力的。今回は Node.js と TypeScript を使って、Lambda ファンクションを作成する方法について解説していきます。

目標は AWS Lambda を使って CloudWatch Logs (ログ) に 天気予報を出力するところまで。

天気予報の取得には お天気Webサービス仕様 - Weather Hacks - livedoor 天気情報 を利用します。実際に取ってくるのはサンプルにある福岡県久留米の天気情報です。(http://weather.livedoor.com/forecast/webservice/json/v1?city=400040)

続きを読む

5 分で少し分かった気になる TypeScript 入門

TypeScript について簡単にまとめてみる。

TypeScript とは

Microsoft 社が開発した JavaScript に静的型付けを付与した言語。 JavaScript として実行するには TypeScript をコンパイル(トランスパイル) する。

TypeScript は基本的に JavaScript と同じような構文だが、微妙に違う。 JavaScript の構文は以下のような感じ。

'use strict';
function putStrNum(str, num) {
  console.log(str, num);
}

var str = 'hello world';
var num = 10;
putStrNum(str, num);

TypeScript は下記のように書ける。

'use strict';
function putStrNum(str: string, num: number): void {
  console.log(str, num);
}

var str: string = 'hello world';
var num: number = 10;
putStrNum(str, num);

TypeScript の方にはstringnumbervoid などの型が変数宣言、引数や戻り値として記述されている。

一見すると手間が増えてしまっただけのように見える。実際、型を定義していく作業は大変だったりする。*1

どうして我々には型が必要か

よく言われるのは静的チェックが可能だということ。

実際に TypeScript を Visual Studio Code など*2で記述していると引数として与える変数が違っていると下線を引いて警告を出してくれる。

f:id:bokken31:20170118224159p:plain

さらには強力な補完機能も型定義があることによって実現されている。

下記の3行目のように自前の型 TestType を定義して、print という Function型を持っているオブジェクトだと定義しておけば、実際に testTestType型だと宣言すると補完機能が使えるようになる。

f:id:bokken31:20170118223501p:plain

これは test の型を明確に定義していない any などでは下図のように補完候補は表示されない。*3

f:id:bokken31:20170118223840p:plain

これらは大規模なアプリーケーション開発においては極めて大きなメリットになる。実装作業やデバッグ作業が遥かに楽になることは間違いない。 もちろん小規模なアプリーケーションにおいても有効。

まとめ

  • TypeScript は JavaScript に静的型付けを付与した言語

  • 今回紹介した TypeScript の利点は下記の2つ

    • 静的型チェックによるバグの防止
    • 補完候補の表示による効率化

*1:ライブラリには型定義ファイルが提供されている事が多い

*2:もちろんプラグインを使えば vimAtom などでも

*3:もし表示する方法があったら教えて欲しえてください…!